summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/3proxy/_metadata/in.1443.00 (renamed from data/zanekills.com/make.sh)0
l---------data/3proxy/_metadata/maintainer2
-rw-r--r--data/_/make.sh4
-rw-r--r--data/_apr/_metadata/in.1443.000
l---------data/_apr/_metadata/maintainer2
-rw-r--r--data/_apr/_metadata/version2
-rw-r--r--data/_apr/apr-1.3.3.tar.bz2bin947648 -> 0 bytes
-rw-r--r--data/_apr/apr-1.6.3.tar.bz2bin0 -> 854100 bytes
-rw-r--r--data/_apr/make.sh2
-rw-r--r--data/_apr/offsetof.diff4
l---------data/_apt/_metadata/berkeleydb.dep1
l---------data/_apt/_metadata/bzip2.dep1
l---------data/_apt/_metadata/curl.dep1
l---------data/_apt/_metadata/dpkg.dep1
l---------data/_apt/_metadata/gnupg.dep1
l---------data/_apt/_metadata/gzip.dep1
-rw-r--r--data/_apt/_metadata/in.1443.000
-rw-r--r--data/_apt/_metadata/license142
l---------data/_apt/_metadata/lz4.dep1
l---------data/_apt/_metadata/lzma.dep1
l---------data/_apt/_metadata/maintainer1
-rw-r--r--data/_apt/_metadata/notes2
-rw-r--r--data/_apt/_metadata/section1
l---------data/_apt/_metadata/sed.dep (renamed from data/gzip/_metadata/sed.dep)0
-rw-r--r--data/_apt/_metadata/tags1
-rw-r--r--data/_apt/_metadata/version1
-rw-r--r--data/_apt/apt-nito.tgzbin0 -> 38054572 bytes
-rw-r--r--data/_apt/cftype.diff11
-rw-r--r--data/_apt/date-errors.diff12
-rw-r--r--data/_apt/make.sh32
-rw-r--r--data/_apt/sandbox-errors.diff10
-rw-r--r--data/_apt/sha1.diff12
l---------data/_apt1.4/_metadata/berkeleydb.dep1
l---------data/_apt1.4/_metadata/bzip2.dep1
l---------data/_apt1.4/_metadata/curl.dep1
l---------data/_apt1.4/_metadata/dpkg.dep1
l---------data/_apt1.4/_metadata/gnupg.dep1
l---------data/_apt1.4/_metadata/gzip.dep1
-rw-r--r--data/_apt1.4/_metadata/in.1443.000
-rw-r--r--data/_apt1.4/_metadata/license142
l---------data/_apt1.4/_metadata/lz4.dep1
l---------data/_apt1.4/_metadata/lzma.dep1
l---------data/_apt1.4/_metadata/maintainer1
-rw-r--r--data/_apt1.4/_metadata/notes2
-rw-r--r--data/_apt1.4/_metadata/section1
l---------data/_apt1.4/_metadata/sed.dep (renamed from data/lzma/_metadata/sed.dep)0
-rw-r--r--data/_apt1.4/_metadata/tags1
-rw-r--r--data/_apt1.4/_metadata/version1
-rw-r--r--data/_apt1.4/apt-iphone.tar.lzbin0 -> 2135441 bytes
-rw-r--r--data/_apt1.4/make.sh33
-rw-r--r--data/_apt7/apt-get.diff20
-rw-r--r--data/_apt7/cfnetwork.diff5
-rw-r--r--data/_apt7/deblistparser.diff27
-rw-r--r--data/_apt7/make.sh4
-rw-r--r--data/_coreutils/_metadata/in.1443.000
l---------data/_coreutils/_metadata/maintainer2
-rw-r--r--data/_coreutils/_metadata/version2
-rw-r--r--data/_coreutils/coreutils-7.4.tar.gzbin9708910 -> 0 bytes
-rw-r--r--data/_coreutils/coreutils-8.30.tar.xzbin0 -> 5359532 bytes
-rw-r--r--data/_coreutils/make.sh8
-rw-r--r--data/_coreutils/man.diff33
-rw-r--r--data/_coreutils/su.diff556
-rw-r--r--data/_coreutils/zzz_platformize.diff54
-rw-r--r--data/_dpkg/_metadata/description1
l---------data/_dpkg/_metadata/gzip.dep1
-rw-r--r--data/_dpkg/_metadata/homepage1
-rw-r--r--data/_dpkg/_metadata/in.1443.000
l---------data/_dpkg/_metadata/license1
l---------data/_dpkg/_metadata/lzma.dep1
l---------data/_dpkg/_metadata/maintainer1
-rw-r--r--data/_dpkg/_metadata/name1
l---------data/_dpkg/_metadata/ncurses.dep (renamed from data/gnupg/_metadata/ncurses.dep)0
-rw-r--r--data/_dpkg/_metadata/predepends_1
-rw-r--r--data/_dpkg/_metadata/priority1
-rw-r--r--data/_dpkg/_metadata/role (renamed from data/pam/_metadata/role)0
-rw-r--r--data/_dpkg/_metadata/section1
-rw-r--r--data/_dpkg/_metadata/tags (renamed from data/perl_/_metadata/tags)0
-rw-r--r--data/_dpkg/_metadata/version1
l---------data/_dpkg/_metadata/xz.dep1
-rw-r--r--data/_dpkg/_metadata/zlib1
-rw-r--r--data/_dpkg/blankline.diff43
-rw-r--r--data/_dpkg/checkpath.diff (renamed from data/dpkg/checkpath.diff)0
-rw-r--r--data/_dpkg/dpkg_1.18.25.tar.xzbin0 -> 4541640 bytes
-rw-r--r--data/_dpkg/extrainst.diff (renamed from data/dpkg/extrainst.diff)0
-rw-r--r--data/_dpkg/libdirperl.diff20
-rw-r--r--data/_dpkg/long_file.diff13
-rw-r--r--data/_dpkg/lzma.diff64
-rw-r--r--data/_dpkg/make.sh9
-rw-r--r--data/_dpkg/nullptr.diff79
-rw-r--r--data/_dpkg/runcmd.diff37
-rw-r--r--data/_dpkg/telesphoreo.diff12
-rw-r--r--data/_dpkg/tolerance.diff37
-rw-r--r--data/_googletest/_metadata/description1
-rw-r--r--data/_googletest/_metadata/in.1443.000
l---------data/_googletest/_metadata/license1
l---------data/_googletest/_metadata/maintainer1
-rw-r--r--data/_googletest/_metadata/priority (renamed from data/boost_/_metadata/priority)0
-rw-r--r--data/_googletest/_metadata/role (renamed from data/boost_/_metadata/role)0
-rw-r--r--data/_googletest/_metadata/section (renamed from data/boost_/_metadata/section)0
-rw-r--r--data/_googletest/_metadata/tags (renamed from data/boost_/_metadata/tags)0
-rw-r--r--data/_googletest/_metadata/version1
-rw-r--r--data/_googletest/googletest-1.8.1.tar.gzbin0 -> 992298 bytes
-rw-r--r--data/_googletest/make.sh10
-rw-r--r--data/_libxml2/_metadata/in.1443.000
l---------data/_libxml2/_metadata/maintainer2
-rw-r--r--data/_libxml2/make.sh3
-rw-r--r--data/_network-cmds/_metadata/in.1443.000
l---------data/_network-cmds/_metadata/maintainer2
-rw-r--r--data/_network-cmds/_metadata/version2
-rw-r--r--data/_network-cmds/make.sh18
-rw-r--r--data/_network-cmds/network_cmds-307.0.1.tar.gzbin480118 -> 0 bytes
-rw-r--r--data/_network-cmds/network_cmds-543.tar.gzbin0 -> 5048190 bytes
-rw-r--r--data/_openssl0.9.8/Makefile739
-rw-r--r--data/_openssl0.9.8/_metadata/description1
-rw-r--r--data/_openssl0.9.8/_metadata/in.1443.000
-rw-r--r--data/_openssl0.9.8/_metadata/license127
l---------data/_openssl0.9.8/_metadata/maintainer (renamed from data/boost_/_metadata/maintainer)0
-rw-r--r--data/_openssl0.9.8/_metadata/name1
-rw-r--r--data/_openssl0.9.8/_metadata/priority (renamed from data/pam/_metadata/priority)0
-rw-r--r--data/_openssl0.9.8/_metadata/role (renamed from data/gnupth/_metadata/role)0
-rw-r--r--data/_openssl0.9.8/_metadata/section1
-rw-r--r--data/_openssl0.9.8/_metadata/tags (renamed from data/gnupth/_metadata/tags)0
-rw-r--r--data/_openssl0.9.8/_metadata/version1
-rw-r--r--data/_openssl0.9.8/engines-path.diff54
-rw-r--r--data/_openssl0.9.8/iphoneos.diff31
-rw-r--r--data/_openssl0.9.8/make.sh8
-rw-r--r--data/_openssl0.9.8/openssl-0.9.8zh.tar.gzbin0 -> 3818524 bytes
-rw-r--r--data/_openssl0.9.8/parallel.diff14
-rw-r--r--data/_openssl0.9.8/timestamp.diff (renamed from data/openssl/timestamp.diff)0
-rw-r--r--data/_openssl1.0/_metadata/depends1
-rw-r--r--data/_openssl1.0/_metadata/description1
-rw-r--r--data/_openssl1.0/_metadata/in.1443.000
-rw-r--r--data/_openssl1.0/_metadata/license127
l---------data/_openssl1.0/_metadata/maintainer1
-rw-r--r--data/_openssl1.0/_metadata/name1
-rw-r--r--data/_openssl1.0/_metadata/priority1
-rw-r--r--data/_openssl1.0/_metadata/role1
-rw-r--r--data/_openssl1.0/_metadata/section1
-rw-r--r--data/_openssl1.0/_metadata/tags (renamed from data/pam/_metadata/tags)0
-rw-r--r--data/_openssl1.0/_metadata/version1
-rw-r--r--data/_openssl1.0/engines-path.diff83
-rw-r--r--data/_openssl1.0/iphoneos.diff30
-rw-r--r--data/_openssl1.0/make.sh11
-rw-r--r--data/_openssl1.0/openssl-1.0.2q.tar.gzbin0 -> 5345604 bytes
-rw-r--r--data/_sqlite3/_metadata/in.1443.000
l---------data/_sqlite3/_metadata/maintainer2
-rw-r--r--data/_sqlite3/_metadata/version2
-rw-r--r--data/_sqlite3/framework.diff16
-rw-r--r--data/_sqlite3/host.diff32
-rw-r--r--data/_sqlite3/make.sh4
-rw-r--r--data/_sqlite3/misuse.diff53
-rw-r--r--data/_sqlite3/sqlite-3.5.9.tar.gzbin2201083 -> 0 bytes
-rw-r--r--data/_sqlite3/sqlite-autoconf-3240000.tar.gzbin0 -> 2699252 bytes
-rw-r--r--data/_sqlite3/tempdir.diff54
-rw-r--r--data/adv-cmds/_metadata/in.1443.000
l---------data/adv-cmds/_metadata/maintainer2
-rw-r--r--data/adv-cmds/adv_cmds-119.tar.gzbin320282 -> 0 bytes
-rw-r--r--data/adv-cmds/adv_cmds-172.tar.gzbin0 -> 148418 bytes
-rw-r--r--data/adv-cmds/make.sh17
-rw-r--r--data/afpfs-ng/_metadata/in.1443.000
-rw-r--r--data/afpfs-ng/extern.diff12
-rw-r--r--data/afpfs-ng/make.sh2
-rw-r--r--data/afpfs-ng/nullreturn.diff24
-rw-r--r--data/apptapptools/_metadata/in.1443.000
l---------data/apptapptools/_metadata/maintainer2
-rw-r--r--data/apr-lib/_metadata/in.1443.000
-rw-r--r--data/apr-util/_metadata/in.1443.000
l---------data/apr-util/_metadata/maintainer2
-rw-r--r--data/apr-util/_metadata/version2
-rw-r--r--data/apr-util/apr-util-1.2.12.tar.gzbin668292 -> 0 bytes
-rw-r--r--data/apr-util/apr-util-1.6.1.tar.bz2bin0 -> 428595 bytes
-rw-r--r--data/apr-util/make.sh7
-rw-r--r--data/apr/_metadata/in.1443.000
l---------data/apt-key/_metadata/_apt1.4.dep1
-rw-r--r--data/apt-key/_metadata/breaks1
-rw-r--r--data/apt-key/_metadata/conflicts1
l---------data/apt-key/_metadata/coreutils.dep1
-rw-r--r--data/apt-key/_metadata/description1
-rw-r--r--data/apt-key/_metadata/in.1443.000
l---------data/apt-key/_metadata/libapt.dep1
l---------data/apt-key/_metadata/license1
l---------data/apt-key/_metadata/maintainer1
-rw-r--r--data/apt-key/_metadata/name1
-rw-r--r--data/apt-key/_metadata/priority1
-rw-r--r--data/apt-key/_metadata/replaces1
-rw-r--r--data/apt-key/_metadata/role (renamed from data/perl_/_metadata/role)0
l---------data/apt-key/_metadata/section1
-rw-r--r--data/apt-key/_metadata/tags1
l---------data/apt-key/_metadata/version1
-rw-r--r--data/apt-key/make.sh2
-rw-r--r--data/apt-rdepends/_metadata/description1
-rw-r--r--data/apt-rdepends/_metadata/in.1443.000
-rw-r--r--data/apt-rdepends/_metadata/in.550.580
l---------data/apt-rdepends/_metadata/libapt-pkg-perl.dep1
l---------data/apt-rdepends/_metadata/license1
l---------data/apt-rdepends/_metadata/maintainer1
-rw-r--r--data/apt-rdepends/_metadata/priority (renamed from data/easywakeup.net/_metadata/priority)0
-rw-r--r--data/apt-rdepends/_metadata/role1
-rw-r--r--data/apt-rdepends/_metadata/section (renamed from data/perl_/_metadata/section)0
-rw-r--r--data/apt-rdepends/_metadata/tags1
-rw-r--r--data/apt-rdepends/_metadata/version1
-rw-r--r--data/apt-rdepends/apt-rdepends-1.3.0.tar.bz2bin0 -> 13420 bytes
-rw-r--r--data/apt-rdepends/make.sh2
-rw-r--r--data/apt-rdepends/makefile.diff30
-rw-r--r--data/apt/_metadata/depends2
-rw-r--r--data/apt/_metadata/in.1443.000
l---------data/apt/_metadata/maintainer2
-rw-r--r--data/apt/_metadata/name2
l---------data/apt1.4/_metadata/_apt1.4.dep1
l---------data/apt1.4/_metadata/apt-key.dep1
l---------data/apt1.4/_metadata/berkeleydb.dep1
-rw-r--r--data/apt1.4/_metadata/conflicts1
-rw-r--r--data/apt1.4/_metadata/description1
-rw-r--r--data/apt1.4/_metadata/in.1443.000
l---------data/apt1.4/_metadata/libapt.dep1
l---------data/apt1.4/_metadata/libapt.ver.iphoneos-arm1
l---------data/apt1.4/_metadata/license1
l---------data/apt1.4/_metadata/maintainer1
-rw-r--r--data/apt1.4/_metadata/name1
-rw-r--r--data/apt1.4/_metadata/priority1
-rw-r--r--data/apt1.4/_metadata/role1
l---------data/apt1.4/_metadata/section1
-rw-r--r--data/apt1.4/_metadata/tags1
l---------data/apt1.4/_metadata/version1
-rw-r--r--data/apt1.4/make.sh3
-rw-r--r--data/apt7-lib/_metadata/conflicts2
-rw-r--r--data/apt7-lib/_metadata/priority2
-rw-r--r--data/apt7-lib/make.sh5
l---------data/aptitude/_metadata/_googletest.dep1
l---------data/aptitude/_metadata/apt7-lib.dep1
l---------data/aptitude/_metadata/boost.dep1
-rw-r--r--data/aptitude/_metadata/in.1443.000
l---------data/aptitude/_metadata/libapt.dep1
l---------data/aptitude/_metadata/librpmatch.dep1
l---------data/aptitude/_metadata/libxapian.dep1
-rw-r--r--data/aptitude/_metadata/version2
-rw-r--r--data/aptitude/aptitude_0.4.11.11.orig.tar.gzbin6162554 -> 0 bytes
-rw-r--r--data/aptitude/aptitude_0.8.10.orig.tar.xzbin0 -> 4714076 bytes
-rw-r--r--data/aptitude/build.diff32
-rw-r--r--data/aptitude/dqueue.diff16
-rw-r--r--data/aptitude/gmock.diff34
-rw-r--r--data/aptitude/intl.diff36
-rw-r--r--data/aptitude/make.sh4
-rw-r--r--data/aptitude/namespace.diff22
-rw-r--r--data/aptitude/pkg_columnizer.diff24
-rw-r--r--data/aptitude/stringbuf.diff12
-rw-r--r--data/aptitude/timestamp.diff14
-rw-r--r--data/aptitude/turbulence.diff12
-rw-r--r--data/aptitude/wtf.diff65
-rw-r--r--data/aspell/_metadata/in.1443.000
l---------data/aspell/_metadata/maintainer2
-rw-r--r--data/aspell/_metadata/version2
-rw-r--r--data/aspell/aspell-0.60.6.1.tar.gzbin0 -> 1878163 bytes
-rw-r--r--data/aspell/aspell-0.60.6.tar.gzbin1777930 -> 0 bytes
-rw-r--r--data/aspell/make.sh1
-rw-r--r--data/aspell/redclaration.diff19
-rw-r--r--data/autoconf/_metadata/in.1443.000
l---------data/autoconf/_metadata/maintainer2
-rw-r--r--data/autoconf/_metadata/version2
-rw-r--r--data/autoconf/autoconf-2.63.tar.gzbin1562665 -> 0 bytes
-rw-r--r--data/autoconf/autoconf-2.69.tar.xzbin0 -> 1214744 bytes
-rw-r--r--data/automake/_metadata/in.1443.000
l---------data/automake/_metadata/maintainer2
-rw-r--r--data/automake/_metadata/version2
-rw-r--r--data/automake/automake-1.10.2.tar.gzbin1232374 -> 0 bytes
-rw-r--r--data/automake/automake-1.16.1.tar.xzbin0 -> 1534936 bytes
-rw-r--r--data/autossh/_metadata/in.1443.000
l---------data/autossh/_metadata/maintainer2
-rw-r--r--data/base/_metadata/in.1443.000
l---------data/base/_metadata/maintainer2
-rw-r--r--data/base/make.sh2
-rw-r--r--data/bash/_metadata/in.1443.000
l---------data/bash/_metadata/maintainer2
-rwxr-xr-xdata/bash/_metadata/postinst17
-rwxr-xr-xdata/bash/_metadata/prerm25
-rw-r--r--data/bash/_metadata/readline.ver.iphoneos-arm2
-rw-r--r--data/bash/_metadata/version2
-rw-r--r--data/bash/bash-4.0.tar.gzbin6230779 -> 0 bytes
-rw-r--r--data/bash/bash-5.0.tar.gzbin0 -> 10135110 bytes
-rw-r--r--data/bash/bash40-001162
-rw-r--r--data/bash/bash40-00243
-rw-r--r--data/bash/bash40-00370
-rw-r--r--data/bash/bash40-00447
-rw-r--r--data/bash/bash40-00563
-rw-r--r--data/bash/bash40-00643
-rw-r--r--data/bash/bash40-007263
-rw-r--r--data/bash/bash40-00849
-rw-r--r--data/bash/bash40-00961
-rw-r--r--data/bash/bash40-01063
-rw-r--r--data/bash/bash40-01149
-rw-r--r--data/bash/bash40-01247
-rw-r--r--data/bash/bash40-013153
-rw-r--r--data/bash/bash40-014113
-rw-r--r--data/bash/bash40-01584
-rw-r--r--data/bash/bash40-016104
-rw-r--r--data/bash/bash40-01747
-rw-r--r--data/bash/bash40-01878
-rw-r--r--data/bash/bash40-019125
-rw-r--r--data/bash/bash40-02083
-rw-r--r--data/bash/bash40-02148
-rw-r--r--data/bash/bash40-02248
-rw-r--r--data/bash/bash40-02362
-rw-r--r--data/bash/bash40-024112
-rw-r--r--data/bash/bash40-025104
-rw-r--r--data/bash/bash40-02656
-rw-r--r--data/bash/bash40-02767
-rw-r--r--data/bash/bash40-028172
-rw-r--r--data/bash/bash40-029106
-rw-r--r--data/bash/bash40-03064
-rw-r--r--data/bash/bash40-03162
-rw-r--r--data/bash/bash40-03246
-rw-r--r--data/bash/bash40-03350
-rw-r--r--data/bash/bash40-03459
-rw-r--r--data/bash/bash40-03562
-rw-r--r--data/bash/bash40-03690
-rw-r--r--data/bash/bash40-03760
-rw-r--r--data/bash/bash40-03856
-rw-r--r--data/bash/bash40-039104
-rw-r--r--data/bash/bash40-04043
-rw-r--r--data/bash/bash40-041217
-rw-r--r--data/bash/bash40-042147
-rw-r--r--data/bash/bash40-04359
-rw-r--r--data/bash/bash40-044140
-rw-r--r--data/bash/bash50-001166
-rw-r--r--data/bash/bash50-002113
-rw-r--r--data/bash/bash50-003239
-rw-r--r--data/bash/make.sh8
-rw-r--r--data/bash/shebang.diff12
-rw-r--r--data/basic-cmds/_metadata/in.1443.000
l---------data/basic-cmds/_metadata/maintainer2
-rw-r--r--data/bc/_metadata/in.1443.000
l---------data/bc/_metadata/maintainer2
-rw-r--r--data/berkeleydb/_metadata/in.1443.000
l---------data/berkeleydb/_metadata/maintainer2
-rw-r--r--data/berkeleydb/_metadata/version2
-rw-r--r--data/berkeleydb/case.diff31
-rw-r--r--data/berkeleydb/db-4.6.21.tar.gzbin11881885 -> 0 bytes
-rw-r--r--data/berkeleydb/db-6.2.32.tar.gzbin0 -> 45342417 bytes
-rw-r--r--data/berkeleydb/make.sh4
-rw-r--r--data/bind/_metadata/in.1443.000
l---------data/bind/_metadata/libssl1.0.dep1
l---------data/bind/_metadata/maintainer2
l---------data/bind/_metadata/openssl.dep1
l---------data/bind/_metadata/readline.dep1
-rw-r--r--data/bind/_metadata/version2
-rw-r--r--data/bind/bind-9.11.5.tar.gzbin0 -> 8810710 bytes
-rw-r--r--data/bind/bind-9.4.2.tar.gzbin6574042 -> 0 bytes
-rw-r--r--data/bind/make.sh4
-rw-r--r--data/bind/timestamp.diff15
-rw-r--r--data/bison/_metadata/in.1443.000
l---------data/bison/_metadata/maintainer2
-rw-r--r--data/bison/_metadata/version2
-rw-r--r--data/bison/bison-2.4.1.tar.bz2bin1467784 -> 0 bytes
-rw-r--r--data/bison/bison-3.0.5.tar.xzbin0 -> 1954868 bytes
-rw-r--r--data/bison/make.sh2
-rw-r--r--data/bitchx/_metadata/homepage1
-rw-r--r--data/bitchx/_metadata/in.1443.000
l---------data/bitchx/_metadata/maintainer2
-rw-r--r--data/bitchx/_metadata/version2
-rw-r--r--data/bitchx/bitchx-1.2.1.tar.gzbin0 -> 2549182 bytes
-rw-r--r--data/bitchx/ircii-pana-1.1-final.tar.gzbin2532476 -> 0 bytes
-rw-r--r--data/bitchx/make.sh4
-rw-r--r--data/bitchx/mdns.diff25
-rw-r--r--data/bitchx/port.diff72
-rw-r--r--data/boost/_metadata/description (renamed from data/boost_/_metadata/description)0
-rw-r--r--data/boost/_metadata/homepage (renamed from data/boost_/_metadata/homepage)0
-rw-r--r--data/boost/_metadata/in.1443.000
-rw-r--r--data/boost/_metadata/license (renamed from data/boost_/_metadata/license)0
l---------data/boost/_metadata/maintainer1
-rw-r--r--data/boost/_metadata/name (renamed from data/boost_/_metadata/name)0
-rw-r--r--data/boost/_metadata/priority (renamed from data/freecoder.org/_metadata/priority)0
-rw-r--r--data/boost/_metadata/role1
-rw-r--r--data/boost/_metadata/section (renamed from data/gnupth/_metadata/section)0
-rw-r--r--data/boost/_metadata/tags1
-rw-r--r--data/boost/_metadata/version1
-rw-r--r--data/boost/boost_1_68_0.tar.bz2bin0 -> 92155315 bytes
-rw-r--r--data/boost/make.sh12
-rw-r--r--data/boost_/_metadata/version1
-rw-r--r--data/boost_/boost_1_34_1.tar.gzbin16017741 -> 0 bytes
-rw-r--r--data/boost_/make.sh12
-rw-r--r--data/boost_/port.diff162
-rw-r--r--data/bootstrap-cmds/_metadata/in.1443.000
l---------data/bootstrap-cmds/_metadata/maintainer2
-rw-r--r--data/bootstrap-cmds/arm.diff2
-rw-r--r--data/bsdiff/_metadata/in.1443.000
-rw-r--r--data/bzip2/_metadata/in.1443.000
l---------data/bzip2/_metadata/maintainer2
-rw-r--r--data/bzip2/_metadata/version2
-rw-r--r--data/bzip2/bzip2-1.0.5.tar.gzbin841402 -> 0 bytes
-rw-r--r--data/bzip2/bzip2-1.0.6.tar.gzbin0 -> 782025 bytes
-rw-r--r--data/class-dump/_metadata/in.1443.000
l---------data/class-dump/_metadata/maintainer2
-rw-r--r--data/classpath/_metadata/in.1443.000
l---------data/classpath/_metadata/maintainer2
-rw-r--r--data/connect.c/_metadata/in.1443.000
l---------data/connect.c/_metadata/maintainer2
-rw-r--r--data/coreutils-bin/_metadata/in.1443.000
-rw-r--r--data/coreutils/_metadata/in.1443.000
-rw-r--r--data/cpanminus/App-cpanminus-1.7044.tar.gzbin0 -> 316368 bytes
-rw-r--r--data/cpanminus/_metadata/description1
-rw-r--r--data/cpanminus/_metadata/in.1443.000
-rw-r--r--data/cpanminus/_metadata/license (renamed from data/perl_/_metadata/license)0
l---------data/cpanminus/_metadata/maintainer1
-rw-r--r--data/cpanminus/_metadata/name1
l---------data/cpanminus/_metadata/perl.dep1
-rw-r--r--data/cpanminus/_metadata/priority (renamed from data/gnupth/_metadata/priority)0
-rw-r--r--data/cpanminus/_metadata/role1
-rw-r--r--data/cpanminus/_metadata/section1
-rw-r--r--data/cpanminus/_metadata/tags1
-rw-r--r--data/cpanminus/_metadata/version1
-rw-r--r--data/cpanminus/make.sh7
-rw-r--r--data/cpio/_metadata/in.1443.000
l---------data/cpio/_metadata/maintainer2
-rw-r--r--data/cpio/_metadata/version2
-rw-r--r--data/cpio/cpio-2.12.tar.bz2bin0 -> 1258605 bytes
-rw-r--r--data/cpio/cpio-2.9.tar.gzbin977105 -> 0 bytes
-rw-r--r--data/cpio/make.sh2
-rw-r--r--data/cpio/progname.diff14
-rw-r--r--data/cpio/static.diff64
-rw-r--r--data/csu/_metadata/in.1443.000
l---------data/csu/_metadata/maintainer2
-rw-r--r--data/curl/_metadata/in.1443.000
-rw-r--r--data/curl/_metadata/in.550.580
l---------data/curl/_metadata/libnghttp2.dep1
l---------data/curl/_metadata/libssh2.dep1
l---------data/curl/_metadata/libssl1.0.dep1
l---------data/curl/_metadata/maintainer2
l---------data/curl/_metadata/openssl.dep1
-rw-r--r--data/curl/_metadata/version2
-rw-r--r--data/curl/curl-7.33.0.tar.bz2bin2747507 -> 0 bytes
-rw-r--r--data/curl/curl-7.62.0.tar.xzbin0 -> 2395476 bytes
-rw-r--r--data/curl/flags.diff47
-rw-r--r--data/curl/make.sh4
-rw-r--r--data/cvs/_metadata/in.1443.000
l---------data/cvs/_metadata/maintainer2
-rw-r--r--data/cvs/_metadata/version2
-rw-r--r--data/cvs/cvs-1.11.22.tar.gzbin3463528 -> 0 bytes
-rw-r--r--data/cvs/cvs_1.12.13+real-22+deb9u1.diff12224
-rw-r--r--data/cvs/cvs_1.12.13+real.orig.tar.gzbin0 -> 4737137 bytes
-rw-r--r--data/cvs/linker.diff11
-rw-r--r--data/cvs/make.sh5
-rw-r--r--data/cvs/mdns.diff25
-rw-r--r--data/cwidget/_metadata/in.1443.000
-rw-r--r--data/cwidget/_metadata/version2
-rw-r--r--data/cwidget/cwidget-0.5.17.tar.xzbin0 -> 431532 bytes
-rw-r--r--data/cwidget/cwidget-0.5.8.tar.gzbin571292 -> 0 bytes
-rw-r--r--data/cwidget/debian/changelog402
-rw-r--r--data/cwidget/debian/compat1
-rw-r--r--data/cwidget/debian/control94
-rw-r--r--data/cwidget/debian/copyright5
-rw-r--r--data/cwidget/debian/gbp.conf3
-rw-r--r--data/cwidget/debian/libcwidget-dev.docs1
-rw-r--r--data/cwidget/debian/libcwidget-dev.install5
-rw-r--r--data/cwidget/debian/libcwidget-doc.doc-base12
-rw-r--r--data/cwidget/debian/libcwidget-doc.docs1
-rw-r--r--data/cwidget/debian/libcwidget-doc.links2
-rw-r--r--data/cwidget/debian/libcwidget3v5.install2
-rw-r--r--data/cwidget/debian/patches/series1
-rwxr-xr-xdata/cwidget/debian/rules38
-rw-r--r--data/cwidget/debian/source/format1
-rw-r--r--data/cwidget/debian/tests/compile-example-testcwidget27
-rw-r--r--data/cwidget/debian/tests/control2
-rw-r--r--data/cwidget/lock.diff12
-rw-r--r--data/cwidget/make.sh5
-rw-r--r--data/cwidget/max.diff12
-rw-r--r--data/cwidget/pod.diff14
-rw-r--r--data/cwidget/pthread.diff11
-rw-r--r--data/cwidget/timestamps.diff24
-rw-r--r--data/cwidget/xopen.diff26
-rw-r--r--data/darwintools/_metadata/in.1443.000
l---------data/darwintools/_metadata/maintainer2
-rw-r--r--data/darwintools/make.sh4
-rw-r--r--data/dbus/_metadata/in.1443.000
l---------data/dbus/_metadata/maintainer2
-rw-r--r--data/debianutils/_metadata/in.1443.000
l---------data/debianutils/_metadata/maintainer2
-rw-r--r--data/debianutils/_metadata/version2
-rw-r--r--data/debianutils/debian-binary1
-rw-r--r--data/debianutils/debianutils_3.4.3ubuntu1.tar.gzbin150664 -> 0 bytes
-rw-r--r--data/debianutils/debianutils_4.8.6.tar.xzbin0 -> 156532 bytes
-rw-r--r--data/developer-cmds/_metadata/in.1443.000
l---------data/developer-cmds/_metadata/maintainer2
-rw-r--r--data/developer-cmds/make.sh4
-rw-r--r--data/dict/_metadata/in.1443.000
l---------data/dict/_metadata/maintainer2
-rw-r--r--data/dict/make.sh2
-rw-r--r--data/diffutils/_metadata/in.1443.000
l---------data/diffutils/_metadata/maintainer2
-rw-r--r--data/diffutils/_metadata/version2
-rw-r--r--data/diffutils/diffutils-2.8.1.tar.gzbin780086 -> 0 bytes
-rw-r--r--data/diffutils/diffutils-3.6.tar.xzbin0 -> 1398296 bytes
-rw-r--r--data/diffutils/make.sh2
-rw-r--r--data/diskdev-cmds/_metadata/in.1443.000
l---------data/diskdev-cmds/_metadata/maintainer2
-rw-r--r--data/diskdev-cmds/_metadata/version2
-rw-r--r--data/diskdev-cmds/diskdev_cmds-421.7.tar.gzbin679486 -> 0 bytes
-rw-r--r--data/diskdev-cmds/diskdev_cmds-593.221.1.tar.gzbin0 -> 133423 bytes
-rw-r--r--data/diskdev-cmds/make.sh6
-rw-r--r--data/dmg2img/_metadata/in.1443.000
l---------data/dmg2img/_metadata/maintainer2
-rw-r--r--data/dns2tcp/_metadata/in.1443.000
-rw-r--r--data/dpkg-perl/_metadata/description1
l---------data/dpkg-perl/_metadata/dpkg.dep1
-rw-r--r--data/dpkg-perl/_metadata/homepage1
-rw-r--r--data/dpkg-perl/_metadata/in.1443.000
-rw-r--r--data/dpkg-perl/_metadata/in.550.580
l---------data/dpkg-perl/_metadata/license1
l---------data/dpkg-perl/_metadata/maintainer1
-rw-r--r--data/dpkg-perl/_metadata/name1
l---------data/dpkg-perl/_metadata/perl.dep1
-rw-r--r--data/dpkg-perl/_metadata/priority (renamed from data/hackndev.org/_metadata/priority)0
-rw-r--r--data/dpkg-perl/_metadata/role1
-rw-r--r--data/dpkg-perl/_metadata/section1
-rw-r--r--data/dpkg-perl/_metadata/tags1
l---------data/dpkg-perl/_metadata/version1
-rw-r--r--data/dpkg-perl/make.sh11
l---------data/dpkg/_metadata/_dpkg.dep1
l---------[-rw-r--r--]data/dpkg/_metadata/bzip2.dep2
-rw-r--r--data/dpkg/_metadata/in.1443.000
l---------data/dpkg/_metadata/maintainer2
-rwxr-xr-xdata/dpkg/_metadata/postinst5
-rw-r--r--data/dpkg/_metadata/priority2
-rw-r--r--data/dpkg/_metadata/version2
l---------data/dpkg/_metadata/xz.dep1
-rw-r--r--data/dpkg/blankline.diff39
-rw-r--r--data/dpkg/dpkg_1.18.10.tar.xzbin4645448 -> 0 bytes
-rw-r--r--data/dpkg/lzma.diff64
-rw-r--r--data/dpkg/make.sh16
-rw-r--r--data/dpkg/telesphoreo.diff11
-rw-r--r--data/dpkg/tolerance.diff35
-rw-r--r--data/easywakeup.net/_metadata/description1
l---------data/easywakeup.net/_metadata/license1
-rw-r--r--data/easywakeup.net/_metadata/maintainer1
-rw-r--r--data/easywakeup.net/_metadata/name1
-rw-r--r--data/easywakeup.net/_metadata/section1
-rw-r--r--data/easywakeup.net/_metadata/tags1
-rw-r--r--data/easywakeup.net/_metadata/version1
-rw-r--r--data/easywakeup.net/easywakeup.net.list6
-rw-r--r--data/easywakeup.net/easywakeup.net.pngbin4667 -> 0 bytes
-rw-r--r--data/easywakeup.net/icon.pngbin2937 -> 0 bytes
-rw-r--r--data/easywakeup.net/make.sh4
-rw-r--r--data/ed/_metadata/in.1443.000
l---------data/ed/_metadata/maintainer2
-rw-r--r--data/essential/_metadata/in.1443.000
l---------data/essential/_metadata/maintainer2
-rw-r--r--data/expat/_metadata/in.1443.000
-rw-r--r--data/expat/_metadata/in.550.580
l---------data/expat/_metadata/maintainer2
-rw-r--r--data/expat/_metadata/version2
-rw-r--r--data/expat/expat-2.0.1.tar.gzbin446456 -> 0 bytes
-rw-r--r--data/expat/expat-2.2.5.tar.bz2bin0 -> 510868 bytes
-rw-r--r--data/faac/_metadata/in.1443.000
l---------data/faac/_metadata/maintainer2
-rw-r--r--data/faad/_metadata/in.1443.000
l---------data/faad/_metadata/maintainer2
-rw-r--r--data/faad/_metadata/version2
-rw-r--r--data/faad/faad2-2.6.1.tar.gzbin839410 -> 0 bytes
-rw-r--r--data/faad/faad2-2.8.8.tar.gzbin0 -> 1069044 bytes
-rw-r--r--data/faad/make.sh1
-rw-r--r--data/faad/timestamp.diff81
-rw-r--r--data/fakeroot/_metadata/description1
-rw-r--r--data/fakeroot/_metadata/in.1443.000
-rw-r--r--data/fakeroot/_metadata/in.550.580
l---------data/fakeroot/_metadata/license1
l---------data/fakeroot/_metadata/maintainer1
-rw-r--r--data/fakeroot/_metadata/priority1
-rw-r--r--data/fakeroot/_metadata/role1
-rw-r--r--data/fakeroot/_metadata/section1
l---------data/fakeroot/_metadata/shell-cmds.dep1
-rw-r--r--data/fakeroot/_metadata/shell-cmds.ver.iphoneos-arm1
-rw-r--r--data/fakeroot/_metadata/tags1
-rw-r--r--data/fakeroot/_metadata/version1
-rw-r--r--data/fakeroot/fakeroot_1.20.2.tar.bz2bin0 -> 326910 bytes
-rw-r--r--data/fakeroot/iphone.diff371
-rw-r--r--data/fakeroot/make.sh5
-rw-r--r--data/fakeroot/openat.diff52
-rw-r--r--data/fastjar/_metadata/in.1443.000
l---------data/fastjar/_metadata/maintainer2
-rw-r--r--data/ffmpeg_/_metadata/in.1443.000
l---------data/ffmpeg_/_metadata/maintainer2
-rw-r--r--data/ffmpeg_/armv5.diff12
-rw-r--r--data/ffmpeg_/assembler.diff538
-rw-r--r--data/ffmpeg_/ffmpeg-4.0.2.tar.gzbin0 -> 13004482 bytes
-rw-r--r--data/ffmpeg_/ffmpeg-export-snapshot.tar.bz2bin2538134 -> 0 bytes
-rw-r--r--data/ffmpeg_/make.sh11
-rw-r--r--data/ffmpeg_/mjpega.diff32
-rw-r--r--data/ffmpeg_/r7.diff48
-rw-r--r--data/ffmpeg_/timestamp.diff11
-rw-r--r--data/ffmpeg_/version.diff12
-rw-r--r--data/file-cmds/_metadata/in.1443.000
l---------data/file-cmds/_metadata/maintainer2
-rw-r--r--data/file/_metadata/in.1443.000
l---------data/file/_metadata/maintainer2
-rw-r--r--data/file/_metadata/version2
-rw-r--r--data/file/file-4.23.tar.gzbin563704 -> 0 bytes
-rw-r--r--data/file/file-5.35.tar.gzbin0 -> 865425 bytes
-rw-r--r--data/findutils/_metadata/in.1443.000
l---------data/findutils/_metadata/maintainer2
-rw-r--r--data/findutils/_metadata/version2
-rw-r--r--data/findutils/findutils-4.2.33.tar.gzbin1455067 -> 0 bytes
-rw-r--r--data/findutils/findutils-4.6.0.tar.gzbin0 -> 3780154 bytes
-rw-r--r--data/firefly/_metadata/in.1443.000
l---------data/firefly/_metadata/maintainer2
-rw-r--r--data/flac/_metadata/in.1443.000
l---------data/flac/_metadata/maintainer2
-rw-r--r--data/flac/_metadata/version2
-rw-r--r--data/flac/flac-1.2.1.tar.gzbin2009217 -> 0 bytes
-rw-r--r--data/flac/flac-1.3.2.tar.xzbin0 -> 776192 bytes
-rw-r--r--data/flac/make.sh2
-rw-r--r--data/flex/_metadata/in.1443.000
l---------data/flex/_metadata/maintainer2
-rw-r--r--data/flex/_metadata/version2
-rw-r--r--data/flex/flex-2.5.35.tar.bz2bin1256501 -> 0 bytes
-rw-r--r--data/flex/flex-2.6.4.tar.xzbin0 -> 846540 bytes
-rw-r--r--data/flex/make.sh2
-rw-r--r--data/flite/_metadata/in.1443.000
l---------data/flite/_metadata/maintainer2
-rw-r--r--data/freecoder.org/_metadata/description1
l---------data/freecoder.org/_metadata/license1
-rw-r--r--data/freecoder.org/_metadata/maintainer1
-rw-r--r--data/freecoder.org/_metadata/name1
-rw-r--r--data/freecoder.org/_metadata/role1
-rw-r--r--data/freecoder.org/_metadata/section1
-rw-r--r--data/freecoder.org/_metadata/tags1
-rw-r--r--data/freecoder.org/_metadata/version1
-rw-r--r--data/freecoder.org/freecoder.org.list6
-rw-r--r--data/freecoder.org/make.sh2
-rw-r--r--data/gawk/_metadata/in.1443.000
l---------data/gawk/_metadata/maintainer2
-rw-r--r--data/gawk/_metadata/version2
-rw-r--r--data/gawk/dynamic.diff19
-rw-r--r--data/gawk/gawk-3.1.6.tar.gzbin2488684 -> 0 bytes
-rw-r--r--data/gawk/gawk-4.2.1.tar.xzbin0 -> 2985412 bytes
-rw-r--r--data/gcrypt/_metadata/in.1443.000
l---------data/gcrypt/_metadata/maintainer2
-rw-r--r--data/gcrypt/_metadata/version2
-rw-r--r--data/gcrypt/armasm.diff14
-rw-r--r--data/gcrypt/asm.diff100
l---------data/gcrypt/gcrypt (renamed from data/gnupg2/_metadata/gcrypt.dep)0
-rw-r--r--data/gcrypt/libgcrypt-1.4.0.tar.gzbin1204533 -> 0 bytes
-rw-r--r--data/gcrypt/libgcrypt-1.8.3.tar.bz2bin0 -> 2989166 bytes
-rw-r--r--data/gcrypt/make.sh3
-rw-r--r--data/gdata-objectivec-client/_metadata/in.1443.000
l---------data/gdata-objectivec-client/_metadata/maintainer2
-rw-r--r--data/gdb/_metadata/in.1443.000
l---------data/gdb/_metadata/maintainer2
-rw-r--r--data/gdbm/_metadata/in.1443.000
l---------data/gdbm/_metadata/maintainer2
-rw-r--r--data/gettext/_metadata/in.1443.000
l---------data/gettext/_metadata/maintainer2
-rw-r--r--data/gettext/_metadata/version2
-rw-r--r--data/gettext/equality.diff11
-rw-r--r--data/gettext/gettext-0.17.tar.gzbin11640890 -> 0 bytes
-rw-r--r--data/gettext/gettext-0.19.8.tar.xzbin0 -> 7137032 bytes
-rw-r--r--data/gettext/make.sh2
-rw-r--r--data/gettext/regex.diff19
-rw-r--r--data/git/_metadata/expat.ver.iphoneos-arm1
-rw-r--r--data/git/_metadata/in.1443.000
-rw-r--r--data/git/_metadata/in.550.580
l---------data/git/_metadata/libssl1.0.dep1
l---------data/git/_metadata/maintainer2
l---------data/git/_metadata/openssl.dep1
-rw-r--r--data/git/_metadata/version2
-rw-r--r--data/git/git-2.20.0.tar.xzbin0 -> 5436940 bytes
-rw-r--r--data/git/git-2.8.1.tar.gzbin5835825 -> 0 bytes
-rw-r--r--data/git/make.sh8
-rw-r--r--data/git/shebang.diff22
-rw-r--r--data/glib/_metadata/in.1443.000
l---------data/glib/_metadata/libffi.dep1
l---------data/glib/_metadata/maintainer2
l---------data/glib/_metadata/pcre.dep (renamed from data/nmap/_metadata/pcre.dep)0
-rw-r--r--data/glib/glib-2.20.4.tar.bz2bin5035410 -> 0 bytes
-rw-r--r--data/glib/glib-2.57.2.tar.xzbin0 -> 4883340 bytes
-rw-r--r--data/glib/libiconv.diff17
-rw-r--r--data/glib/make.sh3
-rw-r--r--data/gnupg/_metadata/conflicts1
-rw-r--r--data/gnupg/_metadata/description2
l---------data/gnupg/_metadata/gcrypt.dep1
l---------data/gnupg/_metadata/gnutls.dep1
-rw-r--r--data/gnupg/_metadata/homepage1
-rw-r--r--data/gnupg/_metadata/in.1443.000
l---------data/gnupg/_metadata/libassuan.dep (renamed from data/gnupg2/_metadata/libassuan.dep)0
l---------data/gnupg/_metadata/libksba.dep (renamed from data/gnupg2/_metadata/libksba.dep)0
l---------data/gnupg/_metadata/maintainer2
-rw-r--r--data/gnupg/_metadata/name2
l---------data/gnupg/_metadata/npth.dep1
-rw-r--r--data/gnupg/_metadata/provides1
-rw-r--r--data/gnupg/_metadata/replaces1
-rw-r--r--data/gnupg/_metadata/version2
-rw-r--r--data/gnupg/armasm.diff14
-rw-r--r--data/gnupg/clock_gettime.diff12
-rw-r--r--data/gnupg/gnupg-1.4.9.tar.bz2bin3328743 -> 0 bytes
-rw-r--r--data/gnupg/gnupg-2.2.11.tar.bz2bin0 -> 6652480 bytes
-rw-r--r--data/gnupg/make.sh6
-rw-r--r--data/gnupg2/_metadata/description2
l---------data/gnupg2/_metadata/gnupg.dep1
-rw-r--r--data/gnupg2/_metadata/gnupg.ver.iphoneos-arm1
-rw-r--r--data/gnupg2/_metadata/gnupg.ver.iphoneos-arm641
l---------data/gnupg2/_metadata/gnupth.dep1
-rw-r--r--data/gnupg2/_metadata/in.1443.000
l---------data/gnupg2/_metadata/maintainer2
-rw-r--r--data/gnupg2/_metadata/version2
-rw-r--r--data/gnupg2/gnupg-2.0.8.tar.bz2bin3654523 -> 0 bytes
-rw-r--r--data/gnupg2/gnupth.diff28
-rw-r--r--data/gnupg2/make.sh7
-rw-r--r--data/gnupth/_metadata/name1
-rw-r--r--data/gnupth/_metadata/version1
-rw-r--r--data/gnupth/make.sh4
-rw-r--r--data/gnupth/pth-2.0.7.tar.gzbin652640 -> 0 bytes
-rw-r--r--data/gnutls/_metadata/in.1443.000
l---------data/gnutls/_metadata/libgmp10.dep1
l---------data/gnutls/_metadata/libidn2.dep1
l---------data/gnutls/_metadata/libunistring.dep1
l---------data/gnutls/_metadata/maintainer2
l---------data/gnutls/_metadata/nettle.dep1
l---------data/gnutls/_metadata/p11-kit.dep1
-rw-r--r--data/gnutls/_metadata/version2
-rw-r--r--data/gnutls/asm.diff6397
-rw-r--r--data/gnutls/cflags.diff25
-rw-r--r--data/gnutls/gnutls-2.4.1.tar.bz2bin4940118 -> 0 bytes
-rw-r--r--data/gnutls/gnutls-3.5.19.tar.xzbin0 -> 7239744 bytes
-rw-r--r--data/gnutls/make.sh9
-rw-r--r--data/grep/_metadata/in.1443.000
l---------data/grep/_metadata/maintainer2
-rw-r--r--data/grep/_metadata/version2
-rw-r--r--data/grep/grep-2.5.4.tar.bz2bin723181 -> 0 bytes
-rw-r--r--data/grep/grep-3.1.tar.xzbin0 -> 1370880 bytes
-rw-r--r--data/grep/make.sh4
-rw-r--r--data/grep/regcomp.diff19
l---------data/gzip/_metadata/grep.dep1
-rw-r--r--data/gzip/_metadata/in.1443.000
l---------data/gzip/_metadata/maintainer2
-rw-r--r--data/gzip/_metadata/version2
-rw-r--r--data/gzip/gzip-1.6.tar.gzbin1074924 -> 0 bytes
-rw-r--r--data/gzip/gzip-1.9.tar.xzbin0 -> 762516 bytes
-rw-r--r--data/gzip/make.sh1
-rw-r--r--data/hackndev.org/_metadata/description1
l---------data/hackndev.org/_metadata/license1
-rw-r--r--data/hackndev.org/_metadata/maintainer1
-rw-r--r--data/hackndev.org/_metadata/name1
-rwxr-xr-xdata/hackndev.org/_metadata/postinst2
-rwxr-xr-xdata/hackndev.org/_metadata/prerm6
-rw-r--r--data/hackndev.org/_metadata/role1
-rw-r--r--data/hackndev.org/_metadata/section1
-rw-r--r--data/hackndev.org/_metadata/tags1
-rw-r--r--data/hackndev.org/_metadata/version1
-rw-r--r--data/hackndev.org/farcaller.gpg46
-rw-r--r--data/hackndev.org/hackndev.org.list6
-rw-r--r--data/hackndev.org/make.sh4
-rw-r--r--data/htop/_metadata/description1
-rw-r--r--data/htop/_metadata/in.1443.000
l---------data/htop/_metadata/license1
l---------data/htop/_metadata/maintainer1
l---------data/htop/_metadata/ncurses.dep1
-rw-r--r--data/htop/_metadata/ncurses.ver.iphoneos-arm1
-rw-r--r--data/htop/_metadata/priority1
-rw-r--r--data/htop/_metadata/role1
-rw-r--r--data/htop/_metadata/section (renamed from data/pam/_metadata/section)0
-rw-r--r--data/htop/_metadata/tags1
-rw-r--r--data/htop/_metadata/version1
-rw-r--r--data/htop/extern.diff28
-rw-r--r--data/htop/htop-2.2.0.tar.gzbin0 -> 308109 bytes
-rw-r--r--data/htop/make.sh5
-rwxr-xr-xdata/htop/ncursesw6-config207
-rw-r--r--data/hvkls.dyndns.org/_metadata/description1
l---------data/hvkls.dyndns.org/_metadata/license1
-rw-r--r--data/hvkls.dyndns.org/_metadata/maintainer1
-rw-r--r--data/hvkls.dyndns.org/_metadata/name1
-rwxr-xr-xdata/hvkls.dyndns.org/_metadata/postinst4
-rwxr-xr-xdata/hvkls.dyndns.org/_metadata/prerm4
-rw-r--r--data/hvkls.dyndns.org/_metadata/role1
-rw-r--r--data/hvkls.dyndns.org/_metadata/section1
-rw-r--r--data/hvkls.dyndns.org/_metadata/tags1
-rw-r--r--data/hvkls.dyndns.org/_metadata/version1
-rw-r--r--data/hvkls.dyndns.org/hvkls.dyndns.org.list6
-rw-r--r--data/hvkls.dyndns.org/hvkls_public_gpg.asc42
-rw-r--r--data/hvkls.dyndns.org/make.sh6
-rw-r--r--data/hvkls.dyndns.org/sun.pngbin2235 -> 0 bytes
-rw-r--r--data/iacces.com/_metadata/description1
l---------data/iacces.com/_metadata/license1
-rw-r--r--data/iacces.com/_metadata/maintainer1
-rw-r--r--data/iacces.com/_metadata/name1
-rw-r--r--data/iacces.com/_metadata/role1
-rw-r--r--data/iacces.com/_metadata/section1
-rw-r--r--data/iacces.com/_metadata/tags1
-rw-r--r--data/iacces.com/_metadata/version1
-rw-r--r--data/iacces.com/iacces.com.list6
-rw-r--r--data/iacces.com/make.sh2
-rw-r--r--data/ice/_metadata/in.1443.000
l---------data/ice/_metadata/maintainer2
-rw-r--r--data/ice/_metadata/version2
-rw-r--r--data/ice/libICE-1.0.4.tar.gzbin365664 -> 0 bytes
-rw-r--r--data/ice/libICE-1.0.9.tar.bz2bin0 -> 384921 bytes
-rw-r--r--data/ice/make.sh3
-rw-r--r--data/iclarified.com/_metadata/description1
l---------data/iclarified.com/_metadata/license1
-rw-r--r--data/iclarified.com/_metadata/maintainer1
-rw-r--r--data/iclarified.com/_metadata/name1
-rw-r--r--data/iclarified.com/_metadata/role1
-rw-r--r--data/iclarified.com/_metadata/section1
-rw-r--r--data/iclarified.com/_metadata/tags1
-rw-r--r--data/iclarified.com/_metadata/version1
-rw-r--r--data/iclarified.com/iclarified.com.list6
-rw-r--r--data/iclarified.com/make.sh2
-rw-r--r--data/ifon1.no/_metadata/description1
l---------data/ifon1.no/_metadata/license1
-rw-r--r--data/ifon1.no/_metadata/maintainer1
-rw-r--r--data/ifon1.no/_metadata/name1
-rw-r--r--data/ifon1.no/_metadata/role1
-rw-r--r--data/ifon1.no/_metadata/section1
-rw-r--r--data/ifon1.no/_metadata/tags1
-rw-r--r--data/ifon1.no/_metadata/version1
-rw-r--r--data/ifon1.no/ifon1.no.list6
-rw-r--r--data/ifon1.no/make.sh2
-rw-r--r--data/ifoneguide.nl/_metadata/description1
-rwxr-xr-xdata/ifoneguide.nl/_metadata/extrainst_9
l---------data/ifoneguide.nl/_metadata/license1
-rw-r--r--data/ifoneguide.nl/_metadata/maintainer1
-rw-r--r--data/ifoneguide.nl/_metadata/name1
-rwxr-xr-xdata/ifoneguide.nl/_metadata/prerm4
-rw-r--r--data/ifoneguide.nl/_metadata/replaces1
-rw-r--r--data/ifoneguide.nl/_metadata/role1
-rw-r--r--data/ifoneguide.nl/_metadata/section1
-rw-r--r--data/ifoneguide.nl/_metadata/tags1
-rw-r--r--data/ifoneguide.nl/_metadata/version1
-rw-r--r--data/ifoneguide.nl/cydia.ifoneguide.nl.pngbin3464 -> 0 bytes
-rw-r--r--data/ifoneguide.nl/iFoneguide.dat25
-rw-r--r--data/ifoneguide.nl/iFoneguide.gpg24
-rw-r--r--data/ifoneguide.nl/ifoneguide.nl.list6
-rw-r--r--data/ifoneguide.nl/make.sh6
-rw-r--r--data/ifonetec.com/_metadata/description1
l---------data/ifonetec.com/_metadata/license1
-rw-r--r--data/ifonetec.com/_metadata/maintainer1
-rw-r--r--data/ifonetec.com/_metadata/name1
-rw-r--r--data/ifonetec.com/_metadata/role1
-rw-r--r--data/ifonetec.com/_metadata/section1
-rw-r--r--data/ifonetec.com/_metadata/tags1
-rw-r--r--data/ifonetec.com/_metadata/version1
-rw-r--r--data/ifonetec.com/ifonetec.com.list6
-rw-r--r--data/ifonetec.com/make.sh2
-rw-r--r--data/imagemagick/ImageMagick-6.4.3-6.tar.bz2bin8860808 -> 0 bytes
-rw-r--r--data/imagemagick/ImageMagick-7.0.8-11.tar.xzbin0 -> 8638236 bytes
-rw-r--r--data/imagemagick/_metadata/in.1443.000
l---------data/imagemagick/_metadata/libfftw3.dep1
l---------data/imagemagick/_metadata/maintainer2
-rw-r--r--data/imagemagick/_metadata/version2
l---------data/imagemagick/_metadata/xz.dep1
-rw-r--r--data/imagemagick/make.sh5
-rw-r--r--data/imagemagick/variable.diff108
-rw-r--r--data/indent/_metadata/in.1443.000
l---------data/indent/_metadata/maintainer2
-rw-r--r--data/indent/_metadata/version2
-rw-r--r--data/indent/docs.diff43
-rw-r--r--data/indent/indent-2.2.10.tar.gzbin0 -> 702667 bytes
-rw-r--r--data/indent/indent-2.2.9.tar.gzbin678173 -> 0 bytes
-rw-r--r--data/indent/make.sh6
-rw-r--r--data/indent/static.diff12
-rw-r--r--data/inetutils/_metadata/in.1443.000
l---------data/inetutils/_metadata/maintainer2
l---------data/inetutils/_metadata/readline.dep1
-rw-r--r--data/inetutils/_metadata/version2
-rw-r--r--data/inetutils/docs.diff22
-rw-r--r--data/inetutils/inetd.diff12
-rw-r--r--data/inetutils/inetutils-1.6.tar.gzbin1675311 -> 0 bytes
-rw-r--r--data/inetutils/inetutils-1.9.4.tar.xzbin0 -> 1364408 bytes
-rw-r--r--data/inetutils/logwtmp.diff117
-rw-r--r--data/inetutils/make.sh2
-rw-r--r--data/inetutils/rlogind.diff48
-rw-r--r--data/inetutils/talkd.diff13
-rw-r--r--data/inetutils/utmpx.diff70
-rw-r--r--data/inputproto/_metadata/in.1443.000
l---------data/inputproto/_metadata/maintainer2
-rw-r--r--data/interceptty/_metadata/in.1443.000
l---------data/interceptty/_metadata/maintainer2
-rw-r--r--data/iokittools/IOKitTools-76.tar.gzbin17076 -> 0 bytes
-rw-r--r--data/iokittools/_metadata/in.1443.000
l---------data/iokittools/_metadata/maintainer2
-rw-r--r--data/iokittools/kernel.diff14
-rw-r--r--data/iokittools/make.sh2
-rw-r--r--data/ipatcher_/_metadata/in.1443.000
l---------data/ipatcher_/_metadata/maintainer2
-rw-r--r--data/iphone-gcc/_metadata/in.1443.000
l---------data/iphone-gcc/_metadata/maintainer2
-rw-r--r--data/iphone-java/_metadata/in.1443.000
l---------data/iphone-java/_metadata/maintainer2
-rw-r--r--data/iphone-notes.de/_metadata/description1
l---------data/iphone-notes.de/_metadata/license1
-rw-r--r--data/iphone-notes.de/_metadata/maintainer1
-rw-r--r--data/iphone-notes.de/_metadata/name1
-rwxr-xr-xdata/iphone-notes.de/_metadata/postinst2
-rwxr-xr-xdata/iphone-notes.de/_metadata/prerm6
-rw-r--r--data/iphone-notes.de/_metadata/role1
-rw-r--r--data/iphone-notes.de/_metadata/section1
-rw-r--r--data/iphone-notes.de/_metadata/tags1
-rw-r--r--data/iphone-notes.de/_metadata/version1
-rw-r--r--data/iphone-notes.de/icon.pngbin8447 -> 0 bytes
-rw-r--r--data/iphone-notes.de/iphone-notes.de.list6
-rw-r--r--data/iphone-notes.de/iphone-notes_de.pub19
-rw-r--r--data/iphone-notes.de/make.sh6
l---------data/iphone-python/_metadata/maintainer2
-rw-r--r--data/iphoneislam.com/_metadata/description1
l---------data/iphoneislam.com/_metadata/license1
-rw-r--r--data/iphoneislam.com/_metadata/maintainer1
-rw-r--r--data/iphoneislam.com/_metadata/name1
-rw-r--r--data/iphoneislam.com/_metadata/role1
-rw-r--r--data/iphoneislam.com/_metadata/section1
-rw-r--r--data/iphoneislam.com/_metadata/tags1
-rw-r--r--data/iphoneislam.com/_metadata/version1
-rw-r--r--data/iphoneislam.com/iphoneislam.com.list6
-rw-r--r--data/iphoneislam.com/make.sh2
-rw-r--r--data/iphonemod.com.br/_metadata/description1
l---------data/iphonemod.com.br/_metadata/license1
-rw-r--r--data/iphonemod.com.br/_metadata/maintainer1
-rw-r--r--data/iphonemod.com.br/_metadata/name1
-rw-r--r--data/iphonemod.com.br/_metadata/role1
-rw-r--r--data/iphonemod.com.br/_metadata/section1
-rw-r--r--data/iphonemod.com.br/_metadata/tags1
-rw-r--r--data/iphonemod.com.br/_metadata/version1
-rw-r--r--data/iphonemod.com.br/iphonemod.com.br.list6
-rw-r--r--data/iphonemod.com.br/make.sh2
-rw-r--r--data/iphonemodding.com/_metadata/description1
l---------data/iphonemodding.com/_metadata/license1
-rw-r--r--data/iphonemodding.com/_metadata/maintainer1
-rw-r--r--data/iphonemodding.com/_metadata/name1
-rw-r--r--data/iphonemodding.com/_metadata/role1
-rw-r--r--data/iphonemodding.com/_metadata/section1
-rw-r--r--data/iphonemodding.com/_metadata/tags1
-rw-r--r--data/iphonemodding.com/_metadata/version1
-rw-r--r--data/iphonemodding.com/iphonemodding.com.list6
-rw-r--r--data/iphonemodding.com/ipm_logo.pngbin36971 -> 0 bytes
-rw-r--r--data/iphonemodding.com/make.sh4
-rw-r--r--data/iphoneos-sys/_metadata/in.1443.000
-rw-r--r--data/iphonestuff/_metadata/description1
l---------data/iphonestuff/_metadata/license1
-rw-r--r--data/iphonestuff/_metadata/maintainer1
-rw-r--r--data/iphonestuff/_metadata/name1
-rw-r--r--data/iphonestuff/_metadata/role1
-rw-r--r--data/iphonestuff/_metadata/section1
-rw-r--r--data/iphonestuff/_metadata/tags1
-rw-r--r--data/iphonestuff/_metadata/version1
-rw-r--r--data/iphonestuff/iphonestuff.list6
-rw-r--r--data/iphonestuff/make.sh2
-rw-r--r--data/iphonesurge/_metadata/description1
l---------data/iphonesurge/_metadata/license1
l---------data/iphonesurge/_metadata/maintainer1
-rw-r--r--data/iphonesurge/_metadata/name1
-rw-r--r--data/iphonesurge/_metadata/role1
-rw-r--r--data/iphonesurge/_metadata/section1
-rw-r--r--data/iphonesurge/_metadata/tags1
-rw-r--r--data/iphonesurge/_metadata/version1
-rw-r--r--data/iphonesurge/iphonesurge.list6
-rw-r--r--data/iphonesurge/make.sh2
-rw-r--r--data/ipkg/_metadata/in.1443.000
l---------data/ipkg/_metadata/maintainer2
-rw-r--r--data/irssi/_metadata/in.1443.000
l---------data/irssi/_metadata/libssl1.0.dep1
l---------data/irssi/_metadata/maintainer2
l---------data/irssi/_metadata/openssl.dep1
-rw-r--r--data/irssi/_metadata/version2
-rw-r--r--data/irssi/irssi-0.8.12.tar.gzbin1335967 -> 0 bytes
-rw-r--r--data/irssi/irssi-1.1.1.tar.xzbin0 -> 1080992 bytes
-rw-r--r--data/irssi/make.sh4
-rw-r--r--data/irssi/mdns.diff50
-rw-r--r--data/jamvm/_metadata/in.1443.000
l---------data/jamvm/_metadata/maintainer2
-rw-r--r--data/javasqlite/_metadata/in.1443.000
l---------data/javasqlite/_metadata/maintainer2
-rw-r--r--data/jikes/_metadata/in.1443.000
l---------data/jikes/_metadata/maintainer2
-rw-r--r--data/jocstrap/_metadata/in.1443.000
l---------data/jocstrap/_metadata/maintainer2
-rw-r--r--data/kbproto/_metadata/in.1443.000
l---------data/kbproto/_metadata/maintainer2
-rw-r--r--data/kext-tools/_metadata/in.1443.000
l---------data/kext-tools/_metadata/maintainer2
-rw-r--r--data/kismet_/_metadata/in.1443.000
l---------data/kismet_/_metadata/maintainer2
-rw-r--r--data/krb5/_metadata/in.1443.000
l---------data/krb5/_metadata/maintainer2
-rw-r--r--data/lame/_metadata/in.1443.000
l---------data/lame/_metadata/maintainer2
l---------data/lame/_metadata/ncurses.dep1
-rw-r--r--data/lame/_metadata/version2
-rw-r--r--data/lame/lame-3.100.tar.gzbin0 -> 1524133 bytes
-rw-r--r--data/lame/lame-3.98b8.tar.gzbin1394709 -> 0 bytes
-rw-r--r--data/lame/lame_init_old.diff9
-rw-r--r--data/lame/timestamp.diff107
l---------data/launchd/_metadata/maintainer2
-rw-r--r--data/launchd/_metadata/version2
-rw-r--r--data/launchd/launchd-258.18.tar.gzbin238625 -> 0 bytes
-rw-r--r--data/launchd/launchd-842.92.1.tar.gzbin0 -> 213278 bytes
-rw-r--r--data/launchd/make.sh13
-rw-r--r--data/launchd/port.diff107
-rw-r--r--data/launchd/sockio.diff14
-rw-r--r--data/ld64/_metadata/conflicts1
-rw-r--r--data/ld64/_metadata/description1
-rw-r--r--data/ld64/_metadata/in.1443.000
l---------data/ld64/_metadata/ldid.dep1
l---------data/ld64/_metadata/libtapi.dep1
l---------data/ld64/_metadata/license1
-rw-r--r--data/ld64/_metadata/maintainer1
-rw-r--r--data/ld64/_metadata/priority (renamed from data/hvkls.dyndns.org/_metadata/priority)0
-rw-r--r--data/ld64/_metadata/provides1
-rw-r--r--data/ld64/_metadata/replaces1
-rw-r--r--data/ld64/_metadata/role1
-rw-r--r--data/ld64/_metadata/section1
-rw-r--r--data/ld64/_metadata/tags1
-rw-r--r--data/ld64/_metadata/version1
l---------data/ld64/_metadata/xar.dep1
-rw-r--r--data/ld64/arch.diff13
-rw-r--r--data/ld64/got32.diff12
-rw-r--r--data/ld64/ld64-274.2.tar.gzbin0 -> 671652 bytes
-rw-r--r--data/ld64/make.sh10
-rw-r--r--data/ld64/makefile.diff59
-rw-r--r--data/ld64/searchpaths.diff39
-rw-r--r--data/ld64/thinlto.diff34
-rw-r--r--data/ld64/typos.diff12
-rw-r--r--data/ld64/version.diff28
-rw-r--r--data/ld64/wrapper.c64
l---------data/ldid/_metadata/author (renamed from data/gnupth/_metadata/maintainer)0
-rw-r--r--data/ldid/_metadata/description1
-rw-r--r--data/ldid/_metadata/in.1443.000
l---------data/ldid/_metadata/libplist.dep1
l---------data/ldid/_metadata/libssl1.0.dep1
l---------data/ldid/_metadata/license1
l---------data/ldid/_metadata/maintainer1
-rw-r--r--data/ldid/_metadata/name1
-rw-r--r--data/ldid/_metadata/priority (renamed from data/iacces.com/_metadata/priority)0
-rw-r--r--data/ldid/_metadata/section1
-rw-r--r--data/ldid/_metadata/tags1
-rw-r--r--data/ldid/_metadata/version1
-rw-r--r--data/ldid/ldid-2.0.1.tar.lzbin0 -> 33267 bytes
-rw-r--r--data/ldid/make.sh3
-rw-r--r--data/less/_metadata/in.1443.000
l---------data/less/_metadata/maintainer2
-rw-r--r--data/less/_metadata/version2
-rw-r--r--data/less/less-418.tar.gzbin299213 -> 0 bytes
-rw-r--r--data/less/less-530.tar.gzbin0 -> 339723 bytes
-rw-r--r--data/libapt-pkg-dev/_metadata/description1
-rw-r--r--data/libapt-pkg-dev/_metadata/in.1443.000
l---------data/libapt-pkg-dev/_metadata/libapt-pkg5.0.dep1
l---------data/libapt-pkg-dev/_metadata/license1
l---------data/libapt-pkg-dev/_metadata/maintainer1
-rw-r--r--data/libapt-pkg-dev/_metadata/name1
-rw-r--r--data/libapt-pkg-dev/_metadata/priority (renamed from data/iclarified.com/_metadata/priority)0
-rw-r--r--data/libapt-pkg-dev/_metadata/provides1
-rw-r--r--data/libapt-pkg-dev/_metadata/role1
-rw-r--r--data/libapt-pkg-dev/_metadata/section1
-rw-r--r--data/libapt-pkg-dev/_metadata/tags1
l---------data/libapt-pkg-dev/_metadata/version1
-rw-r--r--data/libapt-pkg-dev/make.sh3
l---------data/libapt-pkg-perl/_metadata/_apt1.4.dep1
-rw-r--r--data/libapt-pkg-perl/_metadata/description1
-rw-r--r--data/libapt-pkg-perl/_metadata/in.1443.000
-rw-r--r--data/libapt-pkg-perl/_metadata/in.550.580
l---------data/libapt-pkg-perl/_metadata/libapt-pkg5.0.dep1
-rw-r--r--data/libapt-pkg-perl/_metadata/license248
l---------data/libapt-pkg-perl/_metadata/maintainer1
l---------data/libapt-pkg-perl/_metadata/perl.dep1
-rw-r--r--data/libapt-pkg-perl/_metadata/priority (renamed from data/ifon1.no/_metadata/priority)0
-rw-r--r--data/libapt-pkg-perl/_metadata/role1
-rw-r--r--data/libapt-pkg-perl/_metadata/section1
-rw-r--r--data/libapt-pkg-perl/_metadata/tags1
-rw-r--r--data/libapt-pkg-perl/_metadata/version1
-rw-r--r--data/libapt-pkg-perl/libapt-pkg-perl_0.1.34.tar.xzbin0 -> 42480 bytes
-rw-r--r--data/libapt-pkg-perl/make.sh8
l---------data/libapt-pkg5.0/_metadata/_apt1.4.dep1
l---------data/libapt-pkg5.0/_metadata/bzip2.dep1
-rw-r--r--data/libapt-pkg5.0/_metadata/conflicts1
-rw-r--r--data/libapt-pkg5.0/_metadata/description1
-rw-r--r--data/libapt-pkg5.0/_metadata/in.1443.000
-rw-r--r--data/libapt-pkg5.0/_metadata/in.550.580
l---------data/libapt-pkg5.0/_metadata/license1
l---------data/libapt-pkg5.0/_metadata/lz4.dep1
l---------data/libapt-pkg5.0/_metadata/lzma.dep1
l---------data/libapt-pkg5.0/_metadata/maintainer1
-rw-r--r--data/libapt-pkg5.0/_metadata/name1
-rw-r--r--data/libapt-pkg5.0/_metadata/priority1
-rw-r--r--data/libapt-pkg5.0/_metadata/provides1
-rw-r--r--data/libapt-pkg5.0/_metadata/role1
-rw-r--r--data/libapt-pkg5.0/_metadata/section1
-rw-r--r--data/libapt-pkg5.0/_metadata/tags1
l---------data/libapt-pkg5.0/_metadata/version1
l---------data/libapt-pkg5.0/_metadata/xz.dep1
-rw-r--r--data/libapt-pkg5.0/make.sh2
l---------data/libapt/_metadata/_apt1.4.dep1
-rw-r--r--data/libapt/_metadata/breaks1
l---------data/libapt/_metadata/bzip2.dep1
-rw-r--r--data/libapt/_metadata/conflicts1
-rw-r--r--data/libapt/_metadata/depends1
-rw-r--r--data/libapt/_metadata/description1
l---------data/libapt/_metadata/dpkg.dep1
-rw-r--r--data/libapt/_metadata/dpkg.ver.iphoneos-arm1
l---------data/libapt/_metadata/gnupg.dep1
l---------data/libapt/_metadata/gzip.dep1
-rw-r--r--data/libapt/_metadata/in.1443.000
l---------data/libapt/_metadata/license1
l---------data/libapt/_metadata/lz4.dep1
l---------data/libapt/_metadata/lzma.dep1
l---------data/libapt/_metadata/maintainer1
-rw-r--r--data/libapt/_metadata/name1
-rw-r--r--data/libapt/_metadata/priority1
-rw-r--r--data/libapt/_metadata/role1
-rw-r--r--data/libapt/_metadata/section1
-rw-r--r--data/libapt/_metadata/tags1
l---------data/libapt/_metadata/version1
l---------data/libapt/_metadata/xz.dep1
l---------data/libapt/libapt1
-rw-r--r--data/libapt/make.sh10
-rw-r--r--data/libarchive/_metadata/in.1443.000
l---------data/libarchive/_metadata/lz4.dep1
l---------data/libarchive/_metadata/lzma.dep1
l---------data/libarchive/_metadata/maintainer2
-rw-r--r--data/libarchive/_metadata/version2
-rw-r--r--data/libarchive/libarchive-2.4.11.tar.gzbin815267 -> 0 bytes
-rw-r--r--data/libarchive/libarchive-3.3.2.tar.gzbin0 -> 6236562 bytes
-rw-r--r--data/libarchive/make.sh2
-rw-r--r--data/libarmfp/_metadata/in.1443.000
l---------data/libarmfp/_metadata/maintainer2
l---------data/libassuan/_metadata/gnupth.dep1
-rw-r--r--data/libassuan/_metadata/in.1443.000
l---------data/libassuan/_metadata/libgpg-error.dep1
l---------data/libassuan/_metadata/maintainer2
l---------data/libassuan/_metadata/npth.dep1
-rw-r--r--data/libassuan/_metadata/version2
-rw-r--r--data/libassuan/libassuan-1.0.4.tar.bz2bin297123 -> 0 bytes
-rw-r--r--data/libassuan/libassuan-2.5.1.tar.bz2bin0 -> 564857 bytes
-rw-r--r--data/libassuan/make.sh4
-rw-r--r--data/libcompress-raw-lzma-perl/Compress-Raw-Lzma-2.082.tar.gzbin0 -> 114203 bytes
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/description1
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/in.1443.000
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/in.550.580
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/license248
l---------data/libcompress-raw-lzma-perl/_metadata/maintainer1
l---------data/libcompress-raw-lzma-perl/_metadata/perl.dep1
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/priority (renamed from data/ifoneguide.nl/_metadata/priority)0
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/role1
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/section1
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/tags1
-rw-r--r--data/libcompress-raw-lzma-perl/_metadata/version1
l---------data/libcompress-raw-lzma-perl/_metadata/xz.dep1
-rw-r--r--data/libcompress-raw-lzma-perl/make.sh7
-rw-r--r--data/libdict/_metadata/in.1443.000
l---------data/libdict/_metadata/maintainer2
-rw-r--r--data/libevent/_metadata/description1
-rw-r--r--data/libevent/_metadata/homepage1
-rw-r--r--data/libevent/_metadata/in.1443.000
-rw-r--r--data/libevent/_metadata/in.550.580
l---------data/libevent/_metadata/libssl1.0.dep1
l---------data/libevent/_metadata/license1
l---------data/libevent/_metadata/maintainer1
-rw-r--r--data/libevent/_metadata/priority (renamed from data/ifonetec.com/_metadata/priority)0
-rw-r--r--data/libevent/_metadata/role1
-rw-r--r--data/libevent/_metadata/section1
-rw-r--r--data/libevent/_metadata/tags1
-rw-r--r--data/libevent/_metadata/version1
-rw-r--r--data/libevent/libevent-2.1.8-stable.tar.gzbin0 -> 1026485 bytes
-rw-r--r--data/libevent/make.sh4
-rw-r--r--data/libfdk-aac/_metadata/description1
-rw-r--r--data/libfdk-aac/_metadata/in.1443.000
l---------data/libfdk-aac/_metadata/maintainer1
-rw-r--r--data/libfdk-aac/_metadata/name1
-rw-r--r--data/libfdk-aac/_metadata/priority (renamed from data/iphone-notes.de/_metadata/priority)0
-rw-r--r--data/libfdk-aac/_metadata/role1
-rw-r--r--data/libfdk-aac/_metadata/section1
-rw-r--r--data/libfdk-aac/_metadata/tags1
-rw-r--r--data/libfdk-aac/_metadata/version1
-rw-r--r--data/libfdk-aac/make.sh5
-rw-r--r--data/libfdk-aac/v0.1.6.tar.gzbin0 -> 1725692 bytes
-rw-r--r--data/libffi/_metadata/in.1443.000
l---------data/libffi/_metadata/maintainer2
-rw-r--r--data/libffi/_metadata/version2
-rw-r--r--data/libffi/assembler.diff25
-rw-r--r--data/libffi/cname.diff30
-rw-r--r--data/libffi/debug.diff24
-rw-r--r--data/libffi/includes.diff22
-rw-r--r--data/libffi/incompetant.diff75
-rw-r--r--data/libffi/libffi-3.0.10.tar.gzbin753346 -> 0 bytes
-rw-r--r--data/libffi/libffi-3.2.1.tar.gzbin0 -> 940837 bytes
-rw-r--r--data/libffi/make.sh4
-rw-r--r--data/libfftw3/_metadata/description1
-rw-r--r--data/libfftw3/_metadata/in.1443.000
l---------data/libfftw3/_metadata/license1
l---------data/libfftw3/_metadata/maintainer1
-rw-r--r--data/libfftw3/_metadata/priority (renamed from data/iphoneislam.com/_metadata/priority)0
-rw-r--r--data/libfftw3/_metadata/role1
-rw-r--r--data/libfftw3/_metadata/section1
-rw-r--r--data/libfftw3/_metadata/tags1
-rw-r--r--data/libfftw3/_metadata/version1
-rw-r--r--data/libfftw3/fftw-3.3.8.tar.gzbin0 -> 4110137 bytes
-rw-r--r--data/libfftw3/make.sh4
l---------data/libfragmentzip/_metadata/curl.dep1
-rw-r--r--data/libfragmentzip/_metadata/description1
-rw-r--r--data/libfragmentzip/_metadata/in.1443.000
l---------data/libfragmentzip/_metadata/libzip.dep1
l---------data/libfragmentzip/_metadata/license1
l---------data/libfragmentzip/_metadata/maintainer1
-rw-r--r--data/libfragmentzip/_metadata/name1
-rw-r--r--data/libfragmentzip/_metadata/priority (renamed from data/iphonemod.com.br/_metadata/priority)0
-rw-r--r--data/libfragmentzip/_metadata/section1
-rw-r--r--data/libfragmentzip/_metadata/tags1
-rw-r--r--data/libfragmentzip/_metadata/version1
-rw-r--r--data/libfragmentzip/libfragmentzip-28.tar.xzbin0 -> 25704 bytes
-rw-r--r--data/libfragmentzip/make.sh5
l---------data/libgcc/_metadata/maintainer2
-rw-r--r--data/libgdbm/_metadata/description1
-rw-r--r--data/libgdbm/_metadata/homepage1
-rw-r--r--data/libgdbm/_metadata/in.1443.000
l---------data/libgdbm/_metadata/license1
l---------data/libgdbm/_metadata/maintainer1
-rw-r--r--data/libgdbm/_metadata/priority (renamed from data/iphonemodding.com/_metadata/priority)0
-rw-r--r--data/libgdbm/_metadata/role1
-rw-r--r--data/libgdbm/_metadata/section1
-rw-r--r--data/libgdbm/_metadata/tags1
-rw-r--r--data/libgdbm/_metadata/version1
-rw-r--r--data/libgdbm/gdbm-1.18.1.tar.gzbin0 -> 941863 bytes
-rw-r--r--data/libgdbm/make.sh4
-rw-r--r--data/libgmp10/_metadata/description1
-rw-r--r--data/libgmp10/_metadata/homepage1
-rw-r--r--data/libgmp10/_metadata/in.1443.000
l---------data/libgmp10/_metadata/license1
l---------data/libgmp10/_metadata/maintainer1
-rw-r--r--data/libgmp10/_metadata/name1
-rw-r--r--data/libgmp10/_metadata/priority (renamed from data/iphonestuff/_metadata/priority)0
-rw-r--r--data/libgmp10/_metadata/role1
-rw-r--r--data/libgmp10/_metadata/section1
-rw-r--r--data/libgmp10/_metadata/tags1
-rw-r--r--data/libgmp10/_metadata/version1
-rw-r--r--data/libgmp10/gmp-6.1.2.tar.xzbin0 -> 1946336 bytes
-rw-r--r--data/libgmp10/llvmasm.diff15
-rw-r--r--data/libgmp10/make.sh8
-rw-r--r--data/libgpg-error/_metadata/in.1443.000
l---------data/libgpg-error/_metadata/maintainer2
l---------data/libgpg-error/_metadata/readline.dep1
-rw-r--r--data/libgpg-error/_metadata/version2
-rw-r--r--data/libgpg-error/libgpg-error-1.32.tar.bz2bin0 -> 904382 bytes
-rw-r--r--data/libgpg-error/libgpg-error-1.6.tar.bz2bin382110 -> 0 bytes
-rw-r--r--data/libgpg-error/triplet.diff13
-rw-r--r--data/libgpod/_metadata/in.1443.000
l---------data/libgpod/_metadata/maintainer2
-rw-r--r--data/libid3tag/_metadata/in.1443.000
l---------data/libid3tag/_metadata/maintainer2
-rw-r--r--data/libid3tag/make.sh1
-rw-r--r--data/libidn2/_metadata/description1
-rw-r--r--data/libidn2/_metadata/homepage1
-rw-r--r--data/libidn2/_metadata/in.1443.000
l---------data/libidn2/_metadata/license1
l---------data/libidn2/_metadata/maintainer1
-rw-r--r--data/libidn2/_metadata/priority (renamed from data/iphonesurge/_metadata/priority)0
-rw-r--r--data/libidn2/_metadata/role1
-rw-r--r--data/libidn2/_metadata/section1
-rw-r--r--data/libidn2/_metadata/tags1
-rw-r--r--data/libidn2/_metadata/version1
-rw-r--r--data/libidn2/libidn2-2.0.5.tar.gzbin0 -> 2091929 bytes
-rw-r--r--data/libidn2/make.sh4
-rw-r--r--data/libio-compress-lzma-perl/IO-Compress-Lzma-2.081.tar.gzbin0 -> 89249 bytes
-rw-r--r--data/libio-compress-lzma-perl/_metadata/description1
-rw-r--r--data/libio-compress-lzma-perl/_metadata/in.1443.000
-rw-r--r--data/libio-compress-lzma-perl/_metadata/in.550.580
l---------data/libio-compress-lzma-perl/_metadata/libcompress-raw-lzma-perl.dep1
-rw-r--r--data/libio-compress-lzma-perl/_metadata/license248
l---------data/libio-compress-lzma-perl/_metadata/maintainer1
l---------data/libio-compress-lzma-perl/_metadata/perl.dep1
-rw-r--r--data/libio-compress-lzma-perl/_metadata/priority (renamed from data/mspasov.com/_metadata/priority)0
-rw-r--r--data/libio-compress-lzma-perl/_metadata/role1
-rw-r--r--data/libio-compress-lzma-perl/_metadata/section1
-rw-r--r--data/libio-compress-lzma-perl/_metadata/tags1
-rw-r--r--data/libio-compress-lzma-perl/_metadata/version1
-rw-r--r--data/libio-compress-lzma-perl/make.sh7
-rw-r--r--data/libirecovery/_metadata/description1
-rw-r--r--data/libirecovery/_metadata/in.1443.000
l---------data/libirecovery/_metadata/license (renamed from data/gnupth/_metadata/license)0
l---------data/libirecovery/_metadata/maintainer1
-rw-r--r--data/libirecovery/_metadata/priority (renamed from data/namedfork.net/_metadata/priority)0
l---------data/libirecovery/_metadata/readline.dep1
-rw-r--r--data/libirecovery/_metadata/section1
-rw-r--r--data/libirecovery/_metadata/tags1
-rw-r--r--data/libirecovery/_metadata/version1
-rw-r--r--data/libirecovery/libirecovery-0.1.1+210.tar.xzbin0 -> 28564 bytes
-rw-r--r--data/libirecovery/make.sh5
-rw-r--r--data/libjpeg-turbo/_metadata/description1
-rw-r--r--data/libjpeg-turbo/_metadata/homepage1
-rw-r--r--data/libjpeg-turbo/_metadata/in.1443.000
l---------data/libjpeg-turbo/_metadata/license1
l---------data/libjpeg-turbo/_metadata/maintainer1
-rw-r--r--data/libjpeg-turbo/_metadata/priority (renamed from data/perl_/_metadata/priority)0
-rw-r--r--data/libjpeg-turbo/_metadata/role1
-rw-r--r--data/libjpeg-turbo/_metadata/section1
-rw-r--r--data/libjpeg-turbo/_metadata/tags1
-rw-r--r--data/libjpeg-turbo/_metadata/version1
-rw-r--r--data/libjpeg-turbo/libjpeg-turbo-2.0.0.tar.gzbin0 -> 2158457 bytes
-rw-r--r--data/libjpeg-turbo/make.sh22
-rw-r--r--data/libksba/_metadata/in.1443.000
l---------data/libksba/_metadata/maintainer2
-rw-r--r--data/libksba/_metadata/version2
-rw-r--r--data/libksba/libksba-1.0.2.tar.bz2bin525731 -> 0 bytes
-rw-r--r--data/libksba/libksba-1.3.5.tar.bz2bin0 -> 620649 bytes
-rw-r--r--data/libksba/make.sh4
-rw-r--r--data/libmad/Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff34
-rw-r--r--data/libmad/_metadata/in.1443.000
l---------data/libmad/_metadata/maintainer2
-rw-r--r--data/libmad/_metadata/version2
-rw-r--r--data/libmad/amd64-64bit.diff12
-rw-r--r--data/libmad/length-check.diff817
-rw-r--r--data/libmad/libmad.thumb.diff14
-rw-r--r--data/libmad/make.sh3
-rw-r--r--data/libmad/md_size.diff58
-rw-r--r--data/libmad/mips-gcc4.4.diff25
-rw-r--r--data/libmad/optimize.diff77
-rw-r--r--data/libnet/_metadata/in.1443.000
l---------data/libnet/_metadata/maintainer2
-rw-r--r--data/libnghttp2/_metadata/conflicts1
-rw-r--r--data/libnghttp2/_metadata/description1
-rw-r--r--data/libnghttp2/_metadata/homepage1
-rw-r--r--data/libnghttp2/_metadata/in.1443.000
-rw-r--r--data/libnghttp2/_metadata/in.550.580
l---------data/libnghttp2/_metadata/libevent.dep1
l---------data/libnghttp2/_metadata/libssl1.0.dep1
-rw-r--r--data/libnghttp2/_metadata/license23
l---------data/libnghttp2/_metadata/maintainer1
-rw-r--r--data/libnghttp2/_metadata/priority1
-rw-r--r--data/libnghttp2/_metadata/provides1
-rw-r--r--data/libnghttp2/_metadata/replaces1
-rw-r--r--data/libnghttp2/_metadata/role1
-rw-r--r--data/libnghttp2/_metadata/section1
-rw-r--r--data/libnghttp2/_metadata/tags1
-rw-r--r--data/libnghttp2/_metadata/version1
-rw-r--r--data/libnghttp2/make.sh4
-rw-r--r--data/libnghttp2/nghttp2-1.32.0.tar.xzbin0 -> 1548528 bytes
-rw-r--r--data/libnids/_metadata/in.1443.000
l---------data/libnids/_metadata/maintainer2
-rw-r--r--data/libpar2/_metadata/in.1443.000
-rw-r--r--data/libpar2/make.sh5
-rw-r--r--data/libpar2/pkgconfig.diff21
-rw-r--r--data/libpcap/_metadata/in.1443.000
l---------data/libpcap/_metadata/maintainer2
-rw-r--r--data/libpcap/_metadata/version2
-rw-r--r--data/libpcap/libpcap-1.0.0.tar.gzbin524273 -> 0 bytes
-rw-r--r--data/libpcap/libpcap-1.9.0.tar.gzbin0 -> 832079 bytes
-rw-r--r--data/libpcap/make.sh2
-rw-r--r--data/libpipeline/_metadata/description1
-rw-r--r--data/libpipeline/_metadata/homepage1
-rw-r--r--data/libpipeline/_metadata/in.1443.000
l---------data/libpipeline/_metadata/license1
l---------data/libpipeline/_metadata/maintainer1
-rw-r--r--data/libpipeline/_metadata/priority (renamed from data/pwncenter.com/_metadata/priority)0
-rw-r--r--data/libpipeline/_metadata/role1
-rw-r--r--data/libpipeline/_metadata/section1
-rw-r--r--data/libpipeline/_metadata/tags1
-rw-r--r--data/libpipeline/_metadata/version1
-rw-r--r--data/libpipeline/libpipeline-1.5.0.tar.gzbin0 -> 828765 bytes
-rw-r--r--data/libpipeline/make.sh4
-rw-r--r--data/libpipeline/program_name.diff17
-rw-r--r--data/libplist/_metadata/description1
-rw-r--r--data/libplist/_metadata/in.1443.000
l---------data/libplist/_metadata/license1
l---------data/libplist/_metadata/maintainer1
-rw-r--r--data/libplist/_metadata/priority1
-rw-r--r--data/libplist/_metadata/role1
-rw-r--r--data/libplist/_metadata/section1
-rw-r--r--data/libplist/_metadata/tags1
-rw-r--r--data/libplist/_metadata/version1
-rw-r--r--data/libplist/libplist-2.0.0.tar.gzbin0 -> 161155 bytes
-rw-r--r--data/libplist/make.sh5
-rw-r--r--data/libresolv/_metadata/in.1443.000
l---------data/libresolv/_metadata/maintainer2
-rw-r--r--data/libresolv/_metadata/priority2
-rw-r--r--data/libresolv/make.sh1
-rw-r--r--data/librpmatch/_metadata/description1
-rw-r--r--data/librpmatch/_metadata/in.1443.000
-rw-r--r--data/librpmatch/_metadata/license29
l---------data/librpmatch/_metadata/maintainer1
-rw-r--r--data/librpmatch/_metadata/priority (renamed from data/ranbee.com/_metadata/priority)0
-rw-r--r--data/librpmatch/_metadata/role1
-rw-r--r--data/librpmatch/_metadata/section1
-rw-r--r--data/librpmatch/_metadata/tags1
-rw-r--r--data/librpmatch/_metadata/version1
-rw-r--r--data/librpmatch/cpp.diff22
-rw-r--r--data/librpmatch/make.sh5
-rw-r--r--data/librpmatch/rpmatch-1.0.tar.gzbin0 -> 3151 bytes
-rw-r--r--data/libsamplerate/_metadata/in.1443.000
l---------data/libsamplerate/_metadata/libfftw3.dep1
l---------data/libsamplerate/_metadata/maintainer2
-rw-r--r--data/libsamplerate/make.sh3
l---------data/libserf/_metadata/apr-lib.dep1
l---------data/libserf/_metadata/apr-util.dep1
-rw-r--r--data/libserf/_metadata/description1
l---------data/libserf/_metadata/expat.dep1
-rw-r--r--data/libserf/_metadata/homepage1
-rw-r--r--data/libserf/_metadata/in.1443.000
l---------data/libserf/_metadata/libssl1.0.dep1
l---------data/libserf/_metadata/license1
l---------data/libserf/_metadata/maintainer1
-rw-r--r--data/libserf/_metadata/priority1
-rw-r--r--data/libserf/_metadata/role1
-rw-r--r--data/libserf/_metadata/section1
-rw-r--r--data/libserf/_metadata/tags1
-rw-r--r--data/libserf/_metadata/version1
-rw-r--r--data/libserf/make.sh8
-rw-r--r--data/libserf/serf-1.3.9.tar.bz2bin0 -> 145132 bytes
-rw-r--r--data/libsigc++/_metadata/in.1443.000
-rw-r--r--data/libsigc++/_metadata/version2
-rw-r--r--data/libsigc++/libsigc++-2.10.0.tar.xzbin0 -> 3794612 bytes
-rw-r--r--data/libsigc++/libsigc++-2.2.3.tar.bz2bin4507948 -> 0 bytes
-rw-r--r--data/libsigc++/make.sh2
-rw-r--r--data/libsigc++3.0/_metadata/description1
l---------data/libsigc++3.0/_metadata/license1
l---------data/libsigc++3.0/_metadata/maintainer (renamed from data/pam/_metadata/maintainer)0
-rw-r--r--data/libsigc++3.0/_metadata/priority (renamed from data/ripdev/_metadata/priority)0
-rw-r--r--data/libsigc++3.0/_metadata/role1
-rw-r--r--data/libsigc++3.0/_metadata/section1
-rw-r--r--data/libsigc++3.0/_metadata/tags1
-rw-r--r--data/libsigc++3.0/_metadata/version1
-rw-r--r--data/libsigc++3.0/libsigc++-2.99.11.tar.xzbin0 -> 951848 bytes
-rw-r--r--data/libsigc++3.0/make.sh4
-rw-r--r--data/libssh2/_metadata/description1
-rw-r--r--data/libssh2/_metadata/homepage1
-rw-r--r--data/libssh2/_metadata/in.1443.000
-rw-r--r--data/libssh2/_metadata/in.550.580
l---------data/libssh2/_metadata/libssl1.0.dep1
-rw-r--r--data/libssh2/_metadata/license41
l---------data/libssh2/_metadata/maintainer1
-rw-r--r--data/libssh2/_metadata/priority (renamed from data/sosiphone.com/_metadata/priority)0
-rw-r--r--data/libssh2/_metadata/role1
-rw-r--r--data/libssh2/_metadata/section1
-rw-r--r--data/libssh2/_metadata/tags1
-rw-r--r--data/libssh2/_metadata/version1
-rw-r--r--data/libssh2/libssh2-1.8.0.tar.gzbin0 -> 854916 bytes
-rw-r--r--data/libssh2/make.sh4
l---------data/libssl-dev/_metadata/_openssl1.0.dep1
-rw-r--r--data/libssl-dev/_metadata/description1
-rw-r--r--data/libssl-dev/_metadata/in.1443.000
-rw-r--r--data/libssl-dev/_metadata/in.550.580
l---------data/libssl-dev/_metadata/libssl1.0.dep1
l---------data/libssl-dev/_metadata/libssl1.0.ver.iphoneos-arm1
l---------data/libssl-dev/_metadata/license1
l---------data/libssl-dev/_metadata/maintainer1
-rw-r--r--data/libssl-dev/_metadata/name1
l---------data/libssl-dev/_metadata/priority1
l---------data/libssl-dev/_metadata/role1
l---------data/libssl-dev/_metadata/section1
l---------data/libssl-dev/_metadata/tags1
l---------data/libssl-dev/_metadata/version1
-rw-r--r--data/libssl-dev/make.sh3
l---------data/libssl0.9.8/_metadata/_openssl0.9.8.dep1
-rw-r--r--data/libssl0.9.8/_metadata/conflicts1
-rw-r--r--data/libssl0.9.8/_metadata/description1
-rw-r--r--data/libssl0.9.8/_metadata/in.1443.000
-rw-r--r--data/libssl0.9.8/_metadata/in.550.580
l---------data/libssl0.9.8/_metadata/license1
l---------data/libssl0.9.8/_metadata/maintainer1
-rw-r--r--data/libssl0.9.8/_metadata/name1
l---------data/libssl0.9.8/_metadata/priority1
l---------data/libssl0.9.8/_metadata/role1
l---------data/libssl0.9.8/_metadata/section1
l---------data/libssl0.9.8/_metadata/tags1
l---------data/libssl0.9.8/_metadata/version1
-rw-r--r--data/libssl0.9.8/make.sh3
l---------data/libssl1.0/_metadata/_openssl1.0.dep1
-rw-r--r--data/libssl1.0/_metadata/conflicts1
-rw-r--r--data/libssl1.0/_metadata/depends1
-rw-r--r--data/libssl1.0/_metadata/description1
-rw-r--r--data/libssl1.0/_metadata/in.1443.000
-rw-r--r--data/libssl1.0/_metadata/in.550.580
l---------data/libssl1.0/_metadata/license1
l---------data/libssl1.0/_metadata/maintainer1
-rw-r--r--data/libssl1.0/_metadata/name1
l---------data/libssl1.0/_metadata/priority1
l---------data/libssl1.0/_metadata/role1
l---------data/libssl1.0/_metadata/section1
l---------data/libssl1.0/_metadata/tags1
l---------data/libssl1.0/_metadata/version1
-rw-r--r--data/libssl1.0/make.sh3
-rw-r--r--data/libstdc++/_metadata/in.1443.000
l---------data/libstdc++/_metadata/maintainer2
-rw-r--r--data/libtapi/_metadata/description1
-rw-r--r--data/libtapi/_metadata/in.1443.000
l---------data/libtapi/_metadata/license1
l---------data/libtapi/_metadata/maintainer1
-rw-r--r--data/libtapi/_metadata/priority (renamed from data/srt10coupe.de/_metadata/priority)0
-rw-r--r--data/libtapi/_metadata/section1
-rw-r--r--data/libtapi/_metadata/tags1
-rw-r--r--data/libtapi/_metadata/version1
-rw-r--r--data/libtapi/apple-libtapi.tar.gzbin0 -> 119552723 bytes
-rw-r--r--data/libtapi/make.sh36
-rw-r--r--data/libtasn1/_metadata/description1
-rw-r--r--data/libtasn1/_metadata/homepage1
-rw-r--r--data/libtasn1/_metadata/in.1443.000
l---------data/libtasn1/_metadata/license1
l---------data/libtasn1/_metadata/maintainer1
-rw-r--r--data/libtasn1/_metadata/priority (renamed from data/touch-mania.com/_metadata/priority)0
-rw-r--r--data/libtasn1/_metadata/role1
-rw-r--r--data/libtasn1/_metadata/section1
-rw-r--r--data/libtasn1/_metadata/tags1
-rw-r--r--data/libtasn1/_metadata/version1
-rw-r--r--data/libtasn1/libtasn1-4.13.tar.gzbin0 -> 1891703 bytes
-rw-r--r--data/libtasn1/make.sh4
-rw-r--r--data/libterm-readline-perl-perl/Term-ReadLine-Perl-1.0303.tar.gzbin0 -> 48710 bytes
-rw-r--r--data/libterm-readline-perl-perl/_metadata/description1
-rw-r--r--data/libterm-readline-perl-perl/_metadata/in.1443.000
-rw-r--r--data/libterm-readline-perl-perl/_metadata/in.550.580
-rw-r--r--data/libterm-readline-perl-perl/_metadata/license248
l---------data/libterm-readline-perl-perl/_metadata/maintainer1
l---------data/libterm-readline-perl-perl/_metadata/perl.dep1
-rw-r--r--data/libterm-readline-perl-perl/_metadata/priority (renamed from data/urbanfanatics.com/_metadata/priority)0
-rw-r--r--data/libterm-readline-perl-perl/_metadata/role1
-rw-r--r--data/libterm-readline-perl-perl/_metadata/section1
-rw-r--r--data/libterm-readline-perl-perl/_metadata/tags1
-rw-r--r--data/libterm-readline-perl-perl/_metadata/version1
l---------data/libterm-readline-perl-perl/_metadata/xz.dep1
-rw-r--r--data/libterm-readline-perl-perl/make.sh7
-rw-r--r--data/libunistring/_metadata/description1
-rw-r--r--data/libunistring/_metadata/homepage1
-rw-r--r--data/libunistring/_metadata/in.1443.000
l---------data/libunistring/_metadata/license1
l---------data/libunistring/_metadata/maintainer1
-rw-r--r--data/libunistring/_metadata/priority (renamed from data/winterboarder.com/_metadata/priority)0
-rw-r--r--data/libunistring/_metadata/role1
-rw-r--r--data/libunistring/_metadata/section1
-rw-r--r--data/libunistring/_metadata/tags1
-rw-r--r--data/libunistring/_metadata/version1
-rw-r--r--data/libunistring/libunistring-0.9.10.tar.xzbin0 -> 2051320 bytes
-rw-r--r--data/libunistring/make.sh4
-rw-r--r--data/libutf8proc/_metadata/description1
-rw-r--r--data/libutf8proc/_metadata/homepage1
-rw-r--r--data/libutf8proc/_metadata/in.1443.000
l---------data/libutf8proc/_metadata/license1
l---------data/libutf8proc/_metadata/maintainer1
-rw-r--r--data/libutf8proc/_metadata/priority (renamed from data/zanekills.com/_metadata/priority)0
-rw-r--r--data/libutf8proc/_metadata/role1
-rw-r--r--data/libutf8proc/_metadata/section1
-rw-r--r--data/libutf8proc/_metadata/tags1
-rw-r--r--data/libutf8proc/_metadata/version1
-rw-r--r--data/libutf8proc/make.sh24
-rw-r--r--data/libutf8proc/utf8proc-2.2.0.tar.gzbin0 -> 156334 bytes
-rw-r--r--data/libvncserver/LibVNCServer-0.9.11.tar.gzbin0 -> 1413739 bytes
-rw-r--r--data/libvncserver/LibVNCServer-0.9.8.1.tar.gzbin1238171 -> 0 bytes
l---------data/libvncserver/_metadata/gnutls.dep1
-rw-r--r--data/libvncserver/_metadata/in.1443.000
l---------data/libvncserver/_metadata/jpeg.dep1
l---------data/libvncserver/_metadata/libjpeg-turbo.dep1
l---------data/libvncserver/_metadata/maintainer2
l---------data/libvncserver/_metadata/p11-kit.dep1
l---------data/libvncserver/_metadata/png.dep1
-rw-r--r--data/libvncserver/_metadata/version2
-rw-r--r--data/libvncserver/clsockrace.diff14
-rw-r--r--data/libvncserver/make.sh5
-rw-r--r--data/libvncserver/subdirs.diff25
-rw-r--r--data/libxapian/_metadata/description1
-rw-r--r--data/libxapian/_metadata/in.1443.000
l---------data/libxapian/_metadata/license1
l---------data/libxapian/_metadata/maintainer1
-rw-r--r--data/libxapian/_metadata/priority (renamed from data/zuijlen.eu/_metadata/priority)0
-rw-r--r--data/libxapian/_metadata/role1
-rw-r--r--data/libxapian/_metadata/section1
-rw-r--r--data/libxapian/_metadata/tags1
-rw-r--r--data/libxapian/_metadata/version1
-rw-r--r--data/libxapian/make.sh4
-rw-r--r--data/libxapian/xapian-core-1.4.7.tar.xzbin0 -> 2874172 bytes
-rw-r--r--data/libxml2-dylib/_metadata/in.1443.000
-rw-r--r--data/libxml2/_metadata/in.1443.000
l---------data/libxml2/_metadata/libxml2-lib.dep1
-rw-r--r--data/libxslt/_metadata/in.1443.000
l---------data/libxslt/_metadata/maintainer2
-rw-r--r--data/libzip/_metadata/description1
-rw-r--r--data/libzip/_metadata/in.1443.000
l---------data/libzip/_metadata/license1
l---------data/libzip/_metadata/maintainer1
-rw-r--r--data/libzip/_metadata/priority1
-rw-r--r--data/libzip/_metadata/section1
-rw-r--r--data/libzip/_metadata/tags1
-rw-r--r--data/libzip/_metadata/version1
-rw-r--r--data/libzip/libzip-1.5.1.tar.xzbin0 -> 717908 bytes
-rw-r--r--data/libzip/make.sh24
-rw-r--r--data/lighttpd/_metadata/in.1443.000
l---------data/lighttpd/_metadata/libssl1.0.dep1
l---------data/lighttpd/_metadata/maintainer2
l---------data/lighttpd/_metadata/openssl.dep1
-rw-r--r--data/links/_metadata/in.1443.000
l---------data/links/_metadata/libssl1.0.dep1
l---------data/links/_metadata/maintainer2
l---------data/links/_metadata/openssl.dep1
-rw-r--r--data/links/_metadata/version2
-rw-r--r--data/links/links-0.99.tar.gzbin587574 -> 0 bytes
-rw-r--r--data/links/links-1.03.tar.gzbin0 -> 641917 bytes
-rw-r--r--data/links/make.sh2
-rw-r--r--data/links/mdns.diff25
-rw-r--r--data/llvm-clang/_metadata/conflicts1
-rw-r--r--data/llvm-clang/_metadata/depends1
-rw-r--r--data/llvm-clang/_metadata/description1
-rw-r--r--data/llvm-clang/_metadata/in.1443.000
l---------data/llvm-clang/_metadata/license1
l---------data/llvm-clang/_metadata/maintainer1
-rw-r--r--data/llvm-clang/_metadata/name1
-rwxr-xr-xdata/llvm-clang/_metadata/postinst22
-rwxr-xr-xdata/llvm-clang/_metadata/prerm20
-rw-r--r--data/llvm-clang/_metadata/priority1
-rw-r--r--data/llvm-clang/_metadata/provides1
-rw-r--r--data/llvm-clang/_metadata/replaces1
-rw-r--r--data/llvm-clang/_metadata/role1
-rw-r--r--data/llvm-clang/_metadata/section1
-rw-r--r--data/llvm-clang/_metadata/tags1
-rw-r--r--data/llvm-clang/_metadata/version1
-rw-r--r--data/llvm-clang/iphonesdkpath.diff46
-rw-r--r--data/llvm-clang/make.sh40
-rw-r--r--data/llvm-clang/swift-clang-4.1.3-RELEASE.tar.gzbin0 -> 16439070 bytes
-rw-r--r--data/llvm-clang/swift-llvm-4.1.3-RELEASE.tar.gzbin0 -> 35324047 bytes
-rw-r--r--data/lsof/_metadata/in.1443.000
l---------data/lsof/_metadata/maintainer2
-rw-r--r--data/lynx/_metadata/in.1443.000
l---------data/lynx/_metadata/libssl1.0.dep1
l---------data/lynx/_metadata/maintainer2
l---------data/lynx/_metadata/openssl.dep1
-rw-r--r--data/lz4/_metadata/description1
-rw-r--r--data/lz4/_metadata/homepage1
-rw-r--r--data/lz4/_metadata/in.1443.000
-rw-r--r--data/lz4/_metadata/in.550.580
l---------data/lz4/_metadata/license1
l---------data/lz4/_metadata/maintainer1
-rw-r--r--data/lz4/_metadata/name1
-rw-r--r--data/lz4/_metadata/priority1
-rw-r--r--data/lz4/_metadata/role1
-rw-r--r--data/lz4/_metadata/section1
-rw-r--r--data/lz4/_metadata/tags1
-rw-r--r--data/lz4/_metadata/version1
-rw-r--r--data/lz4/make.sh23
-rw-r--r--data/lz4/v1.7.5.tar.gzbin0 -> 208019 bytes
-rw-r--r--data/lzip/_metadata/description1
-rw-r--r--data/lzip/_metadata/homepage1
-rw-r--r--data/lzip/_metadata/in.1443.000
l---------data/lzip/_metadata/license1
l---------data/lzip/_metadata/maintainer1
-rw-r--r--data/lzip/_metadata/priority1
-rw-r--r--data/lzip/_metadata/role1
-rw-r--r--data/lzip/_metadata/section1
-rw-r--r--data/lzip/_metadata/tags1
-rw-r--r--data/lzip/_metadata/version1
-rw-r--r--data/lzip/lzip-1.20.tar.gzbin0 -> 103426 bytes
-rw-r--r--data/lzip/make.sh4
-rw-r--r--data/lzma/_metadata/conflicts1
l---------data/lzma/_metadata/grep.dep1
-rw-r--r--data/lzma/_metadata/in.1443.000
l---------data/lzma/_metadata/maintainer2
-rw-r--r--data/lzma/_metadata/version2
-rw-r--r--data/lzma/make.sh1
-rw-r--r--data/m4/_metadata/in.1443.000
l---------data/m4/_metadata/maintainer2
-rw-r--r--data/m4/_metadata/version2
-rw-r--r--data/m4/m4-1.4.10.tar.gzbin928375 -> 0 bytes
-rw-r--r--data/m4/m4-1.4.18.tar.xzbin0 -> 1207688 bytes
-rw-r--r--data/make/_metadata/in.1443.000
l---------data/make/_metadata/maintainer2
-rw-r--r--data/make/_metadata/version2
-rw-r--r--data/make/make-3.81.tar.gzbin1564560 -> 0 bytes
-rw-r--r--data/make/make-4.2.1.tar.bz2bin0 -> 1407126 bytes
-rw-r--r--data/mc/_metadata/homepage2
-rw-r--r--data/mc/_metadata/in.1443.000
l---------data/mc/_metadata/maintainer2
-rw-r--r--data/mc/_metadata/version2
-rw-r--r--data/mc/make.sh2
-rw-r--r--data/mc/mc-4.6.1.tar.gzbin3928370 -> 0 bytes
-rw-r--r--data/mc/mc-4.8.21.tar.xzbin0 -> 2528292 bytes
-rw-r--r--data/mc/structtime.diff16
-rw-r--r--data/mc/subdirs.diff34
-rw-r--r--data/mdnsresponder/_metadata/in.1443.000
l---------data/mdnsresponder/_metadata/maintainer2
-rw-r--r--data/metasploit3/_metadata/in.1443.000
-rw-r--r--data/minicom/_metadata/in.1443.000
l---------data/minicom/_metadata/maintainer2
-rw-r--r--data/minicom/_metadata/version2
-rw-r--r--data/minicom/extern.diff31
-rw-r--r--data/minicom/make.sh2
-rw-r--r--data/minicom/minicom-2.2.tar.gzbin720536 -> 0 bytes
-rw-r--r--data/minicom/minicom-2.7.1.tar.gzbin0 -> 875939 bytes
-rw-r--r--data/minicom/timestamp.diff25
-rw-r--r--data/minicom/types.diff12
-rw-r--r--data/minicom/wprintf.diff1157
l---------data/mobileterminal/_metadata/maintainer2
-rw-r--r--data/mobileterminal/arch.diff11
-rw-r--r--data/mobileterminal/gsevent.diff12
-rw-r--r--data/mspasov.com/_metadata/description1
l---------data/mspasov.com/_metadata/license1
-rw-r--r--data/mspasov.com/_metadata/maintainer1
-rw-r--r--data/mspasov.com/_metadata/name1
-rw-r--r--data/mspasov.com/_metadata/role1
-rw-r--r--data/mspasov.com/_metadata/section1
-rw-r--r--data/mspasov.com/_metadata/tags1
-rw-r--r--data/mspasov.com/_metadata/version1
-rw-r--r--data/mspasov.com/bgkb-logo-small.pngbin3332 -> 0 bytes
-rw-r--r--data/mspasov.com/make.sh4
-rw-r--r--data/mspasov.com/mspasov.com.list6
-rw-r--r--data/mterminal/_metadata/author1
l---------data/mterminal/_metadata/bash.dep1
l---------data/mterminal/_metadata/coreutils.dep1
-rw-r--r--data/mterminal/_metadata/depiction1
-rw-r--r--data/mterminal/_metadata/description1
-rw-r--r--data/mterminal/_metadata/homepage1
-rw-r--r--data/mterminal/_metadata/in.1443.000
l---------data/mterminal/_metadata/license1
l---------data/mterminal/_metadata/maintainer1
-rw-r--r--data/mterminal/_metadata/name1
l---------data/mterminal/_metadata/ncurses.dep1
-rw-r--r--data/mterminal/_metadata/priority1
-rw-r--r--data/mterminal/_metadata/role (renamed from data/easywakeup.net/_metadata/role)0
-rw-r--r--data/mterminal/_metadata/section1
l---------data/mterminal/_metadata/system-cmds.dep1
-rw-r--r--data/mterminal/_metadata/tags1
-rw-r--r--data/mterminal/_metadata/version1
-rw-r--r--data/mterminal/entitlement.xml11
-rw-r--r--data/mterminal/make.sh5
-rw-r--r--data/mterminal/mterminal-283695be6357.zipbin0 -> 703176 bytes
-rw-r--r--data/mterminal/mterminal.diff54
-rw-r--r--data/nail/_metadata/in.1443.000
l---------data/nail/_metadata/libssl0.9.8.dep1
l---------data/nail/_metadata/maintainer2
l---------data/nail/_metadata/openssl.dep1
-rw-r--r--data/namedfork.net/_metadata/description1
l---------data/namedfork.net/_metadata/license1
-rw-r--r--data/namedfork.net/_metadata/maintainer1
-rw-r--r--data/namedfork.net/_metadata/name1
-rwxr-xr-xdata/namedfork.net/_metadata/postinst4
-rwxr-xr-xdata/namedfork.net/_metadata/prerm4
-rw-r--r--data/namedfork.net/_metadata/role1
-rw-r--r--data/namedfork.net/_metadata/section1
-rw-r--r--data/namedfork.net/_metadata/tags1
-rw-r--r--data/namedfork.net/_metadata/version1
-rw-r--r--data/namedfork.net/make.sh6
-rw-r--r--data/namedfork.net/namedfork-Icon.pngbin1304 -> 0 bytes
-rw-r--r--data/namedfork.net/namedfork.net.list6
-rw-r--r--data/namedfork.net/zydeco.gpgbin1515 -> 0 bytes
-rw-r--r--data/nano/_metadata/conffiles1
-rwxr-xr-xdata/nano/_metadata/extrainst_4
-rw-r--r--data/nano/_metadata/in.1443.000
l---------data/nano/_metadata/maintainer2
-rw-r--r--data/nano/_metadata/version2
-rw-r--r--data/nano/make.sh4
-rw-r--r--data/nano/nano-2.2.6.tar.gzbin1572388 -> 0 bytes
-rw-r--r--data/nano/nano-3.2.tar.xzbin0 -> 1514744 bytes
-rw-r--r--data/nano/timestamp.diff13
-rw-r--r--data/ncftp/_metadata/in.1443.000
l---------data/ncftp/_metadata/maintainer2
-rw-r--r--data/ncftp/_metadata/version2
-rw-r--r--data/ncftp/extern.diff12
-rw-r--r--data/ncftp/getdomainname.diff12
-rw-r--r--data/ncftp/make.sh4
-rw-r--r--data/ncftp/mdns.diff25
-rw-r--r--data/ncftp/ncftp-3.2.1-src.tar.gzbin537768 -> 0 bytes
-rw-r--r--data/ncftp/ncftp-3.2.3-src.tar.bz2bin425393 -> 0 bytes
-rw-r--r--data/ncftp/ncftp-3.2.6-src.tar.xzbin0 -> 420564 bytes
-rw-r--r--data/ncurses/_metadata/depends1
-rw-r--r--data/ncurses/_metadata/in.1443.000
l---------data/ncurses/_metadata/maintainer2
-rw-r--r--data/ncurses/_metadata/version2
-rw-r--r--data/ncurses/clang.diff43
-rw-r--r--data/ncurses/make.sh10
-rw-r--r--data/ncurses/ncurses-5.7.tar.gzbin2445052 -> 0 bytes
-rw-r--r--data/ncurses/ncurses-6.1.tar.gzbin0 -> 3266617 bytes
-rw-r--r--data/ncurses/xopen.diff22
-rw-r--r--data/ncurses5-libs/_metadata/description1
-rw-r--r--data/ncurses5-libs/_metadata/in.1443.000
-rw-r--r--data/ncurses5-libs/_metadata/license27
l---------data/ncurses5-libs/_metadata/maintainer1
-rw-r--r--data/ncurses5-libs/_metadata/name1
-rw-r--r--data/ncurses5-libs/_metadata/priority1
-rw-r--r--data/ncurses5-libs/_metadata/role1
-rw-r--r--data/ncurses5-libs/_metadata/section1
-rw-r--r--data/ncurses5-libs/_metadata/tags1
-rw-r--r--data/ncurses5-libs/_metadata/version1
-rw-r--r--data/ncurses5-libs/clang.diff43
-rw-r--r--data/ncurses5-libs/configsub.diff751
-rw-r--r--data/ncurses5-libs/make.sh25
-rw-r--r--data/ncurses5-libs/ncurses-5.9.tar.gzbin0 -> 2826473 bytes
-rw-r--r--data/ncurses5-libs/xopen.diff18
-rw-r--r--data/neon/_metadata/in.1443.000
l---------data/neon/_metadata/libssl1.0.dep1
l---------data/neon/_metadata/maintainer2
l---------data/neon/_metadata/openssl.dep1
-rw-r--r--data/neon/make.sh2
-rw-r--r--data/neon/neon-0.26.4.tar.gzbin794225 -> 0 bytes
-rw-r--r--data/neon/neon-0.30.2.tar.gzbin0 -> 932779 bytes
-rw-r--r--data/neon/nmedit.diff51
-rw-r--r--data/netatalk/_metadata/in.1443.000
l---------data/netatalk/_metadata/libssl1.0.dep1
l---------data/netatalk/_metadata/maintainer2
l---------data/netatalk/_metadata/openssl.dep1
-rw-r--r--data/netcat/_metadata/in.1443.000
l---------data/netcat/_metadata/maintainer2
-rw-r--r--data/netcat/make.sh3
-rw-r--r--data/netcat/mdns.diff25
-rw-r--r--data/nettle/_metadata/description1
-rw-r--r--data/nettle/_metadata/homepage1
-rw-r--r--data/nettle/_metadata/in.1443.000
l---------data/nettle/_metadata/libgmp10.dep1
l---------data/nettle/_metadata/license1
l---------data/nettle/_metadata/maintainer1
-rw-r--r--data/nettle/_metadata/name1
-rw-r--r--data/nettle/_metadata/priority1
-rw-r--r--data/nettle/_metadata/role1
-rw-r--r--data/nettle/_metadata/section1
-rw-r--r--data/nettle/_metadata/tags1
-rw-r--r--data/nettle/_metadata/version1
-rw-r--r--data/nettle/make.sh4
-rw-r--r--data/nettle/nettle-3.4.tar.xzbin0 -> 1416012 bytes
l---------data/network-cmds/_metadata/_network-cmds.dep1
-rw-r--r--data/network-cmds/_metadata/in.1443.000
-rw-r--r--data/ngrep/_metadata/in.1443.000
l---------data/ngrep/_metadata/maintainer2
l---------data/nmap/_metadata/maintainer2
l---------data/nmap/_metadata/openssl.dep1
-rw-r--r--data/nmap/_metadata/version2
-rw-r--r--data/nmap/bsd.diff12
-rw-r--r--data/nmap/exit.diff11
-rw-r--r--data/nmap/include.diff13
-rw-r--r--data/nmap/libpcap.diff6712
-rw-r--r--data/nmap/make.sh12
-rw-r--r--data/nmap/nmap-5.00.tar.bz2bin9068342 -> 0 bytes
-rw-r--r--data/nmap/strip.diff12
-rw-r--r--data/npth/_metadata/conflicts1
-rw-r--r--data/npth/_metadata/description (renamed from data/gnupth/_metadata/description)0
-rw-r--r--data/npth/_metadata/in.1443.000
l---------data/npth/_metadata/license1
l---------data/npth/_metadata/maintainer1
-rw-r--r--data/npth/_metadata/name1
-rw-r--r--data/npth/_metadata/priority1
-rw-r--r--data/npth/_metadata/role1
-rw-r--r--data/npth/_metadata/section1
-rw-r--r--data/npth/_metadata/tags1
-rw-r--r--data/npth/_metadata/version1
-rw-r--r--data/npth/make.sh4
-rw-r--r--data/npth/npth-1.6.tar.bz2bin0 -> 300486 bytes
-rw-r--r--data/nvi/_metadata/in.1443.000
l---------data/nvi/_metadata/maintainer2
-rw-r--r--data/odcctools/_metadata/in.1443.000
l---------data/odcctools/_metadata/ld64.dep1
l---------data/odcctools/_metadata/libssl1.0.dep1
l---------data/odcctools/_metadata/llvm-clang.dep1
l---------data/odcctools/_metadata/maintainer2
l---------data/odcctools/_metadata/openssl.dep1
-rw-r--r--data/odcctools/_metadata/version2
-rw-r--r--data/odcctools/cctools-895.tar.gzbin0 -> 1716126 bytes
-rw-r--r--data/odcctools/fixes.diff24
-rw-r--r--data/odcctools/make.sh19
-rw-r--r--data/odcctools/odcctools-286.tgzbin2353095 -> 0 bytes
-rw-r--r--data/odcctools/otool.diff76
-rw-r--r--data/odcctools/usrbin.diff32
-rw-r--r--data/odcctools/x86.diff65
-rw-r--r--data/ogg/_metadata/in.1443.000
l---------data/ogg/_metadata/maintainer2
-rw-r--r--data/ogg/_metadata/version2
-rw-r--r--data/ogg/libogg-1.1.3.tar.gzbin403467 -> 0 bytes
-rw-r--r--data/ogg/libogg-1.3.3.tar.gzbin0 -> 579853 bytes
-rw-r--r--data/openntpd/_metadata/in.1443.000
l---------data/openntpd/_metadata/maintainer2
-rw-r--r--data/openpam/OpenPAM-22.tar.gzbin0 -> 404714 bytes
-rw-r--r--data/openpam/_metadata/conflicts1
-rw-r--r--data/openpam/_metadata/depends (renamed from data/pam/_metadata/depends)0
-rw-r--r--data/openpam/_metadata/description (renamed from data/pam/_metadata/description)0
-rw-r--r--data/openpam/_metadata/license (renamed from data/pam/_metadata/license)0
l---------data/openpam/_metadata/maintainer1
-rw-r--r--data/openpam/_metadata/name1
-rwxr-xr-xdata/openpam/_metadata/preinst (renamed from data/pam/_metadata/preinst)0
-rw-r--r--data/openpam/_metadata/priority1
-rw-r--r--data/openpam/_metadata/replaces1
-rw-r--r--data/openpam/_metadata/role1
-rw-r--r--data/openpam/_metadata/section1
-rw-r--r--data/openpam/_metadata/tags1
-rw-r--r--data/openpam/_metadata/version1
-rw-r--r--data/openpam/make.sh17
-rwxr-xr-xdata/openssh/_metadata/extrainst_5
-rw-r--r--data/openssh/_metadata/in.1443.000
l---------data/openssh/_metadata/libssl1.0.dep1
l---------data/openssh/_metadata/maintainer2
l---------data/openssh/_metadata/openssl.dep1
-rw-r--r--data/openssh/_metadata/version2
-rw-r--r--data/openssh/com.openssh.sshd.plist7
-rw-r--r--data/openssh/duplicate.diff34
-rw-r--r--data/openssh/make.sh2
-rw-r--r--data/openssh/openssh-6.7p1.tar.gzbin1351367 -> 0 bytes
-rw-r--r--data/openssh/openssh-7.9p1.tar.gzbin0 -> 1565384 bytes
-rw-r--r--data/openssh/privsep.diff224
-rw-r--r--data/openssh/sshd_config4
-rw-r--r--data/openssl/_metadata/depends1
-rw-r--r--data/openssl/_metadata/description2
-rw-r--r--data/openssl/_metadata/in.1443.000
-rw-r--r--data/openssl/_metadata/in.550.580
l---------data/openssl/_metadata/libssl1.0.dep1
l---------data/openssl/_metadata/libssl1.0.ver.iphoneos-arm1
l---------[-rw-r--r--]data/openssl/_metadata/license128
l---------data/openssl/_metadata/maintainer2
l---------[-rw-r--r--]data/openssl/_metadata/priority2
l---------[-rw-r--r--]data/openssl/_metadata/role2
l---------[-rw-r--r--]data/openssl/_metadata/section2
l---------[-rw-r--r--]data/openssl/_metadata/tags2
l---------[-rw-r--r--]data/openssl/_metadata/version2
-rw-r--r--data/openssl/iphoneos.diff15
-rw-r--r--data/openssl/make.sh13
-rw-r--r--data/openssl/openssl-0.9.8zc.tar.gzbin3735406 -> 0 bytes
-rw-r--r--data/p11-kit/_metadata/description1
-rw-r--r--data/p11-kit/_metadata/homepage1
-rw-r--r--data/p11-kit/_metadata/in.1443.000
l---------data/p11-kit/_metadata/libtasn1.dep1
l---------data/p11-kit/_metadata/license1
l---------data/p11-kit/_metadata/maintainer1
-rw-r--r--data/p11-kit/_metadata/priority1
-rw-r--r--data/p11-kit/_metadata/role1
-rw-r--r--data/p11-kit/_metadata/section1
-rw-r--r--data/p11-kit/_metadata/tags1
-rw-r--r--data/p11-kit/_metadata/version1
-rw-r--r--data/p11-kit/make.sh4
-rw-r--r--data/p11-kit/p11-kit-0.23.12.tar.xzbin0 -> 792580 bytes
-rw-r--r--data/p7zip/_metadata/in.1443.000
l---------data/p7zip/_metadata/maintainer2
-rw-r--r--data/p7zip/_metadata/version2
-rw-r--r--data/p7zip/make.sh2
-rw-r--r--data/p7zip/p7zip_16.02_src_all.tar.xzbin0 -> 3646260 bytes
-rw-r--r--data/p7zip/p7zip_4.57_src_all.tar.bz2bin1473608 -> 0 bytes
-rw-r--r--data/p7zip/tools.diff19
l---------data/pam-modules/_metadata/maintainer2
l---------data/pam-modules/_metadata/openpam.dep1
l---------data/pam-modules/_metadata/pam.dep1
-rw-r--r--data/pam-modules/pam_modules-173.1.1.tar.gzbin0 -> 76400 bytes
-rw-r--r--data/pam-modules/pam_modules-36.1.tar.gzbin69116 -> 0 bytes
-rw-r--r--data/pam-modules/pw_util.h65
-rw-r--r--data/pam-modules/tempname.diff12
-rw-r--r--data/pam-modules/vproc_priv.h82
-rw-r--r--data/pam/_metadata/name1
-rw-r--r--data/pam/_metadata/version1
-rw-r--r--data/pam/ar.diff12
-rw-r--r--data/pam/cc.diff14
-rw-r--r--data/pam/lipo.diff21
-rw-r--r--data/pam/make.diff18
-rw-r--r--data/pam/make.sh28
-rw-r--r--data/pam/pam-32.1.tar.gzbin459113 -> 0 bytes
-rw-r--r--data/pam/uname.diff12
-rw-r--r--data/patch/_metadata/in.1443.000
l---------data/patch/_metadata/maintainer2
-rw-r--r--data/patch/_metadata/version2
-rw-r--r--data/patch/make.sh9
-rw-r--r--data/patch/patch-2.5.4.tar.gzbin186879 -> 0 bytes
-rw-r--r--data/patch/patch-2.7.6.tar.xzbin0 -> 783756 bytes
-rw-r--r--data/pcre/_metadata/in.1443.000
l---------data/pcre/_metadata/maintainer2
-rw-r--r--data/pcre/_metadata/version2
-rw-r--r--data/pcre/pcre-8.30.tar.bz2bin1248556 -> 0 bytes
-rw-r--r--data/pcre/pcre-8.42.tar.bz2bin0 -> 1570171 bytes
-rw-r--r--data/pcre2/_metadata/description1
-rw-r--r--data/pcre2/_metadata/in.1443.000
-rw-r--r--data/pcre2/_metadata/license68
l---------data/pcre2/_metadata/maintainer1
-rw-r--r--data/pcre2/_metadata/priority1
-rw-r--r--data/pcre2/_metadata/role1
-rw-r--r--data/pcre2/_metadata/section1
-rw-r--r--data/pcre2/_metadata/tags1
-rw-r--r--data/pcre2/_metadata/version1
-rw-r--r--data/pcre2/make.sh5
-rw-r--r--data/pcre2/pcre2-10.31.tar.bz2bin0 -> 1603075 bytes
-rw-r--r--data/perl/IO.diff19
-rw-r--r--data/perl/_metadata/description (renamed from data/perl_/_metadata/description)0
-rw-r--r--data/perl/_metadata/in.1443.000
-rw-r--r--data/perl/_metadata/in.550.580
-rw-r--r--data/perl/_metadata/license248
l---------data/perl/_metadata/maintainer1
-rw-r--r--data/perl/_metadata/name (renamed from data/perl_/_metadata/name)0
-rw-r--r--data/perl/_metadata/priority1
-rw-r--r--data/perl/_metadata/role1
-rw-r--r--data/perl/_metadata/section1
-rw-r--r--data/perl/_metadata/tags1
-rw-r--r--data/perl/_metadata/version1
-rw-r--r--data/perl/locale.diff411
-rw-r--r--data/perl/make.sh10
-rw-r--r--data/perl/perl-5.28.0.tar.gzbin0 -> 17914739 bytes
-rw-r--r--data/perl/perl-cross-1.2.tar.gzbin0 -> 102302 bytes
-rw-r--r--data/perl/perl-cross.diff324
-rw-r--r--data/perl/perl5.diff66
-rw-r--r--data/perl_/Policy.sh162
l---------data/perl_/_metadata/maintainer1
-rw-r--r--data/perl_/_metadata/version1
-rw-r--r--data/perl_/config.sh1068
-rw-r--r--data/perl_/make.sh7
-rw-r--r--data/perl_/perl-5.10.0.tar.gzbin15595020 -> 0 bytes
-rw-r--r--data/php/_metadata/in.1443.000
l---------data/php/_metadata/maintainer2
-rw-r--r--data/pkg-config/_metadata/in.1443.000
l---------data/pkg-config/_metadata/maintainer2
-rw-r--r--data/pkg-config/_metadata/version2
-rw-r--r--data/pkg-config/make.sh2
-rw-r--r--data/pkg-config/pkg-config-0.23.tar.gzbin1032839 -> 0 bytes
-rw-r--r--data/pkg-config/pkg-config-0.29.2.tar.gzbin0 -> 2016830 bytes
-rw-r--r--data/png/_metadata/in.1443.000
l---------data/png/_metadata/maintainer2
-rw-r--r--data/png/_metadata/version2
-rw-r--r--data/png/libpng-1.2.24.tar.bz2bin615634 -> 0 bytes
-rw-r--r--data/png/libpng-1.6.35.tar.xzbin0 -> 1014320 bytes
-rw-r--r--data/png/make.sh2
-rw-r--r--data/png/nmedit.diff51
-rw-r--r--data/pngcrush/_metadata/in.1443.000
l---------data/pngcrush/_metadata/maintainer2
-rw-r--r--data/pngcrush/_metadata/version2
-rw-r--r--data/pngcrush/make.sh2
-rw-r--r--data/pngcrush/pngcrush-1.7.10-nolib.tar.bz2bin48755 -> 0 bytes
-rw-r--r--data/pngcrush/pngcrush-1.8.13-nolib.tar.xzbin0 -> 66104 bytes
-rw-r--r--data/powermanagement/_metadata/in.1443.000
l---------data/powermanagement/_metadata/maintainer2
-rw-r--r--data/profile.d/_metadata/in.1443.000
l---------data/profile.d/_metadata/maintainer2
-rwxr-xr-x[-rw-r--r--]data/profile.d/terminal.sh0
-rw-r--r--data/psmisc_/_metadata/in.1443.000
l---------data/psmisc_/_metadata/maintainer2
-rw-r--r--data/pstree/_metadata/in.1443.000
l---------data/pstree/_metadata/maintainer2
-rw-r--r--data/pthread-stubs/_metadata/in.1443.000
l---------data/pthread-stubs/_metadata/maintainer2
-rw-r--r--data/pthread-stubs/make.sh1
-rw-r--r--data/pwncenter.com/_metadata/description1
l---------data/pwncenter.com/_metadata/license1
-rw-r--r--data/pwncenter.com/_metadata/maintainer1
-rw-r--r--data/pwncenter.com/_metadata/name1
-rw-r--r--data/pwncenter.com/_metadata/replaces1
-rw-r--r--data/pwncenter.com/_metadata/role1
-rw-r--r--data/pwncenter.com/_metadata/section1
-rw-r--r--data/pwncenter.com/_metadata/tags1
-rw-r--r--data/pwncenter.com/_metadata/version1
-rw-r--r--data/pwncenter.com/apt.pwncenter.com.pngbin3809 -> 0 bytes
-rw-r--r--data/pwncenter.com/make.sh5
-rw-r--r--data/pwncenter.com/pwncenter.com.list6
l---------data/pyobjc/_metadata/maintainer2
-rw-r--r--data/pyobjc/make.sh13
-rw-r--r--data/pyobjc/mprotect.diff177
-rw-r--r--data/pyobjc/pyobjc-1946.tgzbin12318760 -> 0 bytes
-rw-r--r--data/python/Python-2.5.1.tgzbin11060830 -> 0 bytes
-rw-r--r--data/python/Python-2.7.15.tar.xzbin0 -> 12642436 bytes
-rw-r--r--data/python/_metadata/in.1443.000
l---------data/python/_metadata/libssl1.0.dep1
l---------data/python/_metadata/maintainer2
l---------data/python/_metadata/ncurses.dep1
l---------data/python/_metadata/openssl.dep1
-rw-r--r--data/python/_metadata/version2
-rw-r--r--data/python/bundle.diff32
-rw-r--r--data/python/clean.diff11
-rw-r--r--data/python/common.diff12
-rw-r--r--data/python/cross.diff443
-rw-r--r--data/python/distutils.diff115
-rw-r--r--data/python/dylib.diff33
-rw-r--r--data/python/environ.diff35
-rw-r--r--data/python/framework.diff28
-rw-r--r--data/python/gestalt.diff25
-rw-r--r--data/python/longlong.diff28
-rw-r--r--data/python/make.sh25
-rw-r--r--data/python/modules.diff32
-rw-r--r--data/python/starpython.diff152
-rw-r--r--data/python/test.diff17
-rw-r--r--data/python/timestamp.diff10
-rw-r--r--data/python/zz-setup.diff175
-rw-r--r--data/pzb/_metadata/description1
-rw-r--r--data/pzb/_metadata/in.1443.000
l---------data/pzb/_metadata/libfragmentzip.dep1
-rw-r--r--data/pzb/_metadata/license55
l---------data/pzb/_metadata/maintainer1
-rw-r--r--data/pzb/_metadata/name1
-rw-r--r--data/pzb/_metadata/priority1
-rw-r--r--data/pzb/_metadata/role1
-rw-r--r--data/pzb/_metadata/section1
-rw-r--r--data/pzb/_metadata/tags1
-rw-r--r--data/pzb/_metadata/version1
-rw-r--r--data/pzb/make.sh5
-rw-r--r--data/pzb/pzb-1.0.1.tar.xzbin0 -> 10652 bytes
-rw-r--r--data/radare2/_metadata/description1
-rw-r--r--data/radare2/_metadata/homepage1
-rw-r--r--data/radare2/_metadata/in.1443.000
l---------data/radare2/_metadata/license1
l---------data/radare2/_metadata/maintainer1
-rw-r--r--data/radare2/_metadata/name1
-rw-r--r--data/radare2/_metadata/priority1
-rw-r--r--data/radare2/_metadata/role1
-rw-r--r--data/radare2/_metadata/section1
-rw-r--r--data/radare2/_metadata/tags1
-rw-r--r--data/radare2/_metadata/version1
-rw-r--r--data/radare2/make.sh5
-rw-r--r--data/radare2/radare2-2.7.0.tar.gzbin0 -> 9876937 bytes
-rw-r--r--data/ranbee.com/Icon.pngbin2937 -> 0 bytes
-rw-r--r--data/ranbee.com/_metadata/description1
l---------data/ranbee.com/_metadata/license1
-rw-r--r--data/ranbee.com/_metadata/maintainer1
-rw-r--r--data/ranbee.com/_metadata/name1
-rwxr-xr-xdata/ranbee.com/_metadata/postinst4
-rwxr-xr-xdata/ranbee.com/_metadata/prerm4
-rw-r--r--data/ranbee.com/_metadata/role1
-rw-r--r--data/ranbee.com/_metadata/section1
-rw-r--r--data/ranbee.com/_metadata/tags1
-rw-r--r--data/ranbee.com/_metadata/version1
-rw-r--r--data/ranbee.com/make.sh6
-rw-r--r--data/ranbee.com/ranbee.com.list6
-rwxr-xr-xdata/ranbee.com/ranbee.key17
-rw-r--r--data/raop-play/_metadata/in.1443.000
l---------data/raop-play/_metadata/libssl1.0.dep1
l---------data/raop-play/_metadata/maintainer2
l---------data/raop-play/_metadata/openssl.dep1
-rw-r--r--data/rdesktop/_metadata/in.1443.000
l---------data/rdesktop/_metadata/libssl1.0.dep1
l---------data/rdesktop/_metadata/maintainer2
l---------data/rdesktop/_metadata/openssl.dep1
-rw-r--r--data/rdesktop/make.sh5
-rw-r--r--data/readline/_metadata/in.1443.000
l---------data/readline/_metadata/maintainer2
-rw-r--r--data/readline/_metadata/version2
-rw-r--r--data/readline/archarm.diff26
-rw-r--r--data/readline/cflags.diff9
-rw-r--r--data/readline/lendiff.diff12
-rw-r--r--data/readline/make.sh17
-rw-r--r--data/readline/readline-6.0.tar.gzbin2270818 -> 0 bytes
-rw-r--r--data/readline/readline-8.0.tar.gzbin0 -> 2975937 bytes
-rw-r--r--data/rhino/_metadata/in.1443.000
l---------data/rhino/_metadata/maintainer2
-rw-r--r--data/ripdev/_metadata/description1
l---------data/ripdev/_metadata/license1
-rw-r--r--data/ripdev/_metadata/maintainer1
-rw-r--r--data/ripdev/_metadata/name1
-rw-r--r--data/ripdev/_metadata/role1
-rw-r--r--data/ripdev/_metadata/section1
-rw-r--r--data/ripdev/_metadata/tags1
-rw-r--r--data/ripdev/_metadata/version1
-rw-r--r--data/ripdev/make.sh2
-rw-r--r--data/ripdev/ripdev.list6
-rw-r--r--data/rlwrap/_metadata/in.1443.000
l---------data/rlwrap/_metadata/maintainer2
-rw-r--r--data/rpl/_metadata/in.1443.000
l---------data/rpl/_metadata/maintainer2
-rw-r--r--data/rsync/_metadata/in.1443.000
l---------data/rsync/_metadata/maintainer2
-rw-r--r--data/rsync/_metadata/version2
-rw-r--r--data/rsync/rsync-3.0.5.tar.gzbin776613 -> 0 bytes
-rw-r--r--data/rsync/rsync-3.1.3.tar.gzbin0 -> 905908 bytes
-rw-r--r--data/ruby/_metadata/in.1443.000
l---------data/ruby/_metadata/libssl1.0.dep1
l---------data/ruby/_metadata/maintainer2
l---------data/ruby/_metadata/openssl.dep1
-rw-r--r--data/ruby/_metadata/predepends1
-rw-r--r--data/ruby/_metadata/version2
-rw-r--r--data/ruby/arm.diff13
-rw-r--r--data/ruby/getaddrinfo.diff36
-rw-r--r--data/ruby/libtool.diff17
-rw-r--r--data/ruby/make.sh18
-rw-r--r--data/ruby/rdoc.diff21
-rw-r--r--data/ruby/ruby-1.9.2-p0.tar.gzbin10787899 -> 0 bytes
-rw-r--r--data/ruby/ruby-2.5.3.tar.xzbin0 -> 11453336 bytes
-rw-r--r--data/ruby/strip.diff15
-rw-r--r--data/rubyobjc_/_metadata/in.1443.000
l---------data/rubyobjc_/_metadata/maintainer2
-rw-r--r--data/rzip/_metadata/in.1443.000
l---------data/rzip/_metadata/maintainer2
-rw-r--r--data/samba/_metadata/in.1443.000
l---------data/samba/_metadata/maintainer2
-rw-r--r--data/screen/_metadata/in.1443.000
l---------data/screen/_metadata/maintainer2
-rw-r--r--data/sed/_metadata/in.1443.000
l---------data/sed/_metadata/maintainer2
-rw-r--r--data/sed/_metadata/version2
-rw-r--r--data/sed/make.sh2
-rw-r--r--data/sed/obstack.diff83
-rw-r--r--data/sed/sed-4.1.5.tar.gzbin799584 -> 0 bytes
-rw-r--r--data/sed/sed-4.5.tar.xzbin0 -> 1274252 bytes
-rw-r--r--data/setuptools/_metadata/in.1443.000
l---------data/setuptools/_metadata/maintainer2
-rw-r--r--data/sgrep/_metadata/in.1443.000
l---------data/sgrep/_metadata/maintainer2
-rw-r--r--data/sgrep/_metadata/version2
-rw-r--r--data/sgrep/make.sh3
-rw-r--r--data/sgrep/sgrep-1.92a.tar.gzbin148306 -> 0 bytes
-rw-r--r--data/sgrep/sgrep-1.94a.tar.gzbin0 -> 193267 bytes
-rw-r--r--data/sgrep/timestamp.diff4
-rw-r--r--data/shell-cmds/_metadata/in.1443.000
l---------data/shell-cmds/_metadata/maintainer2
-rw-r--r--data/shell-cmds/make.sh4
-rw-r--r--data/slirp/_metadata/in.1443.000
l---------data/slirp/_metadata/maintainer2
-rw-r--r--data/sm/_metadata/in.1443.000
l---------data/sm/_metadata/maintainer2
l---------data/sm/_metadata/uuid.dep1
-rw-r--r--data/sm/_metadata/version2
-rw-r--r--data/sm/libSM-1.0.3.tar.gzbin333209 -> 0 bytes
-rw-r--r--data/sm/libSM-1.2.2.tar.bz2bin0 -> 348908 bytes
-rw-r--r--data/sm/make.sh2
-rw-r--r--data/sniffit/_metadata/in.1443.000
l---------data/sniffit/_metadata/maintainer2
-rw-r--r--data/socat/_metadata/in.1443.000
l---------data/socat/_metadata/libssl1.0.dep1
l---------data/socat/_metadata/maintainer2
l---------data/socat/_metadata/openssl.dep1
-rw-r--r--data/socat/_metadata/version2
-rw-r--r--data/socat/make.sh2
-rw-r--r--data/socat/socat-1.7.1.1.tar.bz2bin422947 -> 0 bytes
-rw-r--r--data/socat/socat-1.7.3.2.tar.bz2bin0 -> 493324 bytes
-rw-r--r--data/sosiphone.com/_metadata/description1
l---------data/sosiphone.com/_metadata/license1
-rw-r--r--data/sosiphone.com/_metadata/maintainer1
-rw-r--r--data/sosiphone.com/_metadata/name1
-rw-r--r--data/sosiphone.com/_metadata/role1
-rw-r--r--data/sosiphone.com/_metadata/section1
-rw-r--r--data/sosiphone.com/_metadata/tags1
-rw-r--r--data/sosiphone.com/_metadata/version1
-rw-r--r--data/sosiphone.com/make.sh2
-rw-r--r--data/sosiphone.com/sosiphone.com.list6
-rw-r--r--data/spidermonkey/_metadata/in.1443.000
l---------data/spidermonkey/_metadata/maintainer2
-rw-r--r--data/spidermonkey/mdns.diff25
-rw-r--r--data/sqlite3-dylib/_metadata/in.1443.000
-rw-r--r--data/sqlite3/_metadata/in.1443.000
l---------data/sqlite3/_metadata/sqlite3-lib.dep1
-rw-r--r--data/srelay/_metadata/in.1443.000
l---------data/srelay/_metadata/maintainer2
-rw-r--r--data/srelay/make.sh3
-rw-r--r--data/srt10coupe.de/_metadata/conflicts1
-rw-r--r--data/srt10coupe.de/_metadata/description1
l---------data/srt10coupe.de/_metadata/license1
-rw-r--r--data/srt10coupe.de/_metadata/maintainer1
-rw-r--r--data/srt10coupe.de/_metadata/name1
-rw-r--r--data/srt10coupe.de/_metadata/role1
-rw-r--r--data/srt10coupe.de/_metadata/section1
-rw-r--r--data/srt10coupe.de/_metadata/tags1
-rw-r--r--data/srt10coupe.de/_metadata/version1
-rw-r--r--data/srt10coupe.de/i.srt10coupe.de.pngbin10300 -> 0 bytes
-rw-r--r--data/srt10coupe.de/make.sh4
-rw-r--r--data/srt10coupe.de/srt10coupe.de.list6
-rw-r--r--data/stealthmac/_metadata/in.1443.000
-rw-r--r--data/stunnel/_metadata/in.1443.000
l---------data/stunnel/_metadata/libssl1.0.dep1
l---------data/stunnel/_metadata/maintainer2
l---------data/stunnel/_metadata/openssl.dep1
-rw-r--r--data/stunnel/_metadata/version2
-rw-r--r--data/stunnel/make.sh4
-rw-r--r--data/stunnel/openssl.diff12
-rw-r--r--data/stunnel/stunnel-4.26.tar.gzbin531804 -> 0 bytes
-rw-r--r--data/stunnel/stunnel-5.48.tar.gzbin0 -> 708356 bytes
-rwxr-xr-xdata/stunnel/stunnel34
-rw-r--r--data/subversion/_metadata/in.1443.000
l---------data/subversion/_metadata/libserf.dep1
l---------data/subversion/_metadata/libutf8proc.dep1
l---------data/subversion/_metadata/lz4.dep1
l---------data/subversion/_metadata/maintainer2
l---------data/subversion/_metadata/neon.dep1
-rw-r--r--data/subversion/_metadata/version2
-rw-r--r--data/subversion/macho_iterate.diff30
-rw-r--r--data/subversion/make.sh5
-rw-r--r--data/subversion/mdns.diff175
-rw-r--r--data/subversion/neon.diff18
-rw-r--r--data/subversion/subversion-1.11.0.tar.bz2bin0 -> 8490744 bytes
-rw-r--r--data/subversion/subversion-1.4.6.tar.bz2bin4680316 -> 0 bytes
-rw-r--r--data/subversion/svnversion.diff12
-rw-r--r--data/subversion/timestamp.diff210
-rw-r--r--data/sudo/_metadata/in.1443.000
l---------data/sudo/_metadata/maintainer2
-rw-r--r--data/sudo/_metadata/version2
-rw-r--r--data/sudo/make.sh4
-rw-r--r--data/sudo/platformize.diff47
-rw-r--r--data/sudo/shebang.diff27
-rw-r--r--data/sudo/strip.diff17
-rw-r--r--data/sudo/sudo-1.6.9p12.tar.gzbin581936 -> 0 bytes
-rw-r--r--data/sudo/sudo-1.8.27.tar.gzbin0 -> 3293178 bytes
-rw-r--r--data/swift/_metadata/in.1443.000
-rw-r--r--data/system-cmds/_metadata/in.1443.000
l---------data/system-cmds/_metadata/maintainer2
l---------data/system-cmds/_metadata/pam.dep1
-rw-r--r--data/system-cmds/_metadata/version2
-rw-r--r--data/system-cmds/arch.diff22
-rw-r--r--data/system-cmds/chpass.diff47
-rw-r--r--data/system-cmds/dmesg.diff27
-rw-r--r--data/system-cmds/make.sh31
-rw-r--r--data/system-cmds/passwd.diff43
-rw-r--r--data/system-cmds/platformize.diff90
-rw-r--r--data/system-cmds/system_cmds-433.8.tar.gzbin431570 -> 0 bytes
-rw-r--r--data/system-cmds/system_cmds-790.30.1.tar.gzbin0 -> 497394 bytes
-rw-r--r--data/tapi/_metadata/version1
-rw-r--r--data/tapi/arch.diff13
-rw-r--r--data/tapi/make.sh22
-rw-r--r--data/tapi/tapi-1.30.tar.gzbin0 -> 29071 bytes
-rw-r--r--data/tar/_metadata/conflicts1
-rw-r--r--data/tar/_metadata/in.1443.000
l---------data/tar/_metadata/maintainer2
-rw-r--r--data/tar/_metadata/version2
l---------data/tar/_metadata/xz.dep1
-rw-r--r--data/tar/make.sh4
-rw-r--r--data/tar/tar-1.29.tar.bz2bin2715993 -> 0 bytes
-rw-r--r--data/tar/tar-1.30.tar.xzbin0 -> 2108028 bytes
-rw-r--r--data/tcpdump/_metadata/in.1443.000
l---------data/tcpdump/_metadata/libssl1.0.dep1
l---------data/tcpdump/_metadata/maintainer2
l---------data/tcpdump/_metadata/openssl.dep1
-rw-r--r--data/tcpdump/_metadata/version2
-rw-r--r--data/tcpdump/make.sh4
-rw-r--r--data/tcpdump/tcpdump-3.9.8.tar.gzbin938054 -> 0 bytes
-rw-r--r--data/tcpdump/tcpdump-4.9.2.tar.gzbin0 -> 2298386 bytes
-rw-r--r--data/tcsh/TCSH6_20_00.tar.gzbin0 -> 1015380 bytes
-rw-r--r--data/tcsh/_metadata/in.1443.000
l---------data/tcsh/_metadata/maintainer2
-rw-r--r--data/tcsh/_metadata/version2
-rw-r--r--data/tcsh/gethost.diff12
-rw-r--r--data/tcsh/host.defs.patch14
-rw-r--r--data/tcsh/make.sh4
-rw-r--r--data/tcsh/shebang.diff21
-rw-r--r--data/tcsh/tcsh-6.15.00.tar.gzbin870886 -> 0 bytes
-rw-r--r--data/tiff/_metadata/in.1443.000
l---------data/tiff/_metadata/libjpeg-turbo.dep1
l---------data/tiff/_metadata/maintainer2
-rw-r--r--data/tiff/_metadata/version2
l---------data/tiff/_metadata/xz.dep1
-rw-r--r--data/tiff/make.sh4
-rw-r--r--data/tiff/nmedit.diff51
-rw-r--r--data/tiff/tiff-3.8.2.tar.gzbin1336295 -> 0 bytes
-rw-r--r--data/tiff/tiff-4.0.9.tar.gzbin0 -> 2305681 bytes
-rw-r--r--data/tmux/_metadata/description1
-rw-r--r--data/tmux/_metadata/in.1443.000
l---------data/tmux/_metadata/libevent.dep1
l---------data/tmux/_metadata/license1
l---------data/tmux/_metadata/maintainer1
l---------data/tmux/_metadata/ncurses.dep1
-rw-r--r--data/tmux/_metadata/priority1
-rw-r--r--data/tmux/_metadata/role1
-rw-r--r--data/tmux/_metadata/section1
-rw-r--r--data/tmux/_metadata/tags1
-rw-r--r--data/tmux/_metadata/version1
-rw-r--r--data/tmux/make.sh4
-rw-r--r--data/tmux/tmux-2.7.tar.gzbin0 -> 487585 bytes
-rw-r--r--data/top/_metadata/in.1443.000
-rw-r--r--data/top/chown.diff9
-rw-r--r--data/touch-mania.com/_metadata/description1
l---------data/touch-mania.com/_metadata/license1
-rw-r--r--data/touch-mania.com/_metadata/maintainer1
-rw-r--r--data/touch-mania.com/_metadata/name1
-rw-r--r--data/touch-mania.com/_metadata/role1
-rw-r--r--data/touch-mania.com/_metadata/section1
-rw-r--r--data/touch-mania.com/_metadata/tags1
-rw-r--r--data/touch-mania.com/_metadata/version1
-rw-r--r--data/touch-mania.com/make.sh4
-rw-r--r--data/touch-mania.com/touch-mania.com.list6
-rw-r--r--data/touch-mania.com/touch-mania_logo_60x60.pngbin4247 -> 0 bytes
l---------data/tsschecker/_metadata/curl.dep1
-rw-r--r--data/tsschecker/_metadata/description1
-rw-r--r--data/tsschecker/_metadata/in.1443.000
l---------data/tsschecker/_metadata/libfragmentzip.dep1
l---------data/tsschecker/_metadata/libirecovery.dep1
l---------data/tsschecker/_metadata/libplist.dep1
l---------data/tsschecker/_metadata/license1
l---------data/tsschecker/_metadata/maintainer1
-rw-r--r--data/tsschecker/_metadata/name1
-rw-r--r--data/tsschecker/_metadata/priority1
-rw-r--r--data/tsschecker/_metadata/section1
-rw-r--r--data/tsschecker/_metadata/tags1
-rw-r--r--data/tsschecker/_metadata/version1
-rw-r--r--data/tsschecker/make.sh5
-rw-r--r--data/tsschecker/tsschecker-263.tar.lzbin0 -> 173838 bytes
l---------data/uicaboodle.py/_metadata/maintainer2
-rw-r--r--data/uicaboodle.py/make.sh6
-rw-r--r--data/uicaboodle/_metadata/in.1443.000
l---------data/uicaboodle/_metadata/maintainer2
l---------data/uikittools/_metadata/coreutils-bin.dep1
-rw-r--r--data/uikittools/_metadata/depiction1
-rw-r--r--data/uikittools/_metadata/description1
-rw-r--r--data/uikittools/_metadata/homepage1
-rw-r--r--data/uikittools/_metadata/in.1443.000
l---------data/uikittools/_metadata/license1
l---------data/uikittools/_metadata/maintainer1
-rw-r--r--data/uikittools/_metadata/name1
-rw-r--r--data/uikittools/_metadata/priority1
-rw-r--r--data/uikittools/_metadata/role1
-rw-r--r--data/uikittools/_metadata/section1
-rw-r--r--data/uikittools/_metadata/tags1
-rw-r--r--data/uikittools/_metadata/version1
-rw-r--r--data/uikittools/_metadata/zlib (renamed from data/ifoneguide.nl/_metadata/zlib)0
-rw-r--r--data/uikittools/ldrestart-jbd.diff157
-rw-r--r--data/uikittools/make.sh3
-rw-r--r--data/uikittools/telesphoreo.diff76
-rw-r--r--data/uikittools/uikittools-1.1.13.tgzbin0 -> 97966 bytes
-rw-r--r--data/unrar/_metadata/in.1443.000
l---------data/unrar/_metadata/maintainer2
-rw-r--r--data/unrar/_metadata/version2
-rw-r--r--data/unrar/cross.diff18
-rw-r--r--data/unrar/exceptions.diff39
-rw-r--r--data/unrar/make.sh2
-rw-r--r--data/unrar/strip.diff14
-rw-r--r--data/unrar/unrarsrc-3.6.8.tar.gzbin125045 -> 0 bytes
-rw-r--r--data/unrar/unrarsrc-5.6.4.tar.gzbin0 -> 225849 bytes
-rw-r--r--data/unzip/_metadata/in.1443.000
l---------data/unzip/_metadata/maintainer2
-rw-r--r--data/unzip/_metadata/version2
-rw-r--r--data/unzip/timestamp.diff53
-rw-r--r--data/unzip/unzip552.tar.gzbin1140291 -> 0 bytes
-rw-r--r--data/unzip/unzip60.tar.gzbin0 -> 1376845 bytes
-rw-r--r--data/urbanfanatics.com/_metadata/description1
l---------data/urbanfanatics.com/_metadata/license1
l---------data/urbanfanatics.com/_metadata/maintainer1
-rw-r--r--data/urbanfanatics.com/_metadata/name1
-rw-r--r--data/urbanfanatics.com/_metadata/role1
-rw-r--r--data/urbanfanatics.com/_metadata/section1
-rw-r--r--data/urbanfanatics.com/_metadata/tags1
-rw-r--r--data/urbanfanatics.com/_metadata/version1
-rw-r--r--data/urbanfanatics.com/make.sh2
-rw-r--r--data/urbanfanatics.com/urbanfanatics.com.list6
-rw-r--r--data/uuid/_metadata/in.1443.000
l---------data/uuid/_metadata/maintainer2
-rw-r--r--data/uuid/_metadata/version2
-rw-r--r--data/uuid/make.sh4
-rw-r--r--data/uuid/uuid-1.6.0.tar.gzbin406796 -> 0 bytes
-rw-r--r--data/uuid/uuid-1.6.2.tar.gzbin0 -> 397048 bytes
-rw-r--r--data/vbindiff/_metadata/in.1443.000
l---------data/vbindiff/_metadata/maintainer2
-rw-r--r--data/vfdecrypt/_metadata/in.1443.000
l---------data/vfdecrypt/_metadata/libssl1.0.dep1
l---------data/vfdecrypt/_metadata/maintainer2
l---------data/vfdecrypt/_metadata/openssl.dep1
-rw-r--r--data/vim/_metadata/in.1443.000
l---------data/vim/_metadata/maintainer2
-rw-r--r--data/vim/_metadata/version2
-rw-r--r--data/vim/cross.diff328
-rw-r--r--data/vim/make.sh12
-rw-r--r--data/vim/patches/7.2.00161
-rw-r--r--data/vim/patches/7.2.00247
-rw-r--r--data/vim/patches/7.2.003107
-rw-r--r--data/vim/patches/7.2.004103
-rw-r--r--data/vim/patches/7.2.005149
-rw-r--r--data/vim/patches/7.2.00650
-rw-r--r--data/vim/patches/7.2.007493
-rw-r--r--data/vim/patches/7.2.00863
-rw-r--r--data/vim/patches/7.2.00967
-rw-r--r--data/vim/patches/7.2.010206
-rw-r--r--data/vim/patches/7.2.011105
-rw-r--r--data/vim/patches/7.2.01253
-rw-r--r--data/vim/patches/7.2.013135
-rw-r--r--data/vim/patches/7.2.01452
-rw-r--r--data/vim/patches/7.2.01582
-rw-r--r--data/vim/patches/7.2.016166
-rw-r--r--data/vim/patches/7.2.017162
-rw-r--r--data/vim/patches/7.2.01845
-rw-r--r--data/vim/patches/7.2.01965
-rw-r--r--data/vim/patches/7.2.02054
-rw-r--r--data/vim/patches/7.2.021147
-rw-r--r--data/vim/patches/7.2.022140
-rw-r--r--data/vim/patches/8.1.000284
-rw-r--r--data/vim/patches/8.1.0003116
-rw-r--r--data/vim/patches/8.1.000454
-rw-r--r--data/vim/patches/8.1.000555
-rw-r--r--data/vim/patches/8.1.000656
-rw-r--r--data/vim/patches/8.1.000765
-rw-r--r--data/vim/patches/8.1.000871
-rw-r--r--data/vim/patches/8.1.0009102
-rw-r--r--data/vim/patches/8.1.0010381
-rw-r--r--data/vim/patches/8.1.001185
-rw-r--r--data/vim/patches/8.1.001254
-rw-r--r--data/vim/patches/8.1.0013205
-rw-r--r--data/vim/patches/8.1.0014486
-rw-r--r--data/vim/patches/8.1.0015144
-rw-r--r--data/vim/patches/8.1.001661
-rw-r--r--data/vim/patches/8.1.0017210
-rw-r--r--data/vim/patches/8.1.0018328
-rw-r--r--data/vim/patches/8.1.001978
-rw-r--r--data/vim/patches/8.1.0020519
-rw-r--r--data/vim/patches/8.1.002171
-rw-r--r--data/vim/patches/8.1.002279
-rw-r--r--data/vim/patches/8.1.002357
-rw-r--r--data/vim/patches/8.1.0024105
-rw-r--r--data/vim/patches/8.1.0025169
-rw-r--r--data/vim/patches/8.1.002655
-rw-r--r--data/vim/patches/8.1.00271480
-rw-r--r--data/vim/patches/8.1.002855
-rw-r--r--data/vim/patches/8.1.002948
-rw-r--r--data/vim/patches/8.1.003080
-rw-r--r--data/vim/patches/8.1.003153
-rw-r--r--data/vim/patches/8.1.0032191
-rw-r--r--data/vim/patches/8.1.003353
-rw-r--r--data/vim/patches/8.1.003490
-rw-r--r--data/vim/patches/8.1.0035237
-rw-r--r--data/vim/patches/8.1.0036145
-rw-r--r--data/vim/patches/8.1.0037581
-rw-r--r--data/vim/patches/8.1.003855
-rw-r--r--data/vim/patches/8.1.0039306
-rw-r--r--data/vim/patches/8.1.004073
-rw-r--r--data/vim/patches/8.1.0041107
-rw-r--r--data/vim/patches/8.1.0042110
-rw-r--r--data/vim/patches/8.1.0043109
-rw-r--r--data/vim/patches/8.1.004482
-rw-r--r--data/vim/patches/8.1.0045357
-rw-r--r--data/vim/patches/8.1.0046256
-rw-r--r--data/vim/patches/8.1.004793
-rw-r--r--data/vim/patches/8.1.0048111
-rw-r--r--data/vim/patches/8.1.0049236
-rw-r--r--data/vim/patches/8.1.0050414
-rw-r--r--data/vim/patches/8.1.005144
-rw-r--r--data/vim/patches/8.1.005250
-rw-r--r--data/vim/patches/8.1.0053609
-rw-r--r--data/vim/patches/8.1.005468
-rw-r--r--data/vim/patches/8.1.005588
-rw-r--r--data/vim/patches/8.1.0056130
-rw-r--r--data/vim/patches/8.1.0057203
-rw-r--r--data/vim/patches/8.1.0058220
-rw-r--r--data/vim/patches/8.1.0059111
-rw-r--r--data/vim/patches/8.1.006074
-rw-r--r--data/vim/patches/8.1.0061420
-rw-r--r--data/vim/patches/8.1.0062371
-rw-r--r--data/vim/patches/8.1.0063123
-rw-r--r--data/vim/patches/8.1.0064100
-rw-r--r--data/vim/patches/8.1.006590
-rw-r--r--data/vim/patches/8.1.0066129
-rw-r--r--data/vim/patches/8.1.006795
-rw-r--r--data/vim/patches/8.1.006880
-rw-r--r--data/vim/patches/8.1.0069301
-rw-r--r--data/vim/patches/8.1.007048
-rw-r--r--data/vim/patches/8.1.0071792
-rw-r--r--data/vim/patches/8.1.007297
-rw-r--r--data/vim/patches/8.1.007378
-rw-r--r--data/vim/patches/8.1.007454
-rw-r--r--data/vim/patches/8.1.007545
-rw-r--r--data/vim/patches/8.1.007663
-rw-r--r--data/vim/patches/8.1.007752
-rw-r--r--data/vim/patches/8.1.0078140
-rw-r--r--data/vim/patches/8.1.007969
-rw-r--r--data/vim/patches/8.1.0080258
-rw-r--r--data/vim/patches/8.1.008183
-rw-r--r--data/vim/patches/8.1.0082129
-rw-r--r--data/vim/patches/8.1.0083196
-rw-r--r--data/vim/patches/8.1.0084161
-rw-r--r--data/vim/patches/8.1.008597
-rw-r--r--data/vim/patches/8.1.008678
-rw-r--r--data/vim/patches/8.1.0087255
-rw-r--r--data/vim/patches/8.1.008856
-rw-r--r--data/vim/patches/8.1.0089199
-rw-r--r--data/vim/patches/8.1.0090146
-rw-r--r--data/vim/patches/8.1.0091369
-rw-r--r--data/vim/patches/8.1.009247
-rw-r--r--data/vim/patches/8.1.009367
-rw-r--r--data/vim/patches/8.1.009452
-rw-r--r--data/vim/patches/8.1.009585
-rw-r--r--data/vim/patches/8.1.0096126
-rw-r--r--data/vim/patches/8.1.009769
-rw-r--r--data/vim/patches/8.1.0098294
-rw-r--r--data/vim/patches/8.1.009970
-rw-r--r--data/vim/patches/8.1.010049
-rw-r--r--data/vim/patches/8.1.010160
-rw-r--r--data/vim/patches/8.1.010253
-rw-r--r--data/vim/patches/8.1.0103195
-rw-r--r--data/vim/patches/8.1.010457
-rw-r--r--data/vim/patches/8.1.01053397
-rw-r--r--data/vim/patches/8.1.010652
-rw-r--r--data/vim/patches/8.1.010793
-rw-r--r--data/vim/patches/8.1.01087847
-rw-r--r--data/vim/patches/8.1.010945
-rw-r--r--data/vim/patches/8.1.011084
-rw-r--r--data/vim/patches/8.1.0111149
-rw-r--r--data/vim/patches/8.1.0112139
-rw-r--r--data/vim/patches/8.1.011353
-rw-r--r--data/vim/patches/8.1.0114218
-rw-r--r--data/vim/patches/8.1.011552
-rw-r--r--data/vim/patches/8.1.011695
-rw-r--r--data/vim/patches/8.1.011752
-rw-r--r--data/vim/patches/8.1.0118136
-rw-r--r--data/vim/patches/8.1.011971
-rw-r--r--data/vim/patches/8.1.0120217
-rw-r--r--data/vim/patches/8.1.0121175
-rw-r--r--data/vim/patches/8.1.012249
-rw-r--r--data/vim/patches/8.1.012362
-rw-r--r--data/vim/patches/8.1.012451
-rw-r--r--data/vim/patches/8.1.0125197
-rw-r--r--data/vim/patches/8.1.0126213
-rw-r--r--data/vim/patches/8.1.012754
-rw-r--r--data/vim/patches/8.1.0128487
-rw-r--r--data/vim/patches/8.1.012950
-rw-r--r--data/vim/patches/8.1.0130169
-rw-r--r--data/vim/patches/8.1.0131196
-rw-r--r--data/vim/patches/8.1.0132737
-rw-r--r--data/vim/patches/8.1.0133141
-rw-r--r--data/vim/patches/8.1.0134724
-rw-r--r--data/vim/patches/8.1.013595
-rw-r--r--data/vim/patches/8.1.0136342
-rw-r--r--data/vim/patches/8.1.0137137
-rw-r--r--data/vim/patches/8.1.0138153
-rw-r--r--data/vim/patches/8.1.013986
-rw-r--r--data/vim/patches/8.1.0140108
-rw-r--r--data/vim/patches/8.1.0141558
-rw-r--r--data/vim/patches/8.1.0142103
-rw-r--r--data/vim/patches/8.1.0143163
-rw-r--r--data/vim/patches/8.1.014497
-rw-r--r--data/vim/patches/8.1.014573
-rw-r--r--data/vim/patches/8.1.014649
-rw-r--r--data/vim/patches/8.1.014778
-rw-r--r--data/vim/patches/8.1.014848
-rw-r--r--data/vim/patches/8.1.0149263
-rw-r--r--data/vim/patches/8.1.0150692
-rw-r--r--data/vim/patches/8.1.015157
-rw-r--r--data/vim/patches/8.1.0152512
-rw-r--r--data/vim/patches/8.1.015353
-rw-r--r--data/vim/patches/8.1.0154132
-rw-r--r--data/vim/patches/8.1.015544
-rw-r--r--data/vim/patches/8.1.015652
-rw-r--r--data/vim/patches/8.1.015776
-rw-r--r--data/vim/patches/8.1.015852
-rw-r--r--data/vim/patches/8.1.015977
-rw-r--r--data/vim/patches/8.1.016046
-rw-r--r--data/vim/patches/8.1.0161154
-rw-r--r--data/vim/patches/8.1.0162149
-rw-r--r--data/vim/patches/8.1.0163174
-rw-r--r--data/vim/patches/8.1.016483
-rw-r--r--data/vim/patches/8.1.0165123
-rw-r--r--data/vim/patches/8.1.01661183
-rw-r--r--data/vim/patches/8.1.0167206
-rw-r--r--data/vim/patches/8.1.0168138
-rw-r--r--data/vim/patches/8.1.0169110
-rw-r--r--data/vim/patches/8.1.0170296
-rw-r--r--data/vim/patches/8.1.0171105
-rw-r--r--data/vim/patches/8.1.017254
-rw-r--r--data/vim/patches/8.1.017352
-rw-r--r--data/vim/patches/8.1.0174130
-rw-r--r--data/vim/patches/8.1.017564
-rw-r--r--data/vim/patches/8.1.017652
-rw-r--r--data/vim/patches/8.1.0177146
-rw-r--r--data/vim/patches/8.1.017855
-rw-r--r--data/vim/patches/8.1.017958
-rw-r--r--data/vim/patches/8.1.0180160
-rw-r--r--data/vim/patches/8.1.018166
-rw-r--r--data/vim/patches/8.1.0182425
-rw-r--r--data/vim/patches/8.1.0183130
-rw-r--r--data/vim/patches/8.1.0184122
-rw-r--r--data/vim/patches/8.1.0185124
-rw-r--r--data/vim/patches/8.1.018669
-rw-r--r--data/vim/patches/8.1.0187233
-rw-r--r--data/vim/patches/8.1.018863
-rw-r--r--data/vim/patches/8.1.018957
-rw-r--r--data/vim/patches/8.1.0190269
-rw-r--r--data/vim/patches/8.1.019153
-rw-r--r--data/vim/patches/8.1.01924274
-rw-r--r--data/vim/patches/8.1.019357
-rw-r--r--data/vim/patches/8.1.0194104
-rw-r--r--data/vim/patches/8.1.019559
-rw-r--r--data/vim/patches/8.1.019656
-rw-r--r--data/vim/patches/8.1.019774
-rw-r--r--data/vim/patches/8.1.019888
-rw-r--r--data/vim/patches/8.1.019948
-rw-r--r--data/vim/patches/8.1.020093
-rw-r--r--data/vim/patches/8.1.0201332
-rw-r--r--data/vim/patches/8.1.020272
-rw-r--r--data/vim/patches/8.1.0203132
-rw-r--r--data/vim/patches/8.1.020458
-rw-r--r--data/vim/patches/8.1.0205226
-rw-r--r--data/vim/patches/8.1.020680
-rw-r--r--data/vim/patches/8.1.020767
-rw-r--r--data/vim/patches/8.1.020848
-rw-r--r--data/vim/patches/8.1.020983
-rw-r--r--data/vim/patches/8.1.0210115
-rw-r--r--data/vim/patches/8.1.0211228
-rw-r--r--data/vim/patches/8.1.0212253
-rw-r--r--data/vim/patches/8.1.0213197
-rw-r--r--data/vim/patches/8.1.021466
-rw-r--r--data/vim/patches/8.1.021586
-rw-r--r--data/vim/patches/8.1.021676
-rw-r--r--data/vim/patches/8.1.021785
-rw-r--r--data/vim/patches/8.1.0218253
-rw-r--r--data/vim/patches/8.1.021970
-rw-r--r--data/vim/patches/8.1.022077
-rw-r--r--data/vim/patches/8.1.0221463
-rw-r--r--data/vim/patches/8.1.0222145
-rw-r--r--data/vim/patches/8.1.0223142
-rw-r--r--data/vim/patches/8.1.0224110
-rw-r--r--data/vim/patches/8.1.0225176
-rw-r--r--data/vim/patches/8.1.02261135
-rw-r--r--data/vim/patches/8.1.022775
-rw-r--r--data/vim/patches/8.1.0228569
-rw-r--r--data/vim/patches/8.1.0229124
-rw-r--r--data/vim/patches/8.1.0230156
-rw-r--r--data/vim/patches/8.1.023189
-rw-r--r--data/vim/patches/8.1.0232188
-rw-r--r--data/vim/patches/8.1.0233317
-rw-r--r--data/vim/patches/8.1.0234160
-rw-r--r--data/vim/patches/8.1.0235171
-rw-r--r--data/vim/patches/8.1.0236108
-rw-r--r--data/vim/patches/8.1.023761
-rw-r--r--data/vim/patches/8.1.023872
-rw-r--r--data/vim/patches/8.1.023988
-rw-r--r--data/vim/patches/8.1.024055
-rw-r--r--data/vim/patches/8.1.024158
-rw-r--r--data/vim/patches/8.1.024263
-rw-r--r--data/vim/patches/8.1.024389
-rw-r--r--data/vim/patches/8.1.0244245
-rw-r--r--data/vim/patches/8.1.0245114
-rw-r--r--data/vim/patches/8.1.024663
-rw-r--r--data/vim/patches/8.1.0247318
-rw-r--r--data/vim/patches/8.1.0248147
-rw-r--r--data/vim/patches/8.1.024988
-rw-r--r--data/vim/patches/8.1.0250142
-rw-r--r--data/vim/patches/8.1.0251365
-rw-r--r--data/vim/patches/8.1.02521540
-rw-r--r--data/vim/patches/8.1.0253475
-rw-r--r--data/vim/patches/8.1.025473
-rw-r--r--data/vim/patches/8.1.025573
-rw-r--r--data/vim/patches/8.1.0256286
-rw-r--r--data/vim/patches/8.1.025758
-rw-r--r--data/vim/patches/8.1.025857
-rw-r--r--data/vim/patches/8.1.0259161
-rw-r--r--data/vim/patches/8.1.026044
-rw-r--r--data/vim/patches/8.1.0261177
-rw-r--r--data/vim/patches/8.1.0262100
-rw-r--r--data/vim/patches/8.1.0263142
-rw-r--r--data/vim/patches/8.1.0264121
-rw-r--r--data/vim/patches/8.1.0265875
-rw-r--r--data/vim/patches/8.1.0266436
-rw-r--r--data/vim/patches/8.1.0267140
-rw-r--r--data/vim/patches/8.1.0268380
-rw-r--r--data/vim/patches/8.1.0269127
-rw-r--r--data/vim/patches/8.1.027055
-rw-r--r--data/vim/patches/8.1.0271489
-rw-r--r--data/vim/patches/8.1.027252
-rw-r--r--data/vim/patches/8.1.027350
-rw-r--r--data/vim/patches/8.1.0274166
-rw-r--r--data/vim/patches/8.1.0275185
-rw-r--r--data/vim/patches/8.1.027695
-rw-r--r--data/vim/patches/8.1.0277316
-rw-r--r--data/vim/patches/8.1.027895
-rw-r--r--data/vim/patches/8.1.027996
-rw-r--r--data/vim/patches/8.1.028071
-rw-r--r--data/vim/patches/8.1.0281738
-rw-r--r--data/vim/patches/8.1.0282507
-rw-r--r--data/vim/patches/8.1.028348
-rw-r--r--data/vim/patches/8.1.0284115
-rw-r--r--data/vim/patches/8.1.028551
-rw-r--r--data/vim/patches/8.1.0286104
-rw-r--r--data/vim/patches/8.1.028754
-rw-r--r--data/vim/patches/8.1.0288498
-rw-r--r--data/vim/patches/8.1.028964
-rw-r--r--data/vim/patches/8.1.029087
-rw-r--r--data/vim/patches/8.1.0291137
-rw-r--r--data/vim/patches/8.1.029269
-rw-r--r--data/vim/patches/8.1.0293186
-rw-r--r--data/vim/patches/8.1.029493
-rw-r--r--data/vim/patches/8.1.0295294
-rw-r--r--data/vim/patches/8.1.0296306
-rw-r--r--data/vim/patches/8.1.0297104
-rw-r--r--data/vim/patches/8.1.029844
-rw-r--r--data/vim/patches/8.1.029951
-rw-r--r--data/vim/patches/8.1.030080
-rw-r--r--data/vim/patches/8.1.0301261
-rw-r--r--data/vim/patches/8.1.0302247
-rw-r--r--data/vim/patches/8.1.030392
-rw-r--r--data/vim/patches/8.1.0304315
-rw-r--r--data/vim/patches/8.1.030585
-rw-r--r--data/vim/patches/8.1.0306498
-rw-r--r--data/vim/patches/8.1.0307233
-rw-r--r--data/vim/patches/8.1.030862
-rw-r--r--data/vim/patches/8.1.0309395
-rw-r--r--data/vim/patches/8.1.0310110
-rw-r--r--data/vim/patches/8.1.0311112
-rw-r--r--data/vim/patches/8.1.0312226
-rw-r--r--data/vim/patches/8.1.0313232
-rw-r--r--data/vim/patches/8.1.0314158
-rw-r--r--data/vim/patches/8.1.0315223
-rw-r--r--data/vim/patches/8.1.031661
-rw-r--r--data/vim/patches/8.1.031759
-rw-r--r--data/vim/patches/8.1.031887
-rw-r--r--data/vim/patches/8.1.031957
-rw-r--r--data/vim/patches/8.1.0320141
-rw-r--r--data/vim/patches/8.1.0321147
-rw-r--r--data/vim/patches/8.1.0322153
-rw-r--r--data/vim/patches/8.1.032376
-rw-r--r--data/vim/patches/8.1.032452
-rw-r--r--data/vim/patches/8.1.032562
-rw-r--r--data/vim/patches/8.1.0326101
-rw-r--r--data/vim/patches/8.1.0327136
-rw-r--r--data/vim/patches/8.1.0328167
-rw-r--r--data/vim/patches/8.1.032956
-rw-r--r--data/vim/patches/8.1.0330219
-rw-r--r--data/vim/patches/8.1.0331126
-rw-r--r--data/vim/patches/8.1.033254
-rw-r--r--data/vim/patches/8.1.0333215
-rw-r--r--data/vim/patches/8.1.0334118
-rw-r--r--data/vim/patches/8.1.033555
-rw-r--r--data/vim/patches/8.1.0336104
-rw-r--r--data/vim/patches/8.1.0337121
-rw-r--r--data/vim/patches/8.1.0338177
-rw-r--r--data/vim/patches/8.1.0339102
-rw-r--r--data/vim/patches/8.1.034072
-rw-r--r--data/vim/patches/8.1.0341312
-rw-r--r--data/vim/patches/8.1.0342239
-rw-r--r--data/vim/patches/8.1.034362
-rw-r--r--data/vim/patches/8.1.034485
-rw-r--r--data/vim/patches/8.1.0345286
-rw-r--r--data/vim/patches/8.1.03461530
-rw-r--r--data/vim/patches/8.1.0347174
-rw-r--r--data/vim/patches/8.1.034877
-rw-r--r--data/vim/patches/8.1.0349187
-rw-r--r--data/vim/patches/8.1.0350219
-rw-r--r--data/vim/patches/8.1.0351194
-rw-r--r--data/vim/patches/8.1.0352179
-rw-r--r--data/vim/patches/8.1.0353283
-rw-r--r--data/vim/patches/8.1.035457
-rw-r--r--data/vim/patches/8.1.035596
-rw-r--r--data/vim/patches/8.1.0356224
-rw-r--r--data/vim/patches/8.1.0357102
-rw-r--r--data/vim/patches/8.1.035851
-rw-r--r--data/vim/patches/8.1.035987
-rw-r--r--data/vim/patches/8.1.03606803
-rw-r--r--data/vim/patches/8.1.0361172
-rw-r--r--data/vim/patches/8.1.03626943
-rw-r--r--data/vim/patches/8.1.036387
-rw-r--r--data/vim/patches/8.1.036466
-rw-r--r--data/vim/patches/8.1.0365465
-rw-r--r--data/vim/patches/8.1.0366164
-rw-r--r--data/vim/patches/8.1.036753
-rw-r--r--data/vim/patches/8.1.0368695
-rw-r--r--data/vim/patches/8.1.0369297
-rw-r--r--data/vim/patches/8.1.037051
-rw-r--r--data/vim/patches/8.1.0371224
-rw-r--r--data/vim/patches/8.1.0372204
-rw-r--r--data/vim/patches/8.1.037363
-rw-r--r--data/vim/patches/8.1.0374711
-rw-r--r--data/vim/patches/8.1.037568
-rw-r--r--data/vim/patches/8.1.037663
-rw-r--r--data/vim/patches/8.1.0377771
-rw-r--r--data/vim/patches/8.1.037870
-rw-r--r--data/vim/patches/8.1.03793132
-rw-r--r--data/vim/patches/8.1.0380214
-rw-r--r--data/vim/patches/8.1.038162
-rw-r--r--data/vim/patches/8.1.0382186
-rw-r--r--data/vim/patches/8.1.038353
-rw-r--r--data/vim/patches/8.1.0384189
-rw-r--r--data/vim/patches/8.1.038552
-rw-r--r--data/vim/patches/8.1.0386181
-rw-r--r--data/vim/patches/8.1.038772
-rw-r--r--data/vim/patches/8.1.038852
-rw-r--r--data/vim/patches/8.1.038991
-rw-r--r--data/vim/patches/8.1.0390189
-rw-r--r--data/vim/patches/8.1.039164
-rw-r--r--data/vim/patches/8.1.0392282
-rw-r--r--data/vim/patches/8.1.0393567
-rw-r--r--data/vim/patches/8.1.0394196
-rw-r--r--data/vim/patches/8.1.039552
-rw-r--r--data/vim/patches/8.1.039654
-rw-r--r--data/vim/patches/8.1.0397335
-rw-r--r--data/vim/patches/8.1.0398121
-rw-r--r--data/vim/patches/8.1.0399270
-rw-r--r--data/vim/patches/8.1.0400101
-rw-r--r--data/vim/patches/8.1.0401259
-rw-r--r--data/vim/patches/8.1.0402171
-rw-r--r--data/vim/patches/8.1.040345
-rw-r--r--data/vim/patches/8.1.040469
-rw-r--r--data/vim/patches/8.1.04052286
-rw-r--r--data/vim/patches/8.1.0406125
-rw-r--r--data/vim/patches/8.1.04071253
-rw-r--r--data/vim/patches/8.1.0408219
-rw-r--r--data/vim/patches/8.1.040993
-rw-r--r--data/vim/patches/8.1.0410307
-rw-r--r--data/vim/patches/8.1.041151
-rw-r--r--data/vim/patches/8.1.0412104
-rw-r--r--data/vim/patches/8.1.041375
-rw-r--r--data/vim/patches/8.1.041496
-rw-r--r--data/vim/patches/8.1.0415122
-rw-r--r--data/vim/patches/8.1.041686
-rw-r--r--data/vim/patches/8.1.0417140
-rw-r--r--data/vim/patches/8.1.041882
-rw-r--r--data/vim/patches/8.1.041955
-rw-r--r--data/vim/patches/8.1.042073
-rw-r--r--data/vim/patches/8.1.042176
-rw-r--r--data/vim/patches/8.1.042260
-rw-r--r--data/vim/patches/8.1.042396
-rw-r--r--data/vim/patches/8.1.0424115
-rw-r--r--data/vim/patches/8.1.042599
-rw-r--r--data/vim/patches/8.1.042672
-rw-r--r--data/vim/patches/8.1.042786
-rw-r--r--data/vim/patches/8.1.0428114
-rw-r--r--data/vim/patches/8.1.042954
-rw-r--r--data/vim/patches/8.1.043044
-rw-r--r--data/vim/patches/8.1.0431562
-rw-r--r--data/vim/patches/8.1.043253
-rw-r--r--data/vim/patches/8.1.043374
-rw-r--r--data/vim/patches/8.1.0434335
-rw-r--r--data/vim/patches/8.1.043578
-rw-r--r--data/vim/patches/8.1.043692
-rw-r--r--data/vim/patches/8.1.043774
-rw-r--r--data/vim/patches/8.1.0438344
-rw-r--r--data/vim/patches/8.1.0439600
-rw-r--r--data/vim/patches/8.1.0440100
-rw-r--r--data/vim/patches/8.1.044166
-rw-r--r--data/vim/patches/8.1.044254
-rw-r--r--data/vim/patches/8.1.04433395
-rw-r--r--data/vim/patches/8.1.044452
-rw-r--r--data/vim/patches/8.1.0445317
-rw-r--r--data/vim/patches/8.1.044646
-rw-r--r--data/vim/patches/8.1.0447133
-rw-r--r--data/vim/patches/8.1.0448233
-rw-r--r--data/vim/patches/8.1.0449188
-rw-r--r--data/vim/patches/8.1.045067
-rw-r--r--data/vim/patches/8.1.0451148
-rw-r--r--data/vim/patches/8.1.0452123
-rw-r--r--data/vim/patches/8.1.0453126
-rw-r--r--data/vim/patches/8.1.045490
-rw-r--r--data/vim/patches/8.1.0455238
-rw-r--r--data/vim/patches/8.1.045691
-rw-r--r--data/vim/patches/8.1.0457193
-rw-r--r--data/vim/patches/8.1.0458109
-rw-r--r--data/vim/patches/8.1.045951
-rw-r--r--data/vim/patches/8.1.0460124
-rw-r--r--data/vim/patches/8.1.04614568
-rw-r--r--data/vim/patches/8.1.0462115
-rw-r--r--data/vim/patches/8.1.046380
-rw-r--r--data/vim/patches/8.1.046494
-rw-r--r--data/vim/patches/8.1.046555
-rw-r--r--data/vim/patches/8.1.0466264
-rw-r--r--data/vim/patches/8.1.0467104
-rw-r--r--data/vim/patches/8.1.0468121
-rw-r--r--data/vim/patches/8.1.0469712
-rw-r--r--data/vim/patches/8.1.0470384
-rw-r--r--data/vim/patches/8.1.0471105
-rw-r--r--data/vim/patches/8.1.0472298
-rw-r--r--data/vim/patches/8.1.047379
-rw-r--r--data/vim/patches/8.1.0474151
-rw-r--r--data/vim/patches/8.1.0475544
-rw-r--r--data/vim/patches/8.1.047690
-rw-r--r--data/vim/patches/8.1.047747
-rw-r--r--data/vim/patches/8.1.047853
-rw-r--r--data/vim/patches/8.1.0479188
-rw-r--r--data/vim/patches/8.1.048070
-rw-r--r--data/vim/patches/8.1.048181
-rw-r--r--data/vim/patches/8.1.048274
-rw-r--r--data/vim/patches/8.1.048387
-rw-r--r--data/vim/patches/8.1.0484213
-rw-r--r--data/vim/patches/8.1.048586
-rw-r--r--data/vim/patches/8.1.048656
-rw-r--r--data/vim/patches/8.1.04871207
-rw-r--r--data/vim/patches/8.1.0488662
-rw-r--r--data/vim/patches/8.1.0489198
-rw-r--r--data/vim/patches/8.1.0490117
-rw-r--r--data/vim/patches/8.1.049157
-rw-r--r--data/vim/patches/8.1.0492113
-rw-r--r--data/vim/patches/8.1.0493497
-rw-r--r--data/vim/patches/8.1.0494154
-rw-r--r--data/vim/patches/8.1.0495230
-rw-r--r--data/vim/patches/8.1.0496413
-rw-r--r--data/vim/patches/8.1.0497104
-rw-r--r--data/vim/patches/8.1.049881
-rw-r--r--data/vim/patches/8.1.0499149
-rw-r--r--data/vim/patches/8.1.050064
-rw-r--r--data/vim/patches/8.1.050154
-rw-r--r--data/vim/patches/8.1.0502111
-rw-r--r--data/vim/patches/8.1.050361
-rw-r--r--data/vim/patches/8.1.0504112
-rw-r--r--data/vim/patches/8.1.050551
-rw-r--r--data/vim/patches/8.1.050658
-rw-r--r--data/vim/patches/8.1.0507102
-rw-r--r--data/vim/patches/8.1.050885
-rw-r--r--data/vim/patches/8.1.050968
-rw-r--r--data/vim/patches/8.1.051071
-rw-r--r--data/vim/patches/8.1.051177
-rw-r--r--data/vim/patches/8.1.051290
-rw-r--r--data/vim/patches/8.1.051367
-rw-r--r--data/vim/patches/8.1.05141123
-rw-r--r--data/vim/patches/8.1.0515265
-rw-r--r--data/vim/patches/8.1.0516165
-rw-r--r--data/vim/patches/8.1.051764
-rw-r--r--data/vim/patches/8.1.051883
-rw-r--r--data/vim/patches/8.1.0519768
-rw-r--r--data/vim/patches/8.1.052050
-rw-r--r--data/vim/patches/8.1.052151
-rw-r--r--data/vim/patches/8.1.052282
-rw-r--r--data/vim/patches/8.1.0523403
-rw-r--r--data/vim/patches/8.1.052463
-rw-r--r--data/vim/patches/8.1.0525122
-rw-r--r--data/vim/patches/8.1.052657
-rw-r--r--data/vim/patches/8.1.052762
-rw-r--r--data/vim/patches/8.1.0528797
-rw-r--r--data/vim/patches/8.1.0529113
-rw-r--r--data/vim/patches/8.1.0530104
-rw-r--r--data/vim/patches/8.1.053183
-rw-r--r--data/vim/patches/8.1.0532381
-rw-r--r--data/vim/patches/8.1.053352
-rw-r--r--data/vim/patches/8.1.0534379
-rw-r--r--data/vim/patches/8.1.053597
-rw-r--r--data/vim/patches/8.1.0536103
-rw-r--r--data/vim/patches/8.1.053774
-rw-r--r--data/vim/patches/8.1.053852
-rw-r--r--data/vim/patches/8.1.0539114
-rw-r--r--data/vim/patches/8.1.0540134
-rw-r--r--data/vim/patches/8.1.054166
-rw-r--r--data/vim/patches/8.1.0542423
-rw-r--r--data/vim/patches/8.1.054368
-rw-r--r--data/vim/patches/8.1.0544432
-rw-r--r--data/vim/patches/8.1.054571
-rw-r--r--data/vim/patches/8.1.054646
-rw-r--r--data/vim/patches/8.1.054746
-rw-r--r--data/vim/patches/8.1.054853
-rw-r--r--data/vim/patches/8.1.0549111
-rw-r--r--data/vim/patches/8.1.0550123
-rw-r--r--data/vim/patches/8.1.055172
-rw-r--r--data/vim/patches/8.1.0552120
-rw-r--r--data/vim/patches/8.1.0553197
-rw-r--r--data/vim/patches/8.1.0554127
-rw-r--r--data/vim/patches/8.1.055574
-rw-r--r--data/vim/patches/8.1.0556130
-rw-r--r--data/vim/patches/8.1.0557528
-rw-r--r--data/vim/patches/8.1.0558161
-rw-r--r--data/vim/patches/8.1.0559115
-rw-r--r--data/vim/patches/8.1.0560142
-rw-r--r--data/vim/patches/8.1.056152
-rw-r--r--data/vim/patches/8.1.0562172
-rw-r--r--data/vim/patches/8.1.056356
-rw-r--r--data/vim/patches/8.1.056467
-rw-r--r--data/vim/patches/8.1.056555
-rw-r--r--data/vim/patches/8.1.056670
-rw-r--r--data/vim/patches/8.1.056765
-rw-r--r--data/vim/patches/8.1.056865
-rw-r--r--data/vim/patches/8.1.056998
-rw-r--r--data/vim/patches/8.1.0570126
-rw-r--r--data/vim/patches/8.1.0571125
-rw-r--r--data/vim/patches/8.1.057279
-rw-r--r--data/vim/patches/8.1.0573254
-rw-r--r--data/vim/patches/8.1.0574129
-rw-r--r--data/vim/patches/8.1.0575346
-rw-r--r--data/vim/patches/8.1.057667
-rw-r--r--data/vim/patches/8.1.0577153
-rw-r--r--data/vim/patches/8.1.0578266
-rw-r--r--data/vim/patches/8.1.05792526
-rw-r--r--data/vim/patches/8.1.058052
-rw-r--r--data/vim/patches/8.1.058157
-rw-r--r--data/vim/patches/8.1.0582217
-rw-r--r--data/vim/patches/8.1.0583639
-rw-r--r--data/vim/patches/8.1.058466
-rw-r--r--data/vim/patches/8.1.058553
-rw-r--r--data/vim/patches/8.1.0586850
-rw-r--r--data/vim/patches/8.1.058782
-rw-r--r--data/vim/patches/8.1.058889
-rw-r--r--data/vim/patches/8.1.058990
-rw-r--r--data/vim/patches/8.1.0590218
-rw-r--r--data/vim/sigaltstack.diff16
-rw-r--r--data/vim/strip.diff10
-rw-r--r--data/vim/systypes.diff5
-rw-r--r--data/vim/timestamp.diff65
-rw-r--r--data/vim/vim-7.1.tar.bz2bin6876053 -> 0 bytes
-rw-r--r--data/vim/vim-8.1.tar.bz2bin0 -> 11258868 bytes
-rw-r--r--data/vorbis/_metadata/in.1443.000
l---------data/vorbis/_metadata/maintainer2
-rw-r--r--data/vorbis/_metadata/version2
-rw-r--r--data/vorbis/libogg.diff12
-rw-r--r--data/vorbis/libvorbis-1.2.0.tar.gzbin1494373 -> 0 bytes
-rw-r--r--data/vorbis/make.sh1
-rw-r--r--data/vorbis/v1.3.6.tar.gzbin0 -> 1223948 bytes
-rw-r--r--data/vpnc_/_metadata/in.1443.000
l---------data/vpnc_/_metadata/libssl1.0.dep1
l---------data/vpnc_/_metadata/maintainer2
l---------data/vpnc_/_metadata/openssl.dep1
-rw-r--r--data/weechat/_metadata/in.1443.000
l---------data/weechat/_metadata/maintainer2
-rw-r--r--data/wget/_metadata/in.1443.000
l---------data/wget/_metadata/libssl1.0.dep1
l---------data/wget/_metadata/maintainer2
l---------data/wget/_metadata/openssl.dep1
-rw-r--r--data/wget/_metadata/version2
-rw-r--r--data/wget/localtime-clobber.diff12
-rw-r--r--data/wget/make.sh4
-rw-r--r--data/wget/mdns.diff25
-rw-r--r--data/wget/wget-1.16.tar.gzbin3325041 -> 0 bytes
-rw-r--r--data/wget/wget-1.19.5.tar.xzbin0 -> 2227984 bytes
-rw-r--r--data/whois/_metadata/in.1443.000
l---------data/whois/_metadata/maintainer2
-rw-r--r--data/whois/_metadata/version2
-rw-r--r--data/whois/whois_v5.3.2.tar.gz (renamed from data/whois/whois_4.7.24.tar.gz)bin61416 -> 61416 bytes
-rw-r--r--data/winterboarder.com/_metadata/description1
l---------data/winterboarder.com/_metadata/license1
-rw-r--r--data/winterboarder.com/_metadata/maintainer1
-rw-r--r--data/winterboarder.com/_metadata/name1
-rw-r--r--data/winterboarder.com/_metadata/role1
-rw-r--r--data/winterboarder.com/_metadata/section1
-rw-r--r--data/winterboarder.com/_metadata/tags1
-rw-r--r--data/winterboarder.com/_metadata/version1
-rw-r--r--data/winterboarder.com/make.sh4
-rw-r--r--data/winterboarder.com/wb.pngbin2684 -> 0 bytes
-rw-r--r--data/winterboarder.com/winterboarder.com.list6
-rw-r--r--data/x11/_metadata/in.1443.000
l---------data/x11/_metadata/maintainer2
-rw-r--r--data/x11/_metadata/version2
l---------data/x11/_metadata/xf86bigfontproto.dep1
-rw-r--r--data/x11/libX11-1.1.3.tar.gzbin2022720 -> 0 bytes
-rw-r--r--data/x11/libX11-1.6.6.tar.bz2bin0 -> 2342730 bytes
-rw-r--r--data/x11/make.sh4
-rw-r--r--data/x264/_metadata/in.1443.000
l---------data/x264/_metadata/maintainer2
-rw-r--r--data/xar/_metadata/in.1443.000
l---------data/xar/_metadata/libssl1.0.dep1
l---------data/xar/_metadata/maintainer2
l---------data/xar/_metadata/openssl.dep1
-rw-r--r--data/xar/_metadata/version2
-rw-r--r--data/xar/make.sh3
-rw-r--r--data/xar/xar-1.5.2.tar.gzbin137973 -> 0 bytes
-rw-r--r--data/xar/xar-1.6.1.tar.gzbin0 -> 180771 bytes
-rw-r--r--data/xau/_metadata/in.1443.000
l---------data/xau/_metadata/maintainer2
-rw-r--r--data/xau/_metadata/version2
-rw-r--r--data/xau/libXau-1.0.3.tar.gzbin331729 -> 0 bytes
-rw-r--r--data/xau/libXau-1.0.8.tar.bz2bin0 -> 295297 bytes
-rw-r--r--data/xau/make.sh2
-rw-r--r--data/xcb-proto/_metadata/in.1443.000
l---------data/xcb-proto/_metadata/maintainer2
-rw-r--r--data/xcb-proto/_metadata/version2
-rw-r--r--data/xcb-proto/make.sh2
-rw-r--r--data/xcb-proto/xcb-proto-1.1.tar.gzbin90472 -> 0 bytes
-rw-r--r--data/xcb-proto/xcb-proto-1.13.tar.bz2bin0 -> 151981 bytes
-rw-r--r--data/xcb/_metadata/in.1443.000
l---------data/xcb/_metadata/maintainer2
-rw-r--r--data/xcb/_metadata/version2
-rw-r--r--data/xcb/libxcb-1.1.tar.gzbin620203 -> 0 bytes
-rw-r--r--data/xcb/libxcb-1.13.tar.bz2bin0 -> 510453 bytes
-rw-r--r--data/xcb/make.sh2
-rw-r--r--data/xext/_metadata/in.1443.000
l---------data/xext/_metadata/maintainer2
-rw-r--r--data/xext/_metadata/version2
-rw-r--r--data/xext/libXext-1.0.2.tar.gzbin370151 -> 0 bytes
-rw-r--r--data/xext/libXext-1.3.3.tar.bz2bin0 -> 389523 bytes
-rw-r--r--data/xextproto/_metadata/in.1443.000
l---------data/xextproto/_metadata/maintainer2
-rw-r--r--data/xextproto/_metadata/version2
-rw-r--r--data/xextproto/make.sh3
-rw-r--r--data/xextproto/xextproto-7.0.2.tar.gzbin85983 -> 0 bytes
-rw-r--r--data/xextproto/xextproto-7.3.0.tar.bz2bin0 -> 229310 bytes
-rw-r--r--data/xeyes/_metadata/in.1443.000
l---------data/xeyes/_metadata/maintainer2
-rw-r--r--data/xf86bigfontproto/_metadata/description1
-rw-r--r--data/xf86bigfontproto/_metadata/in.1443.000
-rw-r--r--data/xf86bigfontproto/_metadata/license43
l---------data/xf86bigfontproto/_metadata/maintainer1
-rw-r--r--data/xf86bigfontproto/_metadata/priority1
-rw-r--r--data/xf86bigfontproto/_metadata/role1
-rw-r--r--data/xf86bigfontproto/_metadata/section1
-rw-r--r--data/xf86bigfontproto/_metadata/tags1
-rw-r--r--data/xf86bigfontproto/_metadata/version1
-rw-r--r--data/xf86bigfontproto/make.sh5
-rw-r--r--data/xf86bigfontproto/xf86bigfontproto-1.2.0.tar.bz2bin0 -> 49191 bytes
-rw-r--r--data/xi/_metadata/in.1443.000
l---------data/xi/_metadata/maintainer2
-rw-r--r--data/xineramaproto/_metadata/in.1443.000
l---------data/xineramaproto/_metadata/maintainer2
-rw-r--r--data/xml2/_metadata/in.1443.000
l---------data/xml2/_metadata/maintainer2
-rw-r--r--data/xml2/_metadata/version2
-rw-r--r--data/xml2/characters.diff30
-rw-r--r--data/xml2/make.sh5
-rw-r--r--data/xml2/xml2-0.2.tar.gzbin10925 -> 0 bytes
-rw-r--r--data/xml2/xml2-0.5.tar.gzbin0 -> 86318 bytes
-rw-r--r--data/xmu/_metadata/in.1443.000
l---------data/xmu/_metadata/maintainer2
-rw-r--r--data/xproto/_metadata/in.1443.000
l---------data/xproto/_metadata/maintainer2
-rw-r--r--data/xproto/_metadata/version2
-rw-r--r--data/xproto/make.sh1
-rw-r--r--data/xproto/xproto-7.0.10.tar.gzbin167289 -> 0 bytes
-rw-r--r--data/xproto/xproto-7.0.31.tar.bz2bin0 -> 300356 bytes
-rw-r--r--data/xpwn/_metadata/in.1443.000
l---------data/xpwn/_metadata/libssl1.0.dep1
l---------data/xpwn/_metadata/maintainer2
l---------data/xpwn/_metadata/openssl.dep1
-rw-r--r--data/xt/_metadata/in.1443.000
l---------data/xt/_metadata/maintainer2
-rw-r--r--data/xt/_metadata/version2
-rw-r--r--data/xt/libXt-1.0.4.tar.gzbin676451 -> 0 bytes
-rw-r--r--data/xt/libXt-1.1.5.tar.bz2bin0 -> 771567 bytes
-rw-r--r--data/xt/make.sh2
-rw-r--r--data/xtrans/_metadata/in.1443.000
l---------data/xtrans/_metadata/maintainer2
-rw-r--r--data/xtrans/_metadata/version2
-rw-r--r--data/xtrans/make.sh2
-rw-r--r--data/xtrans/xtrans-1.0.4.tar.gzbin129612 -> 0 bytes
-rw-r--r--data/xtrans/xtrans-1.3.5.tar.bz2bin0 -> 186833 bytes
-rw-r--r--data/xz/_metadata/conflicts1
-rw-r--r--data/xz/_metadata/depends_1
-rw-r--r--data/xz/_metadata/description1
-rw-r--r--data/xz/_metadata/homepage1
-rw-r--r--data/xz/_metadata/in.1443.000
-rw-r--r--data/xz/_metadata/in.550.580
l---------data/xz/_metadata/license1
l---------data/xz/_metadata/maintainer1
-rw-r--r--data/xz/_metadata/name1
-rw-r--r--data/xz/_metadata/priority1
-rw-r--r--data/xz/_metadata/provides1
-rw-r--r--data/xz/_metadata/role1
-rw-r--r--data/xz/_metadata/section1
-rw-r--r--data/xz/_metadata/tags1
-rw-r--r--data/xz/_metadata/version1
-rw-r--r--data/xz/make.sh6
-rw-r--r--data/xz/xz-5.2.4.tar.xzbin0 -> 1053868 bytes
-rw-r--r--data/zanekills.com/_metadata/depends1
-rw-r--r--data/zanekills.com/_metadata/description1
l---------data/zanekills.com/_metadata/license1
-rw-r--r--data/zanekills.com/_metadata/maintainer1
-rw-r--r--data/zanekills.com/_metadata/name1
-rw-r--r--data/zanekills.com/_metadata/role1
-rw-r--r--data/zanekills.com/_metadata/section1
-rw-r--r--data/zanekills.com/_metadata/tags1
-rw-r--r--data/zanekills.com/_metadata/version1
-rw-r--r--data/zip/_metadata/in.1443.000
l---------data/zip/_metadata/maintainer2
-rw-r--r--data/zsh/_metadata/depends1
-rw-r--r--data/zsh/_metadata/in.1443.000
l---------data/zsh/_metadata/maintainer2
-rwxr-xr-xdata/zsh/_metadata/postinst17
-rwxr-xr-xdata/zsh/_metadata/prerm25
-rw-r--r--data/zsh/_metadata/version2
-rw-r--r--data/zsh/make.sh1
-rw-r--r--data/zsh/shebang.diff21
-rw-r--r--data/zsh/zsh-4.3.10.tar.bz2bin2735665 -> 0 bytes
-rw-r--r--data/zsh/zsh-5.7.1.tar.xzbin0 -> 3126308 bytes
-rw-r--r--data/zuijlen.eu/_metadata/conflicts1
-rw-r--r--data/zuijlen.eu/_metadata/description1
-rwxr-xr-xdata/zuijlen.eu/_metadata/extrainst_4
l---------data/zuijlen.eu/_metadata/license1
-rw-r--r--data/zuijlen.eu/_metadata/maintainer1
-rw-r--r--data/zuijlen.eu/_metadata/name1
-rwxr-xr-xdata/zuijlen.eu/_metadata/prerm4
-rw-r--r--data/zuijlen.eu/_metadata/role1
-rw-r--r--data/zuijlen.eu/_metadata/section1
-rw-r--r--data/zuijlen.eu/_metadata/tags1
-rw-r--r--data/zuijlen.eu/_metadata/version1
-rw-r--r--data/zuijlen.eu/_metadata/zlib1
-rw-r--r--data/zuijlen.eu/apt.zuijlen.eu.pngbin4299 -> 0 bytes
-rw-r--r--data/zuijlen.eu/make.sh6
-rw-r--r--data/zuijlen.eu/zuijlen.eu-keyring.gpg18
-rw-r--r--data/zuijlen.eu/zuijlen.eu.list6
3217 files changed, 177972 insertions, 22383 deletions
diff --git a/data/zanekills.com/make.sh b/data/3proxy/_metadata/in.1443.00
index e69de29bb..e69de29bb 100644
--- a/data/zanekills.com/make.sh
+++ b/data/3proxy/_metadata/in.1443.00
diff --git a/data/3proxy/_metadata/maintainer b/data/3proxy/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/3proxy/_metadata/maintainer
+++ b/data/3proxy/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_/make.sh b/data/_/make.sh
deleted file mode 100644
index 452a4bfd5..000000000
--- a/data/_/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg:setup
-pkg:configure
-make
-pkg:install
diff --git a/data/_apr/_metadata/in.1443.00 b/data/_apr/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_apr/_metadata/in.1443.00
diff --git a/data/_apr/_metadata/maintainer b/data/_apr/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/_apr/_metadata/maintainer
+++ b/data/_apr/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_apr/_metadata/version b/data/_apr/_metadata/version
index 31e5c8434..266146b87 100644
--- a/data/_apr/_metadata/version
+++ b/data/_apr/_metadata/version
@@ -1 +1 @@
-1.3.3
+1.6.3
diff --git a/data/_apr/apr-1.3.3.tar.bz2 b/data/_apr/apr-1.3.3.tar.bz2
deleted file mode 100644
index 6ca0f0358..000000000
--- a/data/_apr/apr-1.3.3.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/_apr/apr-1.6.3.tar.bz2 b/data/_apr/apr-1.6.3.tar.bz2
new file mode 100644
index 000000000..28ee2662a
--- /dev/null
+++ b/data/_apr/apr-1.6.3.tar.bz2
Binary files differ
diff --git a/data/_apr/make.sh b/data/_apr/make.sh
index 3b14e1f9b..a9cf50549 100644
--- a/data/_apr/make.sh
+++ b/data/_apr/make.sh
@@ -1,5 +1,7 @@
pkg:setup
pkg:configure --disable-static ac_cv_ebcdic=no lt_cv_dlopen_self=yes ap_cv_atomic_builtins=no apr_cv_use_lfs64=no apr_cv_mutex_recursive=yes apr_cv_epoll=no ac_cv_file__dev_zero=yes ac_cv_c_stack_direction=-1 ac_cv_strerror_r_rc_int=yes ac_cv_func_setpgrp_void=yes ac_cv_sizeof_pid_t=4 ac_cv_sizeof_ssize_t=4 ac_cv_sizeof_size_t=4 ac_cv_sizeof_off_t=8 ac_cv_sizeof_struct_iovec=8 ac_cv_struct_rlimit=yes ac_cv_func_sem_open=yes apr_cv_process_shared_works=yes apr_cv_mutex_robust_shared=no apr_fcntl_tryacquire_eacces=no ac_cv_tcp_nodelay_inherited=yes ac_cv_o_nonblock_inherited=yes apr_cv_tcp_nodelay_with_cork=no apr_cv_sctp=no ac_cv_working_getaddrinfo=yes ac_cv_negative_eai=no ac_cv_working_getnameinfo=yes apr_cv_gai_addrconfig=yes #--with-installbuilddir=/usr/lib/apr-1/build
+gcc -o tools/gen_test_char.lo -c tools/gen_test_char.c
+gcc -o tools/gen_test_char tools/gen_test_char.lo
pkg:make
pkg:install
pkg: rm -rf /usr/build-1
diff --git a/data/_apr/offsetof.diff b/data/_apr/offsetof.diff
index bbb6889bc..d9f3a3e89 100644
--- a/data/_apr/offsetof.diff
+++ b/data/_apr/offsetof.diff
@@ -5,8 +5,8 @@ diff -r -u apr-1.2.12/include/apr_general.h apr-1.2.12+iPhone/include/apr_genera
* @return offset
*/
--#if defined(CRAY) || (defined(__arm) && !defined(LINUX))
-+#if defined(CRAY) || (defined(__arm) && !defined(LINUX) && !defined(__APPLE__))
+-#if defined(CRAY) || (defined(__arm) && !(defined(LINUX) || defined(__FreeBSD__)))
++#if defined(CRAY) || (defined(__arm) && !(defined(LINUX) || defined(__FreeBSD__) || defined(__APPLE__)))
#ifdef __STDC__
#define APR_OFFSET(p_type,field) _Offsetof(p_type,field)
#else
diff --git a/data/_apt/_metadata/berkeleydb.dep b/data/_apt/_metadata/berkeleydb.dep
new file mode 120000
index 000000000..f945cb1a2
--- /dev/null
+++ b/data/_apt/_metadata/berkeleydb.dep
@@ -0,0 +1 @@
+../../berkeleydb \ No newline at end of file
diff --git a/data/_apt/_metadata/bzip2.dep b/data/_apt/_metadata/bzip2.dep
new file mode 120000
index 000000000..15aa44a77
--- /dev/null
+++ b/data/_apt/_metadata/bzip2.dep
@@ -0,0 +1 @@
+../../bzip2 \ No newline at end of file
diff --git a/data/_apt/_metadata/curl.dep b/data/_apt/_metadata/curl.dep
new file mode 120000
index 000000000..9c4438112
--- /dev/null
+++ b/data/_apt/_metadata/curl.dep
@@ -0,0 +1 @@
+../../curl \ No newline at end of file
diff --git a/data/_apt/_metadata/dpkg.dep b/data/_apt/_metadata/dpkg.dep
new file mode 120000
index 000000000..3e57eea03
--- /dev/null
+++ b/data/_apt/_metadata/dpkg.dep
@@ -0,0 +1 @@
+../../dpkg \ No newline at end of file
diff --git a/data/_apt/_metadata/gnupg.dep b/data/_apt/_metadata/gnupg.dep
new file mode 120000
index 000000000..277e892bf
--- /dev/null
+++ b/data/_apt/_metadata/gnupg.dep
@@ -0,0 +1 @@
+../../gnupg \ No newline at end of file
diff --git a/data/_apt/_metadata/gzip.dep b/data/_apt/_metadata/gzip.dep
new file mode 120000
index 000000000..c6c801e81
--- /dev/null
+++ b/data/_apt/_metadata/gzip.dep
@@ -0,0 +1 @@
+../../gzip \ No newline at end of file
diff --git a/data/_apt/_metadata/in.1443.00 b/data/_apt/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_apt/_metadata/in.1443.00
diff --git a/data/_apt/_metadata/license b/data/_apt/_metadata/license
new file mode 100644
index 000000000..9e277e57d
--- /dev/null
+++ b/data/_apt/_metadata/license
@@ -0,0 +1,142 @@
+Apt is copyright 1997, 1998, 1999 Jason Gunthorpe and others.
+
+Apt is licened under the terms of the GNU General Public License (GPL),
+version 2.0 or later, as published by the Free Software Foundation. See
+the file COPYING.GPL [included], /usr/share/common-licenses/GPL, or
+<http://www.gnu.org/copyleft/gpl.txt> for the terms of the latest version
+of the GNU General Public License.
+
+In addition, prior to November 15th, 2000, apt may be distributed under
+terms identical to the above with the following addition:
+
+Works using apt may link against the GUI library "libqt", copyright by
+Troll Tech AS, Norway, provided that:
+
+1. The version of "libqt" is licensed under the terms of the "Qt Free Edition
+ License" published by Troll Tech AS. The license terms identified as
+ the Qt Free Edition License below are the only such terms under which
+ distribution of works derived from both apt and "libqt" are permitted;
+
+and
+
+2. The source code of the version of "libqt" used is
+
+ a) Distributed with the binary version;
+
+ or
+
+ b) Downloadable by anyone, without fee, using a publicly-announced
+ URL on the Internet, for a duration of at least three years
+ starting with distribution of the binary version.
+
+On and after November 15th, 2000, the above additional terms lose all
+force, and apt will be licensed only under the terms of the GNU General
+Public License, version 2.0 or later.
+
+ _______________________________________________________________
+
+The following text, up to the text of the Qt Free Edition License, is
+informational and not part of the license terms on apt.
+
+Modifications to apt in either source or compiled form must be licensed
+under the terms of the GNU General Public License, version 2.0 (or later),
+but need not include the above clause permitting usage of the "libqt"
+library under the Qt Free Edition License. Note that removal of this
+clause will result in software which is not licensed for binary
+redistribution linked against software governed by the Qt Free Edition
+License. In the event that a version of "libqt" is released that is
+licensed under terms that do not conflict with the GPL, the additional
+clause above is not required to grant permission for distribution of works
+that are derived from both apt and "libqt".
+
+No part of apt is licensed under the Qt Free Edition License. The terms
+below are provided to help identify the circumstances under which the
+"libqt" library may be used with apt (or a work derived from both). The
+terms below are copied from the LICENSE file of the qt-1.44 distribution,
+as of November 10th, 1999.
+
+ _______________________________________________________________
+
+ QT FREE EDITION LICENSE
+
+Copyright (C) 1992-1999 Troll Tech AS. All rights reserved.
+
+This is the license for Qt Free Edition version 1.44; it covers private use,
+use of third-party application programs based on Qt, and development of
+free software for the free software community.
+
+
+ COPYRIGHT AND RESTRICTIONS
+
+The Qt toolkit is a product of Troll Tech AS. The Qt Free Edition is limited
+to use with the X Window System.
+
+You may copy this version of the Qt Free Edition provided that the entire
+archive is distributed unchanged and as a whole, including this notice.
+
+You may use this version of the Qt Free Edition to compile, link and run
+application programs legally developed by third parties.
+
+You may use the Qt Free Edition to create application programs
+provided that:
+
+ You accept this license.
+ Your software does not require modifications to Qt Free Edition.
+ You satisfy ONE of the following three requirements
+ EITHER
+ Users of your software can freely obtain source code for the
+ software, freely modify the source code (possibly with
+ restrictions on copyright notices, attributions and legal
+ responsibility), and freely redistribute original or modified
+ versions of the software.
+ OR
+ Your software is distributed under the GNU GENERAL
+ PUBLIC LICENSE, version 2 or later, as defined by the
+ Free Software Foundation.
+ OR
+ Your software is distributed under the GNU LIBRARY
+ GENERAL PUBLIC LICENSE, version 2 or later, as
+ defined by the Free Software Foundation.
+
+If you are paid to develop something with Qt Free Edition or it is a part of
+your job the following conditions also apply:
+
+ Your software must not require libraries, programs, data or
+ documentation that are not available outside your organization in
+ order to compile or use.
+ If and when your organization starts using the software, you must
+ notify Troll Tech AS of the following:
+ Your organization's name and purpose.
+ The software's name and purpose.
+ The software's license.
+ That your organization considers the software to be free
+ software.
+
+You may also use the Qt Free Edition to create reusable components
+(such as libraries) provided that you accept the terms above, and in
+addition that:
+
+ Your components' license includes the following text:
+
+ [Your package] requires the Qt library, which is
+ copyright Troll Tech AS. Freely distributable
+ programs may generally use Qt Free Edition free of
+ charge, see [README.QT] for details.
+
+ README.QT is distributed along with your components.
+ Qt Free Edition is not distributed as an integral part of your
+ components.
+
+ LIMITATIONS OF LIABILITY
+
+Troll Tech AS makes no obligation under this license to support or
+upgrade Qt Free Edition, or assist in the use of Qt Free Edition.
+
+In no event shall Troll Tech AS be liable for any lost revenue or profits or
+other direct, indirect, special, incidental or consequential damages, even
+if Troll Tech has been advised of the possibility of such damages.
+
+QT FREE EDITION IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND,
+INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE.
+ _______________________________________________________________
diff --git a/data/_apt/_metadata/lz4.dep b/data/_apt/_metadata/lz4.dep
new file mode 120000
index 000000000..bccb2875c
--- /dev/null
+++ b/data/_apt/_metadata/lz4.dep
@@ -0,0 +1 @@
+../../lz4 \ No newline at end of file
diff --git a/data/_apt/_metadata/lzma.dep b/data/_apt/_metadata/lzma.dep
new file mode 120000
index 000000000..f84114cb9
--- /dev/null
+++ b/data/_apt/_metadata/lzma.dep
@@ -0,0 +1 @@
+../../lzma \ No newline at end of file
diff --git a/data/_apt/_metadata/maintainer b/data/_apt/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/_apt/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_apt/_metadata/notes b/data/_apt/_metadata/notes
new file mode 100644
index 000000000..616ed7297
--- /dev/null
+++ b/data/_apt/_metadata/notes
@@ -0,0 +1,2 @@
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=146877
+pkgIndexFile::CheckLanguageCode doesn't handle the common cases
diff --git a/data/_apt/_metadata/section b/data/_apt/_metadata/section
new file mode 100644
index 000000000..702b7b8d3
--- /dev/null
+++ b/data/_apt/_metadata/section
@@ -0,0 +1 @@
+Packaging
diff --git a/data/gzip/_metadata/sed.dep b/data/_apt/_metadata/sed.dep
index 315b5c89c..315b5c89c 120000
--- a/data/gzip/_metadata/sed.dep
+++ b/data/_apt/_metadata/sed.dep
diff --git a/data/_apt/_metadata/tags b/data/_apt/_metadata/tags
new file mode 100644
index 000000000..b7fdc65c3
--- /dev/null
+++ b/data/_apt/_metadata/tags
@@ -0,0 +1 @@
+purpose::console, purpose::library
diff --git a/data/_apt/_metadata/version b/data/_apt/_metadata/version
new file mode 100644
index 000000000..b2e46d185
--- /dev/null
+++ b/data/_apt/_metadata/version
@@ -0,0 +1 @@
+1.4.8
diff --git a/data/_apt/apt-nito.tgz b/data/_apt/apt-nito.tgz
new file mode 100644
index 000000000..8ebac625c
--- /dev/null
+++ b/data/_apt/apt-nito.tgz
Binary files differ
diff --git a/data/_apt/cftype.diff b/data/_apt/cftype.diff
new file mode 100644
index 000000000..2c21cba39
--- /dev/null
+++ b/data/_apt/cftype.diff
@@ -0,0 +1,11 @@
+--- apt/methods/http.cc 2018-07-30 21:45:07.000000000 -1000
++++ apt+iPhone/methods/http.cc 2018-07-30 23:55:04.000000000 -1000
+@@ -603,7 +603,7 @@
+
+ if (UniqueID_ == NULL)
+ if (void *lockdown = lockdown_connect()) {
+- UniqueID_ = lockdown_copy_value(lockdown, NULL, kLockdownUniqueDeviceIDKey);
++ UniqueID_ = (CFStringRef)lockdown_copy_value(lockdown, NULL, kLockdownUniqueDeviceIDKey);
+ lockdown_disconnect(lockdown);
+ }
+
diff --git a/data/_apt/date-errors.diff b/data/_apt/date-errors.diff
new file mode 100644
index 000000000..53ee7dd4b
--- /dev/null
+++ b/data/_apt/date-errors.diff
@@ -0,0 +1,12 @@
+--- apt/apt-pkg/deb/debmetaindex.cc 2018-07-30 21:45:07.000000000 -1000
++++ apt+iPhone/apt-pkg/deb/debmetaindex.cc 2018-08-02 00:03:17.000000000 -1000
+@@ -458,9 +458,6 @@
+
+ if (CheckValidUntil == true)
+ {
+- if (Date == 0)
+- _error->Warning( _("Invalid '%s' entry in Release file %s"), "Date", Filename.c_str());
+-
+ std::string const Label = Section.FindS("Label");
+ std::string const StrValidUntil = Section.FindS("Valid-Until");
+
diff --git a/data/_apt/make.sh b/data/_apt/make.sh
new file mode 100644
index 000000000..03f8b6868
--- /dev/null
+++ b/data/_apt/make.sh
@@ -0,0 +1,32 @@
+pkg:setup
+cat >iphoneos_toolchain.cmake <<EOF
+set(CMAKE_SYSTEM_NAME Darwin) # Tell CMake we're cross-compiling
+set(CMAKE_CROSSCOMPILING true)
+#include(CMakeForceCompiler)
+# Prefix detection only works with compiler id "GNU"
+# CMake will look for prefixed g++, cpp, ld, etc. automatically
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(triple ${PKG_TARG})
+set(CMAKE_FIND_ROOT_PATH $(echo ${PKG_PATH} | sed -e s/:/' '/g))
+set(CMAKE_LIBRARY_PATH $(echo ${LIBRARY_PATH} | sed -e s/:/' '/g))
+set(CMAKE_INCLUDE_PATH $(echo ${INCLUDE_PATH} | sed -e s/:/' '/g))
+set(CMAKE_C_COMPILER ${PKG_TARG}-gcc)
+set(CMAKE_CXX_COMPILER ${PKG_TARG}-g++)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+EOF
+
+cmake -j8 -DCMAKE_TOOLCHAIN_FILE=iphoneos_toolchain.cmake -DCMAKE_LOCALSTATEDIR="/private/var" -DCMAKE_INSTALL_NAME_DIR="/usr/lib" -DCMAKE_INSTALL_RPATH="/usr/" -DCMAKE_OSX_SYSROOT="${PKG_ROOT}" -DCMAKE_INSTALL_PREFIX="/usr/" -DCMAKE_SHARED_LINKER_FLAGS="-lresolv" -DCURRENT_VENDOR=debian -DUSE_NLS=0 -DWITH_DOC=0 -DCOMMON_ARCH=${PKG_ARCH} .
+make -j16
+
+pkg: mkdir -p /etc/apt/apt.conf.d
+pkg: mkdir -p /etc/apt/preferences.d
+pkg: mkdir -p /etc/apt/sources.list.d
+pkg: mkdir -p /etc/apt/trusted.gpg.d
+pkg: mkdir -p /var/cache/apt/archives/partial
+pkg: mkdir -p /var/lib/apt/lists/partial
+pkg: mkdir -p /var/lib/apt/periodic
+pkg: mkdir -p /var/log/apt
+
+pkg:install
diff --git a/data/_apt/sandbox-errors.diff b/data/_apt/sandbox-errors.diff
new file mode 100644
index 000000000..706aeb23c
--- /dev/null
+++ b/data/_apt/sandbox-errors.diff
@@ -0,0 +1,10 @@
+--- apt/apt-pkg/acquire.cc 2018-07-30 21:45:07.000000000 -1000
++++ apt+iPhone/apt-pkg/acquire.cc 2018-08-02 00:04:25.000000000 -1000
+@@ -603,7 +603,6 @@
+ struct passwd const * const pw = getpwnam(SandboxUser.c_str());
+ if (pw == NULL)
+ {
+- _error->Warning(_("No sandbox user '%s' on the system, can not drop privileges"), SandboxUser.c_str());
+ _config->Set("APT::Sandbox::User", "");
+ return;
+ }
diff --git a/data/_apt/sha1.diff b/data/_apt/sha1.diff
new file mode 100644
index 000000000..e681382ca
--- /dev/null
+++ b/data/_apt/sha1.diff
@@ -0,0 +1,12 @@
+diff -ur apt/methods/gpgv.cc apt+iPhone/methods/gpgv.cc
+--- apt/methods/gpgv.cc 2018-07-30 21:45:07.000000000 -1000
++++ apt+iPhone/methods/gpgv.cc 2018-08-03 20:59:27.000000000 -1000
+@@ -67,7 +67,7 @@
+ static constexpr Digest Digests[] = {
+ {Digest::State::Untrusted, "Invalid digest"},
+ {Digest::State::Untrusted, "MD5"},
+- {Digest::State::Untrusted, "SHA1"},
++ {Digest::State::Trusted, "SHA1"},
+ {Digest::State::Untrusted, "RIPE-MD/160"},
+ {Digest::State::Trusted, "Reserved digest"},
+ {Digest::State::Trusted, "Reserved digest"},
diff --git a/data/_apt1.4/_metadata/berkeleydb.dep b/data/_apt1.4/_metadata/berkeleydb.dep
new file mode 120000
index 000000000..f945cb1a2
--- /dev/null
+++ b/data/_apt1.4/_metadata/berkeleydb.dep
@@ -0,0 +1 @@
+../../berkeleydb \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/bzip2.dep b/data/_apt1.4/_metadata/bzip2.dep
new file mode 120000
index 000000000..15aa44a77
--- /dev/null
+++ b/data/_apt1.4/_metadata/bzip2.dep
@@ -0,0 +1 @@
+../../bzip2 \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/curl.dep b/data/_apt1.4/_metadata/curl.dep
new file mode 120000
index 000000000..9c4438112
--- /dev/null
+++ b/data/_apt1.4/_metadata/curl.dep
@@ -0,0 +1 @@
+../../curl \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/dpkg.dep b/data/_apt1.4/_metadata/dpkg.dep
new file mode 120000
index 000000000..3e57eea03
--- /dev/null
+++ b/data/_apt1.4/_metadata/dpkg.dep
@@ -0,0 +1 @@
+../../dpkg \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/gnupg.dep b/data/_apt1.4/_metadata/gnupg.dep
new file mode 120000
index 000000000..277e892bf
--- /dev/null
+++ b/data/_apt1.4/_metadata/gnupg.dep
@@ -0,0 +1 @@
+../../gnupg \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/gzip.dep b/data/_apt1.4/_metadata/gzip.dep
new file mode 120000
index 000000000..c6c801e81
--- /dev/null
+++ b/data/_apt1.4/_metadata/gzip.dep
@@ -0,0 +1 @@
+../../gzip \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/in.1443.00 b/data/_apt1.4/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_apt1.4/_metadata/in.1443.00
diff --git a/data/_apt1.4/_metadata/license b/data/_apt1.4/_metadata/license
new file mode 100644
index 000000000..9e277e57d
--- /dev/null
+++ b/data/_apt1.4/_metadata/license
@@ -0,0 +1,142 @@
+Apt is copyright 1997, 1998, 1999 Jason Gunthorpe and others.
+
+Apt is licened under the terms of the GNU General Public License (GPL),
+version 2.0 or later, as published by the Free Software Foundation. See
+the file COPYING.GPL [included], /usr/share/common-licenses/GPL, or
+<http://www.gnu.org/copyleft/gpl.txt> for the terms of the latest version
+of the GNU General Public License.
+
+In addition, prior to November 15th, 2000, apt may be distributed under
+terms identical to the above with the following addition:
+
+Works using apt may link against the GUI library "libqt", copyright by
+Troll Tech AS, Norway, provided that:
+
+1. The version of "libqt" is licensed under the terms of the "Qt Free Edition
+ License" published by Troll Tech AS. The license terms identified as
+ the Qt Free Edition License below are the only such terms under which
+ distribution of works derived from both apt and "libqt" are permitted;
+
+and
+
+2. The source code of the version of "libqt" used is
+
+ a) Distributed with the binary version;
+
+ or
+
+ b) Downloadable by anyone, without fee, using a publicly-announced
+ URL on the Internet, for a duration of at least three years
+ starting with distribution of the binary version.
+
+On and after November 15th, 2000, the above additional terms lose all
+force, and apt will be licensed only under the terms of the GNU General
+Public License, version 2.0 or later.
+
+ _______________________________________________________________
+
+The following text, up to the text of the Qt Free Edition License, is
+informational and not part of the license terms on apt.
+
+Modifications to apt in either source or compiled form must be licensed
+under the terms of the GNU General Public License, version 2.0 (or later),
+but need not include the above clause permitting usage of the "libqt"
+library under the Qt Free Edition License. Note that removal of this
+clause will result in software which is not licensed for binary
+redistribution linked against software governed by the Qt Free Edition
+License. In the event that a version of "libqt" is released that is
+licensed under terms that do not conflict with the GPL, the additional
+clause above is not required to grant permission for distribution of works
+that are derived from both apt and "libqt".
+
+No part of apt is licensed under the Qt Free Edition License. The terms
+below are provided to help identify the circumstances under which the
+"libqt" library may be used with apt (or a work derived from both). The
+terms below are copied from the LICENSE file of the qt-1.44 distribution,
+as of November 10th, 1999.
+
+ _______________________________________________________________
+
+ QT FREE EDITION LICENSE
+
+Copyright (C) 1992-1999 Troll Tech AS. All rights reserved.
+
+This is the license for Qt Free Edition version 1.44; it covers private use,
+use of third-party application programs based on Qt, and development of
+free software for the free software community.
+
+
+ COPYRIGHT AND RESTRICTIONS
+
+The Qt toolkit is a product of Troll Tech AS. The Qt Free Edition is limited
+to use with the X Window System.
+
+You may copy this version of the Qt Free Edition provided that the entire
+archive is distributed unchanged and as a whole, including this notice.
+
+You may use this version of the Qt Free Edition to compile, link and run
+application programs legally developed by third parties.
+
+You may use the Qt Free Edition to create application programs
+provided that:
+
+ You accept this license.
+ Your software does not require modifications to Qt Free Edition.
+ You satisfy ONE of the following three requirements
+ EITHER
+ Users of your software can freely obtain source code for the
+ software, freely modify the source code (possibly with
+ restrictions on copyright notices, attributions and legal
+ responsibility), and freely redistribute original or modified
+ versions of the software.
+ OR
+ Your software is distributed under the GNU GENERAL
+ PUBLIC LICENSE, version 2 or later, as defined by the
+ Free Software Foundation.
+ OR
+ Your software is distributed under the GNU LIBRARY
+ GENERAL PUBLIC LICENSE, version 2 or later, as
+ defined by the Free Software Foundation.
+
+If you are paid to develop something with Qt Free Edition or it is a part of
+your job the following conditions also apply:
+
+ Your software must not require libraries, programs, data or
+ documentation that are not available outside your organization in
+ order to compile or use.
+ If and when your organization starts using the software, you must
+ notify Troll Tech AS of the following:
+ Your organization's name and purpose.
+ The software's name and purpose.
+ The software's license.
+ That your organization considers the software to be free
+ software.
+
+You may also use the Qt Free Edition to create reusable components
+(such as libraries) provided that you accept the terms above, and in
+addition that:
+
+ Your components' license includes the following text:
+
+ [Your package] requires the Qt library, which is
+ copyright Troll Tech AS. Freely distributable
+ programs may generally use Qt Free Edition free of
+ charge, see [README.QT] for details.
+
+ README.QT is distributed along with your components.
+ Qt Free Edition is not distributed as an integral part of your
+ components.
+
+ LIMITATIONS OF LIABILITY
+
+Troll Tech AS makes no obligation under this license to support or
+upgrade Qt Free Edition, or assist in the use of Qt Free Edition.
+
+In no event shall Troll Tech AS be liable for any lost revenue or profits or
+other direct, indirect, special, incidental or consequential damages, even
+if Troll Tech has been advised of the possibility of such damages.
+
+QT FREE EDITION IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND,
+INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE.
+ _______________________________________________________________
diff --git a/data/_apt1.4/_metadata/lz4.dep b/data/_apt1.4/_metadata/lz4.dep
new file mode 120000
index 000000000..bccb2875c
--- /dev/null
+++ b/data/_apt1.4/_metadata/lz4.dep
@@ -0,0 +1 @@
+../../lz4 \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/lzma.dep b/data/_apt1.4/_metadata/lzma.dep
new file mode 120000
index 000000000..f84114cb9
--- /dev/null
+++ b/data/_apt1.4/_metadata/lzma.dep
@@ -0,0 +1 @@
+../../lzma \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/maintainer b/data/_apt1.4/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/_apt1.4/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_apt1.4/_metadata/notes b/data/_apt1.4/_metadata/notes
new file mode 100644
index 000000000..616ed7297
--- /dev/null
+++ b/data/_apt1.4/_metadata/notes
@@ -0,0 +1,2 @@
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=146877
+pkgIndexFile::CheckLanguageCode doesn't handle the common cases
diff --git a/data/_apt1.4/_metadata/section b/data/_apt1.4/_metadata/section
new file mode 100644
index 000000000..702b7b8d3
--- /dev/null
+++ b/data/_apt1.4/_metadata/section
@@ -0,0 +1 @@
+Packaging
diff --git a/data/lzma/_metadata/sed.dep b/data/_apt1.4/_metadata/sed.dep
index 315b5c89c..315b5c89c 120000
--- a/data/lzma/_metadata/sed.dep
+++ b/data/_apt1.4/_metadata/sed.dep
diff --git a/data/_apt1.4/_metadata/tags b/data/_apt1.4/_metadata/tags
new file mode 100644
index 000000000..b7fdc65c3
--- /dev/null
+++ b/data/_apt1.4/_metadata/tags
@@ -0,0 +1 @@
+purpose::console, purpose::library
diff --git a/data/_apt1.4/_metadata/version b/data/_apt1.4/_metadata/version
new file mode 100644
index 000000000..b2e46d185
--- /dev/null
+++ b/data/_apt1.4/_metadata/version
@@ -0,0 +1 @@
+1.4.8
diff --git a/data/_apt1.4/apt-iphone.tar.lz b/data/_apt1.4/apt-iphone.tar.lz
new file mode 100644
index 000000000..4386f7ad1
--- /dev/null
+++ b/data/_apt1.4/apt-iphone.tar.lz
Binary files differ
diff --git a/data/_apt1.4/make.sh b/data/_apt1.4/make.sh
new file mode 100644
index 000000000..2f77aa5cf
--- /dev/null
+++ b/data/_apt1.4/make.sh
@@ -0,0 +1,33 @@
+pkg:setup
+cat >iphoneos_toolchain.cmake <<EOF
+set(CMAKE_SYSTEM_NAME Darwin) # Tell CMake we're cross-compiling
+set(CMAKE_CROSSCOMPILING true)
+#include(CMakeForceCompiler)
+# Prefix detection only works with compiler id "GNU"
+# CMake will look for prefixed g++, cpp, ld, etc. automatically
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(triple ${PKG_TARG})
+set(CMAKE_FIND_ROOT_PATH $(echo ${PKG_PATH} | sed -e s/:/' '/g))
+set(CMAKE_LIBRARY_PATH $(echo ${LIBRARY_PATH} | sed -e s/:/' '/g))
+set(CMAKE_INCLUDE_PATH $(echo ${INCLUDE_PATH} | sed -e s/:/' '/g))
+set(CMAKE_C_COMPILER ${PKG_TARG}-gcc)
+set(CMAKE_CXX_COMPILER ${PKG_TARG}-g++)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(DPKG_DATADIR /usr/share/dpkg)
+EOF
+
+cmake -j8 -DCMAKE_TOOLCHAIN_FILE=iphoneos_toolchain.cmake -DCMAKE_LOCALSTATEDIR="/private/var" -DCMAKE_INSTALL_NAME_DIR="/usr/lib" -DCMAKE_INSTALL_RPATH="/usr/" -DCMAKE_OSX_SYSROOT="${PKG_ROOT}" -DCMAKE_INSTALL_PREFIX="/usr/" -DCMAKE_SHARED_LINKER_FLAGS="-lresolv" -DCURRENT_VENDOR=debian -DUSE_NLS=0 -DWITH_DOC=0 -DCOMMON_ARCH=${PKG_ARCH} .
+make -j16
+
+pkg: mkdir -p /etc/apt/apt.conf.d
+pkg: mkdir -p /etc/apt/preferences.d
+pkg: mkdir -p /etc/apt/sources.list.d
+pkg: mkdir -p /etc/apt/trusted.gpg.d
+pkg: mkdir -p /var/cache/apt/archives/partial
+pkg: mkdir -p /var/lib/apt/lists/partial
+pkg: mkdir -p /var/lib/apt/periodic
+pkg: mkdir -p /var/log/apt
+
+pkg:install
diff --git a/data/_apt7/apt-get.diff b/data/_apt7/apt-get.diff
new file mode 100644
index 000000000..6d5bacac9
--- /dev/null
+++ b/data/_apt7/apt-get.diff
@@ -0,0 +1,20 @@
+diff -ur apt-0.7.25.3/cmdline/apt-get.cc apt-0.7.25.3+iPhone/cmdline/apt-get.cc
+--- apt-0.7.25.3/cmdline/apt-get.cc 2018-12-03 13:17:35.000000000 -1000
++++ apt-0.7.25.3+iPhone/cmdline/apt-get.cc 2018-12-03 13:20:54.000000000 -1000
+@@ -1844,12 +1844,12 @@
+ if ((*Cache)[I].Install() == false)
+ continue;
+
+- const char **J;
+- for (J = CmdL.FileList + 1; *J != 0; J++)
+- if (strcmp(*J,I.Name()) == 0)
++ const char **K;
++ for (K = CmdL.FileList + 1; *K != 0; K++)
++ if (strcmp(*K,I.Name()) == 0)
+ break;
+
+- if (*J == 0) {
++ if (*K == 0) {
+ List += string(I.Name()) + " ";
+ VersionsList += string(Cache[I].CandVersion) + "\n";
+ }
diff --git a/data/_apt7/cfnetwork.diff b/data/_apt7/cfnetwork.diff
index 1a9e10f8d..f6d609521 100644
--- a/data/_apt7/cfnetwork.diff
+++ b/data/_apt7/cfnetwork.diff
@@ -9,7 +9,7 @@ diff -ru apt-0.7.25.3/methods/http.cc apt-0.7.25.3+iPhone/methods/http.cc
#include <sys/stat.h>
#include <sys/time.h>
#include <utime.h>
-@@ -41,11 +42,19 @@
+@@ -41,11 +42,20 @@
#include <string.h>
#include <iostream>
#include <map>
@@ -25,6 +25,7 @@ diff -ru apt-0.7.25.3/methods/http.cc apt-0.7.25.3+iPhone/methods/http.cc
+#include <lockdown.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreServices/CoreServices.h>
++#include <CFNetwork/CFNetwork.h>
+#include <SystemConfiguration/SystemConfiguration.h>
#include "config.h"
@@ -681,7 +682,7 @@ diff -ru apt-0.7.25.3/methods/http.cc apt-0.7.25.3+iPhone/methods/http.cc
+
+ if (UniqueID_ == NULL)
+ if (void *lockdown = lockdown_connect()) {
-+ UniqueID_ = lockdown_copy_value(lockdown, NULL, kLockdownUniqueDeviceIDKey);
++ UniqueID_ = (CFStringRef)lockdown_copy_value(lockdown, NULL, kLockdownUniqueDeviceIDKey);
+ lockdown_disconnect(lockdown);
+ }
+
diff --git a/data/_apt7/deblistparser.diff b/data/_apt7/deblistparser.diff
new file mode 100644
index 000000000..2a0d6c9b0
--- /dev/null
+++ b/data/_apt7/deblistparser.diff
@@ -0,0 +1,27 @@
+diff -ur apt-0.7.25.3/apt-pkg/deb/deblistparser.cc apt-0.7.25.3+iPhone/apt-pkg/deb/deblistparser.cc
+--- apt-0.7.25.3/apt-pkg/deb/deblistparser.cc 2018-12-03 12:52:15.000000000 -1000
++++ apt-0.7.25.3+iPhone/apt-pkg/deb/deblistparser.cc 2018-12-03 12:53:11.000000000 -1000
+@@ -248,18 +248,18 @@
+ /* Strip out any spaces from the text, this undoes dpkgs reformatting
+ of certain fields. dpkg also has the rather interesting notion of
+ reformatting depends operators < -> <= */
+- char *I = S;
++ char *L = S;
+ for (; Start != End; Start++)
+ {
+ if (isspace(*Start) == 0)
+- *I++ = tolower_ascii(*Start);
++ *L++ = tolower_ascii(*Start);
+ if (*Start == '<' && Start[1] != '<' && Start[1] != '=')
+- *I++ = '=';
++ *L++ = '=';
+ if (*Start == '>' && Start[1] != '>' && Start[1] != '=')
+- *I++ = '=';
++ *L++ = '=';
+ }
+
+- Result = AddCRC16(Result,S,I - S);
++ Result = AddCRC16(Result,S,L - S);
+ }
+
+ return Result;
diff --git a/data/_apt7/make.sh b/data/_apt7/make.sh
index 711fdfb94..5ec612bc9 100644
--- a/data/_apt7/make.sh
+++ b/data/_apt7/make.sh
@@ -1,6 +1,8 @@
pkg:setup
+rm buildlib/config.sub
+cp ${PKG_BASE}/config.sub buildlib/
autoconf
-DPKG_ARCH=$(ls -d $(PKG_WORK_ dpkg)/dpkg-*/scripts) pkg:configure --disable-nls
+DPKG_DATADIR=$(ls -d $(PKG_WORK_ _dpkg)/dpkg-*/data) DPKG_ARCH=$(ls -d $(PKG_WORK_ _dpkg)/dpkg-*/scripts) pkg:configure --disable-nls
make
pkg: mkdir -p /etc/apt/apt.conf.d
diff --git a/data/_coreutils/_metadata/in.1443.00 b/data/_coreutils/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_coreutils/_metadata/in.1443.00
diff --git a/data/_coreutils/_metadata/maintainer b/data/_coreutils/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/_coreutils/_metadata/maintainer
+++ b/data/_coreutils/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_coreutils/_metadata/version b/data/_coreutils/_metadata/version
index 37722ebbc..b0aabe1d7 100644
--- a/data/_coreutils/_metadata/version
+++ b/data/_coreutils/_metadata/version
@@ -1 +1 @@
-7.4
+8.30
diff --git a/data/_coreutils/coreutils-7.4.tar.gz b/data/_coreutils/coreutils-7.4.tar.gz
deleted file mode 100644
index 53b8982a5..000000000
--- a/data/_coreutils/coreutils-7.4.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/_coreutils/coreutils-8.30.tar.xz b/data/_coreutils/coreutils-8.30.tar.xz
new file mode 100644
index 000000000..0ea8f879e
--- /dev/null
+++ b/data/_coreutils/coreutils-8.30.tar.xz
Binary files differ
diff --git a/data/_coreutils/make.sh b/data/_coreutils/make.sh
index 0755470b9..d7c194b91 100644
--- a/data/_coreutils/make.sh
+++ b/data/_coreutils/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+autoreconf -f -i
pkg:configure --enable-install-program=su \
ac_cv_c_stack_direction=-1 \
gl_cv_struct_dirent_d_ino=yes \
@@ -65,7 +66,7 @@ pkg:configure --enable-install-program=su \
gl_cv_func_select_supports0=yes \
gl_cv_func_snprintf_size1=yes \
gl_cv_header_working_stdint_h=no \
- gl_cv_func_stpncpy=no \
+ gl_cv_func_stpncpy=yes \
gl_cv_func_strndup=no \
ac_cv_func_strnlen_working=no \
ac_cv_func_strtod=yes \
@@ -78,10 +79,10 @@ pkg:configure --enable-install-program=su \
ac_cv_func_fork_works=yes \
ac_cv_func_vfork_works=yes \
utils_cv_localtime_cache=no
-make AR="${PKG_TARG}-ar" CFLAGS='-O2 -mthumb'
+make AR="${PKG_TARG}-ar" CFLAGS="-O2 ${PKG_MCPU}"
pkg:install
pkg: rm -f /usr/bin/sync
-pkg:bin cat chgrp chmod chown cp date dd df dir echo false kill ln ls mkdir mknod mktemp mv pwd readlink rm rmdir sleep stty su touch true uname vdir
+pkg:bin cat chgrp chmod chown cp date dd dir echo false kill ln ls mkdir mknod mktemp mv pwd readlink rm rmdir sleep stty su touch true uname vdir
pkg: mkdir -p /usr/sbin
pkg: mv /usr/bin/chroot /usr/sbin
pkg: mkdir -p /etc/profile.d
@@ -89,3 +90,4 @@ pkg: cp -a %/coreutils.sh /etc/profile.d
ln -s /bin/chown "${PKG_DEST}"/usr/bin
ln -s /bin/chown "${PKG_DEST}"/usr/sbin
ln -s /bin/mktemp "${PKG_DEST}"/usr/bin
+pkg: fakeroot chmod u+s /bin/su
diff --git a/data/_coreutils/man.diff b/data/_coreutils/man.diff
index cdcd686d1..abd2660d8 100644
--- a/data/_coreutils/man.diff
+++ b/data/_coreutils/man.diff
@@ -1,24 +1,9 @@
-diff -ru coreutils-7.4/Makefile.am coreutils-7.4+iPhone/Makefile.am
---- coreutils-7.4/Makefile.am 2009-05-03 20:05:34.000000000 +0000
-+++ coreutils-7.4+iPhone/Makefile.am 2009-06-19 05:47:10.000000000 +0000
-@@ -17,7 +17,7 @@
-
- ALL_RECURSIVE_TARGETS =
-
--SUBDIRS = lib src doc man po tests gnulib-tests
-+SUBDIRS = lib src doc po tests gnulib-tests
-
- changelog_etc = \
- ChangeLog-2005 \
-diff -ru coreutils-7.4/Makefile.in coreutils-7.4+iPhone/Makefile.in
---- coreutils-7.4/Makefile.in 2009-05-07 12:01:41.000000000 +0000
-+++ coreutils-7.4+iPhone/Makefile.in 2009-06-19 05:47:05.000000000 +0000
-@@ -936,7 +936,7 @@
-
- # Some tests always need root privileges, others need them only sometimes.
- ALL_RECURSIVE_TARGETS = install-root check-root distcheck-hook
--SUBDIRS = lib src doc man po tests gnulib-tests
-+SUBDIRS = lib src doc po tests gnulib-tests
- changelog_etc = \
- ChangeLog-2005 \
- ChangeLog-2006 \
+diff -ur coreutils-8.30/Makefile.am coreutils-8.30+iPhone/Makefile.am
+--- coreutils-8.30/Makefile.am 2018-05-13 18:20:24.000000000 -1000
++++ coreutils-8.30+iPhone/Makefile.am 2018-08-02 22:58:28.000000000 -1000
+@@ -211,5 +211,4 @@
+ include $(top_srcdir)/lib/local.mk
+ include $(top_srcdir)/src/local.mk
+ include $(top_srcdir)/doc/local.mk
+-include $(top_srcdir)/man/local.mk
+ include $(top_srcdir)/tests/local.mk
diff --git a/data/_coreutils/su.diff b/data/_coreutils/su.diff
new file mode 100644
index 000000000..4aaaadb2d
--- /dev/null
+++ b/data/_coreutils/su.diff
@@ -0,0 +1,556 @@
+diff -uNr coreutils-8.30/build-aux/gen-lists-of-programs.sh coreutils-8.30+iPhone/build-aux/gen-lists-of-programs.sh
+--- coreutils-8.30/build-aux/gen-lists-of-programs.sh 2017-04-30 19:00:58.000000000 -1000
++++ coreutils-8.30+iPhone/build-aux/gen-lists-of-programs.sh 2018-08-02 23:08:50.000000000 -1000
+@@ -49,6 +49,7 @@
+ cat
+ chcon
+ chgrp
++ su
+ chmod
+ chown
+ cksum
+diff -uNr coreutils-8.30/src/local.mk coreutils-8.30+iPhone/src/local.mk
+--- coreutils-8.30/src/local.mk 2018-06-24 14:43:17.000000000 -1000
++++ coreutils-8.30+iPhone/src/local.mk 2018-08-02 23:08:01.000000000 -1000
+@@ -101,6 +101,7 @@
+ src_cat_LDADD = $(LDADD)
+ src_chcon_LDADD = $(LDADD)
+ src_chgrp_LDADD = $(LDADD)
++src_su_LDADD = $(LDADD)
+ src_chmod_LDADD = $(LDADD)
+ src_chown_LDADD = $(LDADD)
+ src_chroot_LDADD = $(LDADD)
+@@ -364,6 +365,7 @@
+ src/relpath.c src/relpath.h
+ src_chown_SOURCES = src/chown.c src/chown-core.c
+ src_chgrp_SOURCES = src/chgrp.c src/chown-core.c
++src_su_SOURCES = src/su.c
+ src_kill_SOURCES = src/kill.c src/operand2sig.c
+ src_realpath_SOURCES = src/realpath.c src/relpath.c src/relpath.h
+ src_timeout_SOURCES = src/timeout.c src/operand2sig.c
+diff -uNr coreutils-8.30/src/su.c coreutils-8.30+iPhone/src/su.c
+--- coreutils-8.30/src/su.c 1969-12-31 14:00:00.000000000 -1000
++++ coreutils-8.30+iPhone/src/su.c 2018-08-02 23:05:53.000000000 -1000
+@@ -0,0 +1,522 @@
++/* su for GNU. Run a shell with substitute user and group IDs.
++ Copyright (C) 1992-2006, 2008 Free Software Foundation, Inc.
++
++ This program is free software: you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation, either version 3 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <http://www.gnu.org/licenses/>. */
++
++/* Run a shell with the real and effective UID and GID and groups
++ of USER, default `root'.
++
++ The shell run is taken from USER's password entry, /bin/sh if
++ none is specified there. If the account has a password, su
++ prompts for a password unless run by a user with real UID 0.
++
++ Does not change the current directory.
++ Sets `HOME' and `SHELL' from the password entry for USER, and if
++ USER is not root, sets `USER' and `LOGNAME' to USER.
++ The subshell is not a login shell.
++
++ If one or more ARGs are given, they are passed as additional
++ arguments to the subshell.
++
++ Does not handle /bin/sh or other shells specially
++ (setting argv[0] to "-su", passing -c only to certain shells, etc.).
++ I don't see the point in doing that, and it's ugly.
++
++ This program intentionally does not support a "wheel group" that
++ restricts who can su to UID 0 accounts. RMS considers that to
++ be fascist.
++
++ Compile-time options:
++ -DSYSLOG_SUCCESS Log successful su's (by default, to root) with syslog.
++ -DSYSLOG_FAILURE Log failed su's (by default, to root) with syslog.
++
++ -DSYSLOG_NON_ROOT Log all su's, not just those to root (UID 0).
++ Never logs attempted su's to nonexistent accounts.
++
++ Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
++
++#include <config.h>
++#include <stdio.h>
++#include <getopt.h>
++#include <sys/types.h>
++#include <pwd.h>
++#include <grp.h>
++
++/* Hide any system prototype for getusershell.
++ This is necessary because some Cray systems have a conflicting
++ prototype (returning `int') in <unistd.h>. */
++#define getusershell _getusershell_sys_proto_
++
++#include "system.h"
++#include "getpass.h"
++
++#undef getusershell
++
++#if HAVE_SYSLOG_H && HAVE_SYSLOG
++# include <syslog.h>
++#else
++# undef SYSLOG_SUCCESS
++# undef SYSLOG_FAILURE
++# undef SYSLOG_NON_ROOT
++#endif
++
++#if HAVE_SYS_PARAM_H
++# include <sys/param.h>
++#endif
++
++#ifndef HAVE_ENDGRENT
++# define endgrent() ((void) 0)
++#endif
++
++#ifndef HAVE_ENDPWENT
++# define endpwent() ((void) 0)
++#endif
++
++#if HAVE_SHADOW_H
++# include <shadow.h>
++#endif
++
++#include "error.h"
++
++/* The official name of this program (e.g., no `g' prefix). */
++#define PROGRAM_NAME "su"
++
++#define AUTHORS proper_name ("David MacKenzie")
++
++#if HAVE_PATHS_H
++# include <paths.h>
++#endif
++
++/* The default PATH for simulated logins to non-superuser accounts. */
++#ifdef _PATH_DEFPATH
++# define DEFAULT_LOGIN_PATH _PATH_DEFPATH
++#else
++# define DEFAULT_LOGIN_PATH ":/usr/ucb:/bin:/usr/bin"
++#endif
++
++/* The default PATH for simulated logins to superuser accounts. */
++#ifdef _PATH_DEFPATH_ROOT
++# define DEFAULT_ROOT_LOGIN_PATH _PATH_DEFPATH_ROOT
++#else
++# define DEFAULT_ROOT_LOGIN_PATH "/usr/ucb:/bin:/usr/bin:/etc"
++#endif
++
++/* The shell to run if none is given in the user's passwd entry. */
++#define DEFAULT_SHELL "/bin/sh"
++
++/* The user to become if none is specified. */
++#define DEFAULT_USER "root"
++
++char *crypt (char const *key, char const *salt);
++char *getusershell (void);
++void endusershell (void);
++void setusershell (void);
++
++extern char **environ;
++
++static void run_shell (char const *, char const *, char **, size_t)
++ ATTRIBUTE_NORETURN;
++
++/* If true, pass the `-f' option to the subshell. */
++static bool fast_startup;
++
++/* If true, simulate a login instead of just starting a shell. */
++static bool simulate_login;
++
++/* If true, change some environment vars to indicate the user su'd to. */
++static bool change_environment;
++
++static struct option const longopts[] =
++{
++ {"command", required_argument, NULL, 'c'},
++ {"fast", no_argument, NULL, 'f'},
++ {"login", no_argument, NULL, 'l'},
++ {"preserve-environment", no_argument, NULL, 'p'},
++ {"shell", required_argument, NULL, 's'},
++ {GETOPT_HELP_OPTION_DECL},
++ {GETOPT_VERSION_OPTION_DECL},
++ {NULL, 0, NULL, 0}
++};
++
++/* Add NAME=VAL to the environment, checking for out of memory errors. */
++
++static void
++xsetenv (char const *name, char const *val)
++{
++ size_t namelen = strlen (name);
++ size_t vallen = strlen (val);
++ char *string = xmalloc (namelen + 1 + vallen + 1);
++ strcpy (string, name);
++ string[namelen] = '=';
++ strcpy (string + namelen + 1, val);
++ if (putenv (string) != 0)
++ xalloc_die ();
++}
++
++#if defined SYSLOG_SUCCESS || defined SYSLOG_FAILURE
++/* Log the fact that someone has run su to the user given by PW;
++ if SUCCESSFUL is true, they gave the correct password, etc. */
++
++static void
++log_su (struct passwd const *pw, bool successful)
++{
++ const char *new_user, *old_user, *tty;
++
++# ifndef SYSLOG_NON_ROOT
++ if (pw->pw_uid)
++ return;
++# endif
++ new_user = pw->pw_name;
++ /* The utmp entry (via getlogin) is probably the best way to identify
++ the user, especially if someone su's from a su-shell. */
++ old_user = getlogin ();
++ if (!old_user)
++ {
++ /* getlogin can fail -- usually due to lack of utmp entry.
++ Resort to getpwuid. */
++ struct passwd *pwd = getpwuid (getuid ());
++ old_user = (pwd ? pwd->pw_name : "");
++ }
++ tty = ttyname (STDERR_FILENO);
++ if (!tty)
++ tty = "none";
++ /* 4.2BSD openlog doesn't have the third parameter. */
++ openlog (last_component (program_name), 0
++# ifdef LOG_AUTH
++ , LOG_AUTH
++# endif
++ );
++ syslog (LOG_NOTICE,
++# ifdef SYSLOG_NON_ROOT
++ "%s(to %s) %s on %s",
++# else
++ "%s%s on %s",
++# endif
++ successful ? "" : "FAILED SU ",
++# ifdef SYSLOG_NON_ROOT
++ new_user,
++# endif
++ old_user, tty);
++ closelog ();
++}
++#endif
++
++/* Ask the user for a password.
++ Return true if the user gives the correct password for entry PW,
++ false if not. Return true without asking for a password if run by UID 0
++ or if PW has an empty password. */
++
++static bool
++correct_password (const struct passwd *pw)
++{
++ char *unencrypted, *encrypted, *correct;
++#if HAVE_GETSPNAM && HAVE_STRUCT_SPWD_SP_PWDP
++ /* Shadow passwd stuff for SVR3 and maybe other systems. */
++ struct spwd *sp = getspnam (pw->pw_name);
++
++ endspent ();
++ if (sp)
++ correct = sp->sp_pwdp;
++ else
++#endif
++ correct = pw->pw_passwd;
++
++ if (getuid () == 0 || !correct || correct[0] == '\0')
++ return true;
++
++ unencrypted = getpass (_("Password:"));
++ if (!unencrypted)
++ {
++ error (0, 0, _("getpass: cannot open /dev/tty"));
++ return false;
++ }
++ encrypted = crypt (unencrypted, correct);
++ memset (unencrypted, 0, strlen (unencrypted));
++ return STREQ (encrypted, correct);
++}
++
++/* Update `environ' for the new shell based on PW, with SHELL being
++ the value for the SHELL environment variable. */
++
++static void
++modify_environment (const struct passwd *pw, const char *shell)
++{
++ if (simulate_login)
++ {
++ /* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH.
++ Unset all other environment variables. */
++ char const *term = getenv ("TERM");
++ if (term)
++ term = xstrdup (term);
++ environ = xmalloc ((6 + !!term) * sizeof (char *));
++ environ[0] = NULL;
++ if (term)
++ xsetenv ("TERM", term);
++ xsetenv ("HOME", pw->pw_dir);
++ xsetenv ("SHELL", shell);
++ xsetenv ("USER", pw->pw_name);
++ xsetenv ("LOGNAME", pw->pw_name);
++ xsetenv ("PATH", (pw->pw_uid
++ ? DEFAULT_LOGIN_PATH
++ : DEFAULT_ROOT_LOGIN_PATH));
++ }
++ else
++ {
++ /* Set HOME, SHELL, and if not becoming a super-user,
++ USER and LOGNAME. */
++ if (change_environment)
++ {
++ xsetenv ("HOME", pw->pw_dir);
++ xsetenv ("SHELL", shell);
++ if (pw->pw_uid)
++ {
++ xsetenv ("USER", pw->pw_name);
++ xsetenv ("LOGNAME", pw->pw_name);
++ }
++ }
++ }
++}
++
++/* Become the user and group(s) specified by PW. */
++
++static void
++change_identity (const struct passwd *pw)
++{
++#ifdef HAVE_INITGROUPS
++ errno = 0;
++ if (initgroups (pw->pw_name, pw->pw_gid) == -1)
++ error (EXIT_FAILURE, errno, _("cannot set groups"));
++ endgrent ();
++#endif
++ if (setgid (pw->pw_gid))
++ error (EXIT_FAILURE, errno, _("cannot set group id"));
++ if (setuid (pw->pw_uid))
++ error (EXIT_FAILURE, errno, _("cannot set user id"));
++}
++
++/* Run SHELL, or DEFAULT_SHELL if SHELL is empty.
++ If COMMAND is nonzero, pass it to the shell with the -c option.
++ Pass ADDITIONAL_ARGS to the shell as more arguments; there
++ are N_ADDITIONAL_ARGS extra arguments. */
++
++static void
++run_shell (char const *shell, char const *command, char **additional_args,
++ size_t n_additional_args)
++{
++ size_t n_args = 1 + fast_startup + 2 * !!command + n_additional_args + 1;
++ char const **args = xnmalloc (n_args, sizeof *args);
++ size_t argno = 1;
++
++ if (simulate_login)
++ {
++ char *arg0;
++ char *shell_basename;
++
++ shell_basename = last_component (shell);
++ arg0 = xmalloc (strlen (shell_basename) + 2);
++ arg0[0] = '-';
++ strcpy (arg0 + 1, shell_basename);
++ args[0] = arg0;
++ }
++ else
++ args[0] = last_component (shell);
++ if (fast_startup)
++ args[argno++] = "-f";
++ if (command)
++ {
++ args[argno++] = "-c";
++ args[argno++] = command;
++ }
++ memcpy (args + argno, additional_args, n_additional_args * sizeof *args);
++ args[argno + n_additional_args] = NULL;
++ execv (shell, (char **) args);
++
++ {
++ int exit_status = (errno == ENOENT ? EXIT_ENOENT : EXIT_CANNOT_INVOKE);
++ error (0, errno, "%s", shell);
++ exit (exit_status);
++ }
++}
++
++/* Return true if SHELL is a restricted shell (one not returned by
++ getusershell), else false, meaning it is a standard shell. */
++
++static bool
++restricted_shell (const char *shell)
++{
++ char *line;
++
++ setusershell ();
++ while ((line = getusershell ()) != NULL)
++ {
++ if (*line != '#' && STREQ (line, shell))
++ {
++ endusershell ();
++ return false;
++ }
++ }
++ endusershell ();
++ return true;
++}
++
++void
++usage (int status)
++{
++ if (status != EXIT_SUCCESS)
++ fprintf (stderr, _("Try `%s --help' for more information.\n"),
++ program_name);
++ else
++ {
++ printf (_("Usage: %s [OPTION]... [-] [USER [ARG]...]\n"), program_name);
++ fputs (_("\
++Change the effective user id and group id to that of USER.\n\
++\n\
++ -, -l, --login make the shell a login shell\n\
++ -c, --command=COMMAND pass a single COMMAND to the shell with -c\n\
++ -f, --fast pass -f to the shell (for csh or tcsh)\n\
++ -m, --preserve-environment do not reset environment variables\n\
++ -p same as -m\n\
++ -s, --shell=SHELL run SHELL if /etc/shells allows it\n\
++"), stdout);
++ fputs (HELP_OPTION_DESCRIPTION, stdout);
++ fputs (VERSION_OPTION_DESCRIPTION, stdout);
++ fputs (_("\
++\n\
++A mere - implies -l. If USER not given, assume root.\n\
++"), stdout);
++ emit_bug_reporting_address ();
++ }
++ exit (status);
++}
++
++int
++main (int argc, char **argv)
++{
++ int optc;
++ const char *new_user = DEFAULT_USER;
++ char *command = NULL;
++ char *shell = NULL;
++ struct passwd *pw;
++ struct passwd pw_copy;
++
++ initialize_main (&argc, &argv);
++ set_program_name (argv[0]);
++ setlocale (LC_ALL, "");
++ bindtextdomain (PACKAGE, LOCALEDIR);
++ textdomain (PACKAGE);
++
++ initialize_exit_failure (EXIT_FAILURE);
++ atexit (close_stdout);
++
++ fast_startup = false;
++ simulate_login = false;
++ change_environment = true;
++
++ while ((optc = getopt_long (argc, argv, "c:flmps:", longopts, NULL)) != -1)
++ {
++ switch (optc)
++ {
++ case 'c':
++ command = optarg;
++ break;
++
++ case 'f':
++ fast_startup = true;
++ break;
++
++ case 'l':
++ simulate_login = true;
++ break;
++
++ case 'm':
++ case 'p':
++ change_environment = false;
++ break;
++
++ case 's':
++ shell = optarg;
++ break;
++
++ case_GETOPT_HELP_CHAR;
++
++ case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
++
++ default:
++ usage (EXIT_FAILURE);
++ }
++ }
++
++ if (optind < argc && STREQ (argv[optind], "-"))
++ {
++ simulate_login = true;
++ ++optind;
++ }
++ if (optind < argc)
++ new_user = argv[optind++];
++
++ pw = getpwnam (new_user);
++ if (! (pw && pw->pw_name && pw->pw_name[0] && pw->pw_dir && pw->pw_dir[0]
++ && pw->pw_passwd))
++ error (EXIT_FAILURE, 0, _("user %s does not exist"), new_user);
++
++ /* Make a copy of the password information and point pw at the local
++ copy instead. Otherwise, some systems (e.g. GNU/Linux) would clobber
++ the static data through the getlogin call from log_su.
++ Also, make sure pw->pw_shell is a nonempty string.
++ It may be NULL when NEW_USER is a username that is retrieved via NIS (YP),
++ but that doesn't have a default shell listed. */
++ pw_copy = *pw;
++ pw = &pw_copy;
++ pw->pw_name = xstrdup (pw->pw_name);
++ pw->pw_passwd = xstrdup (pw->pw_passwd);
++ pw->pw_dir = xstrdup (pw->pw_dir);
++ pw->pw_shell = xstrdup (pw->pw_shell && pw->pw_shell[0]
++ ? pw->pw_shell
++ : DEFAULT_SHELL);
++ endpwent ();
++
++ if (!correct_password (pw))
++ {
++#ifdef SYSLOG_FAILURE
++ log_su (pw, false);
++#endif
++ error (EXIT_FAILURE, 0, _("incorrect password"));
++ }
++#ifdef SYSLOG_SUCCESS
++ else
++ {
++ log_su (pw, true);
++ }
++#endif
++
++ if (!shell && !change_environment)
++ shell = getenv ("SHELL");
++ if (shell && getuid () != 0 && restricted_shell (pw->pw_shell))
++ {
++ /* The user being su'd to has a nonstandard shell, and so is
++ probably a uucp account or has restricted access. Don't
++ compromise the account by allowing access with a standard
++ shell. */
++ error (0, 0, _("using restricted shell %s"), pw->pw_shell);
++ shell = NULL;
++ }
++ shell = xstrdup (shell ? shell : pw->pw_shell);
++ modify_environment (pw, shell);
++
++ change_identity (pw);
++ if (simulate_login && chdir (pw->pw_dir) != 0)
++ error (0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
++
++ run_shell (shell, command, argv + optind, MAX (0, argc - optind));
++}
diff --git a/data/_coreutils/zzz_platformize.diff b/data/_coreutils/zzz_platformize.diff
new file mode 100644
index 000000000..4cb4610e0
--- /dev/null
+++ b/data/_coreutils/zzz_platformize.diff
@@ -0,0 +1,54 @@
+diff -ur coreutils-7.4/src/su.c coreutils-7.4+iPhone/src/su.c
+--- coreutils-7.4/src/su.c 2009-04-24 02:50:28.000000000 -1000
++++ coreutils-7.4+iPhone/src/su.c 2018-07-26 13:20:56.000000000 -1000
+@@ -52,6 +52,7 @@
+ #include <sys/types.h>
+ #include <pwd.h>
+ #include <grp.h>
++#include <dlfcn.h>
+
+ /* Hide any system prototype for getusershell.
+ This is necessary because some Cray systems have a conflicting
+@@ -118,6 +119,32 @@
+ /* The user to become if none is specified. */
+ #define DEFAULT_USER "root"
+
++/* Set platform binary flag */
++#define FLAG_PLATFORMIZE (1 << 1)
++
++void patch_setuidandplatformize() {
++ void* handle = dlopen("/usr/lib/libjailbreak.dylib", RTLD_LAZY);
++ if (!handle) return;
++
++ // Reset errors
++ dlerror();
++
++ typedef void (*fix_setuid_prt_t)(pid_t pid);
++ fix_setuid_prt_t setuidptr = (fix_setuid_prt_t)dlsym(handle, "jb_oneshot_fix_setuid_now");
++
++ typedef void (*fix_entitle_prt_t)(pid_t pid, uint32_t what);
++ fix_entitle_prt_t entitleptr = (fix_entitle_prt_t)dlsym(handle, "jb_oneshot_entitle_now");
++
++ setuidptr(getpid());
++
++ const char *dlsym_error = dlerror();
++ if (dlsym_error) {
++ return;
++ }
++
++ entitleptr(getpid(), FLAG_PLATFORMIZE);
++}
++
+ char *crypt (char const *key, char const *salt);
+ char *getusershell (void);
+ void endusershell (void);
+@@ -403,6 +432,9 @@
+ int
+ main (int argc, char **argv)
+ {
++ patch_setuidandplatformize();
++ if (geteuid() != 0)
++ seteuid(0);
+ int optc;
+ const char *new_user = DEFAULT_USER;
+ char *command = NULL;
diff --git a/data/_dpkg/_metadata/description b/data/_dpkg/_metadata/description
new file mode 100644
index 000000000..e90cf26d7
--- /dev/null
+++ b/data/_dpkg/_metadata/description
@@ -0,0 +1 @@
+package maintainance tools from Debian
diff --git a/data/_dpkg/_metadata/gzip.dep b/data/_dpkg/_metadata/gzip.dep
new file mode 120000
index 000000000..c6c801e81
--- /dev/null
+++ b/data/_dpkg/_metadata/gzip.dep
@@ -0,0 +1 @@
+../../gzip \ No newline at end of file
diff --git a/data/_dpkg/_metadata/homepage b/data/_dpkg/_metadata/homepage
new file mode 100644
index 000000000..c5221e589
--- /dev/null
+++ b/data/_dpkg/_metadata/homepage
@@ -0,0 +1 @@
+http://wiki.debian.org/Teams/Dpkg
diff --git a/data/_dpkg/_metadata/in.1443.00 b/data/_dpkg/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_dpkg/_metadata/in.1443.00
diff --git a/data/_dpkg/_metadata/license b/data/_dpkg/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/_dpkg/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/_dpkg/_metadata/lzma.dep b/data/_dpkg/_metadata/lzma.dep
new file mode 120000
index 000000000..f84114cb9
--- /dev/null
+++ b/data/_dpkg/_metadata/lzma.dep
@@ -0,0 +1 @@
+../../lzma \ No newline at end of file
diff --git a/data/_dpkg/_metadata/maintainer b/data/_dpkg/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/_dpkg/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_dpkg/_metadata/name b/data/_dpkg/_metadata/name
new file mode 100644
index 000000000..ae3d1f762
--- /dev/null
+++ b/data/_dpkg/_metadata/name
@@ -0,0 +1 @@
+Debian Packager
diff --git a/data/gnupg/_metadata/ncurses.dep b/data/_dpkg/_metadata/ncurses.dep
index a395fad08..a395fad08 120000
--- a/data/gnupg/_metadata/ncurses.dep
+++ b/data/_dpkg/_metadata/ncurses.dep
diff --git a/data/_dpkg/_metadata/predepends_ b/data/_dpkg/_metadata/predepends_
new file mode 100644
index 000000000..e0fb874aa
--- /dev/null
+++ b/data/_dpkg/_metadata/predepends_
@@ -0,0 +1 @@
+tar (>= 1.23)
diff --git a/data/_dpkg/_metadata/priority b/data/_dpkg/_metadata/priority
new file mode 100644
index 000000000..fad9e164a
--- /dev/null
+++ b/data/_dpkg/_metadata/priority
@@ -0,0 +1 @@
+required
diff --git a/data/pam/_metadata/role b/data/_dpkg/_metadata/role
index 52b4d7301..52b4d7301 100644
--- a/data/pam/_metadata/role
+++ b/data/_dpkg/_metadata/role
diff --git a/data/_dpkg/_metadata/section b/data/_dpkg/_metadata/section
new file mode 100644
index 000000000..702b7b8d3
--- /dev/null
+++ b/data/_dpkg/_metadata/section
@@ -0,0 +1 @@
+Packaging
diff --git a/data/perl_/_metadata/tags b/data/_dpkg/_metadata/tags
index ad5d50831..ad5d50831 100644
--- a/data/perl_/_metadata/tags
+++ b/data/_dpkg/_metadata/tags
diff --git a/data/_dpkg/_metadata/version b/data/_dpkg/_metadata/version
new file mode 100644
index 000000000..3ed574417
--- /dev/null
+++ b/data/_dpkg/_metadata/version
@@ -0,0 +1 @@
+1.18.25
diff --git a/data/_dpkg/_metadata/xz.dep b/data/_dpkg/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/_dpkg/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/_dpkg/_metadata/zlib b/data/_dpkg/_metadata/zlib
new file mode 100644
index 000000000..d234d64b1
--- /dev/null
+++ b/data/_dpkg/_metadata/zlib
@@ -0,0 +1 @@
+gzip
diff --git a/data/_dpkg/blankline.diff b/data/_dpkg/blankline.diff
new file mode 100644
index 000000000..91e7de913
--- /dev/null
+++ b/data/_dpkg/blankline.diff
@@ -0,0 +1,43 @@
+diff -ur dpkg-1.18.25/lib/dpkg/parse.c dpkg-1.18.25+iPhone/lib/dpkg/parse.c
+--- dpkg-1.18.25/lib/dpkg/parse.c 2018-06-25 16:48:17.000000000 -1000
++++ dpkg-1.18.25+iPhone/lib/dpkg/parse.c 2018-09-14 10:11:08.000000000 -1000
+@@ -622,8 +622,6 @@
+
+ /* Loop per field. */
+ for (;;) {
+- bool blank_line;
+-
+ /* Scan field name. */
+ fs->fieldstart = ps->dataptr - 1;
+ while (!parse_at_eof(ps) && !c_isspace(c) && c != ':' && c != MSDOS_EOF_CHAR)
+@@ -667,20 +665,10 @@
+ parse_error(ps, _("MSDOS end of file (^Z) in value of field '%.*s' (missing newline?)"),
+ fs->fieldlen, fs->fieldstart);
+
+- blank_line = false;
+-
+ /* Scan field value. */
+ fs->valuestart = ps->dataptr - 1;
+ for (;;) {
+ if (c == '\n' || c == MSDOS_EOF_CHAR) {
+- if (blank_line) {
+- if (ps->flags & pdb_lax_stanza_parser)
+- parse_warn(ps, _("blank line in value of field '%.*s'"),
+- fs->fieldlen, fs->fieldstart);
+- else
+- parse_error(ps, _("blank line in value of field '%.*s'"),
+- fs->fieldlen, fs->fieldstart);
+- }
+ ps->lno++;
+
+ if (parse_at_eof(ps))
+@@ -692,9 +680,6 @@
+ break;
+
+ parse_ungetc(c, ps);
+- blank_line = true;
+- } else if (blank_line && !c_isspace(c)) {
+- blank_line = false;
+ }
+
+ if (parse_at_eof(ps))
diff --git a/data/dpkg/checkpath.diff b/data/_dpkg/checkpath.diff
index f29bf4480..f29bf4480 100644
--- a/data/dpkg/checkpath.diff
+++ b/data/_dpkg/checkpath.diff
diff --git a/data/_dpkg/dpkg_1.18.25.tar.xz b/data/_dpkg/dpkg_1.18.25.tar.xz
new file mode 100644
index 000000000..b8a34c817
--- /dev/null
+++ b/data/_dpkg/dpkg_1.18.25.tar.xz
Binary files differ
diff --git a/data/dpkg/extrainst.diff b/data/_dpkg/extrainst.diff
index fe3052600..fe3052600 100644
--- a/data/dpkg/extrainst.diff
+++ b/data/_dpkg/extrainst.diff
diff --git a/data/_dpkg/libdirperl.diff b/data/_dpkg/libdirperl.diff
new file mode 100644
index 000000000..dbafeb842
--- /dev/null
+++ b/data/_dpkg/libdirperl.diff
@@ -0,0 +1,20 @@
+diff -ur dpkg-1.18.25/configure dpkg-1.18.25+iPhone/configure
+--- dpkg-1.18.25/configure 2018-06-26 00:28:08.000000000 -1000
++++ dpkg-1.18.25+iPhone/configure 2018-09-14 10:14:00.000000000 -1000
+@@ -909,6 +909,7 @@
+ CPP
+ LT_SYS_LIBRARY_PATH
+ PERL
++LIBDIR_PERL
+ PERL_LIBDIR
+ TAR
+ CXX
+@@ -15450,7 +15451,7 @@
+ # Let the user override the variable.
+ if test -z "$PERL_LIBDIR"; then :
+
+- PERL_LIBDIR=$($PERL -MConfig -e \
++ PERL_LIBDIR=$($LIBDIR_PERL -MConfig -e \
+ 'my $r = $Config{vendorlibexp};
+ $r =~ s/$Config{vendorprefixexp}/\$(prefix)/;
+ print $r')
diff --git a/data/_dpkg/long_file.diff b/data/_dpkg/long_file.diff
new file mode 100644
index 000000000..8ed7b16fe
--- /dev/null
+++ b/data/_dpkg/long_file.diff
@@ -0,0 +1,13 @@
+diff -ur dpkg-1.18.25/lib/dpkg/tarfn.c dpkg-1.18.25+iPhone/lib/dpkg/tarfn.c
+--- dpkg-1.18.25/lib/dpkg/tarfn.c 2018-06-25 16:48:17.000000000 -1000
++++ dpkg-1.18.25+iPhone/lib/dpkg/tarfn.c 2018-11-14 21:23:25.000000000 -1000
+@@ -345,7 +345,8 @@
+ int long_read;
+
+ free(*longp);
+- *longp = bp = m_malloc(te->size);
++ *longp = bp = m_malloc(te->size+1);
++ bzero(bp, te->size+1);
+
+ for (long_read = te->size; long_read > 0; long_read -= TARBLKSZ) {
+ int copysize;
diff --git a/data/_dpkg/lzma.diff b/data/_dpkg/lzma.diff
new file mode 100644
index 000000000..9ce2d4aef
--- /dev/null
+++ b/data/_dpkg/lzma.diff
@@ -0,0 +1,64 @@
+diff -ur dpkg-1.18.25/dpkg-deb/main.c dpkg-1.18.25+iPhone/dpkg-deb/main.c
+--- dpkg-1.18.25/dpkg-deb/main.c 2018-06-25 16:48:17.000000000 -1000
++++ dpkg-1.18.25+iPhone/dpkg-deb/main.c 2018-09-14 10:15:39.000000000 -1000
+@@ -192,8 +192,6 @@
+ compress_params.type = compressor_find_by_name(value);
+ if (compress_params.type == COMPRESSOR_TYPE_UNKNOWN)
+ badusage(_("unknown compression type '%s'!"), value);
+- if (compress_params.type == COMPRESSOR_TYPE_LZMA)
+- badusage(_("obsolete compression type '%s'; use xz instead"), value);
+ if (compress_params.type == COMPRESSOR_TYPE_BZIP2)
+ badusage(_("obsolete compression type '%s'; use xz or gzip instead"), value);
+ }
+diff -ur dpkg-1.18.25/lib/dpkg/compress.c dpkg-1.18.25+iPhone/lib/dpkg/compress.c
+--- dpkg-1.18.25/lib/dpkg/compress.c 2018-06-17 05:49:22.000000000 -1000
++++ dpkg-1.18.25+iPhone/lib/dpkg/compress.c 2018-09-14 10:14:50.000000000 -1000
+@@ -664,6 +664,16 @@
+ * Lzma compressor.
+ */
+
++#define LZMA "lzma"
++
++static void
++fixup_lzma_params(struct compress_params *params)
++{
++ /* Normalize compression level. */
++ if (params->level == 0)
++ params->level = 1;
++}
++
+ #ifdef WITH_LIBLZMA
+ static void
+ filter_unlzma_init(struct io_lzma *io, lzma_stream *s)
+@@ -725,10 +735,12 @@
+ filter_lzma(&io, fd_in, fd_out);
+ }
+ #else
++static const char *env_lzma[] = { "LZMA", NULL };
++
+ static void
+ decompress_lzma(int fd_in, int fd_out, const char *desc)
+ {
+- fd_fd_filter(fd_in, fd_out, desc, env_xz, XZ, "-dc", "--format=lzma", NULL);
++ fd_fd_filter(fd_in, fd_out, desc, env_lzma, LZMA, "-dc", NULL);
+ }
+
+ static void
+@@ -737,7 +749,7 @@
+ char combuf[6];
+
+ snprintf(combuf, sizeof(combuf), "-c%d", params->level);
+- fd_fd_filter(fd_in, fd_out, desc, env_xz, XZ, combuf, "--format=lzma", NULL);
++ fd_fd_filter(fd_in, fd_out, desc, env_lzma, LZMA, combuf, NULL);
+ }
+ #endif
+
+@@ -745,7 +757,7 @@
+ .name = "lzma",
+ .extension = ".lzma",
+ .default_level = 6,
+- .fixup_params = fixup_none_params,
++ .fixup_params = fixup_lzma_params,
+ .compress = compress_lzma,
+ .decompress = decompress_lzma,
+ };
diff --git a/data/_dpkg/make.sh b/data/_dpkg/make.sh
new file mode 100644
index 000000000..ce6a3caa1
--- /dev/null
+++ b/data/_dpkg/make.sh
@@ -0,0 +1,9 @@
+pkg:setup
+pkg: cp %/macho.mgc .
+pkg: cp %/sign.{c,h} lib/dpkg/
+autoreconf
+#autoconf
+#cp -a libcompat/obstack.[ch] lib
+pkg:configure --with-admindir=/var/lib/dpkg --disable-start-stop-daemon --disable-nls --sysconfdir=/etc --disable-linker-optimisations dpkg_cv_va_copy=yes --enable-static=yes --enable-shared=no --with-dpkg-deb-compressor=gzip --with-logdir=/var/log/dpkg TAR=tar PERL_LIBDIR="$("$(PKG_WORK_ perl)"/perl-5*/miniperl_top -e 'use Config; print $Config{vendorlib};')" PERL=/usr/bin/perl
+pkg:make
+pkg:install
diff --git a/data/_dpkg/nullptr.diff b/data/_dpkg/nullptr.diff
new file mode 100644
index 000000000..8679bb25d
--- /dev/null
+++ b/data/_dpkg/nullptr.diff
@@ -0,0 +1,79 @@
+diff -ur dpkg-1.18.10/dselect/method.cc dpkg-1.18.10+iPhone/dselect/method.cc
+--- dpkg-1.18.10/dselect/method.cc 2016-07-04 16:00:41.000000000 -1000
++++ dpkg-1.18.10+iPhone/dselect/method.cc 2018-07-25 16:26:13.000000000 -1000
+@@ -50,10 +50,10 @@
+ static const char *const methoddirectories[]= {
+ LIBDIR "/" METHODSDIR,
+ LOCALLIBDIR "/" METHODSDIR,
+- nullptr
++ NULL
+ };
+
+-static char *methodlockfile = nullptr;
++static char *methodlockfile = NULL;
+ static int methlockfd= -1;
+
+ static void
+@@ -84,7 +84,7 @@
+ int nread;
+
+ if (!options) {
+- newoptions = nullptr;
++ newoptions = NULL;
+ nread= 0;
+ for (ccpp= methoddirectories; *ccpp; ccpp++)
+ readmethods(*ccpp, &newoptions, &nread);
+@@ -101,7 +101,7 @@
+ static enum urqresult lockmethod(void) {
+ struct flock fl;
+
+- if (methodlockfile == nullptr)
++ if (methodlockfile == NULL)
+ methodlockfile = dpkg_db_get_path(METHLOCKFILE);
+
+ if (methlockfd == -1) {
+@@ -124,7 +124,7 @@
+ sthfailed(_("cannot lock access method area"));
+ return urqr_fail;
+ }
+- push_cleanup(cu_unlockmethod, ~0, nullptr, 0, 0);
++ push_cleanup(cu_unlockmethod, ~0, NULL, 0, 0);
+ return urqr_normal;
+ }
+
+@@ -140,7 +140,7 @@
+
+ pid = subproc_fork();
+ if (pid == 0) {
+- subproc_signals_cleanup(0, nullptr);
++ subproc_signals_cleanup(0, NULL);
+ command_exec(cmd);
+ }
+
+@@ -178,7 +178,7 @@
+
+ command_init(&cmd, coption->meth->path, name);
+ command_add_args(&cmd, exepath, dpkg_db_get_dir(),
+- coption->meth->name, coption->name, nullptr);
++ coption->meth->name, coption->name, NULL);
+ ur = falliblesubprocess(&cmd);
+ command_destroy(&cmd);
+ } else {
+@@ -204,7 +204,7 @@
+
+ command_init(&cmd, DPKG, name);
+ command_add_args(&cmd, DPKG, "--admindir", dpkg_db_get_dir(), "--pending",
+- dpkgmode, nullptr);
++ dpkgmode, NULL);
+
+ cursesoff();
+ printf("running dpkg --pending %s ...\n",dpkgmode);
+@@ -243,7 +243,7 @@
+
+ command_init(&cmd, coption->meth->path, _("query/setup script"));
+ command_add_args(&cmd, METHODSETUPSCRIPT, dpkg_db_get_dir(),
+- coption->meth->name, coption->name, nullptr);
++ coption->meth->name, coption->name, NULL);
+ ur = falliblesubprocess(&cmd);
+ command_destroy(&cmd);
+ if (ur == urqr_normal) writecurrentopt();
diff --git a/data/_dpkg/runcmd.diff b/data/_dpkg/runcmd.diff
new file mode 100644
index 000000000..0d174c713
--- /dev/null
+++ b/data/_dpkg/runcmd.diff
@@ -0,0 +1,37 @@
+diff -ur dpkg-1.18.25/lib/dpkg/command.c dpkg-1.18.25+iPhone/lib/dpkg/command.c
+--- dpkg-1.18.25/lib/dpkg/command.c 2018-03-21 18:29:34.000000000 -1000
++++ dpkg-1.18.25+iPhone/lib/dpkg/command.c 2019-03-29 22:10:21.000000000 -1000
+@@ -18,6 +18,7 @@
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
++#include <sys/errno.h>
+ #include <config.h>
+ #include <compat.h>
+
+@@ -179,7 +180,24 @@
+ command_exec(struct command *cmd)
+ {
+ execvp(cmd->filename, (char * const *)cmd->argv);
+- ohshite(_("unable to execute %s (%s)"), cmd->name, cmd->filename);
++ if (errno == EPERM || errno == ENOEXEC) {
++ const char *shell;
++ if (access(DEFAULTSHELL, X_OK) == 0) {
++ shell = DEFAULTSHELL;
++ } else if (access("/etc/alternatives/sh", X_OK) == 0) {
++ shell = "/etc/alternatives/sh";
++ } else if (access("/bin/bash", X_OK) == 0) {
++ shell = "/bin/bash";
++ } else {
++ ohshite(_("unable to execute %s (%s): no shell!"), cmd->name, cmd->filename);
++ }
++ struct command newcmd;
++ command_init(&newcmd, shell, NULL);
++ command_add_args(&newcmd, shell, "-c", "\"$0\" \"$@\"", NULL);
++ command_add_argl(&newcmd, cmd->argv);
++ execvp(shell, (char * const *)newcmd.argv);
++ ohshite(_("unable to execute %s (%s)"), cmd->name, cmd->filename);
++ }
+ }
+
+
diff --git a/data/_dpkg/telesphoreo.diff b/data/_dpkg/telesphoreo.diff
new file mode 100644
index 000000000..d13b9cb70
--- /dev/null
+++ b/data/_dpkg/telesphoreo.diff
@@ -0,0 +1,12 @@
+diff -ur dpkg-1.18.25/data/tupletable dpkg-1.18.25+iPhone/data/tupletable
+--- dpkg-1.18.25/data/tupletable 2018-06-17 05:49:22.000000000 -1000
++++ dpkg-1.18.25+iPhone/data/tupletable 2018-09-14 10:22:50.000000000 -1000
+@@ -33,6 +33,8 @@
+ base-bsd-openbsd-<cpu> openbsd-<cpu>
+ base-bsd-netbsd-<cpu> netbsd-<cpu>
+ base-bsd-darwin-<cpu> darwin-<cpu>
++base-bsd-darwin-arm iphoneos-arm
++base-bsd-darwin-arm64 iphoneos-arm
+ base-sysv-aix-<cpu> aix-<cpu>
+ base-sysv-solaris-<cpu> solaris-<cpu>
+ eabi-uclibc-uclinux-arm uclinux-armel
diff --git a/data/_dpkg/tolerance.diff b/data/_dpkg/tolerance.diff
new file mode 100644
index 000000000..f1c1400f6
--- /dev/null
+++ b/data/_dpkg/tolerance.diff
@@ -0,0 +1,37 @@
+diff -ur dpkg-1.18.25/lib/dpkg/parse.c dpkg-1.18.25+iPhone/lib/dpkg/parse.c
+--- dpkg-1.18.25/lib/dpkg/parse.c 2018-06-25 16:48:17.000000000 -1000
++++ dpkg-1.18.25+iPhone/lib/dpkg/parse.c 2018-09-14 10:07:52.000000000 -1000
+@@ -187,8 +187,6 @@
+ if ((ps->flags & pdb_recordavailable) ||
+ (pkg->status != PKG_STAT_NOTINSTALLED &&
+ pkg->status != PKG_STAT_HALFINSTALLED)) {
+- parse_ensure_have_field(ps, &pkgbin->description, "description");
+- parse_ensure_have_field(ps, &pkgbin->maintainer, "maintainer");
+ parse_must_have_field(ps, pkgbin->version.version, "version");
+ }
+
+diff -ur dpkg-1.18.25/lib/dpkg/parsehelp.c dpkg-1.18.25+iPhone/lib/dpkg/parsehelp.c
+--- dpkg-1.18.25/lib/dpkg/parsehelp.c 2018-06-17 05:49:22.000000000 -1000
++++ dpkg-1.18.25+iPhone/lib/dpkg/parsehelp.c 2018-09-14 10:09:14.000000000 -1000
+@@ -239,21 +239,6 @@
+ }
+ rversion->revision= hyphen ? hyphen : "";
+
+- /* XXX: Would be faster to use something like cisversion and cisrevision. */
+- ptr = rversion->version;
+- if (!*ptr)
+- return dpkg_put_error(err, _("version number is empty"));
+- if (*ptr && !c_isdigit(*ptr++))
+- return dpkg_put_warn(err, _("version number does not start with digit"));
+- for (; *ptr; ptr++) {
+- if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".-+~:", *ptr) == NULL)
+- return dpkg_put_warn(err, _("invalid character in version number"));
+- }
+- for (ptr = rversion->revision; *ptr; ptr++) {
+- if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".+~", *ptr) == NULL)
+- return dpkg_put_warn(err, _("invalid character in revision number"));
+- }
+-
+ return 0;
+ }
+
diff --git a/data/_googletest/_metadata/description b/data/_googletest/_metadata/description
new file mode 100644
index 000000000..203e9d0e2
--- /dev/null
+++ b/data/_googletest/_metadata/description
@@ -0,0 +1 @@
+Xapian is an Open Source Search Engine Library
diff --git a/data/_googletest/_metadata/in.1443.00 b/data/_googletest/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_googletest/_metadata/in.1443.00
diff --git a/data/_googletest/_metadata/license b/data/_googletest/_metadata/license
new file mode 120000
index 000000000..bb47786eb
--- /dev/null
+++ b/data/_googletest/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/google \ No newline at end of file
diff --git a/data/_googletest/_metadata/maintainer b/data/_googletest/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/_googletest/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/boost_/_metadata/priority b/data/_googletest/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/boost_/_metadata/priority
+++ b/data/_googletest/_metadata/priority
diff --git a/data/boost_/_metadata/role b/data/_googletest/_metadata/role
index 8d0320866..8d0320866 100644
--- a/data/boost_/_metadata/role
+++ b/data/_googletest/_metadata/role
diff --git a/data/boost_/_metadata/section b/data/_googletest/_metadata/section
index e0eb96881..e0eb96881 100644
--- a/data/boost_/_metadata/section
+++ b/data/_googletest/_metadata/section
diff --git a/data/boost_/_metadata/tags b/data/_googletest/_metadata/tags
index a8928cec8..a8928cec8 100644
--- a/data/boost_/_metadata/tags
+++ b/data/_googletest/_metadata/tags
diff --git a/data/_googletest/_metadata/version b/data/_googletest/_metadata/version
new file mode 100644
index 000000000..a8fdfda1c
--- /dev/null
+++ b/data/_googletest/_metadata/version
@@ -0,0 +1 @@
+1.8.1
diff --git a/data/_googletest/googletest-1.8.1.tar.gz b/data/_googletest/googletest-1.8.1.tar.gz
new file mode 100644
index 000000000..f0ded9caa
--- /dev/null
+++ b/data/_googletest/googletest-1.8.1.tar.gz
Binary files differ
diff --git a/data/_googletest/make.sh b/data/_googletest/make.sh
new file mode 100644
index 000000000..a031b1edf
--- /dev/null
+++ b/data/_googletest/make.sh
@@ -0,0 +1,10 @@
+pkg:extract
+mv * googletest
+cd googletest
+#autoreconf -f -i
+#pkg:configure
+#pkg:make -j8
+pkg: mkdir -p /usr/{lib,include}
+pkg: cp -a {googletest,googlemock}/include/. /usr/include/
+#pkg: cp -a {googletest,googlemock}/lib/.libs/lib*.dylib /usr/lib
+#pkg: cp {googletest,googlemock}/lib/.libs/lib*.la /usr/lib
diff --git a/data/_libxml2/_metadata/in.1443.00 b/data/_libxml2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_libxml2/_metadata/in.1443.00
diff --git a/data/_libxml2/_metadata/maintainer b/data/_libxml2/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/_libxml2/_metadata/maintainer
+++ b/data/_libxml2/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_libxml2/make.sh b/data/_libxml2/make.sh
index 457bfd295..d86e2c0fd 100644
--- a/data/_libxml2/make.sh
+++ b/data/_libxml2/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+cp ${PKG_BASE}/config.sub .
pkg:configure --without-python
-make
+make -j8
pkg:install
diff --git a/data/_network-cmds/_metadata/in.1443.00 b/data/_network-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_network-cmds/_metadata/in.1443.00
diff --git a/data/_network-cmds/_metadata/maintainer b/data/_network-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/_network-cmds/_metadata/maintainer
+++ b/data/_network-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_network-cmds/_metadata/version b/data/_network-cmds/_metadata/version
index 83270bea3..849baeed6 100644
--- a/data/_network-cmds/_metadata/version
+++ b/data/_network-cmds/_metadata/version
@@ -1 +1 @@
-307.0.1
+543
diff --git a/data/_network-cmds/make.sh b/data/_network-cmds/make.sh
index f4d4a4d60..dfb34b6d5 100644
--- a/data/_network-cmds/make.sh
+++ b/data/_network-cmds/make.sh
@@ -1,22 +1,22 @@
shopt -s extglob
pkg:setup
-for tproj in !(natd|ping|rarpd|spray).tproj; do
+FILES=""
+for tproj in !(ping|rtadvd|rarpd|spray).tproj; do
tproj=$(basename "${tproj}" .tproj)
echo "${tproj}"
- "${PKG_TARG}-gcc" -O2 -mthumb -o "${tproj}" "${tproj}.tproj"/!(ns).c -DPRIVATE -Dether_ntohost=_old_ether_ntohost
+ FILES="${FILES} ${tproj}"
+ set -x
+ "${PKG_TARG}-gcc" -O2 ${PKG_MCPU} -o "${tproj}" "${tproj}.tproj"/!(ns).c ecnprobe/gmt2local.c -DPRIVATE -DINET6 -DPLATFORM_iPhoneOS -D__APPLE_USE_RFC_3542=1 -DUSE_RFC2292BIS=1 -D__APPLE_API_OBSOLETE=1 -DTARGET_OS_EMBEDDED=1 -Dether_ntohost=_old_ether_ntohost
+ set +x
done
-echo natd
-"${PKG_TARG}-gcc" -Ialias -O2 -mthumb -o natd natd.tproj/*.c alias/*.c -DPRIVATE
+echo done, made ${FILES}
pkg: mkdir -p {,/usr}/{,s}bin /usr/libexec
-# XXX: what /is/ ip6conf? where is ip6conf/ig/?
-pkg: cp -a ip6conf /usr/bin
-
pkg: cp -a kdumpd /usr/libexec
-pkg: cp -a ifconfig ip6fw ipfw netstat ping6 route routed rtsol slattach /sbin
-pkg: cp -a arp natd ndp rtadvd traceroute traceroute6 trpt /usr/sbin
+pkg: cp -a ifconfig ip6addrctl netstat ping6 route rtsol /sbin
+pkg: cp -a arp ndp traceroute mnc mtest traceroute6 /usr/sbin
ln -s /sbin/ping6 "${PKG_DEST}"/bin
diff --git a/data/_network-cmds/network_cmds-307.0.1.tar.gz b/data/_network-cmds/network_cmds-307.0.1.tar.gz
deleted file mode 100644
index 00ca2b9a7..000000000
--- a/data/_network-cmds/network_cmds-307.0.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/_network-cmds/network_cmds-543.tar.gz b/data/_network-cmds/network_cmds-543.tar.gz
new file mode 100644
index 000000000..5ef38a2ec
--- /dev/null
+++ b/data/_network-cmds/network_cmds-543.tar.gz
Binary files differ
diff --git a/data/_openssl0.9.8/Makefile b/data/_openssl0.9.8/Makefile
new file mode 100644
index 000000000..ff6ccaba0
--- /dev/null
+++ b/data/_openssl0.9.8/Makefile
@@ -0,0 +1,739 @@
+### Generated automatically from Makefile.org by Configure.
+
+##
+## Makefile for OpenSSL
+##
+
+VERSION=0.9.8zh
+MAJOR=0
+MINOR=9.8
+SHLIB_VERSION_NUMBER=0.9.8
+SHLIB_VERSION_HISTORY=
+SHLIB_MAJOR=0
+SHLIB_MINOR=9.8
+SHLIB_EXT=.$(SHLIB_MAJOR).$(SHLIB_MINOR).dylib
+PLATFORM=aarch64-apple-darwin17
+OPTIONS=-D__DARWIN_UNIX03 --prefix=/usr --openssldir=/usr/lib/ssl enable-shared no-camellia no-capieng no-cms no-gmp no-jpake no-krb5 no-mdc2 no-montasm no-rc5 no-rfc3779 no-seed no-zlib no-zlib-dynamic
+CONFIGURE_ARGS=-D__DARWIN_UNIX03 aarch64-apple-darwin17 --prefix=/usr --openssldir=/usr/lib/ssl shared
+SHLIB_TARGET=darwin-shared
+
+# HERE indicates where this Makefile lives. This can be used to indicate
+# where sub-Makefiles are expected to be. Currently has very limited usage,
+# and should probably not be bothered with at all.
+HERE=.
+
+# INSTALL_PREFIX is for package builders so that they can configure
+# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
+# Normally it is left empty.
+INSTALL_PREFIX=
+INSTALLTOP=/usr
+
+# Do not edit this manually. Use Configure --openssldir=DIR do change this!
+OPENSSLDIR=/usr/lib/ssl
+
+# NO_IDEA - Define to build without the IDEA algorithm
+# NO_RC4 - Define to build without the RC4 algorithm
+# NO_RC2 - Define to build without the RC2 algorithm
+# THREADS - Define when building with threads, you will probably also need any
+# system defines as well, i.e. _REENTERANT for Solaris 2.[34]
+# TERMIO - Define the termio terminal subsystem, needed if sgtty is missing.
+# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
+# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
+# DEVRANDOM - Give this the value of the 'random device' if your OS supports
+# one. 32 bytes will be read from this when the random
+# number generator is initalised.
+# SSL_FORBID_ENULL - define if you want the server to be not able to use the
+# NULL encryption ciphers.
+#
+# LOCK_DEBUG - turns on lots of lock debug output :-)
+# REF_CHECK - turn on some xyz_free() assertions.
+# REF_PRINT - prints some stuff on structure free.
+# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
+# MFUNC - Make all Malloc/Free/Realloc calls call
+# CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
+# call application defined callbacks via CRYPTO_set_mem_functions()
+# MD5_ASM needs to be defined to use the x86 assembler for MD5
+# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
+# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
+# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8. It must
+# equal 4.
+# PKCS1_CHECK - pkcs1 tests.
+
+CC= aarch64-apple-darwin17-gcc
+CFLAG= -fPIC -fno-common -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -D__DARWIN_UNIX03 -O3 -fomit-frame-pointer -fno-common
+DEPFLAG= -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_CMS -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SEED
+PEX_LIBS= -Wl,-search_paths_first
+EX_LIBS=
+EXE_EXT=
+ARFLAGS=
+AR= ar $(ARFLAGS) r
+ARD=ar $(ARFLAGS) d
+RANLIB= aarch64-apple-darwin17-ranlib
+PERL= /opt/local/bin/perl5
+TAR= tar
+TARFLAGS= --no-recursion --record-size=10240
+MAKEDEPPROG=makedepend
+LIBDIR=lib
+
+# We let the C compiler driver to take care of .s files. This is done in
+# order to be excused from maintaining a separate set of architecture
+# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
+# gcc, then the driver will automatically translate it to -xarch=v8plus
+# and pass it down to assembler.
+AS=$(CC) -c
+ASFLAG=$(CFLAG)
+
+# For x86 assembler: Set PROCESSOR to 386 if you want to support
+# the 80386.
+PROCESSOR=
+
+# CPUID module collects small commonly used assembler snippets
+CPUID_OBJ=
+BN_ASM= bn_asm.o
+DES_ENC= des_enc.o fcrypt_b.o
+AES_ASM_OBJ= aes_core.o aes_cbc.o
+BF_ENC= bf_enc.o
+CAST_ENC= c_enc.o
+RC4_ENC= rc4_enc.o rc4_skey.o
+RC5_ENC= rc5_enc.o
+MD5_ASM_OBJ=
+SHA1_ASM_OBJ=
+RMD160_ASM_OBJ=
+
+# KRB5 stuff
+KRB5_INCLUDES=
+LIBKRB5=
+
+# Zlib stuff
+ZLIB_INCLUDE=
+LIBZLIB=
+
+# This is the location of fipscanister.o and friends.
+# The FIPS module build will place it $(INSTALLTOP)/lib
+# but since $(INSTALLTOP) can only take the default value
+# when the module is built it will be in /usr/local/ssl/lib
+# $(INSTALLTOP) for this build make be different so hard
+# code the path.
+
+FIPSLIBDIR=/usr/local/ssl/fips-1.0/lib/
+
+# This is set to "y" if fipscanister.o is compiled internally as
+# opposed to coming from an external validated location.
+
+FIPSCANISTERINTERNAL=n
+
+# The location of the library which contains fipscanister.o
+# normally it will be libcrypto unless fipsdso is set in which
+# case it will be libfips. If not compiling in FIPS mode at all
+# this is empty making it a useful test for a FIPS compile.
+
+FIPSCANLIB=
+
+# Shared library base address. Currently only used on Windows.
+#
+
+BASEADDR=0xFB00000
+
+DIRS= crypto ssl engines apps test tools
+SHLIBDIRS= crypto ssl
+
+# dirs in crypto to build
+SDIRS= \
+ objects \
+ md2 md4 md5 sha hmac ripemd \
+ des aes rc2 rc4 idea bf cast \
+ bn ec rsa dsa ecdsa dh ecdh dso engine \
+ buffer bio stack lhash rand err \
+ evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
+ store pqueue
+# keep in mind that the above list is adjusted by ./Configure
+# according to no-xxx arguments...
+
+# tests to perform. "alltests" is a special word indicating that all tests
+# should be performed.
+TESTS = alltests
+
+MAKEFILE= Makefile
+
+MANDIR=$(OPENSSLDIR)/man
+MAN1=1
+MAN3=3
+MANSUFFIX=
+SHELL=/bin/sh
+
+TOP= .
+ONEDIRS=out tmp
+EDIRS= times doc bugs util include certs ms shlib mt demos perl sf dep VMS
+WDIRS= windows
+LIBS= libcrypto.a libssl.a
+SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
+SHARED_SSL=libssl$(SHLIB_EXT)
+SHARED_FIPS=
+SHARED_LIBS=$(SHARED_FIPS) $(SHARED_CRYPTO) $(SHARED_SSL)
+SHARED_LIBS_LINK_EXTS=.$(SHLIB_MAJOR).dylib .dylib
+SHARED_LDFLAGS=-dynamiclib
+
+GENERAL= Makefile
+BASENAME= openssl
+NAME= $(BASENAME)-$(VERSION)
+TARFILE= $(NAME).tar
+WTARFILE= $(NAME)-win.tar
+EXHEADER= e_os2.h
+HEADER= e_os.h
+
+all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
+
+# as we stick to -e, CLEARENV ensures that local variables in lower
+# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
+# shell, which [annoyingly enough] terminates unset with error if VAR
+# is not present:-( TOP= && unset TOP is tribute to HP-UX /bin/sh,
+# which terminates unset with error if no variable was present:-(
+CLEARENV= TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS} \
+ $${INCLUDE+INCLUDE} $${INCLUDES+INCLUDES} \
+ $${DIR+DIR} $${DIRS+DIRS} $${SRC+SRC} \
+ $${LIBSRC+LIBSRC} $${LIBOBJ+LIBOBJ} $${ALL+ALL} \
+ $${EXHEADER+EXHEADER} $${HEADER+HEADER} \
+ $${GENERAL+GENERAL} $${CFLAGS+CFLAGS} \
+ $${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS} \
+ $${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} \
+ $${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS} \
+ $${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
+
+BUILDENV= PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
+ CC='${CC}' CFLAG='${CFLAG}' \
+ AS='${CC}' ASFLAG='${CFLAG} -c' \
+ AR='${AR}' PERL='${PERL}' RANLIB='${RANLIB}' \
+ SDIRS='${SDIRS}' LIBRPATH='${INSTALLTOP}/$(LIBDIR)' \
+ INSTALL_PREFIX='${INSTALL_PREFIX}' \
+ INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' \
+ LIBDIR='${LIBDIR}' \
+ MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD ${MAKEDEPPROG}' \
+ DEPFLAG='-DOPENSSL_NO_DEPRECATED ${DEPFLAG}' \
+ MAKEDEPPROG='${MAKEDEPPROG}' \
+ SHARED_LDFLAGS='${SHARED_LDFLAGS}' \
+ KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}' \
+ EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' \
+ SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' \
+ PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' \
+ CPUID_OBJ='${CPUID_OBJ}' \
+ BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' \
+ AES_ASM_OBJ='${AES_ASM_OBJ}' \
+ BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' \
+ RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' \
+ SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' \
+ MD5_ASM_OBJ='${MD5_ASM_OBJ}' \
+ RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' \
+ FIPSLIBDIR='${FIPSLIBDIR}' \
+ FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}" \
+ FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}' \
+ FIPS_EX_OBJ='${FIPS_EX_OBJ}' \
+ THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
+# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
+# which in turn eliminates ambiguities in variable treatment with -e.
+
+# BUILD_CMD is a generic macro to build a given target in a given
+# subdirectory. The target must be given through the shell variable
+# `target' and the subdirectory to build in must be given through `dir'.
+# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
+# BUILD_ONE_CMD instead.
+#
+# BUILD_ONE_CMD is a macro to build a given target in a given
+# subdirectory if that subdirectory is part of $(DIRS). It requires
+# exactly the same shell variables as BUILD_CMD.
+#
+# RECURSIVE_BUILD_CMD is a macro to build a given target in all
+# subdirectories defined in $(DIRS). It requires that the target
+# is given through the shell variable `target'.
+BUILD_CMD= if [ -d "$$dir" ]; then \
+ ( [ $$target != all -a -z "$(FIPSCANLIB)" ] && FIPSCANLIB=/dev/null; \
+ cd $$dir && echo "making $$target in $$dir..." && \
+ $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
+ ) || exit 1; \
+ fi
+RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done
+BUILD_ONE_CMD=\
+ if echo " $(DIRS) " | grep " $$dir " >/dev/null 2>/dev/null; then \
+ $(BUILD_CMD); \
+ fi
+
+reflect:
+ @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
+
+FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
+ ../crypto/aes/aes_ecb.o \
+ ../crypto/aes/aes_ofb.o \
+ ../crypto/bn/bn_add.o \
+ ../crypto/bn/bn_blind.o \
+ ../crypto/bn/bn_ctx.o \
+ ../crypto/bn/bn_div.o \
+ ../crypto/bn/bn_exp2.o \
+ ../crypto/bn/bn_exp.o \
+ ../crypto/bn/bn_gcd.o \
+ ../crypto/bn/bn_lib.o \
+ ../crypto/bn/bn_mod.o \
+ ../crypto/bn/bn_mont.o \
+ ../crypto/bn/bn_mul.o \
+ ../crypto/bn/bn_prime.o \
+ ../crypto/bn/bn_rand.o \
+ ../crypto/bn/bn_recp.o \
+ ../crypto/bn/bn_shift.o \
+ ../crypto/bn/bn_sqr.o \
+ ../crypto/bn/bn_word.o \
+ ../crypto/bn/bn_x931p.o \
+ ../crypto/buffer/buf_str.o \
+ ../crypto/cryptlib.o \
+ ../crypto/des/cfb64ede.o \
+ ../crypto/des/cfb64enc.o \
+ ../crypto/des/cfb_enc.o \
+ ../crypto/des/ecb3_enc.o \
+ ../crypto/des/ecb_enc.o \
+ ../crypto/des/ofb64ede.o \
+ ../crypto/des/ofb64enc.o \
+ ../crypto/des/fcrypt.o \
+ ../crypto/des/set_key.o \
+ ../crypto/dsa/dsa_utl.o \
+ ../crypto/dsa/dsa_sign.o \
+ ../crypto/dsa/dsa_vrf.o \
+ ../crypto/err/err.o \
+ ../crypto/evp/digest.o \
+ ../crypto/evp/enc_min.o \
+ ../crypto/evp/e_aes.o \
+ ../crypto/evp/e_des3.o \
+ ../crypto/evp/p_sign.o \
+ ../crypto/evp/p_verify.o \
+ ../crypto/mem_clr.o \
+ ../crypto/mem.o \
+ ../crypto/rand/md_rand.o \
+ ../crypto/rand/rand_egd.o \
+ ../crypto/rand/randfile.o \
+ ../crypto/rand/rand_lib.o \
+ ../crypto/rand/rand_os2.o \
+ ../crypto/rand/rand_unix.o \
+ ../crypto/rand/rand_win.o \
+ ../crypto/rsa/rsa_lib.o \
+ ../crypto/rsa/rsa_none.o \
+ ../crypto/rsa/rsa_oaep.o \
+ ../crypto/rsa/rsa_pk1.o \
+ ../crypto/rsa/rsa_pss.o \
+ ../crypto/rsa/rsa_ssl.o \
+ ../crypto/rsa/rsa_x931.o \
+ ../crypto/sha/sha1dgst.o \
+ ../crypto/sha/sha256.o \
+ ../crypto/sha/sha512.o \
+ ../crypto/uid.o
+
+sub_all: build_all
+build_all: build_libs build_apps build_tests build_tools
+
+build_libs: build_crypto build_fips build_ssl build_shared build_engines
+
+build_crypto:
+ if [ -n "$(FIPSCANLIB)" ]; then \
+ EXCL_OBJ='$(AES_ASM_OBJ) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
+ ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
+ else \
+ ARX='${AR}' ; \
+ fi ; export ARX ; \
+ dir=crypto; target=all; $(BUILD_ONE_CMD)
+build_fips:
+ @dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
+build_ssl: build_crypto
+ @dir=ssl; target=all; $(BUILD_ONE_CMD)
+build_engines: build_crypto
+ @dir=engines; target=all; $(BUILD_ONE_CMD)
+build_apps: build_libs
+ @dir=apps; target=all; $(BUILD_ONE_CMD)
+build_tests: build_libs
+ @dir=test; target=all; $(BUILD_ONE_CMD)
+build_tools: build_libs
+ @dir=tools; target=all; $(BUILD_ONE_CMD)
+
+all_testapps: build_libs build_testapps
+build_testapps:
+ @dir=crypto; target=testapps; $(BUILD_ONE_CMD)
+
+build_shared: $(SHARED_LIBS)
+libcrypto$(SHLIB_EXT): libcrypto.a $(SHARED_FIPS)
+ @if [ "$(SHLIB_TARGET)" != "" ]; then \
+ if [ "$(FIPSCANLIB)" = "libfips" ]; then \
+ $(ARD) libcrypto.a fipscanister.o ; \
+ $(MAKE) SHLIBDIRS='crypto' SHLIBDEPS='-lfips' build-shared; \
+ $(AR) libcrypto.a fips/fipscanister.o ; \
+ else \
+ if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
+ FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
+ export CC FIPSLD_CC; \
+ fi; \
+ $(MAKE) -e SHLIBDIRS='crypto' build-shared; \
+ fi \
+ else \
+ echo "There's no support for shared libraries on this platform" >&2; \
+ exit 1; \
+ fi
+
+libcrypto.a: build_crypto
+
+libssl.a: build_ssl
+
+libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
+ @if [ "$(SHLIB_TARGET)" != "" ]; then \
+ shlibdeps=-lcrypto; \
+ [ "$(FIPSCANLIB)" = "libfips" ] && shlibdeps="$$shlibdeps -lfips"; \
+ $(MAKE) SHLIBDIRS=ssl SHLIBDEPS="$$shlibdeps" build-shared; \
+ else \
+ echo "There's no support for shared libraries on this platform" >&2 ; \
+ exit 1; \
+ fi
+
+fips/fipscanister.o: build_fips
+libfips$(SHLIB_EXT): fips/fipscanister.o
+ @if [ "$(SHLIB_TARGET)" != "" ]; then \
+ FIPSLD_CC="$(CC)"; CC=fips/fipsld; export CC FIPSLD_CC; \
+ $(MAKE) -f Makefile.shared -e $(BUILDENV) \
+ CC=$${CC} LIBNAME=fips THIS=$@ \
+ LIBEXTRAS=fips/fipscanister.o \
+ LIBDEPS="$(EX_LIBS)" \
+ LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
+ link_o.$(SHLIB_TARGET) || { rm -f $@; exit 1; } \
+ else \
+ echo "There's no support for shared libraries on this platform" >&2; \
+ exit 1; \
+ fi
+
+libfips.a:
+ dir=fips; target=all; $(BUILD_ONE_CMD)
+
+clean-shared:
+ @set -e; for i in $(SHLIBDIRS); do \
+ if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
+ tmp="$(SHARED_LIBS_LINK_EXTS)"; \
+ for j in $${tmp:-x}; do \
+ ( set -x; rm -f lib$$i$$j ); \
+ done; \
+ fi; \
+ ( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
+ if [ "$(PLATFORM)" = "Cygwin" ]; then \
+ ( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
+ fi; \
+ done
+
+link-shared:
+ @ set -e; for i in ${SHLIBDIRS}; do \
+ $(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
+ LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
+ LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
+ symlink.$(SHLIB_TARGET); \
+ libs="$$libs -l$$i"; \
+ done
+
+build-shared: do_$(SHLIB_TARGET) link-shared
+
+do_$(SHLIB_TARGET):
+ @ set -e; libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
+ if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
+ libs="$(LIBKRB5) $$libs"; \
+ fi; \
+ $(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
+ LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
+ LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
+ LIBDEPS="$$libs $(EX_LIBS)" \
+ link_a.$(SHLIB_TARGET); \
+ libs="-l$$i $$libs"; \
+ done
+
+libcrypto.pc: Makefile
+ @ ( echo 'prefix=$(INSTALLTOP)'; \
+ echo 'exec_prefix=$${prefix}'; \
+ echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+ echo 'includedir=$${prefix}/include'; \
+ echo ''; \
+ echo 'Name: OpenSSL-libcrypto'; \
+ echo 'Description: OpenSSL cryptography library'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+ echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
+
+libssl.pc: Makefile
+ @ ( echo 'prefix=$(INSTALLTOP)'; \
+ echo 'exec_prefix=$${prefix}'; \
+ echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+ echo 'includedir=$${prefix}/include'; \
+ echo ''; \
+ echo 'Name: OpenSSL'; \
+ echo 'Description: Secure Sockets Layer and cryptography libraries'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+ echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
+
+openssl.pc: Makefile
+ @ ( echo 'prefix=$(INSTALLTOP)'; \
+ echo 'exec_prefix=$${prefix}'; \
+ echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
+ echo 'includedir=$${prefix}/include'; \
+ echo ''; \
+ echo 'Name: OpenSSL'; \
+ echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
+ echo 'Version: '$(VERSION); \
+ echo 'Requires: '; \
+ echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
+ echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
+
+Makefile: Makefile.org Configure config
+ @echo "Makefile is older than Makefile.org, Configure or config."
+ @echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
+ @false
+
+libclean:
+ rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
+
+clean: libclean
+ rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
+ @set -e; target=clean; $(RECURSIVE_BUILD_CMD)
+ rm -f $(LIBS)
+ rm -f openssl.pc libssl.pc libcrypto.pc
+ rm -f speed.* .pure
+ rm -f $(TARFILE)
+ @set -e; for i in $(ONEDIRS) ;\
+ do \
+ rm -fr $$i/*; \
+ done
+
+makefile.one: files
+ $(PERL) util/mk1mf.pl >makefile.one; \
+ sh util/do_ms.sh
+
+files:
+ $(PERL) $(TOP)/util/files.pl Makefile > $(TOP)/MINFO
+ @set -e; target=files; $(RECURSIVE_BUILD_CMD)
+
+links:
+ @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
+ @$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
+ @set -e; target=links; $(RECURSIVE_BUILD_CMD)
+ @if [ -z "$(FIPSCANLIB)" ]; then \
+ set -e; target=links; dir=fips ; $(BUILD_CMD) ; \
+ fi
+
+gentests:
+ @(cd test && echo "generating dummy tests (if needed)..." && \
+ $(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on generate );
+
+dclean:
+ rm -f *.bak
+ @set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
+
+rehash: rehash.time
+rehash.time: certs apps
+ @if [ -z "$(CROSS_COMPILE)" ]; then \
+ (OPENSSL="`pwd`/util/opensslwrap.sh"; \
+ OPENSSL_DEBUG_MEMORY=on; \
+ export OPENSSL OPENSSL_DEBUG_MEMORY; \
+ $(PERL) tools/c_rehash certs) && \
+ touch rehash.time; \
+ fi
+
+test: tests
+
+tests: rehash
+ @(cd test && echo "testing..." && \
+ $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
+ util/opensslwrap.sh version -a
+
+report:
+ @$(PERL) util/selftest.pl
+
+depend:
+ @set -e; target=depend; $(RECURSIVE_BUILD_CMD)
+
+lint:
+ @set -e; target=lint; $(RECURSIVE_BUILD_CMD)
+
+tags:
+ rm -f TAGS
+ find . -name '[^.]*.[ch]' | xargs etags -a
+
+errors:
+ $(PERL) util/mkerr.pl -recurse -write
+ (cd engines; $(MAKE) PERL=$(PERL) errors)
+ $(PERL) util/ck_errf.pl */*.c */*/*.c
+
+stacks:
+ $(PERL) util/mkstack.pl -write
+
+util/libeay.num::
+ $(PERL) util/mkdef.pl crypto update
+
+util/ssleay.num::
+ $(PERL) util/mkdef.pl ssl update
+
+crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
+ $(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
+crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
+ $(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
+
+apps/openssl-vms.cnf: apps/openssl.cnf
+ $(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
+
+crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
+ $(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
+
+
+TABLE: Configure
+ (echo 'Output of `Configure TABLE'"':"; \
+ $(PERL) Configure TABLE) > TABLE
+
+update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
+
+# Build distribution tar-file. As the list of files returned by "find" is
+# pretty long, on several platforms a "too many arguments" error or similar
+# would occur. Therefore the list of files is temporarily stored into a file
+# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
+# tar does not support the --files-from option.
+TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list \
+ --owner openssl:0 --group openssl:0 \
+ --transform 's|^|openssl-$(VERSION)/|' \
+ -cvf -
+
+../$(TARFILE).list:
+ find * \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \
+ \! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \
+ \! -name '*test' \! -name '.#*' \! -name '*~' \
+ | sort > ../$(TARFILE).list
+
+tar: ../$(TARFILE).list
+ find . -type d -print | xargs chmod 755
+ find . -type f -print | xargs chmod a+r
+ find . -type f -perm -0100 -print | xargs chmod a+x
+ $(TAR_COMMAND) | gzip --best >../$(TARFILE).gz
+ rm -f ../$(TARFILE).list
+ ls -l ../$(TARFILE).gz
+
+tar-snap: ../$(TARFILE).list
+ $(TAR_COMMAND) > ../$(TARFILE)
+ rm -f ../$(TARFILE).list
+ ls -l ../$(TARFILE)
+
+dist:
+ $(PERL) Configure dist
+ @$(MAKE) dist_pem_h
+ @$(MAKE) SDIRS='${SDIRS}' clean
+ @$(MAKE) TAR='${TAR}' TARFLAGS='${TARFLAGS}' tar
+
+dist_pem_h:
+ (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
+
+install: all install_docs install_sw
+
+install_sw:
+ @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/private
+ @set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
+ do \
+ (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
+ done;
+ @set -e; target=install; $(RECURSIVE_BUILD_CMD)
+ @set -e; for i in $(LIBS) ;\
+ do \
+ if [ -f "$$i" ]; then \
+ ( echo installing $$i; \
+ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ $(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i ); \
+ fi; \
+ done;
+ @set -e; if [ -n "$(SHARED_LIBS)" ]; then \
+ tmp="$(SHARED_LIBS)"; \
+ for i in $${tmp:-x}; \
+ do \
+ if [ -f "$$i" -o -f "$$i.a" ]; then \
+ ( echo installing $$i; \
+ if [ "$(PLATFORM)" != "Cygwin" ]; then \
+ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
+ else \
+ c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
+ cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
+ chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
+ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
+ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
+ fi ); \
+ fi; \
+ done; \
+ ( here="`pwd`"; \
+ cd $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR); \
+ $(MAKE) -f $$here/Makefile HERE="$$here" link-shared ); \
+ if [ "$(INSTALLTOP)" != "/usr" ]; then \
+ echo 'OpenSSL shared libraries have been installed in:'; \
+ echo ' $(INSTALLTOP)'; \
+ echo ''; \
+ sed -e '1,/^$$/d' doc/openssl-shared.txt; \
+ fi; \
+ fi
+ cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc
+ cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc
+ cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
+
+install_docs:
+ @$(PERL) $(TOP)/util/mkdir-p.pl \
+ $(INSTALL_PREFIX)$(MANDIR)/man1 \
+ $(INSTALL_PREFIX)$(MANDIR)/man3 \
+ $(INSTALL_PREFIX)$(MANDIR)/man5 \
+ $(INSTALL_PREFIX)$(MANDIR)/man7
+ @pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
+ here="`pwd`"; \
+ filecase=; \
+ if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
+ filecase=-i; \
+ fi; \
+ set -e; for i in doc/apps/*.pod; do \
+ fn=`basename $$i .pod`; \
+ sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
+ echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
+ (cd `$(PERL) util/dirname.pl $$i`; \
+ sh -c "$$pod2man \
+ --section=$$sec --center=OpenSSL \
+ --release=$(VERSION) `basename $$i`") \
+ > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
+ $(PERL) util/extract-names.pl < $$i | \
+ (grep -v $$filecase "^$$fn\$$"; true) | \
+ (grep -v "[ ]"; true) | \
+ (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
+ while read n; do \
+ $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
+ done); \
+ done; \
+ set -e; for i in doc/crypto/*.pod doc/ssl/*.pod; do \
+ fn=`basename $$i .pod`; \
+ sec=`$(PERL) util/extract-section.pl 3 < $$i`; \
+ echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
+ (cd `$(PERL) util/dirname.pl $$i`; \
+ sh -c "$$pod2man \
+ --section=$$sec --center=OpenSSL \
+ --release=$(VERSION) `basename $$i`") \
+ > $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
+ $(PERL) util/extract-names.pl < $$i | \
+ (grep -v $$filecase "^$$fn\$$"; true) | \
+ (grep -v "[ ]"; true) | \
+ (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
+ while read n; do \
+ $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
+ done); \
+ done
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/data/_openssl0.9.8/_metadata/description b/data/_openssl0.9.8/_metadata/description
new file mode 100644
index 000000000..3750ad4db
--- /dev/null
+++ b/data/_openssl0.9.8/_metadata/description
@@ -0,0 +1 @@
+SSL library and cryptographic tools
diff --git a/data/_openssl0.9.8/_metadata/in.1443.00 b/data/_openssl0.9.8/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_openssl0.9.8/_metadata/in.1443.00
diff --git a/data/_openssl0.9.8/_metadata/license b/data/_openssl0.9.8/_metadata/license
new file mode 100644
index 000000000..ff99d9724
--- /dev/null
+++ b/data/_openssl0.9.8/_metadata/license
@@ -0,0 +1,127 @@
+
+ LICENSE ISSUES
+ ==============
+
+ The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
+ the OpenSSL License and the original SSLeay license apply to the toolkit.
+ See below for the actual license texts. Actually both licenses are BSD-style
+ Open Source licenses. In case of any license issues related to OpenSSL
+ please contact openssl-core@openssl.org.
+
+ OpenSSL License
+ ---------------
+
+/* ====================================================================
+ * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+ Original SSLeay License
+ -----------------------
+
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to. The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * "This product includes cryptographic software written by
+ * Eric Young (eay@cryptsoft.com)"
+ * The word 'cryptographic' can be left out if the rouines from the library
+ * being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ * the apps directory (application code) you must include an acknowledgement:
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
diff --git a/data/boost_/_metadata/maintainer b/data/_openssl0.9.8/_metadata/maintainer
index 0fa66e077..0fa66e077 120000
--- a/data/boost_/_metadata/maintainer
+++ b/data/_openssl0.9.8/_metadata/maintainer
diff --git a/data/_openssl0.9.8/_metadata/name b/data/_openssl0.9.8/_metadata/name
new file mode 100644
index 000000000..effce34b6
--- /dev/null
+++ b/data/_openssl0.9.8/_metadata/name
@@ -0,0 +1 @@
+OpenSSL
diff --git a/data/pam/_metadata/priority b/data/_openssl0.9.8/_metadata/priority
index a6a7b9cd7..a6a7b9cd7 100644
--- a/data/pam/_metadata/priority
+++ b/data/_openssl0.9.8/_metadata/priority
diff --git a/data/gnupth/_metadata/role b/data/_openssl0.9.8/_metadata/role
index 8d0320866..8d0320866 100644
--- a/data/gnupth/_metadata/role
+++ b/data/_openssl0.9.8/_metadata/role
diff --git a/data/_openssl0.9.8/_metadata/section b/data/_openssl0.9.8/_metadata/section
new file mode 100644
index 000000000..4b487b7d5
--- /dev/null
+++ b/data/_openssl0.9.8/_metadata/section
@@ -0,0 +1 @@
+Security
diff --git a/data/gnupth/_metadata/tags b/data/_openssl0.9.8/_metadata/tags
index a8928cec8..a8928cec8 100644
--- a/data/gnupth/_metadata/tags
+++ b/data/_openssl0.9.8/_metadata/tags
diff --git a/data/_openssl0.9.8/_metadata/version b/data/_openssl0.9.8/_metadata/version
new file mode 100644
index 000000000..0833830a9
--- /dev/null
+++ b/data/_openssl0.9.8/_metadata/version
@@ -0,0 +1 @@
+0.9.8zh
diff --git a/data/_openssl0.9.8/engines-path.diff b/data/_openssl0.9.8/engines-path.diff
new file mode 100644
index 000000000..c032834df
--- /dev/null
+++ b/data/_openssl0.9.8/engines-path.diff
@@ -0,0 +1,54 @@
+diff -ur openssl-0.9.8zh/Configure openssl-0.9.8zh+iPhone/Configure
+--- openssl-0.9.8zh/Configure 2015-12-03 04:59:07.000000000 -1000
++++ openssl-0.9.8zh+iPhone/Configure 2018-12-10 10:00:55.000000000 -1000
+@@ -1700,7 +1700,7 @@
+ # $foo is to become "$prefix/lib$multilib/engines";
+ # as Makefile.org and engines/Makefile are adapted for
+ # $multilib suffix.
+- my $foo = "$prefix/lib/engines";
++ my $foo = "$prefix/lib/engines-0.9.8";
+ $foo =~ s/\\/\\\\/g;
+ print OUT "#define ENGINESDIR \"$foo\"\n";
+ }
+diff -ur openssl-0.9.8zh/Makefile.org openssl-0.9.8zh+iPhone/Makefile.org
+--- openssl-0.9.8zh/Makefile.org 2015-12-03 04:59:07.000000000 -1000
++++ openssl-0.9.8zh+iPhone/Makefile.org 2018-12-10 10:00:01.000000000 -1000
+@@ -623,7 +623,7 @@
+ install_sw:
+ @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
+- $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
++ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-0.9.8 \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
+diff -ur openssl-0.9.8zh/engines/Makefile openssl-0.9.8zh+iPhone/engines/Makefile
+--- openssl-0.9.8zh/engines/Makefile 2015-12-03 05:00:15.000000000 -1000
++++ openssl-0.9.8zh+iPhone/engines/Makefile 2018-12-10 10:00:01.000000000 -1000
+@@ -92,7 +92,7 @@
+ @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
+ @if [ -n "$(SHARED_LIBS)" ]; then \
+ set -e; \
+- $(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/lib/engines; \
++ $(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/lib/engines-0.9.8; \
+ for l in $(LIBNAMES); do \
+ ( echo installing $$l; \
+ if [ "$(PLATFORM)" != "Cygwin" ]; then \
+@@ -101,13 +101,13 @@
+ *DSO_DL*) sfx="sl";; \
+ *) sfx="bad";; \
+ esac; \
+- cp lib$$l.$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/lib$$l.$$sfx.new; \
++ cp lib$$l.$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-0.9.8/lib$$l.$$sfx.new; \
+ else \
+ sfx="so"; \
+- cp cyg$$l.dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/lib$$l.$$sfx.new; \
++ cp cyg$$l.dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-0.9.8/lib$$l.$$sfx.new; \
+ fi; \
+- chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/lib$$l.$$sfx.new; \
+- mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/lib$$l.$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/lib$$l.$$sfx ); \
++ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-0.9.8/lib$$l.$$sfx.new; \
++ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-0.9.8/lib$$l.$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-0.9.8/lib$$l.$$sfx ); \
+ done; \
+ fi
+
diff --git a/data/_openssl0.9.8/iphoneos.diff b/data/_openssl0.9.8/iphoneos.diff
new file mode 100644
index 000000000..48569a923
--- /dev/null
+++ b/data/_openssl0.9.8/iphoneos.diff
@@ -0,0 +1,31 @@
+diff -ur openssl-0.9.8zc/Configure openssl-0.9.8zc+iPhone/Configure
+--- openssl-0.9.8zc/Configure 2014-10-15 02:45:00.000000000 -1000
++++ openssl-0.9.8zc+iPhone/Configure 2018-12-10 08:55:55.000000000 -1000
+@@ -534,6 +534,13 @@
+ "darwin64-x86_64-cc","cc:-arch x86_64 -O3 -fomit-frame-pointer -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+ "debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+
++##### iPhoneOS
++"darwin-arm-gcc","arm-apple-darwin-gcc:-arch arm -O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch arm -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib:arm-apple-darwin-ranlib",
++"darwin8-arm-gcc","arm-apple-darwin8-gcc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch arm -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib:arm-apple-darwin8-ranlib",
++"darwin9-arm-gcc","arm-apple-darwin9-gcc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch arm -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib:arm-apple-darwin9-ranlib",
++"arm-apple-darwin11","arm-apple-darwin11-gcc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib:arm-apple-darwin11-ranlib",
++"aarch64-apple-darwin17","aarch64-apple-darwin17-gcc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib:aarch64-apple-darwin17-ranlib",
++
+ ##### A/UX
+ "aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
+
+diff -ur openssl-0.9.8zc/config openssl-0.9.8zc+iPhone/config
+--- openssl-0.9.8zc/config 2014-10-15 02:45:00.000000000 -1000
++++ openssl-0.9.8zc+iPhone/config 2018-12-10 08:57:55.000000000 -1000
+@@ -525,6 +525,10 @@
+ ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;;
+ ppc-apple-darwin*) OUT="darwin-ppc-cc" ;;
+ i386-apple-darwin*) OUT="darwin-i386-cc" ;;
++ arm-apple-darwin11)
++ OUT="iphoneos-arm" ;;
++ aarch64-apple-darwin17)
++ OUT="iphoneos-arm" ;;
+ alpha-*-linux2)
+ ISA=`awk '/cpu model/{print$4;exit(0);}' /proc/cpuinfo`
+ case ${ISA:-generic} in
diff --git a/data/_openssl0.9.8/make.sh b/data/_openssl0.9.8/make.sh
new file mode 100644
index 000000000..090177bac
--- /dev/null
+++ b/data/_openssl0.9.8/make.sh
@@ -0,0 +1,8 @@
+pkg:setup
+./Configure -D__DARWIN_UNIX03 "${PKG_TARG}" --prefix=/usr --openssldir=/usr/lib/ssl shared
+make -j16 AR="${PKG_TARG}-ar -r"
+make install_sw INSTALL_PREFIX="${PKG_DEST}"
+pkg: mkdir -p /etc/ssl
+mv "${PKG_DEST}"/usr/lib/ssl/{certs,openssl.cnf,private} "${PKG_DEST}"/etc/ssl
+ln -s /etc/ssl/{certs,openssl.cnf,private} "${PKG_DEST}"/usr/lib/ssl
+rm -rf "${PKG_DEST}"/usr/lib/*.a
diff --git a/data/_openssl0.9.8/openssl-0.9.8zh.tar.gz b/data/_openssl0.9.8/openssl-0.9.8zh.tar.gz
new file mode 100644
index 000000000..2b4050da6
--- /dev/null
+++ b/data/_openssl0.9.8/openssl-0.9.8zh.tar.gz
Binary files differ
diff --git a/data/_openssl0.9.8/parallel.diff b/data/_openssl0.9.8/parallel.diff
new file mode 100644
index 000000000..177eed429
--- /dev/null
+++ b/data/_openssl0.9.8/parallel.diff
@@ -0,0 +1,14 @@
+diff -ur openssl-0.9.8zh/Makefile.org openssl-0.9.8zc+iPhone/Makefile.org
+--- openssl-0.9.8zh/Makefile.org 2014-10-15 02:45:00.000000000 -1000
++++ openssl-0.9.8zh+iPhone/Makefile.org 2018-12-10 08:55:55.000000000 -1000
+@@ -371,6 +371,10 @@
+ exit 1; \
+ fi
+
++libcrypto.a: build_crypto
++
++libssl.a: build_ssl
++
+ libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
+ @if [ "$(SHLIB_TARGET)" != "" ]; then \
+ shlibdeps=-lcrypto; \
diff --git a/data/openssl/timestamp.diff b/data/_openssl0.9.8/timestamp.diff
index f1e61a446..f1e61a446 100644
--- a/data/openssl/timestamp.diff
+++ b/data/_openssl0.9.8/timestamp.diff
diff --git a/data/_openssl1.0/_metadata/depends b/data/_openssl1.0/_metadata/depends
new file mode 100644
index 000000000..a779e5d04
--- /dev/null
+++ b/data/_openssl1.0/_metadata/depends
@@ -0,0 +1 @@
+ca-certificates
diff --git a/data/_openssl1.0/_metadata/description b/data/_openssl1.0/_metadata/description
new file mode 100644
index 000000000..3750ad4db
--- /dev/null
+++ b/data/_openssl1.0/_metadata/description
@@ -0,0 +1 @@
+SSL library and cryptographic tools
diff --git a/data/_openssl1.0/_metadata/in.1443.00 b/data/_openssl1.0/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_openssl1.0/_metadata/in.1443.00
diff --git a/data/_openssl1.0/_metadata/license b/data/_openssl1.0/_metadata/license
new file mode 100644
index 000000000..ff99d9724
--- /dev/null
+++ b/data/_openssl1.0/_metadata/license
@@ -0,0 +1,127 @@
+
+ LICENSE ISSUES
+ ==============
+
+ The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
+ the OpenSSL License and the original SSLeay license apply to the toolkit.
+ See below for the actual license texts. Actually both licenses are BSD-style
+ Open Source licenses. In case of any license issues related to OpenSSL
+ please contact openssl-core@openssl.org.
+
+ OpenSSL License
+ ---------------
+
+/* ====================================================================
+ * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+ Original SSLeay License
+ -----------------------
+
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to. The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * "This product includes cryptographic software written by
+ * Eric Young (eay@cryptsoft.com)"
+ * The word 'cryptographic' can be left out if the rouines from the library
+ * being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ * the apps directory (application code) you must include an acknowledgement:
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
diff --git a/data/_openssl1.0/_metadata/maintainer b/data/_openssl1.0/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/_openssl1.0/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_openssl1.0/_metadata/name b/data/_openssl1.0/_metadata/name
new file mode 100644
index 000000000..effce34b6
--- /dev/null
+++ b/data/_openssl1.0/_metadata/name
@@ -0,0 +1 @@
+OpenSSL
diff --git a/data/_openssl1.0/_metadata/priority b/data/_openssl1.0/_metadata/priority
new file mode 100644
index 000000000..a6a7b9cd7
--- /dev/null
+++ b/data/_openssl1.0/_metadata/priority
@@ -0,0 +1 @@
+standard
diff --git a/data/_openssl1.0/_metadata/role b/data/_openssl1.0/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/_openssl1.0/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/_openssl1.0/_metadata/section b/data/_openssl1.0/_metadata/section
new file mode 100644
index 000000000..4b487b7d5
--- /dev/null
+++ b/data/_openssl1.0/_metadata/section
@@ -0,0 +1 @@
+Security
diff --git a/data/pam/_metadata/tags b/data/_openssl1.0/_metadata/tags
index a8928cec8..a8928cec8 100644
--- a/data/pam/_metadata/tags
+++ b/data/_openssl1.0/_metadata/tags
diff --git a/data/_openssl1.0/_metadata/version b/data/_openssl1.0/_metadata/version
new file mode 100644
index 000000000..688126b53
--- /dev/null
+++ b/data/_openssl1.0/_metadata/version
@@ -0,0 +1 @@
+1.0.2q
diff --git a/data/_openssl1.0/engines-path.diff b/data/_openssl1.0/engines-path.diff
new file mode 100644
index 000000000..08659af8c
--- /dev/null
+++ b/data/_openssl1.0/engines-path.diff
@@ -0,0 +1,83 @@
+diff -ur openssl-1.0.2q/Configure openssl-1.0.2q+iPhone/Configure
+--- openssl-1.0.2q/Configure 2018-11-20 03:44:48.000000000 -1000
++++ openssl-1.0.2q+iPhone/Configure 2018-12-09 21:49:24.000000000 -1000
+@@ -1939,7 +1939,7 @@
+ }
+ elsif (/^#define\s+ENGINESDIR/)
+ {
+- my $foo = "$prefix/$libdir/engines";
++ my $foo = "$prefix/$libdir/engines-1.0";
+ $foo =~ s/\\/\\\\/g;
+ print OUT "#define ENGINESDIR \"$foo\"\n";
+ }
+diff -ur openssl-1.0.2q/Makefile.org openssl-1.0.2q+iPhone/Makefile.org
+--- openssl-1.0.2q/Makefile.org 2018-11-20 03:44:48.000000000 -1000
++++ openssl-1.0.2q+iPhone/Makefile.org 2018-12-09 21:49:24.000000000 -1000
+@@ -545,7 +545,7 @@
+ install_sw:
+ @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
+- $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
++ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0 \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
+diff -ur openssl-1.0.2q/engines/Makefile openssl-1.0.2q+iPhone/engines/Makefile
+--- openssl-1.0.2q/engines/Makefile 2018-11-20 03:44:49.000000000 -1000
++++ openssl-1.0.2q+iPhone/engines/Makefile 2018-12-09 21:50:10.000000000 -1000
+@@ -107,13 +107,13 @@
+ @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
+ @if [ -n "$(SHARED_LIBS)" ]; then \
+ set -e; \
+- $(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines; \
++ $(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0; \
+ for l in $(LIBNAMES); do \
+ ( echo installing $$l; \
+ pfx=lib; \
+ if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
+ sfx=".so"; \
+- cp cyg$$l.dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
++ cp cyg$$l.dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$$pfx$$l$$sfx.new; \
+ else \
+ case "$(CFLAGS)" in \
+ *DSO_BEOS*) sfx=".so";; \
+@@ -122,10 +122,10 @@
+ *DSO_WIN32*) sfx="eay32.dll"; pfx=;; \
+ *) sfx=".bad";; \
+ esac; \
+- cp $$pfx$$l$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
++ cp $$pfx$$l$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$$pfx$$l$$sfx.new; \
+ fi; \
+- chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
+- mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx ); \
++ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$$pfx$$l$$sfx.new; \
++ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$$pfx$$l$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$$pfx$$l$$sfx ); \
+ done; \
+ fi
+ @target=install; $(RECURSIVE_MAKE)
+diff -ur openssl-1.0.2q/engines/ccgost/Makefile openssl-1.0.2q+iPhone/engines/ccgost/Makefile
+--- openssl-1.0.2q/engines/ccgost/Makefile 2018-11-20 03:44:49.000000000 -1000
++++ openssl-1.0.2q+iPhone/engines/ccgost/Makefile 2018-12-09 21:50:45.000000000 -1000
+@@ -47,7 +47,7 @@
+ pfx=lib; \
+ if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
+ sfx=".so"; \
+- cp cyg$(LIBNAME).dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
++ cp cyg$(LIBNAME).dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$${pfx}$(LIBNAME)$$sfx.new; \
+ else \
+ case "$(CFLAGS)" in \
+ *DSO_BEOS*) sfx=".so";; \
+@@ -56,10 +56,10 @@
+ *DSO_WIN32*) sfx="eay32.dll"; pfx=;; \
+ *) sfx=".bad";; \
+ esac; \
+- cp $${pfx}$(LIBNAME)$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
++ cp $${pfx}$(LIBNAME)$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$${pfx}$(LIBNAME)$$sfx.new; \
+ fi; \
+- chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
+- mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx; \
++ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$${pfx}$(LIBNAME)$$sfx.new; \
++ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$${pfx}$(LIBNAME)$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines-1.0/$${pfx}$(LIBNAME)$$sfx; \
+ fi
+
+ links:
diff --git a/data/_openssl1.0/iphoneos.diff b/data/_openssl1.0/iphoneos.diff
new file mode 100644
index 000000000..3e22940fd
--- /dev/null
+++ b/data/_openssl1.0/iphoneos.diff
@@ -0,0 +1,30 @@
+diff -ur openssl-1.0.2o/Configure openssl-1.0.2o+iPhone/Configure
+--- openssl-1.0.2o/Configure 2018-03-27 03:54:46.000000000 -1000
++++ openssl-1.0.2o+iPhone/Configure 2018-07-24 11:49:38.000000000 -1000
+@@ -652,7 +652,8 @@
+ "debug-darwin64-x86_64-cc","cc:-arch x86_64 -ggdb -g2 -O0 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+ "debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+ # iPhoneOS/iOS
+-"iphoneos-cross","llvm-gcc:-O3 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
++"arm-apple-darwin11","arm-apple-darwin11-gcc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
++"aarch64-apple-darwin17","aarch64-apple-darwin17-gcc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+
+ ##### A/UX
+ "aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
+diff -ur openssl-1.0.2o/config openssl-1.0.2o+iPhone/config
+--- openssl-1.0.2o/config 2018-03-27 03:54:46.000000000 -1000
++++ openssl-1.0.2o+iPhone/config 2018-07-24 11:54:37.000000000 -1000
+@@ -578,9 +578,10 @@
+ armv6+7-*-iphoneos)
+ options="$options -arch%20armv6 -arch%20armv7"
+ OUT="iphoneos-cross" ;;
+- *-*-iphoneos)
+- options="$options -arch%20${MACHINE}"
+- OUT="iphoneos-cross" ;;
++ arm-apple-darwin11)
++ OUT="iphoneos-arm" ;;
++ aarch64-apple-darwin17)
++ OUT="iphoneos-arm" ;;
+ alpha-*-linux2)
+ ISA=`awk '/cpu model/{print$4;exit(0);}' /proc/cpuinfo`
+ case ${ISA:-generic} in
diff --git a/data/_openssl1.0/make.sh b/data/_openssl1.0/make.sh
new file mode 100644
index 000000000..d86d733b1
--- /dev/null
+++ b/data/_openssl1.0/make.sh
@@ -0,0 +1,11 @@
+pkg:setup
+echo ./Configure -D__DARWIN_UNIX03 "${PKG_TARG}" --prefix=/usr --openssldir=/usr/lib/ssl shared
+./Configure -D__DARWIN_UNIX03 "${PKG_TARG}" --prefix=/usr --openssldir=/usr/lib/ssl shared
+make AR="${PKG_TARG}-ar -r" -j8
+make install_sw INSTALL_PREFIX="${PKG_DEST}"
+pkg: rm -rf /usr/lib/man /usr/lib/ssl/man
+pkg: mkdir -p /etc/ssl
+mv "${PKG_DEST}"/usr/lib/ssl/{certs,openssl.cnf,private} "${PKG_DEST}"/etc/ssl
+ln -s /etc/ssl/{certs,openssl.cnf,private} "${PKG_DEST}"/usr/lib/ssl
+pkg: ln -s certs/cacert.pem /usr/lib/ssl/cert.pem
+rm -rf "${PKG_DEST}"/usr/lib/*.a
diff --git a/data/_openssl1.0/openssl-1.0.2q.tar.gz b/data/_openssl1.0/openssl-1.0.2q.tar.gz
new file mode 100644
index 000000000..26ca0019e
--- /dev/null
+++ b/data/_openssl1.0/openssl-1.0.2q.tar.gz
Binary files differ
diff --git a/data/_sqlite3/_metadata/in.1443.00 b/data/_sqlite3/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/_sqlite3/_metadata/in.1443.00
diff --git a/data/_sqlite3/_metadata/maintainer b/data/_sqlite3/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/_sqlite3/_metadata/maintainer
+++ b/data/_sqlite3/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/_sqlite3/_metadata/version b/data/_sqlite3/_metadata/version
index 62841113a..954e22882 100644
--- a/data/_sqlite3/_metadata/version
+++ b/data/_sqlite3/_metadata/version
@@ -1 +1 @@
-3.5.9
+3.24.0
diff --git a/data/_sqlite3/framework.diff b/data/_sqlite3/framework.diff
deleted file mode 100644
index f336c83dc..000000000
--- a/data/_sqlite3/framework.diff
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -ru sqlite-3.5.9/Makefile.in sqlite-3.5.9+iPhone/Makefile.in
---- sqlite-3.5.9/Makefile.in 2008-05-12 17:10:26.000000000 +0000
-+++ sqlite-3.5.9+iPhone/Makefile.in 2008-08-01 08:21:45.000000000 +0000
-@@ -413,10 +413,12 @@
-
- libsqlite3.la: $(LIBOBJ)
- $(LTLINK) -o $@ $(LIBOBJ) $(TLIBS) \
-+ -framework CoreFoundation -framework Foundation \
- ${ALLOWRELEASE} -rpath "$(libdir)" -version-info "8:6:8"
-
- libtclsqlite3.la: tclsqlite.lo libsqlite3.la
- $(LTLINK) -o $@ tclsqlite.lo \
-+ -framework CoreFoundation -framework Foundation \
- $(LIBOBJ) @TCL_STUB_LIB_SPEC@ $(TLIBS) \
- -rpath "$(libdir)/sqlite" \
- -version-info "8:6:8"
diff --git a/data/_sqlite3/host.diff b/data/_sqlite3/host.diff
deleted file mode 100644
index b6e8ac8b5..000000000
--- a/data/_sqlite3/host.diff
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -ru sqlite-3.5.9/configure.ac sqlite-3.5.9+iPhone/configure.ac
---- sqlite-3.5.9/configure.ac 2008-05-07 12:18:23.000000000 +0000
-+++ sqlite-3.5.9+iPhone/configure.ac 2009-08-11 11:52:36.000000000 +0000
-@@ -163,8 +163,8 @@
-
- #########
- # Check to see if the --with-hints=FILE option is used. If there is none,
--# then check for a files named "$host.hints" and ../$hosts.hints where
--# $host is the hostname of the build system. If still no hints are
-+# then check for a files named "$host_.hints" and ../$hosts_.hints where
-+# $host_ is the hostname of the build system. If still no hints are
- # found, try looking in $system.hints and ../$system.hints where
- # $system is the result of uname -s.
- #
-@@ -172,12 +172,12 @@
- AC_HELP_STRING([--with-hints=FILE],[Read configuration options from FILE]),
- hints=$withval)
- if test "$hints" = ""; then
-- host=`hostname | sed 's/\..*//'`
-- if test -r $host.hints; then
-- hints=$host.hints
-+ host_=`hostname | sed 's/\..*//'`
-+ if test -r $host_.hints; then
-+ hints=$host_.hints
- else
-- if test -r ../$host.hints; then
-- hints=../$host.hints
-+ if test -r ../$host_.hints; then
-+ hints=../$host_.hints
- fi
- fi
- fi
diff --git a/data/_sqlite3/make.sh b/data/_sqlite3/make.sh
index c3179fbb1..a4df3a1ee 100644
--- a/data/_sqlite3/make.sh
+++ b/data/_sqlite3/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-autoconf
-pkg:configure --with-readline-inc=-I"$(PKG_DEST_ readline)"/usr/include/readline --with-readline-lib=-lreadline
+automake -a -c -f 2>/dev/null || true
+pkg:configure --with-readline-inc=-I"$(PKG_DEST_ readline)"/usr/include/readline --with-readline-lib=-lreadline --disable-tcl
make
pkg:install
diff --git a/data/_sqlite3/misuse.diff b/data/_sqlite3/misuse.diff
deleted file mode 100644
index 0e7b79255..000000000
--- a/data/_sqlite3/misuse.diff
+++ /dev/null
@@ -1,53 +0,0 @@
-diff -ru sqlite-3.5.9/src/vdbeapi.c sqlite-3.5.9+iPhone/src/vdbeapi.c
---- sqlite-3.5.9/src/vdbeapi.c 2008-05-13 12:52:46.000000000 +0000
-+++ sqlite-3.5.9+iPhone/src/vdbeapi.c 2008-08-01 03:22:00.000000000 +0000
-@@ -1072,6 +1072,9 @@
- int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
- int rc;
- Vdbe *p = (Vdbe *)pStmt;
-+ if( p==0 ){
-+ return SQLITE_MISUSE;
-+ }
- sqlite3_mutex_enter(p->db->mutex);
- rc = vdbeUnbind(p, i);
- if( rc==SQLITE_OK ){
-@@ -1086,6 +1089,9 @@
- int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
- int rc;
- Vdbe *p = (Vdbe *)pStmt;
-+ if( p==0 ){
-+ return SQLITE_MISUSE;
-+ }
- sqlite3_mutex_enter(p->db->mutex);
- rc = vdbeUnbind(p, i);
- if( rc==SQLITE_OK ){
-@@ -1097,6 +1103,9 @@
- int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
- int rc;
- Vdbe *p = (Vdbe*)pStmt;
-+ if( p==0 ){
-+ return SQLITE_MISUSE;
-+ }
- sqlite3_mutex_enter(p->db->mutex);
- rc = vdbeUnbind(p, i);
- sqlite3_mutex_leave(p->db->mutex);
-@@ -1125,6 +1134,9 @@
- int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
- int rc;
- Vdbe *p = (Vdbe *)pStmt;
-+ if( p==0 ){
-+ return SQLITE_MISUSE;
-+ }
- sqlite3_mutex_enter(p->db->mutex);
- rc = vdbeUnbind(p, i);
- if( rc==SQLITE_OK ){
-@@ -1137,6 +1149,9 @@
- int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
- int rc;
- Vdbe *p = (Vdbe *)pStmt;
-+ if( p==0 ){
-+ return SQLITE_MISUSE;
-+ }
- sqlite3_mutex_enter(p->db->mutex);
- rc = vdbeUnbind(p, i);
- if( rc==SQLITE_OK ){
diff --git a/data/_sqlite3/sqlite-3.5.9.tar.gz b/data/_sqlite3/sqlite-3.5.9.tar.gz
deleted file mode 100644
index 92bb8af07..000000000
--- a/data/_sqlite3/sqlite-3.5.9.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/_sqlite3/sqlite-autoconf-3240000.tar.gz b/data/_sqlite3/sqlite-autoconf-3240000.tar.gz
new file mode 100644
index 000000000..ad4be6eaa
--- /dev/null
+++ b/data/_sqlite3/sqlite-autoconf-3240000.tar.gz
Binary files differ
diff --git a/data/_sqlite3/tempdir.diff b/data/_sqlite3/tempdir.diff
deleted file mode 100644
index c4a411e9b..000000000
--- a/data/_sqlite3/tempdir.diff
+++ /dev/null
@@ -1,54 +0,0 @@
-diff -ru sqlite-3.5.9/src/os_unix.c sqlite-3.5.9+iPhone/src/os_unix.c
---- sqlite-3.5.9/src/os_unix.c 2008-05-13 12:51:29.000000000 +0000
-+++ sqlite-3.5.9+iPhone/src/os_unix.c 2008-08-01 08:18:14.000000000 +0000
-@@ -75,6 +75,10 @@
- */
- #define MAX_PATHNAME 512
-
-+#ifdef __APPLE__
-+#import <CoreServices/CoreServices.h>
-+#endif
-+
-
- /*
- ** The unixFile structure is subclass of sqlite3_file specific for the unix
-@@ -2497,6 +2501,7 @@
- static int unixGetTempname(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
- static const char *azDirs[] = {
- 0,
-+ 0,
- "/var/tmp",
- "/usr/tmp",
- "/tmp",
-@@ -2509,6 +2514,12 @@
- int i, j;
- struct stat buf;
- const char *zDir = ".";
-+#ifdef __APPLE__
-+ void *pool;
-+ CFStringRef cfstr;
-+ CFIndex maxsize;
-+ char *cstr;
-+#endif
-
- /* It's odd to simulate an io-error here, but really this is just
- ** using the io-error infrastructure to test that SQLite handles this
-@@ -2516,6 +2526,18 @@
- */
- SimulateIOError( return SQLITE_ERROR );
-
-+#ifdef __APPLE__
-+ if (azDirs[1] == NULL) {
-+ pool = NSPushAutoreleasePool(0);
-+ cfstr = (CFStringRef) NSTemporaryDirectory();
-+ maxsize = CFStringGetMaximumSizeForEncoding(CFStringGetLength(cfstr), kCFStringEncodingUTF8) + 1;
-+ cstr = malloc(maxsize);
-+ CFStringGetCString(cfstr, cstr, maxsize, kCFStringEncodingUTF8);
-+ azDirs[1] = cstr;
-+ NSPopAutoreleasePool(pool);
-+ }
-+#endif
-+
- azDirs[0] = sqlite3_temp_directory;
- for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); i++){
- if( azDirs[i]==0 ) continue;
diff --git a/data/adv-cmds/_metadata/in.1443.00 b/data/adv-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/adv-cmds/_metadata/in.1443.00
diff --git a/data/adv-cmds/_metadata/maintainer b/data/adv-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/adv-cmds/_metadata/maintainer
+++ b/data/adv-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/adv-cmds/adv_cmds-119.tar.gz b/data/adv-cmds/adv_cmds-119.tar.gz
deleted file mode 100644
index e1922036b..000000000
--- a/data/adv-cmds/adv_cmds-119.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/adv-cmds/adv_cmds-172.tar.gz b/data/adv-cmds/adv_cmds-172.tar.gz
new file mode 100644
index 000000000..ef98dce98
--- /dev/null
+++ b/data/adv-cmds/adv_cmds-172.tar.gz
Binary files differ
diff --git a/data/adv-cmds/make.sh b/data/adv-cmds/make.sh
index f6e0a9882..42e5ec10f 100644
--- a/data/adv-cmds/make.sh
+++ b/data/adv-cmds/make.sh
@@ -1,12 +1,11 @@
pkg:setup
-"${PKG_TARG}-gcc" -O2 -mthumb -o tabs tabs.tproj/*.c -lncurses
-"${PKG_TARG}-g++" -O2 -mthumb -o locale/locale locale/*.cc
-for tproj in finger fingerd last lsvfs md ps; do
+set -x
+"${PKG_TARG}-gcc" -O2 ${PKG_MCPU} -DPLATFORM_iPhoneOS -o tabs/tabs tabs/*.c -lncurses
+"${PKG_TARG}-g++" -O2 ${PKG_MCPU} -DPLATFORM_iPhoneOS -o locale/locale locale/*.cc
+for tproj in finger last lsvfs cap_mkdb; do
echo "${tproj}"
- "${PKG_TARG}-gcc" -O2 -mthumb -o "${tproj}" "${tproj}.tproj"/*.c -D'__FBSDID(x)='
+ "${PKG_TARG}-gcc" -O2 ${PKG_MCPU} -DPLATFORM_iPhoneOS -o "${tproj}/${tproj}" "${tproj}"/*.c -D'__FBSDID(x)='
done
-pkg: mkdir -p /bin /usr/bin /usr/libexec
-pkg: cp -a ps /usr/bin
-pkg: cp -a finger last locale/locale lsvfs md tabs /usr/bin
-pkg: cp -a fingerd /usr/libexec
-ldid -S"${PKG_DATA}/ps.xml" "${PKG_DEST}/usr/bin/ps"
+set +x
+pkg: mkdir -p /bin /usr/bin
+pkg: cp -a cap_mkdb/cap_mkdb finger/finger last/last locale/locale lsvfs/lsvfs tabs/tabs /usr/bin
diff --git a/data/afpfs-ng/_metadata/in.1443.00 b/data/afpfs-ng/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/afpfs-ng/_metadata/in.1443.00
diff --git a/data/afpfs-ng/extern.diff b/data/afpfs-ng/extern.diff
new file mode 100644
index 000000000..ca53c9ecb
--- /dev/null
+++ b/data/afpfs-ng/extern.diff
@@ -0,0 +1,12 @@
+diff -ur afpfs-ng-0.8.1/cmdline/cmdline_afp.h afpfs-ng-0.8.1+iPhone/cmdline/cmdline_afp.h
+--- afpfs-ng-0.8.1/cmdline/cmdline_afp.h 2008-02-17 17:51:20.000000000 -1000
++++ afpfs-ng-0.8.1+iPhone/cmdline/cmdline_afp.h 2018-08-01 15:49:36.000000000 -1000
+@@ -1,7 +1,7 @@
+ #ifndef CMDLINE_AFP_H_
+ #define CMDLINE_AFP_H_
+
+-int full_url;
++extern int full_url;
+
+ int com_connect(char * arg);
+ int com_dir(char * arg);
diff --git a/data/afpfs-ng/make.sh b/data/afpfs-ng/make.sh
index 7dac292bc..dc6b1ecb8 100644
--- a/data/afpfs-ng/make.sh
+++ b/data/afpfs-ng/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-autoconf
+autoreconf -f -i
pkg:configure
make
pkg:install
diff --git a/data/afpfs-ng/nullreturn.diff b/data/afpfs-ng/nullreturn.diff
new file mode 100644
index 000000000..f8c3768ac
--- /dev/null
+++ b/data/afpfs-ng/nullreturn.diff
@@ -0,0 +1,24 @@
+diff -ur afpfs-ng-0.8.1/include/afp.h afpfs-ng-0.8.1+iPhone/include/afp.h
+--- afpfs-ng-0.8.1/include/afp.h 2008-03-08 06:08:18.000000000 -1000
++++ afpfs-ng-0.8.1+iPhone/include/afp.h 2018-08-01 15:45:07.000000000 -1000
+@@ -308,7 +308,7 @@
+
+ struct afp_server * afp_server_full_connect(void * priv, struct afp_connection_request * req);
+
+-void * just_end_it_now(void *other);
++void just_end_it_now(void *other);
+ void add_fd_and_signal(int fd);
+ void loop_disconnect(struct afp_server *s);
+ void afp_wait_for_started_loop(void);
+diff -ur afpfs-ng-0.8.1/lib/loop.c afpfs-ng-0.8.1+iPhone/lib/loop.c
+--- afpfs-ng-0.8.1/lib/loop.c 2008-02-17 17:40:11.000000000 -1000
++++ afpfs-ng-0.8.1+iPhone/lib/loop.c 2018-08-01 15:44:28.000000000 -1000
+@@ -85,7 +85,7 @@
+ }
+
+ static int ending=0;
+-void * just_end_it_now(void * ignore)
++void just_end_it_now(void * ignore)
+ {
+ if (ending) return;
+ ending=1;
diff --git a/data/apptapptools/_metadata/in.1443.00 b/data/apptapptools/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apptapptools/_metadata/in.1443.00
diff --git a/data/apptapptools/_metadata/maintainer b/data/apptapptools/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/apptapptools/_metadata/maintainer
+++ b/data/apptapptools/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/apr-lib/_metadata/in.1443.00 b/data/apr-lib/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apr-lib/_metadata/in.1443.00
diff --git a/data/apr-util/_metadata/in.1443.00 b/data/apr-util/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apr-util/_metadata/in.1443.00
diff --git a/data/apr-util/_metadata/maintainer b/data/apr-util/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/apr-util/_metadata/maintainer
+++ b/data/apr-util/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/apr-util/_metadata/version b/data/apr-util/_metadata/version
index f2ae0b4a2..9c6d6293b 100644
--- a/data/apr-util/_metadata/version
+++ b/data/apr-util/_metadata/version
@@ -1 +1 @@
-1.2.12
+1.6.1
diff --git a/data/apr-util/apr-util-1.2.12.tar.gz b/data/apr-util/apr-util-1.2.12.tar.gz
deleted file mode 100644
index a97916bee..000000000
--- a/data/apr-util/apr-util-1.2.12.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/apr-util/apr-util-1.6.1.tar.bz2 b/data/apr-util/apr-util-1.6.1.tar.bz2
new file mode 100644
index 000000000..f4785d667
--- /dev/null
+++ b/data/apr-util/apr-util-1.6.1.tar.bz2
Binary files differ
diff --git a/data/apr-util/make.sh b/data/apr-util/make.sh
index 2a4ca3fa2..4ce8e73f2 100644
--- a/data/apr-util/make.sh
+++ b/data/apr-util/make.sh
@@ -1,4 +1,7 @@
pkg:setup
-pkg:configure --disable-static --with-apr="$(PKG_WORK_ apr)/apr-1.2.12" --with-berkeley-db="${PKG_ROOT}"
-make
+APRWORK=("$(PKG_WORK_ _apr)"/*/)
+pkg:configure --disable-static --with-apr="${APRWORK}" --with-berkeley-db="$(PKG_DEST_ berkeleydb)/usr"
+# WTF configure... I need to fix this
+sed -ie 's/db-6.9/db/' Makefile apu-1-config
+make -j8
pkg:install
diff --git a/data/apr/_metadata/in.1443.00 b/data/apr/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apr/_metadata/in.1443.00
diff --git a/data/apt-key/_metadata/_apt1.4.dep b/data/apt-key/_metadata/_apt1.4.dep
new file mode 120000
index 000000000..902259693
--- /dev/null
+++ b/data/apt-key/_metadata/_apt1.4.dep
@@ -0,0 +1 @@
+../../_apt1.4 \ No newline at end of file
diff --git a/data/apt-key/_metadata/breaks b/data/apt-key/_metadata/breaks
new file mode 100644
index 000000000..9e36532b4
--- /dev/null
+++ b/data/apt-key/_metadata/breaks
@@ -0,0 +1 @@
+apt7-key
diff --git a/data/apt-key/_metadata/conflicts b/data/apt-key/_metadata/conflicts
new file mode 100644
index 000000000..93773cd14
--- /dev/null
+++ b/data/apt-key/_metadata/conflicts
@@ -0,0 +1 @@
+apt7-key (<<1:0)
diff --git a/data/apt-key/_metadata/coreutils.dep b/data/apt-key/_metadata/coreutils.dep
new file mode 120000
index 000000000..5bd43c1eb
--- /dev/null
+++ b/data/apt-key/_metadata/coreutils.dep
@@ -0,0 +1 @@
+../../coreutils \ No newline at end of file
diff --git a/data/apt-key/_metadata/description b/data/apt-key/_metadata/description
new file mode 100644
index 000000000..7fffa142f
--- /dev/null
+++ b/data/apt-key/_metadata/description
@@ -0,0 +1 @@
+repository encryption key management tool
diff --git a/data/apt-key/_metadata/in.1443.00 b/data/apt-key/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apt-key/_metadata/in.1443.00
diff --git a/data/apt-key/_metadata/libapt.dep b/data/apt-key/_metadata/libapt.dep
new file mode 120000
index 000000000..280bf477b
--- /dev/null
+++ b/data/apt-key/_metadata/libapt.dep
@@ -0,0 +1 @@
+../../libapt \ No newline at end of file
diff --git a/data/apt-key/_metadata/license b/data/apt-key/_metadata/license
new file mode 120000
index 000000000..4f7d70f3f
--- /dev/null
+++ b/data/apt-key/_metadata/license
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/license \ No newline at end of file
diff --git a/data/apt-key/_metadata/maintainer b/data/apt-key/_metadata/maintainer
new file mode 120000
index 000000000..52845be09
--- /dev/null
+++ b/data/apt-key/_metadata/maintainer
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/maintainer \ No newline at end of file
diff --git a/data/apt-key/_metadata/name b/data/apt-key/_metadata/name
new file mode 100644
index 000000000..1deb96958
--- /dev/null
+++ b/data/apt-key/_metadata/name
@@ -0,0 +1 @@
+APT (apt-key)
diff --git a/data/apt-key/_metadata/priority b/data/apt-key/_metadata/priority
new file mode 100644
index 000000000..a6a7b9cd7
--- /dev/null
+++ b/data/apt-key/_metadata/priority
@@ -0,0 +1 @@
+standard
diff --git a/data/apt-key/_metadata/replaces b/data/apt-key/_metadata/replaces
new file mode 100644
index 000000000..49716892b
--- /dev/null
+++ b/data/apt-key/_metadata/replaces
@@ -0,0 +1 @@
+apt (<< 1:0-1), apt7 (<< 0.7.20.2-4), apt7-key
diff --git a/data/perl_/_metadata/role b/data/apt-key/_metadata/role
index 52b4d7301..52b4d7301 100644
--- a/data/perl_/_metadata/role
+++ b/data/apt-key/_metadata/role
diff --git a/data/apt-key/_metadata/section b/data/apt-key/_metadata/section
new file mode 120000
index 000000000..0c5fdc049
--- /dev/null
+++ b/data/apt-key/_metadata/section
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/section \ No newline at end of file
diff --git a/data/apt-key/_metadata/tags b/data/apt-key/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/apt-key/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/apt-key/_metadata/version b/data/apt-key/_metadata/version
new file mode 120000
index 000000000..06c5113b0
--- /dev/null
+++ b/data/apt-key/_metadata/version
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/version \ No newline at end of file
diff --git a/data/apt-key/make.sh b/data/apt-key/make.sh
new file mode 100644
index 000000000..c280cbae8
--- /dev/null
+++ b/data/apt-key/make.sh
@@ -0,0 +1,2 @@
+pkg: mkdir -p /usr/bin
+cp -a "$(PKG_DEST_ _apt1.4)"/usr/bin/apt-key "${PKG_DEST}"/usr/bin
diff --git a/data/apt-rdepends/_metadata/description b/data/apt-rdepends/_metadata/description
new file mode 100644
index 000000000..2d41d5327
--- /dev/null
+++ b/data/apt-rdepends/_metadata/description
@@ -0,0 +1 @@
+a Perl script that hooks into APT and recursively finds dependencies.
diff --git a/data/apt-rdepends/_metadata/in.1443.00 b/data/apt-rdepends/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apt-rdepends/_metadata/in.1443.00
diff --git a/data/apt-rdepends/_metadata/in.550.58 b/data/apt-rdepends/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apt-rdepends/_metadata/in.550.58
diff --git a/data/apt-rdepends/_metadata/libapt-pkg-perl.dep b/data/apt-rdepends/_metadata/libapt-pkg-perl.dep
new file mode 120000
index 000000000..db4b9514d
--- /dev/null
+++ b/data/apt-rdepends/_metadata/libapt-pkg-perl.dep
@@ -0,0 +1 @@
+../../libapt-pkg-perl \ No newline at end of file
diff --git a/data/apt-rdepends/_metadata/license b/data/apt-rdepends/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/apt-rdepends/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/apt-rdepends/_metadata/maintainer b/data/apt-rdepends/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/apt-rdepends/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/easywakeup.net/_metadata/priority b/data/apt-rdepends/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/easywakeup.net/_metadata/priority
+++ b/data/apt-rdepends/_metadata/priority
diff --git a/data/apt-rdepends/_metadata/role b/data/apt-rdepends/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/apt-rdepends/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/perl_/_metadata/section b/data/apt-rdepends/_metadata/section
index ddc7f1fd8..ddc7f1fd8 100644
--- a/data/perl_/_metadata/section
+++ b/data/apt-rdepends/_metadata/section
diff --git a/data/apt-rdepends/_metadata/tags b/data/apt-rdepends/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/apt-rdepends/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/apt-rdepends/_metadata/version b/data/apt-rdepends/_metadata/version
new file mode 100644
index 000000000..f0bb29e76
--- /dev/null
+++ b/data/apt-rdepends/_metadata/version
@@ -0,0 +1 @@
+1.3.0
diff --git a/data/apt-rdepends/apt-rdepends-1.3.0.tar.bz2 b/data/apt-rdepends/apt-rdepends-1.3.0.tar.bz2
new file mode 100644
index 000000000..968dca7bd
--- /dev/null
+++ b/data/apt-rdepends/apt-rdepends-1.3.0.tar.bz2
Binary files differ
diff --git a/data/apt-rdepends/make.sh b/data/apt-rdepends/make.sh
new file mode 100644
index 000000000..3294e99a9
--- /dev/null
+++ b/data/apt-rdepends/make.sh
@@ -0,0 +1,2 @@
+pkg:setup
+pkg:install
diff --git a/data/apt-rdepends/makefile.diff b/data/apt-rdepends/makefile.diff
new file mode 100644
index 000000000..731851ba2
--- /dev/null
+++ b/data/apt-rdepends/makefile.diff
@@ -0,0 +1,30 @@
+diff -ur apt-rdepends-1.3.0/Makefile apt-rdepends-1.3.0+iPhone/Makefile
+--- apt-rdepends-1.3.0/Makefile 2005-09-21 11:10:56.000000000 -1000
++++ apt-rdepends-1.3.0+iPhone/Makefile 2018-11-30 22:41:05.000000000 -1000
+@@ -21,7 +21,8 @@
+
+ SHELL = /bin/sh
+
+-prefix = /usr/local
++DESTDIR ?=
++prefix = /usr
+ exec_prefix = ${prefix}
+
+ bindir = ${exec_prefix}/bin
+@@ -36,12 +37,12 @@
+ pod2man --section=8 --release=${VERSION} --center=" " $< > $@
+
+ install :
+- mkdir -p ${bindir}; \
+- ${INSTALL} apt-rdepends ${bindir}; \
++ mkdir -p "${DESTDIR}/${bindir}"; \
++ ${INSTALL} apt-rdepends "${DESTDIR}/${bindir}"; \
+
+ install-man : all
+- mkdir -p ${mandir}/man8; \
+- ${INSTALL_DATA} apt-rdepends.8 ${mandir}/man8;
++ mkdir -p "${DESTDIR}/${mandir}/man8"; \
++ ${INSTALL_DATA} apt-rdepends.8 "${DESTDIR}/${mandir}/man8";
+
+ clean :
+ rm -f apt-rdepends.8
diff --git a/data/apt/_metadata/depends b/data/apt/_metadata/depends
index 4de6015e1..b8aab5a41 100644
--- a/data/apt/_metadata/depends
+++ b/data/apt/_metadata/depends
@@ -1 +1 @@
-apt7
+apt1.4
diff --git a/data/apt/_metadata/in.1443.00 b/data/apt/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apt/_metadata/in.1443.00
diff --git a/data/apt/_metadata/maintainer b/data/apt/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/apt/_metadata/maintainer
+++ b/data/apt/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/apt/_metadata/name b/data/apt/_metadata/name
index 2b0145427..e2367bda1 100644
--- a/data/apt/_metadata/name
+++ b/data/apt/_metadata/name
@@ -1 +1 @@
-APT 0.6 Transitional
+APT Command Line
diff --git a/data/apt1.4/_metadata/_apt1.4.dep b/data/apt1.4/_metadata/_apt1.4.dep
new file mode 120000
index 000000000..902259693
--- /dev/null
+++ b/data/apt1.4/_metadata/_apt1.4.dep
@@ -0,0 +1 @@
+../../_apt1.4 \ No newline at end of file
diff --git a/data/apt1.4/_metadata/apt-key.dep b/data/apt1.4/_metadata/apt-key.dep
new file mode 120000
index 000000000..67fe46032
--- /dev/null
+++ b/data/apt1.4/_metadata/apt-key.dep
@@ -0,0 +1 @@
+../../apt-key \ No newline at end of file
diff --git a/data/apt1.4/_metadata/berkeleydb.dep b/data/apt1.4/_metadata/berkeleydb.dep
new file mode 120000
index 000000000..f945cb1a2
--- /dev/null
+++ b/data/apt1.4/_metadata/berkeleydb.dep
@@ -0,0 +1 @@
+../../berkeleydb \ No newline at end of file
diff --git a/data/apt1.4/_metadata/conflicts b/data/apt1.4/_metadata/conflicts
new file mode 100644
index 000000000..a975dded1
--- /dev/null
+++ b/data/apt1.4/_metadata/conflicts
@@ -0,0 +1 @@
+apt7 (<<1:0)
diff --git a/data/apt1.4/_metadata/description b/data/apt1.4/_metadata/description
new file mode 100644
index 000000000..e60725012
--- /dev/null
+++ b/data/apt1.4/_metadata/description
@@ -0,0 +1 @@
+the advanced packaging tool from Debian
diff --git a/data/apt1.4/_metadata/in.1443.00 b/data/apt1.4/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/apt1.4/_metadata/in.1443.00
diff --git a/data/apt1.4/_metadata/libapt.dep b/data/apt1.4/_metadata/libapt.dep
new file mode 120000
index 000000000..280bf477b
--- /dev/null
+++ b/data/apt1.4/_metadata/libapt.dep
@@ -0,0 +1 @@
+../../libapt \ No newline at end of file
diff --git a/data/apt1.4/_metadata/libapt.ver.iphoneos-arm b/data/apt1.4/_metadata/libapt.ver.iphoneos-arm
new file mode 120000
index 000000000..06c5113b0
--- /dev/null
+++ b/data/apt1.4/_metadata/libapt.ver.iphoneos-arm
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/version \ No newline at end of file
diff --git a/data/apt1.4/_metadata/license b/data/apt1.4/_metadata/license
new file mode 120000
index 000000000..4f7d70f3f
--- /dev/null
+++ b/data/apt1.4/_metadata/license
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/license \ No newline at end of file
diff --git a/data/apt1.4/_metadata/maintainer b/data/apt1.4/_metadata/maintainer
new file mode 120000
index 000000000..52845be09
--- /dev/null
+++ b/data/apt1.4/_metadata/maintainer
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/maintainer \ No newline at end of file
diff --git a/data/apt1.4/_metadata/name b/data/apt1.4/_metadata/name
new file mode 100644
index 000000000..092cf0cc3
--- /dev/null
+++ b/data/apt1.4/_metadata/name
@@ -0,0 +1 @@
+APT Strict
diff --git a/data/apt1.4/_metadata/priority b/data/apt1.4/_metadata/priority
new file mode 100644
index 000000000..a6a7b9cd7
--- /dev/null
+++ b/data/apt1.4/_metadata/priority
@@ -0,0 +1 @@
+standard
diff --git a/data/apt1.4/_metadata/role b/data/apt1.4/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/apt1.4/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/apt1.4/_metadata/section b/data/apt1.4/_metadata/section
new file mode 120000
index 000000000..0c5fdc049
--- /dev/null
+++ b/data/apt1.4/_metadata/section
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/section \ No newline at end of file
diff --git a/data/apt1.4/_metadata/tags b/data/apt1.4/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/apt1.4/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/apt1.4/_metadata/version b/data/apt1.4/_metadata/version
new file mode 120000
index 000000000..06c5113b0
--- /dev/null
+++ b/data/apt1.4/_metadata/version
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/version \ No newline at end of file
diff --git a/data/apt1.4/make.sh b/data/apt1.4/make.sh
new file mode 100644
index 000000000..14a357d80
--- /dev/null
+++ b/data/apt1.4/make.sh
@@ -0,0 +1,3 @@
+pkg: mkdir -p /usr
+cp -a "$(PKG_DEST_ _apt1.4)"/usr/bin "${PKG_DEST}"/usr
+pkg: rm -f /usr/bin/apt-key
diff --git a/data/apt7-lib/_metadata/conflicts b/data/apt7-lib/_metadata/conflicts
index 905ea7f38..837d831b3 100644
--- a/data/apt7-lib/_metadata/conflicts
+++ b/data/apt7-lib/_metadata/conflicts
@@ -1 +1 @@
-apt7-ssl
+apt7-ssl, com.mc.xz (<<5.2.4-7)
diff --git a/data/apt7-lib/_metadata/priority b/data/apt7-lib/_metadata/priority
index d0b3ce728..134d9bc32 100644
--- a/data/apt7-lib/_metadata/priority
+++ b/data/apt7-lib/_metadata/priority
@@ -1 +1 @@
-+required
+optional
diff --git a/data/apt7-lib/make.sh b/data/apt7-lib/make.sh
index 373980ce9..ca48d2df0 100644
--- a/data/apt7-lib/make.sh
+++ b/data/apt7-lib/make.sh
@@ -5,8 +5,3 @@ pkg: mkdir -p /usr
cp -a "$(PKG_DEST_ _apt7)"/usr/lib "${PKG_DEST}"/usr
pkg: rm -f /usr/lib/apt/methods/https
pkg: ln -s http /usr/lib/apt/methods/https
-
-pkg: hexdump -ve '1/1 "%.2X"' /usr/lib/apt/methods/http | sed -e 's/\(0C0000005C0000001800000002000000\)00......\(000096002F53797374656D2F4C6962726172792F4672616D65776F726B732F436F7265466F756E646174696F6E2E6672616D65776F726B2F436F7265466F756E646174696F6E0000\)/\1000EAA05\2/' | xxd -r -p >"${PKG_DEST}"/usr/lib/apt/methods/http_
-pkg: mv -f /usr/lib/apt/methods/http_ /usr/lib/apt/methods/http
-pkg: chmod 755 /usr/lib/apt/methods/http
-pkg: ldid -S /usr/lib/apt/methods/http
diff --git a/data/aptitude/_metadata/_googletest.dep b/data/aptitude/_metadata/_googletest.dep
new file mode 120000
index 000000000..14c22a596
--- /dev/null
+++ b/data/aptitude/_metadata/_googletest.dep
@@ -0,0 +1 @@
+../../_googletest \ No newline at end of file
diff --git a/data/aptitude/_metadata/apt7-lib.dep b/data/aptitude/_metadata/apt7-lib.dep
deleted file mode 120000
index 78dc2609b..000000000
--- a/data/aptitude/_metadata/apt7-lib.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../apt7-lib \ No newline at end of file
diff --git a/data/aptitude/_metadata/boost.dep b/data/aptitude/_metadata/boost.dep
new file mode 120000
index 000000000..e73292483
--- /dev/null
+++ b/data/aptitude/_metadata/boost.dep
@@ -0,0 +1 @@
+../../boost \ No newline at end of file
diff --git a/data/aptitude/_metadata/in.1443.00 b/data/aptitude/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/aptitude/_metadata/in.1443.00
diff --git a/data/aptitude/_metadata/libapt.dep b/data/aptitude/_metadata/libapt.dep
new file mode 120000
index 000000000..280bf477b
--- /dev/null
+++ b/data/aptitude/_metadata/libapt.dep
@@ -0,0 +1 @@
+../../libapt \ No newline at end of file
diff --git a/data/aptitude/_metadata/librpmatch.dep b/data/aptitude/_metadata/librpmatch.dep
new file mode 120000
index 000000000..67e172ea7
--- /dev/null
+++ b/data/aptitude/_metadata/librpmatch.dep
@@ -0,0 +1 @@
+../../librpmatch \ No newline at end of file
diff --git a/data/aptitude/_metadata/libxapian.dep b/data/aptitude/_metadata/libxapian.dep
new file mode 120000
index 000000000..af6ec0f7b
--- /dev/null
+++ b/data/aptitude/_metadata/libxapian.dep
@@ -0,0 +1 @@
+../../libxapian \ No newline at end of file
diff --git a/data/aptitude/_metadata/version b/data/aptitude/_metadata/version
index 94404405e..ef5056161 100644
--- a/data/aptitude/_metadata/version
+++ b/data/aptitude/_metadata/version
@@ -1 +1 @@
-0.4.11.11
+0.8.10
diff --git a/data/aptitude/aptitude_0.4.11.11.orig.tar.gz b/data/aptitude/aptitude_0.4.11.11.orig.tar.gz
deleted file mode 100644
index 054f18be8..000000000
--- a/data/aptitude/aptitude_0.4.11.11.orig.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/aptitude/aptitude_0.8.10.orig.tar.xz b/data/aptitude/aptitude_0.8.10.orig.tar.xz
new file mode 100644
index 000000000..c9e953277
--- /dev/null
+++ b/data/aptitude/aptitude_0.8.10.orig.tar.xz
Binary files differ
diff --git a/data/aptitude/build.diff b/data/aptitude/build.diff
index 14709ad9e..b96af4656 100644
--- a/data/aptitude/build.diff
+++ b/data/aptitude/build.diff
@@ -1,12 +1,24 @@
-diff -ru aptitude_0.4.11.11.orig/Makefile.in aptitude_0.4.11.11.orig+iPhone/Makefile.in
---- aptitude_0.4.11.11.orig/Makefile.in 2008-11-20 03:17:12.000000000 +0000
-+++ aptitude_0.4.11.11.orig+iPhone/Makefile.in 2009-07-07 07:15:39.000000000 +0000
-@@ -215,7 +215,7 @@
- sysconfdir = @sysconfdir@
- target_alias = @target_alias@
- MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.h.in
--SUBDIRS = $(SRCDIRS) $(DOCDIRS) m4 po tests
-+SUBDIRS = $(SRCDIRS) m4
+diff -ur aptitude-0.8.10/Makefile.am aptitude-0.8.10+iPhone/Makefile.am
+--- aptitude-0.8.10/Makefile.am 2017-11-14 11:48:21.000000000 -1000
++++ aptitude-0.8.10+iPhone/Makefile.am 2018-08-30 15:25:48.000000000 -1000
+@@ -7,7 +7,7 @@
+ DOCDIRS=@DOCDIRS@
+ TESTDIRS=@TESTDIRS@
+
+-SUBDIRS=buildlib $(SRCDIRS) $(DOCDIRS) po $(TESTDIRS)
++SUBDIRS=buildlib $(SRCDIRS)
+
dist_bin_SCRIPTS = aptitude-create-state-bundle aptitude-run-state-bundle
- MANPAGE_LOCALES = gl it pl
+
+diff -ur aptitude-0.8.10/Makefile.in aptitude-0.8.10+iPhone/Makefile.in
+--- aptitude-0.8.10/Makefile.in 2017-11-14 14:18:48.000000000 -1000
++++ aptitude-0.8.10+iPhone/Makefile.in 2018-08-30 15:25:38.000000000 -1000
+@@ -576,7 +576,7 @@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.h.in compile test-driver
+-SUBDIRS = buildlib $(SRCDIRS) $(DOCDIRS) po $(TESTDIRS)
++SUBDIRS = buildlib $(SRCDIRS)
+ dist_bin_SCRIPTS = aptitude-create-state-bundle aptitude-run-state-bundle
+ MANPAGE_LOCALES = gl
TLMANPAGES = $(wildcard $(srcdir)/aptitude.??.8)
diff --git a/data/aptitude/dqueue.diff b/data/aptitude/dqueue.diff
new file mode 100644
index 000000000..153028e1b
--- /dev/null
+++ b/data/aptitude/dqueue.diff
@@ -0,0 +1,16 @@
+diff -ur aptitude-0.8.10/src/generic/util/parsers.h aptitude-0.8.10+iPhone/src/generic/util/parsers.h
+--- aptitude-0.8.10/src/generic/util/parsers.h 2017-08-19 07:59:07.000000000 -1000
++++ aptitude-0.8.10+iPhone/src/generic/util/parsers.h 2018-08-31 09:36:06.000000000 -1000
+@@ -72,12 +72,6 @@
+
+ #include <errno.h>
+
+-namespace std
+-{
+- template<typename T, typename Alloc>
+- class deque;
+-}
+-
+ namespace parsers
+ {
+ /** \defgroup Parser combinators in C++
diff --git a/data/aptitude/gmock.diff b/data/aptitude/gmock.diff
new file mode 100644
index 000000000..c8bd78eb9
--- /dev/null
+++ b/data/aptitude/gmock.diff
@@ -0,0 +1,34 @@
+diff -ur aptitude-0.8.10/configure aptitude-0.8.10+iPhone/configure
+--- aptitude-0.8.10/configure 2017-11-14 14:18:50.000000000 -1000
++++ aptitude-0.8.10+iPhone/configure 2018-08-31 16:44:30.000000000 -1000
+@@ -9699,7 +9699,7 @@
+ else
+ LIBS="$OLD_LIBS -lpthread"
+ OLD_CPPFLAGS="$CPPFLAGS"
+- CPPFLAGS="$CPPFLAGS -I/usr/src/googletest/googletest -I/usr/src/googletest/googlemock"
++ CPPFLAGS="$CPPFLAGS -I$GOOGLETEST/googletest/googletest -I$GOOGLETEST/googletest/googlemock"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+@@ -9712,8 +9712,8 @@
+ }
+ _ACEOF
+ if ac_fn_cxx_try_link "$LINENO"; then :
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: source is in /usr/src/googletest/googlemock" >&5
+-$as_echo "source is in /usr/src/googletest/googlemock" >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: source is in $GOOGLETEST/googletest/googlemock" >&5
++$as_echo "source is in $GOOGLETEST/googletest/googlemock" >&6; }
+ BUILD_LOCAL_GMOCK=1
+ else
+ as_fn_error $? "Can't figure out where Google Mock lives; either install the google-mock package or place the library in the link path" "$LINENO" 5
+@@ -12663,8 +12663,8 @@
+ done
+ }
+ ;;
+- "copy-gtest":C) cp -uv /usr/src/googletest/googletest/src/gtest-all.cc tests/gtest-all.cc ;;
+- "copy-gmock":C) cp -uv /usr/src/googletest/googlemock/src/gmock-all.cc tests/gmock-all.cc ;;
++ "copy-gtest":C) cp -v ${GOOGLETEST}/googletest/googletest/src/gtest-all.cc tests/gtest-all.cc ;;
++ "copy-gmock":C) cp -v ${GOOGLETEST}/googletest/googlemock/src/gmock-all.cc tests/gmock-all.cc ;;
+
+ esac
+ done # for ac_tag
diff --git a/data/aptitude/intl.diff b/data/aptitude/intl.diff
deleted file mode 100644
index 39fe13323..000000000
--- a/data/aptitude/intl.diff
+++ /dev/null
@@ -1,36 +0,0 @@
-diff -ru aptitude-0.4.4.orig/src/generic/apt/Makefile.in aptitude-0.4.4.orig+iPhone/src/generic/apt/Makefile.in
---- aptitude-0.4.4.orig/src/generic/apt/Makefile.in 2006-10-27 04:28:51.000000000 +0000
-+++ aptitude-0.4.4.orig+iPhone/src/generic/apt/Makefile.in 2008-05-13 09:13:50.000000000 +0000
-@@ -305,7 +305,7 @@
- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
- pkg_hier_dump$(EXEEXT): $(pkg_hier_dump_OBJECTS) $(pkg_hier_dump_DEPENDENCIES)
- @rm -f pkg_hier_dump$(EXEEXT)
-- $(CXXLINK) $(pkg_hier_dump_LDFLAGS) $(pkg_hier_dump_OBJECTS) $(pkg_hier_dump_LDADD) $(LIBS)
-+ $(CXXLINK) $(pkg_hier_dump_LDFLAGS) $(pkg_hier_dump_OBJECTS) $(pkg_hier_dump_LDADD) $(LIBS) $(INTLLIBS)
-
- mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-diff -ru aptitude-0.4.4.orig/src/generic/problemresolver/Makefile.in aptitude-0.4.4.orig+iPhone/src/generic/problemresolver/Makefile.in
---- aptitude-0.4.4.orig/src/generic/problemresolver/Makefile.in 2006-10-27 04:28:51.000000000 +0000
-+++ aptitude-0.4.4.orig+iPhone/src/generic/problemresolver/Makefile.in 2008-05-13 09:10:29.000000000 +0000
-@@ -234,7 +234,7 @@
- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
- test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES)
- @rm -f test$(EXEEXT)
-- $(CXXLINK) $(test_LDFLAGS) $(test_OBJECTS) $(test_LDADD) $(LIBS)
-+ $(CXXLINK) $(test_LDFLAGS) $(test_OBJECTS) $(test_LDADD) $(LIBS) $(INTLLIBS)
-
- mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-diff -ru aptitude-0.4.4.orig/src/Makefile.in aptitude-0.4.4.orig+iPhone/src/Makefile.in
---- aptitude-0.4.4.orig/src/Makefile.in 2006-10-27 04:28:50.000000000 +0000
-+++ aptitude-0.4.4.orig+iPhone/src/Makefile.in 2008-05-13 09:36:20.000000000 +0000
-@@ -374,7 +374,7 @@
- -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
- aptitude$(EXEEXT): $(aptitude_OBJECTS) $(aptitude_DEPENDENCIES)
- @rm -f aptitude$(EXEEXT)
-- $(CXXLINK) $(aptitude_LDFLAGS) $(aptitude_OBJECTS) $(aptitude_LDADD) $(LIBS)
-+ $(CXXLINK) $(aptitude_LDFLAGS) $(aptitude_OBJECTS) $(aptitude_LDADD) $(LIBS) -liconv
-
- mostlyclean-compile:
- -rm -f *.$(OBJEXT)
diff --git a/data/aptitude/make.sh b/data/aptitude/make.sh
index 0846c54c6..cd029fb7b 100644
--- a/data/aptitude/make.sh
+++ b/data/aptitude/make.sh
@@ -1,6 +1,6 @@
shopt -s extglob
pkg:setup
-pkg:configure
-make AR="${PKG_TARG}-ar" CFLAGS='-O2 -mthumb'
+GOOGLETEST="$(PKG_WORK_ _googletest)" LIBS="-lrpmatch" CXXFLAGS="-std=c++14 -D_XOPEN_SOURCE_EXTENDED -Wno-error" CFLAGS="-D_XOPEN_SOURCE_EXTENDED" pkg:configure XAPIAN_CONFIG="$(PKG_DEST_ libxapian)/usr/bin/xapian-config" --disable-docs --disable-tests --disable-boost-lib-checks --with-boost-iostreams=boost_iostreams --with-boost-filesystem=boost_filesystem --with-boost-system=boost_system
+make AR="${PKG_TARG}-ar" -j8
pkg:install
rm -f "${PKG_DEST}"/usr/share/aptitude/!(aptitude-defaults|section-descriptions) #function_groups|function_pkgs
diff --git a/data/aptitude/namespace.diff b/data/aptitude/namespace.diff
deleted file mode 100644
index 3cc16639e..000000000
--- a/data/aptitude/namespace.diff
+++ /dev/null
@@ -1,22 +0,0 @@
-diff -ru aptitude_0.4.11.11.orig/src/generic/apt/matchers.cc aptitude_0.4.11.11.orig+iPhone/src/generic/apt/matchers.cc
---- aptitude_0.4.11.11.orig/src/generic/apt/matchers.cc 2008-11-20 03:17:12.000000000 +0000
-+++ aptitude_0.4.11.11.orig+iPhone/src/generic/apt/matchers.cc 2009-07-07 09:48:40.000000000 +0000
-@@ -4289,6 +4289,9 @@
- return real_matcher->get_match(pkg, cache, records, stack);
- }
-
-+namespace
-+{
-+
- class pkg_const_matcher : public pkg_matcher_real
- {
- pkgCache::PkgIterator match_pkg;
-@@ -4333,6 +4336,8 @@
- }
- };
-
-+}
-+
- pkg_matcher *make_const_matcher(const pkgCache::PkgIterator &pkg)
- {
- return new pkg_const_matcher(pkg);
diff --git a/data/aptitude/pkg_columnizer.diff b/data/aptitude/pkg_columnizer.diff
new file mode 100644
index 000000000..59b52f161
--- /dev/null
+++ b/data/aptitude/pkg_columnizer.diff
@@ -0,0 +1,24 @@
+diff -ur aptitude-0.8.10/src/pkg_columnizer.cc aptitude-0.8.10+iPhone/src/pkg_columnizer.cc
+--- aptitude-0.8.10/src/pkg_columnizer.cc 2017-08-19 07:59:07.000000000 -1000
++++ aptitude-0.8.10+iPhone/src/pkg_columnizer.cc 2018-08-31 15:13:18.000000000 -1000
+@@ -70,8 +70,8 @@
+ {30, false, false}, // origin
+ {10, true, true}, // archive
+ {9, false, false}, // sizechange
+- {strlen(PACKAGE), false, false}, // progname
+- {strlen(VERSION), false, false}, // progver
++ {(unsigned int)strlen(PACKAGE), false, false}, // progname
++ {(unsigned int)strlen(VERSION), false, false}, // progver
+ {12, false, false}, // brokencount
+ {16, false, false}, // diskusage, example (max): "Disk: -2,587 kB "
+ {22, false, false}, // downloadsize, example (max): " DL: 2,586 kB/2,587 kB"
+@@ -396,7 +396,8 @@
+ case diskusage:
+ {
+ size_t bufsize = 256;
+- char buf[bufsize] = "";
++ char buf[bufsize];
++ buf[0] = 0;
+ if (apt_cache_file && ((*apt_cache_file)->UsrSize() != 0))
+ {
+ char sign = ((*apt_cache_file)->UsrSize() > 0) ? '+' : '-';
diff --git a/data/aptitude/stringbuf.diff b/data/aptitude/stringbuf.diff
new file mode 100644
index 000000000..3e0d7a0ca
--- /dev/null
+++ b/data/aptitude/stringbuf.diff
@@ -0,0 +1,12 @@
+diff -ur aptitude-0.8.10/src/generic/util/util.cc aptitude-0.8.10+iPhone/src/generic/util/util.cc
+--- aptitude-0.8.10/src/generic/util/util.cc 2017-08-19 07:59:07.000000000 -1000
++++ aptitude-0.8.10+iPhone/src/generic/util/util.cc 2018-08-31 09:24:23.000000000 -1000
+@@ -242,7 +242,7 @@
+ // We need to copy "result", not "buf", because some
+ // versions of strerror_r can return a static string and
+ // leave "buf" alone.
+- string rval(result);
++ string rval(buf);
+ delete[] buf;
+ return rval;
+ }
diff --git a/data/aptitude/timestamp.diff b/data/aptitude/timestamp.diff
deleted file mode 100644
index 7276fa8ed..000000000
--- a/data/aptitude/timestamp.diff
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -ru aptitude-0.4.4.orig/src/main.cc aptitude-0.4.4.orig+iPhone/src/main.cc
---- aptitude-0.4.4.orig/src/main.cc 2006-10-27 04:26:08.000000000 +0000
-+++ aptitude-0.4.4.orig+iPhone/src/main.cc 2008-06-18 06:36:30.000000000 +0000
-@@ -96,8 +96,8 @@
-
- static void show_version()
- {
-- printf(_("%s %s compiled at %s %s\n"),
-- PACKAGE, VERSION, __DATE__, __TIME__);
-+ printf(_("%s %s\n"),
-+ PACKAGE, VERSION);
- #ifdef __GNUC__
- printf(_("Compiler: g++ %s\n"), __VERSION__);
- #endif
diff --git a/data/aptitude/turbulence.diff b/data/aptitude/turbulence.diff
deleted file mode 100644
index 19d1965c0..000000000
--- a/data/aptitude/turbulence.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru aptitude_0.4.11.11.orig/src/generic/apt/aptitude_resolver_universe.h aptitude_0.4.11.11.orig+iPhone/src/generic/apt/aptitude_resolver_universe.h
---- aptitude_0.4.11.11.orig/src/generic/apt/aptitude_resolver_universe.h 2008-11-20 03:17:12.000000000 +0000
-+++ aptitude_0.4.11.11.orig+iPhone/src/generic/apt/aptitude_resolver_universe.h 2014-06-12 08:14:47.000000000 +0000
-@@ -178,7 +178,7 @@
- unsigned int get_id() const
- {
- if(!ver.end())
-- return ver->ID;
-+ return ver->ID2 << 16 | ver->ID1;
- else
- // non-installed versions are faked.
- //
diff --git a/data/aptitude/wtf.diff b/data/aptitude/wtf.diff
new file mode 100644
index 000000000..a22c948d7
--- /dev/null
+++ b/data/aptitude/wtf.diff
@@ -0,0 +1,65 @@
+diff -ur /Users/sam/source/telesphoreo/telesphoreo-git/data/aptitude/aptitude-0.8.10+iPhone/src/generic/apt/config_file.cc ./src/generic/apt/config_file.cc
+--- /Users/sam/source/telesphoreo/telesphoreo-git/data/aptitude/aptitude-0.8.10+iPhone/src/generic/apt/config_file.cc 2017-08-19 07:59:07.000000000 -1000
++++ ./src/generic/apt/config_file.cc 2018-08-31 10:16:44.000000000 -1000
+@@ -32,7 +32,7 @@
+ #include <sstream>
+ #include <streambuf>
+
+-#include <error.h>
++#include <mach/error.h>
+ #include <sys/stat.h>
+
+
+diff -ur /Users/sam/source/telesphoreo/telesphoreo-git/data/aptitude/aptitude-0.8.10+iPhone/src/generic/problemresolver/problemresolver.h ./src/generic/problemresolver/problemresolver.h
+--- /Users/sam/source/telesphoreo/telesphoreo-git/data/aptitude/aptitude-0.8.10+iPhone/src/generic/problemresolver/problemresolver.h 2017-08-19 07:59:07.000000000 -1000
++++ ./src/generic/problemresolver/problemresolver.h 2018-08-31 10:14:01.000000000 -1000
+@@ -1705,11 +1704,12 @@
+ {
+ generic_problem_resolver &resolver;
+ const promotion &p;
++ search_graph graph;
+
+ public:
+ do_process_promotion(generic_problem_resolver &_resolver,
+- const promotion &_p)
+- : resolver(_resolver), p(_p)
++ const promotion &_p, search_graph _graph)
++ : resolver(_resolver), p(_p), graph(_graph)
+ {
+ }
+
+diff -ur aptitude-0.8.10/src/cmdline/cmdline_prompt.cc aptitude-0.8.10+iPhone/src/cmdline/cmdline_prompt.cc
+--- aptitude-0.8.10/src/cmdline/cmdline_prompt.cc 2017-08-19 07:59:07.000000000 -1000
++++ aptitude-0.8.10+iPhone/src/cmdline/cmdline_prompt.cc 2018-08-31 15:02:33.000000000 -1000
+@@ -45,6 +45,7 @@
+ #include <generic/util/util.h>
+
+ // System includes:
++#include <rpmatch.h>
+ #include <apt-pkg/algorithms.h>
+ #include <apt-pkg/error.h>
+ #include <apt-pkg/strutl.h>
+diff -ur aptitude-0.8.10/src/generic/problemresolver/Makefile.am aptitude-0.8.10+iPhone/src/generic/problemresolver/Makefile.am
+--- aptitude-0.8.10/src/generic/problemresolver/Makefile.am 2017-08-19 07:59:07.000000000 -1000
++++ aptitude-0.8.10+iPhone/src/generic/problemresolver/Makefile.am 2018-08-31 15:04:07.000000000 -1000
+@@ -6,7 +6,7 @@
+
+ noinst_PROGRAMS=test
+
+-test_LDADD = $(top_builddir)/src/generic/util/libgeneric-util.a libgeneric-problemresolver.a
++test_LDADD = $(top_builddir)/src/generic/util/libgeneric-util.a libgeneric-problemresolver.a $(LIBINTL)
+
+ libgeneric_problemresolver_a_SOURCES = \
+ choice.h choice_indexed_map.h choice_set.h \
+diff -ur aptitude-0.8.10/src/generic/problemresolver/Makefile.in aptitude-0.8.10+iPhone/src/generic/problemresolver/Makefile.in
+--- aptitude-0.8.10/src/generic/problemresolver/Makefile.in 2017-11-14 14:18:49.000000000 -1000
++++ aptitude-0.8.10+iPhone/src/generic/problemresolver/Makefile.in 2018-08-31 15:03:38.000000000 -1000
+@@ -352,7 +352,7 @@
+ AM_CPPFLAGS = -I$(top_builddir) -I$(srcdir) -I$(top_srcdir) -I$(top_srcdir)/src
+ EXTRA_DIST = model.tex test1.txt test3.txt test4.txt resolver_undo.h
+ noinst_LIBRARIES = libgeneric-problemresolver.a
+-test_LDADD = $(top_builddir)/src/generic/util/libgeneric-util.a libgeneric-problemresolver.a
++test_LDADD = $(top_builddir)/src/generic/util/libgeneric-util.a libgeneric-problemresolver.a -lintl
+ libgeneric_problemresolver_a_SOURCES = \
+ choice.h choice_indexed_map.h choice_set.h \
+ cost.cc cost.h \
diff --git a/data/aspell/_metadata/in.1443.00 b/data/aspell/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/aspell/_metadata/in.1443.00
diff --git a/data/aspell/_metadata/maintainer b/data/aspell/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/aspell/_metadata/maintainer
+++ b/data/aspell/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/aspell/_metadata/version b/data/aspell/_metadata/version
index 4db9f0caf..9bd3cd768 100644
--- a/data/aspell/_metadata/version
+++ b/data/aspell/_metadata/version
@@ -1 +1 @@
-0.60.6
+0.60.6.1
diff --git a/data/aspell/aspell-0.60.6.1.tar.gz b/data/aspell/aspell-0.60.6.1.tar.gz
new file mode 100644
index 000000000..45c12e24c
--- /dev/null
+++ b/data/aspell/aspell-0.60.6.1.tar.gz
Binary files differ
diff --git a/data/aspell/aspell-0.60.6.tar.gz b/data/aspell/aspell-0.60.6.tar.gz
deleted file mode 100644
index 48c11344b..000000000
--- a/data/aspell/aspell-0.60.6.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/aspell/make.sh b/data/aspell/make.sh
index 452a4bfd5..dc6b1ecb8 100644
--- a/data/aspell/make.sh
+++ b/data/aspell/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+autoreconf -f -i
pkg:configure
make
pkg:install
diff --git a/data/aspell/redclaration.diff b/data/aspell/redclaration.diff
new file mode 100644
index 000000000..5aa5076b6
--- /dev/null
+++ b/data/aspell/redclaration.diff
@@ -0,0 +1,19 @@
+diff -ur aspell-0.60.6.1/interfaces/cc/aspell.h aspell-0.60.6.1+iPhone/interfaces/cc/aspell.h
+--- aspell-0.60.6.1/interfaces/cc/aspell.h 2011-07-02 11:53:27.000000000 -1000
++++ aspell-0.60.6.1+iPhone/interfaces/cc/aspell.h 2018-08-01 18:23:56.000000000 -1000
+@@ -237,6 +237,7 @@
+ /******************************** errors ********************************/
+
+
++#ifndef __cplusplus
+ extern const struct AspellErrorInfo * const aerror_other;
+ extern const struct AspellErrorInfo * const aerror_operation_not_supported;
+ extern const struct AspellErrorInfo * const aerror_cant_copy;
+@@ -322,6 +323,7 @@
+ extern const struct AspellErrorInfo * const aerror_bad_magic;
+ extern const struct AspellErrorInfo * const aerror_expression;
+ extern const struct AspellErrorInfo * const aerror_invalid_expression;
++#endif
+
+
+ /******************************* speller *******************************/
diff --git a/data/autoconf/_metadata/in.1443.00 b/data/autoconf/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/autoconf/_metadata/in.1443.00
diff --git a/data/autoconf/_metadata/maintainer b/data/autoconf/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/autoconf/_metadata/maintainer
+++ b/data/autoconf/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/autoconf/_metadata/version b/data/autoconf/_metadata/version
index c95fea569..5e1b8b06f 100644
--- a/data/autoconf/_metadata/version
+++ b/data/autoconf/_metadata/version
@@ -1 +1 @@
-2.63
+2.69
diff --git a/data/autoconf/autoconf-2.63.tar.gz b/data/autoconf/autoconf-2.63.tar.gz
deleted file mode 100644
index d7b670559..000000000
--- a/data/autoconf/autoconf-2.63.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/autoconf/autoconf-2.69.tar.xz b/data/autoconf/autoconf-2.69.tar.xz
new file mode 100644
index 000000000..407896a30
--- /dev/null
+++ b/data/autoconf/autoconf-2.69.tar.xz
Binary files differ
diff --git a/data/automake/_metadata/in.1443.00 b/data/automake/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/automake/_metadata/in.1443.00
diff --git a/data/automake/_metadata/maintainer b/data/automake/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/automake/_metadata/maintainer
+++ b/data/automake/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/automake/_metadata/version b/data/automake/_metadata/version
index 5ad2491cf..41c11ffb7 100644
--- a/data/automake/_metadata/version
+++ b/data/automake/_metadata/version
@@ -1 +1 @@
-1.10.2
+1.16.1
diff --git a/data/automake/automake-1.10.2.tar.gz b/data/automake/automake-1.10.2.tar.gz
deleted file mode 100644
index 4fd4209d5..000000000
--- a/data/automake/automake-1.10.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/automake/automake-1.16.1.tar.xz b/data/automake/automake-1.16.1.tar.xz
new file mode 100644
index 000000000..c4f597a6a
--- /dev/null
+++ b/data/automake/automake-1.16.1.tar.xz
Binary files differ
diff --git a/data/autossh/_metadata/in.1443.00 b/data/autossh/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/autossh/_metadata/in.1443.00
diff --git a/data/autossh/_metadata/maintainer b/data/autossh/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/autossh/_metadata/maintainer
+++ b/data/autossh/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/base/_metadata/in.1443.00 b/data/base/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/base/_metadata/in.1443.00
diff --git a/data/base/_metadata/maintainer b/data/base/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/base/_metadata/maintainer
+++ b/data/base/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/base/make.sh b/data/base/make.sh
index fbd4f1b14..bc1cdd0b5 100644
--- a/data/base/make.sh
+++ b/data/base/make.sh
@@ -1 +1 @@
-tar -zxvf "${PKG_DATA}/base.tgz" -C "${PKG_DEST}"
+${FAKEROOT} tar -zxvf "${PKG_DATA}/base.tgz" -C "${PKG_DEST}"
diff --git a/data/bash/_metadata/in.1443.00 b/data/bash/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/bash/_metadata/in.1443.00
diff --git a/data/bash/_metadata/maintainer b/data/bash/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/bash/_metadata/maintainer
+++ b/data/bash/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/bash/_metadata/postinst b/data/bash/_metadata/postinst
new file mode 100755
index 000000000..de743ea96
--- /dev/null
+++ b/data/bash/_metadata/postinst
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+set -e
+
+if [ ! -e /bin/sh ]; then
+ ln -s bash /bin/sh
+fi
+
+case "$1" in
+ abort-remove|configure)
+ dpkg-divert --quiet --local --divert /bin/sh.distrib /bin/sh
+ update-alternatives --quiet --install /bin/sh sh /bin/bash 100 || true
+ ;;
+ *)
+ exit 0
+ ;;
+esac
diff --git a/data/bash/_metadata/prerm b/data/bash/_metadata/prerm
new file mode 100755
index 000000000..500128886
--- /dev/null
+++ b/data/bash/_metadata/prerm
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+ upgrade)
+ ;;
+
+ remove|deconfigure)
+ update-alternatives --quiet --remove sh /bin/bash
+ dpkg-divert --quiet --remove /bin/sh
+ if [ ! -e /bin/sh ]; then
+ echo There would be no shell!
+ ln -s bash /bin/sh
+ exit 1
+ fi
+ ;;
+
+ failed-upgrade)
+ ;;
+ *)
+ echo "prerm called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
diff --git a/data/bash/_metadata/readline.ver.iphoneos-arm b/data/bash/_metadata/readline.ver.iphoneos-arm
index 042fbf08c..cc40bca69 100644
--- a/data/bash/_metadata/readline.ver.iphoneos-arm
+++ b/data/bash/_metadata/readline.ver.iphoneos-arm
@@ -1 +1 @@
-6.0-7
+8.0
diff --git a/data/bash/_metadata/version b/data/bash/_metadata/version
index e2cdb5695..50e2274e6 100644
--- a/data/bash/_metadata/version
+++ b/data/bash/_metadata/version
@@ -1 +1 @@
-4.0.44
+5.0.3
diff --git a/data/bash/bash-4.0.tar.gz b/data/bash/bash-4.0.tar.gz
deleted file mode 100644
index b5b6b9d4e..000000000
--- a/data/bash/bash-4.0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/bash/bash-5.0.tar.gz b/data/bash/bash-5.0.tar.gz
new file mode 100644
index 000000000..9ae2caad7
--- /dev/null
+++ b/data/bash/bash-5.0.tar.gz
Binary files differ
diff --git a/data/bash/bash40-001 b/data/bash/bash40-001
deleted file mode 100644
index 5c6bb34b2..000000000
--- a/data/bash/bash40-001
+++ /dev/null
@@ -1,162 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-001
-
-Bug-Reported-by: Mike Frysinger <vapier@gentoo.org>
-Bug-Reference-ID: <200902211821.42188.vapier@gentoo.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00147.html
-
-Bug-Description:
-
-Bash has problems parsing certain constructs inside Posix-style $(...)
-command substitutions, mostly with backslash-quoting and reserved word
-recognition. This is an issue because the contents are parsed at the
-time the word containing the command substitution is read.
-
-Patch:
-
-*** ../bash-4.0/parse.y 2009-01-08 08:29:12.000000000 -0500
---- parse.y 2009-03-06 20:32:35.000000000 -0500
-***************
-*** 2928,2931 ****
---- 2932,2936 ----
- #define LEX_HEREDELIM 0x100 /* reading here-doc delimiter */
- #define LEX_STRIPDOC 0x200 /* <<- strip tabs from here doc delim */
-+ #define LEX_INWORD 0x400
-
- #define COMSUB_META(ch) ((ch) == ';' || (ch) == '&' || (ch) == '|')
-***************
-*** 3180,3184 ****
- int *lenp, flags;
- {
-! int count, ch, peekc, tflags, lex_rwlen, lex_firstind;
- int nestlen, ttranslen, start_lineno;
- char *ret, *nestret, *ttrans, *heredelim;
---- 3188,3192 ----
- int *lenp, flags;
- {
-! int count, ch, peekc, tflags, lex_rwlen, lex_wlen, lex_firstind;
- int nestlen, ttranslen, start_lineno;
- char *ret, *nestret, *ttrans, *heredelim;
-***************
-*** 3201,3205 ****
-
- start_lineno = line_number;
-! lex_rwlen = 0;
-
- heredelim = 0;
---- 3209,3213 ----
-
- start_lineno = line_number;
-! lex_rwlen = lex_wlen = 0;
-
- heredelim = 0;
-***************
-*** 3268,3271 ****
---- 3276,3319 ----
- }
-
-+ if (tflags & LEX_PASSNEXT) /* last char was backslash */
-+ {
-+ /*itrace("parse_comsub:%d: lex_passnext -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-+ tflags &= ~LEX_PASSNEXT;
-+ if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
-+ {
-+ if (retind > 0)
-+ retind--; /* swallow previously-added backslash */
-+ continue;
-+ }
-+
-+ RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-+ if MBTEST(ch == CTLESC || ch == CTLNUL)
-+ ret[retind++] = CTLESC;
-+ ret[retind++] = ch;
-+ continue;
-+ }
-+
-+ /* If this is a shell break character, we are not in a word. If not,
-+ we either start or continue a word. */
-+ if MBTEST(shellbreak (ch))
-+ {
-+ tflags &= ~LEX_INWORD;
-+ /*itrace("parse_comsub:%d: lex_inword -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-+ }
-+ else
-+ {
-+ if (tflags & LEX_INWORD)
-+ {
-+ lex_wlen++;
-+ /*itrace("parse_comsub:%d: lex_inword == 1 ch = `%c' lex_wlen = %d (%d)", line_number, ch, lex_wlen, __LINE__);*/
-+ }
-+ else
-+ {
-+ /*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-+ tflags |= LEX_INWORD;
-+ lex_wlen = 0;
-+ }
-+ }
-+
- /* Skip whitespace */
- if MBTEST(shellblank (ch) && lex_rwlen == 0)
-***************
-*** 3400,3428 ****
- }
- else
-! ch = peekc; /* fall through and continue XXX - this skips comments if peekc == '#' */
- }
-! /* Not exactly right yet, should handle shell metacharacters, too. If
-! any changes are made to this test, make analogous changes to subst.c:
-! extract_delimited_string(). */
-! else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (retind == 0 || ret[retind-1] == '\n' || shellblank (ret[retind - 1])))
- tflags |= LEX_INCOMMENT;
-
-! if (tflags & LEX_PASSNEXT) /* last char was backslash */
-! {
-! tflags &= ~LEX_PASSNEXT;
-! if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
-! {
-! if (retind > 0)
-! retind--; /* swallow previously-added backslash */
-! continue;
-! }
-!
-! RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-! if MBTEST(ch == CTLESC || ch == CTLNUL)
-! ret[retind++] = CTLESC;
-! ret[retind++] = ch;
-! continue;
-! }
-! else if MBTEST(ch == CTLESC || ch == CTLNUL) /* special shell escapes */
- {
- RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
---- 3442,3454 ----
- }
- else
-! ch = peekc; /* fall through and continue XXX */
- }
-! else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (((tflags & LEX_RESWDOK) && lex_rwlen == 0) || ((tflags & LEX_INWORD) && lex_wlen == 0)))
-! {
-! /*itrace("parse_comsub:%d: lex_incomment -> 1 (%d)", line_number, __LINE__);*/
- tflags |= LEX_INCOMMENT;
-+ }
-
-! if MBTEST(ch == CTLESC || ch == CTLNUL) /* special shell escapes */
- {
- RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 0
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 1
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-002 b/data/bash/bash40-002
deleted file mode 100644
index 18bd25e7b..000000000
--- a/data/bash/bash40-002
+++ /dev/null
@@ -1,43 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-002
-
-Bug-Reported-by: phil@Arcturus.universe
-Bug-Reference-ID: <20090221143709.13878.qmail@Arcturus.universe>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00142.html
-
-Bug-Description:
-
-A line inadvertenly omitted from a submitted patch results in core dumps
-when attempting filename completion while using the bash-completion
-package.
-
-Patch:
-
-*** ../bash-4.0/pcomplete.c 2009-02-01 17:12:31.000000000 -0500
---- pcomplete.c 2009-02-22 17:08:25.000000000 -0500
-***************
-*** 1033,1036 ****
---- 1033,1037 ----
-
- pps = &ps;
-+ save_parser_state (pps);
- begin_unwind_frame ("gen-shell-function-matches");
- add_unwind_protect (restore_parser_state, (char *)pps);
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 1
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 2
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-003 b/data/bash/bash40-003
deleted file mode 100644
index cc941d5e9..000000000
--- a/data/bash/bash40-003
+++ /dev/null
@@ -1,70 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-003
-
-Bug-Reported-by: Bernd Eggink <monoped@sudrala.de>
-Bug-Reference-ID: <49A323F5.60503@sudrala.de>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00177.html
-
-Bug-Description:
-
-Under certain circumstances, constructs containing command substitutions
-prevent PS1 from being re-evaluated and updated before being displayed.
-
-Patch:
-
-*** ../bash-4.0/parse.y 2009-01-08 08:29:12.000000000 -0500
---- parse.y 2009-02-25 15:58:25.000000000 -0500
-***************
-*** 1616,1623 ****
- int *ret;
-
-! ret = (int *)xmalloc (3 * sizeof (int));
- ret[0] = last_read_token;
- ret[1] = token_before_that;
- ret[2] = two_tokens_ago;
- return ret;
- }
---- 1616,1624 ----
- int *ret;
-
-! ret = (int *)xmalloc (4 * sizeof (int));
- ret[0] = last_read_token;
- ret[1] = token_before_that;
- ret[2] = two_tokens_ago;
-+ ret[3] = current_token;
- return ret;
- }
-***************
-*** 1632,1635 ****
---- 1633,1637 ----
- token_before_that = ts[1];
- two_tokens_ago = ts[2];
-+ current_token = ts[3];
- }
-
-***************
-*** 2669,2672 ****
---- 2671,2675 ----
- word_desc_to_read = (WORD_DESC *)NULL;
-
-+ current_token = '\n'; /* XXX */
- last_read_token = '\n';
- token_to_read = '\n';
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 2
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 3
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-004 b/data/bash/bash40-004
deleted file mode 100644
index 6ab6c4ee6..000000000
--- a/data/bash/bash40-004
+++ /dev/null
@@ -1,47 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-004
-
-Bug-Reported-by: Mike Frysinger <vapier@gentoo.org>
-Bug-Reference-ID: <200902231720.30519.vapier@gentoo.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00176.html
-
-Bug-Description:
-
-In some cases, enabling the `checkjobs' shell option will cause the shell
-to core dump when executing the `exit' builtin.
-
-Patch:
-
-*** ../bash-4.0/builtins/exit.def 2009-01-04 14:32:22.000000000 -0500
---- builtins/exit.def 2009-02-23 22:56:58.000000000 -0500
-***************
-*** 114,118 ****
- if (jobs[i] && STOPPED (i))
- stopmsg = JSTOPPED;
-! else if (check_jobs_at_exit && stopmsg == 0 && RUNNING (i))
- stopmsg = JRUNNING;
-
---- 114,118 ----
- if (jobs[i] && STOPPED (i))
- stopmsg = JSTOPPED;
-! else if (check_jobs_at_exit && stopmsg == 0 && jobs[i] && RUNNING (i))
- stopmsg = JRUNNING;
-
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 3
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 4
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-005 b/data/bash/bash40-005
deleted file mode 100644
index ccfde66da..000000000
--- a/data/bash/bash40-005
+++ /dev/null
@@ -1,63 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-005
-
-Bug-Reported-by: Pierre Gaston <pierre.gaston@gmail.com>
-Bug-Reference-ID: <c440c9800902242338n69f594a4nd66b8748def9cf18@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00206.html
-
-Bug-Description:
-
-The `declare' builtin dumped core when attempting to assign associative
-array indices containing some special characters, even when they were
-quoted before being expanded.
-
-Patch:
-
-*** ../bash-4.0/builtins/declare.def 2009-01-04 14:32:22.000000000 -0500
---- builtins/declare.def 2009-02-26 11:40:16.000000000 -0500
-***************
-*** 296,299 ****
---- 296,306 ----
- if (t = strchr (name, '[')) /* ] */
- {
-+ /* If offset != 0 we have already validated any array reference */
-+ if (offset == 0 && valid_array_reference (name) == 0)
-+ {
-+ sh_invalidid (name);
-+ assign_error++;
-+ NEXT_VARIABLE ();
-+ }
- subscript_start = t;
- *t = '\0';
-***************
-*** 485,489 ****
- /* declare -a name[[n]] or declare name[n] makes name an indexed
- array variable. */
-! else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0)
- var = convert_var_to_array (var);
- #endif /* ARRAY_VARS */
---- 492,496 ----
- /* declare -a name[[n]] or declare name[n] makes name an indexed
- array variable. */
-! else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0)
- var = convert_var_to_array (var);
- #endif /* ARRAY_VARS */
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 4
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 5
-
- #endif /* _PATCHLEVEL_H_ */
-
diff --git a/data/bash/bash40-006 b/data/bash/bash40-006
deleted file mode 100644
index 3d044c72e..000000000
--- a/data/bash/bash40-006
+++ /dev/null
@@ -1,43 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-006
-
-Bug-Reported-by: Evgeniy Zhemchugov <jini.zh@gmail.com>
-Bug-Reference-ID: <e7bc8dd30902241016m8bd543ej775717d007df975b@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00202.html
-
-Bug-Description:
-
-Bash did not parse pipelines using the |& construct correctly if the
-pipeline elements were not simple commands.
-
-Patch:
-
-*** ../bash-4.0/parse.y 2009-01-08 08:29:12.000000000 -0500
---- parse.y 2009-02-25 17:25:56.000000000 -0500
-***************
-*** 4478,4481 ****
---- 4478,4482 ----
- case AND_AND:
- case BANG:
-+ case BAR_AND:
- case DO:
- case DONE:
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 5
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 6
-
- #endif /* _PATCHLEVEL_H_ */
-
diff --git a/data/bash/bash40-007 b/data/bash/bash40-007
deleted file mode 100644
index 29071e129..000000000
--- a/data/bash/bash40-007
+++ /dev/null
@@ -1,263 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-007
-
-Bug-Reported-by: AnMaster <anmaster@tele2.se>
-Bug-Reference-ID: <49A41C18.80807@tele2.se>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00188.html
-
-Bug-Description:
-
-Bash had a number of problems parsing associative array subscripts containing
-special characters. The subscripts are supposed to be read as if they are
-enclosed between double quotes.
-
-Patch:
-
-*** ../bash-4.0/parse.y 2009-01-08 08:29:12.000000000 -0500
---- parse.y 2009-02-25 17:25:56.000000000 -0500
-***************
-*** 2919,2922 ****
---- 2919,2923 ----
- #define P_COMMAND 0x08 /* parsing a command, so look for comments */
- #define P_BACKQUOTE 0x10 /* parsing a backquoted command substitution */
-+ #define P_ARRAYSUB 0x20 /* parsing a [...] array subscript for assignment */
-
- /* Lexical state while parsing a grouping construct or $(...). */
-***************
-*** 3134,3137 ****
---- 3134,3139 ----
- FREE (nestret);
- }
-+ else if ((flags & P_ARRAYSUB) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */
-+ goto parse_dollar_word;
- }
- /* Parse an old-style command substitution within double quotes as a
-***************
-*** 3150,3153 ****
---- 3150,3154 ----
- /* check for $(), $[], or ${} inside quoted string. */
- {
-+ parse_dollar_word:
- if (open == ch) /* undo previous increment */
- count--;
-***************
-*** 4277,4281 ****
- (token_index == 0 && (parser_state&PST_COMPASSIGN))))
- {
-! ttok = parse_matched_pair (cd, '[', ']', &ttoklen, 0);
- if (ttok == &matched_pair_error)
- return -1; /* Bail immediately. */
---- 4277,4281 ----
- (token_index == 0 && (parser_state&PST_COMPASSIGN))))
- {
-! ttok = parse_matched_pair (cd, '[', ']', &ttoklen, P_ARRAYSUB);
- if (ttok == &matched_pair_error)
- return -1; /* Bail immediately. */
-*** ../bash-4.0/arrayfunc.c 2009-01-04 14:32:21.000000000 -0500
---- arrayfunc.c 2009-02-25 07:58:54.000000000 -0500
-***************
-*** 605,666 ****
- }
-
-! /* This function assumes s[i] == '['; returns with s[ret] == ']' if
-! an array subscript is correctly parsed. */
-! int
-! skipsubscript (s, i)
-! const char *s;
-! int i;
-! {
-! int count, c;
-! #if defined (HANDLE_MULTIBYTE)
-! mbstate_t state, state_bak;
-! size_t slength, mblength;
-! #endif
-!
-! #if defined (HANDLE_MULTIBYTE)
-! memset (&state, '\0', sizeof (mbstate_t));
-! slength = strlen (s + i);
-! #endif
-!
-! count = 1;
-! while (count)
-! {
-! /* Advance one (possibly multibyte) character in S starting at I. */
-! #if defined (HANDLE_MULTIBYTE)
-! if (MB_CUR_MAX > 1)
-! {
-! state_bak = state;
-! mblength = mbrlen (s + i, slength, &state);
-!
-! if (MB_INVALIDCH (mblength))
-! {
-! state = state_bak;
-! i++;
-! slength--;
-! }
-! else if (MB_NULLWCH (mblength))
-! return i;
-! else
-! {
-! i += mblength;
-! slength -= mblength;
-! }
-! }
-! else
-! #endif
-! ++i;
-!
-! c = s[i];
-!
-! if (c == 0)
-! break;
-! else if (c == '[')
-! count++;
-! else if (c == ']')
-! count--;
-! }
-!
-! return i;
-! }
-
- /* This function is called with SUB pointing to just after the beginning
---- 605,609 ----
- }
-
-! /* skipsubscript moved to subst.c to use private functions. 2009/02/24. */
-
- /* This function is called with SUB pointing to just after the beginning
-*** ../bash-4.0/subst.c 2009-01-28 14:34:12.000000000 -0500
---- subst.c 2009-02-25 09:18:33.000000000 -0500
-***************
-*** 223,226 ****
---- 223,227 ----
- static char *extract_delimited_string __P((char *, int *, char *, char *, char *, int));
- static char *extract_dollar_brace_string __P((char *, int *, int, int));
-+ static int skip_matched_pair __P((const char *, int, int, int, int));
-
- static char *pos_params __P((char *, int, int, int));
-***************
-*** 1375,1378 ****
---- 1376,1480 ----
- #define CQ_RETURN(x) do { no_longjmp_on_fatal_error = 0; return (x); } while (0)
-
-+ /* This function assumes s[i] == open; returns with s[ret] == close; used to
-+ parse array subscripts. FLAGS currently unused. */
-+ static int
-+ skip_matched_pair (string, start, open, close, flags)
-+ const char *string;
-+ int start, open, close, flags;
-+ {
-+ int i, pass_next, backq, si, c, count;
-+ size_t slen;
-+ char *temp, *ss;
-+ DECLARE_MBSTATE;
-+
-+ slen = strlen (string + start) + start;
-+ no_longjmp_on_fatal_error = 1;
-+
-+ i = start + 1; /* skip over leading bracket */
-+ count = 1;
-+ pass_next = backq = 0;
-+ ss = (char *)string;
-+ while (c = string[i])
-+ {
-+ if (pass_next)
-+ {
-+ pass_next = 0;
-+ if (c == 0)
-+ CQ_RETURN(i);
-+ ADVANCE_CHAR (string, slen, i);
-+ continue;
-+ }
-+ else if (c == '\\')
-+ {
-+ pass_next = 1;
-+ i++;
-+ continue;
-+ }
-+ else if (backq)
-+ {
-+ if (c == '`')
-+ backq = 0;
-+ ADVANCE_CHAR (string, slen, i);
-+ continue;
-+ }
-+ else if (c == '`')
-+ {
-+ backq = 1;
-+ i++;
-+ continue;
-+ }
-+ else if (c == open)
-+ {
-+ count++;
-+ i++;
-+ continue;
-+ }
-+ else if (c == close)
-+ {
-+ count--;
-+ if (count == 0)
-+ break;
-+ i++;
-+ continue;
-+ }
-+ else if (c == '\'' || c == '"')
-+ {
-+ i = (c == '\'') ? skip_single_quoted (ss, slen, ++i)
-+ : skip_double_quoted (ss, slen, ++i);
-+ /* no increment, the skip functions increment past the closing quote. */
-+ }
-+ else if (c == '$' && (string[i+1] == LPAREN || string[i+1] == LBRACE))
-+ {
-+ si = i + 2;
-+ if (string[si] == '\0')
-+ CQ_RETURN(si);
-+
-+ if (string[i+1] == LPAREN)
-+ temp = extract_delimited_string (ss, &si, "$(", "(", ")", SX_NOALLOC|SX_COMMAND); /* ) */
-+ else
-+ temp = extract_dollar_brace_string (ss, &si, 0, SX_NOALLOC);
-+ i = si;
-+ if (string[i] == '\0') /* don't increment i past EOS in loop */
-+ break;
-+ i++;
-+ continue;
-+ }
-+ else
-+ ADVANCE_CHAR (string, slen, i);
-+ }
-+
-+ CQ_RETURN(i);
-+ }
-+
-+ #if defined (ARRAY_VARS)
-+ int
-+ skipsubscript (string, start)
-+ const char *string;
-+ int start;
-+ {
-+ return (skip_matched_pair (string, start, '[', ']', 0));
-+ }
-+ #endif
-+
- /* Skip characters in STRING until we find a character in DELIMS, and return
- the index of that character. START is the index into string at which we
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 6
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 7
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-008 b/data/bash/bash40-008
deleted file mode 100644
index 7a2576aa6..000000000
--- a/data/bash/bash40-008
+++ /dev/null
@@ -1,49 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-008
-
-Bug-Reported-by: Mike Frysinger <vapier@gentoo.org>
-Bug-Reference-ID: <200902261030.54062.vapier@gentoo.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00230.html
-
-Bug-Description:
-
-Patch:
-
-*** ../bash-4.0/parse.y 2009-01-08 08:29:12.000000000 -0500
---- parse.y 2009-02-26 17:22:15.000000000 -0500
-***************
-*** 3443,3448 ****
- else
- shell_ungetc (peekc);
-! tflags |= LEX_HEREDELIM;
-! lex_firstind = -1;
- continue;
- }
---- 3443,3451 ----
- else
- shell_ungetc (peekc);
-! if (peekc != '<')
-! {
-! tflags |= LEX_HEREDELIM;
-! lex_firstind = -1;
-! }
- continue;
- }
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 7
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 8
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-009 b/data/bash/bash40-009
deleted file mode 100644
index f58391929..000000000
--- a/data/bash/bash40-009
+++ /dev/null
@@ -1,61 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-009
-
-Bug-Reported-by: "Chris F.A. Johnson" <cfajohnson@gmail.com>
-Bug-Reference-ID: <4d6b7$49a88cec$cef88ba3$16813@TEKSAVVY.COM>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00255.html
-
-Bug-Description:
-
-When the read builtin returned due to a timeout supplied with the -t option,
-it did not restore any modified terminal attribtues.
-
-Patch:
-
-*** ../bash-4.0/builtins/read.def 2009-01-15 23:11:21.000000000 -0500
---- builtins/read.def 2009-03-02 10:15:39.000000000 -0500
-***************
-*** 370,381 ****
- if (code)
- {
-! #if 0
- run_unwind_frame ("read_builtin");
-- return (EXECUTION_FAILURE);
-- #else
- input_string[i] = '\0'; /* make sure it's terminated */
-! retval = 128+SIGALRM;;
- goto assign_vars;
-- #endif
- }
- old_alrm = set_signal_handler (SIGALRM, sigalrm);
---- 370,381 ----
- if (code)
- {
-! /* Tricky. The top of the unwind-protect stack is the free of
-! input_string. We want to run all the rest and use input_string,
-! so we have to remove it from the stack. */
-! remove_unwind_protect ();
- run_unwind_frame ("read_builtin");
- input_string[i] = '\0'; /* make sure it's terminated */
-! retval = 128+SIGALRM;
- goto assign_vars;
- }
- old_alrm = set_signal_handler (SIGALRM, sigalrm);
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 8
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 9
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-010 b/data/bash/bash40-010
deleted file mode 100644
index 3229c5736..000000000
--- a/data/bash/bash40-010
+++ /dev/null
@@ -1,63 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-010
-
-Bug-Reported-by: Mike Frysinger <vapier@gentoo.org>
-Bug-Reference-ID: <200903030122.56206.vapier@gentoo.org>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00023.html
-
-Bug-Description:
-
-Bash has problems parsing comments in case statements when they appear in
-$(...) subshells.
-
-Patch:
-
-*** ../bash-4.0/parse.y 2009-03-07 15:18:35.000000000 -0500
---- parse.y 2009-03-07 14:16:32.000000000 -0500
-***************
-*** 3413,3419 ****
- tflags &= ~LEX_RESWDOK;
- }
-! else if (shellbreak (ch) == 0)
- {
-! tflags &= ~LEX_RESWDOK;
- /*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
- }
---- 3415,3433 ----
- tflags &= ~LEX_RESWDOK;
- }
-! else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0)))
-! ; /* don't modify LEX_RESWDOK if we're starting a comment */
-! else if MBTEST((tflags & LEX_INCASE) && ch != '\n')
-! /* If we can read a reserved word and we're in case, we're at the
-! point where we can read a new pattern list or an esac. We
-! handle the esac case above. If we read a newline, we want to
-! leave LEX_RESWDOK alone. If we read anything else, we want to
-! turn off LEX_RESWDOK, since we're going to read a pattern list. */
- {
-! tflags &= ~LEX_RESWDOK;
-! /*itrace("parse_comsub:%d: lex_incase == 1 found `%c', lex_reswordok -> 0", line_number, ch);*/
-! }
-! else if MBTEST(shellbreak (ch) == 0)
-! {
-! tflags &= ~LEX_RESWDOK;
- /*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
- }
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 9
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 10
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-011 b/data/bash/bash40-011
deleted file mode 100644
index 61d1d3a8a..000000000
--- a/data/bash/bash40-011
+++ /dev/null
@@ -1,49 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-011
-
-Bug-Reported-by: Matt Zyzik <Matt@ice.filescope.com>n
-Bug-Reference-ID: <20090312015018.C00741383ED@ice.filescope.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00092.html
-
-Bug-Description:
-
-When using the new |& operator following a simple command with a redirection,
-the redirection of stderr through the pipe was not performed under certain
-circumstances.
-
-Patch:
-
-*** ../bash-4.0-patched/parse.y 2009-03-08 21:24:47.000000000 -0400
---- parse.y 2009-03-12 21:36:23.000000000 -0400
-***************
-*** 1123,1127 ****
- REDIRECT *r;
-
-! tc = $1;
- rd.dest = 1;
- r = make_redirection (2, r_duplicating_output, rd);
---- 1123,1127 ----
- REDIRECT *r;
-
-! tc = $1->type == cm_simple ? (COMMAND *)$1->value.Simple : $1;
- rd.dest = 1;
- r = make_redirection (2, r_duplicating_output, rd);
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 10
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 11
-
- #endif /* _PATCHLEVEL_H_ */
-
diff --git a/data/bash/bash40-012 b/data/bash/bash40-012
deleted file mode 100644
index 014eae69a..000000000
--- a/data/bash/bash40-012
+++ /dev/null
@@ -1,47 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-012
-
-Bug-Reported-by: "Clark J. Wang" <dearvoid@gmail.com>
-Bug-Reference-ID: <a96f63770903132300v7816dfb7hb7f48d46048bf3cb@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00129.html
-
-Bug-Description:
-
-A case statement using the ;& pattern terminator followed immediately by
-"esac" caused a core dump due to a null pointer dereference.
-
-Patch:
-
-*** ../bash-4.0-patched/execute_cmd.c 2009-02-13 16:41:41.000000000 -0500
---- execute_cmd.c 2009-03-14 13:23:00.000000000 -0400
-***************
-*** 2931,2935 ****
- }
- while ((clauses->flags & CASEPAT_FALLTHROUGH) && (clauses = clauses->next));
-! if ((clauses->flags & CASEPAT_TESTNEXT) == 0)
- EXIT_CASE ();
- else
---- 2931,2935 ----
- }
- while ((clauses->flags & CASEPAT_FALLTHROUGH) && (clauses = clauses->next));
-! if (clauses == 0 || (clauses->flags & CASEPAT_TESTNEXT) == 0)
- EXIT_CASE ();
- else
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 11
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 12
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-013 b/data/bash/bash40-013
deleted file mode 100644
index df1fc493b..000000000
--- a/data/bash/bash40-013
+++ /dev/null
@@ -1,153 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-013
-
-Bug-Reported-by: jidanni@jidanni.org
-Bug-Reference-ID:
-Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=519165
-
-Bug-Description:
-
-Though references to $@ when there are no positional parameters will now
-cause the shell to exit if the `errexit' option has been enabled, constructs
-such as ${@:-foo} should not cause an exit.
-
-Patch:
-
-*** ../bash-4.0-patched/subst.c 2009-03-08 21:24:39.000000000 -0400
---- subst.c 2009-03-14 19:04:10.000000000 -0400
-***************
-*** 86,89 ****
---- 86,90 ----
- /* Flags for the `pflags' argument to param_expand() */
- #define PF_NOCOMSUB 0x01 /* Do not perform command substitution */
-+ #define PF_IGNUNBOUND 0x02 /* ignore unbound vars even if -u set */
-
- /* These defs make it easier to use the editor. */
-***************
-*** 264,268 ****
- static int chk_arithsub __P((const char *, int));
-
-! static WORD_DESC *parameter_brace_expand_word __P((char *, int, int));
- static WORD_DESC *parameter_brace_expand_indir __P((char *, int, int, int *, int *));
- static WORD_DESC *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *));
---- 265,269 ----
- static int chk_arithsub __P((const char *, int));
-
-! static WORD_DESC *parameter_brace_expand_word __P((char *, int, int, int));
- static WORD_DESC *parameter_brace_expand_indir __P((char *, int, int, int *, int *));
- static WORD_DESC *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *));
-***************
-*** 5196,5202 ****
- NAME was found inside of a double-quoted expression. */
- static WORD_DESC *
-! parameter_brace_expand_word (name, var_is_special, quoted)
- char *name;
-! int var_is_special, quoted;
- {
- WORD_DESC *ret;
---- 5197,5203 ----
- NAME was found inside of a double-quoted expression. */
- static WORD_DESC *
-! parameter_brace_expand_word (name, var_is_special, quoted, pflags)
- char *name;
-! int var_is_special, quoted, pflags;
- {
- WORD_DESC *ret;
-***************
-*** 5230,5234 ****
-
- ret = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL,
-! (int *)NULL, (int *)NULL, 0);
- free (tt);
- }
---- 5231,5235 ----
-
- ret = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL,
-! (int *)NULL, (int *)NULL, pflags);
- free (tt);
- }
-***************
-*** 5291,5295 ****
- WORD_DESC *w;
-
-! w = parameter_brace_expand_word (name, var_is_special, quoted);
- t = w->word;
- /* Have to dequote here if necessary */
---- 5292,5296 ----
- WORD_DESC *w;
-
-! w = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND);
- t = w->word;
- /* Have to dequote here if necessary */
-***************
-*** 5308,5312 ****
- return (WORD_DESC *)NULL;
-
-! w = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted);
- free (t);
-
---- 5309,5313 ----
- return (WORD_DESC *)NULL;
-
-! w = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted, 0);
- free (t);
-
-***************
-*** 6659,6663 ****
- tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
- else
-! tdesc = parameter_brace_expand_word (name, var_is_special, quoted);
-
- if (tdesc)
---- 6660,6664 ----
- tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
- else
-! tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND);
-
- if (tdesc)
-***************
-*** 6990,6994 ****
- list = list_rest_of_args ();
-
-! if (list == 0 && unbound_vars_is_error)
- {
- uerror[0] = '$';
---- 6991,6995 ----
- list = list_rest_of_args ();
-
-! if (list == 0 && unbound_vars_is_error && (pflags & PF_IGNUNBOUND) == 0)
- {
- uerror[0] = '$';
-***************
-*** 7052,7056 ****
- list = list_rest_of_args ();
-
-! if (list == 0 && unbound_vars_is_error)
- {
- uerror[0] = '$';
---- 7053,7057 ----
- list = list_rest_of_args ();
-
-! if (list == 0 && unbound_vars_is_error && (pflags & PF_IGNUNBOUND) == 0)
- {
- uerror[0] = '$';
-
-
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 12
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 13
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-014 b/data/bash/bash40-014
deleted file mode 100644
index eeba336cd..000000000
--- a/data/bash/bash40-014
+++ /dev/null
@@ -1,113 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-014
-
-Bug-Reported-by: smallnow@gmail.com
-Bug-Reference-ID: <49C460FE.40307@gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00166.html
-
-Bug-Description:
-
-When the fc builtin is run in a command substitution from a shell with history
-enabled, it does not correctly calculate the command on which to operate.
-
-Patch:
-
-*** ../bash-4.0-patched/builtins/fc.def 2009-01-04 14:32:22.000000000 -0500
---- builtins/fc.def 2009-03-21 14:03:43.000000000 -0400
-***************
-*** 89,92 ****
---- 89,93 ----
- extern int literal_history;
- extern int posixly_correct;
-+ extern int subshell_environment, interactive_shell;
-
- extern int unlink __P((const char *));
-***************
-*** 173,177 ****
- register char *sep;
- int numbering, reverse, listing, execute;
-! int histbeg, histend, last_hist, retval, opt;
- FILE *stream;
- REPL *rlist, *rl;
---- 174,178 ----
- register char *sep;
- int numbering, reverse, listing, execute;
-! int histbeg, histend, last_hist, retval, opt, rh;
- FILE *stream;
- REPL *rlist, *rl;
-***************
-*** 276,279 ****
---- 277,282 ----
- fprintf (stderr, "%s\n", command);
- fc_replhist (command); /* replace `fc -s' with command */
-+ /* Posix says that the re-executed commands should be entered into the
-+ history. */
- return (parse_and_execute (command, "fc", SEVAL_NOHIST));
- }
-***************
-*** 294,298 ****
- so we check hist_last_line_added. */
-
-! last_hist = i - remember_on_history - hist_last_line_added;
-
- if (list)
---- 297,306 ----
- so we check hist_last_line_added. */
-
-! /* Even though command substitution through parse_and_execute turns off
-! remember_on_history, command substitution in a shell when set -o history
-! has been enabled (interactive or not) should use it in the last_hist
-! calculation as if it were on. */
-! rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
-! last_hist = i - rh - hist_last_line_added;
-
- if (list)
-***************
-*** 457,461 ****
- HIST_ENTRY **hlist;
- {
-! int sign, n, clen;
- register int i, j;
- register char *s;
---- 465,469 ----
- HIST_ENTRY **hlist;
- {
-! int sign, n, clen, rh;
- register int i, j;
- register char *s;
-***************
-*** 473,477 ****
- so we check hist_last_line_added. This needs to agree with the
- calculation of last_hist in fc_builtin above. */
-! i -= remember_on_history + hist_last_line_added;
-
- /* No specification defaults to most recent command. */
---- 481,490 ----
- so we check hist_last_line_added. This needs to agree with the
- calculation of last_hist in fc_builtin above. */
-! /* Even though command substitution through parse_and_execute turns off
-! remember_on_history, command substitution in a shell when set -o history
-! has been enabled (interactive or not) should use it in the last_hist
-! calculation as if it were on. */
-! rh = remember_on_history || ((subshell_environment & SUBSHELL_COMSUB) && enable_history_list);
-! i -= rh + hist_last_line_added;
-
- /* No specification defaults to most recent command. */
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 13
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 14
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-015 b/data/bash/bash40-015
deleted file mode 100644
index c3e8d3346..000000000
--- a/data/bash/bash40-015
+++ /dev/null
@@ -1,84 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-015
-
-Bug-Reported-by: Lubomir Rintel <lkundrak@v3.sk>
-Bug-Reference-ID: <1237654931.32737.13.camel@localhost.localdomain>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00174.html
-
-Bug-Description:
-
-Deferring handling of signals which should cause the shell to terminate until
-it is "safe" to run the handler functions does not work for some terminating
-signals.
-
-Patch:
-
-*** ../bash-4.0-patched/sig.c 2009-01-04 14:32:41.000000000 -0500
---- sig.c 2009-03-22 14:47:56.000000000 -0400
-***************
-*** 449,452 ****
---- 449,494 ----
- int sig;
- {
-+ /* If we get called twice with the same signal before handling it,
-+ terminate right away. */
-+ if (
-+ #ifdef SIGHUP
-+ sig != SIGHUP &&
-+ #endif
-+ #ifdef SIGINT
-+ sig != SIGINT &&
-+ #endif
-+ #ifdef SIGDANGER
-+ sig != SIGDANGER &&
-+ #endif
-+ #ifdef SIGPIPE
-+ sig != SIGPIPE &&
-+ #endif
-+ #ifdef SIGALRM
-+ sig != SIGALRM &&
-+ #endif
-+ #ifdef SIGTERM
-+ sig != SIGTERM &&
-+ #endif
-+ #ifdef SIGXCPU
-+ sig != SIGXCPU &&
-+ #endif
-+ #ifdef SIGXFSZ
-+ sig != SIGXFSZ &&
-+ #endif
-+ #ifdef SIGVTALRM
-+ sig != SIGVTALRM &&
-+ #endif
-+ #ifdef SIGLOST
-+ sig != SIGLOST &&
-+ #endif
-+ #ifdef SIGUSR1
-+ sig != SIGUSR1 &&
-+ #endif
-+ #ifdef SIGUSR2
-+ sig != SIGUSR2 &&
-+ #endif
-+ sig == terminating_signal)
-+ terminate_immediately = 1;
-+
- terminating_signal = sig;
-
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 14
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 15
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-016 b/data/bash/bash40-016
deleted file mode 100644
index ace2e1e5f..000000000
--- a/data/bash/bash40-016
+++ /dev/null
@@ -1,104 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-016
-
-Bug-Reported-by: Brian J. Murrell" <brian@interlinx.bc.ca>
-Bug-Reference-ID: <1237564627.7666.12.camel@pc.interlinx.bc.ca>
-Bug-Reference-URL:http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00160.html
-
-Bug-Description:
-
-There are several problems with the handling of $LINENO in an ERR trap.
-
-Patch:
-
-*** ../bash-4.0-patched/trap.c 2009-01-16 17:07:53.000000000 -0500
---- trap.c 2009-03-20 21:37:00.000000000 -0400
-***************
-*** 756,760 ****
-
- flags = SEVAL_NONINT|SEVAL_NOHIST;
-! if (sig != DEBUG_TRAP && sig != RETURN_TRAP)
- flags |= SEVAL_RESETLINE;
- if (function_code == 0)
---- 756,760 ----
-
- flags = SEVAL_NONINT|SEVAL_NOHIST;
-! if (sig != DEBUG_TRAP && sig != RETURN_TRAP && sig != ERROR_TRAP)
- flags |= SEVAL_RESETLINE;
- if (function_code == 0)
-*** ../bash-4.0-patched/execute_cmd.c 2009-02-13 16:41:41.000000000 -0500
---- execute_cmd.c 2009-03-21 14:16:11.000000000 -0400
-***************
-*** 569,572 ****
---- 569,573 ----
- /* Fork a subshell, turn off the subshell bit, turn off job
- control and call execute_command () on the command again. */
-+ line_number_for_err_trap = line_number;
- paren_pid = make_child (savestring (make_command_string (command)),
- asynchronous);
-***************
-*** 611,615 ****
---- 612,619 ----
- {
- last_command_exit_value = exec_result;
-+ save_line_number = line_number;
-+ line_number = line_number_for_err_trap;
- run_error_trap ();
-+ line_number = save_line_number;
- }
-
-***************
-*** 767,771 ****
---- 771,777 ----
- {
- last_command_exit_value = exec_result;
-+ line_number = line_number_for_err_trap;
- run_error_trap ();
-+ line_number = save_line_number;
- }
-
-***************
-*** 2106,2109 ****
---- 2112,2116 ----
- COMMAND *tc, *second;
- int ignore_return, exec_result, was_error_trap, invert;
-+ volatile int save_line_number;
-
- ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
-***************
-*** 2175,2178 ****
---- 2182,2186 ----
- ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
-
-+ line_number_for_err_trap = line_number;
- exec_result = execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close);
-
-***************
-*** 2180,2184 ****
---- 2188,2195 ----
- {
- last_command_exit_value = exec_result;
-+ save_line_number = line_number;
-+ line_number = line_number_for_err_trap;
- run_error_trap ();
-+ line_number = save_line_number;
- }
-
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 15
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 16
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-017 b/data/bash/bash40-017
deleted file mode 100644
index ff42d7781..000000000
--- a/data/bash/bash40-017
+++ /dev/null
@@ -1,47 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-017
-
-Bug-Reported-by: Lubomir Rintel <lkundrak@v3.sk>
-Bug-Reference-ID: <1237654931.32737.13.camel@localhost.localdomain>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00174.html
-
-Bug-Description:
-
-Adding a null line to a here-document (e.g., by hitting EOF) causes the
-shell to dump core attempting to dereference the NULL pointer.
-
-Patch:
-
-*** ../bash-4.0-patched/parse.y 2009-03-08 21:24:47.000000000 -0400
---- parse.y 2009-03-21 14:38:42.000000000 -0400
-***************
-*** 1880,1884 ****
- ret = read_a_line (remove_quoted_newline);
- #if defined (HISTORY)
-! if (remember_on_history && (parser_state & PST_HEREDOC))
- {
- /* To make adding the the here-document body right, we need to rely
---- 1880,1884 ----
- ret = read_a_line (remove_quoted_newline);
- #if defined (HISTORY)
-! if (ret && remember_on_history && (parser_state & PST_HEREDOC))
- {
- /* To make adding the the here-document body right, we need to rely
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 16
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 17
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-018 b/data/bash/bash40-018
deleted file mode 100644
index 35f33e5fe..000000000
--- a/data/bash/bash40-018
+++ /dev/null
@@ -1,78 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-018
-
-Bug-Reported-by: Dan Price <dp@eng.sun.com>
-Bug-Reference-ID: <20090324171502.GA20582@eng.sun.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00184.html
-
-Bug-Description:
-
-A missing include file results in an empty function definition and a no-op
-when checking whether or not the window size has changed.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/sh/winsize.c 2008-08-12 13:53:51.000000000 -0400
---- lib/sh/winsize.c 2009-04-06 10:44:20.000000000 -0400
-***************
-*** 31,44 ****
- #include <sys/ioctl.h>
-
-! #if !defined (STRUCT_WINSIZE_IN_SYS_IOCTL)
-! /* For struct winsize on SCO */
-! /* sys/ptem.h has winsize but needs mblk_t from sys/stream.h */
-! # if defined (HAVE_SYS_PTEM_H) && defined (TIOCGWINSZ) && defined (SIGWINCH)
-! # if defined (HAVE_SYS_STREAM_H)
-! # include <sys/stream.h>
-! # endif
- # include <sys/ptem.h>
-! # endif /* HAVE_SYS_PTEM_H && TIOCGWINSZ && SIGWINCH */
-! #endif /* !STRUCT_WINSIZE_IN_SYS_IOCTL */
-
- #include <stdio.h>
---- 31,57 ----
- #include <sys/ioctl.h>
-
-! /* Try to find the definitions of `struct winsize' and TIOGCWINSZ */
-!
-! #if defined (GWINSZ_IN_SYS_IOCTL) && !defined (TIOCGWINSZ)
-! # include <sys/ioctl.h>
-! #endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */
-!
-! #if defined (STRUCT_WINSIZE_IN_TERMIOS) && !defined (STRUCT_WINSIZE_IN_SYS_IOCTL)
-! # include <termios.h>
-! #endif /* STRUCT_WINSIZE_IN_TERMIOS && !STRUCT_WINSIZE_IN_SYS_IOCTL */
-!
-! /* Not in either of the standard places, look around. */
-! #if !defined (STRUCT_WINSIZE_IN_TERMIOS) && !defined (STRUCT_WINSIZE_IN_SYS_IOCTL)
-! # if defined (HAVE_SYS_STREAM_H)
-! # include <sys/stream.h>
-! # endif /* HAVE_SYS_STREAM_H */
-! # if defined (HAVE_SYS_PTEM_H) /* SVR4.2, at least, has it here */
- # include <sys/ptem.h>
-! # define _IO_PTEM_H /* work around SVR4.2 1.1.4 bug */
-! # endif /* HAVE_SYS_PTEM_H */
-! # if defined (HAVE_SYS_PTE_H) /* ??? */
-! # include <sys/pte.h>
-! # endif /* HAVE_SYS_PTE_H */
-! #endif /* !STRUCT_WINSIZE_IN_TERMIOS && !STRUCT_WINSIZE_IN_SYS_IOCTL */
-
- #include <stdio.h>
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 17
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 18
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-019 b/data/bash/bash40-019
deleted file mode 100644
index 30efd6806..000000000
--- a/data/bash/bash40-019
+++ /dev/null
@@ -1,125 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-019
-
-Bug-Reported-by: Oleksiy Melnyk <lex@upc.ua>
-Bug-Reference-ID: <20090224142233.D2FEFC004@floyd.upc.ua>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00200.html
-
-Bug-Description:
-
-Using an external command as part of the DEBUG trap when job control is
-enabled causes pipelines to misbehave. The problem has to do with process
-groups assigned to the pipeline and terminal.
-
-Patch:
-
-*** ../bash-4.0-patched/jobs.c 2009-01-29 17:09:49.000000000 -0500
---- jobs.c 2009-04-17 21:08:20.000000000 -0400
-***************
-*** 443,447 ****
- the_pipeline = saved_pipeline;
- already_making_children = saved_already_making_children;
-! if (discard)
- discard_pipeline (old_pipeline);
- }
---- 443,447 ----
- the_pipeline = saved_pipeline;
- already_making_children = saved_already_making_children;
-! if (discard && old_pipeline)
- discard_pipeline (old_pipeline);
- }
-***************
-*** 4203,4205 ****
---- 4204,4225 ----
- }
-
-+ void
-+ save_pgrp_pipe (p, clear)
-+ int *p;
-+ int clear;
-+ {
-+ p[0] = pgrp_pipe[0];
-+ p[1] = pgrp_pipe[1];
-+ if (clear)
-+ pgrp_pipe[0] = pgrp_pipe[1] = -1;
-+ }
-+
-+ void
-+ restore_pgrp_pipe (p)
-+ int *p;
-+ {
-+ pgrp_pipe[0] = p[0];
-+ pgrp_pipe[1] = p[1];
-+ }
-+
- #endif /* PGRP_PIPE */
-*** ../bash-4.0-patched/jobs.h 2009-01-04 14:32:29.000000000 -0500
---- jobs.h 2009-04-17 15:07:51.000000000 -0400
-***************
-*** 236,239 ****
---- 236,241 ----
-
- extern void close_pgrp_pipe __P((void));
-+ extern void save_pgrp_pipe __P((int *, int));
-+ extern void restore_pgrp_pipe __P((int *));
-
- #if defined (JOB_CONTROL)
-*** ../bash-4.0-patched/trap.c 2009-01-16 17:07:53.000000000 -0500
---- trap.c 2009-04-17 22:22:36.000000000 -0400
-***************
-*** 799,802 ****
---- 799,804 ----
- {
- int trap_exit_value;
-+ pid_t save_pgrp;
-+ int save_pipe[2];
-
- /* XXX - question: should the DEBUG trap inherit the RETURN trap? */
-***************
-*** 804,808 ****
---- 806,832 ----
- if ((sigmodes[DEBUG_TRAP] & SIG_TRAPPED) && ((sigmodes[DEBUG_TRAP] & SIG_IGNORED) == 0) && ((sigmodes[DEBUG_TRAP] & SIG_INPROGRESS) == 0))
- {
-+ #if defined (JOB_CONTROL)
-+ save_pgrp = pipeline_pgrp;
-+ pipeline_pgrp = 0;
-+ save_pipeline (1);
-+ # if defined (PGRP_PIPE)
-+ save_pgrp_pipe (save_pipe, 1);
-+ # endif
-+ stop_making_children ();
-+ #endif
-+
- trap_exit_value = _run_trap_internal (DEBUG_TRAP, "debug trap");
-+
-+ #if defined (JOB_CONTROL)
-+ pipeline_pgrp = save_pgrp;
-+ restore_pipeline (1);
-+ # if defined (PGRP_PIPE)
-+ close_pgrp_pipe ();
-+ restore_pgrp_pipe (save_pipe);
-+ # endif
-+ if (pipeline_pgrp > 0)
-+ give_terminal_to (pipeline_pgrp, 1);
-+ notify_and_cleanup ();
-+ #endif
-
- #if defined (DEBUGGER)
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 18
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 19
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-020 b/data/bash/bash40-020
deleted file mode 100644
index 885f15efe..000000000
--- a/data/bash/bash40-020
+++ /dev/null
@@ -1,83 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-020
-
-Bug-Reported-by: Nicolai Lissner <nlissne@linux01.org>
-Bug-Reference-ID: <20090412020510.GA29658@lilith>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-04/msg00104.html
-
-Bug-Description:
-
-If a SIGWINCH arrives while bash is performing redisplay, multi-line prompts
-are displayed incorrectly due to the display code being called recursively.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/readline/readline.h 2009-01-04 14:32:33.000000000 -0500
---- lib/readline/readline.h 2009-04-13 08:47:00.000000000 -0400
-***************
-*** 815,820 ****
- #define RL_STATE_MULTIKEY 0x200000 /* reading multiple-key command */
- #define RL_STATE_VICMDONCE 0x400000 /* entered vi command mode at least once */
-
-! #define RL_STATE_DONE 0x800000 /* done; accepted line */
-
- #define RL_SETSTATE(x) (rl_readline_state |= (x))
---- 815,821 ----
- #define RL_STATE_MULTIKEY 0x200000 /* reading multiple-key command */
- #define RL_STATE_VICMDONCE 0x400000 /* entered vi command mode at least once */
-+ #define RL_STATE_REDISPLAYING 0x800000 /* updating terminal display */
-
-! #define RL_STATE_DONE 0x1000000 /* done; accepted line */
-
- #define RL_SETSTATE(x) (rl_readline_state |= (x))
-*** ../bash-4.0-patched/lib/readline/display.c 2009-01-04 14:32:32.000000000 -0500
---- lib/readline/display.c 2009-04-13 08:29:54.000000000 -0400
-***************
-*** 513,516 ****
---- 513,517 ----
- data structures. */
- _rl_block_sigint ();
-+ RL_SETSTATE (RL_STATE_REDISPLAYING);
-
- if (!rl_display_prompt)
-***************
-*** 1237,1240 ****
---- 1238,1242 ----
- }
-
-+ RL_UNSETSTATE (RL_STATE_REDISPLAYING);
- _rl_release_sigint ();
- }
-*** ../bash-4.0-patched/lib/readline/terminal.c 2009-01-04 14:32:34.000000000 -0500
---- lib/readline/terminal.c 2009-04-13 08:43:00.000000000 -0400
-***************
-*** 356,360 ****
- if (CUSTOM_REDISPLAY_FUNC ())
- rl_forced_update_display ();
-! else
- _rl_redisplay_after_sigwinch ();
- }
---- 356,360 ----
- if (CUSTOM_REDISPLAY_FUNC ())
- rl_forced_update_display ();
-! else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0)
- _rl_redisplay_after_sigwinch ();
- }
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 19
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 20
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-021 b/data/bash/bash40-021
deleted file mode 100644
index cf6ee1f5a..000000000
--- a/data/bash/bash40-021
+++ /dev/null
@@ -1,48 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-021
-
-Bug-Reported-by: Matt Zyzik <matt.zyzik@nyu.edu>
-Bug-Reference-ID: <20090319015542.696F62B8E8@ice.filescope.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00149.html
-
-Bug-Description:
-
-When not in a locale supporting multibyte characters, readline will occasionally
-not erase characters between the cursor position and the end of the line
-when killing text backwards.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/readline/display.c 2009-01-04 14:32:32.000000000 -0500
---- lib/readline/display.c 2009-04-14 14:00:18.000000000 -0400
-***************
-*** 1775,1779 ****
- adjust col_lendiff based on the difference between _rl_last_c_pos
- and _rl_screenwidth */
-! if (col_lendiff && (_rl_last_c_pos < _rl_screenwidth))
- #endif
- {
---- 1775,1779 ----
- adjust col_lendiff based on the difference between _rl_last_c_pos
- and _rl_screenwidth */
-! if (col_lendiff && ((MB_CUR_MAX == 1 || rl_byte_oriented) || (_rl_last_c_pos < _rl_screenwidth)))
- #endif
- {
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 20
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 21
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-022 b/data/bash/bash40-022
deleted file mode 100644
index 5b6853805..000000000
--- a/data/bash/bash40-022
+++ /dev/null
@@ -1,48 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-022
-
-Bug-Reported-by: Bernd Eggink <monoped@sudrala.de>
-Bug-Reference-ID: <49E65407.5010206@sudrala.de>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-04/msg00118.html
-
-Bug-Description:
-
-When parsing case statements in command substitutions, the shell did not
-note that a newline is a shell metacharacter and can legally be followed
-by a reserved word (e.g., `esac').
-
-Patch:
-
-*** ../bash-4.0-patched/parse.y 2009-03-08 21:24:47.000000000 -0400
---- parse.y 2009-04-15 22:27:56.000000000 -0400
-***************
-*** 3355,3359 ****
-
- /* Meta-characters that can introduce a reserved word. Not perfect yet. */
-! if MBTEST((tflags & LEX_RESWDOK) == 0 && (tflags & LEX_CKCASE) && (tflags & LEX_INCOMMENT) == 0 && shellmeta(ch))
- {
- /* Add this character. */
---- 3375,3379 ----
-
- /* Meta-characters that can introduce a reserved word. Not perfect yet. */
-! if MBTEST((tflags & LEX_RESWDOK) == 0 && (tflags & LEX_CKCASE) && (tflags & LEX_INCOMMENT) == 0 && (shellmeta(ch) || ch == '\n'))
- {
- /* Add this character. */
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 21
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 22
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-023 b/data/bash/bash40-023
deleted file mode 100644
index d2376c7da..000000000
--- a/data/bash/bash40-023
+++ /dev/null
@@ -1,62 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-023
-
-Bug-Reported-by: Andreas Schwab <schwab@linux-m68k.org>
-Bug-Reference-ID: <m21vrhhx08.fsf@igel.home>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-04/msg00160.html
-
-Bug-Description:
-
-If the prompt length exactly matches the screen width, and the prompt ends
-with invisible characters, readline positions the cursor incorrectly.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/readline/display.c 2009-01-04 14:32:32.000000000 -0500
---- lib/readline/display.c 2009-04-25 21:42:18.000000000 -0400
-***************
-*** 1895,1898 ****
---- 1897,1904 ----
- woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset);
- cpos = _rl_last_c_pos;
-+
-+ if (cpos == 0 && cpos == new)
-+ return;
-+
- #if defined (HANDLE_MULTIBYTE)
- /* If we have multibyte characters, NEW is indexed by the buffer point in
-***************
-*** 1908,1914 ****
- desired display position. */
- if ((new > prompt_last_invisible) || /* XXX - don't use woff here */
-! (prompt_physical_chars > _rl_screenwidth &&
- _rl_last_v_pos == prompt_last_screen_line &&
-! wrap_offset >= woff &&
- new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset)))
- /* XXX last comparison might need to be >= */
---- 1914,1920 ----
- desired display position. */
- if ((new > prompt_last_invisible) || /* XXX - don't use woff here */
-! (prompt_physical_chars >= _rl_screenwidth &&
- _rl_last_v_pos == prompt_last_screen_line &&
-! wrap_offset >= woff && dpos >= woff &&
- new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset)))
- /* XXX last comparison might need to be >= */
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 22
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 23
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-024 b/data/bash/bash40-024
deleted file mode 100644
index ac2058ae3..000000000
--- a/data/bash/bash40-024
+++ /dev/null
@@ -1,112 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-024
-
-Bug-Reported-by: Matt Zyzik <matt.zyzik@nyu.edu>
-Bug-Reference-ID: <20090405205428.4FDEA1C7175@ice.filescope.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-04/msg00021.html
-
-Bug-Description:
-
-When using the ** globbing operator, bash will incorrectly add an extra
-directory name when the preceding directory name ends with `*' or an empty
-string when there is no preceding directory name.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/glob/glob.c 2009-01-04 14:32:30.000000000 -0500
---- lib/glob/glob.c 2009-04-28 10:22:29.000000000 -0400
-***************
-*** 357,361 ****
- if (ep)
- *ep = 0;
-! if (r)
- free (r);
- return (struct globval *)0;
---- 357,361 ----
- if (ep)
- *ep = 0;
-! if (r && r != &glob_error_return)
- free (r);
- return (struct globval *)0;
-***************
-*** 666,671 ****
- }
-
-! /* compat: if GX_ALLDIRS, add the passed directory also */
-! if (add_current)
- {
- sdlen = strlen (dir);
---- 666,672 ----
- }
-
-! /* compat: if GX_ALLDIRS, add the passed directory also, but don't add an
-! empty directory name. */
-! if (add_current && (flags & GX_NULLDIR) == 0)
- {
- sdlen = strlen (dir);
-***************
-*** 679,686 ****
- nextlink->next = lastlink;
- lastlink = nextlink;
-! if (flags & GX_NULLDIR)
-! nextname[0] = '\0';
-! else
-! bcopy (dir, nextname, sdlen + 1);
- ++count;
- }
---- 680,684 ----
- nextlink->next = lastlink;
- lastlink = nextlink;
-! bcopy (dir, nextname, sdlen + 1);
- ++count;
- }
-***************
-*** 943,947 ****
- register unsigned int l;
-
-! array = glob_dir_to_array (directories[i], temp_results, flags);
- l = 0;
- while (array[l] != NULL)
---- 941,950 ----
- register unsigned int l;
-
-! /* If we're expanding **, we don't need to glue the directory
-! name to the results; we've already done it in glob_vector */
-! if ((dflags & GX_ALLDIRS) && filename[0] == '*' && filename[1] == '*' && filename[2] == '\0')
-! array = temp_results;
-! else
-! array = glob_dir_to_array (directories[i], temp_results, flags);
- l = 0;
- while (array[l] != NULL)
-***************
-*** 960,964 ****
-
- /* Note that the elements of ARRAY are not freed. */
-! free ((char *) array);
- }
- }
---- 963,968 ----
-
- /* Note that the elements of ARRAY are not freed. */
-! if (array != temp_results)
-! free ((char *) array);
- }
- }
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 23
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 24
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-025 b/data/bash/bash40-025
deleted file mode 100644
index 30b38ba31..000000000
--- a/data/bash/bash40-025
+++ /dev/null
@@ -1,104 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-025
-
-Bug-Reported-by: Matt Zyzik <matt.zyzik@nyu.edu>
-Bug-Reference-ID: <20090519011418.GA21431@ice.filescope.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-05/msg00044.html
-
-Bug-Description:
-
-bash40-024 introduced a regression for constructs like **/*.cs; that
-expansion would no longer include matching files in the current directory.
-This patch undoes portions of bash40-024 and fixes the original problem
-in a different way.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/glob/glob.c 2009-05-22 12:32:26.000000000 -0400
---- lib/glob/glob.c 2009-05-22 12:35:55.000000000 -0400
-***************
-*** 666,672 ****
- }
-
-! /* compat: if GX_ALLDIRS, add the passed directory also, but don't add an
-! empty directory name. */
-! if (add_current && (flags & GX_NULLDIR) == 0)
- {
- sdlen = strlen (dir);
---- 666,673 ----
- }
-
-! /* compat: if GX_ADDCURDIR, add the passed directory also. Add an empty
-! directory name as a placeholder if GX_NULLDIR (in which case the passed
-! directory name is "."). */
-! if (add_current)
- {
- sdlen = strlen (dir);
-***************
-*** 680,684 ****
- nextlink->next = lastlink;
- lastlink = nextlink;
-! bcopy (dir, nextname, sdlen + 1);
- ++count;
- }
---- 681,688 ----
- nextlink->next = lastlink;
- lastlink = nextlink;
-! if (flags & GX_NULLDIR)
-! nextname[0] = '\0';
-! else
-! bcopy (dir, nextname, sdlen + 1);
- ++count;
- }
-***************
-*** 1008,1016 ****
- /* Just return what glob_vector () returns appended to the
- directory name. */
- dflags = flags & ~GX_MARKDIRS;
- if (directory_len == 0)
- dflags |= GX_NULLDIR;
- if ((flags & GX_GLOBSTAR) && filename[0] == '*' && filename[1] == '*' && filename[2] == '\0')
-! dflags |= GX_ALLDIRS|GX_ADDCURDIR;
- temp_results = glob_vector (filename,
- (directory_len == 0 ? "." : directory_name),
---- 1012,1033 ----
- /* Just return what glob_vector () returns appended to the
- directory name. */
-+ /* If flags & GX_ALLDIRS, we're called recursively */
- dflags = flags & ~GX_MARKDIRS;
- if (directory_len == 0)
- dflags |= GX_NULLDIR;
- if ((flags & GX_GLOBSTAR) && filename[0] == '*' && filename[1] == '*' && filename[2] == '\0')
-! {
-! dflags |= GX_ALLDIRS|GX_ADDCURDIR;
-! #if 0
-! /* If we want all directories (dflags & GX_ALLDIRS) and we're not
-! being called recursively as something like `echo **/*.o'
-! ((flags & GX_ALLDIRS) == 0), we want to prevent glob_vector from
-! adding a null directory name to the front of the temp_results
-! array. We turn off ADDCURDIR if not called recursively and
-! dlen == 0 */
-! #endif
-! if (directory_len == 0 && (flags & GX_ALLDIRS) == 0)
-! dflags &= ~GX_ADDCURDIR;
-! }
- temp_results = glob_vector (filename,
- (directory_len == 0 ? "." : directory_name),
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 24
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 25
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-026 b/data/bash/bash40-026
deleted file mode 100644
index 412b2c71b..000000000
--- a/data/bash/bash40-026
+++ /dev/null
@@ -1,56 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-026
-
-Bug-Reported-by: Sergei Steshenko <sergstesh@yahoo.com>
-Bug-Reference-ID: <670181.38883.qm@web35204.mail.mud.yahoo.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-05/msg00059.html
-
-Bug-Description:
-
-A forgotten line in externs.h caused compilation errors to occur on some
-systems (e.g., Cygwin).
-
-Patch:
-
-*** ../bash-4.0-patched/externs.h 2009-01-18 18:29:29.000000000 -0500
---- externs.h 2009-06-02 09:05:40.000000000 -0400
-***************
-*** 193,196 ****
---- 193,198 ----
-
- /* Declarations for functions defined in lib/sh/fpurge.c */
-+
-+ #if defined NEED_FPURGE_DECL
- #if !HAVE_DECL_FPURGE
-
-***************
-*** 201,205 ****
-
- #endif /* HAVE_DECL_FPURGE */
-!
-
- /* Declarations for functions defined in lib/sh/getcwd.c */
---- 203,207 ----
-
- #endif /* HAVE_DECL_FPURGE */
-! #endif /* NEED_FPURGE_DECL */
-
- /* Declarations for functions defined in lib/sh/getcwd.c */
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 25
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 26
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-027 b/data/bash/bash40-027
deleted file mode 100644
index a96ce4b1a..000000000
--- a/data/bash/bash40-027
+++ /dev/null
@@ -1,67 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-027
-
-Bug-Reported-by: jim@jim.sh
-Bug-Reference-ID: <200905262140.n4QLeO4X030664@psychosis.jim.sh>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-05/msg00074.html
-
-Bug-Description:
-
-There are occasional cursor positioning errors when using readline's
-horizontal scroll mode.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/readline/display.c 2009-05-22 12:32:25.000000000 -0400
---- lib/readline/display.c 2009-05-29 23:32:20.000000000 -0400
-***************
-*** 1190,1196 ****
- line[t - 1] = '>';
-
-! if (!rl_display_fixed || forced_display || lmargin != last_lmargin)
- {
- forced_display = 0;
- update_line (&visible_line[last_lmargin],
- &invisible_line[lmargin],
---- 1192,1200 ----
- line[t - 1] = '>';
-
-! if (rl_display_fixed == 0 || forced_display || lmargin != last_lmargin)
- {
- forced_display = 0;
-+ o_cpos = _rl_last_c_pos;
-+ cpos_adjusted = 0;
- update_line (&visible_line[last_lmargin],
- &invisible_line[lmargin],
-***************
-*** 1200,1203 ****
---- 1204,1214 ----
- 0);
-
-+ if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
-+ cpos_adjusted == 0 &&
-+ _rl_last_c_pos != o_cpos &&
-+ _rl_last_c_pos > wrap_offset &&
-+ o_cpos < prompt_last_invisible)
-+ _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */
-+
- /* If the visible new line is shorter than the old, but the number
- of invisible characters is greater, and we are at the end of
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 26
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 27
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-028 b/data/bash/bash40-028
deleted file mode 100644
index a5b0b60a3..000000000
--- a/data/bash/bash40-028
+++ /dev/null
@@ -1,172 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-028
-
-Bug-Reported-by: martin f krafft <madduck@debian.org>
-Bug-Reference-ID: <4A4E39E7.5080807@debian.org>
-Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=519165
- http://lists.gnu.org/archive/html/bug-bash/2009-07/msg00011.html
-
-Bug-Description:
-
-bash-4.0 reverted to the historical shell behavior of raising an error
-when $@ or $* was expanded after `set -u' had been executed and there
-were no positional parameters. The Posix working group has since
-clarified the standard's position on the issue, and $@ and $* are now the
-only variables, parameters, or special parameters that do not raise an
-error when unset if set -u is enabled.
-
-Patch:
-
-*** ../bash-4.0-patched/subst.c Mon Mar 23 11:34:55 2009
---- subst.c Wed Jun 17 18:12:18 2009
-***************
-*** 6768,6778 ****
-
- case RBRACE:
-! if (var_is_set == 0 && unbound_vars_is_error)
- {
- err_unboundvar (name);
- FREE (value);
- FREE (temp);
- free (name);
-- last_command_exit_value = EXECUTION_FAILURE;
- return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
- }
---- 6794,6804 ----
-
- case RBRACE:
-! if (var_is_set == 0 && unbound_vars_is_error && ((name[0] != '@' && name[0] != '*') || name[1]))
- {
-+ last_command_exit_value = EXECUTION_FAILURE;
- err_unboundvar (name);
- FREE (value);
- FREE (temp);
- free (name);
- return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
- }
-***************
-*** 6991,6994 ****
---- 7017,7029 ----
- list = list_rest_of_args ();
-
-+ #if 0
-+ /* According to austin-group posix proposal by Geoff Clare in
-+ <20090505091501.GA10097@squonk.masqnet> of 5 May 2009:
-+
-+ "The shell shall write a message to standard error and
-+ immediately exit when it tries to expand an unset parameter
-+ other than the '@' and '*' special parameters."
-+ */
-+
- if (list == 0 && unbound_vars_is_error && (pflags & PF_IGNUNBOUND) == 0)
- {
-***************
-*** 6996,7003 ****
- uerror[1] = '*';
- uerror[2] = '\0';
-- err_unboundvar (uerror);
- last_command_exit_value = EXECUTION_FAILURE;
- return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
- }
-
- /* If there are no command-line arguments, this should just
---- 7031,7039 ----
- uerror[1] = '*';
- uerror[2] = '\0';
- last_command_exit_value = EXECUTION_FAILURE;
-+ err_unboundvar (uerror);
- return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
- }
-+ #endif
-
- /* If there are no command-line arguments, this should just
-***************
-*** 7053,7056 ****
---- 7089,7101 ----
- list = list_rest_of_args ();
-
-+ #if 0
-+ /* According to austin-group posix proposal by Geoff Clare in
-+ <20090505091501.GA10097@squonk.masqnet> of 5 May 2009:
-+
-+ "The shell shall write a message to standard error and
-+ immediately exit when it tries to expand an unset parameter
-+ other than the '@' and '*' special parameters."
-+ */
-+
- if (list == 0 && unbound_vars_is_error && (pflags & PF_IGNUNBOUND) == 0)
- {
-***************
-*** 7058,7065 ****
- uerror[1] = '@';
- uerror[2] = '\0';
-- err_unboundvar (uerror);
- last_command_exit_value = EXECUTION_FAILURE;
- return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
- }
-
- /* We want to flag the fact that we saw this. We can't turn
---- 7103,7111 ----
- uerror[1] = '@';
- uerror[2] = '\0';
- last_command_exit_value = EXECUTION_FAILURE;
-+ err_unboundvar (uerror);
- return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
- }
-+ #endif
-
- /* We want to flag the fact that we saw this. We can't turn
-*** ../bash-4.0-patched/doc/bash.1 Wed Feb 18 15:13:56 2009
---- doc/bash.1 Wed Jun 17 08:51:19 2009
-***************
-*** 8258,8264 ****
- .TP 8
- .B \-u
-! Treat unset variables as an error when performing
- parameter expansion. If expansion is attempted on an
-! unset variable, the shell prints an error message, and,
- if not interactive, exits with a non-zero status.
- .TP 8
---- 8274,8281 ----
- .TP 8
- .B \-u
-! Treat unset variables and parameters other than the special
-! parameters "@" and "*" as an error when performing
- parameter expansion. If expansion is attempted on an
-! unset variable or parameter, the shell prints an error message, and,
- if not interactive, exits with a non-zero status.
- .TP 8
-*** ../bash-4.0-patched/doc/bashref.texi Wed Feb 18 15:14:43 2009
---- doc/bashref.texi Wed Jun 17 08:50:46 2009
-***************
-*** 4139,4143 ****
-
- @item -u
-! Treat unset variables as an error when performing parameter expansion.
- An error message will be written to the standard error, and a non-interactive
- shell will exit.
---- 4151,4156 ----
-
- @item -u
-! Treat unset variables and parameters other than the special parameters
-! @samp{@@} or @samp{*} as an error when performing parameter expansion.
- An error message will be written to the standard error, and a non-interactive
- shell will exit.
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 27
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 28
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-029 b/data/bash/bash40-029
deleted file mode 100644
index a13176de2..000000000
--- a/data/bash/bash40-029
+++ /dev/null
@@ -1,106 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-029
-
-Bug-Reported-by: Christian Krause <chkr@plauener.de>
-Bug-Reference-ID: Thu, 25 Jun 2009 21:47:59 +0200
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-06/msg00078.html
-
-Bug-Description:
-
-Previous versions of bash accepted strings in the initial environment
-that were not valid shell variable assignments, usually because the
-names were invalid, but still created shell variables from them and
-passed them to child processes in the environment.
-
-Bash-4.0 ignores those names and does not pass them to child processes.
-Some users and automated processes depend on invalid variables being
-ignored and passed to child processes.
-
-This patch makes bash continue to ignore the invalid names, but pass
-them to child processes in the export environment.
-
-Patch:
-
-*** ../bash-4.0-patched/variables.c 2009-01-04 14:32:46.000000000 -0500
---- variables.c 2009-06-29 09:17:20.000000000 -0400
-***************
-*** 253,256 ****
---- 255,259 ----
- static int visible_var __P((SHELL_VAR *));
- static int visible_and_exported __P((SHELL_VAR *));
-+ static int export_environment_candidate __P((SHELL_VAR *));
- static int local_and_exported __P((SHELL_VAR *));
- static int variable_in_context __P((SHELL_VAR *));
-***************
-*** 376,383 ****
- # endif
- #endif
- else if (legal_identifier (name))
- {
- temp_var = bind_variable (name, string, 0);
-! VSETATTR (temp_var, (att_exported | att_imported));
- array_needs_making = 1;
- }
---- 379,393 ----
- # endif
- #endif
-+ #if 0
- else if (legal_identifier (name))
-+ #else
-+ else
-+ #endif
- {
- temp_var = bind_variable (name, string, 0);
-! if (legal_identifier (name))
-! VSETATTR (temp_var, (att_exported | att_imported));
-! else
-! VSETATTR (temp_var, (att_exported | att_imported | att_invisible));
- array_needs_making = 1;
- }
-***************
-*** 3083,3086 ****
---- 3098,3111 ----
- }
-
-+ /* Candidate variables for the export environment are either valid variables
-+ with the export attribute or invalid variables inherited from the initial
-+ environment and simply passed through. */
-+ static int
-+ export_environment_candidate (var)
-+ SHELL_VAR *var;
-+ {
-+ return (exported_p (var) && (invisible_p (var) == 0 || imported_p (var)));
-+ }
-+
- /* Return non-zero if VAR is a local variable in the current context and
- is exported. */
-***************
-*** 3439,3443 ****
---- 3464,3472 ----
- SHELL_VAR **vars;
-
-+ #if 0
- vars = map_over (visible_and_exported, vcxt);
-+ #else
-+ vars = map_over (export_environment_candidate, vcxt);
-+ #endif
-
- if (vars == 0)
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 28
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 29
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-030 b/data/bash/bash40-030
deleted file mode 100644
index e4f038933..000000000
--- a/data/bash/bash40-030
+++ /dev/null
@@ -1,64 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-030
-
-Bug-Reported-by: Henning Bekel <h.bekel@googlemail.com>
-Bug-Reference-ID: <7c6eacF262ctuU1@mid.individual.net>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-07/msg00054.html
-
-Bug-Description:
-
-A shell function invoked with `bind -x' is supposed to be able to move the
-cursor by setting READLINE_POINT. The effects of this assignment were
-sometimes ignored.
-
-Patch:
-
-*** ../bash-4.0-patched/bashline.c 2009-01-08 09:29:24.000000000 -0500
---- bashline.c 2009-07-16 14:13:41.000000000 -0400
-***************
-*** 3389,3393 ****
- register int i;
- intmax_t mi;
-- int save_point;
- sh_parser_state_t ps;
- char *cmd, *value, *l;
---- 3389,3392 ----
-***************
-*** 3433,3437 ****
- VSETATTR (v, att_exported);
- l = value_cell (v);
-- save_point = rl_point;
- value = inttostr (rl_point, ibuf, sizeof (ibuf));
- v = bind_int_variable ("READLINE_POINT", value);
---- 3432,3435 ----
-***************
-*** 3451,3455 ****
- {
- i = mi;
-! if (i != save_point)
- {
- rl_point = i;
---- 3449,3453 ----
- {
- i = mi;
-! if (i != rl_point)
- {
- rl_point = i;
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 29
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 30
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-031 b/data/bash/bash40-031
deleted file mode 100644
index db46aa3fc..000000000
--- a/data/bash/bash40-031
+++ /dev/null
@@ -1,62 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-031
-
-Bug-Reported-by: Roman Rakus <rrakus@redhat.com>
-Bug-Reference-ID: <4A93F6E9.4050401@redhat.com>
-Bug-Reference-URL:
-
-Bug-Description:
-
-An implicit assignment to index "0" of an existing array variable caused
-the shell to crash when the variable was unset.
-
-Patch:
-
-*** ../bash-4.0-patched/arrayfunc.c 2009-03-08 21:24:39.000000000 -0400
---- arrayfunc.c 2009-08-24 09:29:43.000000000 -0400
-***************
-*** 99,103 ****
- hash = assoc_create (0);
- if (oldval)
-! assoc_insert (hash, "0", oldval);
-
- FREE (value_cell (var));
---- 99,103 ----
- hash = assoc_create (0);
- if (oldval)
-! assoc_insert (hash, savestring ("0"), oldval);
-
- FREE (value_cell (var));
-*** ../bash-4.0-patched/variables.c 2009-01-04 14:32:46.000000000 -0500
---- variables.c 2009-08-24 09:29:58.000000000 -0400
-***************
-*** 2218,2222 ****
- else if (assoc_p (entry))
- {
-! assoc_insert (assoc_cell (entry), "0", newval);
- free (newval);
- }
---- 2218,2222 ----
- else if (assoc_p (entry))
- {
-! assoc_insert (assoc_cell (entry), savestring ("0"), newval);
- free (newval);
- }
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 30
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 31
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-032 b/data/bash/bash40-032
deleted file mode 100644
index 0c9ba74da..000000000
--- a/data/bash/bash40-032
+++ /dev/null
@@ -1,46 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-032
-
-Bug-Reported-by: muszi@muszi.kite.hu
-Bug-Reference-ID: <20090826113159.18815.qmail@muszi.kite.hu>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-08/msg00090.html
-
-Bug-Description:
-
-Bash-4.0 has a memory leak when processing ${!prefix@}.
-
-Patch:
-
-*** ../bash-4.0-patched/subst.c 2009-07-22 23:18:55.000000000 -0400
---- subst.c 2009-08-26 23:08:51.000000000 -0400
-***************
-*** 6607,6611 ****
- }
- free (x);
-! free (xlist);
- free (temp1);
- *indexp = sindex;
---- 6769,6773 ----
- }
- free (x);
-! dispose_words (xlist);
- free (temp1);
- *indexp = sindex;
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 31
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 32
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-033 b/data/bash/bash40-033
deleted file mode 100644
index 80fcb6be3..000000000
--- a/data/bash/bash40-033
+++ /dev/null
@@ -1,50 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-033
-
-Bug-Reported-by: Dr. Werner Fink <werner@suse.de>
-Bug-Reference-ID: <200907010951.n619p76I013912@boole.suse.de>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-07/msg00000.html
-
-Bug-Description:
-
-Bash-4.0 has a memory leak in the `read' builtin when the number of fields
-read is not the same as the number of variables passed as arguments.
-
-Patch:
-
-*** ../bash-4.0-patched/builtins/read.def 2009-03-08 21:24:45.000000000 -0400
---- builtins/read.def 2009-07-01 15:32:42.000000000 -0400
-***************
-*** 764,768 ****
- tofree = input_string = t;
- else
-! input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape);
- }
- #endif
---- 764,771 ----
- tofree = input_string = t;
- else
-! {
-! input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape);
-! tofree = t;
-! }
- }
- #endif
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 32
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 33
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-034 b/data/bash/bash40-034
deleted file mode 100644
index bacb33ce1..000000000
--- a/data/bash/bash40-034
+++ /dev/null
@@ -1,59 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-034
-
-Bug-Reported-by: Anders Kaseorg <andersk@mit.edu>
-Bug-Reference-ID: <1252856832.991059.8162.nullmailer@balanced-tree.mit.edu>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-09/msg00043.html
-
-Bug-Description:
-
-When using the globstar option, bash incorrectly interprets wildcarded path
-components between a **/ and the last / as matching any path, even if the
-constructed path does not match any files.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/glob/glob.c 2009-07-22 23:18:50.000000000 -0400
---- lib/glob/glob.c 2009-09-18 17:53:25.000000000 -0400
-***************
-*** 920,928 ****
- char **temp_results;
-
- /* Scan directory even on a NULL filename. That way, `*h/'
- returns only directories ending in `h', instead of all
- files ending in `h' with a `/' appended. */
- dname = directories[i];
-! dflags = flags & ~GX_MARKDIRS;
- if ((flags & GX_GLOBSTAR) && filename[0] == '*' && filename[1] == '*' && filename[2] == '\0')
- dflags |= GX_ALLDIRS|GX_ADDCURDIR;
---- 927,938 ----
- char **temp_results;
-
-+ /* XXX -- we've recursively scanned any directories resulting from
-+ a `**', so turn off the flag. We turn it on again below if
-+ filename is `**' */
- /* Scan directory even on a NULL filename. That way, `*h/'
- returns only directories ending in `h', instead of all
- files ending in `h' with a `/' appended. */
- dname = directories[i];
-! dflags = flags & ~(GX_MARKDIRS|GX_ALLDIRS|GX_ADDCURDIR);
- if ((flags & GX_GLOBSTAR) && filename[0] == '*' && filename[1] == '*' && filename[2] == '\0')
- dflags |= GX_ALLDIRS|GX_ADDCURDIR;
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 33
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 34
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-035 b/data/bash/bash40-035
deleted file mode 100644
index 3b1af7505..000000000
--- a/data/bash/bash40-035
+++ /dev/null
@@ -1,62 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-035
-
-Bug-Reported-by: Freddy Vulto <fvulto@gmail.com>
-Bug-Reference-ID: <e9c463930909171341p7cbe6e43pa3788ebbe3adec4d@mail.gmail.com>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-09/msg00044.html
-
-Bug-Description:
-
-Bash-4.0 incorrectly treated single and double quotes as delimiters rather
-than introducing quoted strings when splitting the line into words for
-programmable completion functions.
-
-Patch:
-
-*** ../bash-4.0-patched/pcomplete.c 2009-03-08 21:24:31.000000000 -0400
---- pcomplete.c 2009-09-26 16:30:16.000000000 -0400
-***************
-*** 1176,1186 ****
- WORD_LIST *ret;
- char *delims;
-
-! #if 0
-! delims = "()<>;&| \t\n"; /* shell metacharacters break words */
-! #else
-! delims = rl_completer_word_break_characters;
-! #endif
- ret = split_at_delims (line, llen, delims, sentinel, nwp, cwp);
- return (ret);
- }
---- 1176,1188 ----
- WORD_LIST *ret;
- char *delims;
-+ int i, j;
-
-! delims = xmalloc (strlen (rl_completer_word_break_characters) + 1);
-! for (i = j = 0; rl_completer_word_break_characters[i]; i++)
-! if (rl_completer_word_break_characters[i] != '\'' && rl_completer_word_break_characters[i] != '"')
-! delims[j++] = rl_completer_word_break_characters[i];
-! delims[j] = '\0';
- ret = split_at_delims (line, llen, delims, sentinel, nwp, cwp);
-+ free (delims);
- return (ret);
- }
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 34
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 35
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-036 b/data/bash/bash40-036
deleted file mode 100644
index ed08e3936..000000000
--- a/data/bash/bash40-036
+++ /dev/null
@@ -1,90 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-036
-
-Bug-Reported-by: Jerome Reybert <jreybert@gmail.com>
-Bug-Reference-ID: <f5da50720908070109p1faa3847x5a9dff68d24a7197@mail.gmail.com>
-Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=538013
-
-Bug-Description:
-
-Under some circumstances, menu-complete is unable to complete filenames.
-
-Patch:
-
-*** ../bash-4.0-patched/lib/readline/complete.c 2009-01-22 15:15:14.000000000 -0500
---- lib/readline/complete.c 2009-08-26 17:15:59.000000000 -0400
-***************
-*** 2209,2213 ****
- /* The first time through, we generate the list of matches and set things
- up to insert them. */
-! if (rl_last_func != rl_menu_complete)
- {
- /* Clean up from previous call, if any. */
---- 2252,2256 ----
- /* The first time through, we generate the list of matches and set things
- up to insert them. */
-! if (rl_last_func != rl_old_menu_complete)
- {
- /* Clean up from previous call, if any. */
-***************
-*** 2221,2224 ****
---- 2264,2269 ----
- rl_completion_invoking_key = invoking_key;
-
-+ RL_SETSTATE(RL_STATE_COMPLETING);
-+
- /* Only the completion entry function can change these. */
- set_completion_defaults ('%');
-***************
-*** 2260,2266 ****
---- 2305,2314 ----
- orig_text = (char *)0;
- completion_changed_buffer = 0;
-+ RL_UNSETSTATE(RL_STATE_COMPLETING);
- return (0);
- }
-
-+ RL_UNSETSTATE(RL_STATE_COMPLETING);
-+
- for (match_list_size = 0; matches[match_list_size]; match_list_size++)
- ;
-***************
-*** 2338,2341 ****
---- 2386,2391 ----
- full_completion = 0;
-
-+ RL_SETSTATE(RL_STATE_COMPLETING);
-+
- /* Only the completion entry function can change these. */
- set_completion_defaults ('%');
-***************
-*** 2379,2385 ****
---- 2429,2438 ----
- orig_text = (char *)0;
- completion_changed_buffer = 0;
-+ RL_UNSETSTATE(RL_STATE_COMPLETING);
- return (0);
- }
-
-+ RL_UNSETSTATE(RL_STATE_COMPLETING);
-+
- for (match_list_size = 0; matches[match_list_size]; match_list_size++)
- ;
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 35
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 36
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-037 b/data/bash/bash40-037
deleted file mode 100644
index 95baeb319..000000000
--- a/data/bash/bash40-037
+++ /dev/null
@@ -1,60 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-037
-
-Bug-Reported-by: Chet Ramey <chet.ramey@case.edu>
-Bug-Reference-ID: <4AD7D749.5030601@case.edu>
-Bug-Reference-URL:
-
-Bug-Description:
-
-The configure script does not work on Snow Leopard and will result in
-attempts to link against the incorrect version of readline.
-
-Patch:
-
-*** ../bash-4.0-patched/configure.in 2009-02-06 12:03:44.000000000 -0500
---- configure.in 2009-10-01 16:38:24.000000000 -0400
-***************
-*** 534,538 ****
- # dynamic version
- case "${host_os}" in
-! darwin[[89]]*) READLINE_LIB='${READLINE_LIBRARY}' ;;
- *) READLINE_LIB=-lreadline ;;
- esac
---- 534,538 ----
- # dynamic version
- case "${host_os}" in
-! darwin[[89]]*|darwin10*) READLINE_LIB='${READLINE_LIBRARY}' ;;
- *) READLINE_LIB=-lreadline ;;
- esac
-***************
-*** 569,573 ****
- # dynamic version
- case "${host_os}" in
-! darwin[[89]]*) HISTORY_LIB='${HISTORY_LIBRARY}' ;;
- *) HISTORY_LIB=-lhistory ;;
- esac
---- 569,573 ----
- # dynamic version
- case "${host_os}" in
-! darwin[[89]]*|darwin10*) HISTORY_LIB='${HISTORY_LIBRARY}' ;;
- *) HISTORY_LIB=-lhistory ;;
- esac
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 36
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 37
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-038 b/data/bash/bash40-038
deleted file mode 100644
index 80505cc34..000000000
--- a/data/bash/bash40-038
+++ /dev/null
@@ -1,56 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-038
-
-Bug-Reported-by: werner@suse.de
-Bug-Reference-ID: <201002251238.o1PCcYcg016893@boole.suse.de>
-Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2010-02/msg00132.html
-
-Bug-Description:
-
-When the `read' builtin times out after the timeout specified with -t is
-exceeded, it does not reset the flags that tell signal handlers to process
-signals immediately instead of deferring their handling. This can result
-in unsafe functions being called from signal handlers, which can cause bash
-to hang or dump core.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.0-patched/builtins/read.def 2009-09-03 14:40:03.000000000 -0400
---- builtins/read.def 2010-03-17 17:35:39.000000000 -0400
-***************
-*** 602,607 ****
- zsyncfd (fd);
-
-- interrupt_immediately--;
-- terminate_immediately--;
- discard_unwind_frame ("read_builtin");
-
---- 616,619 ----
-***************
-*** 610,613 ****
---- 622,628 ----
- assign_vars:
-
-+ interrupt_immediately--;
-+ terminate_immediately--;
-+
- #if defined (ARRAY_VARS)
- /* If -a was given, take the string read, break it into a list of words,
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 37
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 38
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-039 b/data/bash/bash40-039
deleted file mode 100644
index 3eac28cef..000000000
--- a/data/bash/bash40-039
+++ /dev/null
@@ -1,104 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-039
-
-Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-Under certain circumstances, bash will execute user code while processing the
-environment for exported function definitions.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.0.38/builtins/common.h 2009-01-15 23:08:54.000000000 -0500
---- builtins/common.h 2014-09-16 19:20:48.000000000 -0400
-***************
-*** 36,39 ****
---- 36,41 ----
-
- /* Flags for describe_command, shared between type.def and command.def */
-+ #define SEVAL_FUNCDEF 0x080 /* only allow function definitions */
-+ #define SEVAL_ONECMD 0x100 /* only allow a single command */
- #define CDESC_ALL 0x001 /* type -a */
- #define CDESC_SHORTDESC 0x002 /* command -V */
-*** ../bash-4.0.38/builtins/evalstring.c 2009-01-13 14:44:12.000000000 -0500
---- builtins/evalstring.c 2014-09-16 19:20:48.000000000 -0400
-***************
-*** 259,262 ****
---- 259,270 ----
- struct fd_bitmap *bitmap;
-
-+ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
-+ {
-+ internal_warning ("%s: ignoring function definition attempt", from_file);
-+ should_jump_to_top_level = 0;
-+ last_result = last_command_exit_value = EX_BADUSAGE;
-+ break;
-+ }
-+
- bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
- begin_unwind_frame ("pe_dispose");
-***************
-*** 319,322 ****
---- 327,333 ----
- dispose_fd_bitmap (bitmap);
- discard_unwind_frame ("pe_dispose");
-+
-+ if (flags & SEVAL_ONECMD)
-+ break;
- }
- }
-*** ../bash-4.0.38/variables.c 2009-09-19 13:04:23.000000000 -0400
---- variables.c 2014-09-16 19:20:48.000000000 -0400
-***************
-*** 344,353 ****
- strcpy (temp_string + char_index + 1, string);
-
-! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
-!
-! /* Ancient backwards compatibility. Old versions of bash exported
-! functions like name()=() {...} */
-! if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
-! name[char_index - 2] = '\0';
-
- if (temp_var = find_function (name))
---- 344,351 ----
- strcpy (temp_string + char_index + 1, string);
-
-! /* Don't import function names that are invalid identifiers from the
-! environment. */
-! if (legal_identifier (name))
-! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-
- if (temp_var = find_function (name))
-***************
-*** 358,365 ****
- else
- report_error (_("error importing function definition for `%s'"), name);
--
-- /* ( */
-- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
-- name[char_index - 2] = '('; /* ) */
- }
- #if defined (ARRAY_VARS)
---- 356,359 ----
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 38
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 39
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-040 b/data/bash/bash40-040
deleted file mode 100644
index b15f7500c..000000000
--- a/data/bash/bash40-040
+++ /dev/null
@@ -1,43 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-040
-
-Bug-Reported-by: Tavis Ormandy <taviso@cmpxchg8b.com>
-Bug-Reference-ID:
-Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929
-
-Bug-Description:
-
-Under certain circumstances, bash can incorrectly save a lookahead character and
-return it on a subsequent call, even when reading a new line.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.0.39/parse.y 2009-06-02 09:08:07.000000000 -0400
---- parse.y 2014-09-25 16:15:47.000000000 -0400
-***************
-*** 2671,2674 ****
---- 2671,2676 ----
- word_desc_to_read = (WORD_DESC *)NULL;
-
-+ eol_ungetc_lookahead = 0;
-+
- current_token = '\n'; /* XXX */
- last_read_token = '\n';
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 39
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 40
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-041 b/data/bash/bash40-041
deleted file mode 100644
index 5e15c9461..000000000
--- a/data/bash/bash40-041
+++ /dev/null
@@ -1,217 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-041
-
-Bug-Reported-by: Florian Weimer <fweimer@redhat.com>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-This patch changes the encoding bash uses for exported functions to avoid
-clashes with shell variables and to avoid depending only on an environment
-variable's contents to determine whether or not to interpret it as a shell
-function.
-
-Patch:
-
-*** ../bash-4.0.40/variables.c 2014-09-16 19:20:48.000000000 -0400
---- variables.c 2014-09-27 21:01:42.000000000 -0400
-***************
-*** 78,81 ****
---- 78,86 ----
- #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
-
-+ #define BASHFUNC_PREFIX "BASH_FUNC_"
-+ #define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */
-+ #define BASHFUNC_SUFFIX "%%"
-+ #define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */
-+
- extern char **environ;
-
-***************
-*** 265,269 ****
- static void dispose_temporary_env __P((sh_free_func_t *));
-
-! static inline char *mk_env_string __P((const char *, const char *));
- static char **make_env_array_from_var_list __P((SHELL_VAR **));
- static char **make_var_export_array __P((VAR_CONTEXT *));
---- 270,274 ----
- static void dispose_temporary_env __P((sh_free_func_t *));
-
-! static inline char *mk_env_string __P((const char *, const char *, int));
- static char **make_env_array_from_var_list __P((SHELL_VAR **));
- static char **make_var_export_array __P((VAR_CONTEXT *));
-***************
-*** 335,353 ****
- /* If exported function, define it now. Don't import functions from
- the environment in privileged mode. */
-! if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
- {
- string_length = strlen (string);
-! temp_string = (char *)xmalloc (3 + string_length + char_index);
-
-! strcpy (temp_string, name);
-! temp_string[char_index] = ' ';
-! strcpy (temp_string + char_index + 1, string);
-
- /* Don't import function names that are invalid identifiers from the
- environment. */
-! if (legal_identifier (name))
-! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-
-! if (temp_var = find_function (name))
- {
- VSETATTR (temp_var, (att_exported|att_imported));
---- 340,369 ----
- /* If exported function, define it now. Don't import functions from
- the environment in privileged mode. */
-! if (privmode == 0 && read_but_dont_execute == 0 &&
-! STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) &&
-! STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) &&
-! STREQN ("() {", string, 4))
- {
-+ size_t namelen;
-+ char *tname; /* desired imported function name */
-+
-+ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN;
-+
-+ tname = name + BASHFUNC_PREFLEN; /* start of func name */
-+ tname[namelen] = '\0'; /* now tname == func name */
-+
- string_length = strlen (string);
-! temp_string = (char *)xmalloc (namelen + string_length + 2);
-
-! memcpy (temp_string, tname, namelen);
-! temp_string[namelen] = ' ';
-! memcpy (temp_string + namelen + 1, string, string_length + 1);
-
- /* Don't import function names that are invalid identifiers from the
- environment. */
-! if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname)))
-! parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
-
-! if (temp_var = find_function (tname))
- {
- VSETATTR (temp_var, (att_exported|att_imported));
-***************
-*** 355,359 ****
- }
- else
-! report_error (_("error importing function definition for `%s'"), name);
- }
- #if defined (ARRAY_VARS)
---- 371,378 ----
- }
- else
-! report_error (_("error importing function definition for `%s'"), tname);
-!
-! /* Restore original suffix */
-! tname[namelen] = BASHFUNC_SUFFIX[0];
- }
- #if defined (ARRAY_VARS)
-***************
-*** 2506,2510 ****
-
- INVALIDATE_EXPORTSTR (var);
-! var->exportstr = mk_env_string (name, value);
-
- array_needs_making = 1;
---- 2525,2529 ----
-
- INVALIDATE_EXPORTSTR (var);
-! var->exportstr = mk_env_string (name, value, 0);
-
- array_needs_making = 1;
-***************
-*** 3325,3343 ****
-
- static inline char *
-! mk_env_string (name, value)
- const char *name, *value;
- {
-! int name_len, value_len;
-! char *p;
-
- name_len = strlen (name);
- value_len = STRLEN (value);
-! p = (char *)xmalloc (2 + name_len + value_len);
-! strcpy (p, name);
-! p[name_len] = '=';
- if (value && *value)
-! strcpy (p + name_len + 1, value);
- else
-! p[name_len + 1] = '\0';
- return (p);
- }
---- 3344,3383 ----
-
- static inline char *
-! mk_env_string (name, value, isfunc)
- const char *name, *value;
-+ int isfunc;
- {
-! size_t name_len, value_len;
-! char *p, *q;
-
- name_len = strlen (name);
- value_len = STRLEN (value);
-!
-! /* If we are exporting a shell function, construct the encoded function
-! name. */
-! if (isfunc && value)
-! {
-! p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2);
-! q = p;
-! memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN);
-! q += BASHFUNC_PREFLEN;
-! memcpy (q, name, name_len);
-! q += name_len;
-! memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
-! q += BASHFUNC_SUFFLEN;
-! }
-! else
-! {
-! p = (char *)xmalloc (2 + name_len + value_len);
-! memcpy (p, name, name_len);
-! q = p + name_len;
-! }
-!
-! q[0] = '=';
- if (value && *value)
-! memcpy (q + 1, value, value_len + 1);
- else
-! q[1] = '\0';
-!
- return (p);
- }
-***************
-*** 3420,3424 ****
- using the cached exportstr... */
- list[list_index] = USE_EXPORTSTR ? savestring (value)
-! : mk_env_string (var->name, value);
-
- if (USE_EXPORTSTR == 0)
---- 3460,3464 ----
- using the cached exportstr... */
- list[list_index] = USE_EXPORTSTR ? savestring (value)
-! : mk_env_string (var->name, value, function_p (var));
-
- if (USE_EXPORTSTR == 0)
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 40
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 41
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-042 b/data/bash/bash40-042
deleted file mode 100644
index c86e9a5d7..000000000
--- a/data/bash/bash40-042
+++ /dev/null
@@ -1,147 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-042
-
-Bug-Reported-by: Florian Weimer <fweimer@redhat.com>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-There are two local buffer overflows in parse.y that can cause the shell
-to dump core when given many here-documents attached to a single command
-or many nested loops.
-
-Patch:
-
-*** ../bash-4.0.41/parse.y 2014-09-27 12:17:56.000000000 -0400
---- parse.y 2014-09-30 19:41:09.000000000 -0400
-***************
-*** 167,170 ****
---- 167,173 ----
- static int reserved_word_acceptable __P((int));
- static int yylex __P((void));
-+
-+ static void push_heredoc __P((REDIRECT *));
-+ static char *mk_alexpansion __P((char *));
- static int alias_expand_token __P((char *));
- static int time_command_acceptable __P((void));
-***************
-*** 262,266 ****
- /* Variables to manage the task of reading here documents, because we need to
- defer the reading until after a complete command has been collected. */
-! static REDIRECT *redir_stack[10];
- int need_here_doc;
-
---- 265,271 ----
- /* Variables to manage the task of reading here documents, because we need to
- defer the reading until after a complete command has been collected. */
-! #define HEREDOC_MAX 16
-!
-! static REDIRECT *redir_stack[HEREDOC_MAX];
- int need_here_doc;
-
-***************
-*** 301,305 ****
- index is decremented after a case, select, or for command is parsed. */
- #define MAX_CASE_NEST 128
-! static int word_lineno[MAX_CASE_NEST];
- static int word_top = -1;
-
---- 306,310 ----
- index is decremented after a case, select, or for command is parsed. */
- #define MAX_CASE_NEST 128
-! static int word_lineno[MAX_CASE_NEST+1];
- static int word_top = -1;
-
-***************
-*** 452,456 ****
- redir.filename = $2;
- $$ = make_redirection (0, r_reading_until, redir);
-! redir_stack[need_here_doc++] = $$;
- }
- | NUMBER LESS_LESS WORD
---- 457,461 ----
- redir.filename = $2;
- $$ = make_redirection (0, r_reading_until, redir);
-! push_heredoc ($$);
- }
- | NUMBER LESS_LESS WORD
-***************
-*** 458,462 ****
- redir.filename = $3;
- $$ = make_redirection ($1, r_reading_until, redir);
-! redir_stack[need_here_doc++] = $$;
- }
- | LESS_LESS_LESS WORD
---- 463,467 ----
- redir.filename = $3;
- $$ = make_redirection ($1, r_reading_until, redir);
-! push_heredoc ($$);
- }
- | LESS_LESS_LESS WORD
-***************
-*** 515,519 ****
- $$ = make_redirection
- (0, r_deblank_reading_until, redir);
-! redir_stack[need_here_doc++] = $$;
- }
- | NUMBER LESS_LESS_MINUS WORD
---- 520,524 ----
- $$ = make_redirection
- (0, r_deblank_reading_until, redir);
-! push_heredoc ($$);
- }
- | NUMBER LESS_LESS_MINUS WORD
-***************
-*** 522,526 ****
- $$ = make_redirection
- ($1, r_deblank_reading_until, redir);
-! redir_stack[need_here_doc++] = $$;
- }
- | GREATER_AND '-'
---- 527,531 ----
- $$ = make_redirection
- ($1, r_deblank_reading_until, redir);
-! push_heredoc ($$);
- }
- | GREATER_AND '-'
-***************
-*** 2377,2380 ****
---- 2382,2400 ----
- static int esacs_needed_count;
-
-+ static void
-+ push_heredoc (r)
-+ REDIRECT *r;
-+ {
-+ if (need_here_doc >= HEREDOC_MAX)
-+ {
-+ last_command_exit_value = EX_BADUSAGE;
-+ need_here_doc = 0;
-+ report_syntax_error (_("maximum here-document count exceeded"));
-+ reset_parser ();
-+ exit_shell (last_command_exit_value);
-+ }
-+ redir_stack[need_here_doc++] = r;
-+ }
-+
- void
- gather_here_documents ()
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 41
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 42
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-043 b/data/bash/bash40-043
deleted file mode 100644
index 0ebacfb68..000000000
--- a/data/bash/bash40-043
+++ /dev/null
@@ -1,59 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-043
-
-Bug-Reported-by: Michal Zalewski <lcamtuf@coredump.cx>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-When bash is parsing a function definition that contains a here-document
-delimited by end-of-file (or end-of-string), it leaves the closing delimiter
-uninitialized. This can result in an invalid memory access when the parsed
-function is later copied.
-
-Patch (apply with `patch -p0'):
-
-*** ../bash-4.0.42/make_cmd.c 2009-01-04 14:32:38.000000000 -0500
---- make_cmd.c 2014-10-02 11:36:55.000000000 -0400
-***************
-*** 681,684 ****
---- 681,685 ----
- temp->redirector = source;
- temp->redirectee = dest_and_filename;
-+ temp->here_doc_eof = 0;
- temp->instruction = instruction;
- temp->flags = 0;
-*** ../bash-4.0.42/copy_cmd.c 2009-01-04 14:32:23.000000000 -0500
---- copy_cmd.c 2014-10-02 11:36:55.000000000 -0400
-***************
-*** 119,123 ****
- case r_reading_until:
- case r_deblank_reading_until:
-! new_redirect->here_doc_eof = savestring (redirect->here_doc_eof);
- /*FALLTHROUGH*/
- case r_reading_string:
---- 119,123 ----
- case r_reading_until:
- case r_deblank_reading_until:
-! new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0;
- /*FALLTHROUGH*/
- case r_reading_string:
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 42
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 43
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash40-044 b/data/bash/bash40-044
deleted file mode 100644
index 06c9abeab..000000000
--- a/data/bash/bash40-044
+++ /dev/null
@@ -1,140 +0,0 @@
- BASH PATCH REPORT
- =================
-
-Bash-Release: 4.0
-Patch-ID: bash40-044
-
-Bug-Reported-by: Michal Zalewski <lcamtuf@coredump.cx>
-Bug-Reference-ID:
-Bug-Reference-URL:
-
-Bug-Description:
-
-A combination of nested command substitutions and function importing from
-the environment can cause bash to execute code appearing in the environment
-variable value following the function definition.
-
-Patch:
-
-*** ../bash-4.0.43/builtins/evalstring.c 2014-09-16 19:20:48.000000000 -0400
---- builtins/evalstring.c 2014-10-04 15:33:32.000000000 -0400
-***************
-*** 44,47 ****
---- 44,48 ----
- #include "../redir.h"
- #include "../trap.h"
-+ #include "../bashintl.h"
-
- #include <y.tab.h>
-***************
-*** 259,268 ****
- struct fd_bitmap *bitmap;
-
-! if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
- {
-! internal_warning ("%s: ignoring function definition attempt", from_file);
-! should_jump_to_top_level = 0;
-! last_result = last_command_exit_value = EX_BADUSAGE;
-! break;
- }
-
---- 260,282 ----
- struct fd_bitmap *bitmap;
-
-! if (flags & SEVAL_FUNCDEF)
- {
-! char *x;
-!
-! /* If the command parses to something other than a straight
-! function definition, or if we have not consumed the entire
-! string, or if the parser has transformed the function
-! name (as parsing will if it begins or ends with shell
-! whitespace, for example), reject the attempt */
-! if (command->type != cm_function_def ||
-! ((x = parser_remaining_input ()) && *x) ||
-! (STREQ (from_file, command->value.Function_def->name->word) == 0))
-! {
-! internal_warning (_("%s: ignoring function definition attempt"), from_file);
-! should_jump_to_top_level = 0;
-! last_result = last_command_exit_value = EX_BADUSAGE;
-! reset_parser ();
-! break;
-! }
- }
-
-***************
-*** 329,333 ****
-
- if (flags & SEVAL_ONECMD)
-! break;
- }
- }
---- 343,350 ----
-
- if (flags & SEVAL_ONECMD)
-! {
-! reset_parser ();
-! break;
-! }
- }
- }
-*** ../bash-4.0.43/parse.y 2014-09-30 19:41:09.000000000 -0400
---- parse.y 2014-10-04 15:27:12.000000000 -0400
-***************
-*** 2279,2282 ****
---- 2279,2292 ----
- }
-
-+ char *
-+ parser_remaining_input ()
-+ {
-+ if (shell_input_line == 0)
-+ return 0;
-+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
-+ return '\0'; /* XXX */
-+ return (shell_input_line + shell_input_line_index);
-+ }
-+
- #ifdef INCLUDE_UNUSED
- /* Back the input pointer up by one, effectively `ungetting' a character. */
-***************
-*** 3628,3633 ****
- restore_parser_state (&ps);
- reset_parser ();
-! if (interactive)
-! token_to_read = 0;
-
- /* Need to find how many characters parse_and_execute consumed, update
---- 3638,3643 ----
- restore_parser_state (&ps);
- reset_parser ();
-!
-! token_to_read = 0;
-
- /* Need to find how many characters parse_and_execute consumed, update
-*** ../bash-4.0.43/shell.h 2009-01-04 14:32:41.000000000 -0500
---- shell.h 2014-10-04 15:27:12.000000000 -0400
-***************
-*** 161,164 ****
---- 161,166 ----
-
- /* Let's try declaring these here. */
-+ extern char *parser_remaining_input __P((void));
-+
- extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
- extern void restore_parser_state __P((sh_parser_state_t *));
-*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
-***************
-*** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 43
-
- #endif /* _PATCHLEVEL_H_ */
---- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
-! #define PATCHLEVEL 44
-
- #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash50-001 b/data/bash/bash50-001
new file mode 100644
index 000000000..169317ded
--- /dev/null
+++ b/data/bash/bash50-001
@@ -0,0 +1,166 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-001
+
+Bug-Reported-by: axel@freakout.de
+Bug-Reference-ID: <201901082050.x08KoShS006731@bongo.freakout.de>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00079.html
+
+Bug-Description:
+
+Under certain circumstances, the glob expansion code did not remove
+backslashes escaping characters in directory names (or portions of a
+pattern preceding a slash).
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0/bashline.c 2018-11-27 13:20:16.000000000 -0500
+--- bashline.c 2019-01-16 16:06:03.000000000 -0500
+***************
+*** 232,235 ****
+--- 232,236 ----
+ static int bash_possible_command_completions __P((int, int));
+
++ static int completion_glob_pattern __P((char *));
+ static char *glob_complete_word __P((const char *, int));
+ static int bash_glob_completion_internal __P((int));
+***************
+*** 1742,1746 ****
+ /* This could be a globbing pattern, so try to expand it using pathname
+ expansion. */
+! if (!matches && glob_pattern_p (text))
+ {
+ matches = rl_completion_matches (text, glob_complete_word);
+--- 1743,1747 ----
+ /* This could be a globbing pattern, so try to expand it using pathname
+ expansion. */
+! if (!matches && completion_glob_pattern ((char *)text))
+ {
+ matches = rl_completion_matches (text, glob_complete_word);
+***************
+*** 1851,1855 ****
+ }
+
+! globpat = glob_pattern_p (hint_text);
+
+ /* If this is an absolute program name, do not check it against
+--- 1852,1856 ----
+ }
+
+! globpat = completion_glob_pattern ((char *)hint_text);
+
+ /* If this is an absolute program name, do not check it against
+***************
+*** 3714,3717 ****
+--- 3715,3773 ----
+ }
+
++ static int
++ completion_glob_pattern (string)
++ char *string;
++ {
++ register int c;
++ char *send;
++ int open;
++
++ DECLARE_MBSTATE;
++
++ open = 0;
++ send = string + strlen (string);
++
++ while (c = *string++)
++ {
++ switch (c)
++ {
++ case '?':
++ case '*':
++ return (1);
++
++ case '[':
++ open++;
++ continue;
++
++ case ']':
++ if (open)
++ return (1);
++ continue;
++
++ case '+':
++ case '@':
++ case '!':
++ if (*string == '(') /*)*/
++ return (1);
++ continue;
++
++ case '\\':
++ if (*string == 0)
++ return (0);
++ }
++
++ /* Advance one fewer byte than an entire multibyte character to
++ account for the auto-increment in the loop above. */
++ #ifdef HANDLE_MULTIBYTE
++ string--;
++ ADVANCE_CHAR_P (string, send - string);
++ string++;
++ #else
++ ADVANCE_CHAR_P (string, send - string);
++ #endif
++ }
++ return (0);
++ }
++
+ static char *globtext;
+ static char *globorig;
+***************
+*** 3878,3882 ****
+ }
+
+! if (t && glob_pattern_p (t) == 0)
+ rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */
+ FREE (t);
+--- 3934,3938 ----
+ }
+
+! if (t && completion_glob_pattern (t) == 0)
+ rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */
+ FREE (t);
+*** ../bash-5.0/lib/glob/glob_loop.c 2018-12-31 13:35:15.000000000 -0500
+--- lib/glob/glob_loop.c 2019-01-09 09:44:36.000000000 -0500
+***************
+*** 55,59 ****
+
+ case L('\\'):
+- #if 0
+ /* Don't let the pattern end in a backslash (GMATCH returns no match
+ if the pattern ends in a backslash anyway), but otherwise return 1,
+--- 55,58 ----
+***************
+*** 61,69 ****
+ and it can be removed. */
+ return (*p != L('\0'));
+- #else
+- /* The pattern may not end with a backslash. */
+- if (*p++ == L('\0'))
+- return 0;
+- #endif
+ }
+
+--- 60,63 ----
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 0
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash50-002 b/data/bash/bash50-002
new file mode 100644
index 000000000..3fc8272f8
--- /dev/null
+++ b/data/bash/bash50-002
@@ -0,0 +1,113 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-002
+
+Bug-Reported-by: Ante Peric <synthmeat@gmail.com>
+Bug-Reference-ID: <B7E3B567-2467-4F7B-B6B9-CA4E75A9C93F@gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00095.html
+
+Bug-Description:
+
+When an alias value ends with an unquoted literal tab (not part of a quoted
+string or comment), alias expansion cannot correctly detect the end of the
+alias value after expanding it.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0/parser.h 2018-12-28 19:11:18.000000000 -0500
+--- parser.h 2019-01-11 15:13:03.000000000 -0500
+***************
+*** 48,51 ****
+--- 48,52 ----
+ #define PST_REDIRLIST 0x080000 /* parsing a list of redirections preceding a simple command name */
+ #define PST_COMMENT 0x100000 /* parsing a shell comment; used by aliases */
++ #define PST_ENDALIAS 0x200000 /* just finished expanding and consuming an alias */
+
+ /* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */
+*** ../bash-5.0/parse.y 2019-01-02 13:57:34.000000000 -0500
+--- parse.y 2019-01-14 08:23:31.000000000 -0500
+***************
+*** 2558,2567 ****
+ pushed_string_list->flags != PSH_DPAREN &&
+ (parser_state & PST_COMMENT) == 0 &&
+ shell_input_line_index > 0 &&
+! shell_input_line[shell_input_line_index-1] != ' ' &&
+ shell_input_line[shell_input_line_index-1] != '\n' &&
+ shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
+ (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"'))
+ {
+ return ' '; /* END_ALIAS */
+ }
+--- 2558,2569 ----
+ pushed_string_list->flags != PSH_DPAREN &&
+ (parser_state & PST_COMMENT) == 0 &&
++ (parser_state & PST_ENDALIAS) == 0 && /* only once */
+ shell_input_line_index > 0 &&
+! shellblank (shell_input_line[shell_input_line_index-1]) == 0 &&
+ shell_input_line[shell_input_line_index-1] != '\n' &&
+ shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
+ (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"'))
+ {
++ parser_state |= PST_ENDALIAS;
+ return ' '; /* END_ALIAS */
+ }
+***************
+*** 2572,2575 ****
+--- 2574,2578 ----
+ if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
+ {
++ parser_state &= ~PST_ENDALIAS;
+ pop_string ();
+ uc = shell_input_line[shell_input_line_index];
+*** ../bash-5.0/y.tab.c 2019-01-02 13:57:43.000000000 -0500
+--- y.tab.c 2019-01-14 08:39:23.000000000 -0500
+***************
+*** 4874,4883 ****
+ pushed_string_list->flags != PSH_DPAREN &&
+ (parser_state & PST_COMMENT) == 0 &&
+ shell_input_line_index > 0 &&
+! shell_input_line[shell_input_line_index-1] != ' ' &&
+ shell_input_line[shell_input_line_index-1] != '\n' &&
+ shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
+ (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"'))
+ {
+ return ' '; /* END_ALIAS */
+ }
+--- 4874,4885 ----
+ pushed_string_list->flags != PSH_DPAREN &&
+ (parser_state & PST_COMMENT) == 0 &&
++ (parser_state & PST_ENDALIAS) == 0 && /* only once */
+ shell_input_line_index > 0 &&
+! shellblank (shell_input_line[shell_input_line_index-1]) == 0 &&
+ shell_input_line[shell_input_line_index-1] != '\n' &&
+ shellmeta (shell_input_line[shell_input_line_index-1]) == 0 &&
+ (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"'))
+ {
++ parser_state |= PST_ENDALIAS;
+ return ' '; /* END_ALIAS */
+ }
+***************
+*** 4888,4891 ****
+--- 4890,4894 ----
+ if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
+ {
++ parser_state &= ~PST_ENDALIAS;
+ pop_string ();
+ uc = shell_input_line[shell_input_line_index];
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 1
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/bash50-003 b/data/bash/bash50-003
new file mode 100644
index 000000000..f7e5677e5
--- /dev/null
+++ b/data/bash/bash50-003
@@ -0,0 +1,239 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-003
+
+Bug-Reported-by: Andrew Church <achurch+bash@achurch.org>
+Bug-Reference-ID: <5c534aa2.04371@msgid.achurch.org>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00276.html
+
+Bug-Description:
+
+There are several incompatibilities in how bash-5.0 processes pathname
+expansion (globbing) of filename arguments that have backslashes in the
+directory portion.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/lib/glob/glob_loop.c 2019-01-16 16:13:21.000000000 -0500
+--- lib/glob/glob_loop.c 2019-02-01 09:45:11.000000000 -0500
+***************
+*** 27,34 ****
+ register const GCHAR *p;
+ register GCHAR c;
+! int bopen;
+
+ p = pattern;
+! bopen = 0;
+
+ while ((c = *p++) != L('\0'))
+--- 27,34 ----
+ register const GCHAR *p;
+ register GCHAR c;
+! int bopen, bsquote;
+
+ p = pattern;
+! bopen = bsquote = 0;
+
+ while ((c = *p++) != L('\0'))
+***************
+*** 56,66 ****
+ case L('\\'):
+ /* Don't let the pattern end in a backslash (GMATCH returns no match
+! if the pattern ends in a backslash anyway), but otherwise return 1,
+! since the matching engine uses backslash as an escape character
+! and it can be removed. */
+! return (*p != L('\0'));
+ }
+
+! return 0;
+ }
+
+--- 56,75 ----
+ case L('\\'):
+ /* Don't let the pattern end in a backslash (GMATCH returns no match
+! if the pattern ends in a backslash anyway), but otherwise note that
+! we have seen this, since the matching engine uses backslash as an
+! escape character and it can be removed. We return 2 later if we
+! have seen only backslash-escaped characters, so interested callers
+! know they can shortcut and just dequote the pathname. */
+! if (*p != L('\0'))
+! {
+! p++;
+! bsquote = 1;
+! continue;
+! }
+! else /* (*p == L('\0')) */
+! return 0;
+ }
+
+! return bsquote ? 2 : 0;
+ }
+
+*** ../bash-5.0-patched/lib/glob/glob.h 2013-10-28 14:46:12.000000000 -0400
+--- lib/glob/glob.h 2019-03-07 11:06:47.000000000 -0500
+***************
+*** 31,34 ****
+--- 31,35 ----
+ #define GX_ADDCURDIR 0x200 /* internal -- add passed directory name */
+ #define GX_GLOBSTAR 0x400 /* turn on special handling of ** */
++ #define GX_RECURSE 0x800 /* internal -- glob_filename called recursively */
+
+ extern int glob_pattern_p __P((const char *));
+*** ../bash-5.0-patched/lib/glob/glob.c 2018-09-20 10:53:23.000000000 -0400
+--- lib/glob/glob.c 2019-03-07 14:23:43.000000000 -0500
+***************
+*** 1062,1066 ****
+ unsigned int directory_len;
+ int free_dirname; /* flag */
+! int dflags;
+
+ result = (char **) malloc (sizeof (char *));
+--- 1078,1082 ----
+ unsigned int directory_len;
+ int free_dirname; /* flag */
+! int dflags, hasglob;
+
+ result = (char **) malloc (sizeof (char *));
+***************
+*** 1111,1117 ****
+ }
+
+ /* If directory_name contains globbing characters, then we
+! have to expand the previous levels. Just recurse. */
+! if (directory_len > 0 && glob_pattern_p (directory_name))
+ {
+ char **directories, *d, *p;
+--- 1127,1136 ----
+ }
+
++ hasglob = 0;
+ /* If directory_name contains globbing characters, then we
+! have to expand the previous levels. Just recurse.
+! If glob_pattern_p returns != [0,1] we have a pattern that has backslash
+! quotes but no unquoted glob pattern characters. We dequote it below. */
+! if (directory_len > 0 && (hasglob = glob_pattern_p (directory_name)) == 1)
+ {
+ char **directories, *d, *p;
+***************
+*** 1176,1180 ****
+ d[directory_len - 1] = '\0';
+
+! directories = glob_filename (d, dflags);
+
+ if (free_dirname)
+--- 1195,1199 ----
+ d[directory_len - 1] = '\0';
+
+! directories = glob_filename (d, dflags|GX_RECURSE);
+
+ if (free_dirname)
+***************
+*** 1333,1336 ****
+--- 1352,1369 ----
+ return (NULL);
+ }
++ /* If we have a directory name with quoted characters, and we are
++ being called recursively to glob the directory portion of a pathname,
++ we need to dequote the directory name before returning it so the
++ caller can read the directory */
++ if (directory_len > 0 && hasglob == 2 && (flags & GX_RECURSE) != 0)
++ {
++ dequote_pathname (directory_name);
++ directory_len = strlen (directory_name);
++ }
++
++ /* We could check whether or not the dequoted directory_name is a
++ directory and return it here, returning the original directory_name
++ if not, but we don't do that yet. I'm not sure it matters. */
++
+ /* Handle GX_MARKDIRS here. */
+ result[0] = (char *) malloc (directory_len + 1);
+*** ../bash-5.0-patched/pathexp.c 2018-04-29 17:44:48.000000000 -0400
+--- pathexp.c 2019-01-31 20:19:41.000000000 -0500
+***************
+*** 66,74 ****
+ register int c;
+ char *send;
+! int open;
+
+ DECLARE_MBSTATE;
+
+! open = 0;
+ send = string + strlen (string);
+
+--- 66,74 ----
+ register int c;
+ char *send;
+! int open, bsquote;
+
+ DECLARE_MBSTATE;
+
+! open = bsquote = 0;
+ send = string + strlen (string);
+
+***************
+*** 101,105 ****
+ globbing. */
+ case '\\':
+! return (*string != 0);
+
+ case CTLESC:
+--- 101,112 ----
+ globbing. */
+ case '\\':
+! if (*string != '\0' && *string != '/')
+! {
+! bsquote = 1;
+! string++;
+! continue;
+! }
+! else if (*string == 0)
+! return (0);
+
+ case CTLESC:
+***************
+*** 118,122 ****
+ #endif
+ }
+! return (0);
+ }
+
+--- 125,130 ----
+ #endif
+ }
+!
+! return (bsquote ? 2 : 0);
+ }
+
+*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500
+--- bashline.c 2019-02-22 09:29:08.000000000 -0500
+***************
+*** 3753,3757 ****
+
+ case '\\':
+! if (*string == 0)
+ return (0);
+ }
+--- 3766,3770 ----
+
+ case '\\':
+! if (*string++ == 0)
+ return (0);
+ }
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 2
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/data/bash/make.sh b/data/bash/make.sh
index 46f5d89a5..34cdfd7a8 100644
--- a/data/bash/make.sh
+++ b/data/bash/make.sh
@@ -1,16 +1,16 @@
pkg:extract
cd *
-for ((x = 1; x != 41; ++x)); do
- patch -p0 <"${PKG_DATA}/bash40-$(printf '%.3u\n' "$x")"
+for ((x = 1; x != 4; ++x)); do
+ patch -p0 <"${PKG_DATA}/bash50-$(printf '%.3u\n' "$x")"
done
pkg:patch
-pkg:configure --disable-nls --with-installed-readline --disable-largefile bash_cv_dev_fd=absent bash_cv_sys_named_pipes=present bash_cv_job_control_missing=present bash_cv_func_sigsetjmp=present bash_cv_func_ctype_nonascii=no bash_cv_must_reinstall_sighandlers=no bash_cv_func_strcoll_broken=yes ac_cv_c_stack_direction=-1 ac_cv_func_mmap_fixed_mapped=yes gt_cv_int_divbyzero_sigfpe=no ac_cv_func_setvbuf_reversed=no ac_cv_func_strcoll_works=yes ac_cv_func_working_mktime=yes ac_cv_type_getgroups=gid_t bash_cv_dup2_broken=no ac_cv_prog_cc_g=no ac_cv_rl_version=6.0
+pkg:configure --disable-nls --with-installed-readline --disable-largefile bash_cv_dev_fd=absent bash_cv_sys_named_pipes=present bash_cv_job_control_missing=present bash_cv_func_sigsetjmp=present bash_cv_func_ctype_nonascii=no bash_cv_must_reinstall_sighandlers=no bash_cv_func_strcoll_broken=yes ac_cv_c_stack_direction=-1 ac_cv_func_mmap_fixed_mapped=yes gt_cv_int_divbyzero_sigfpe=no ac_cv_func_setvbuf_reversed=no ac_cv_func_strcoll_works=yes ac_cv_func_working_mktime=yes ac_cv_type_getgroups=gid_t bash_cv_dup2_broken=no ac_cv_prog_cc_g=no ac_cv_sys_interpreter=no
#pgrp_pipe...
pkg:make
pkg:install
pkg:bin bash
-ln -s bash "${PKG_DEST}/bin/sh"
+pkg: ln -s bash /bin/sh
diff --git a/data/bash/shebang.diff b/data/bash/shebang.diff
new file mode 100644
index 000000000..c850d5c6d
--- /dev/null
+++ b/data/bash/shebang.diff
@@ -0,0 +1,12 @@
+diff -ur bash/execute_cmd.c bash/execute_cmd.c
+--- bash/execute_cmd.c 2018-01-29 10:13:20.000000000 -1000
++++ bash/execute_cmd.c 2018-03-19 17:04:07.000000000 -1000
+@@ -5474,7 +5474,7 @@
+
+ /* If we get to this point, then start checking out the file.
+ Maybe it is something we can hack ourselves. */
+- if (i != ENOEXEC)
++ if (i != ENOEXEC && i != EPERM) // EPERM is the error on iOS11 when it can't execute a shebang
+ {
+ /* make sure this is set correctly for file_error/report_error */
+ last_command_exit_value = (i == ENOENT) ? EX_NOTFOUND : EX_NOEXEC; /* XXX Posix.2 says that exit status is 126 */
diff --git a/data/basic-cmds/_metadata/in.1443.00 b/data/basic-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/basic-cmds/_metadata/in.1443.00
diff --git a/data/basic-cmds/_metadata/maintainer b/data/basic-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/basic-cmds/_metadata/maintainer
+++ b/data/basic-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/bc/_metadata/in.1443.00 b/data/bc/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/bc/_metadata/in.1443.00
diff --git a/data/bc/_metadata/maintainer b/data/bc/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/bc/_metadata/maintainer
+++ b/data/bc/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/berkeleydb/_metadata/in.1443.00 b/data/berkeleydb/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/berkeleydb/_metadata/in.1443.00
diff --git a/data/berkeleydb/_metadata/maintainer b/data/berkeleydb/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/berkeleydb/_metadata/maintainer
+++ b/data/berkeleydb/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/berkeleydb/_metadata/version b/data/berkeleydb/_metadata/version
index 1529b5150..d1c34fe6f 100644
--- a/data/berkeleydb/_metadata/version
+++ b/data/berkeleydb/_metadata/version
@@ -1 +1 @@
-4.6.21
+6.2.32
diff --git a/data/berkeleydb/case.diff b/data/berkeleydb/case.diff
deleted file mode 100644
index 2587fb6f5..000000000
--- a/data/berkeleydb/case.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-diff -ru db-4.6.21/dist/aclocal/mutex.m4 db-4.6.21+iPhone/dist/aclocal/mutex.m4
---- db-4.6.21/dist/aclocal/mutex.m4 2007-05-18 15:08:50.000000000 +0000
-+++ db-4.6.21+iPhone/dist/aclocal/mutex.m4 2008-08-22 07:58:41.000000000 +0000
-@@ -534,21 +534,21 @@
- # Configure a pthreads-style mutex implementation.
- hybrid=pthread
- case "$db_cv_mutex" in
--POSIX/pthreads*) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
-- AC_DEFINE(HAVE_MUTEX_PTHREADS)
-- AH_TEMPLATE(HAVE_MUTEX_PTHREADS,
-- [Define to 1 to use POSIX 1003.1 pthread_XXX mutexes.]);;
- POSIX/pthreads/private*)ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
- AC_DEFINE(HAVE_MUTEX_PTHREADS)
- AC_DEFINE(HAVE_MUTEX_THREAD_ONLY)
- AH_TEMPLATE(HAVE_MUTEX_THREAD_ONLY,
- [Define to 1 to configure mutexes intra-process only.]);;
--POSIX/pthreads/library*)ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
-- AC_DEFINE(HAVE_MUTEX_PTHREADS);;
- POSIX/pthreads/library/private*)
- ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
- AC_DEFINE(HAVE_MUTEX_PTHREADS)
- AC_DEFINE(HAVE_MUTEX_THREAD_ONLY);;
-+POSIX/pthreads/library*)ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
-+ AC_DEFINE(HAVE_MUTEX_PTHREADS);;
-+POSIX/pthreads*) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
-+ AC_DEFINE(HAVE_MUTEX_PTHREADS)
-+ AH_TEMPLATE(HAVE_MUTEX_PTHREADS,
-+ [Define to 1 to use POSIX 1003.1 pthread_XXX mutexes.]);;
- Solaris/lwp*) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
- AC_DEFINE(HAVE_MUTEX_SOLARIS_LWP)
- AH_TEMPLATE(HAVE_MUTEX_SOLARIS_LWP,
diff --git a/data/berkeleydb/db-4.6.21.tar.gz b/data/berkeleydb/db-4.6.21.tar.gz
deleted file mode 100644
index 47287abca..000000000
--- a/data/berkeleydb/db-4.6.21.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/berkeleydb/db-6.2.32.tar.gz b/data/berkeleydb/db-6.2.32.tar.gz
new file mode 100644
index 000000000..80380b32f
--- /dev/null
+++ b/data/berkeleydb/db-6.2.32.tar.gz
Binary files differ
diff --git a/data/berkeleydb/make.sh b/data/berkeleydb/make.sh
index 354b95c76..c6b969a5e 100644
--- a/data/berkeleydb/make.sh
+++ b/data/berkeleydb/make.sh
@@ -1,7 +1,9 @@
pkg:setup
cd dist
+rm -f config.sub
+cp ${PKG_BASE}/config.sub .
./s_config
cd ../build_unix
PKG_CONF=../dist/configure pkg:configure --with-mutex=Darwin/_spin_lock_try
-make
+make -j8
pkg:install
diff --git a/data/bind/_metadata/in.1443.00 b/data/bind/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/bind/_metadata/in.1443.00
diff --git a/data/bind/_metadata/libssl1.0.dep b/data/bind/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/bind/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/bind/_metadata/maintainer b/data/bind/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/bind/_metadata/maintainer
+++ b/data/bind/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/bind/_metadata/openssl.dep b/data/bind/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/bind/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/bind/_metadata/readline.dep b/data/bind/_metadata/readline.dep
new file mode 120000
index 000000000..19073d8e1
--- /dev/null
+++ b/data/bind/_metadata/readline.dep
@@ -0,0 +1 @@
+../../../readline \ No newline at end of file
diff --git a/data/bind/_metadata/version b/data/bind/_metadata/version
index 3c40359d3..f456c0a21 100644
--- a/data/bind/_metadata/version
+++ b/data/bind/_metadata/version
@@ -1 +1 @@
-9.4.2
+9.11.5
diff --git a/data/bind/bind-9.11.5.tar.gz b/data/bind/bind-9.11.5.tar.gz
new file mode 100644
index 000000000..83752448a
--- /dev/null
+++ b/data/bind/bind-9.11.5.tar.gz
Binary files differ
diff --git a/data/bind/bind-9.4.2.tar.gz b/data/bind/bind-9.4.2.tar.gz
deleted file mode 100644
index b625049f8..000000000
--- a/data/bind/bind-9.4.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/bind/make.sh b/data/bind/make.sh
index 950c5c6b5..bfbd90d4b 100644
--- a/data/bind/make.sh
+++ b/data/bind/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-pkg:configure --with-randomdev=/dev/random BUILD_CC=gcc
-make
+pkg:configure --with-randomdev=/dev/random BUILD_CC=gcc --with-openssl="$(PKG_DEST_ _openssl1.0)/usr" --with-ecdsa=no --with-gost=no --with-eddsa=no --with-libxml2=no --with-zlib="${PKG_ROOT}/usr" --with-gssapi=no
+make -j8 CFLAGS="${CFLAGS} -DNO_VERSION_DATE"
pkg:install
diff --git a/data/bind/timestamp.diff b/data/bind/timestamp.diff
deleted file mode 100644
index 2ae8d547f..000000000
--- a/data/bind/timestamp.diff
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -ru bind-9.4.2/bin/named/main.c bind-9.4.2+iPhone/bin/named/main.c
---- bind-9.4.2/bin/named/main.c 2006-11-10 18:51:14.000000000 +0000
-+++ bind-9.4.2+iPhone/bin/named/main.c 2008-06-19 04:33:26.000000000 +0000
-@@ -816,11 +816,7 @@
- * strings named.core | grep "named version:"
- */
- strlcat(version,
--#ifdef __DATE__
-- "named version: BIND " VERSION " (" __DATE__ ")",
--#else
- "named version: BIND " VERSION,
--#endif
- sizeof(version));
- result = isc_file_progname(*argv, program_name, sizeof(program_name));
- if (result != ISC_R_SUCCESS)
diff --git a/data/bison/_metadata/in.1443.00 b/data/bison/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/bison/_metadata/in.1443.00
diff --git a/data/bison/_metadata/maintainer b/data/bison/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/bison/_metadata/maintainer
+++ b/data/bison/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/bison/_metadata/version b/data/bison/_metadata/version
index 005119baa..eca690e73 100644
--- a/data/bison/_metadata/version
+++ b/data/bison/_metadata/version
@@ -1 +1 @@
-2.4.1
+3.0.5
diff --git a/data/bison/bison-2.4.1.tar.bz2 b/data/bison/bison-2.4.1.tar.bz2
deleted file mode 100644
index 139080df7..000000000
--- a/data/bison/bison-2.4.1.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/bison/bison-3.0.5.tar.xz b/data/bison/bison-3.0.5.tar.xz
new file mode 100644
index 000000000..fb018cd90
--- /dev/null
+++ b/data/bison/bison-3.0.5.tar.xz
Binary files differ
diff --git a/data/bison/make.sh b/data/bison/make.sh
index e5b33a4c1..7f30ea22a 100644
--- a/data/bison/make.sh
+++ b/data/bison/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure gl_cv_func_strndup=no ac_cv_func_obstack=no
-make CFLAGS='-O2 -mthumb -fno-common'
+make CFLAGS='-O2 -fno-common'
pkg:install
diff --git a/data/bitchx/_metadata/homepage b/data/bitchx/_metadata/homepage
new file mode 100644
index 000000000..1512b7881
--- /dev/null
+++ b/data/bitchx/_metadata/homepage
@@ -0,0 +1 @@
+http://www.bitchx.com/
diff --git a/data/bitchx/_metadata/in.1443.00 b/data/bitchx/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/bitchx/_metadata/in.1443.00
diff --git a/data/bitchx/_metadata/maintainer b/data/bitchx/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/bitchx/_metadata/maintainer
+++ b/data/bitchx/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/bitchx/_metadata/version b/data/bitchx/_metadata/version
index 9459d4ba2..6085e9465 100644
--- a/data/bitchx/_metadata/version
+++ b/data/bitchx/_metadata/version
@@ -1 +1 @@
-1.1
+1.2.1
diff --git a/data/bitchx/bitchx-1.2.1.tar.gz b/data/bitchx/bitchx-1.2.1.tar.gz
new file mode 100644
index 000000000..d00bd4aa0
--- /dev/null
+++ b/data/bitchx/bitchx-1.2.1.tar.gz
Binary files differ
diff --git a/data/bitchx/ircii-pana-1.1-final.tar.gz b/data/bitchx/ircii-pana-1.1-final.tar.gz
deleted file mode 100644
index 955c9ec9f..000000000
--- a/data/bitchx/ircii-pana-1.1-final.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/bitchx/make.sh b/data/bitchx/make.sh
index 53ef8a373..cc0d625b4 100644
--- a/data/bitchx/make.sh
+++ b/data/bitchx/make.sh
@@ -1,5 +1,5 @@
pkg:setup
pkg:configure
-make
+make -j8
make install prefix="${PKG_DEST}/usr"
-pkg: ln -sf BitchX-1.1-final /usr/bin/BitchX
+pkg: ln -sf BitchX-1.2.1 /usr/bin/BitchX
diff --git a/data/bitchx/mdns.diff b/data/bitchx/mdns.diff
deleted file mode 100644
index 12a95e9f8..000000000
--- a/data/bitchx/mdns.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru BitchX/source/irc.c BitchX+iPhone/source/irc.c
---- BitchX/source/irc.c 2004-03-26 06:15:57.000000000 +0000
-+++ BitchX+iPhone/source/irc.c 2008-03-05 23:33:00.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * ircII: a new irc client. I like it. I hope you will too!
- *
-@@ -1464,6 +1466,15 @@
-
- int main(int argc, char *argv[], char *envp[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- srand((unsigned)time(NULL));
- time(&start_time);
- time(&idle_time);
diff --git a/data/bitchx/port.diff b/data/bitchx/port.diff
deleted file mode 100644
index eb19e9bb4..000000000
--- a/data/bitchx/port.diff
+++ /dev/null
@@ -1,72 +0,0 @@
-diff -ru BitchX/doc/Makefile BitchX+iPhone/doc/Makefile
---- BitchX/doc/Makefile 2004-03-26 06:20:36.000000000 +0000
-+++ BitchX+iPhone/doc/Makefile 2008-03-05 23:22:46.000000000 +0000
-@@ -1,5 +1,5 @@
-
--SHELL = /usr/local/bin/bash
-+SHELL = /bin/sh
-
- default:
- $(SHELL) ./configure --with-plugins
-diff -ru BitchX/source/ctcp.c BitchX+iPhone/source/ctcp.c
---- BitchX/source/ctcp.c 2003-05-27 07:00:22.000000000 +0000
-+++ BitchX+iPhone/source/ctcp.c 2008-03-05 23:23:27.000000000 +0000
-@@ -176,7 +176,7 @@
-
- /* CDE do ops and unban logging */
-
--static char *ctcp_type[] =
-+char *ctcp_type[] =
- {
- "PRIVMSG",
- "NOTICE"
-diff -ru BitchX/source/misc.c BitchX+iPhone/source/misc.c
---- BitchX/source/misc.c 2003-06-11 07:00:42.000000000 +0000
-+++ BitchX+iPhone/source/misc.c 2008-03-05 23:26:27.000000000 +0000
-@@ -59,6 +59,14 @@
- #endif
- #include <unistd.h>
-
-+#define BIND_8_COMPAT
-+#include <arpa/nameser.h>
-+#include <stdio.h>
-+#include <netdb.h>
-+#include <resolv.h>
-+#include <errno.h>
-+#include <arpa/inet.h>
-+
- #if defined(sparc) && defined(sun4c)
- #include <sys/rusage.h>
- #endif
-@@ -2601,7 +2609,7 @@
- /*
- * Skip over the original question.
- */
--#ifndef __QNX__
-+#if 0//ndef __QNX__
- /* QNX doesn't seem to have this function, not sure
- * what it does at the moment but I may change this
- * in the future. - Brian
-diff -ru BitchX/source/term.c BitchX+iPhone/source/term.c
---- BitchX/source/term.c 2003-04-11 01:09:07.000000000 +0000
-+++ BitchX+iPhone/source/term.c 2008-03-05 23:25:10.000000000 +0000
-@@ -92,7 +92,6 @@
- #endif
-
- extern char *getenv();
--extern char *tparm();
-
- /*
- * The old code assumed termcap. termcap is almost always present, but on
-diff -ru BitchX/source/timer.c BitchX+iPhone/source/timer.c
---- BitchX/source/timer.c 2003-04-11 01:09:07.000000000 +0000
-+++ BitchX+iPhone/source/timer.c 2008-03-05 23:25:32.000000000 +0000
-@@ -148,7 +148,7 @@
- * This is put here on purpose -- we dont want any of the above functions
- * to have any knowledge of this struct.
- */
--static TimerList *PendingTimers;
-+TimerList *PendingTimers;
- static char *schedule_timer (TimerList *ntimer);
-
- static char *current_exec_timer = empty_string;
diff --git a/data/boost_/_metadata/description b/data/boost/_metadata/description
index 632f0918d..632f0918d 100644
--- a/data/boost_/_metadata/description
+++ b/data/boost/_metadata/description
diff --git a/data/boost_/_metadata/homepage b/data/boost/_metadata/homepage
index 8d61cfddc..8d61cfddc 100644
--- a/data/boost_/_metadata/homepage
+++ b/data/boost/_metadata/homepage
diff --git a/data/boost/_metadata/in.1443.00 b/data/boost/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/boost/_metadata/in.1443.00
diff --git a/data/boost_/_metadata/license b/data/boost/_metadata/license
index 36b7cd93c..36b7cd93c 100644
--- a/data/boost_/_metadata/license
+++ b/data/boost/_metadata/license
diff --git a/data/boost/_metadata/maintainer b/data/boost/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/boost/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/boost_/_metadata/name b/data/boost/_metadata/name
index 68c56d494..68c56d494 100644
--- a/data/boost_/_metadata/name
+++ b/data/boost/_metadata/name
diff --git a/data/freecoder.org/_metadata/priority b/data/boost/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/freecoder.org/_metadata/priority
+++ b/data/boost/_metadata/priority
diff --git a/data/boost/_metadata/role b/data/boost/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/boost/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/gnupth/_metadata/section b/data/boost/_metadata/section
index e0eb96881..e0eb96881 100644
--- a/data/gnupth/_metadata/section
+++ b/data/boost/_metadata/section
diff --git a/data/boost/_metadata/tags b/data/boost/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/boost/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/boost/_metadata/version b/data/boost/_metadata/version
new file mode 100644
index 000000000..ee2f4ca91
--- /dev/null
+++ b/data/boost/_metadata/version
@@ -0,0 +1 @@
+1.68.0
diff --git a/data/boost/boost_1_68_0.tar.bz2 b/data/boost/boost_1_68_0.tar.bz2
new file mode 100644
index 000000000..8721965fd
--- /dev/null
+++ b/data/boost/boost_1_68_0.tar.bz2
Binary files differ
diff --git a/data/boost/make.sh b/data/boost/make.sh
new file mode 100644
index 000000000..4f804c29f
--- /dev/null
+++ b/data/boost/make.sh
@@ -0,0 +1,12 @@
+shopt -s extglob
+pkg:setup
+./bootstrap.sh --prefix=/usr
+#toolset=gcc-arm64 using gcc : arm64 : aarch64-apple-darwin17-g++ ;
+echo "using clang : arm : ${PKG_TARG}-g++ ;" >>project-config.jam
+./b2 install toolset=clang-arm abi=aapcs --prefix="${PKG_DEST}/usr" -j16
+rm -f "${PKG_DEST}"/usr/lib/*-d?(-+([0-9_])).@(a|dylib)
+for na in "${PKG_DEST}"/usr/lib/*-+([0-9_]).a; do
+ a=${na/-+([0-9_]).a/.a}
+ rm -f "$a"
+ ln -s "$(basename "$na")" "$a"
+done
diff --git a/data/boost_/_metadata/version b/data/boost_/_metadata/version
deleted file mode 100644
index a95a46d9f..000000000
--- a/data/boost_/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-1.34.1
diff --git a/data/boost_/boost_1_34_1.tar.gz b/data/boost_/boost_1_34_1.tar.gz
deleted file mode 100644
index da01fdb6b..000000000
--- a/data/boost_/boost_1_34_1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/boost_/make.sh b/data/boost_/make.sh
deleted file mode 100644
index 483aa3d4c..000000000
--- a/data/boost_/make.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-shopt -s extglob
-pkg:setup
-./configure --prefix=/usr --without-icu --without-libraries=python
-echo 'using darwin ;' >user-config.jam
-make
-make install PREFIX="${PKG_DEST}/usr"
-rm -f "${PKG_DEST}"/usr/lib/*-d?(-+([0-9_])).@(a|dylib)
-for na in "${PKG_DEST}"/usr/lib/*-+([0-9_]).a; do
- a=${na/-+([0-9_]).a/.a}
- rm -f "$a"
- ln -s "$(basename "$na")" "$a"
-done
diff --git a/data/boost_/port.diff b/data/boost_/port.diff
deleted file mode 100644
index 4a6ab6a9b..000000000
--- a/data/boost_/port.diff
+++ /dev/null
@@ -1,162 +0,0 @@
-diff -ru boost_1_34_1/boost/test/impl/execution_monitor.ipp boost_1_34_1+iPhone/boost/test/impl/execution_monitor.ipp
---- boost_1_34_1/boost/test/impl/execution_monitor.ipp 2006-02-22 16:14:45.000000000 +0000
-+++ boost_1_34_1+iPhone/boost/test/impl/execution_monitor.ipp 2007-12-29 13:59:38.000000000 +0000
-@@ -85,7 +85,9 @@
-
- # include <unistd.h>
- # include <signal.h>
-+extern "C" {
- # include <setjmp.h>
-+}
-
- #else
-
-diff -ru boost_1_34_1/configure boost_1_34_1+iPhone/configure
---- boost_1_34_1/configure 2007-05-09 22:09:39.000000000 +0000
-+++ boost_1_34_1+iPhone/configure 2007-12-29 14:31:08.000000000 +0000
-@@ -339,8 +339,8 @@
- @cd status && ../\$(BJAM) \$(BJAM_CONFIG) --user-config=../user-config.jam || echo "Some Boost regression tests failed. This is normal for many compilers."
-
- install: .dummy
-- @echo "\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam --prefix=\$(PREFIX) --exec-prefix=\$(EPREFIX) --libdir=\$(LIBDIR) --includedir=\$(INCLUDEDIR) \$(LIBS) install"
-- @\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam --prefix=\$(PREFIX) --exec-prefix=\$(EPREFIX) --libdir=\$(LIBDIR) --includedir=\$(INCLUDEDIR) \$(LIBS) install || echo "Not all Boost libraries built properly."
-+ @echo "\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam --prefix=\$(PREFIX) \$(LIBS) install"
-+ @\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam --prefix=\$(PREFIX) \$(LIBS) install || echo "Not all Boost libraries built properly."
-
- .dummy:
-
-diff -ru boost_1_34_1/libs/serialization/build/Jamfile.v2 boost_1_34_1+iPhone/libs/serialization/build/Jamfile.v2
---- boost_1_34_1/libs/serialization/build/Jamfile.v2 2006-03-06 08:20:39.000000000 +0000
-+++ boost_1_34_1+iPhone/libs/serialization/build/Jamfile.v2 2007-12-29 13:50:00.000000000 +0000
-@@ -60,11 +60,3 @@
- :
- : <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK=1
- ;
--
--lib boost_wserialization
-- : $(WSOURCES).cpp boost_serialization
-- : <toolset>msvc:<cxxflags>/Gy
-- <link>shared:<define>BOOST_WSERIALIZATION_DYN_LINK=1
-- :
-- : <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK=1
-- ;
-diff -ru boost_1_34_1/tools/build/v2/test/BoostBuild.py boost_1_34_1+iPhone/tools/build/v2/test/BoostBuild.py
---- boost_1_34_1/tools/build/v2/test/BoostBuild.py 2006-11-10 07:41:29.000000000 +0000
-+++ boost_1_34_1+iPhone/tools/build/v2/test/BoostBuild.py 2007-12-29 09:35:11.000000000 +0000
-@@ -43,8 +43,7 @@
- if toolset in ["gcc"]:
- suffixes['.lib'] = '.a' # static libs have '.a' suffix with mingw...
- suffixes['.obj'] = '.o'
-- if os.__dict__.has_key('uname') and os.uname()[0] == 'Darwin':
-- suffixes['.dll'] = '.dylib'
-+ suffixes['.dll'] = '.dylib'
-
- def re_remove(sequence,regex):
- me = re.compile(regex)
-diff -ru boost_1_34_1/tools/build/v2/tools/darwin.jam boost_1_34_1+iPhone/tools/build/v2/tools/darwin.jam
---- boost_1_34_1/tools/build/v2/tools/darwin.jam 2007-03-15 04:02:23.000000000 +0000
-+++ boost_1_34_1+iPhone/tools/build/v2/tools/darwin.jam 2007-12-29 13:45:29.000000000 +0000
-@@ -31,7 +31,7 @@
- rule init ( version ? : command * : options * )
- {
- local condition = [ common.check-init-parameters darwin : version $(version) ] ;
-- local command = [ common.get-invocation-command darwin : g++ : $(command) ] ;
-+ local command = [ common.get-invocation-command darwin : $(PKG_TARG)-g++ : $(command) ] ;
-
- common.handle-options darwin : $(condition) : $(command) : $(options) ;
-
-@@ -42,6 +42,7 @@
- flags darwin.compile.c++ OPTIONS : -fcoalesce-templates ;
- }
-
-+ #flags darwin.compile.c++ OPTIONS : -v ;
- gcc.init-link-flags darwin darwin $(condition) ;
-
- flags darwin.link NEED_STRIP $(condition)/<debug-symbols>off : "" ;
-@@ -86,7 +87,7 @@
-
- actions link.dll bind LIBRARIES
- {
-- $(CONFIG_COMMAND) -dynamiclib -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(FRAMEWORK_PATH) -framework$(_)$(FRAMEWORK:D=:S=) $(OPTIONS) $(USER_OPTIONS)
-+ $(CONFIG_COMMAND) -dynamiclib -single_module -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(FRAMEWORK_PATH) -framework$(_)$(FRAMEWORK:D=:S=) $(OPTIONS) $(USER_OPTIONS)
- }
-
- actions piecemeal archive
-diff -ru boost_1_34_1/tools/build/v2/tools/gcc.jam boost_1_34_1+iPhone/tools/build/v2/tools/gcc.jam
---- boost_1_34_1/tools/build/v2/tools/gcc.jam 2007-06-12 04:47:49.000000000 +0000
-+++ boost_1_34_1+iPhone/tools/build/v2/tools/gcc.jam 2007-12-29 09:30:15.000000000 +0000
-@@ -62,7 +62,7 @@
- {
- # Information about the gcc command...
- # The command.
-- local command = [ common.get-invocation-command gcc : g++ : $(command) ] ;
-+ local command = [ common.get-invocation-command gcc : $(PKG_TARG)-g++ : $(command) ] ;
- # The root directory of the tool install.
- local root = [ feature.get-values <root> : $(options) ] ;
- # The bin directory where to find the command to execute.
-@@ -109,17 +109,7 @@
- common.handle-options gcc : $(condition) : $(command) : $(options) ;
-
- local linker = [ feature.get-values <linker-type> : $(options) ] ;
-- if ! $(linker) {
--
-- if [ os.name ] = OSF
-- {
-- linker = osf ;
-- }
-- else
-- {
-- linker = gnu ;
-- }
-- }
-+ linker = darwin ;
- init-link-flags gcc $(linker) $(condition) ;
-
-
-@@ -310,14 +300,6 @@
- # to implement and will increase target path length even more.
- flags gcc.compile OPTIONS <link>shared : -fPIC ;
- }
--if [ os.name ] != NT && [ os.name ] != OSF
--{
-- # OSF does have an option called -soname but it doesn't seem to work as
-- # expected, therefore it has been disabled.
--
-- HAVE_SONAME = "" ;
-- SONAME_OPTION = -h ;
--}
-
-
-
-@@ -629,7 +611,7 @@
- # Differ from 'link' above only by -shared.
- actions link.dll bind LIBRARIES
- {
-- "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS)
-+ "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -dynamiclib $(START-GROUP) "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS)
- }
-
- # Set up threading support. It's somewhat contrived, so perform it at the end,
-diff -ru boost_1_34_1/tools/jam/src/jam.c boost_1_34_1+iPhone/tools/jam/src/jam.c
---- boost_1_34_1/tools/jam/src/jam.c 2005-11-15 05:44:03.000000000 +0000
-+++ boost_1_34_1+iPhone/tools/jam/src/jam.c 2007-12-29 09:28:28.000000000 +0000
-@@ -375,7 +375,7 @@
- list_new(
- list_new(
- list_new( L0,
-- newstr( u.sysname ) ),
-+ newstr( "Darwin" ) ),
- newstr( u.nodename ) ),
- newstr( u.release ) ),
- newstr( u.version ) ),
-diff -ru boost_1_34_1/tools/jam/src/jam.h boost_1_34_1+iPhone/tools/jam/src/jam.h
---- boost_1_34_1/tools/jam/src/jam.h 2005-10-16 15:34:27.000000000 +0000
-+++ boost_1_34_1+iPhone/tools/jam/src/jam.h 2007-12-29 09:42:21.000000000 +0000
-@@ -556,4 +556,7 @@
- # define DEBUG_GRAPH ( globs.debug[ 12 ] ) /* debug dependencies */
- # define DEBUG_FATE ( globs.debug[ 13 ] ) /* show changes to fate in make0() */
-
-+# undef OSMINOR
-+# define OSMINOR "OS=MACOSX"
-+
- #endif
diff --git a/data/bootstrap-cmds/_metadata/in.1443.00 b/data/bootstrap-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/bootstrap-cmds/_metadata/in.1443.00
diff --git a/data/bootstrap-cmds/_metadata/maintainer b/data/bootstrap-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/bootstrap-cmds/_metadata/maintainer
+++ b/data/bootstrap-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/bootstrap-cmds/arm.diff b/data/bootstrap-cmds/arm.diff
index 365f105f1..2b38cc749 100644
--- a/data/bootstrap-cmds/arm.diff
+++ b/data/bootstrap-cmds/arm.diff
@@ -5,7 +5,7 @@ diff -ru bootstrap_cmds-60/migcom.tproj/mig_machine.h bootstrap_cmds-60+iPhone/m
#include "i386/mig_machine.h"
#elif defined(__ppc__)
#include "ppc/mig_machine.h"
-+#elif defined(__arm__)
++#elif defined(__arm__) || defined(__arm64__)
+#include "arm/mig_machine.h"
#else
#error Architecture not supported
diff --git a/data/bsdiff/_metadata/in.1443.00 b/data/bsdiff/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/bsdiff/_metadata/in.1443.00
diff --git a/data/bzip2/_metadata/in.1443.00 b/data/bzip2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/bzip2/_metadata/in.1443.00
diff --git a/data/bzip2/_metadata/maintainer b/data/bzip2/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/bzip2/_metadata/maintainer
+++ b/data/bzip2/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/bzip2/_metadata/version b/data/bzip2/_metadata/version
index 90a27f9ce..af0b7ddbf 100644
--- a/data/bzip2/_metadata/version
+++ b/data/bzip2/_metadata/version
@@ -1 +1 @@
-1.0.5
+1.0.6
diff --git a/data/bzip2/bzip2-1.0.5.tar.gz b/data/bzip2/bzip2-1.0.5.tar.gz
deleted file mode 100644
index 6e7550efe..000000000
--- a/data/bzip2/bzip2-1.0.5.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/bzip2/bzip2-1.0.6.tar.gz b/data/bzip2/bzip2-1.0.6.tar.gz
new file mode 100644
index 000000000..e47e9034c
--- /dev/null
+++ b/data/bzip2/bzip2-1.0.6.tar.gz
Binary files differ
diff --git a/data/class-dump/_metadata/in.1443.00 b/data/class-dump/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/class-dump/_metadata/in.1443.00
diff --git a/data/class-dump/_metadata/maintainer b/data/class-dump/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/class-dump/_metadata/maintainer
+++ b/data/class-dump/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/classpath/_metadata/in.1443.00 b/data/classpath/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/classpath/_metadata/in.1443.00
diff --git a/data/classpath/_metadata/maintainer b/data/classpath/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/classpath/_metadata/maintainer
+++ b/data/classpath/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/connect.c/_metadata/in.1443.00 b/data/connect.c/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/connect.c/_metadata/in.1443.00
diff --git a/data/connect.c/_metadata/maintainer b/data/connect.c/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/connect.c/_metadata/maintainer
+++ b/data/connect.c/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/coreutils-bin/_metadata/in.1443.00 b/data/coreutils-bin/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/coreutils-bin/_metadata/in.1443.00
diff --git a/data/coreutils/_metadata/in.1443.00 b/data/coreutils/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/coreutils/_metadata/in.1443.00
diff --git a/data/cpanminus/App-cpanminus-1.7044.tar.gz b/data/cpanminus/App-cpanminus-1.7044.tar.gz
new file mode 100644
index 000000000..9ae3d15d2
--- /dev/null
+++ b/data/cpanminus/App-cpanminus-1.7044.tar.gz
Binary files differ
diff --git a/data/cpanminus/_metadata/description b/data/cpanminus/_metadata/description
new file mode 100644
index 000000000..49096527f
--- /dev/null
+++ b/data/cpanminus/_metadata/description
@@ -0,0 +1 @@
+script to get, unpack, build and install modules from CPAN
diff --git a/data/cpanminus/_metadata/in.1443.00 b/data/cpanminus/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/cpanminus/_metadata/in.1443.00
diff --git a/data/perl_/_metadata/license b/data/cpanminus/_metadata/license
index 43cd72c3e..43cd72c3e 100644
--- a/data/perl_/_metadata/license
+++ b/data/cpanminus/_metadata/license
diff --git a/data/cpanminus/_metadata/maintainer b/data/cpanminus/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/cpanminus/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/cpanminus/_metadata/name b/data/cpanminus/_metadata/name
new file mode 100644
index 000000000..4600dca9f
--- /dev/null
+++ b/data/cpanminus/_metadata/name
@@ -0,0 +1 @@
+App::cpanminus
diff --git a/data/cpanminus/_metadata/perl.dep b/data/cpanminus/_metadata/perl.dep
new file mode 120000
index 000000000..899dc46ed
--- /dev/null
+++ b/data/cpanminus/_metadata/perl.dep
@@ -0,0 +1 @@
+../../perl \ No newline at end of file
diff --git a/data/gnupth/_metadata/priority b/data/cpanminus/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/gnupth/_metadata/priority
+++ b/data/cpanminus/_metadata/priority
diff --git a/data/cpanminus/_metadata/role b/data/cpanminus/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/cpanminus/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/cpanminus/_metadata/section b/data/cpanminus/_metadata/section
new file mode 100644
index 000000000..ddc7f1fd8
--- /dev/null
+++ b/data/cpanminus/_metadata/section
@@ -0,0 +1 @@
+Scripting
diff --git a/data/cpanminus/_metadata/tags b/data/cpanminus/_metadata/tags
new file mode 100644
index 000000000..91c01ad11
--- /dev/null
+++ b/data/cpanminus/_metadata/tags
@@ -0,0 +1 @@
+purpose::console, role::developer
diff --git a/data/cpanminus/_metadata/version b/data/cpanminus/_metadata/version
new file mode 100644
index 000000000..5b971f3c8
--- /dev/null
+++ b/data/cpanminus/_metadata/version
@@ -0,0 +1 @@
+1.7044
diff --git a/data/cpanminus/make.sh b/data/cpanminus/make.sh
new file mode 100644
index 000000000..0572d5f18
--- /dev/null
+++ b/data/cpanminus/make.sh
@@ -0,0 +1,7 @@
+pkg:setup
+echo 'INCLUDE = .' > config.in
+echo 'LIB = .' >> config.in
+export PERL_SRC="$(PKG_DEST_ perl)"
+$(PKG_WORK_ perl)/perl-5*/miniperl_top Makefile.PL
+pkg:make
+make pure_vendor_install DESTDIR="${PKG_DEST}"
diff --git a/data/cpio/_metadata/in.1443.00 b/data/cpio/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/cpio/_metadata/in.1443.00
diff --git a/data/cpio/_metadata/maintainer b/data/cpio/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/cpio/_metadata/maintainer
+++ b/data/cpio/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/cpio/_metadata/version b/data/cpio/_metadata/version
index 8c2691509..3e162f02e 100644
--- a/data/cpio/_metadata/version
+++ b/data/cpio/_metadata/version
@@ -1 +1 @@
-2.9
+2.12
diff --git a/data/cpio/cpio-2.12.tar.bz2 b/data/cpio/cpio-2.12.tar.bz2
new file mode 100644
index 000000000..80bda2b69
--- /dev/null
+++ b/data/cpio/cpio-2.12.tar.bz2
Binary files differ
diff --git a/data/cpio/cpio-2.9.tar.gz b/data/cpio/cpio-2.9.tar.gz
deleted file mode 100644
index ebdb4fb10..000000000
--- a/data/cpio/cpio-2.9.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/cpio/make.sh b/data/cpio/make.sh
index 7c5a8023e..0d5a91a00 100644
--- a/data/cpio/make.sh
+++ b/data/cpio/make.sh
@@ -1,5 +1,5 @@
pkg:setup
pkg:configure ac_cv_func_obstack=no
-make
+make -j8
pkg:install
pkg: rm -f /usr/libexec/rmt
diff --git a/data/cpio/progname.diff b/data/cpio/progname.diff
new file mode 100644
index 000000000..fbcea28c0
--- /dev/null
+++ b/data/cpio/progname.diff
@@ -0,0 +1,14 @@
+diff -ur cpio-2.12/gnu/progname.c cpio-2.12+iPhone/gnu/progname.c
+--- cpio-2.12/gnu/progname.c 2015-08-31 09:58:43.000000000 -1000
++++ cpio-2.12+iPhone/gnu/progname.c 2018-08-14 11:30:38.000000000 -1000
+@@ -28,10 +28,6 @@
+ #include <string.h>
+
+
+-/* String containing name the program is called with.
+- To be initialized by main(). */
+-const char *program_name = NULL;
+-
+ /* Set program_name, based on argv[0].
+ argv0 must be a string allocated with indefinite extent, and must not be
+ modified after this call. */
diff --git a/data/cpio/static.diff b/data/cpio/static.diff
deleted file mode 100644
index 41733b504..000000000
--- a/data/cpio/static.diff
+++ /dev/null
@@ -1,64 +0,0 @@
-diff -r -u tar-1.19/lib/argp-fmtstream.h tar-1.19+iPhone/lib/argp-fmtstream.h
---- tar-1.19/lib/argp-fmtstream.h 2007-09-28 13:11:36.000000000 +0000
-+++ tar-1.19+iPhone/lib/argp-fmtstream.h 2007-12-26 23:04:38.000000000 +0000
-@@ -135,15 +135,15 @@
- const char *__fmt, ...)
- __attribute__ ((__format__ (printf, 2, 3)));
-
--extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
--extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
-+static int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
-+static int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
-
--extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str);
--extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str);
-+static int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str);
-+static int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str);
-
--extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs,
-+static size_t __argp_fmtstream_write (argp_fmtstream_t __fs,
- const char *__str, size_t __len);
--extern size_t argp_fmtstream_write (argp_fmtstream_t __fs,
-+static size_t argp_fmtstream_write (argp_fmtstream_t __fs,
- const char *__str, size_t __len);
-
- /* Access macros for various bits of state. */
-@@ -155,25 +155,25 @@
- #define __argp_fmtstream_wmargin argp_fmtstream_wmargin
-
- /* Set __FS's left margin to LMARGIN and return the old value. */
--extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs,
-+static size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs,
- size_t __lmargin);
- extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs,
- size_t __lmargin);
-
- /* Set __FS's right margin to __RMARGIN and return the old value. */
--extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs,
-+static size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs,
- size_t __rmargin);
- extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs,
- size_t __rmargin);
-
- /* Set __FS's wrap margin to __WMARGIN and return the old value. */
--extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs,
-+static size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs,
- size_t __wmargin);
- extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs,
- size_t __wmargin);
-
- /* Return the column number of the current output point in __FS. */
--extern size_t argp_fmtstream_point (argp_fmtstream_t __fs);
-+static size_t argp_fmtstream_point (argp_fmtstream_t __fs);
- extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs);
-
- /* Internal routines. */
-@@ -198,7 +198,7 @@
- #endif
-
- #ifndef ARGP_FS_EI
--#define ARGP_FS_EI extern inline
-+#define ARGP_FS_EI static inline
- #endif
-
- ARGP_FS_EI size_t
diff --git a/data/csu/_metadata/in.1443.00 b/data/csu/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/csu/_metadata/in.1443.00
diff --git a/data/csu/_metadata/maintainer b/data/csu/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/csu/_metadata/maintainer
+++ b/data/csu/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/curl/_metadata/in.1443.00 b/data/curl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/curl/_metadata/in.1443.00
diff --git a/data/curl/_metadata/in.550.58 b/data/curl/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/curl/_metadata/in.550.58
diff --git a/data/curl/_metadata/libnghttp2.dep b/data/curl/_metadata/libnghttp2.dep
new file mode 120000
index 000000000..a300ffaee
--- /dev/null
+++ b/data/curl/_metadata/libnghttp2.dep
@@ -0,0 +1 @@
+../../libnghttp2 \ No newline at end of file
diff --git a/data/curl/_metadata/libssh2.dep b/data/curl/_metadata/libssh2.dep
new file mode 120000
index 000000000..e5424dba9
--- /dev/null
+++ b/data/curl/_metadata/libssh2.dep
@@ -0,0 +1 @@
+../../libssh2 \ No newline at end of file
diff --git a/data/curl/_metadata/libssl1.0.dep b/data/curl/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/curl/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/curl/_metadata/maintainer b/data/curl/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/curl/_metadata/maintainer
+++ b/data/curl/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/curl/_metadata/openssl.dep b/data/curl/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/curl/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/curl/_metadata/version b/data/curl/_metadata/version
index fc7552203..3fa542c1e 100644
--- a/data/curl/_metadata/version
+++ b/data/curl/_metadata/version
@@ -1 +1 @@
-7.33.0
+7.62.0
diff --git a/data/curl/curl-7.33.0.tar.bz2 b/data/curl/curl-7.33.0.tar.bz2
deleted file mode 100644
index 483cdeccd..000000000
--- a/data/curl/curl-7.33.0.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/curl/curl-7.62.0.tar.xz b/data/curl/curl-7.62.0.tar.xz
new file mode 100644
index 000000000..cd9a67d82
--- /dev/null
+++ b/data/curl/curl-7.62.0.tar.xz
Binary files differ
diff --git a/data/curl/flags.diff b/data/curl/flags.diff
new file mode 100644
index 000000000..9276f7e90
--- /dev/null
+++ b/data/curl/flags.diff
@@ -0,0 +1,47 @@
+diff -ur curl-7.61.0/acinclude.m4 curl-7.61.0+iPhone/acinclude.m4
+--- curl-7.61.0/acinclude.m4 2018-07-08 20:42:12.000000000 -1000
++++ curl-7.61.0+iPhone/acinclude.m4 2018-07-30 23:44:08.000000000 -1000
+@@ -2615,18 +2615,6 @@
+ AC_MSG_RESULT([$tst_cflags]);
+
+ if test "$tst_cflags" = "yes"; then
+- AC_MSG_CHECKING([for *version-min in CFLAGS])
+- min=""
+- if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then
+- min="-mmacosx-version-min=10.8"
+- CFLAGS="$CFLAGS $min"
+- fi
+- if test -z "$min"; then
+- AC_MSG_RESULT([set by user])
+- else
+- AC_MSG_RESULT([$min set])
+- fi
+-
+ old_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -Werror=partial-availability"
+ AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability])
+diff -ur curl-7.61.0/configure curl-7.61.0+iPhone/configure
+--- curl-7.61.0/configure 2018-07-08 20:52:18.000000000 -1000
++++ curl-7.61.0+iPhone/configure 2018-07-30 23:44:40.000000000 -1000
+@@ -19046,21 +19046,6 @@
+ $as_echo "$tst_cflags" >&6; };
+
+ if test "$tst_cflags" = "yes"; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for *version-min in CFLAGS" >&5
+-$as_echo_n "checking for *version-min in CFLAGS... " >&6; }
+- min=""
+- if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then
+- min="-mmacosx-version-min=10.8"
+- CFLAGS="$CFLAGS $min"
+- fi
+- if test -z "$min"; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: set by user" >&5
+-$as_echo "set by user" >&6; }
+- else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $min set" >&5
+-$as_echo "$min set" >&6; }
+- fi
+-
+ old_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -Werror=partial-availability"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Werror=partial-availability" >&5
diff --git a/data/curl/make.sh b/data/curl/make.sh
index 7aad85705..e5d645260 100644
--- a/data/curl/make.sh
+++ b/data/curl/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-pkg:configure ac_cv_file___dev_urandom_=yes
-pkg:make
+pkg:configure ac_cv_file___dev_urandom_=yes --with-ca-bundle=/etc/ssl/certs/cacert.pem
+pkg:make -j8
pkg:install
diff --git a/data/cvs/_metadata/in.1443.00 b/data/cvs/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/cvs/_metadata/in.1443.00
diff --git a/data/cvs/_metadata/maintainer b/data/cvs/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/cvs/_metadata/maintainer
+++ b/data/cvs/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/cvs/_metadata/version b/data/cvs/_metadata/version
index 45333f34e..0073c5fd0 100644
--- a/data/cvs/_metadata/version
+++ b/data/cvs/_metadata/version
@@ -1 +1 @@
-1.11.22
+1.12.13+deb9u1
diff --git a/data/cvs/cvs-1.11.22.tar.gz b/data/cvs/cvs-1.11.22.tar.gz
deleted file mode 100644
index b135ea320..000000000
--- a/data/cvs/cvs-1.11.22.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/cvs/cvs_1.12.13+real-22+deb9u1.diff b/data/cvs/cvs_1.12.13+real-22+deb9u1.diff
new file mode 100644
index 000000000..550d830df
--- /dev/null
+++ b/data/cvs/cvs_1.12.13+real-22+deb9u1.diff
@@ -0,0 +1,12224 @@
+--- cvs-1.12.13+real.orig/AUTHORS
++++ cvs-1.12.13+real/AUTHORS
+@@ -57,6 +57,12 @@
+ There have been many, many contributions not listed here. Consult the
+ individual ChangeLog files in each directory for a more complete idea.
+
++Thorsten Glaser <tg@mirbsd.org> is responsible for the MirOS extensions,
++some of which were inspired by changes to GNU CVS 1.11.1p1 by other BSDs,
++and by changes from the previous Debian package; he did the MirBSD port
++as well as the MirPorts Framework and new Debian packaging, all of which
++include some original development work and fixes.
++
+ In addition to the above contributors, the following Beta testers
+ deserve special mention for their support. This is only a partial
+ list; if you have helped in this way and would like to be listed, let
+@@ -88,3 +94,6 @@
+ Many contributors have added code to the "contrib" directory. See the
+ README file there for a list of what is available. There is also a
+ contributed GNU Emacs CVS-mode in tools/pcl-cvs.
++
++
++$MirOS: src/gnu/usr.bin/cvs/AUTHORS,v 1.6 2016/11/08 23:08:09 tg Exp $
+--- cvs-1.12.13+real.orig/DEVEL-CVS
++++ cvs-1.12.13+real/DEVEL-CVS
+@@ -7,7 +7,8 @@
+ Policies regarding the CVS source repository:
+
+ By checking items into the repository, developers agree to permit
+-distribution of such items under the terms of the GNU Public License.
++distribution of such items under the terms of the GNU General Public
++License.
+
+ ----------------------------------------------------------------------
+ Procedure for dealing with people who want to be developers:
+--- cvs-1.12.13+real.orig/FAQ
++++ cvs-1.12.13+real/FAQ
+@@ -7234,7 +7234,7 @@
+
+ It will respond:
+
+- Directory /Repos/<dir> added to the repository
++ Directory /Repos/<dir> put under version control
+
+ and will create both a matching directory in the Repository and a
+ ./CVS administrative directory within the local <dir> directory.
+--- cvs-1.12.13+real.orig/MINOR-BUGS
++++ cvs-1.12.13+real/MINOR-BUGS
+@@ -59,3 +59,15 @@
+ belong under the "checkout" function? Perhaps it is more logically
+ grouped with the "history" function or we should create a new "info"
+ function?
++
++
++Note that it is the opinion of the MirBSD founder that the CVSROOT
++environment variable ought to *never* be set at all. This prevents
++a lot of trouble. Almost all CVS tutorials stating otherwise (or
++recommending pserver) are perceived bogus.
++
++"cvs annotate -b" does not do what people would expect, I think,
++but neither does it do that under MidnightBSD/DragonFly, where
++it came from.
++
++$MirOS: src/gnu/usr.bin/cvs/MINOR-BUGS,v 1.5 2016/11/08 23:04:31 tg Exp $
+--- cvs-1.12.13+real.orig/NEWS
++++ cvs-1.12.13+real/NEWS
+@@ -1,3 +1,11 @@
++Changes since 1.12.13:
++**********************
++
++* many which are only documented in MirBSD CVS
++
++* A new command line option, --allow-root-regexp, was added which allows
++ acceptable repositories to be specified using a list of regular expressions.
++
+ Changes since 1.12.12:
+ **********************
+
+--- cvs-1.12.13+real.orig/configure.in
++++ cvs-1.12.13+real/configure.in
+@@ -4,6 +4,8 @@
+ [Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
++Copyright (c) 2003, 2004, 2005, 2010, 2011, 2012, 2013, 2015, 2016
++ mirabilos <m@mirbsd.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -15,11 +17,12 @@
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.])
+
+-AC_INIT([Concurrent Versions System (CVS)],[1.12.13],
++AC_INIT([Concurrent Versions System (CVS)],[1.12.13-MirDebian-22],
+ [bug-cvs@nongnu.org],[cvs])
+ AC_CONFIG_SRCDIR(src/cvs.h)
+ AC_CONFIG_AUX_DIR(build-aux)
+ AM_INIT_AUTOMAKE([gnu 1.9.2 dist-bzip2 no-define])
++AM_GNU_GETTEXT_VERSION([0.14.4])
+ AC_PREREQ(2.59)
+
+ AC_PREFIX_PROGRAM(cvs)
+@@ -155,6 +158,8 @@
+ AC_CHECK_HEADERS(\
+ direct.h \
+ fcntl.h \
++ getopt.h \
++ inttypes.h \
+ io.h \
+ memory.h \
+ ndbm.h \
+@@ -162,11 +167,14 @@
+ syslog.h \
+ sys/bsdtypes.h \
+ sys/file.h \
++ sys/inttypes.h \
+ sys/param.h \
+ sys/resource.h \
+ sys/select.h \
+ unistd.h \
+- utime.h\
++ utime.h \
++ wctype.h \
++ zlib.h \
+ )
+ AC_HEADER_STAT
+
+@@ -180,6 +188,8 @@
+ AC_CHECK_MEMBERS([struct stat.st_rdev])
+
+ AC_FUNC_FSEEKO
++AC_FUNC_ALLOCA
++AC_CHECK_FUNCS([fseeko])
+ if test $ac_cv_func_fseeko = no; then
+ AC_LIBOBJ(fseeko)
+ AC_LIBOBJ(ftello)
+@@ -1444,7 +1454,7 @@
+ [config-override],
+ AC_HELP_STRING(
+ [--enable-config-override],
+- [Set to a comma-seperated list of paths to directories (designated by
++ [Set to a comma-separated list of paths to directories (designated by
+ trailing `/') and files, specifies the path prefixes (for directories) and
+ paths to files the CVS server commands will allow configuration to be read
+ from. Specify `--enable-config-override=no' to disable config file
+--- cvs-1.12.13+real.orig/contrib/cvs_acls.html
++++ cvs-1.12.13+real/contrib/cvs_acls.html
+@@ -280,7 +280,7 @@
+ <p>A final note about the repository matching pattern. The example above
+ uses ``ALL'' but note that this means that the cvs_acls script will run
+ for each and every commit in your repository. Obviously, in a large
+-repository this adds up to a lot of overhead that may not be necesary.
++repository this adds up to a lot of overhead that may not be necessary.
+ A better strategy is to use a repository pattern that is more specific
+ to the areas that you wish to secure.</p>
+ <p>3. Install this file as $CVSROOT/CVSROOT/cvs_acls and make it executable.</p>
+--- cvs-1.12.13+real.orig/contrib/cvs_acls.in
++++ cvs-1.12.13+real/contrib/cvs_acls.in
+@@ -309,7 +309,7 @@
+ A final note about the repository matching pattern. The example above
+ uses "ALL" but note that this means that the cvs_acls script will run
+ for each and every commit in your repository. Obviously, in a large
+-repository this adds up to a lot of overhead that may not be necesary.
++repository this adds up to a lot of overhead that may not be necessary.
+ A better strategy is to use a repository pattern that is more specific
+ to the areas that you wish to secure.
+
+--- cvs-1.12.13+real.orig/contrib/rcs2log.1
++++ cvs-1.12.13+real/contrib/rcs2log.1
+@@ -1,3 +1,4 @@
++.\" $MirOS: src/gnu/usr.bin/cvs/contrib/rcs2log.1,v 1.2 2011/05/06 22:44:59 tg Exp $
+ .\"
+ .\" Copyright 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+ .\"
+@@ -25,17 +26,17 @@
+ .Sh SYNOPSIS
+ .Nm rcs2log
+ .Bk -words
++.Op Fl nRv
+ .Op Fl c Ar changelog
+ .Op Fl h Ar hostname
+ .Op Fl i Ar indent
+ .Op Fl l Ar length
+-.Op Fl R
++.Op Fl L Ar file
+ .Op Fl r Ar option
+ .Op Fl t Ar tabwidth
+ .Op Fl u Ar login<TAB>fullname<TAB>mailaddr
+-.Op Fl v
+-.Op Fl -help
+-.Op Fl -version
++.Op Fl \-help
++.Op Fl \-version
+ .Op Ar file ...
+ .Ek
+ .Sh DESCRIPTION
+@@ -62,6 +63,14 @@
+ Try to limit log lines to
+ .Ar length
+ characters (default 79).
++.It Fl L Ar file
++Use rlog-format
++.Ar file
++for source of logs.
++.It Fl n
++Obsolete, use
++.Fl u
++instead (whose syntax differs).
+ .It Fl R
+ If no
+ .Ar file Ns Li (s)
+@@ -83,9 +92,9 @@
+ .Ar mailaddr .
+ .It Fl v
+ Append RCS revision to file names in log lines.
+-.It Fl -help
++.It Fl \-help
+ Output help.
+-.It Fl -version
++.It Fl \-version
+ Output version number.
+ .El
+ .Sh SEE ALSO
+--- cvs-1.12.13+real.orig/contrib/rcs2log.sh
++++ cvs-1.12.13+real/contrib/rcs2log.sh
+@@ -1,4 +1,5 @@
+ #! /bin/sh
++# $MirOS: src/gnu/usr.bin/cvs/contrib/rcs2log.sh,v 1.6 2011/05/06 22:44:59 tg Exp $
+
+ # Copyright (C) 1995-2005 The Free Software Foundation, Inc.
+
+@@ -31,6 +32,7 @@
+ -i INDENT Indent change log lines by INDENT spaces (default 8).
+ -l LENGTH Try to limit log lines to LENGTH characters (default 79).
+ -L FILE Use rlog-format FILE for source of logs.
++ -n Obsolete, use -u instead (whose syntax differs).
+ -R If no FILEs are given and RCS is used, recurse through working directory.
+ -r OPTION Pass OPTION to subsidiary log command.
+ -t TABWIDTH Tab stops are every TABWIDTH characters (default 8).
+@@ -199,7 +201,7 @@
+ m[9]="Oct"; m[10]="Nov"; m[11]="Dec"
+ '
+
+-logdir=`$MKTEMP -d $TMPDIR/rcs2log.XXXXXX`
++logdir=$($MKTEMP -d $TMPDIR/rcs2log.XXXXXXXXXX)
+ test -n "$logdir" || exit
+ llogout=$logdir/l
+ trap exit 1 2 13 15
+@@ -632,7 +634,7 @@
+ # Sort the log entries, first by date+time (in reverse order),
+ # then by author, then by log entry, and finally by file name and revision
+ # (just in case).
+-sort -t"$SOH" +2 -4r +4 +0 |
++sort -t"$SOH" -k 3,4r -k 5 -k 1 |
+
+ # Finally, reformat the sorted log entries.
+ $AWK -F"$SOH" '
+--- cvs-1.12.13+real.orig/contrib/sccs2rcs.in
++++ cvs-1.12.13+real/contrib/sccs2rcs.in
+@@ -1,4 +1,5 @@
+ #! @CSH@ -f
++# $MirOS: src/gnu/usr.bin/cvs/contrib/sccs2rcs.in,v 1.2 2011/05/06 21:50:27 tg Exp $
+
+ # Copyright (C) 1995-2005 The Free Software Foundation, Inc.
+
+@@ -219,7 +220,7 @@
+ # we expected in the output we have other problems.
+ # Note: Solaris awk does not like the following line. Use gawk
+ # mawk, or nawk instead.
+- set date = `sccs prs -r$rev $file | @AWK@ '/^D / {print (substr($3,0,2)+0<70?20:19) $3, $4; exit}'`
++ set date = `sccs prs -r$rev $file | @AWK@ '/^D / {print (substr($3,1,2)+0<70?20:19) $3, $4; exit}'`
+ set author = `sccs prs -r$rev $file | @AWK@ '/^D / {print $5; exit}'`
+ echo ""
+ echo "==> file $file, rev=$rev, date=$date, author=$author"
+--- cvs-1.12.13+real.orig/debian/NEWS
++++ cvs-1.12.13+real/debian/NEWS
+@@ -0,0 +1,79 @@
++cvs (2:1.12.13+real-22) unstable; urgency=low
++
++ Newly created repositories (from “cvs initâ€) now rely on
++ CVSUMASK for the permissions of the “history†and “val-tagsâ€
++ files instead of creating them as world-writable.
++
++ Newly created repositories contain a LogHistory configuration
++ setting to only record write operations in the “history†file.
++
++ If you are used to the previous behaviour, you can restore it
++ by altering (or removing, in which case the (commented-out)
++ default of logging everything will be used) the LogHistory
++ configuration setting and changing the permissions on the
++ “history†and “val-tags†files so that every user can write
++ into them.
++
++ If you did not deliberately open your repository to all users
++ on your system, you might wish to change all existing repos
++ to this behaviour. To do this, check out the CVSROOT module,
++ edit the “config†file adding “LogHistory=TMARâ€, check that
++ change in, release the CVSROOT module, and chmod the “historyâ€
++ and “val-tags†files to either 0664 (if all users in the same
++ group should be able to commit) or 0644 (if only you wish to
++ commit), possibly 0660 or 0600 is non-committers should also
++ be denied reading.
++
++ Contact me (mirabilos) in #cvs on irc.freenode.net if you have
++ any questions about this change or require further support.
++
++ -- Thorsten Glaser <tg@mirbsd.de> Tue, 28 Mar 2017 19:54:01 +0200
++
++cvs (2:1.12.13+real-7) unstable; urgency=high
++
++ rcs2log no longer lives in the PATH, the contributed script
++ and its manpage are in /usr/share/cvs/contrib/rcs2log now.
++
++ Some contrib files (and their documentation) are no longer
++ shipped with the binary package (antique, insecure, useless).
++
++ -rHEAD in "cvs diff" now, consistently with all other cvs
++ subcommands, means "tip of the trunk (MAIN branch)"; to
++ access the tip of the another branch, use its name; as a
++ compatibility aid, -r.bhead (only in diff) points to the
++ tip of the sticky branch.
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sun, 04 Dec 2011 20:10:09 +0000
++
++cvs (2:1.12.13+real-5) unstable; urgency=low
++
++ This cvs package is a totally new packaging and has almost
++ nothing in common with what was in Debian before. The most
++ visible changes are outlined below:
++
++ pserver is no longer officially supported; the cvs package
++ does not install any service, inetd, or something similar.
++ If you want to set up a CVS server, use SSH, as shown in:
++ * http://www.stremler.net/Code/cvs_tricks/cvs-over-ssh.html
++ * http://www.stremler.net/Code/cvs_tricks/cvs-over-ssh-advanced.html
++ * http://www.stremler.net/Code/cvs_tricks/cvs-over-ssh-advanced2.html
++
++ Consequentially, PAM is also no longer supported, and this
++ package does not set up or manage any repositories; that's
++ the system administrator's job now.
++
++ For running "cvs admin" tasks the user must be a member of
++ the new "_cvsadmin" system group, or the repository be set
++ up (UserAdminOptions in CVSROOT/config) to allow everyone.
++
++ The date format for $Id$ and similar in checkouts has been
++ switched back from ISO 8601 to the standard RCS format, to
++ keep checksums over checkouts/exports consistent. This, as
++ well as the fact that only the :local: and :extssh: access
++ methods are officially supported, is not negotiable.
++
++ Please direct feature requests upstream, not to the BTS. I
++ do quite an amount of hacking CVS, but prefer to care only
++ about the packaging bits with "full power" in Debian.
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sat, 11 Jun 2011 05:01:49 +0000
+--- cvs-1.12.13+real.orig/debian/changelog
++++ cvs-1.12.13+real/debian/changelog
+@@ -0,0 +1,243 @@
++cvs (2:1.12.13+real-22+deb9u1) stretch-security; urgency=high
++
++ * Fix CVE-2017-12836 (Closes: #871810)
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sat, 12 Aug 2017 19:19:53 +0200
++
++cvs (2:1.12.13+real-22) unstable; urgency=low
++
++ * cvs init: Change default history logging configuration
++ to only log write operations by adding “LogHistory=TMARâ€
++ * Testsuite: Alter to cope with this explicit option
++ * cvs init: Rely on CVSUMASK for history and val-tags files
++ in newly created repositories (Closes: #858769)
++ * Add a NEWS.Debian entry verbosely documenting this change
++
++ -- Thorsten Glaser <tg@mirbsd.de> Tue, 28 Mar 2017 20:01:39 +0200
++
++cvs (2:1.12.13+real-21) unstable; urgency=medium
++
++ [ Sylvain Beucler ]
++ * Add --allow-root-regexp option, for Savannah
++
++ [ Thorsten Glaser ]
++ * Always add --build=/--host= to avoid config.guess being too smart
++ * Fix testsuite for --allow-root-regexp in the “deny†case
++ * Some minor documentation fixes (wording and formatting)
++ * Remove unnecessary autopoint from Build-Depends; optimise them
++ * Harmonise PDF version 1.4 across all generated PDFs
++ * Generate all PDFs using the PA4 paper size (prints on Letter and A4)
++ * Disable parallel build because the testsuite is not safe
++
++ -- Thorsten Glaser <tg@mirbsd.de> Mon, 09 Jan 2017 23:19:38 +0000
++
++cvs (2:1.12.13+real-20) unstable; urgency=low
++
++ * Do not spew into syslog when 'cvs pserver' is called from a tty
++
++ -- Thorsten Glaser <tg@mirbsd.de> Wed, 09 Nov 2016 04:17:18 +0100
++
++cvs (2:1.12.13+real-19) unstable; urgency=low
++
++ * Update from MirBSD CVS:
++ - Fix some spelling mistakes
++ - Greatly improve the manpage introduction (even going so far
++ as to add a “how not to be totally lost in info†section)
++ - Improve documentation cross-references
++ - Apply TCP_NODELAY patch from CVS mailing list
++ * Switch (experimentally) to debhelper compat 10
++ * Enhances cvs2svn (>= 2.4.0-4~) as it’s added relevant patches
++ * Make cross-buildable (Closes: #842847)
++
++ -- Thorsten Glaser <tg@mirbsd.de> Tue, 08 Nov 2016 23:22:39 +0000
++
++cvs (2:1.12.13+real-18) unstable; urgency=low
++
++ [ esr ]
++ * Correct a bug in the manpage
++
++ [ Sergei Trofimovich ]
++ * Fix a memory leak
++
++ [ Thorsten Glaser ]
++ * Several sanity and getdate fixes
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sun, 23 Oct 2016 00:34:10 +0200
++
++cvs (2:1.12.13+real-17) unstable; urgency=medium
++
++ * Fix a use-after-free bug
++ * Correctly use autoconf to detect long double
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sat, 22 Oct 2016 05:42:39 +0200
++
++cvs (2:1.12.13+real-16) unstable; urgency=medium
++
++ * Take back the package (Closes: #764397)
++ * Fix typo in changelog entry for cvs (2:1.12.13+real-9) and others
++ * Bump Policy; no changes
++ * Update code with bugfixes from MirBSD 0AB7.2 (Closes: #839669)
++ * Actually use correct getdate implementation
++ * groff now needs an explicit ghostscript dependency for ps2pdf
++ * Remove stuff unnecessary with dh-autoreconf
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sat, 22 Oct 2016 02:58:34 +0200
++
++cvs (2:1.12.13+real-15) unstable; urgency=low
++
++ * QA upload.
++ * Orphan the package.
++
++ -- Thorsten Glaser <tg@mirbsd.de> Tue, 07 Oct 2014 17:58:58 +0000
++
++cvs (2:1.12.13+real-14) unstable; urgency=low
++
++ * debian/control: Move VCS-* fields to Alioth collab-maint git
++ * Remove now-useless RCS IDs
++
++ -- Thorsten Glaser <tg@mirbsd.de> Tue, 08 Jul 2014 16:10:54 +0200
++
++cvs (2:1.12.13+real-12) unstable; urgency=medium
++
++ * Add texlive-fonts-recommended B-D (thanks Norbert Preining)
++ to fix FTBFS in sid (thanks Daniel Schepler) (Closes: #739138)
++ * Policy 3.9.5 (no changes AFAICT)
++ * Check distfile with upstream signing key (thanks lintian)
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sun, 16 Feb 2014 14:07:36 +0000
++
++cvs (2:1.12.13+real-11) unstable; urgency=medium
++
++ * Add workaround for eglibc crypt(3) returning NULL
++ * If DEB_BUILD_OPTIONS contains “sanity†run testsuite after build
++ * Drop obsolete texi2html B-D (thanks lintian) that was unused anyway
++
++ -- Thorsten Glaser <tg@mirbsd.de> Thu, 18 Jul 2013 21:52:12 +0000
++
++cvs (2:1.12.13+real-10) unstable; urgency=low
++
++ [ Daniel Schepler ]
++ * Use dh-autoreconf to regenerate configure script and avoid unnecessary
++ compilation of mktime.c, which doesn't work on x32 as is.
++ * Add texlive-latex-recommended to fix just another FTBFS
++
++ [ Thorsten Glaser ]
++ * Do not compress *.pdf files (cf. #704093)
++ * Allow root to commit
++ * Policy 3.9.4
++ * Make cvs.texinfo compatible with newer makeinfo (Closes: #711298)
++ * Actually use a fixed mktime.m4 (Closes: #698908)
++
++ -- Thorsten Glaser <tg@mirbsd.de> Wed, 26 Jun 2013 19:40:39 +0000
++
++cvs (2:1.12.13+real-9) unstable; urgency=low
++
++ * Fix watch file: mangle Epoch away, too
++ * Remove old conffile /etc/pam.d/cvs (Closes: #669957)
++ * Policy 3.9.3 (no changes)
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sun, 22 Apr 2012 15:10:16 +0000
++
++cvs (2:1.12.13+real-8) unstable; urgency=high
++
++ * Brown paper bag change: sanity.sh (the testsuite) was corrupted
++ during checkout of the packaging VCS in the -7 (all PASS again)
++ * Bonus change: use hardening build flags; fix resulting warnings
++ * Urgency due to riding on the previous upload’s security fix
++
++ -- Thorsten Glaser <tg@mirbsd.de> Tue, 07 Feb 2012 20:39:42 +0000
++
++cvs (2:1.12.13+real-7) unstable; urgency=high
++
++ * Drop unsafe scripts from contrib, add NEWS entry for that
++ (Closes: #658947)
++ * debian/rules: cleanup (remove install/check, dh_installdirs;
++ switch to dh_prep if extant)
++ * Use -Wl,--as-needed for the link to appease dpkg-shlibdebs
++ * Update maintainer scripts from template jupp (better comments)
++ * Drop csh-using contrib script from package, with NEWS entry
++ * Demote rcs2log(1) to contrib, add NEWS entry
++ * Stop shipping a patch to rcs(1) with the binary package, ffs
++ * Don’t ship cvshelp.man either, it’s antiquated and not useful
++ * Fix meaning of -rHEAD for the diff subcommand (with NEWS entry)
++ * Make the testsuite again usable (full PASS)
++ * Apply suggested patch for CVE-2012-0804 from Petr Pisar
++ * Update lintian overrides
++
++ -- Thorsten Glaser <tg@mirbsd.de> Tue, 07 Feb 2012 18:01:44 +0000
++
++cvs (2:1.12.13+real-6) unstable; urgency=low
++
++ * d/watch: mangle the +real away until 1.12.14 is out,
++ as this is an artefact from the old (epoch 1) packaging
++ * Demote mksh to Suggests, recommended (hah!) by many
++ (Closes: #631110) (merges back
++ 2:1.12.13+real-5debianderivatethatcannotbenamed1)
++ * Honour Policy §11.4; fix by YOSHINO Yoshihito (Closes: #631936)
++ * Use upstream-source-in-CVS packaging, clean up
++ * d/rules: Add build-{arch,indep} targets as aliases to build
++ * Bring d/copyright more in sync with this distfile’s reality
++ * d/control: Reword package description. (Closes: #631826)
++ * If sleeping at exit, sleep another 20 ms (2 HZ), to avoid
++ possible race conditions. (Should work around LP: #12230)
++ * Update in sync with MirPorts 1.12.13-12 = MirOS BSD 0AAF.1
++ * Stop installing cvsbug(8), use reportbug instead
++
++ -- Thorsten Glaser <tg@mirbsd.de> Thu, 28 Jul 2011 16:02:02 +0000
++
++cvs (2:1.12.13+real-5) unstable; urgency=low
++
++ * Drop PAM entirely, it was specific to Debian anyway
++ * Add cvs-switchroot, from src/scripts/mnt-cvsroot (Closes: #41685)
++ * Drop some old and irrelevant changelogs from the binary package
++ * Update from MirPorts 1.12.13-11 = MirOS BSD 0AAE.2
++ * Revert most of 65_login_cvspass_message and just be silent if the
++ pserver client password file doesn't exist and create it silently
++ if needed (Closes: #524146)
++ * Honour noexec flag in 'cvs -n init' (Closes: #151982)
++ * Sync modules option list with cederqvist (Closes: #226888)
++ * Apply patch for assert on negated version numbers on diff
++ (Closes: #297551)
++ From: Peter Moulder <Peter.Moulder@infotech.monash.edu.au>
++ * Change cvs add dir message (Closes: #294094)
++ * Accept port when using extssh connection method (Closes: #151882)
++ * Write a new command for direct ,v file download (Closes: #421119)
++ * Drop broken libbsd.fd.o headers and shut up gcc 4.6 warnings
++ * Fix piuparts breakage: ignore delgroup non-existence on purge
++ * Deliver a NEWS.Debian (Closes: #626106)
++ * d/README.source: Update, call to automake is now also needed
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sat, 11 Jun 2011 05:32:56 +0000
++
++cvs (2:1.12.13+real-4) unstable; urgency=low
++
++ * Renamed .orig.tar.gz due to archive pathname conflict
++ * d/README.source: Document patch location (VCS-CVS, VCS-Browser alike)
++ * New build from MirPorts 1.12.13-10 = MirOS BSD 0AAE.1
++ - Contains changes from cvs
++ (1:1.12.13-12debianderivatethatcannotbenamed1):
++ + Apply fix from Kees Cook to avoid %n in writable memory (LP: #296453)
++ - Other BTS relevant changes:
++ + Allow CVSROOT-less “version†(LP: #97683) and “cvs versionâ€
++ + Update loginfo documentation, ‘%{t}’ is indeed gone (Closes: #329151)
++ + Lower syslog level from emergency (Closes: #563856)
++ + Fix awk substr start argument, thanks John Hughes (Closes: #518600)
++ + Rename nodes with colons in them (Closes: #113809)
++ + Fix typo (Closes: #464137)
++ + Document missing rcs2log(1) options (Closes: #306354) and fix dashes
++ * Upload new package to Debian unstable (Closes: #306432)
++ (Closes: #458864) (Closes: #464134) (Closes: #479752)
++ (Closes: #576035) (Closes: #614700) (Closes: #617578)
++ - Drop PAM (Closes: #340984) (Closes: #393436)
++ - No longer installs repositories (Closes: #168300)
++ (Closes: #408117) (Closes: #482301) (Closes: #499790)
++ (Closes: #511643) (Closes: #607297)
++ - Deprecate pserver (Closes: #343169) (Closes: #495938)
++ - Drop Origin and Bugs headers again (upload to Debian proper)
++ and old (pre-Debian upload) private repo changelog entries
++ - Thank you, Steve, for handing over package maintainership!
++ * Clarify package description (LP: #377411)
++ * Build with Kerberos V support (Closes: #60800) (LP: #157760)
++ * Recommends: openssh-client; Suggests: rcs
++
++ -- Thorsten Glaser <tg@mirbsd.de> Sat, 07 May 2011 01:00:39 +0000
+--- cvs-1.12.13+real.orig/debian/compat
++++ cvs-1.12.13+real/debian/compat
+@@ -0,0 +1 @@
++10
+--- cvs-1.12.13+real.orig/debian/control
++++ cvs-1.12.13+real/debian/control
+@@ -0,0 +1,41 @@
++Source: cvs
++Section: vcs
++Priority: optional
++Maintainer: Thorsten Glaser <tg@mirbsd.de>
++Homepage: http://www.nongnu.org/cvs/
++Build-Depends: debhelper (>= 10), autotools-dev, bsdmainutils,
++ ghostscript, groff, libbsd-dev, libkrb5-dev | heimdal-dev, procps,
++ texinfo, texlive-latex-recommended, texlive-fonts-recommended, zlib1g-dev
++Standards-Version: 3.9.8
++VCS-git: https://anonscm.debian.org/git/collab-maint/cvs.git
++VCS-Browser: https://anonscm.debian.org/cgit/collab-maint/cvs.git
++
++Package: cvs
++Architecture: any
++Multi-Arch: foreign
++Depends: ${misc:Depends}, ${shlibs:Depends}, adduser,
++ dpkg (>= 1.15.4) | install-info
++Recommends: openssh-client
++Suggests: mksh (>= 40~), rcs
++Enhances: rcs, cvs2svn (>= 2.4.0-4~)
++Replaces: cvs-doc
++Conflicts: cvs-doc
++Provides: cvs-doc
++Description: Concurrent Versions System
++ CVS is a version control system, which allows you to keep access
++ to old versions of files (usually source code), keep a log of
++ who, when, and why changes occurred, etc., like RCS or SCCS.
++ It handles multiple developers, multiple directories, triggers to
++ enable/log/control various operations, and can work over a wide
++ area network. The texinfo manual provides further information on
++ more tasks that it can perform.
++ .
++ There are some tasks that are not covered by CVS. They can be done in
++ conjunction with CVS but will tend to require some script-writing and
++ software other than CVS. These tasks are bug-tracking, build management
++ (that is, make and make-like tools), and automated testing. However,
++ CVS makes these tasks easier.
++ .
++ This package contains a CVS binary which can act as both client and
++ server, although there is no CVS dæmon; to access remote repositories,
++ please use :extssh: not :pserver: any more.
+--- cvs-1.12.13+real.orig/debian/copyright
++++ cvs-1.12.13+real/debian/copyright
+@@ -0,0 +1,117 @@
++This package was debianised by Thorsten Glaser <tg@mirbsd.de> on
++Wed Sep 15 21:52:29 UTC 2010.
++
++It was downloaded from:
++http://ftp.gnu.org/non-gnu/cvs/source/feature/1.12.13/cvs-1.12.13.tar.gz
++
++
++GNU CVS itself is Copyright © 1986-2005
++ The Free Software Foundation, Inc.
++with portions contributed by others.
++
++It is licenced under the GNU General Public License, version 2 or later,
++with a good part available under either GPLv1 or LGPLv2.x. On Debian syâ€
++stems the licence can be found at: /usr/share/common-licenses/GPL-2
++
++Parts of the code are covered by the following GPL-compatible copyright:
++
++ * Copyright (c) 1993 Bob Withers
++ * All Rights Reserved
++ *
++ * Permission to use, copy, modify, and distribute this software and
++ * its documentation for any purpose and without fee is hereby granted
++ * provided that the above copyright notice appears in all copies and
++ * that both the copyright notice and this permission notice appear in
++ * supporting documentation.
++
++One header file, which almost certainly does not fall under copyright
++law, is covered by the four-clause UCB licence, however in 1999 the
++advertising clause was rescinded, so it’s GPL compatible now:
++
++ * Copyright (c) 1989 The Regents of the University of California.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * This product includes software developed by the University of
++ * California, Berkeley and its contributors.
++ * 4. Neither the name of the University nor the names of its contributors
++ * may be used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++
++Parts and the packaging are covered by the following GPL-compatible licence:
++
++# Copyright © 2005, 2008, 2011, 2017
++# mirabilos <m@mirbsd.org>
++#
++# Provided that these terms and disclaimer and all copyright notices
++# are retained or reproduced in an accompanying document, permission
++# is granted to deal in this work without restriction, including unâ€
++# limited rights to use, publicly perform, distribute, sell, modify,
++# merge, give away, or sublicence.
++#
++# This work is provided “AS IS†and WITHOUT WARRANTY of any kind, to
++# the utmost extent permitted by applicable law, neither express nor
++# implied; without malicious intent or gross negligence. In no event
++# may a licensor, author or contributor be held liable for indirect,
++# direct, other damage, loss, or other issues arising in any way out
++# of dealing in the work, even if advised of the possibility of such
++# damage or existence of a defect, except proven that it results out
++# of said person’s immediate fault when using the work as intended.
++
++CVS also includes a convenience copy of zlib which is not used;
++it’s covered by these (GPL-compatible) terms:
++
++ Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
++
++ This software is provided 'as-is', without any express or implied
++ warranty. In no event will the authors be held liable for any damages
++ arising from the use of this software.
++
++ Permission is granted to anyone to use this software for any purpose,
++ including commercial applications, and to alter it and redistribute it
++ freely, subject to the following restrictions:
++
++ 1. The origin of this software must not be misrepresented; you must not
++ claim that you wrote the original software. If you use this software
++ in a product, an acknowledgment in the product documentation would be
++ appreciated but is not required.
++ 2. Altered source versions must be plainly marked as such, and must not be
++ misrepresented as being the original software.
++ 3. This notice may not be removed or altered from any source distribution.
++
++zlib, again, contains contributed material under terms as those:
++
++ * Copyright (c) 1997
++ * Christian Michelsen Research AS
++ * Advanced Computing
++ * Fantoftvegen 38, 5036 BERGEN, Norway
++ * http://www.cmr.no
++ *
++ * Permission to use, copy, modify, distribute and sell this software
++ * and its documentation for any purpose is hereby granted without fee,
++ * provided that the above copyright notice appear in all copies and
++ * that both that copyright notice and this permission notice appear
++ * in supporting documentation. Christian Michelsen Research AS makes no
++ * representations about the suitability of this software for any
++ * purpose. It is provided "as is" without express or implied warranty.
+--- cvs-1.12.13+real.orig/debian/cvs-switchroot
++++ cvs-1.12.13+real/debian/cvs-switchroot
+@@ -0,0 +1,99 @@
++#!/bin/mksh
++# $MirOS: src/scripts/mnt-cvsroot,v 1.19 2016/10/21 21:09:59 tg Exp $
++#-
++# Copyright © 2005, 2008, 2011
++# mirabilos <m@mirbsd.org>
++#
++# Provided that these terms and disclaimer and all copyright notices
++# are retained or reproduced in an accompanying document, permission
++# is granted to deal in this work without restriction, including unâ€
++# limited rights to use, publicly perform, distribute, sell, modify,
++# merge, give away, or sublicence.
++#
++# This work is provided “AS IS†and WITHOUT WARRANTY of any kind, to
++# the utmost extent permitted by applicable law, neither express nor
++# implied; without malicious intent or gross negligence. In no event
++# may a licensor, author or contributor be held liable for indirect,
++# direct, other damage, loss, or other issues arising in any way out
++# of dealing in the work, even if advised of the possibility of such
++# damage or existence of a defect, except proven that it results out
++# of said person’s immediate fault when using the work as intended.
++#-
++# Change CVSROOT of a checked out tree (and save space with it)
++# With option -T: change Tag instead of Root
++
++me=${0##*/}
++function die {
++ print -ru2 -- "$me: $*"
++ exit 1
++}
++
++if [[ $1 = -T ]]; then
++ tagmode=-T
++ fn=Tag
++ shift
++else
++ tagmode=
++ fn=Root
++fi
++newroot=$1
++useroot=0
++if [[ $newroot = - ]]; then
++ shift
++ newroot=$(realpath "$1")
++ [[ -d $newroot ]] && if [[ -d $newroot/CVS ]]; then
++ newroot=$newroot/CVS/$fn
++ else
++ newroot=$newroot/$fn
++ fi
++ useroot=1
++fi
++if [[ -z $newroot || $newroot = -? ]]; then
++ print -u2 "Syntax: $me newroot [dir [...]]"
++ print -u2 "\t$me - .../CVS/Root [dir [...]]"
++ print -u2 "\t$me -T - .../CVS/Tag [dir [...]]"
++ exit 1
++fi
++shift
++
++[[ -n $1 ]] || set -- .
++
++# realpath(2)ise arguments
++set -A arg
++i=0
++for name in "$@"; do
++ arg[i++]=$(realpath "$name")
++done
++
++T="$(mktemp ${arg[0]}/$me.XXXXXXXXXX)" || die fatal: cannot mktemp
++
++if (( useroot )); then
++ rm -f "$T"
++ ln "$newroot" "$T" || cp "$newroot" "$T" || \
++ die "fatal: cannot copy '$newroot' to temporary '$T'"
++fi
++
++trap 'rm -f "$T"; exit 0' 0
++trap 'rm -f "$T"; trap - EXIT; exit 1' 1 2 3 5 13 15
++
++if (( !useroot )); then
++ chmod 664 "$T"
++ print -r -- "$newroot" >"$T"
++fi
++
++let rv=0
++find "${arg[@]}" -path \*/CVS/$fn -print0 |&
++while IFS= read -d '' -pr name; do
++ rm "$name" || die "error: cannot rm <$name>"
++ ln -f "$T" "$name" || if ! U="$(mktemp ${arg[0]}/$me.XXXXXXXXXX)"; then
++ cp "$T" "$name"
++ elif cat "$T" >"$U" && ln -f "$U" "$name"; then
++ rm -f "$T"
++ T="$U"
++ else
++ rm -f "$U"
++ cp "$T" "$name"
++ fi
++done
++
++exit 0
+--- cvs-1.12.13+real.orig/debian/cvs-switchroot.1
++++ cvs-1.12.13+real/debian/cvs-switchroot.1
+@@ -0,0 +1,76 @@
++.Dd June 10, 2011
++.Dt CVS\-SWITCHROOT 1
++.Os
++.Sh NAME
++.Nm cvs\-switchroot
++.Nd change repository or tag in a cvs working copy
++.Sh SYNOPSIS
++.Nm
++.Op Fl T
++.Ar newroot
++.Op Ar
++.Pp
++.Nm
++.Op Fl T
++\-\&
++.Ar srcpath
++.Op Ar
++.Sh DESCRIPTION
++The
++.Nm
++utility manipulates a CVS working copy directly,
++modifying the information stored in the administrative
++subdirectory and saving space by hardlinking if possible.
++.Pp
++If the
++.Fl T
++option is given, the sticky tag is operated on,
++otherwise, the repository path
++.Pq Ev CVSROOT .
++.Pp
++The information (Tag or Root) is set to the same as in
++.Ar srcpath
++if the first non-option argument
++.Ar newroot
++is a sole dash
++.Pq Sq \-\& ,
++the literal value
++.Ar newroot
++otherwise.
++.Sh EXAMPLES
++Change all
++.Pa Root
++information in the current sandbox to
++.Pa /cvs :
++.Bd -literal -offset ident
++$ cvs-switchroot /cvs .
++.Ed
++.Pp
++Set all roots in the current working directory and all
++its subdirectories to the
++.Pa Root
++of the parent directory:
++.Bd -literal -offset ident
++$ cvs-switchroot \- .. .
++.Ed
++.Pp
++Hardlink the
++.Pa Tag
++information in the current working directory, for example
++.Pa /usr/src ,
++and
++.Pa /usr/ports
++with each other:
++.Bd -literal -offset ident
++$ cvs-switchroot \-T \- . . /usr/ports
++.Ed
++.Sh SEE ALSO
++.Xr cvs 1
++.Sh HISTORY
++.Nm
++has existed in the MirBSD source tree since 2005.
++It was added to Debian's cvs package in 2011.
++.Sh CAVEATS
++.Nm
++depends on
++.Nm mksh .
+--- cvs-1.12.13+real.orig/debian/doc-base
++++ cvs-1.12.13+real/debian/doc-base
+@@ -0,0 +1,21 @@
++Document: cvs-doc
++Title: Cederqvist - The CVS manual
++Author: FSF, Derek R. Price, Ximbiot, Signum Support AB, and others
++Abstract: This manual describes how to use and administer CVS.
++ It is both a manual and a tutorial, as well as a reference guide,
++ also known as The Cederqvist, and *the* book to read before using CVS.
++Section: Programming
++
++Format: HTML
++Index: /usr/share/doc/cvs/cvs.html
++Files: /usr/share/doc/cvs/cvs.html*
++
++Format: Text
++Files: /usr/share/doc/cvs/cvs.txt*
++
++Format: PDF
++Files: /usr/share/doc/cvs/cvs.pdf*
++
++Format: Info
++Index: /usr/share/info/cvs.info.gz
++Files: /usr/share/info/cvs.info*
+--- cvs-1.12.13+real.orig/debian/doc-base.client
++++ cvs-1.12.13+real/debian/doc-base.client
+@@ -0,0 +1,18 @@
++Document: cvs-doc-client
++Title: CVS client/server protocol description
++Abstract: This document describes the client/server protocol used by CVS.
++Section: Programming
++
++Format: HTML
++Index: /usr/share/doc/cvs/cvsclient.html
++Files: /usr/share/doc/cvs/cvsclient.html*
++
++Format: Text
++Files: /usr/share/doc/cvs/cvsclient.txt*
++
++Format: PDF
++Files: /usr/share/doc/cvs/cvsclient.pdf*
++
++Format: Info
++Index: /usr/share/info/cvsclient.info.gz
++Files: /usr/share/info/cvsclient.info*
+--- cvs-1.12.13+real.orig/debian/doc-base.faq
++++ cvs-1.12.13+real/debian/doc-base.faq
+@@ -0,0 +1,10 @@
++Document: cvs-doc-faq
++Title: CVS - Frequently Asked Questions
++Author: David Grubbs, Dr. Pascal Molli, and others
++Abstract: Packaged FAQ-O-MATIC dump containing a number of answers
++ to frequently asked questions about CVS. The document may be out of
++ date; http://ximbiot.com/cvs/wiki/CVS%20FAQ contains an updated version.
++Section: Programming
++
++Format: Text
++Files: /usr/share/doc/cvs/FAQ*
+--- cvs-1.12.13+real.orig/debian/doc-base.intro
++++ cvs-1.12.13+real/debian/doc-base.intro
+@@ -0,0 +1,7 @@
++Document: cvs-doc-intro
++Title: Introduction to using CVS
++Author: Steven Pemberton <Steven.Pemberton@cwi.nl>
++Section: Programming
++
++Format: Text
++Files: /usr/share/cvs/contrib/intro.doc*
+--- cvs-1.12.13+real.orig/debian/doc-base.paper
++++ cvs-1.12.13+real/debian/doc-base.paper
+@@ -0,0 +1,14 @@
++Document: cvs-doc-paper
++Title: CVS II: Parallelizing Software Development
++Author: Brian Berliner <berliner@prisma.com>
++Abstract: This paper is the cvs USENIX article, Winter 1990.
++ The program described in this paper fills a need in the UNIX community
++ for a freely available tool to manage software revision and release
++ control in a multi-developer, multi-directory, multi-group environment.
++ This tool also addresses the increasing need for tracking third-party
++ vendor source distributions while trying to maintain local modifications
++ to earlier releases.
++Section: Programming
++
++Format: PDF
++Files: /usr/share/doc/cvs/cvs-paper.pdf*
+--- cvs-1.12.13+real.orig/debian/doc-base.rcsfiles
++++ cvs-1.12.13+real/debian/doc-base.rcsfiles
+@@ -0,0 +1,11 @@
++Document: cvs-doc-rcsfiles
++Title: RCS file format description
++Author: Jim Kingdon
++Abstract: This file attempts to document the RCS file format (which is
++ implemented by a great many tools, both free and non-free, both by
++ calling GNU RCS and by reimplementing access to RCS files) in some
++ standard separate from any one tool.
++Section: Programming
++
++Format: Text
++Files: /usr/share/doc/cvs/RCSFILES*
+--- cvs-1.12.13+real.orig/debian/docs
++++ cvs-1.12.13+real/debian/docs
+@@ -0,0 +1,20 @@
++AUTHORS
++BUGS
++DEVEL-CVS
++FAQ
++HACKING
++MINOR-BUGS
++NEWS
++PROJECTS
++README
++TODO
++debian/builddir/doc/*.html
++debian/builddir/doc/*.txt
++debian/builddir/doc/cvs.pdf
++debian/builddir/doc/cvsclient.pdf
++debian/stagedir/clogs/ChangeLog.*
++doc/HACKING.DOCS
++doc/RCSFILES
++doc/cvs-paper.ms
++doc/cvs-paper.pdf
++doc/writeproxy.rtf
+--- cvs-1.12.13+real.orig/debian/info
++++ cvs-1.12.13+real/debian/info
+@@ -0,0 +1 @@
++debian/stagedir/usr/share/info/*.info
+--- cvs-1.12.13+real.orig/debian/install
++++ cvs-1.12.13+real/debian/install
+@@ -0,0 +1,11 @@
++#contrib/cvs_acls.html usr/share/cvs/contrib/
++contrib/descend.man usr/share/cvs/contrib/
++contrib/descend.sh usr/share/cvs/contrib/
++contrib/rcs2log.1 usr/share/cvs/contrib/
++contrib/rcs2sccs.sh usr/share/cvs/contrib/
++contrib/sandbox_status.man usr/share/cvs/contrib/
++debian/cvs-switchroot usr/bin/
++debian/lintian/cvs usr/share/lintian/overrides/
++debian/stagedir/usr/bin/cvs usr/bin/
++#debian/stagedir/usr/bin/cvsbug usr/bin/
++debian/stagedir/usr/share/cvs/contrib/* usr/share/cvs/contrib/
+--- cvs-1.12.13+real.orig/debian/lintian/cvs
++++ cvs-1.12.13+real/debian/lintian/cvs
+@@ -0,0 +1,2 @@
++# see #469523 for justification
++cvs: arch-dep-package-has-big-usr-share *
+--- cvs-1.12.13+real.orig/debian/manpages
++++ cvs-1.12.13+real/debian/manpages
+@@ -0,0 +1,4 @@
++debian/cvs-switchroot.1
++debian/stagedir/usr/share/man/man1/cvs.1
++debian/stagedir/usr/share/man/man5/cvs.5
++#debian/stagedir/usr/share/man/man8/cvsbug.8
+--- cvs-1.12.13+real.orig/debian/postinst
++++ cvs-1.12.13+real/debian/postinst
+@@ -0,0 +1,56 @@
++#!/bin/sh
++
++set -e
++
++# This maintainer script can be called the following ways:
++#
++# * new-postinst "configure" [$most_recently_configured_version]
++# The package is unpacked; all dependencies are unpacked and, when there
++# are no circular dependencies, configured.
++#
++# * old-postinst "abort-upgrade" $new_version
++# * conflictors-postinst "abort-remove" "in-favour" $package
++# $new_version
++# * postinst "abort-remove"
++# * deconfigureds-postinst "abort-deconfigure" "in-favour"
++# $failed_install_package $fip_version ["removing"
++# $conflicting_package $cp_version]
++# The package is unpacked; all dependencies are at least Half-Installed,
++# previously been configured, and not removed. In some error situations,
++# dependencies may not be even fully unpacked.
++#
++# * postinst "triggered" "${triggers[*]}"
++# For trigger-only calls, i.e. if "configure" is not called.
++
++# upgrade case from Epoch 1 Debian CVS
++nukes='/etc/cvs.conf /etc/cvs-cron.conf /etc/cvs-pserver.conf /etc/cron.weekly/cvs /etc/pam.d/cvs'
++for x in $nukes; do
++ test -e "$x" || continue
++ rm -f $nukes
++ test -x /usr/sbin/update-inetd && update-inetd --remove "^cvspserver"
++ break
++done
++
++case $1 in
++configure)
++ addgroup --force-badname --system _cvsadmin
++ ;;
++
++abort-upgrade|abort-remove|abort-deconfigure)
++ ;;
++
++triggered)
++ ;;
++
++*)
++ echo >&2 "postinst called with unknown subcommand '$1'"
++ exit 1
++ ;;
++esac
++
++# dh_installdeb will replace this with shell code automatically
++# generated by other debhelper scripts.
++
++#DEBHELPER#
++
++exit 0
+--- cvs-1.12.13+real.orig/debian/postrm
++++ cvs-1.12.13+real/debian/postrm
+@@ -0,0 +1,51 @@
++#!/bin/sh
++
++set -e
++
++# This maintainer script can be called the following ways:
++#
++# * postrm "remove"
++# * postrm "purge"
++# * old-postrm "upgrade" $new_version
++# * disappearers-postrm "disappear" $overwriter $o_version
++# The package's files have been removed or replaced; only Essential pak-
++# kages may be available; skip gracefully actions requiring Depends.
++#
++# * new-postrm "failed-upgrade" $old_version
++# * new-postrm "failed-upgrade" $old_version $new_version # 1.18.5, stretch
++# Called when 'old-postrm "upgrade"' fails; the new package is unpacked,
++# Essential packages and Pre-Depends are available; the latter have been
++# configured and never removed but may be Unpacked or Half-Configured.
++#
++# * new-postrm "abort-install" [$old_version]
++# * new-postrm "abort-install" $old_version $new_version # 1.18.5, stretch
++# * new-postrm "abort-upgrade" $old_version
++# * new-postrm "abort-upgrade" $old_version $new_version # 1.18.5, stretch
++# Called when preinst fails; package is not unpacked. Essential packages
++# and (unpacked or Half-Configured) Pre-Depends are available.
++
++case $1 in
++remove)
++ ;;
++
++purge)
++ rm -f /etc/cvs.conf /etc/cvs-cron.conf /etc/cvs-pserver.conf /etc/cron.weekly/cvs /etc/pam.d/cvs
++ test -x /usr/sbin/update-inetd && update-inetd --remove "^cvspserver"
++ (delgroup --system --only-if-empty _cvsadmin || :)
++ ;;
++
++upgrade|disappear|failed-upgrade|abort-install|abort-upgrade)
++ ;;
++
++*)
++ echo >&2 "postrm called with unknown subcommand '$1'"
++ exit 1
++ ;;
++esac
++
++# dh_installdeb will replace this with shell code automatically
++# generated by other debhelper scripts.
++
++#DEBHELPER#
++
++exit 0
+--- cvs-1.12.13+real.orig/debian/rules
++++ cvs-1.12.13+real/debian/rules
+@@ -0,0 +1,176 @@
++#!/usr/bin/make -f
++
++DEB_BUILD_ARCH=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
++DEB_HOST_ARCH=$(shell dpkg-architecture -qDEB_HOST_ARCH)
++DEB_BUILD_GNU_TYPE=$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
++DEB_HOST_GNU_TYPE=$(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
++
++# is ${CC} defined anywhere (other than implicit rules?)
++ifneq (,$(findstring $(origin CC),default undefined))
++# no - then default to gcc (or cross-gcc)
++ifneq (${DEB_BUILD_ARCH},${DEB_HOST_ARCH})
++CC= ${DEB_HOST_GNU_TYPE}-gcc
++else
++CC= gcc
++endif
++endif
++
++CONFIGURE_ENV:= CC='${CC}'
++EXTRA_CFLAGS= -Wall -fno-strict-aliasing -Wformat
++# addresses part of #698908
++EXTRA_CFLAGS+= -fwrapv
++# for now. uses are mostly checked.
++EXTRA_CFLAGS+= -Wno-unused-result
++EXTRA_CPPFLAGS= -D_GNU_SOURCE -DUSE_LIBBSD
++
++ifneq (,$(wildcard /usr/share/dpkg/buildflags.mk))
++# dpkg-dev (>= 1.16.1~)
++DEB_CFLAGS_MAINT_APPEND=${EXTRA_CFLAGS}
++DEB_CPPFLAGS_MAINT_APPEND=${EXTRA_CPPFLAGS}
++DEB_BUILD_MAINT_OPTIONS=hardening=+all
++DPKG_EXPORT_BUILDFLAGS= Yes
++include /usr/share/dpkg/buildflags.mk
++else
++# old-fashioned way to determine build flags
++CFLAGS= -O$(if $(findstring noopt,${DEB_BUILD_OPTIONS}),0,2) -g
++CFLAGS+= ${EXTRA_CFLAGS}
++CPPFLAGS+= ${EXTRA_CPPFLAGS}
++CONFIGURE_ENV+= CFLAGS='${CFLAGS}'
++CONFIGURE_ENV+= CPPFLAGS='${CPPFLAGS}'
++CONFIGURE_ENV+= LDFLAGS='${LDFLAGS}'
++endif
++
++LIBS+= -lbsd
++
++CONFIGURE_ENV+= LIBS='${LIBS}'
++CONFIGURE_ENV+= CSH=/bin/csh
++
++CONFIGURE_ARGS:= --build=${DEB_BUILD_GNU_TYPE} \
++ --host=${DEB_HOST_GNU_TYPE} \
++ --prefix=/usr \
++ --infodir=/usr/share/info \
++ --mandir=/usr/share/man \
++ --sysconfdir=/etc \
++ --disable-dependency-tracking \
++ --disable-maintainer-mode \
++ --disable-pam \
++ --disable-nls \
++ --enable-client \
++ --enable-password-authenticated-client \
++ --enable-server \
++ --enable-proxy \
++ --enable-case-sensitivity \
++ --enable-encryption \
++ --disable-lock-compatibility \
++ --enable-rootcommit \
++ --disable-old-info-format-support \
++ --enable-config-override=no \
++ --without-krb4 \
++ --with-gssapi \
++ --with-external-zlib \
++ --with-rsh=ssh \
++ --with-editor=/usr/bin/editor \
++ --with-tmpdir=/var/tmp \
++ --with-umask=002 \
++ --with-cvs-admin-group=_cvsadmin
++
++MAKE_ARGS:= MAKEINFO=makeinfo
++MAKE_ARGS+= MAKEINFOFLAGS=--no-split
++
++CLEANFILES:= autom4te.cache build-aux/config.guess \
++ build-aux/config.sub cvs.spec debian/.*_stamp \
++ debian/CVSTEMP debian/builddir debian/stagedir \
++ doc/cvs-paper.pdf doc/cvs.1 doc/cvs.info* \
++ doc/cvs.pdf doc/cvsclient.info* doc/cvsclient.pdf \
++ doc/getdate-cvs.texi emx/Makefile os2/Makefile \
++ vms/config.h windows-NT/config.h
++
++debian/.configure_stamp:
++ dh_testdir
++ -rm -rf ${CLEANFILES}
++ cp /usr/share/misc/config.guess /usr/share/misc/config.sub build-aux/
++ dh_autoreconf
++ mkdir debian/builddir debian/stagedir
++ cd debian/builddir && \
++ env ${CONFIGURE_ENV} sh ../../configure ${CONFIGURE_ARGS}
++ # generate PDF 1.4 by default
++ ln -s ../../../build-aux/texinfo.tex debian/builddir/doc/texinfo-r.tex
++ printf '%s\n' \
++ '\pdfminorversion4\relax\pdfobjcompresslevel0\relax%' \
++ '\input texinfo-r.tex' \
++ >debian/builddir/doc/texinfo.tex
++ @:>$@
++
++build-indep:
++build build-arch: debian/.build_stamp
++
++debian/.build_stamp: debian/.configure_stamp
++ dh_testdir
++ cd debian/builddir && ${MAKE} ${MAKE_ARGS}
++ cd debian/builddir && ${MAKE} -C doc ${MAKE_ARGS} doc html info pdf txt
++ifneq (,$(filter sanity,$(DEB_BUILD_OPTIONS)))
++ # run the testsuite after build (DEB_BUILD_OPTIONS=sanity)
++ # warning: this takes a *lot* of time!
++ # idea: run this under Valgrind to take even more time ;)
++ cd debian/builddir && ${MAKE} ${MAKE_ARGS} check
++endif
++ @:>$@
++
++clean:
++ dh_testdir
++ dh_autoreconf_clean
++ -rm -rf ${CLEANFILES}
++ dh_clean
++
++binary-indep:
++
++binary-arch: debian/.build_stamp
++ dh_testdir
++ dh_testroot
++ if test -x "$$(which dh_prep)"; then dh_prep; else dh_clean -k; fi
++ -rm -rf debian/stagedir
++ mkdir -p debian/stagedir/clogs
++ cd debian/builddir && \
++ ${MAKE} ${MAKE_ARGS} DESTDIR=${CURDIR}/debian/stagedir install
++ cat ChangeLog ChangeLog.zoo >debian/stagedir/clogs/ChangeLog
++ cat doc/ChangeLog doc/ChangeLog.fsf >debian/stagedir/clogs/ChangeLog.doc
++ #cat lib/ChangeLog lib/ChangeLog.fsf >debian/stagedir/clogs/ChangeLog.lib
++ #cat src/ChangeLog src/ChangeLog-97 src/ChangeLog-96 src/ChangeLog-9395 \
++ # src/ChangeLog-9194 >debian/stagedir/clogs/ChangeLog.src
++ cp src/ChangeLog debian/stagedir/clogs/ChangeLog.src
++ cp contrib/ChangeLog debian/stagedir/clogs/ChangeLog.contrib
++ cp diff/ChangeLog debian/stagedir/clogs/ChangeLog.diff
++ #cp m4/ChangeLog debian/stagedir/clogs/ChangeLog.m4
++ #cp man/ChangeLog debian/stagedir/clogs/ChangeLog.man
++ #cp tools/ChangeLog debian/stagedir/clogs/ChangeLog.tools
++ # fat and nonsensical to ship this
++ rm -f debian/stagedir/usr/share/cvs/contrib/rcs-5.7-commitid.patch
++ # uses csh
++ rm -f debian/stagedir/usr/share/cvs/contrib/sccs2rcs
++ # unsafe
++ rm -f debian/stagedir/usr/share/cvs/contrib/commit_prep
++ rm -f debian/stagedir/usr/share/cvs/contrib/cvs_acls
++ rm -f debian/stagedir/usr/share/cvs/contrib/log
++ rm -f debian/stagedir/usr/share/cvs/contrib/log_accum
++ rm -f debian/stagedir/usr/share/cvs/contrib/mfpipe
++ rm -f debian/stagedir/usr/share/cvs/contrib/rcslock
++ # we ship cvs-switchroot(1) instead
++ rm -f debian/stagedir/usr/share/cvs/contrib/newcvsroot
++ dh_installchangelogs debian/stagedir/clogs/ChangeLog
++ dh_installdocs
++ dh_install
++ dh_installinfo
++ dh_installman
++ dh_link
++ dh_strip
++ dh_compress -X.pdf
++ cd debian/cvs/usr/share/cvs/contrib && chmod +x descend.sh rcs2sccs.sh
++ dh_fixperms
++ dh_installdeb
++ dh_shlibdeps
++ dh_gencontrol
++ dh_md5sums
++ dh_builddeb -- -Zgzip -z9
++
++binary: binary-indep binary-arch
++.PHONY: binary binary-arch binary-indep build build-arch build-indep clean
+--- cvs-1.12.13+real.orig/debian/source.lintian-overrides
++++ cvs-1.12.13+real/debian/source.lintian-overrides
+@@ -0,0 +1,13 @@
++# desired method of keeping changes is as VCS working tree
++cvs source: direct-changes-in-diff-but-no-patch-system *
++
++# not my fault
++cvs source: source-contains-cvs-control-dir zlib/CVS
++cvs source: source-contains-cvs-control-dir zlib/os2/CVS
++cvs source: deprecated-configure-filename
++
++# not part of the binary package, and not legally a problem
++cvs source: license-problem-gfdl-non-official-text doc/getdate-cvs.texi *
++
++# no, thanks
++cvs source: no-dep5-copyright
+--- cvs-1.12.13+real.orig/debian/source/format
++++ cvs-1.12.13+real/debian/source/format
+@@ -0,0 +1 @@
++1.0
+--- cvs-1.12.13+real.orig/debian/upstream/signing-key.asc
++++ cvs-1.12.13+real/debian/upstream/signing-key.asc
+@@ -0,0 +1,25 @@
++-----BEGIN PGP PUBLIC KEY BLOCK-----
++Version: GnuPG v1
++
++mQGiBD4u3XQRBACN7F6Ducb4gaJw7LJPCaNbk4+eW/EWjiC+aoJhnNocWGfeKM2d
++NYRDPuyW6IqAmMPGBq0HAdSmi64BQg5mC8Q7NGujfzVDefACELuwQRUxFadbcAXn
++1eGUHGsst93FFwlhY+SH3Yuo1plvNBnlMhDt9ylT3/s38zKG874+A44L4wCg/7fh
++u0zqxFA0w22lXobhkKO4upED/0zA5BJ+d8brNLe6RpIQXTUzPxZ+UoU5RG9wlzv/
++zabSS6eAPpmeoIPeKdSwRO/G0/f3Qn/vxDKVTqRzNKpusKJz8TS+gDBZSFjQ1L3U
++TL6qh5kdnTy/yETg8wiUMXVaTqWtXP2eFEoHoto6dVP46BuULqQK980EmR6jg/ul
++EGC/BACD5iO81tygsm6OBEu59hJ+GykU60+9Mzz1/qPYdejJmJkmdoJZWplJULGD
++270nQlDarPJzMCpyrUzAZYdnmO6dwic/4hIxJENQ3GBrhbdr6YuuNgTxIXJJxTH7
++qTJqRrHLw9Cvk1oPFYlzE2vQuDNlrqxXg/V06l4/ZJfotj3mI7RNRGVyZWsgUi4g
++UHJpY2UgKEdldCBDVlMgU3VwcG9ydCBhdCA8aHR0cDovL3hpbWJpb3QuY29tPiEp
++IDxkZXJla0B4aW1iaW90LmNvbT6IYQQTEQIAGQUCPi7ddAQLBwMCAxUCAwMWAgEC
++HgECF4AAEgkQLD1OTBfyMaQHZUdQRwABAVEoAJ9o9E9Ya1dKUi1xRepkcpWqzjjt
++OgCgqSQSvoBA3NLu8/US2RAb+Xn1vAK5AQ0EPi7dehAEAJgUmO0vNtZJj4qUyyFd
++lw9wH9jQVRwblKxItr/0eO28ta+JOXWH668/wcyJFbVCulanS/o1crbq1bq3662Q
++EiHaZuB4hUJHCmkrfnxSvyw+w3tvk1ByiWw4uhsIiYCLpq6h/w9Yv0bSXOctGWFv
++/dnZw1f/N1PLU955Ze7hofVrAAMGA/9dw6G1LznEO2zjfTYHZtEKSlAtvRGqyOQc
++7htMOXagUpPAF/KGHnBETWVyuEfNNW1c/EQ3LQi+L23q9u0L+cAcWiR4SBCejEII
++3bFE3hPLGxfa0LamJrq0kkSDoYm6OWB4WNPSGBCSZywwdLnLjqXiCU1+rT6qZcvN
++JEKFAJUOA4hOBBgRAgAGBQI+Lt16ABIJECw9TkwX8jGkB2VHUEcAAQE9AACfTWlS
++/WpC3LgkF8rcbbap9M8U/RkAoL2DhkJHX3uYYJzagVUiWJffkLnR
++=hls5
++-----END PGP PUBLIC KEY BLOCK-----
+--- cvs-1.12.13+real.orig/debian/watch
++++ cvs-1.12.13+real/debian/watch
+@@ -0,0 +1,3 @@
++version=3
++opts="dversionmangle=s/^[0-9]+://;s/\+real$//,pgpsigurlmangle=s/$/.sig/" \
++http://ftp.gnu.org/non-gnu/cvs/source/feature/1.12.13/ cvs-([0-9.]*)\.tar\.gz
+--- cvs-1.12.13+real.orig/diff/analyze.c
++++ cvs-1.12.13+real/diff/analyze.c
+@@ -358,7 +358,7 @@
+ else
+ {
+ int c;
+- struct partition part;
++ struct partition part = { 0, 0, 0, 0 };
+
+ /* Find a point of correspondence in the middle of the files. */
+
+--- cvs-1.12.13+real.orig/diff/diff3.c
++++ cvs-1.12.13+real/diff/diff3.c
+@@ -1439,14 +1439,13 @@
+ int const mapping[3], rev_mapping[3];
+ {
+ int i;
+- int oddoneout;
++ int oddoneout = 0;
+ char *cp;
+ struct diff3_block *ptr;
+ int line;
+ size_t length;
+- int dontprint;
++ int dontprint = 0;
+ static int skew_increment[3] = { 2, 3, 1 }; /* 0==>2==>1==>3 */
+- char const *line_prefix = tab_align_flag ? "\t" : " ";
+
+ for (ptr = diff; ptr; ptr = D_NEXT (ptr))
+ {
+@@ -1503,7 +1502,7 @@
+ line = 0;
+ do
+ {
+- printf_output (line_prefix);
++ printf_output (tab_align_flag ? "\t" : " ");
+ cp = D_RELNUM (ptr, realfile, line);
+ length = D_RELLEN (ptr, realfile, line);
+ write_output (cp, length);
+@@ -1555,11 +1554,12 @@
+ int leading_dot, start, num;
+ {
+ write_output (".\n", 2);
+- if (leading_dot)
++ if (leading_dot) {
+ if (num == 1)
+ printf_output ("%ds/^\\.//\n", start);
+ else
+ printf_output ("%d,%ds/^\\.//\n", start, start + num - 1);
++ }
+ }
+
+ /*
+@@ -1750,11 +1750,12 @@
+ do
+ {
+ c = getc (infile);
+- if (c == EOF)
++ if (c == EOF) {
+ if (ferror (infile))
+ diff3_perror_with_exit ("input file");
+ else if (feof (infile))
+ diff3_fatal ("input file shrank");
++ }
+ cc = c;
+ write_output (&cc, 1);
+ }
+@@ -1804,7 +1805,7 @@
+ linesread += i;
+ while (0 <= --i)
+ while ((c = getc (infile)) != '\n')
+- if (c == EOF)
++ if (c == EOF) {
+ if (ferror (infile))
+ diff3_perror_with_exit ("input file");
+ else if (feof (infile))
+@@ -1813,6 +1814,7 @@
+ diff3_fatal ("input file shrank");
+ return conflicts_found;
+ }
++ }
+ }
+ /* Copy rest of common file. */
+ while ((c = getc (infile)) != EOF || !(ferror (infile) | feof (infile)))
+--- cvs-1.12.13+real.orig/diff/ifdef.c
++++ cvs-1.12.13+real/diff/ifdef.c
+@@ -189,7 +189,7 @@
+
+ default:
+ {
+- int value;
++ int value = 0;
+ char *speclim;
+
+ f = scan_printf_spec (spec);
+@@ -322,7 +322,7 @@
+
+ default:
+ {
+- int value;
++ int value = 0;
+ char *speclim;
+
+ f = scan_printf_spec (spec);
+--- cvs-1.12.13+real.orig/diff/side.c
++++ cvs-1.12.13+real/diff/side.c
+@@ -122,7 +122,7 @@
+ break;
+
+ case '\b':
+- if (in_position != 0 && --in_position < out_bound)
++ if (in_position != 0 && --in_position < out_bound) {
+ if (out_position <= in_position)
+ /* Add spaces to make up for suppressed tab past out_bound. */
+ for (; out_position < in_position; out_position++)
+@@ -133,6 +133,7 @@
+ cc = c;
+ write_output (&cc, 1);
+ }
++ }
+ break;
+
+ case '\f':
+--- cvs-1.12.13+real.orig/diff/util.c
++++ cvs-1.12.13+real/diff/util.c
+@@ -235,7 +235,7 @@
+ close (pipes[0]);
+ }
+
+- execl (PR_PROGRAM, PR_PROGRAM, "-f", "-h", name, 0);
++ execl (PR_PROGRAM, PR_PROGRAM, "-f", "-h", name, NULL);
+ pfatal_with_name (PR_PROGRAM);
+ }
+ else
+--- cvs-1.12.13+real.orig/doc/HACKING.DOCS
++++ cvs-1.12.13+real/doc/HACKING.DOCS
+@@ -16,7 +16,9 @@
+ @strong{ ... } Similar to @emph{}, but the effect is to
+ bracket with asterisks in info files (* ... *)
+ and in bold in PDF & probably in postscript &
+- HTML.
++ HTML. It will cause spurious links in info if
++ used in some circumstances; if in doubt, use
++ @empy{ ... } instead then.
+ @noindent Suppresses indentation of the following
+ paragraph. This can ocassionally be useful
+ after examples and the like.
+@@ -44,3 +46,6 @@
+
+ For more on using texinfo docs, see the `info texinfo' documentation or
+ http://www.gnu.org/manual/texinfo/texinfo.html .
++
++
++$MirOS: src/gnu/usr.bin/cvs/doc/HACKING.DOCS,v 1.3 2010/09/19 19:42:52 tg Exp $
+--- cvs-1.12.13+real.orig/doc/Makefile.am
++++ cvs-1.12.13+real/doc/Makefile.am
+@@ -1,4 +1,5 @@
+ ## Process this file with automake to produce Makefile.in
++# $MirOS: src/gnu/usr.bin/cvs/doc/Makefile.am,v 1.5 2017/01/09 22:54:22 tg Exp $
+ # Makefile for GNU CVS documentation (excluding man pages - see ../man).
+ #
+ # Copyright (C) 1986-2005 The Free Software Foundation, Inc.
+@@ -84,7 +85,7 @@
+ # It is possible that an implicit .ms.ps target could be safely defined. I
+ # don't recall looking into it.
+ cvs-paper.ps: cvs-paper.ms
+- $(ROFF) -t -p -ms -Tps $(srcdir)/cvs-paper.ms >cvs-paper.ps-t
++ $(ROFF) -t -p -ms -Tps -P-p28c,21c $(srcdir)/cvs-paper.ms >cvs-paper.ps-t
+ cp cvs-paper.ps-t $@
+ -@rm -f cvs-paper.ps-t
+
+@@ -92,8 +93,8 @@
+ # Nothing in $(srcdir) be rebuilt, and this will always be rebuilt when it
+ # is dependant on cvs-paper.ps and cvs-paper.ps isn't distributed.
+ $(srcdir)/cvs-paper.pdf: cvs-paper.ms
+- $(ROFF) -t -p -ms -Tps $(srcdir)/cvs-paper.ms >cvs-paper.ps-t
+- ps2pdf cvs-paper.ps-t cvs-paper.pdf-t
++ $(ROFF) -t -p -ms -Tps -P-p28c,21c $(srcdir)/cvs-paper.ms >cvs-paper.ps-t
++ ps2pdf14 -sPAPERSIZE=pa4 cvs-paper.ps-t cvs-paper.pdf-t
+ cp cvs-paper.pdf-t $@
+ -@rm -f cvs-paper.pdf-t cvs-paper.ps-t
+
+--- cvs-1.12.13+real.orig/doc/cvs.man.footer
++++ cvs-1.12.13+real/doc/cvs.man.footer
+@@ -1,3 +1,4 @@
++.\" $MirOS: src/gnu/usr.bin/cvs/doc/cvs.man.footer,v 1.6 2017/01/08 19:42:05 tg Exp $
+ .SH "AUTHORS"
+ .TP
+ Dick Grune
+@@ -26,15 +27,13 @@
+ Have helped maintain
+ .B cvs
+ for many years.
+-.TP
++.PP
+ And many others too numerous to mention here.
+ .SH "SEE ALSO"
+ The most comprehensive manual for CVS is
+-Version Management with CVS by Per Cederqvist et al. Depending on
+-your system, you may be able to get it with the
+-.B info CVS
+-command or it may be available as cvs.pdf (Portable Document Format),
+-cvs.ps (PostScript), cvs.texinfo (Texinfo source), or cvs.html.
++Version Management with CVS by Per Cederqvist et al. (see
++.I NOTE
++at top).
+ .SP
+ For CVS updates, more information on documentation, software related
+ to CVS, development of CVS, and more, see:
+@@ -43,7 +42,6 @@
+ .PD 0
+ .IP "" 4
+ .B http://www.nongnu.org/cvs/
+-.in -1i
+ .SP
+ .BR ci ( 1 ),
+ .BR co ( 1 ),
+@@ -54,5 +52,7 @@
+ .BR patch ( 1 ),
+ .BR rcs ( 1 ),
+ .BR rcsdiff ( 1 ),
++.BR rcsintro ( 1 ),
+ .BR rcsmerge ( 1 ),
+-.BR rlog ( 1 ).
++.BR rlog ( 1 ),
++.BR re_format ( 7 ).
+--- cvs-1.12.13+real.orig/doc/cvs.man.header
++++ cvs-1.12.13+real/doc/cvs.man.header
+@@ -1,3 +1,5 @@
++.\" $MirOS: src/gnu/usr.bin/cvs/doc/cvs.man.header,v 1.6 2016/11/08 21:12:15 tg Exp $
++.\"
+ .\" This is the man page for CVS. It is auto-generated from the
+ .\" cvs.man.header, cvs.texinfo, & cvs.man.footer files. Please make changes
+ .\" there. A full copyright & license notice may also be found in cvs.texinfo.
+@@ -5,6 +7,7 @@
+ .\" Man page autogeneration, including this header file, is
+ .\" Copyright 2004-2005 The Free Software Foundation, Inc.,
+ .\" Derek R. Price, & Ximbiot <http://ximbiot.com>.
++.\" Copyright (c) 2004, 2010, 2012, 2016 mirabilos <m@mirbsd.org>.
+ .\"
+ .\" This documentation is free software; you can redistribute it and/or modify
+ .\" it under the terms of the GNU General Public License as published by
+@@ -23,7 +26,9 @@
+ .ds Rv \\$3
+ .ds Dt \\$4
+ ..
+-.TH CVS 1 "\*(Dt"
++.de IX
++..
++.TH CVS 1
+ .\" Full space in nroff; half space in troff
+ .de SP
+ .if n .sp
+@@ -51,11 +56,82 @@
+ .IX "release control system" "cvs command" "" "\fLcvs\fP \- concurrent versions system"
+ .IX "source control system" "cvs command" "" "\fLcvs\fP \- concurrent versions system"
+ .IX revisions "cvs command" "" "\fLcvs\fP \- source control"
+-This manpage is a summary of some of the features of
+-\fBcvs\fP. It is auto-generated from an appendix of the CVS manual.
+-For more in-depth documentation, please consult the
+-Cederqvist manual (via the
+-.B info CVS
+-command or otherwise,
+-as described in the SEE ALSO section of this manpage). Cross-references
+-in this man page refer to nodes in the same.
++.\"
++This manual page is a summary of parts of the \fBcvs\fP documentation
++and automatically generated from an appendix of the CVS manual
++(the \fICederqvist\fP), which is also the target of all cross-references
++found in this manual page; please refer to the full CVS manual
++for more in-depth documentation of the Concurrent Versions System.
++.PP
++If you're reading this manual page as part of the MirBSD online (HTML)
++manual pages archive, follow the cvs(GNU) link to the Cederqvist
++(and the cvsclient(GNU) link to the client/server protocol description,
++if necessary).
++.PP
++If you installed
++.B cvs
++via the Debian or MirPorts Framework package management systems,
++.br
++.RS
++.B /usr/mpkg/share/doc/cvs/cvs.pdf
++(MirPorts Framework) or
++.br
++.B /usr/share/doc/cvs/cvs.pdf
++(Debian), respectively,
++.RE
++are versions of the Cederqvist rendered as books, for printing
++and reading on screen.
++.PP
++If you have a Texinfo reader such as
++.B info
++installed (part of the base system on MirBSD; part of the
++.I info
++package on Debian), you can read the Cederqvist by entering:
++.br
++.RS
++.B info
++.I cvs
++.RE
++.PP
++Quick introduction to
++.B info
++so you aren't immediately lost:
++.RS 4n
++.TP 3n
++.I arrow\ keys
++to move on the page
++.TP 3n
++.I Tab
++to move to the next hyperlink
++.TP 3n
++.I Return
++to activate the hyperlink under the cursor
++.TP 3n
++.BI l \ (lowercase\ ell)
++to go to the previously visited page
++.TP 3n
++.IB Page\ Up/ b,\ Page\ Down/Space
++to move by screen pages, including advancing to the previous
++(or next, respectively) section at the first (last) screen page
++.TP 3n
++.B p,\ n
++to go to the previous (next) page on the current navigation hierarchy level
++.TP 3n
++.B t
++to go to the "Top" page, i.e. the start of the document
++.TP 3n
++.BI / <search-term>Return
++to start a search from the current cursor position and jump to the first result
++.TP 3n
++.BI / Return
++to jump to the next result in an ongoing search
++.TP 3n
++.B q
++to exit the
++.B info
++viewer
++.RE
++.PP
++Other ways to read further documentation are described in the
++.I SEE\ ALSO
++section of this manual page.
+--- cvs-1.12.13+real.orig/doc/cvs.texinfo
++++ cvs-1.12.13+real/doc/cvs.texinfo
+@@ -1,6 +1,17 @@
+ \input texinfo @c -*-texinfo-*-
+ @comment Documentation for CVS.
+ @setfilename cvs.info
++@tex
++ % set PA4 paper size (can print on both DIN ISO A4 and US Letter)
++ \globaldefs = 1%
++ \afourpaper%
++ \internalpagesizes{46\baselineskip}{160mm}%
++ {\voffset}{\hoffset}%
++ {\bindingoffset}{36pt}%
++ {28truecm}{21truecm}%
++ \globaldefs = 0%
++@end tex
++@comment $MirOS: src/gnu/usr.bin/cvs/doc/cvs.texinfo,v 1.29 2017/01/09 22:54:23 tg Exp $
+ @macro copyleftnotice
+ @noindent
+ Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+@@ -9,7 +20,11 @@
+
+ @multitable @columnfractions .12 .88
+ @item Portions
+-@item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005
++@item @tab Copyright @copyright{} 2003, 2004, 2005, 2007, 2009, 2010, 2011,
++ 2013, 2014, 2015, 2016
++ mirabilos, The MirOS Project
++@item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005,
++ 2007
+ Derek R. Price,
+ @item @tab Copyright @copyright{} 2002, 2003, 2004, 2005
+ Ximbiot @url{http://ximbiot.com},
+@@ -51,6 +66,15 @@
+ @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ @comment GNU General Public License for more details.
+
++@comment It should be noted that the Texinfo manual is distributed
++@comment under the above notice in all forms, except for the manpage
++@comment generated from it, and that the manual and the source code
++@comment of CVS often need to stay synchronised; therefore, exchanging
++@comment between these three entities under these two licences seems
++@comment to be granted, and the statement above can be interpreted as
++@comment explicit dual-licence grant. As a major contributor to this
++@comment documentation for MirBSD, I do not oppose. --mirabilos
++
+ @c See ../README for A4 vs. US letter size.
+ @c When we provided A4 postscript, and people tried to
+ @c print it on US letter, the usual complaint was that the
+@@ -103,7 +127,7 @@
+ @end direntry
+ @dircategory Individual utilities
+ @direntry
+-* cvs: (cvs)CVS commands. Concurrent Versions System
++* cvs: (cvs)CVS command list. Concurrent Versions System
+ @end direntry
+
+ @comment The titlepage section does not appear in the Info file.
+@@ -111,9 +135,9 @@
+ @sp 4
+ @comment The title is printed in a large font.
+ @center @titlefont{Version Management}
+-@sp
++@sp 1
+ @center @titlefont{with}
+-@sp
++@sp 1
+ @center @titlefont{CVS}
+ @sp 2
+ @center for @sc{cvs} @value{VERSION}
+@@ -141,13 +165,20 @@
+ @node Top
+ @top
+
++@ifnotinfo
++@anchor{Cederqvist}
++@end ifnotinfo
+ This info manual describes how to use and administer
+ @sc{cvs} version @value{VERSION}.
+ @end ifnottex
+
+ @ifinfo
+ @copyleftnotice
++@anchor{Cederqvist}
+ @end ifinfo
++@iftex
++@anchor{Cederqvist}
++@end iftex
+
+ @c This menu is pretty long. Not sure how easily that
+ @c can be fixed (no brilliant ideas right away)...
+@@ -181,6 +212,7 @@
+ * Troubleshooting:: Some tips when nothing works
+ * Credits:: Some of the contributors to this manual
+ * BUGS:: Dealing with bugs in CVS or this manual
++* CVS command list:: Alphabetical list of all CVS commands
+ * Index:: Index
+ @end menu
+
+@@ -742,7 +774,7 @@
+ @c /home/joe/sources. But this node is too long
+ @c as it is; need a little reorganization...
+
+-@cindex :local:, setting up
++@cindex local method, setting up
+ @sc{cvs} can access a repository by a variety of
+ means. It might be on the local computer, or it might
+ be on a computer across the room or across the world.
+@@ -1957,6 +1989,18 @@
+ @code{cvs init} will enable history logging; if you
+ don't want that, remove the history file after running
+ @code{cvs init}. @xref{history file}.
++Since MirBSD CVS 1.12.13-MirOS-0AB7.8, MirPorts-19 or
++Debian cvs 2:1.12.13+real-22, only write operations
++will be logged by default; to change this, make the
++history file world-writable (but beware of the associated
++security risk) and remove the stock @samp{LogHistory}
++line in the @file{CVSROOT/config} file (@pxref{config})
++to use the (commented-out) default or put your own there.
++Note that these versions also create the @file{val-tags}
++file writable (@pxref{CVSUMASK}), not world-writable like
++prior versions, so users who wish to commit must, with a
++default @code{CVSUMASK} of 002, be in the same group as
++the repository.
+
+ @node Backing up
+ @section Backing up a repository
+@@ -2103,6 +2147,9 @@
+ * Write proxies:: Distributing load across several CVS servers
+ @end menu
+
++For the protocol specification,
++@pxref{Top, the CVS client/server protocol,, cvsclient, The CVS client/server protocol}.
++
+ @node Server requirements
+ @subsection Server requirements
+
+@@ -2236,7 +2283,7 @@
+ through and @var{port} is the port number on the HTTP proxy server to connect
+ via. @var{port} defaults to 8080.
+
+-@strong{NOTE: An HTTP proxy server is not the same as a @sc{cvs} write proxy
++@emph{NOTE: An HTTP proxy server is not the same as a @sc{cvs} write proxy
+ server - please see @ref{Write proxies} for more on @sc{cvs} write proxies.}
+
+ For example, to connect pserver via a web proxy listening on port 8000 of
+@@ -2246,7 +2293,7 @@
+ :pserver;proxy=www.myproxy.net;proxyport=8000:@var{pserver_connection_string}
+ @end example
+
+-@strong{NOTE: In the above example, @var{pserver_connection_string} is still
++@emph{NOTE: In the above example, @var{pserver_connection_string} is still
+ required to connect and authenticate to the CVS server, as noted in the
+ upcoming sections on password authentication, @code{gserver}, and
+ @code{kserver}. The example above only demonstrates a modification to the
+@@ -2377,21 +2424,23 @@
+ There is no need to edit @file{inetd.conf} or start a
+ @sc{cvs} server daemon.
+
+-@cindex :server:, setting up
+-@cindex :ext:, setting up
++@cindex server method, setting up
++@cindex ext method, setting up
+ @cindex Kerberos, using kerberized rsh
+ @cindex SSH (rsh replacement)
+ @cindex rsh replacements (Kerberized, SSH, &c)
+ There are two access methods that you use in @code{CVSROOT}
+ for rsh. @code{:server:} specifies an internal rsh
+ client, which is supported only by some @sc{cvs} ports.
++This is not supported on most Unix-style systems.
+ @code{:ext:} specifies an external rsh program. By
+ default this is @code{rsh} (unless otherwise specified
+ by the @file{--with-rsh} flag to configure) but you may set the
+ @code{CVS_RSH} environment variable to invoke another
+ program which can access the remote server (for
+ example, @code{remsh} on HP-UX 9 because @code{rsh} is
+-something different). It must be a program which can
++something different, or @code{ssh} to allow the use of secure
++and/or compressed connections). It must be a program which can
+ transmit data to and from the server without modifying
+ it; for example the Windows NT @code{rsh} is not
+ suitable since it by default translates between CRLF
+@@ -2405,6 +2454,12 @@
+ to be inapplicable; consult the documentation for your rsh
+ replacement.
+
++In the Debian and MirBSD versions of @sc{cvs}, you can
++also specify @code{:extssh:} to force use of the Secure
++Shell, or @code{:ext=prog:} or @code{:ext=/path/to/prog:}
++to specify the remote shell to use without needing to
++touch the @code{CVS_RSH} environment variable.
++
+ You may choose to specify the @var{CVS_RSH} option as a method option
+ in the @var{CVSROOT} string to allow you to use different connection tools
+ for different roots (@pxref{The connection method}). For example, allowing
+@@ -2501,15 +2556,19 @@
+ The @samp{--allow-root} option specifies the allowable
+ @sc{cvsroot} directory. Clients which attempt to use a
+ different @sc{cvsroot} directory will not be allowed to
+-connect. If there is more than one @sc{cvsroot}
+-directory which you want to allow, repeat the option.
++connect. To allow a whole class of @sc{cvsroot}, specify
++a POSIX extended regular expression to match allowed
++directories with the @samp{--allow-root-regexp} option.
++These options may be used in conjunction, and both options
++may be repeated to allow access to multiple @sc{cvsroot}
++directories and classes of directories.
+ (Unfortunately, many versions of @code{inetd} have very small
+ limits on the number of arguments and/or the total length
+ of the command. The usual solution to this problem is
+ to have @code{inetd} run a shell script which then invokes
+ @sc{cvs} with the necessary arguments.)
+
+- If your @code{inetd} wants a symbolic service
++If your @code{inetd} wants a symbolic service
+ name instead of a raw port number, then put this in
+ @file{/etc/services}:
+
+@@ -2675,7 +2734,7 @@
+ (@code{info-cvs@@nongnu.org} or @code{bug-cvs@@nongnu.org}) if you use the
+ @sc{cvs} PAM support.
+
+-@strong{WARNING: Using PAM gives the system administrator much more
++@emph{WARNING: Using PAM gives the system administrator much more
+ flexibility about how @sc{cvs} users are authenticated but
+ no more security than other methods. See below for more.}
+
+@@ -2776,7 +2835,7 @@
+ @cindex Login (subcommand)
+ @cindex Password client, using
+ @cindex Authenticated client, using
+-@cindex :pserver:, setting up
++@cindex pserver method, setting up
+ To run a @sc{cvs} command on a remote repository via
+ the password-authenticating server, one specifies the
+ @code{pserver} protocol, optional username, repository host, an
+@@ -2940,8 +2999,8 @@
+
+ @cindex GSSAPI
+ @cindex Security, GSSAPI
+-@cindex :gserver:, setting up
+-@cindex Kerberos, using :gserver:
++@cindex gserver method, setting up
++@cindex Kerberos, using gserver method
+ GSSAPI is a generic interface to network security
+ systems such as Kerberos 5.
+ If you have a working GSSAPI library, you can have
+@@ -2992,9 +3051,9 @@
+ @node Kerberos authenticated
+ @subsection Direct connection with Kerberos
+
+-@cindex Kerberos, using :kserver:
++@cindex Kerberos, using kserver method
+ @cindex Security, Kerberos
+-@cindex :kserver:, setting up
++@cindex kserver method, setting up
+ The easiest way to use Kerberos is to use the Kerberos
+ @code{rsh}, as described in @ref{Connecting via rsh}.
+ The main disadvantage of using rsh is that all the data
+@@ -3039,7 +3098,7 @@
+ @subsection Connecting with fork
+
+ @cindex fork, access method
+-@cindex :fork:, setting up
++@cindex fork method, setting up
+ This access method allows you to connect to a
+ repository on your local disk via the remote protocol.
+ In other words it does pretty much the same thing as
+@@ -3065,7 +3124,7 @@
+ cvs -d :fork:/usr/local/cvsroot checkout foo
+ @end example
+
+-@cindex CVS_SERVER, and :fork:
++@cindex CVS_SERVER, and fork method
+ As with @code{:ext:}, the server is called @samp{cvs}
+ by default, or the value of the @code{CVS_SERVER}
+ environment variable.
+@@ -3994,7 +4053,7 @@
+ tag.
+
+ @noindent
+-@strong{WARNING: the commands in this section are
++@emph{WARNING: the commands in this section are
+ dangerous; they permanently discard historical
+ information and it can be difficult or impossible to
+ recover from errors. If you are a @sc{cvs}
+@@ -4024,7 +4083,7 @@
+ trigger warnings and will not be deleted.
+
+ @noindent
+-@strong{WARNING: Moving branch tags is very dangerous! If you think
++@emph{WARNING: Moving branch tags is very dangerous! If you think
+ you need the @code{-B} option, think again and ask your @sc{cvs}
+ administrator about it (if that isn't you). There is almost certainly
+ another way to accomplish what you want to accomplish.}
+@@ -4055,7 +4114,7 @@
+ name are ignored with a warning message.
+
+ @noindent
+-@strong{WARNING: Moving branch tags is very dangerous! If you think you
++@emph{WARNING: Moving branch tags is very dangerous! If you think you
+ need the @code{-B} option, think again and ask your @sc{cvs}
+ administrator about it (if that isn't you). There is almost certainly
+ another way to accomplish what you want to accomplish.}
+@@ -4904,7 +4963,7 @@
+ directory need not change anything. Therefore, there
+ is no conflict.
+
+-@strong{WARNING: In versions of @sc{cvs} prior to 1.12.2, there was a
++@emph{WARNING: In versions of @sc{cvs} prior to 1.12.2, there was a
+ major problem with using @samp{-kk} on merges. Namely, @samp{-kk}
+ overrode any default keyword expansion mode set in the archive file in
+ the repository. This could, unfortunately for some users, cause data
+@@ -5968,7 +6027,7 @@
+ locks, have all developers put "edit -c", "commit -c" in their
+ .cvsrc file, and turn on watches in the repository. This
+ prevents them from doing a @code{cvs edit} if anyone is
+-already editting the file. It also may
++already editing the file. It also may
+ be possible to use plain watches together with suitable
+ procedures (not enforced by software), to avoid having
+ two people edit at the same time.
+@@ -6630,7 +6689,7 @@
+ put "edit -c" and "commit -c" into all .cvsrc files,
+ and make files default to read only by turning on watches
+ or putting "cvs -r" into all .cvsrc files.
+-This prevents multiple people from editting a file at
++This prevents multiple people from editing a file at
+ the same time (unless explicitly overriden with @samp{-f}).
+
+ @c I'm a little dissatisfied with this presentation,
+@@ -6875,7 +6934,7 @@
+ There are two additional options that @code{cvs edit} understands as of
+ @sc{cvs} client and server versions 1.12.10 but @code{cvs watch} does not.
+ The first is @code{-c}, which causes @code{cvs edit} to fail if anyone else
+-is editting the file. This is probably only useful when @samp{edit -c} and
++is editing the file. This is probably only useful when @samp{edit -c} and
+ @samp{commit -c} are specified in all developers' @file{.cvsrc} files. This
+ behavior may be overriden this via the @code{-f} option, which overrides
+ @code{-c} and allows multiple edits to succeed.
+@@ -7182,6 +7241,15 @@
+ @item $@splitrcskeyword{Date}$
+ The date and time (UTC) the revision was checked in.
+
++@cindex Mdocdate keyword
++@item $@splitrcskeyword{Mdocdate}$
++The date (UTC) the revision was checked in, in a format suitable
++for the Berkeley mdoc macro processing.
++
++@example
++$Mdocdate: January 9 2017 $
++@end example
++
+ @cindex Header keyword
+ @item $@splitrcskeyword{Header}$
+ A standard header containing the full pathname of the
+@@ -7550,13 +7618,14 @@
+ A list may be used. The this example:
+
+ @example
+- # Add a "MyBSD" keyword and restrict keyword
+- # expansion to the MyBSD, Name and Date keywords.
++ # Add a "MyBSD" keyword and restrict keyword expansion
++ # to the MyBSD, Name, Date and Mdocdate keywords.
+ LocalKeyword=MyBSD=CVSHeader
+- KeywordExpand=iMyBSD,Name,Date
++ KeywordExpand=iMyBSD,Name,Date,Mdocdate
+ @end example
+
+-would allow $@splitrcskeyword{MyBSD}$, $@splitrcskeyword{Name}$, and
++would allow $@splitrcskeyword{MyBSD}$, $@splitrcskeyword{Name}$,
++$@splitrcskeyword{Mdocdate} and
+ $@splitrcskeyword{Date}$ to be expanded.
+
+ It is also possible to configure an exclusion list
+@@ -7742,7 +7811,7 @@
+ $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05
+ @end example
+
+-@strong{WARNING: If you use a release tag that already exists in one of the
++@emph{WARNING: If you use a release tag that already exists in one of the
+ repository archives, files removed by an import may not be detected.}
+
+ For files that have not been modified locally, the newly created
+@@ -7786,7 +7855,12 @@
+
+ You can also revert local changes completely and return
+ to the latest vendor release by changing the `head'
+-revision back to the vendor branch on all files. For
++revision back to the vendor branch on all files. This
++does, however, produce weird results if you should ever
++edit this file again, for anyone looking at the output
++from the @code{log} command or CVSweb. To fix this,
++first commit a revision of the file which equals the
++vendor branch, then use @code{admin} @samp{-b}. For
+ example, if you have a checked-out copy of the sources
+ in @file{~/work.d/wdiff}, and you want to revert to the
+ vendor's version for all the files in that directory,
+@@ -7853,6 +7927,10 @@
+ @code{cvs import}. It takes as an argument the vendor
+ branch to import to. The default is @samp{-b 1.1.1}.
+
++Vendor branches can only be in the format 1.1.x where
++@samp{x} is an @emph{uneven} number, because branch
++tags use even numbers.
++
+ For example, suppose that there are two teams, the red
+ team and the blue team, that are sending you sources.
+ You want to import the red team's efforts to branch
+@@ -8094,7 +8172,9 @@
+ This appendix describes the overall structure of
+ @sc{cvs} commands, and describes some commands in
+ detail (others are described elsewhere; for a quick
+-reference to @sc{cvs} commands, @pxref{Invoking CVS}).
++reference to @sc{cvs} commands, @pxref{Invoking CVS},
++and for an alphabetical list of all @sc{cvs} commands,
++@pxref{CVS command list}).
+ @c The idea is that we want to move the commands which
+ @c are described here into the main body of the manual,
+ @c in the process reorganizing the manual to be
+@@ -8117,19 +8197,20 @@
+ * Global options:: Options you give to the left of cvs_command
+ * Common options:: Options you give to the right of cvs_command
+ * Date input formats:: Acceptable formats for date specifications
+-* admin:: Administration
++* admin:: Administration front-end for RCS
+ * annotate:: What revision modified each line of a file?
+ * checkout:: Checkout sources for editing
+ * commit:: Check files into the repository
+ * diff:: Show differences between revisions
+ * export:: Export sources from CVS, similar to checkout
+-* history:: Show status of files and users
++* history:: Show repository access history
+ * import:: Import sources into CVS, using vendor branches
+-* log:: Show log messages for files
++* log:: Print out history information for files
+ * ls & rls:: List files in the repository
+-* rdiff:: 'patch' format diffs between releases
++* rdiff:: Create 'patch' format diffs between revisions
+ * release:: Indicate that a directory is no longer in use
+ * server & pserver:: Act as a server for a client on stdin/stdout
++* suck:: Download RCS ,v file raw
+ * update:: Bring work tree in sync with repository
+ @end menu
+
+@@ -8375,6 +8456,31 @@
+ @samp{-N} in the @file{~/.cvsrc} entry for @samp{log},
+ you may need to use @samp{-f} to show the tag names.
+
++@item -g
++Forges group-writable permissions on files in the working copy.
++This option is typically used when you have multiple users sharing
++a single checked out source tree, allowing them to operate their
++shells with a less dangerous umask at the expense of @sc{cvs} security.
++To use this feature, create a directory to hold the checked-out
++source tree, set it to a private group, and set up the directory
++such that files created under it inherit the gid of the directory.
++On BSD systems, this occurs automatically. On SYSV systems and
++GNU/Linux, the sgid bit must be set on the directory for this.
++The users who are to share the checked out tree must be placed in
++that group which owns the directory.
++
++Note that the sharing of a single checked-out source tree is very
++different from giving several users access to a common @sc{cvs} repository.
++Access to a common @sc{cvs} repository already maintains shared group-write
++permissions and does not require this option.
++
++Due to the security implications, setting this option globally in
++your @file{.cvsrc} file is strongly discouraged; if you must, ensure
++all source checkouts are "firewalled" within a private group or a
++private mode 0700 directory.
++
++This option is a MidnightBSD extension merged into Debian and MirBSD @sc{cvs}.
++
+ @item -H
+ @itemx --help
+ Display usage information about the specified @samp{cvs_command}
+@@ -8498,7 +8604,7 @@
+ which are listed with the individual commands, may have
+ different behavior from one @sc{cvs} command to the other).
+
+-@strong{Note: the @samp{history} command is an exception; it supports
++@emph{Note: the @samp{history} command is an exception; it supports
+ many options that conflict even with these standard options.}
+
+ @table @code
+@@ -8523,7 +8629,7 @@
+ slightly different way; @pxref{history options}).
+
+ For a complete description of the date formats accepted by @sc{cvs},
+-@ref{Date input formats}.
++@pxref{Date input formats}.
+ @c What other formats should we accept? I don't want
+ @c to start accepting a whole mess of non-standard
+ @c new formats (there are a lot which are in wide use in
+@@ -8610,7 +8716,7 @@
+ @code{annotate}, @code{checkout}, @code{export},
+ @code{rdiff}, @code{rtag}, and @code{update}.
+
+-@strong{WARNING: The @code{commit} and @code{remove}
++@emph{WARNING: The @code{commit} and @code{remove}
+ commands also have a
+ @samp{-f} option, but it has a different behavior for
+ those commands. See @ref{commit options}, and
+@@ -8631,7 +8737,7 @@
+ @code{checkout}, @code{diff}, @code{export}, @code{import},
+ @code{rdiff}, and @code{update} commands.
+
+-@strong{WARNING: Prior to CVS version 1.12.2, the @samp{-k} flag
++@emph{WARNING: Prior to CVS version 1.12.2, the @samp{-k} flag
+ overrode the @samp{-kb} indication for a binary file. This could
+ sometimes corrupt binary files. @xref{Merging and keywords}, for
+ more.}
+@@ -8660,7 +8766,7 @@
+ specified to run in the modules
+ database (@pxref{modules}); this option bypasses it).
+
+-@strong{Note: this is not the same as the @samp{cvs -n}
++@emph{Note: this is not the same as the @samp{cvs -n}
+ program option, which you can specify to the left of a cvs command!}
+
+ Available with the @code{checkout}, @code{commit}, @code{export},
+@@ -8688,14 +8794,21 @@
+ @item -r @var{tag}[:@var{date}]
+ @cindex HEAD, special tag
+ @cindex BASE, special tag
++@cindex BASE, special date
+ Use the revision specified by the @var{tag} argument (and the @var{date}
+ argument for the commands which accept it) instead of the
+ default @dfn{head} revision. As well as arbitrary tags defined
+ with the @code{tag} or @code{rtag} command, two special tags are
+ always available: @samp{HEAD} refers to the most recent version
+-available in the repository, and @samp{BASE} refers to the
++available in the repository (also known as the tip of the @samp{MAIN}
++branch, also known as trunk; the name of a branch refers to its tip;
++this version of @sc{cvs} introduces @samp{.bhead}, but only for the
++@sc{diff} command, for the same), and @samp{BASE} refers to the
+ revision you last checked out into the current working directory.
+
++@c fixed: HEAD is changed now; .bhead is the name of the branch,
++@c but added for cases where it is unknown.
++@c --mirabilos
+ @c FIXME: What does HEAD really mean? I believe that
+ @c the current answer is the head of the default branch
+ @c for all cvs commands except diff. For diff, it
+@@ -8735,12 +8848,19 @@
+ the name of a branch is interpreted as the most recent
+ revision on that branch.
+
++As a Debian and MirBSD @sc{cvs} extension, specifying @samp{BASE} as the
++@var{date} portion of the argument yields the @emph{base revision} of the
++branch specified by the @var{tag} portion of the argument, i.e. the revision
++on the parent branch the @var{tag} branch split off, or, where both
++branches were the same.
++This option has not received very much testing, beware!
++
+ Specifying the @samp{-q} global option along with the
+ @samp{-r} command option is often useful, to suppress
+ the warning messages when the @sc{rcs} file
+ does not contain the specified tag.
+
+-@strong{Note: this is not the same as the overall @samp{cvs -r} option,
++@emph{Note: this is not the same as the overall @samp{cvs -r} option,
+ which you can specify to the left of a @sc{cvs} command!}
+
+ @samp{-r @var{tag}} is available with the @code{commit} and @code{history}
+@@ -8765,7 +8885,7 @@
+
+ @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ @node admin
+-@appendixsec admin---Administration
++@appendixsec admin---Administration front-end for RCS
+ @cindex Admin (subcommand)
+
+ @itemize @bullet
+@@ -9135,7 +9255,10 @@
+
+ @itemize @bullet
+ @item
+-Synopsis: annotate [options] files@dots{}
++Synopsis:
++annotate [options] files@dots{}
++
++rannotate [options] files@dots{}
+ @item
+ Requires: repository.
+ @item
+@@ -9144,7 +9267,10 @@
+
+ For each file in @var{files}, print the head revision
+ of the trunk, together with information on the last
+-modification for each line.
++modification for each line. If backwards annotation
++is requested, show the first modification after the
++specified revision. (Backwards annotation currently
++appears to be broken.)
+
+ @menu
+ * annotate options:: annotate options
+@@ -9160,6 +9286,10 @@
+ them):
+
+ @table @code
++@item -b
++Backwards, show when a line was removed.
++Currently appears to be broken.
++
+ @item -l
+ Local directory only, no recursion.
+
+@@ -9455,8 +9585,7 @@
+
+ @itemize @bullet
+ @item
+-Synopsis: commit [-lnRf] [-m 'log_message' |
+--F file] [-r revision] [files@dots{}]
++Synopsis: commit [-lnRf] [-m 'log_message' | -F file] [-r revision] [files@dots{}]
+ @item
+ Requires: working directory, repository.
+ @item
+@@ -9501,8 +9630,11 @@
+
+ At @code{commit}, a unique commitid is placed in the @sc{rcs}
+ file inside the repository. All files committed at once
+-get the same commitid. The commitid can be retrieved with
+-the @code{log} and @code{status} command; see @ref{log},
++get the same commitid, a string consisting only of hexadecimal
++digits (usually 16 in GNU @sc{cvs}, 19 in Debian and MirBSD @sc{cvs}).
++FSF GNU @sc{cvs} 1.11 and OpenBSD OpenCVS do not support commitids yet.
++The commitid can be retrieved with
++the @code{log} and @code{status} command; see @ref{log} and
+ @ref{File status}.
+
+ @menu
+@@ -9685,7 +9817,7 @@
+ under them will be compared.
+
+ The exit status for diff is different than for other
+-@sc{cvs} commands; for details @ref{Exit status}.
++@sc{cvs} commands; for details @pxref{Exit status}.
+
+ @menu
+ * diff options:: diff options
+@@ -10394,7 +10526,7 @@
+
+ @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ @node history
+-@appendixsec history---Show status of files and users
++@appendixsec history---Show repository access history
+ @cindex history (subcommand)
+
+ @itemize @bullet
+@@ -10425,7 +10557,7 @@
+ (@file{$CVSROOT/CVSROOT/history}) with read and write permissions for all
+ users (@pxref{Creating a repository}).
+
+-@strong{Note: @code{history} uses @samp{-f}, @samp{-l},
++@emph{Note: @code{history} uses @samp{-f}, @samp{-l},
+ @samp{-n}, and @samp{-p} in ways that conflict with the
+ normal use inside @sc{cvs} (@pxref{Common options}).}
+
+@@ -10774,12 +10906,14 @@
+
+ @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ @node log
+-@appendixsec log---Print out log information for files
++@appendixsec log---Print out history information for files
+ @cindex log (subcommand)
+
+ @itemize @bullet
+ @item
+ Synopsis: log [options] [files@dots{}]
++
++rlog [options] [files@dots{}]
+ @item
+ Requires: repository, working directory.
+ @item
+@@ -10805,7 +10939,7 @@
+ the @code{$TZ} environment variable, which can be set to
+ govern how @code{log} displays dates.
+
+-@strong{Note: @code{log} uses @samp{-R} in a way that conflicts
++@emph{Note: @code{log} uses @samp{-R} in a way that conflicts
+ with the normal use inside @sc{cvs} (@pxref{Common options}).}
+
+ @menu
+@@ -10997,13 +11131,15 @@
+
+ @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ @node ls & rls
+-@appendixsec ls & rls
++@appendixsec ls & rls---List files in the repository
+ @cindex ls (subcommand)
+ @cindex rls (subcommand)
+
+ @itemize @bullet
+ @item
+ ls [-e | -l] [-RP] [-r tag[:date]] [-D date] [path@dots{}]
++
++rls [-e | -l] [-RP] [-r tag[:date]] [-D date] [path@dots{}]
+ @item
+ Requires: repository for @code{rls}, repository & working directory for
+ @code{ls}.
+@@ -11095,7 +11231,7 @@
+
+ @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ @node rdiff
+-@appendixsec rdiff---'patch' format diffs between releases
++@appendixsec rdiff---Create 'patch' format diffs between revisions
+ @cindex rdiff (subcommand)
+
+ @itemize @bullet
+@@ -11173,6 +11309,9 @@
+ @item -c
+ Use the context diff format. This is the default format.
+
++@item -p
++Show which C function each change is in.
++
+ @item -s
+ Create a summary change report instead of a patch. The
+ summary includes information about files that were
+@@ -11231,7 +11370,7 @@
+
+ @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ @node release
+-@appendixsec release---Indicate that a Module is no longer in use
++@appendixsec release---Indicate that a directory is no longer in use
+ @cindex release (subcommand)
+
+ @itemize @bullet
+@@ -11282,7 +11421,7 @@
+ succeeds. If this flag is not given your files will
+ remain in your working directory.
+
+-@strong{WARNING: The @code{release} command deletes
++@emph{WARNING: The @code{release} command deletes
+ all directories and files recursively. This
+ has the very serious side-effect that any directory
+ that you have created inside your checked-out sources,
+@@ -11386,6 +11525,25 @@
+ @end table
+
+ @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++@node suck
++@appendixsec suck---Download RCS ,v file raw
++@cindex suck (subcommand)
++
++@itemize @bullet
++@item
++suck module/pa/th
++@item
++Requires: repository
++@end itemize
++
++Locates the file module/pa/th,v or module/pa/Attic/th,v and downloads
++it raw as RCS comma-v file.
++
++Output consists of the real pathname of the comma-v file, relative to
++the CVS repository, followed by a newline and the binary file content
++immediately thereafter.
++
++@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ @node update
+ @appendixsec update---Bring work tree in sync with repository
+ @cindex update (subcommand)
+@@ -11635,6 +11793,8 @@
+ references to where each command or feature is
+ described in detail. For other references run the
+ @code{cvs --help} command, or see @ref{Index}.
++For an alphabetical list of all @sc{cvs} commands,
++@pxref{CVS command list}).
+
+ A @sc{cvs} command looks like:
+
+@@ -11646,10 +11806,15 @@
+
+ @table @code
+ @item --allow-root=@var{rootdir}
+-Specify legal @sc{cvsroot} directory (server only) (not
+-in @sc{cvs} 1.9 and older). See @ref{Password
++Specify acceptable @sc{cvsroot} directory (server only).
++Appeared in @sc{cvs} 1.10. See @ref{Password
+ authentication server}.
+
++@item --allow-root-regexp=@var{rootdir}
++Specify a POSIX extended regular expression which matches acceptable
++@sc{cvsroot} directories (server only). Appeared in @sc{cvs}
++1.12.14. See @ref{Password authentication server}.
++
+ @item -a
+ Authenticate all communication (client only) (not in @sc{cvs}
+ 1.9 and older). See @ref{Global options}.
+@@ -11669,6 +11834,10 @@
+ Do not read the @file{~/.cvsrc} file. See @ref{Global
+ options}.
+
++@item -g
++Set the umask to allow group writable permissions in
++the working copy. See @ref{Global options}.
++
+ @item -H
+ @itemx --help
+ Print a help message. See @ref{Global options}.
+@@ -11730,6 +11899,7 @@
+ @example
+ $@splitrcskeyword{Author}: joe $
+ $@splitrcskeyword{Date}: 1993/12/09 03:21:13 $
++$@splitrcskeyword{Mdocdate}: December 9 1993 $
+ $@splitrcskeyword{CVSHeader}: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+ $@splitrcskeyword{Header}: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+ $@splitrcskeyword{Id}: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
+@@ -11756,6 +11926,7 @@
+
+ @table @code
+ @c ------------------------------------------------------------
++@anchor{add}
+ @item add [@var{options}] [@var{files}@dots{}]
+ Add a new file/directory. See @ref{Adding files}.
+
+@@ -11877,7 +12048,8 @@
+ @item -j @var{tag}[:@var{date}]
+ Merge in the change specified by @var{tag}, or when @var{date} is specified
+ and @var{tag} is a branch tag, the version from the branch @var{tag} as it
+-existed on @var{date}. See @ref{checkout options}.
++existed on @var{date}. See @ref{checkout options}. Also,
++see @ref{Common options}.
+
+ @item -k @var{kflag}
+ Use @var{kflag} keyword expansion. See
+@@ -11907,7 +12079,7 @@
+ @item -r @var{tag}[:@var{date}]
+ Checkout the revision already tagged with @var{tag} or, when @var{date} is
+ specified and @var{tag} is a branch tag, the version from the branch @var{tag}
+-as it existed on @var{date}. This . See @ref{Common options}.
++as it existed on @var{date}. See @ref{Common options}.
+
+ @item -s
+ Like -c, but include module status. See @ref{checkout options}.
+@@ -11992,6 +12164,7 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{edit}
+ @item edit [@var{options}] [@var{files}@dots{}]
+ Get ready to edit a watched file. See @ref{Editing files}.
+
+@@ -12003,7 +12176,7 @@
+ @ref{Editing files}.
+
+ @item -c
+-Check edits: Edit fails if someone else is already editting the file.
++Check edits: Edit fails if someone else is already editing the file.
+ Requires a @sc{cvs} client and server both of version 1.12.10 or greater.
+
+ @item -f
+@@ -12018,6 +12191,7 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{editors}
+ @item editors [@var{options}] [@var{files}@dots{}]
+ See who is editing a watched file. See @ref{Watch information}.
+
+@@ -12163,14 +12337,17 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{init}
+ @item init
+ Create a @sc{cvs} repository if it doesn't exist. See
+ @ref{Creating a repository}.
+
+ @c ------------------------------------------------------------
++@anchor{kserver}
+ @item kserver
+ Kerberos authenticated server.
+-See @ref{Kerberos authenticated}.
++@xref{server & pserver}.
++@xref{Kerberos authenticated}.
+
+ @c ------------------------------------------------------------
+ @item log [@var{options}] [@var{files}@dots{}]
+@@ -12211,21 +12388,55 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{login}
+ @item login
+ Prompt for password for authenticating server. See
+ @ref{Password authentication client}.
+
+ @c ------------------------------------------------------------
++@anchor{logout}
+ @item logout
+ Remove stored password for authenticating server. See
+ @ref{Password authentication client}.
+
+ @c ------------------------------------------------------------
++@anchor{ls}
++@item ls [@var{options}] [@var{path}@dots{}]
++List files available from CVS. See @ref{ls & rls}.
++
++@table @code
++@item -d
++Show dead revisions (with tag when specified).
++See @ref{ls & rls options}.
++
++@item -e
++Display in CVS/Entries format.
++
++@item -l
++Display all details.
++
++@item -P
++Prune empty directories. See @ref{Moving directories}.
++
++@item -R
++List recursively. @xref{Recursive behavior}.
++
++@item -D @var{date}
++Show files from date. See @ref{Common options}.
++
++@item -r @var{rev}
++Show files with revision or tag.
++@end table
++
++@c ------------------------------------------------------------
++@anchor{pserver}
+ @item pserver
+ Password authenticated server.
+-See @ref{Password authentication server}.
++@xref{server & pserver}.
++@xref{Password authentication server}.
+
+ @c ------------------------------------------------------------
++@anchor{rannotate}
+ @item rannotate [@var{options}] [@var{modules}@dots{}]
+ Show last revision where each line was modified. See
+ @ref{annotate}.
+@@ -12298,7 +12509,7 @@
+ @end table
+
+ @c ------------------------------------------------------------
+-@item release [@var{options}] @var{directory}
++@item release [@var{options}] @var{directories}@dots{}
+ Indicate that a directory is no longer in use. See
+ @ref{release}.
+
+@@ -12308,6 +12519,7 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{remove}
+ @item remove [@var{options}] [@var{files}@dots{}]
+ Remove an entry from the repository. See @ref{Removing files}.
+
+@@ -12324,6 +12536,7 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{rlog}
+ @item rlog [@var{options}] [@var{files}@dots{}]
+ Print out history information for modules. See @ref{log}.
+
+@@ -12361,9 +12574,40 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{rls}
++@item rls [@var{options}] [@var{path}@dots{}]
++List files in a module. See @ref{ls & rls}.
++
++@table @code
++@item -d
++Show dead revisions (with tag when specified).
++See @ref{ls & rls options}.
++
++@item -e
++Display in CVS/Entries format.
++
++@item -l
++Display all details.
++
++@item -P
++Prune empty directories. See @ref{Moving directories}.
++
++@item -R
++List recursively. @xref{Recursive behavior}.
++
++@item -D @var{date}
++Show files from date. See @ref{Common options}.
++
++@item -r @var{rev}
++Show files with revision or tag.
++@end table
++
++@c ------------------------------------------------------------
++@anchor{rtag}
+ @item rtag [@var{options}] @var{tag} @var{modules}@dots{}
+ Add a symbolic tag to a module.
+-See @ref{Revisions} and @ref{Branching and merging}.
++@xref{Tagging by date/tag}.
++@xref{Creating a branch}.
+
+ @table @code
+ @item -a
+@@ -12407,10 +12651,18 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{server}
+ @item server
+-Rsh server. See @ref{Connecting via rsh}.
++SSH/rsh server.
++@xref{server & pserver}.
++@xref{Connecting via rsh}.
+
+ @c ------------------------------------------------------------
++@item suck @var{module/filename}
++Download RCS ,v file raw. See @ref{suck}.
++
++@c ------------------------------------------------------------
++@anchor{status}
+ @item status [@var{options}] @var{files}@dots{}
+ Display status information in a working directory. See
+ @ref{File status}.
+@@ -12427,9 +12679,11 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{tag}
+ @item tag [@var{options}] @var{tag} [@var{files}@dots{}]
+ Add a symbolic tag to checked out version of files.
+-See @ref{Revisions} and @ref{Branching and merging}.
++@xref{Tagging the working directory}.
++@xref{Creating a branch}.
+
+ @table @code
+ @item -b
+@@ -12465,6 +12719,7 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{unedit}
+ @item unedit [@var{options}] [@var{files}@dots{}]
+ Undo an edit command. See @ref{Editing files}.
+
+@@ -12541,6 +12796,7 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{version}
+ @item version
+ @cindex version (subcommand)
+
+@@ -12548,6 +12804,7 @@
+ is remote, display both the client and server versions.
+
+ @c ------------------------------------------------------------
++@anchor{watch}
+ @item watch [on|off|add|remove] [@var{options}] [@var{files}@dots{}]
+
+ on/off: turn on/off read-only checkouts of files. See
+@@ -12572,6 +12829,7 @@
+ @end table
+
+ @c ------------------------------------------------------------
++@anchor{watchers}
+ @item watchers [@var{options}] [@var{files}@dots{}]
+ See who is watching a file. See @ref{Watch information}.
+
+@@ -12711,7 +12969,7 @@
+ @item @var{mname} [ options ] @var{dir} [ @var{files}@dots{} ]
+ In the simplest case, this form of module definition
+ reduces to @samp{@var{mname} @var{dir}}. This defines
+-all the files in directory @var{dir} as module mname.
++all the files in directory @var{dir} as module @var{mname}.
+ @var{dir} is a relative path (from @code{$CVSROOT}) to a
+ directory of source in the source repository. In this
+ case, on checkout, a single directory called
+@@ -12975,7 +13233,7 @@
+ mechanisms outside @sc{cvs}, to insert any necessary
+ changes.
+
+-@strong{WARNING: do not use @code{COPY} with
++@emph{WARNING: do not use @code{COPY} with
+ @sc{cvs} 1.9 or earlier - such versions of @sc{cvs} will
+ copy one version of your file over the other, wiping
+ out the previous contents.}
+@@ -13779,14 +14037,11 @@
+ @file{loginfo} supports:
+
+ @table @t
+-@item @{stVv@}
++@item @{sVv@}
+ File attributes, where:
+ @table @t
+ @item s
+ file name
+-@item T
+-tag name of destination, or the empty string when there is no associated
+-tag name (this usually means the trunk)
+ @item V
+ old version number (pre-checkin)
+ @item v
+@@ -13795,7 +14050,7 @@
+ @end table
+
+ For example, some valid format strings are @samp{%%},
+-@samp{%s}, @samp{%@{s@}}, and @samp{%@{stVv@}}.
++@samp{%s}, @samp{%@{s@}}, and @samp{%@{sVv@}}.
+
+ @cindex loginfo (admin file), updating legacy repositories
+ @cindex compatibility notes, loginfo admin file
+@@ -14442,6 +14697,7 @@
+ random string of printable characters of at least 16
+ characters length. Users should assume that it may
+ someday grow to at most 256 characters in length.
++Currently, Debian and MirBSD @sc{cvs} uses 19 characters.
+ @end table
+
+ If you want to pass a value to the administrative files
+@@ -14613,7 +14869,7 @@
+ @cindex KeywordExpand, in CVSROOT/config
+ @item KeywordExpand=@var{value}
+ Specify @samp{i} followed by a list of keywords to be expanded
+-(for example, @samp{KeywordExpand=iMYCVS,Name,Date}),
++(for example, @samp{KeywordExpand=iMYCVS,Name,Date,Mdocdate}),
+ or @samp{e} followed by a list of keywords not to be expanded
+ (for example, @samp{KeywordExpand=eCVSHeader}).
+ For more on keyword expansion, see @ref{Configuring keyword expansion}.
+@@ -14657,7 +14913,9 @@
+ Default of @samp{TOEFWUPCGMAR} (or simply @samp{all}) will log
+ all transactions. Any subset of the default is
+ legal. (For example, to only log transactions that modify the
+-@file{*,v} files, use @samp{LogHistory=TMAR}.) To disable history logging
++@file{*,v} files, use @samp{LogHistory=TMAR} which is nowadays
++set by @code{cvs init} by default.)
++To disable history logging
+ completely, use @samp{LogHistory=}.
+
+ @cindex MaxCommentLeaderLength, in CVSROOT/config
+@@ -14747,7 +15005,7 @@
+ @samp{stat()} function to see if it has changed (see warning below)
+ before rereading. The default value is @samp{always}.
+
+-@strong{Note: the `stat' mode can cause CVS to pause for up to
++@emph{Note: the `stat' mode can cause CVS to pause for up to
+ one extra second per directory committed. This can be less IO and
+ CPU intensive but is not recommended for use with large repositories}
+
+@@ -14884,6 +15142,7 @@
+ read-only NFS repositories.
+
+ @item $CVSUMASK
++@anchor{CVSUMASK}
+ Controls permissions of files in the repository. See
+ @ref{File permissions}.
+
+@@ -15172,6 +15431,7 @@
+ specific reason for denying authorization. Check that
+ the username and password specified are correct and
+ that the @code{CVSROOT} specified is allowed by @samp{--allow-root}
++or @samp{--allow-root-regexp}
+ in @file{inetd.conf}. See @ref{Password authenticated}.
+
+ @item cvs @var{command}: conflict: removed @var{file} was modified by second party
+@@ -15614,21 +15874,21 @@
+ access method you are using.
+
+ @table @code
+-@cindex :ext:, troubleshooting
++@cindex ext method, troubleshooting
+ @item :ext:
+ Try running the rsh program from the command line. For
+ example: "rsh servername cvs -v" should print @sc{cvs}
+ version information. If this doesn't work, you need to
+ fix it before you can worry about @sc{cvs} problems.
+
+-@cindex :server:, troubleshooting
++@cindex server method, troubleshooting
+ @item :server:
+ You don't need a command line rsh program to use this
+ access method, but if you have an rsh program around,
+ it may be useful as a debugging tool. Follow the
+ directions given for :ext:.
+
+-@cindex :pserver:, troubleshooting
++@cindex pserver method, troubleshooting
+ @item :pserver:
+ Errors along the lines of "connection refused" typically indicate
+ that inetd isn't even listening for connections on port 2401
+@@ -15806,6 +16066,16 @@
+ the file @file{doc/ChangeLog} in the @sc{cvs} source
+ distribution.
+
++The MirOS Project uses @sc{cvs} heavily in MirOS BSD and the
++MirPorts Framework and has enhanced it as well as packaged it
++as the "new" Debian CVS package. Responsible:
++
++@display
++Thorsten Glaser <@t{tg@@mirbsd.org}>
++@end display
++
++CVS Homepage: @url{http://www.nongnu.org/cvs/}
++
+ @c ---------------------------------------------------------------------
+ @node BUGS
+ @appendix Dealing with bugs in CVS or this manual
+@@ -15910,6 +16180,49 @@
+ comprehensive, detailed list of known bugs.
+
+ @c ---------------------------------------------------------------------
++@node CVS command list
++@appendix Alphabetical list of all CVS commands
++
++@xref{Cederqvist, the introduction into the manual, CVS manual Table of Contents}.
++
++@menu
++* add:: Add a new file/directory to the repository
++* admin:: Administration front-end for RCS
++* annotate:: Show last revision where each line was modified
++* checkout:: Checkout sources for editing
++* commit:: Check files into the repository
++* diff:: Show differences between revisions
++* edit:: Get ready to edit a watched file
++* editors:: See who is editing a watched file
++* export:: Export sources from CVS, similar to checkout
++* history:: Show repository access history
++* import:: Import sources into CVS, using vendor branches
++* init:: Create a CVS repository
++* kserver:: Act in Kerberos server mode
++* log:: Print out history information for files
++* login:: Prompt for password for authenticating server
++* logout:: Removes entry in .cvspass for remote repository
++* ls:: List files available from CVS
++* pserver:: Act in password server mode
++* rannotate:: Show last revision where each line of module was modified
++* rdiff:: Create 'patch' format diffs between revisions
++* release:: Indicate that a work subdirectory is no longer in use
++* remove:: Remove an entry from the repository
++* rlog:: Print out history information for a module
++* rls:: List files in a module
++* rtag:: Add a symbolic tag to a module
++* server:: Act in server mode
++* suck:: Download RCS ,v file raw
++* status:: Display status information on checked out files
++* tag:: Add a symbolic tag to checked out version of files
++* unedit:: Undo an edit command
++* update:: Bring work tree in sync with repository
++* version:: Show current CVS version(s)
++* watch:: Set watches
++* watchers:: See who is watching a file
++@end menu
++
++@c ---------------------------------------------------------------------
+ @node Index
+ @unnumbered Index
+ @cindex Index
+--- cvs-1.12.13+real.orig/doc/cvsclient.texi
++++ cvs-1.12.13+real/doc/cvsclient.texi
+@@ -1,6 +1,17 @@
+ \input texinfo @c -*- texinfo -*-
+
+ @setfilename cvsclient.info
++@tex
++ % set PA4 paper size (can print on both DIN ISO A4 and US Letter)
++ \globaldefs = 1%
++ \afourpaper%
++ \internalpagesizes{46\baselineskip}{160mm}%
++ {\voffset}{\hoffset}%
++ {\bindingoffset}{36pt}%
++ {28truecm}{21truecm}%
++ \globaldefs = 0%
++@end tex
++@comment $MirOS: src/gnu/usr.bin/cvs/doc/cvsclient.texi,v 1.8 2017/01/09 22:54:26 tg Exp $
+ @include version-client.texi
+
+ @dircategory Programming
+@@ -12,8 +23,9 @@
+ @top CVS Client/Server
+
+ This document describes the client/server protocol used by CVS. It does
+-not describe how to use or administer client/server CVS; see the regular
+-CVS manual for that. This is version @value{VERSION} of the protocol
++not describe how to use or administer client/server CVS; for that,
++@pxref{Top, the regular CVS manual,, cvs, the regular CVS manual}.
++This is version @value{VERSION} of the protocol
+ specification---@xref{Introduction}, for more on what this version number
+ means.
+
+@@ -53,7 +65,7 @@
+ user documentation, @file{cvs.texinfo}, for that information. The
+ protocol is non-proprietary (anyone who wants to is encouraged to
+ implement it) and an implementation, known as CVS, is available under
+-the GNU Public License. The CVS distribution, containing this
++the GNU General Public License. The CVS distribution, containing this
+ implementation, @file{cvs.texinfo}, and a copy (possibly more or less up
+ to date than what you are reading now) of this document,
+ @file{cvsclient.texi}, can be found at the usual GNU FTP sites, with a
+@@ -1227,6 +1239,13 @@
+ directory and @emph{not} a fully qualified @code{CVSROOT} variable.
+ The @code{Root} request need not have been previously sent.
+
++@item suck \n
++Response expected: yes.
++Actually do a @code{cvs suck} command.
++This uses a previous @code{Argument} request (only one, because the
++@code{cvs suck} CLI command takes only one).
++This is an extension specific to MirBSD, MirPorts and Debian.
++
+ @item update \n
+ Response expected: yes. Actually do a @code{cvs update} command. This
+ uses any previous @code{Argument}, @code{Directory}, @code{Entry},
+@@ -1268,7 +1287,7 @@
+ C: Directory .
+ C: 1dir
+ C: add
+-S: M Directory /u/cvsroot/1dir/nsdir added to the repository
++S: M Directory /u/cvsroot/1dir/nsdir put under version control
+ S: ok
+ @end example
+
+--- cvs-1.12.13+real.orig/doc/getdate.texi
++++ cvs-1.12.13+real/doc/getdate.texi
+@@ -1,14 +1,22 @@
+ @c GNU date syntax documentation
++@c $MirOS: src/gnu/usr.bin/cvs/doc/getdate.texi,v 1.8 2016/11/08 23:04:36 tg Exp $
+
+ @c Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+ @c 2003, 2004, 2005 Free Software Foundation, Inc.
+
+-@c Permission is granted to copy, distribute and/or modify this document
+-@c under the terms of the GNU Free Documentation License, Version 1.1 or
+-@c any later version published by the Free Software Foundation; with no
+-@c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+-@c Texts. A copy of the license is included in the ``GNU Free
+-@c Documentation License'' file as part of this distribution.
++@c Copyright (c) 2007, 2010 mirabilos <m@mirbsd.org>
++
++@comment This file is part of the CVS distribution.
++
++@comment CVS is free software; you can redistribute it and/or modify
++@comment it under the terms of the GNU General Public License as published by
++@comment the Free Software Foundation; either version 2, or (at your option)
++@comment any later version.
++
++@comment CVS is distributed in the hope that it will be useful,
++@comment but WITHOUT ANY WARRANTY; without even the implied warranty of
++@comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++@comment GNU General Public License for more details.
+
+ @node Date input formats
+ @chapter Date input formats
+@@ -55,8 +63,7 @@
+ * Day of week items:: Monday and others.
+ * Relative items in date strings:: next tuesday, 2 years ago.
+ * Pure numbers in date strings:: 19931219, 1440.
+-* Seconds since the Epoch:: @@1078100502.
+-* Specifying time zone rules:: TZ="America/New_York", TZ="UTC0".
++* Seconds since the Epoch:: @@1101064456
+ * Authors of get_date:: Bellovin, Eggert, Salz, Berets, et al.
+ @end menu
+
+@@ -113,8 +120,7 @@
+
+ @cindex language, in dates
+ @cindex time zone item
+-The output of the @command{date} command
+-is not always acceptable as a date string,
++The output of @command{date} is not always acceptable as a date string,
+ not only because of the language problem, but also because there is no
+ standard meaning for time zone items like @samp{IST}. When using
+ @command{date} to generate a date string intended to be parsed later,
+@@ -124,15 +130,21 @@
+
+ @example
+ $ LC_ALL=C TZ=UTC0 date
+-Mon Mar 1 00:21:42 UTC 2004
+-$ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ'
+-2004-03-01 00:21:42Z
++Fri Dec 15 19:48:05 UTC 2000
++$ TZ=UTC0 date +"%Y-%m-%d %H:%M:%SZ"
++2000-12-15 19:48:05Z
++$ date --iso-8601=seconds # a GNU extension
++2000-12-15T11:48:05-0800
++$ date --iso-8601=ns # a GNU extension
++2004-02-29T16:21:42,692722128-0800
+ $ date --iso-8601=ns | tr T ' ' # --iso-8601 is a GNU extension.
+ 2004-02-29 16:21:42,692722128-0800
+ $ date --rfc-2822 # a GNU extension
+-Sun, 29 Feb 2004 16:21:42 -0800
+-$ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension.
+-2004-02-29 16:21:42 -0800
++Fri, 15 Dec 2000 11:48:05 -0800
++$ date +"%Y-%m-%d %H:%M:%S %z" # %z is a GNU extension.
++2000-12-15 11:48:05 -0800
++$ date +'@@%s' # %s is a MirOS extension.
++@@1101064210
+ $ date +'@@%s.%N' # %s and %N are GNU extensions.
+ @@1078100502.692722128
+ @end example
+@@ -234,11 +246,10 @@
+ More generally, the time of day may be given as
+ @samp{@var{hour}:@var{minute}:@var{second}}, where @var{hour} is
+ a number between 0 and 23, @var{minute} is a number between 0 and
+-59, and @var{second} is a number between 0 and 59 possibly followed by
+-@samp{.} or @samp{,} and a fraction containing one or more digits.
+-Alternatively,
+-@samp{:@var{second}} can be omitted, in which case it is taken to
+-be zero.
++59, and @var{second} is a number between 0 and 59, with an optional
++fraction separated by @samp{.} or @samp{,} consisting of digits.
++Alternatively, @samp{:@var{second}} can be omitted, in which case
++it is taken to be zero.
+
+ @findex am @r{in date strings}
+ @findex pm @r{in date strings}
+@@ -299,8 +310,7 @@
+ described in the previous section.
+
+ If neither a time zone item nor a time zone correction is supplied,
+-time stamps are interpreted using the rules of the default time zone
+-(@pxref{Specifying time zone rules}).
++time stamps are interpreted using the rules of the default time zone.
+
+
+ @node Day of week items
+@@ -389,7 +399,7 @@
+ date strings like @samp{this thursday}.
+
+ When a relative item causes the resulting date to cross a boundary
+-where the clocks were adjusted, typically for daylight saving time,
++where the clocks were adjusted, typically for daylight-saving time,
+ the resulting date and time are adjusted accordingly.
+
+ The fuzz in units can cause problems with relative items. For
+@@ -401,7 +411,7 @@
+ @example
+ $ date -R
+ Thu, 31 Jul 2003 13:02:39 -0700
+-$ date --date='-1 month' +'Last month was %B?'
++$ date --date="-1 month" +'Last month was %B?'
+ Last month was July?
+ $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
+ Last month was June!
+@@ -440,86 +450,49 @@
+ @node Seconds since the Epoch
+ @section Seconds since the Epoch
+
+-If you precede a number with @samp{@@}, it represents an internal time
+-stamp as a count of seconds. The number can contain an internal
+-decimal point (either @samp{.} or @samp{,}); any excess precision not
+-supported by the internal representation is truncated toward minus
+-infinity. Such a number cannot be combined with any other date
+-item, as it specifies a complete time stamp.
++If you give a string consisting of @samp{@@} followed by a decimal
++number, it is parsed as an internal time stamp, @sc{utc} for
++@acronym{POSIX} compliant systems, @sc{tai} for systems which keep
++time correctly, and directly mapped to a kernel time. The implementation
++handles an optional fraction separated by @samp{.} or @samp{,} and
++truncates to a supported internal precision, rounding towards the
++negative infinity. Since the kernel time stamp represents complete
++date and time information, it cannot be combined with any other
++format given.
+
+ @cindex beginning of time, for @acronym{POSIX}
+ @cindex epoch, for @acronym{POSIX}
+-Internally, computer times are represented as a count of seconds since
+-an epoch---a well-defined point of time. On @acronym{GNU} and
+-@acronym{POSIX} systems, the epoch is 1970-01-01 00:00:00 @sc{utc}, so
+-@samp{@@0} represents this time, @samp{@@1} represents 1970-01-01
+-00:00:01 @sc{utc}, and so forth. @acronym{GNU} and most other
+-@acronym{POSIX}-compliant systems support such times as an extension
+-to @acronym{POSIX}, using negative counts, so that @samp{@@-1}
+-represents 1969-12-31 23:59:59 @sc{utc}.
+-
+-Traditional Unix systems count seconds with 32-bit two's-complement
+-integers and can represent times from 1901-12-13 20:45:52 through
+-2038-01-19 03:14:07 @sc{utc}. More modern systems use 64-bit counts
+-of seconds with nanosecond subcounts, and can represent all the times
+-in the known lifetime of the universe to a resolution of 1 nanosecond.
+-
+-On most systems, these counts ignore the presence of leap seconds.
+-For example, on most systems @samp{@@915148799} represents 1998-12-31
+-23:59:59 @sc{utc}, @samp{@@915148800} represents 1999-01-01 00:00:00
+-@sc{utc}, and there is no way to represent the intervening leap second
+-1998-12-31 23:59:60 @sc{utc}.
+-
+-@node Specifying time zone rules
+-@section Specifying time zone rules
+-
+-@vindex TZ
+-Normally, dates are interpreted using the rules of the current time
+-zone, which in turn are specified by the @env{TZ} environment
+-variable, or by a system default if @env{TZ} is not set. To specify a
+-different set of default time zone rules that apply just to one date,
+-start the date with a string of the form @samp{TZ="@var{rule}"}. The
+-two quote characters (@samp{"}) must be present in the date, and any
+-quotes or backslashes within @var{rule} must be escaped by a
+-backslash.
+-
+-For example, with the @acronym{GNU} @command{date} command you can
+-answer the question ``What time is it in New York when a Paris clock
+-shows 6:30am on October 31, 2004?'' by using a date beginning with
+-@samp{TZ="Europe/Paris"} as shown in the following shell transcript:
+-
+-@example
+-$ export TZ="America/New_York"
+-$ date --date='TZ="Europe/Paris" 2004-10-31 06:30'
+-Sun Oct 31 01:30:00 EDT 2004
+-@end example
++Although the date syntax here can represent any possible time since the
++year zero, computer integers often cannot represent such a wide range of
++time. On @acronym{POSIX} systems, the clock starts at 1970-01-01 00:00:00
++@sc{utc}: @acronym{POSIX} does not require support for times before the
++@acronym{POSIX} Epoch and times far in the future. @acronym{GNU} and
++traditional Unix systems have 32-bit signed @code{time_t} and can represent
++times from 1901-12-13 20:45:52 through 2038-01-19 03:14:07 @sc{utc}, such
++that @samp{@@0} represents the epoch, @samp{@@1} represents 1970-01-01
++00:00:01 @sc{utc}, and so forth, whereas @samp{@@-1}, not mandated by
++@acronym{POSIX}, represents 1969-12-31 23:59:59 @sc{utc}. Systems with
++64-bit signed @code{time_t} can represent all the times in the known
++lifetime of the universe. Modern @acronym{UNIX} systems also can give
++precise timecounters in the nanosecond or even attosecond range with
++a resolution often only a small multiply, like 10000, of the CPU
++frequency (on fast machines).
++
++@acronym{POSIX} conformant systems do not count leap seconds, and their
++kernel time is a seconds-since-epoch representation of @sc{utc} (which
++is a calendar time); the MirOS family of operating systems keeps time
++as seconds since the epoch, @sc{tai}, correctly counting leap seconds
++and providing conversion functions. Most MirBSD ports have already
++switched to a 64-bit signed @code{time_t}, some are using a
++@sc{djb}-compatible @code{tai_t} internally. The rest of this
++document has not been throughoutly checked for @sc{utc} vs @sc{tai}
++correctness. For @acronym{POSIX}ly broken systems, @samp{@@915148799}
++represents 1998-12-31 23:59:59 @sc{utc}, @samp{@@915148800} represents
++1999-01-01 00:00:00 @sc{utc}, and there is no way to represent the
++intervening leap second 1998-12-31 23:59:60 @sc{utc}. Also, calculation
++of time deltas is wrong, such as the age of the MirOS founder is already
++off by more than 10 seconds in 2000.
+
+-In this example, the @option{--date} operand begins with its own
+-@env{TZ} setting, so the rest of that operand is processed according
+-to @samp{Europe/Paris} rules, treating the string @samp{2004-10-31
+-06:30} as if it were in Paris. However, since the output of the
+-@command{date} command is processed according to the overall time zone
+-rules, it uses New York time. (Paris was normally six hours ahead of
+-New York in 2004, but this example refers to a brief Halloween period
+-when the gap was five hours.)
+-
+-A @env{TZ} value is a rule that typically names a location in the
+-@uref{http://www.twinsun.com/tz/tz-link.htm, @samp{tz} database}.
+-A recent catalog of location names appears in the
+-@uref{http://twiki.org/cgi-bin/xtra/tzdate, TWiki Date and Time
+-Gateway}. A few non-@acronym{GNU} hosts require a colon before a
+-location name in a @env{TZ} setting, e.g.,
+-@samp{TZ=":America/New_York"}.
+-
+-The @samp{tz} database includes a wide variety of locations ranging
+-from @samp{Arctic/Longyearbyen} to @samp{Antarctica/South_Pole}, but
+-if you are at sea and have your own private time zone, or if you are
+-using a non-@acronym{GNU} host that does not support the @samp{tz}
+-database, you may need to use a @acronym{POSIX} rule instead. Simple
+-@acronym{POSIX} rules like @samp{UTC0} specify a time zone without
+-daylight saving time; other rules can specify simple daylight saving
+-regimes. @xref{TZ Variable,, Specifying the Time Zone with @code{TZ},
+-libc, The GNU C Library}.
+
+ @node Authors of get_date
+ @section Authors of @code{get_date}
+@@ -545,3 +518,11 @@
+ This chapter was originally produced by Fran@,{c}ois Pinard
+ (@email{pinard@@iro.umontreal.ca}) from the @file{getdate.y} source code,
+ and then edited by K.@: Berry (@email{kb@@cs.umb.edu}).
++
++The version of this chapter you are reading comes with CVS 1.12 (also in
++Debian) and the MirOS family of operating systems; it is based upon an
++older version of the @acronym{GNU} coreutils manual which is not yet
++restricted by the licencing conditions of the GNU Free Documentation
++License, but more freely redistributable. Appropriate changes for
++the in-tree @code{get_date} version of CVS have been applied.
++The MirOS version is maintained by Thorsten Glaser @email{tg@@mirbsd.de}.
+--- cvs-1.12.13+real.orig/doc/mkman.pl
++++ cvs-1.12.13+real/doc/mkman.pl
+@@ -1,10 +1,12 @@
+ #! @PERL@
++# $MirOS: src/gnu/usr.bin/cvs/doc/mkman.pl,v 1.6 2016/11/08 21:12:06 tg Exp $
+ #
+ # Generate a man page from sections of a Texinfo manual.
+ #
+ # Copyright 2004 The Free Software Foundation,
+ # Derek R. Price,
+ # & Ximbiot <http://ximbiot.com>
++# Copyright (c) 2004, 2010 mirabilos <m@mirbsd.org>
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -62,7 +64,7 @@
+ if $keyword =~ /^(strong|sc|code|file|samp)$/;
+ return "\\fI"
+ if $keyword =~ /^(emph|var|dfn)$/;
+- die "no handler for keyword \`$keyword', found at line $. of file \`$file'\n";
++ die "no handler for keyword '$keyword', found at line $. of file '$file'\n";
+ }
+
+
+@@ -72,8 +74,12 @@
+ {
+ my ($file, $parent, $keyword, $content) = @_;
+
+- return "see node \`$content\\(aq in the CVS manual"
+- if $keyword =~ /^(p?x)?ref$/;
++ return "node \\(aq$content\\(aq in the CVS manual"
++ if $keyword =~ /^ref$/;
++ return "See node \\(aq$content\\(aq in the CVS manual"
++ if $keyword =~ /^xref$/;
++ return "see node \\(aq$content\\(aq in the CVS manual"
++ if $keyword =~ /^pxref$/;
+ return "\\fP\\fP$content"
+ if $keyword =~ /^splitrcskeyword$/;
+
+@@ -91,11 +97,11 @@
+ for my $file (@ARGV)
+ {
+ my $fh = new IO::File "< $file"
+- or die "Failed to open file \`$file': $!";
++ or die "Failed to open file '$file': $!";
+
+ if ($file !~ /\.(texinfo|texi|txi)$/)
+ {
+- print stderr "Passing \`$file' through unprocessed.\n";
++ print stderr "Passing '$file' through unprocessed.\n";
+ # Just cat any file that doesn't look like a Texinfo source.
+ while (my $line = $fh->getline)
+ {
+@@ -104,7 +110,7 @@
+ next;
+ }
+
+- print stderr "Processing \`$file'.\n";
++ print stderr "Processing '$file'.\n";
+ $texi_num++;
+ my $gotone = 0;
+ my $inblank = 0;
+@@ -143,6 +149,9 @@
+ s/\@bullet({}|\b)/\\(bu/g;
+ s/\@dots({}|\b)/\\&.../g;
+
++ # Hack for GNU groff with nroff -Tutf8
++ s/-/\\-/g;
++
+ # Examples should be indented and otherwise untouched
+ if (/^\@example$/)
+ {
+@@ -356,7 +365,7 @@
+ s/\@([{}])/$1/g;
+
+ # Verify we haven't left commands unprocessed.
+- die "Unprocessed command at line $. of file \`$file': "
++ die "Unprocessed command at line $. of file '$file': "
+ . ($1 ? "$1\n" : "<EOL>\n")
+ if /^(?>(?:[^\@]|\@\@)*)\@(\w+|.|$)/;
+
+--- cvs-1.12.13+real.orig/lib/Makefile.am
++++ cvs-1.12.13+real/lib/Makefile.am
+@@ -136,7 +136,7 @@
+ check_PROGRAMS += getdate
+ getdate_SOURCES = \
+ error.c \
+- getdate.y
++ getdate.c
+ ## This source file was added only for the getdate test program when compiled
+ ## with GNULIB's error.c.
+ getdate_SOURCES += \
+--- cvs-1.12.13+real.orig/lib/allocsa.h
++++ cvs-1.12.13+real/lib/allocsa.h
+@@ -19,7 +19,9 @@
+ #ifndef _ALLOCSA_H
+ #define _ALLOCSA_H
+
++#ifdef HAVE_ALLOCA_H
+ #include <alloca.h>
++#endif
+ #include <stddef.h>
+ #include <stdlib.h>
+
+--- cvs-1.12.13+real.orig/lib/chdir-long.c
++++ cvs-1.12.13+real/lib/chdir-long.c
+@@ -39,9 +39,7 @@
+ # define O_DIRECTORY 0
+ #endif
+
+-#ifndef PATH_MAX
+-# error "compile this file only if your system defines PATH_MAX"
+-#endif
++#ifdef PATH_MAX
+
+ struct cd_buf
+ {
+@@ -269,6 +267,8 @@
+ }
+ #endif
+
++#endif /* PATH_MAX */
++
+ /*
+ Local Variables:
+ compile-command: "gcc -DTEST_CHDIR=1 -DHAVE_CONFIG_H -I.. -g -O -W -Wall chdir-long.c libcoreutils.a"
+--- cvs-1.12.13+real.orig/lib/getcwd.c
++++ cvs-1.12.13+real/lib/getcwd.c
+@@ -151,7 +151,7 @@
+ size_t allocated = size;
+ size_t used;
+
+-#if HAVE_PARTLY_WORKING_GETCWD && !defined AT_FDCWD
++#if HAVE_PARTLY_WORKING_GETCWD
+ /* The system getcwd works, except it sometimes fails when it
+ shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT. If
+ AT_FDCWD is not defined, the algorithm below is O(N**2) and this
+@@ -204,6 +204,9 @@
+ ino_t dotino;
+ bool mount_point;
+ int parent_status;
++ size_t dirroom;
++ size_t namlen;
++ bool use_d_ino = true;
+
+ /* Look at the parent directory. */
+ #ifdef AT_FDCWD
+@@ -244,110 +247,131 @@
+ goto lose;
+ dotlist[dotlen++] = '/';
+ #endif
+- /* Clear errno to distinguish EOF from error if readdir returns
+- NULL. */
+- __set_errno (0);
+- while ((d = __readdir (dirstream)) != NULL)
++ for (;;)
+ {
++ /* Clear errno to distinguish EOF from error if readdir returns
++ NULL. */
++ __set_errno (0);
++ d = __readdir (dirstream);
++
++ /* When we've iterated through all directory entries without finding
++ one with a matching d_ino, rewind the stream and consider each
++ name again, but this time, using lstat. This is necessary in a
++ chroot on at least one system (glibc-2.3.6 + linux 2.6.12), where
++ .., ../.., ../../.., etc. all had the same device number, yet the
++ d_ino values for entries in / did not match those obtained
++ via lstat. */
++ if (d == NULL && errno == 0 && use_d_ino)
++ {
++ use_d_ino = false;
++ rewinddir (dirstream);
++ d = __readdir (dirstream);
++ }
++
++ if (d == NULL)
++ {
++ if (errno == 0)
++ /* EOF on dirstream, which can mean e.g., that the current
++ directory has been removed. */
++ __set_errno (ENOENT);
++ goto lose;
++ }
+ if (d->d_name[0] == '.' &&
+ (d->d_name[1] == '\0' ||
+ (d->d_name[1] == '.' && d->d_name[2] == '\0')))
+ continue;
+- if (MATCHING_INO (d, thisino) || mount_point)
++
++ if (use_d_ino)
+ {
+- int entry_status;
++ bool match = (MATCHING_INO (d, thisino) || mount_point);
++ if (! match)
++ continue;
++ }
++
++ {
++ int entry_status;
+ #ifdef AT_FDCWD
+- entry_status = fstatat (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW);
++ entry_status = fstatat (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW);
+ #else
+- /* Compute size needed for this file name, or for the file
+- name ".." in the same directory, whichever is larger.
+- Room for ".." might be needed the next time through
+- the outer loop. */
+- size_t name_alloc = _D_ALLOC_NAMLEN (d);
+- size_t filesize = dotlen + MAX (sizeof "..", name_alloc);
+-
+- if (filesize < dotlen)
+- goto memory_exhausted;
++ /* Compute size needed for this file name, or for the file
++ name ".." in the same directory, whichever is larger.
++ Room for ".." might be needed the next time through
++ the outer loop. */
++ size_t name_alloc = _D_ALLOC_NAMLEN (d);
++ size_t filesize = dotlen + MAX (sizeof "..", name_alloc);
++
++ if (filesize < dotlen)
++ goto memory_exhausted;
++
++ if (dotsize < filesize)
++ {
++ /* My, what a deep directory tree you have, Grandma. */
++ size_t newsize = MAX (filesize, dotsize * 2);
++ size_t i;
++ if (newsize < dotsize)
++ goto memory_exhausted;
++ if (dotlist != dots)
++ free (dotlist);
++ dotlist = malloc (newsize);
++ if (dotlist == NULL)
++ goto lose;
++ dotsize = newsize;
+
+- if (dotsize < filesize)
+- {
+- /* My, what a deep directory tree you have, Grandma. */
+- size_t newsize = MAX (filesize, dotsize * 2);
+- size_t i;
+- if (newsize < dotsize)
+- goto memory_exhausted;
+- if (dotlist != dots)
+- free (dotlist);
+- dotlist = malloc (newsize);
+- if (dotlist == NULL)
+- goto lose;
+- dotsize = newsize;
+-
+- i = 0;
+- do
+- {
+- dotlist[i++] = '.';
+- dotlist[i++] = '.';
+- dotlist[i++] = '/';
+- }
+- while (i < dotlen);
+- }
++ i = 0;
++ do
++ {
++ dotlist[i++] = '.';
++ dotlist[i++] = '.';
++ dotlist[i++] = '/';
++ }
++ while (i < dotlen);
++ }
+
+- strcpy (dotlist + dotlen, d->d_name);
+- entry_status = __lstat (dotlist, &st);
++ memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN (d));
++ entry_status = __lstat (dotlist, &st);
+ #endif
+- /* We don't fail here if we cannot stat() a directory entry.
+- This can happen when (network) file systems fail. If this
+- entry is in fact the one we are looking for we will find
+- out soon as we reach the end of the directory without
+- having found anything. */
+- if (entry_status == 0 && S_ISDIR (st.st_mode)
+- && st.st_dev == thisdev && st.st_ino == thisino)
+- break;
+- }
++ /* We don't fail here if we cannot stat() a directory entry.
++ This can happen when (network) file systems fail. If this
++ entry is in fact the one we are looking for we will find
++ out soon as we reach the end of the directory without
++ having found anything. */
++ if (entry_status == 0 && S_ISDIR (st.st_mode)
++ && st.st_dev == thisdev && st.st_ino == thisino)
++ break;
++ }
+ }
+- if (d == NULL)
+- {
+- if (errno == 0)
+- /* EOF on dirstream, which means that the current directory
+- has been removed. */
+- __set_errno (ENOENT);
+- goto lose;
+- }
+- else
+- {
+- size_t dirroom = dirp - dir;
+- size_t namlen = _D_EXACT_NAMLEN (d);
+
+- if (dirroom <= namlen)
++ dirroom = dirp - dir;
++ namlen = _D_EXACT_NAMLEN (d);
++
++ if (dirroom <= namlen)
++ {
++ if (size != 0)
+ {
+- if (size != 0)
+- {
+- __set_errno (ERANGE);
+- goto lose;
+- }
+- else
+- {
+- char *tmp;
+- size_t oldsize = allocated;
+-
+- allocated += MAX (allocated, namlen);
+- if (allocated < oldsize
+- || ! (tmp = realloc (dir, allocated)))
+- goto memory_exhausted;
+-
+- /* Move current contents up to the end of the buffer.
+- This is guaranteed to be non-overlapping. */
+- dirp = memcpy (tmp + allocated - (oldsize - dirroom),
+- tmp + dirroom,
+- oldsize - dirroom);
+- dir = tmp;
+- }
++ __set_errno (ERANGE);
++ goto lose;
++ }
++ else
++ {
++ char *tmp;
++ size_t oldsize = allocated;
++
++ allocated += MAX (allocated, namlen);
++ if (allocated < oldsize
++ || ! (tmp = realloc (dir, allocated)))
++ goto memory_exhausted;
++
++ /* Move current contents up to the end of the buffer.
++ This is guaranteed to be non-overlapping. */
++ dirp = memcpy (tmp + allocated - (oldsize - dirroom),
++ tmp + dirroom,
++ oldsize - dirroom);
++ dir = tmp;
+ }
+- dirp -= namlen;
+- memcpy (dirp, d->d_name, namlen);
+- *--dirp = '/';
+ }
++ dirp -= namlen;
++ memcpy (dirp, d->d_name, namlen);
++ *--dirp = '/';
+
+ thisdev = dotdev;
+ thisino = dotino;
+--- cvs-1.12.13+real.orig/lib/getdate.c
++++ cvs-1.12.13+real/lib/getdate.c
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c. */
++/* A Bison parser, made by GNU Bison 2.3. */
+
+-/* Skeleton parser for Yacc-like parsing with Bison,
+- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton implementation for Bison's Yacc-like parsers in C
++
++ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -15,16 +17,24 @@
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+- Foundation, Inc., 59 Temple Place - Suite 330,
+- Boston, MA 02111-1307, USA. */
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA. */
++
++/* As a special exception, you may create a larger work that contains
++ part or all of the Bison parser skeleton and distribute that work
++ under terms of your choice, so long as that work isn't itself a
++ parser generator using the skeleton or a modified version thereof
++ as a parser skeleton. Alternatively, if you modify or redistribute
++ the parser skeleton itself, you may (at your option) remove this
++ special exception, which will cause the skeleton and the resulting
++ Bison output files to be licensed under the GNU General Public
++ License without this special exception.
+
+-/* As a special exception, when this file is copied by Bison into a
+- Bison output file, you may use that output file without restriction.
+- This special exception was added by the Free Software Foundation
+- in version 1.24 of Bison. */
++ This special exception was added by the Free Software Foundation in
++ version 2.2 of Bison. */
+
+-/* Written by Richard Stallman by simplifying the original so called
+- ``semantic'' parser. */
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++ simplifying the original so-called "semantic" parser. */
+
+ /* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+@@ -36,6 +46,9 @@
+ /* Identify Bison output. */
+ #define YYBISON 1
+
++/* Bison version. */
++#define YYBISON_VERSION "2.3"
++
+ /* Skeleton name. */
+ #define YYSKELETON_NAME "yacc.c"
+
+@@ -74,6 +87,7 @@
+ tUDECIMAL_NUMBER = 276
+ };
+ #endif
++/* Tokens. */
+ #define tAGO 258
+ #define tDST 259
+ #define tDAY 260
+@@ -102,8 +116,11 @@
+
+ /* Parse a string into an internal time stamp.
+
+- Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 Free Software
+- Foundation, Inc.
++ Copyright (C) 1995, 1997, 1998, 2003, 2004, 2005
++ Free Software Foundation, Inc.
++
++ Copyright (c) 2005, 2006, 2007, 2010, 2016
++ mirabilos <m@mirbsd.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -139,6 +156,10 @@
+
+ #include "getdate.h"
+
++#ifdef USE_LIBBSD
++size_t strlcat(char *, const char *, size_t);
++#endif
++
+ /* There's no need to extend the stack, so there's no need to involve
+ alloca. */
+ #define YYSTACK_USE_ALLOCA 0
+@@ -166,10 +187,44 @@
+ #include <stdlib.h>
+ #include <string.h>
+
++#ifndef _STDLIB_H
++#define _STDLIB_H 1 /* GNU bison needs this */
++#endif
++
++#ifndef IN_RCS
+ #include "setenv.h"
+ #include "xalloc.h"
++#else /* IN_RCS */
++#include <unistd.h>
++
++#define HAVE_STRUCT_TM_TM_ZONE 1
++#define HAVE_TM_GMTOFF 1
++
++#define gettime(ts) clock_gettime(CLOCK_REALTIME,(ts))
+
+-#if STDC_HEADERS || (! defined isascii && ! HAVE_ISASCII)
++static void *
++xmalloc(size_t s)
++{
++ static const char xmalloc_enomem[] = "memory exhausted\n";
++ void *x;
++
++ if ((x = malloc(s)) == NULL) {
++ write(2, xmalloc_enomem, sizeof(xmalloc_enomem) - 1);
++ exit(1);
++ }
++
++ return (x);
++}
++
++static void *
++xmemdup(void const *p, size_t s)
++{
++ return (memcpy(xmalloc(s), p, s));
++}
++#endif /* IN_RCS */
++
++#if (defined(STDC_HEADERS) && STDC_HEADERS) || \
++ (!defined(isascii) && !HAVE_ISASCII)
+ # define IN_CTYPE_DOMAIN(c) 1
+ #else
+ # define IN_CTYPE_DOMAIN(c) isascii (c)
+@@ -188,7 +243,8 @@
+ of `digit' even when the host does not conform to POSIX. */
+ #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
+
+-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
++#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || \
++ (defined(__STRICT_ANSI__) && __STRICT_ANSI__)
+ # define __attribute__(x)
+ #endif
+
+@@ -196,6 +252,15 @@
+ # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+ #endif
+
++#ifndef __IDSTRING
++#define __IDSTRING(varname, string) \
++ static const char varname[] __attribute__((__used__)) = \
++ "@(""#)" #varname ": " string
++#endif
++
++__IDSTRING(rcsid_code, "$MirOS: src/gnu/usr.bin/cvs/lib/getdate.c,v 1.17 2016/10/22 22:46:51 tg Exp $");
++__IDSTRING(rcsid_bron, "$miros: src/gnu/usr.bin/cvs/lib/getdate.y,v 1.11 2016/10/22 22:45:50 tg Exp $");
++
+ /* Shift A right by B bits portably, by dividing A by 2**B and
+ truncating towards minus infinity. A and B should be free of side
+ effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
+@@ -292,7 +357,7 @@
+
+ union YYSTYPE;
+ static int yylex (union YYSTYPE *, parser_control *);
+-static int yyerror (parser_control *, char *);
++static int yyerror (parser_control *, const char *);
+ static long int time_zone_hhmm (textint, long int);
+
+
+@@ -310,15 +375,22 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+-#line 209 "getdate.y"
+-typedef union YYSTYPE {
++/* Enabling the token table. */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
++#line 260 "getdate.y"
++{
+ long int intval;
+ textint textintval;
+ struct timespec timespec;
+-} YYSTYPE;
+-/* Line 191 of yacc.c. */
+-#line 322 "getdate.c"
++}
++/* Line 193 of yacc.c. */
++#line 393 "getdate.c"
++ YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -329,56 +401,171 @@
+ /* Copy the second part of user declarations. */
+
+
+-/* Line 214 of yacc.c. */
+-#line 334 "getdate.c"
++/* Line 216 of yacc.c. */
++#line 406 "getdate.c"
++
++#ifdef short
++# undef short
++#endif
++
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
++
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
++
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
++
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++# define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++# define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++# define YYSIZE_T size_t
++# else
++# define YYSIZE_T unsigned int
++# endif
++#endif
+
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+-# ifndef YYFREE
+-# define YYFREE free
++#ifndef YY_
++# if defined(YYENABLE_NLS) && YYENABLE_NLS
++# if ENABLE_NLS
++# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++# define YY_(msgid) dgettext ("bison-runtime", msgid)
++# endif
+ # endif
+-# ifndef YYMALLOC
+-# define YYMALLOC malloc
++# ifndef YY_
++# define YY_(msgid) msgid
+ # endif
++#endif
++
++/* Suppress unused-variable warnings by "using" E. */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
++
++/* Identity function, used to suppress warnings about constant conditions. */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++ int i;
++#endif
++{
++ return i;
++}
++#endif
++
++#if ! defined yyoverflow || YYERROR_VERBOSE
+
+ /* The parser invokes alloca or malloc; define the necessary symbols. */
+
+ # ifdef YYSTACK_USE_ALLOCA
+ # if YYSTACK_USE_ALLOCA
+-# define YYSTACK_ALLOC alloca
+-# endif
+-# else
+-# if defined (alloca) || defined (_ALLOCA_H)
+-# define YYSTACK_ALLOC alloca
+-# else
+ # ifdef __GNUC__
+ # define YYSTACK_ALLOC __builtin_alloca
++# elif defined __BUILTIN_VA_ARG_INCR
++# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++# elif defined _AIX
++# define YYSTACK_ALLOC __alloca
++# elif defined _MSC_VER
++# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++# define alloca _alloca
++# else
++# define YYSTACK_ALLOC alloca
++# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++# ifndef _STDLIB_H
++# define _STDLIB_H 1
++# endif
++# endif
+ # endif
+ # endif
+ # endif
+
+ # ifdef YYSTACK_ALLOC
+- /* Pacify GCC's `empty if-body' warning. */
+-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-# if defined (__STDC__) || defined (__cplusplus)
+-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-# define YYSIZE_T size_t
++ /* Pacify GCC's `empty if-body' warning. */
++# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++# ifndef YYSTACK_ALLOC_MAXIMUM
++ /* The OS might guarantee only one guard page at the bottom of the stack,
++ and a page size can be as small as 4096 bytes. So we cannot safely
++ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
++ to allow for a few compiler-allocated temporary stack slots. */
++# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ # endif
++# else
+ # define YYSTACK_ALLOC YYMALLOC
+ # define YYSTACK_FREE YYFREE
++# ifndef YYSTACK_ALLOC_MAXIMUM
++# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++# endif
++# if (defined __cplusplus && ! defined _STDLIB_H \
++ && ! ((defined YYMALLOC || defined malloc) \
++ && (defined YYFREE || defined free)))
++# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++# ifndef _STDLIB_H
++# define _STDLIB_H 1
++# endif
++# endif
++# ifndef YYMALLOC
++# define YYMALLOC malloc
++# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++# endif
++# endif
++# ifndef YYFREE
++# define YYFREE free
++# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++# endif
++# endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+-#if (! defined (yyoverflow) \
+- && (! defined (__cplusplus) \
+- || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++ && (! defined __cplusplus \
++ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+ /* A type that is properly aligned for any stack member. */
+ union yyalloc
+ {
+- short yyss;
++ yytype_int16 yyss;
+ YYSTYPE yyvs;
+ };
+
+@@ -388,24 +575,24 @@
+ /* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+ # define YYSTACK_BYTES(N) \
+- ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
++ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+ /* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+ # ifndef YYCOPY
+-# if defined (__GNUC__) && 1 < __GNUC__
++# if defined __GNUC__ && 1 < __GNUC__
+ # define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ # else
+ # define YYCOPY(To, From, Count) \
+ do \
+ { \
+- register YYSIZE_T yyi; \
++ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+- while (0)
++ while (YYID (0))
+ # endif
+ # endif
+
+@@ -423,39 +610,33 @@
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+- while (0)
++ while (YYID (0))
+
+ #endif
+
+-#if defined (__STDC__) || defined (__cplusplus)
+- typedef signed char yysigned_char;
+-#else
+- typedef short yysigned_char;
+-#endif
+-
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state. */
+ #define YYFINAL 12
+ /* YYLAST -- Last index in YYTABLE. */
+ #define YYLAST 88
+
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals. */
+ #define YYNTOKENS 26
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals. */
+ #define YYNNTS 19
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules. */
+ #define YYNRULES 78
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states. */
+ #define YYNSTATES 96
+
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+ #define YYUNDEFTOK 2
+ #define YYMAXUTOK 276
+
+-#define YYTRANSLATE(YYX) \
++#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+-static const unsigned char yytranslate[] =
++static const yytype_uint8 yytranslate[] =
+ {
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+@@ -490,7 +671,7 @@
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+-static const unsigned char yyprhs[] =
++static const yytype_uint8 yyprhs[] =
+ {
+ 0, 0, 3, 5, 7, 10, 11, 14, 16, 18,
+ 20, 22, 24, 26, 28, 31, 36, 42, 49, 57,
+@@ -502,8 +683,8 @@
+ 207, 209, 211, 213, 215, 217, 218, 221, 222
+ };
+
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const yysigned_char yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS. */
++static const yytype_int8 yyrhs[] =
+ {
+ 27, 0, -1, 28, -1, 29, -1, 22, 39, -1,
+ -1, 29, 30, -1, 31, -1, 32, -1, 33, -1,
+@@ -531,22 +712,22 @@
+ };
+
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+-static const unsigned short yyrline[] =
++static const yytype_uint16 yyrline[] =
+ {
+- 0, 230, 230, 231, 235, 242, 244, 248, 250, 252,
+- 254, 256, 258, 260, 264, 272, 280, 290, 297, 309,
+- 314, 322, 324, 326, 328, 330, 335, 340, 345, 350,
+- 358, 363, 383, 390, 398, 406, 411, 417, 422, 431,
+- 441, 445, 447, 449, 451, 453, 455, 457, 459, 461,
+- 463, 465, 467, 469, 471, 473, 475, 477, 479, 481,
+- 483, 485, 489, 491, 493, 495, 497, 499, 503, 503,
+- 506, 507, 512, 513, 518, 556, 557, 563, 564
++ 0, 281, 281, 282, 286, 293, 295, 299, 301, 303,
++ 305, 307, 309, 311, 315, 323, 331, 341, 348, 360,
++ 365, 373, 375, 377, 379, 381, 386, 391, 396, 401,
++ 409, 414, 434, 441, 449, 457, 462, 468, 473, 482,
++ 492, 496, 498, 500, 502, 504, 506, 508, 510, 512,
++ 514, 516, 518, 520, 522, 524, 526, 528, 530, 532,
++ 534, 536, 540, 542, 544, 546, 548, 550, 554, 554,
++ 557, 558, 563, 564, 569, 607, 608, 614, 615
+ };
+ #endif
+
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+- First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+ static const char *const yytname[] =
+ {
+ "$end", "error", "$undefined", "tAGO", "tDST", "tDAY", "tDAY_UNIT",
+@@ -563,7 +744,7 @@
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+-static const unsigned short yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+@@ -572,7 +753,7 @@
+ # endif
+
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+-static const unsigned char yyr1[] =
++static const yytype_uint8 yyr1[] =
+ {
+ 0, 26, 27, 27, 28, 29, 29, 30, 30, 30,
+ 30, 30, 30, 30, 31, 31, 31, 31, 31, 32,
+@@ -585,7 +766,7 @@
+ };
+
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+ 0, 2, 1, 1, 2, 0, 2, 1, 1, 1,
+ 1, 1, 1, 1, 2, 4, 5, 6, 7, 1,
+@@ -600,7 +781,7 @@
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+-static const unsigned char yydefact[] =
++static const yytype_uint8 yydefact[] =
+ {
+ 5, 0, 0, 2, 3, 71, 73, 70, 72, 4,
+ 68, 69, 1, 26, 49, 24, 52, 19, 55, 0,
+@@ -614,8 +795,8 @@
+ 16, 77, 31, 75, 17, 18
+ };
+
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const yysigned_char yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM]. */
++static const yytype_int8 yydefgoto[] =
+ {
+ -1, 2, 3, 4, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 9, 10, 11, 38, 77, 88
+@@ -624,7 +805,7 @@
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+ #define YYPACT_NINF -43
+-static const yysigned_char yypact[] =
++static const yytype_int8 yypact[] =
+ {
+ -18, 48, 9, -43, 19, -43, -43, -43, -43, -43,
+ -43, -43, -43, 32, -43, -43, -43, 54, -43, 28,
+@@ -639,7 +820,7 @@
+ };
+
+ /* YYPGOTO[NTERM-NUM]. */
+-static const yysigned_char yypgoto[] =
++static const yytype_int8 yypgoto[] =
+ {
+ -43, -43, -43, -43, -43, -43, -43, -43, -43, -43,
+ -43, -43, 55, -43, -43, -11, -43, -42, -7
+@@ -650,7 +831,7 @@
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+ #define YYTABLE_NINF -1
+-static const unsigned char yytable[] =
++static const yytype_uint8 yytable[] =
+ {
+ 59, 60, 50, 61, 1, 62, 63, 64, 65, 12,
+ 66, 67, 53, 68, 54, 85, 51, 55, 69, 56,
+@@ -663,7 +844,7 @@
+ 81, 82, 83, 84, 94, 92, 0, 0, 76
+ };
+
+-static const yysigned_char yycheck[] =
++static const yytype_int8 yycheck[] =
+ {
+ 5, 6, 4, 8, 22, 10, 11, 12, 13, 0,
+ 15, 16, 6, 18, 8, 10, 18, 11, 23, 13,
+@@ -678,7 +859,7 @@
+
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+-static const unsigned char yystos[] =
++static const yytype_uint8 yystos[] =
+ {
+ 0, 22, 27, 28, 29, 18, 19, 20, 21, 39,
+ 40, 41, 0, 5, 6, 7, 8, 9, 11, 12,
+@@ -692,22 +873,6 @@
+ 43, 41, 19, 18, 44, 43
+ };
+
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-# define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok (yyerrstatus = 0)
+ #define yyclearin (yychar = YYEMPTY)
+ #define YYEMPTY (-2)
+@@ -733,30 +898,63 @@
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+- YYPOPSTACK; \
++ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+- { \
+- yyerror (pc, "syntax error: cannot back up");\
++ { \
++ yyerror (pc, YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+-while (0)
++while (YYID (0))
++
+
+ #define YYTERROR 1
+ #define YYERRCODE 256
+
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+- are run). */
+
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++ If N is 0, then set CURRENT to the empty location which ends
++ the previous symbol: RHS[0] (always defined). */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N) \
+- ((Current).first_line = (Rhs)[1].first_line, \
+- (Current).first_column = (Rhs)[1].first_column, \
+- (Current).last_line = (Rhs)[N].last_line, \
+- (Current).last_column = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N) \
++ do \
++ if (YYID (N)) \
++ { \
++ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
++ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
++ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
++ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
++ } \
++ else \
++ { \
++ (Current).first_line = (Current).last_line = \
++ YYRHSLOC (Rhs, 0).last_line; \
++ (Current).first_column = (Current).last_column = \
++ YYRHSLOC (Rhs, 0).last_column; \
++ } \
++ while (YYID (0))
++#endif
++
++
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++ This macro was not mandated originally: define only if we know
++ we won't break user code: when these are the locations we know. */
++
++#ifndef YY_LOCATION_PRINT
++# if defined(YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL
++# define YY_LOCATION_PRINT(File, Loc) \
++ fprintf (File, "%d.%d-%d.%d", \
++ (Loc).first_line, (Loc).first_column, \
++ (Loc).last_line, (Loc).last_column)
++# else
++# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+
++
+ /* YYLEX -- calling `yylex' with the right arguments. */
+
+ #ifdef YYLEX_PARAM
+@@ -777,42 +975,99 @@
+ do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+-} while (0)
++} while (YYID (0))
+
+-# define YYDSYMPRINT(Args) \
+-do { \
+- if (yydebug) \
+- yysymprint Args; \
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
++do { \
++ if (yydebug) \
++ { \
++ YYFPRINTF (stderr, "%s ", Title); \
++ yy_symbol_print (stderr, \
++ Type, Value, pc); \
++ YYFPRINTF (stderr, "\n"); \
++ } \
++} while (YYID (0))
+
+-# define YYDSYMPRINTF(Title, Token, Value, Location) \
+-do { \
+- if (yydebug) \
+- { \
+- YYFPRINTF (stderr, "%s ", Title); \
+- yysymprint (stderr, \
+- Token, Value); \
+- YYFPRINTF (stderr, "\n"); \
+- } \
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT. |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_control *pc)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep, pc)
++ FILE *yyoutput;
++ int yytype;
++ YYSTYPE const * const yyvaluep;
++ parser_control *pc;
++#endif
++{
++ if (!yyvaluep)
++ return;
++ YYUSE (pc);
++# ifdef YYPRINT
++ if (yytype < YYNTOKENS)
++ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++ YYUSE (yyoutput);
++# endif
++ switch (yytype)
++ {
++ default:
++ break;
++ }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT. |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_control *pc)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep, pc)
++ FILE *yyoutput;
++ int yytype;
++ YYSTYPE const * const yyvaluep;
++ parser_control *pc;
++#endif
++{
++ if (yytype < YYNTOKENS)
++ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++ else
++ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++ yy_symbol_value_print (yyoutput, yytype, yyvaluep, pc);
++ YYFPRINTF (yyoutput, ")");
++}
+
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included). |
+ `------------------------------------------------------------------*/
+
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short *bottom, short *top)
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+- short *bottom;
+- short *top;
++ yytype_int16 *bottom;
++ yytype_int16 *top;
+ #endif
+ {
+ YYFPRINTF (stderr, "Stack now");
+- for (/* Nothing. */; bottom <= top; ++bottom)
++ for (; bottom <= top; ++bottom)
+ YYFPRINTF (stderr, " %d", *bottom);
+ YYFPRINTF (stderr, "\n");
+ }
+@@ -821,45 +1076,53 @@
+ do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+-} while (0)
++} while (YYID (0))
+
+
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced. |
+ `------------------------------------------------*/
+
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule, parser_control *pc)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule, pc)
++ YYSTYPE *yyvsp;
+ int yyrule;
++ parser_control *pc;
+ #endif
+ {
++ int yynrhs = yyr2[yyrule];
+ int yyi;
+- unsigned int yylno = yyrline[yyrule];
+- YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+- yyrule - 1, yylno);
+- /* Print the symbols being reduced, and their result. */
+- for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+- YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+- YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++ unsigned long int yylno = yyrline[yyrule];
++ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++ yyrule - 1, yylno);
++ /* The symbols being reduced. */
++ for (yyi = 0; yyi < yynrhs; yyi++)
++ {
++ fprintf (stderr, " $%d = ", yyi + 1);
++ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++ &(yyvsp[(yyi + 1) - (yynrhs)])
++ , pc);
++ fprintf (stderr, "\n");
++ }
+ }
+
+ # define YY_REDUCE_PRINT(Rule) \
+ do { \
+ if (yydebug) \
+- yy_reduce_print (Rule); \
+-} while (0)
++ yy_reduce_print (yyvsp, Rule, pc); \
++} while (YYID (0))
+
+ /* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -874,13 +1137,9 @@
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+- SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+@@ -890,45 +1149,47 @@
+ #if YYERROR_VERBOSE
+
+ # ifndef yystrlen
+-# if defined (__GLIBC__) && defined (_STRING_H)
++# if defined __GLIBC__ && defined _STRING_H
+ # define yystrlen strlen
+ # else
+ /* Return the length of YYSTR. */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-# if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-# else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+- const char *yystr;
+-# endif
++ const char *yystr;
++#endif
+ {
+- register const char *yys = yystr;
+-
+- while (*yys++ != '\0')
++ YYSIZE_T yylen;
++ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+-
+- return yys - yystr - 1;
++ return yylen;
+ }
+ # endif
+ # endif
+
+ # ifndef yystpcpy
+-# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ # define yystpcpy stpcpy
+ # else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ static char *
+-# if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-# else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+- char *yydest;
+- const char *yysrc;
+-# endif
++ char *yydest;
++ const char *yysrc;
++#endif
+ {
+- register char *yyd = yydest;
+- register const char *yys = yysrc;
++ char *yyd = yydest;
++ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+@@ -938,70 +1199,194 @@
+ # endif
+ # endif
+
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++ quotes and backslashes, so that it's suitable for yyerror. The
++ heuristic is that double-quoting is unnecessary unless the string
++ contains an apostrophe, a comma, or backslash (other than
++ backslash-backslash). YYSTR is taken from yytname. If YYRES is
++ null, do not copy; instead, return the length of what the result
++ would have been. */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++ if (*yystr == '"')
++ {
++ YYSIZE_T yyn = 0;
++ char const *yyp = yystr;
++
++ for (;;)
++ switch (*++yyp)
++ {
++ case '\'':
++ case ',':
++ goto do_not_strip_quotes;
++
++ case '\\':
++ if (*++yyp != '\\')
++ goto do_not_strip_quotes;
++ /* Fall through. */
++ default:
++ if (yyres)
++ yyres[yyn] = *yyp;
++ yyn++;
++ break;
+
+-
++ case '"':
++ if (yyres)
++ yyres[yyn] = '\0';
++ return yyn;
++ }
++ do_not_strip_quotes: ;
++ }
+
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT. |
+-`--------------------------------*/
++ if (! yyres)
++ return yystrlen (yystr);
+
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+- FILE *yyoutput;
+- int yytype;
+- YYSTYPE *yyvaluep;
+-#endif
++ return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
++
++/* Copy into YYRESULT an error message about the unexpected token
++ YYCHAR while in state YYSTATE. Return the number of bytes copied,
++ including the terminating null byte. If YYRESULT is null, do not
++ copy anything; just return the number of bytes that would be
++ copied. As a special case, return 0 if an ordinary "syntax error"
++ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
++ size calculation. */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+- /* Pacify ``unused variable'' warnings. */
+- (void) yyvaluep;
++ int yyn = yypact[yystate];
+
+- if (yytype < YYNTOKENS)
++ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++ return 0;
++ else
+ {
+- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++ int yytype = YYTRANSLATE (yychar);
++ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++ YYSIZE_T yysize = yysize0;
++ YYSIZE_T yysize1;
++ int yysize_overflow = 0;
++ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++ int yyx;
++
++# if 0
++ /* This is so xgettext sees the translatable formats that are
++ constructed on the fly. */
++ YY_("syntax error, unexpected %s");
++ YY_("syntax error, unexpected %s, expecting %s");
++ YY_("syntax error, unexpected %s, expecting %s or %s");
++ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
+- }
+- else
+- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++ char *yyfmt;
++ char const *yyf;
++ static char const yyunexpected[] = "syntax error, unexpected %s";
++ static char const yyexpecting[] = ", expecting %s";
++ static char const yyor[] = " or %s";
++ char yyformat[sizeof yyunexpected
++ + sizeof yyexpecting - 1
++ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++ * (sizeof yyor - 1))];
++ char const *yyprefix = yyexpecting;
++
++ /* Start YYX at -YYN if negative to avoid negative indexes in
++ YYCHECK. */
++ int yyxbegin = yyn < 0 ? -yyn : 0;
++
++ /* Stay within bounds of both yycheck and yytname. */
++ int yychecklim = YYLAST - yyn + 1;
++ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++ int yycount = 1;
+
+- switch (yytype)
+- {
+- default:
+- break;
++ yyarg[0] = yytname[yytype];
++ yyfmt = yystpcpy (yyformat, yyunexpected);
++
++ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++ {
++ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++ {
++ yycount = 1;
++ yysize = yysize0;
++ yyformat[sizeof yyunexpected - 1] = '\0';
++ break;
++ }
++ yyarg[yycount++] = yytname[yyx];
++ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++ yysize_overflow |= (yysize1 < yysize);
++ yysize = yysize1;
++ yyfmt = yystpcpy (yyfmt, yyprefix);
++ yyprefix = yyor;
++ }
++
++ yyf = YY_(yyformat);
++ yysize1 = yysize + yystrlen (yyf);
++ yysize_overflow |= (yysize1 < yysize);
++ yysize = yysize1;
++
++ if (yysize_overflow)
++ return YYSIZE_MAXIMUM;
++
++ if (yyresult)
++ {
++ /* Avoid sprintf, as that infringes on the user's name space.
++ Don't have undefined behavior even if the translation
++ produced a string with the wrong number of "%s"s. */
++ char *yyp = yyresult;
++ int yyi = 0;
++ while ((*yyp = *yyf) != '\0')
++ {
++ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++ {
++ yyp += yytnamerr (yyp, yyarg[yyi++]);
++ yyf += 2;
++ }
++ else
++ {
++ yyp++;
++ yyf++;
++ }
++ }
++ }
++ return yysize;
+ }
+- YYFPRINTF (yyoutput, ")");
+ }
++#endif /* YYERROR_VERBOSE */
++
+
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol. |
+ `-----------------------------------------------*/
+
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, parser_control *pc)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep, pc)
++ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
++ parser_control *pc;
+ #endif
+ {
+- /* Pacify ``unused variable'' warnings. */
+- (void) yyvaluep;
++ YYUSE (yyvaluep);
++ YYUSE (pc);
++
++ if (!yymsg)
++ yymsg = "Deleting";
++ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+- break;
++ break;
+ }
+ }
+
+@@ -1009,14 +1394,14 @@
+ /* Prevent warnings from -Wmissing-prototypes. */
+
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
+-int yyparse ( parser_control *pc );
++#if defined __STDC__ || defined __cplusplus
++int yyparse (parser_control *pc);
+ #else
+ int yyparse ();
+ #endif
+@@ -1032,39 +1417,49 @@
+ `----------*/
+
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+- void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++ void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ int
+-yyparse ( parser_control *pc )
++yyparse (parser_control *pc)
+ #else
+ int
+ yyparse (pc)
+- parser_control *pc ;
++ parser_control *pc;
+ #endif
+ #endif
+ {
+- /* The lookahead symbol. */
++ /* The look-ahead symbol. */
+ int yychar;
+
+-/* The semantic value of the lookahead symbol. */
++/* The semantic value of the look-ahead symbol. */
+ YYSTYPE yylval;
+
+ /* Number of syntax errors so far. */
+ int yynerrs;
+
+- register int yystate;
+- register int yyn;
++ int yystate;
++ int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+- /* Lookahead token as an internal (translated) token number. */
++ /* Look-ahead token as an internal (translated) token number. */
+ int yytoken = 0;
++#if YYERROR_VERBOSE
++ /* Buffer for error messages, and its allocated size. */
++ char yymsgbuf[128];
++ char *yymsg = yymsgbuf;
++ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+@@ -1075,18 +1470,18 @@
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+- short yyssa[YYINITDEPTH];
+- short *yyss = yyssa;
+- register short *yyssp;
++ yytype_int16 yyssa[YYINITDEPTH];
++ yytype_int16 *yyss = yyssa;
++ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+- register YYSTYPE *yyvsp;
++ YYSTYPE *yyvsp;
+
+
+
+-#define YYPOPSTACK (yyvsp--, yyssp--)
++#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+@@ -1095,9 +1490,9 @@
+ YYSTYPE yyval;
+
+
+- /* When reducing, the number of symbols on the RHS of the reduced
+- rule. */
+- int yylen;
++ /* The number of symbols on the RHS of the reduced rule.
++ Keep to zero when no symbol should be popped. */
++ int yylen = 0;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+@@ -1121,8 +1516,7 @@
+ `------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+- have just been pushed. so pushing a state here evens the stacks.
+- */
++ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+@@ -1135,18 +1529,18 @@
+
+ #ifdef yyoverflow
+ {
+- /* Give user a chance to reallocate the stack. Use copies of
++ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+- short *yyss1 = yyss;
++ yytype_int16 *yyss1 = yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+- yyoverflow ("parser stack overflow",
++ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+
+@@ -1157,21 +1551,21 @@
+ }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+- goto yyoverflowlab;
++ goto yyexhaustedlab;
+ # else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+- goto yyoverflowlab;
++ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+- short *yyss1 = yyss;
++ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+- goto yyoverflowlab;
++ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
+@@ -1202,19 +1596,17 @@
+ `-----------*/
+ yybackup:
+
+-/* Do appropriate processing given the current state. */
+-/* Read a lookahead token if we need one and don't already have one. */
+-/* yyresume: */
+-
+- /* First try to decide what to do without reference to lookahead token. */
++ /* Do appropriate processing given the current state. Read a
++ look-ahead token if we need one and don't already have one. */
+
++ /* First try to decide what to do without reference to look-ahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+- /* Not known => get a lookahead token if don't already have one. */
++ /* Not known => get a look-ahead token if don't already have one. */
+
+- /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
++ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+@@ -1229,7 +1621,7 @@
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+- YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -1249,22 +1641,21 @@
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+- /* Shift the lookahead token. */
+- YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+- /* Discard the token being shifted unless it is eof. */
+- if (yychar != YYEOF)
+- yychar = YYEMPTY;
+-
+- *++yyvsp = yylval;
+-
+-
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
++ /* Shift the look-ahead token. */
++ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++ /* Discard the shifted token unless it is eof. */
++ if (yychar != YYEOF)
++ yychar = YYEMPTY;
++
+ yystate = yyn;
++ *++yyvsp = yylval;
++
+ goto yynewstate;
+
+
+@@ -1300,272 +1691,272 @@
+ switch (yyn)
+ {
+ case 4:
+-#line 236 "getdate.y"
++#line 287 "getdate.y"
+ {
+- pc->seconds = yyvsp[0].timespec;
++ pc->seconds = (yyvsp[(2) - (2)].timespec);
+ pc->timespec_seen = true;
+- }
++ ;}
+ break;
+
+ case 7:
+-#line 249 "getdate.y"
+- { pc->times_seen++; }
++#line 300 "getdate.y"
++ { pc->times_seen++; ;}
+ break;
+
+ case 8:
+-#line 251 "getdate.y"
+- { pc->local_zones_seen++; }
++#line 302 "getdate.y"
++ { pc->local_zones_seen++; ;}
+ break;
+
+ case 9:
+-#line 253 "getdate.y"
+- { pc->zones_seen++; }
++#line 304 "getdate.y"
++ { pc->zones_seen++; ;}
+ break;
+
+ case 10:
+-#line 255 "getdate.y"
+- { pc->dates_seen++; }
++#line 306 "getdate.y"
++ { pc->dates_seen++; ;}
+ break;
+
+ case 11:
+-#line 257 "getdate.y"
+- { pc->days_seen++; }
++#line 308 "getdate.y"
++ { pc->days_seen++; ;}
+ break;
+
+ case 12:
+-#line 259 "getdate.y"
+- { pc->rels_seen = true; }
++#line 310 "getdate.y"
++ { pc->rels_seen = true; ;}
+ break;
+
+ case 14:
+-#line 265 "getdate.y"
++#line 316 "getdate.y"
+ {
+- pc->hour = yyvsp[-1].textintval.value;
++ pc->hour = (yyvsp[(1) - (2)].textintval).value;
+ pc->minutes = 0;
+ pc->seconds.tv_sec = 0;
+ pc->seconds.tv_nsec = 0;
+- pc->meridian = yyvsp[0].intval;
+- }
++ pc->meridian = (yyvsp[(2) - (2)].intval);
++ ;}
+ break;
+
+ case 15:
+-#line 273 "getdate.y"
++#line 324 "getdate.y"
+ {
+- pc->hour = yyvsp[-3].textintval.value;
+- pc->minutes = yyvsp[-1].textintval.value;
++ pc->hour = (yyvsp[(1) - (4)].textintval).value;
++ pc->minutes = (yyvsp[(3) - (4)].textintval).value;
+ pc->seconds.tv_sec = 0;
+ pc->seconds.tv_nsec = 0;
+- pc->meridian = yyvsp[0].intval;
+- }
++ pc->meridian = (yyvsp[(4) - (4)].intval);
++ ;}
+ break;
+
+ case 16:
+-#line 281 "getdate.y"
++#line 332 "getdate.y"
+ {
+- pc->hour = yyvsp[-4].textintval.value;
+- pc->minutes = yyvsp[-2].textintval.value;
++ pc->hour = (yyvsp[(1) - (5)].textintval).value;
++ pc->minutes = (yyvsp[(3) - (5)].textintval).value;
+ pc->seconds.tv_sec = 0;
+ pc->seconds.tv_nsec = 0;
+ pc->meridian = MER24;
+ pc->zones_seen++;
+- pc->time_zone = time_zone_hhmm (yyvsp[-1].textintval, yyvsp[0].intval);
+- }
++ pc->time_zone = time_zone_hhmm ((yyvsp[(4) - (5)].textintval), (yyvsp[(5) - (5)].intval));
++ ;}
+ break;
+
+ case 17:
+-#line 291 "getdate.y"
++#line 342 "getdate.y"
+ {
+- pc->hour = yyvsp[-5].textintval.value;
+- pc->minutes = yyvsp[-3].textintval.value;
+- pc->seconds = yyvsp[-1].timespec;
+- pc->meridian = yyvsp[0].intval;
+- }
++ pc->hour = (yyvsp[(1) - (6)].textintval).value;
++ pc->minutes = (yyvsp[(3) - (6)].textintval).value;
++ pc->seconds = (yyvsp[(5) - (6)].timespec);
++ pc->meridian = (yyvsp[(6) - (6)].intval);
++ ;}
+ break;
+
+ case 18:
+-#line 298 "getdate.y"
++#line 349 "getdate.y"
+ {
+- pc->hour = yyvsp[-6].textintval.value;
+- pc->minutes = yyvsp[-4].textintval.value;
+- pc->seconds = yyvsp[-2].timespec;
++ pc->hour = (yyvsp[(1) - (7)].textintval).value;
++ pc->minutes = (yyvsp[(3) - (7)].textintval).value;
++ pc->seconds = (yyvsp[(5) - (7)].timespec);
+ pc->meridian = MER24;
+ pc->zones_seen++;
+- pc->time_zone = time_zone_hhmm (yyvsp[-1].textintval, yyvsp[0].intval);
+- }
++ pc->time_zone = time_zone_hhmm ((yyvsp[(6) - (7)].textintval), (yyvsp[(7) - (7)].intval));
++ ;}
+ break;
+
+ case 19:
+-#line 310 "getdate.y"
++#line 361 "getdate.y"
+ {
+- pc->local_isdst = yyvsp[0].intval;
+- pc->dsts_seen += (0 < yyvsp[0].intval);
+- }
++ pc->local_isdst = (yyvsp[(1) - (1)].intval);
++ pc->dsts_seen += (0 < (yyvsp[(1) - (1)].intval));
++ ;}
+ break;
+
+ case 20:
+-#line 315 "getdate.y"
++#line 366 "getdate.y"
+ {
+ pc->local_isdst = 1;
+- pc->dsts_seen += (0 < yyvsp[-1].intval) + 1;
+- }
++ pc->dsts_seen += (0 < (yyvsp[(1) - (2)].intval)) + 1;
++ ;}
+ break;
+
+ case 21:
+-#line 323 "getdate.y"
+- { pc->time_zone = yyvsp[0].intval; }
++#line 374 "getdate.y"
++ { pc->time_zone = (yyvsp[(1) - (1)].intval); ;}
+ break;
+
+ case 22:
+-#line 325 "getdate.y"
+- { pc->time_zone = yyvsp[-1].intval; pc->rels_seen = true; }
++#line 376 "getdate.y"
++ { pc->time_zone = (yyvsp[(1) - (2)].intval); pc->rels_seen = true; ;}
+ break;
+
+ case 23:
+-#line 327 "getdate.y"
+- { pc->time_zone = yyvsp[-2].intval + time_zone_hhmm (yyvsp[-1].textintval, yyvsp[0].intval); }
++#line 378 "getdate.y"
++ { pc->time_zone = (yyvsp[(1) - (3)].intval) + time_zone_hhmm ((yyvsp[(2) - (3)].textintval), (yyvsp[(3) - (3)].intval)); ;}
+ break;
+
+ case 24:
+-#line 329 "getdate.y"
+- { pc->time_zone = yyvsp[0].intval + 60; }
++#line 380 "getdate.y"
++ { pc->time_zone = (yyvsp[(1) - (1)].intval) + 60; ;}
+ break;
+
+ case 25:
+-#line 331 "getdate.y"
+- { pc->time_zone = yyvsp[-1].intval + 60; }
++#line 382 "getdate.y"
++ { pc->time_zone = (yyvsp[(1) - (2)].intval) + 60; ;}
+ break;
+
+ case 26:
+-#line 336 "getdate.y"
++#line 387 "getdate.y"
+ {
+ pc->day_ordinal = 1;
+- pc->day_number = yyvsp[0].intval;
+- }
++ pc->day_number = (yyvsp[(1) - (1)].intval);
++ ;}
+ break;
+
+ case 27:
+-#line 341 "getdate.y"
++#line 392 "getdate.y"
+ {
+ pc->day_ordinal = 1;
+- pc->day_number = yyvsp[-1].intval;
+- }
++ pc->day_number = (yyvsp[(1) - (2)].intval);
++ ;}
+ break;
+
+ case 28:
+-#line 346 "getdate.y"
++#line 397 "getdate.y"
+ {
+- pc->day_ordinal = yyvsp[-1].intval;
+- pc->day_number = yyvsp[0].intval;
+- }
++ pc->day_ordinal = (yyvsp[(1) - (2)].intval);
++ pc->day_number = (yyvsp[(2) - (2)].intval);
++ ;}
+ break;
+
+ case 29:
+-#line 351 "getdate.y"
++#line 402 "getdate.y"
+ {
+- pc->day_ordinal = yyvsp[-1].textintval.value;
+- pc->day_number = yyvsp[0].intval;
+- }
++ pc->day_ordinal = (yyvsp[(1) - (2)].textintval).value;
++ pc->day_number = (yyvsp[(2) - (2)].intval);
++ ;}
+ break;
+
+ case 30:
+-#line 359 "getdate.y"
++#line 410 "getdate.y"
+ {
+- pc->month = yyvsp[-2].textintval.value;
+- pc->day = yyvsp[0].textintval.value;
+- }
++ pc->month = (yyvsp[(1) - (3)].textintval).value;
++ pc->day = (yyvsp[(3) - (3)].textintval).value;
++ ;}
+ break;
+
+ case 31:
+-#line 364 "getdate.y"
++#line 415 "getdate.y"
+ {
+ /* Interpret as YYYY/MM/DD if the first value has 4 or more digits,
+ otherwise as MM/DD/YY.
+ The goal in recognizing YYYY/MM/DD is solely to support legacy
+ machine-generated dates like those in an RCS log listing. If
+ you want portability, use the ISO 8601 format. */
+- if (4 <= yyvsp[-4].textintval.digits)
++ if (4 <= (yyvsp[(1) - (5)].textintval).digits)
+ {
+- pc->year = yyvsp[-4].textintval;
+- pc->month = yyvsp[-2].textintval.value;
+- pc->day = yyvsp[0].textintval.value;
++ pc->year = (yyvsp[(1) - (5)].textintval);
++ pc->month = (yyvsp[(3) - (5)].textintval).value;
++ pc->day = (yyvsp[(5) - (5)].textintval).value;
+ }
+ else
+ {
+- pc->month = yyvsp[-4].textintval.value;
+- pc->day = yyvsp[-2].textintval.value;
+- pc->year = yyvsp[0].textintval;
++ pc->month = (yyvsp[(1) - (5)].textintval).value;
++ pc->day = (yyvsp[(3) - (5)].textintval).value;
++ pc->year = (yyvsp[(5) - (5)].textintval);
+ }
+- }
++ ;}
+ break;
+
+ case 32:
+-#line 384 "getdate.y"
++#line 435 "getdate.y"
+ {
+ /* ISO 8601 format. YYYY-MM-DD. */
+- pc->year = yyvsp[-2].textintval;
+- pc->month = -yyvsp[-1].textintval.value;
+- pc->day = -yyvsp[0].textintval.value;
+- }
++ pc->year = (yyvsp[(1) - (3)].textintval);
++ pc->month = -(yyvsp[(2) - (3)].textintval).value;
++ pc->day = -(yyvsp[(3) - (3)].textintval).value;
++ ;}
+ break;
+
+ case 33:
+-#line 391 "getdate.y"
++#line 442 "getdate.y"
+ {
+ /* e.g. 17-JUN-1992. */
+- pc->day = yyvsp[-2].textintval.value;
+- pc->month = yyvsp[-1].intval;
+- pc->year.value = -yyvsp[0].textintval.value;
+- pc->year.digits = yyvsp[0].textintval.digits;
+- }
++ pc->day = (yyvsp[(1) - (3)].textintval).value;
++ pc->month = (yyvsp[(2) - (3)].intval);
++ pc->year.value = -(yyvsp[(3) - (3)].textintval).value;
++ pc->year.digits = (yyvsp[(3) - (3)].textintval).digits;
++ ;}
+ break;
+
+ case 34:
+-#line 399 "getdate.y"
++#line 450 "getdate.y"
+ {
+ /* e.g. JUN-17-1992. */
+- pc->month = yyvsp[-2].intval;
+- pc->day = -yyvsp[-1].textintval.value;
+- pc->year.value = -yyvsp[0].textintval.value;
+- pc->year.digits = yyvsp[0].textintval.digits;
+- }
++ pc->month = (yyvsp[(1) - (3)].intval);
++ pc->day = -(yyvsp[(2) - (3)].textintval).value;
++ pc->year.value = -(yyvsp[(3) - (3)].textintval).value;
++ pc->year.digits = (yyvsp[(3) - (3)].textintval).digits;
++ ;}
+ break;
+
+ case 35:
+-#line 407 "getdate.y"
++#line 458 "getdate.y"
+ {
+- pc->month = yyvsp[-1].intval;
+- pc->day = yyvsp[0].textintval.value;
+- }
++ pc->month = (yyvsp[(1) - (2)].intval);
++ pc->day = (yyvsp[(2) - (2)].textintval).value;
++ ;}
+ break;
+
+ case 36:
+-#line 412 "getdate.y"
++#line 463 "getdate.y"
+ {
+- pc->month = yyvsp[-3].intval;
+- pc->day = yyvsp[-2].textintval.value;
+- pc->year = yyvsp[0].textintval;
+- }
++ pc->month = (yyvsp[(1) - (4)].intval);
++ pc->day = (yyvsp[(2) - (4)].textintval).value;
++ pc->year = (yyvsp[(4) - (4)].textintval);
++ ;}
+ break;
+
+ case 37:
+-#line 418 "getdate.y"
++#line 469 "getdate.y"
+ {
+- pc->day = yyvsp[-1].textintval.value;
+- pc->month = yyvsp[0].intval;
+- }
++ pc->day = (yyvsp[(1) - (2)].textintval).value;
++ pc->month = (yyvsp[(2) - (2)].intval);
++ ;}
+ break;
+
+ case 38:
+-#line 423 "getdate.y"
++#line 474 "getdate.y"
+ {
+- pc->day = yyvsp[-2].textintval.value;
+- pc->month = yyvsp[-1].intval;
+- pc->year = yyvsp[0].textintval;
+- }
++ pc->day = (yyvsp[(1) - (3)].textintval).value;
++ pc->month = (yyvsp[(2) - (3)].intval);
++ pc->year = (yyvsp[(3) - (3)].textintval);
++ ;}
+ break;
+
+ case 39:
+-#line 432 "getdate.y"
++#line 483 "getdate.y"
+ {
+ pc->rel_ns = -pc->rel_ns;
+ pc->rel_seconds = -pc->rel_seconds;
+@@ -1574,216 +1965,215 @@
+ pc->rel_day = -pc->rel_day;
+ pc->rel_month = -pc->rel_month;
+ pc->rel_year = -pc->rel_year;
+- }
++ ;}
+ break;
+
+ case 41:
+-#line 446 "getdate.y"
+- { pc->rel_year += yyvsp[-1].intval * yyvsp[0].intval; }
++#line 497 "getdate.y"
++ { pc->rel_year += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 42:
+-#line 448 "getdate.y"
+- { pc->rel_year += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 499 "getdate.y"
++ { pc->rel_year += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 43:
+-#line 450 "getdate.y"
+- { pc->rel_year += yyvsp[0].intval; }
++#line 501 "getdate.y"
++ { pc->rel_year += (yyvsp[(1) - (1)].intval); ;}
+ break;
+
+ case 44:
+-#line 452 "getdate.y"
+- { pc->rel_month += yyvsp[-1].intval * yyvsp[0].intval; }
++#line 503 "getdate.y"
++ { pc->rel_month += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 45:
+-#line 454 "getdate.y"
+- { pc->rel_month += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 505 "getdate.y"
++ { pc->rel_month += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 46:
+-#line 456 "getdate.y"
+- { pc->rel_month += yyvsp[0].intval; }
++#line 507 "getdate.y"
++ { pc->rel_month += (yyvsp[(1) - (1)].intval); ;}
+ break;
+
+ case 47:
+-#line 458 "getdate.y"
+- { pc->rel_day += yyvsp[-1].intval * yyvsp[0].intval; }
++#line 509 "getdate.y"
++ { pc->rel_day += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 48:
+-#line 460 "getdate.y"
+- { pc->rel_day += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 511 "getdate.y"
++ { pc->rel_day += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 49:
+-#line 462 "getdate.y"
+- { pc->rel_day += yyvsp[0].intval; }
++#line 513 "getdate.y"
++ { pc->rel_day += (yyvsp[(1) - (1)].intval); ;}
+ break;
+
+ case 50:
+-#line 464 "getdate.y"
+- { pc->rel_hour += yyvsp[-1].intval * yyvsp[0].intval; }
++#line 515 "getdate.y"
++ { pc->rel_hour += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 51:
+-#line 466 "getdate.y"
+- { pc->rel_hour += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 517 "getdate.y"
++ { pc->rel_hour += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 52:
+-#line 468 "getdate.y"
+- { pc->rel_hour += yyvsp[0].intval; }
++#line 519 "getdate.y"
++ { pc->rel_hour += (yyvsp[(1) - (1)].intval); ;}
+ break;
+
+ case 53:
+-#line 470 "getdate.y"
+- { pc->rel_minutes += yyvsp[-1].intval * yyvsp[0].intval; }
++#line 521 "getdate.y"
++ { pc->rel_minutes += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 54:
+-#line 472 "getdate.y"
+- { pc->rel_minutes += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 523 "getdate.y"
++ { pc->rel_minutes += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 55:
+-#line 474 "getdate.y"
+- { pc->rel_minutes += yyvsp[0].intval; }
++#line 525 "getdate.y"
++ { pc->rel_minutes += (yyvsp[(1) - (1)].intval); ;}
+ break;
+
+ case 56:
+-#line 476 "getdate.y"
+- { pc->rel_seconds += yyvsp[-1].intval * yyvsp[0].intval; }
++#line 527 "getdate.y"
++ { pc->rel_seconds += (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 57:
+-#line 478 "getdate.y"
+- { pc->rel_seconds += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 529 "getdate.y"
++ { pc->rel_seconds += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 58:
+-#line 480 "getdate.y"
+- { pc->rel_seconds += yyvsp[-1].timespec.tv_sec * yyvsp[0].intval; pc->rel_ns += yyvsp[-1].timespec.tv_nsec * yyvsp[0].intval; }
++#line 531 "getdate.y"
++ { pc->rel_seconds += (yyvsp[(1) - (2)].timespec).tv_sec * (yyvsp[(2) - (2)].intval); pc->rel_ns += (yyvsp[(1) - (2)].timespec).tv_nsec * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 59:
+-#line 482 "getdate.y"
+- { pc->rel_seconds += yyvsp[-1].timespec.tv_sec * yyvsp[0].intval; pc->rel_ns += yyvsp[-1].timespec.tv_nsec * yyvsp[0].intval; }
++#line 533 "getdate.y"
++ { pc->rel_seconds += (yyvsp[(1) - (2)].timespec).tv_sec * (yyvsp[(2) - (2)].intval); pc->rel_ns += (yyvsp[(1) - (2)].timespec).tv_nsec * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 60:
+-#line 484 "getdate.y"
+- { pc->rel_seconds += yyvsp[0].intval; }
++#line 535 "getdate.y"
++ { pc->rel_seconds += (yyvsp[(1) - (1)].intval); ;}
+ break;
+
+ case 62:
+-#line 490 "getdate.y"
+- { pc->rel_year += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 541 "getdate.y"
++ { pc->rel_year += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 63:
+-#line 492 "getdate.y"
+- { pc->rel_month += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 543 "getdate.y"
++ { pc->rel_month += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 64:
+-#line 494 "getdate.y"
+- { pc->rel_day += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 545 "getdate.y"
++ { pc->rel_day += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 65:
+-#line 496 "getdate.y"
+- { pc->rel_hour += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 547 "getdate.y"
++ { pc->rel_hour += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 66:
+-#line 498 "getdate.y"
+- { pc->rel_minutes += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 549 "getdate.y"
++ { pc->rel_minutes += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 67:
+-#line 500 "getdate.y"
+- { pc->rel_seconds += yyvsp[-1].textintval.value * yyvsp[0].intval; }
++#line 551 "getdate.y"
++ { pc->rel_seconds += (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); ;}
+ break;
+
+ case 71:
+-#line 508 "getdate.y"
+- { yyval.timespec.tv_sec = yyvsp[0].textintval.value; yyval.timespec.tv_nsec = 0; }
++#line 559 "getdate.y"
++ { (yyval.timespec).tv_sec = (yyvsp[(1) - (1)].textintval).value; (yyval.timespec).tv_nsec = 0; ;}
+ break;
+
+ case 73:
+-#line 514 "getdate.y"
+- { yyval.timespec.tv_sec = yyvsp[0].textintval.value; yyval.timespec.tv_nsec = 0; }
++#line 565 "getdate.y"
++ { (yyval.timespec).tv_sec = (yyvsp[(1) - (1)].textintval).value; (yyval.timespec).tv_nsec = 0; ;}
+ break;
+
+ case 74:
+-#line 519 "getdate.y"
++#line 570 "getdate.y"
+ {
+ if (pc->dates_seen && ! pc->year.digits
+- && ! pc->rels_seen && (pc->times_seen || 2 < yyvsp[0].textintval.digits))
+- pc->year = yyvsp[0].textintval;
++ && ! pc->rels_seen && (pc->times_seen || 2 < (yyvsp[(1) - (1)].textintval).digits))
++ pc->year = (yyvsp[(1) - (1)].textintval);
+ else
+ {
+- if (4 < yyvsp[0].textintval.digits)
++ if (4 < (yyvsp[(1) - (1)].textintval).digits)
+ {
+ pc->dates_seen++;
+- pc->day = yyvsp[0].textintval.value % 100;
+- pc->month = (yyvsp[0].textintval.value / 100) % 100;
+- pc->year.value = yyvsp[0].textintval.value / 10000;
+- pc->year.digits = yyvsp[0].textintval.digits - 4;
++ pc->day = (yyvsp[(1) - (1)].textintval).value % 100;
++ pc->month = ((yyvsp[(1) - (1)].textintval).value / 100) % 100;
++ pc->year.value = (yyvsp[(1) - (1)].textintval).value / 10000;
++ pc->year.digits = (yyvsp[(1) - (1)].textintval).digits - 4;
+ }
+ else
+ {
+ pc->times_seen++;
+- if (yyvsp[0].textintval.digits <= 2)
++ if ((yyvsp[(1) - (1)].textintval).digits <= 2)
+ {
+- pc->hour = yyvsp[0].textintval.value;
++ pc->hour = (yyvsp[(1) - (1)].textintval).value;
+ pc->minutes = 0;
+ }
+ else
+ {
+- pc->hour = yyvsp[0].textintval.value / 100;
+- pc->minutes = yyvsp[0].textintval.value % 100;
++ pc->hour = (yyvsp[(1) - (1)].textintval).value / 100;
++ pc->minutes = (yyvsp[(1) - (1)].textintval).value % 100;
+ }
+ pc->seconds.tv_sec = 0;
+ pc->seconds.tv_nsec = 0;
+ pc->meridian = MER24;
+ }
+ }
+- }
++ ;}
+ break;
+
+ case 75:
+-#line 556 "getdate.y"
+- { yyval.intval = -1; }
++#line 607 "getdate.y"
++ { (yyval.intval) = -1; ;}
+ break;
+
+ case 76:
+-#line 558 "getdate.y"
+- { yyval.intval = yyvsp[0].textintval.value; }
++#line 609 "getdate.y"
++ { (yyval.intval) = (yyvsp[(2) - (2)].textintval).value; ;}
+ break;
+
+ case 77:
+-#line 563 "getdate.y"
+- { yyval.intval = MER24; }
++#line 614 "getdate.y"
++ { (yyval.intval) = MER24; ;}
+ break;
+
+ case 78:
+-#line 565 "getdate.y"
+- { yyval.intval = yyvsp[0].intval; }
++#line 616 "getdate.y"
++ { (yyval.intval) = (yyvsp[(1) - (1)].intval); ;}
+ break;
+
+
++/* Line 1267 of yacc.c. */
++#line 2171 "getdate.c"
++ default: break;
+ }
++ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+-/* Line 1000 of yacc.c. */
+-#line 1782 "getdate.c"
+-
+- yyvsp -= yylen;
+- yyssp -= yylen;
+-
+-
++ YYPOPSTACK (yylen);
++ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+@@ -1812,99 +2202,65 @@
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+-#if YYERROR_VERBOSE
+- yyn = yypact[yystate];
+-
+- if (YYPACT_NINF < yyn && yyn < YYLAST)
+- {
+- YYSIZE_T yysize = 0;
+- int yytype = YYTRANSLATE (yychar);
+- const char* yyprefix;
+- char *yymsg;
+- int yyx;
+-
+- /* Start YYX at -YYN if negative to avoid negative indexes in
+- YYCHECK. */
+- int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+- /* Stay within bounds of both yycheck and yytname. */
+- int yychecklim = YYLAST - yyn;
+- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+- int yycount = 0;
+-
+- yyprefix = ", expecting ";
+- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++#if ! YYERROR_VERBOSE
++ yyerror (pc, YY_("syntax error"));
++#else
++ {
++ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++ {
++ YYSIZE_T yyalloc = 2 * yysize;
++ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++ yyalloc = YYSTACK_ALLOC_MAXIMUM;
++ if (yymsg != yymsgbuf)
++ YYSTACK_FREE (yymsg);
++ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++ if (yymsg)
++ yymsg_alloc = yyalloc;
++ else
+ {
+- yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+- yycount += 1;
+- if (yycount == 5)
+- {
+- yysize = 0;
+- break;
+- }
++ yymsg = yymsgbuf;
++ yymsg_alloc = sizeof yymsgbuf;
+ }
+- yysize += (sizeof ("syntax error, unexpected ")
+- + yystrlen (yytname[yytype]));
+- yymsg = (char *) YYSTACK_ALLOC (yysize);
+- if (yymsg != 0)
+- {
+- char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+- yyp = yystpcpy (yyp, yytname[yytype]);
++ }
+
+- if (yycount < 5)
+- {
+- yyprefix = ", expecting ";
+- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+- {
+- yyp = yystpcpy (yyp, yyprefix);
+- yyp = yystpcpy (yyp, yytname[yyx]);
+- yyprefix = " or ";
+- }
+- }
+- yyerror (pc, yymsg);
+- YYSTACK_FREE (yymsg);
+- }
+- else
+- yyerror (pc, "syntax error; also virtual memory exhausted");
+- }
+- else
+-#endif /* YYERROR_VERBOSE */
+- yyerror (pc, "syntax error");
++ if (0 < yysize && yysize <= yymsg_alloc)
++ {
++ (void) yysyntax_error (yymsg, yystate, yychar);
++ yyerror (pc, yymsg);
++ }
++ else
++ {
++ yyerror (pc, YY_("syntax error"));
++ if (yysize != 0)
++ goto yyexhaustedlab;
++ }
++ }
++#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+- /* If just tried and failed to reuse lookahead token after an
++ /* If just tried and failed to reuse look-ahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+- {
+- /* If at end of input, pop the error token,
+- then the rest of the stack, then return failure. */
++ {
++ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+- for (;;)
+- {
+- YYPOPSTACK;
+- if (yyssp == yyss)
+- YYABORT;
+- YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+- yydestruct (yystos[*yyssp], yyvsp);
+- }
+- }
++ YYABORT;
++ }
+ else
+ {
+- YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+- yydestruct (yytoken, &yylval);
++ yydestruct ("Error: discarding",
++ yytoken, &yylval, pc);
+ yychar = YYEMPTY;
+-
+ }
+ }
+
+- /* Else will try to reuse lookahead token after shifting the error
++ /* Else will try to reuse look-ahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+@@ -1914,15 +2270,17 @@
+ `---------------------------------------------------*/
+ yyerrorlab:
+
+-#ifdef __GNUC__
+- /* Pacify GCC when the user code never invokes YYERROR and the label
+- yyerrorlab therefore never appears in user code. */
+- if (0)
++ /* Pacify compilers like GCC when the user code never invokes
++ YYERROR and the label yyerrorlab therefore never appears in user
++ code. */
++ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+-#endif
+
+- yyvsp -= yylen;
+- yyssp -= yylen;
++ /* Do not reclaim the symbols of the rule which action triggered
++ this YYERROR. */
++ YYPOPSTACK (yylen);
++ yylen = 0;
++ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+@@ -1951,9 +2309,10 @@
+ if (yyssp == yyss)
+ YYABORT;
+
+- YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+- yydestruct (yystos[yystate], yyvsp);
+- YYPOPSTACK;
++
++ yydestruct ("Error: popping",
++ yystos[yystate], yyvsp, pc);
++ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+@@ -1961,11 +2320,12 @@
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+- YYDPRINTF ((stderr, "Shifting error token, "));
+-
+ *++yyvsp = yylval;
+
+
++ /* Shift the error token. */
++ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+ yystate = yyn;
+ goto yynewstate;
+
+@@ -1985,25 +2345,43 @@
+ goto yyreturn;
+
+ #ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here. |
+-`----------------------------------------------*/
+-yyoverflowlab:
+- yyerror (pc, "parser stack overflow");
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here. |
++`-------------------------------------------------*/
++yyexhaustedlab:
++ yyerror (pc, YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+ #endif
+
+ yyreturn:
++ if (yychar != YYEOF && yychar != YYEMPTY)
++ yydestruct ("Cleanup: discarding lookahead",
++ yytoken, &yylval, pc);
++ /* Do not reclaim the symbols of the rule which action triggered
++ this YYABORT or YYACCEPT. */
++ YYPOPSTACK (yylen);
++ YY_STACK_PRINT (yyss, yyssp);
++ while (yyssp != yyss)
++ {
++ yydestruct ("Cleanup: popping",
++ yystos[*yyssp], yyvsp, pc);
++ YYPOPSTACK (1);
++ }
+ #ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+ #endif
+- return yyresult;
++#if YYERROR_VERBOSE
++ if (yymsg != yymsgbuf)
++ YYSTACK_FREE (yymsg);
++#endif
++ /* Make sure YYID is used. */
++ return YYID (yyresult);
+ }
+
+
+-#line 568 "getdate.y"
++#line 619 "getdate.y"
+
+
+ static table const meridian_table[] =
+@@ -2520,7 +2898,7 @@
+
+ /* Do nothing if the parser reports an error. */
+ static int
+-yyerror (parser_control *pc ATTRIBUTE_UNUSED, char *s ATTRIBUTE_UNUSED)
++yyerror (parser_control *pc ATTRIBUTE_UNUSED, const char *s ATTRIBUTE_UNUSED)
+ {
+ return 0;
+ }
+@@ -2793,7 +3171,8 @@
+ + sizeof pc.time_zone * CHAR_BIT / 3];
+ if (!tz_was_altered)
+ tz0 = get_tz (tz0buf);
+- sprintf (tz1buf, "XXX%s%ld:%02d", "-" + (time_zone < 0),
++ snprintf(tz1buf, sizeof(tz1buf),
++ "XXX%s%ld:%02d", "-" + (time_zone < 0),
+ abs_time_zone_hour, abs_time_zone_min);
+ if (setenv ("TZ", tz1buf, 1) != 0)
+ goto fail;
+@@ -2891,7 +3270,7 @@
+ ok = false;
+ done:
+ if (tz_was_altered)
+- ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0;
++ ok &= (tz0 ? setenv("TZ", tz0, 1) : (unsetenv("TZ"), 0)) == 0;
+ if (tz0 != tz0buf)
+ free (tz0);
+ return ok;
+@@ -2900,37 +3279,52 @@
+ #if TEST
+
+ int
+-main (int ac, char **av)
++main(int argc, char **argv)
+ {
+ char buff[BUFSIZ];
++ int cmd = 0;
+
+- printf ("Enter date, or blank line to exit.\n\t> ");
++ if (argc > 1) {
++ int i = 1;
++ buff[0] = '\0';
++ while (i < argc) {
++ if (i > 1)
++ strlcat(buff, " ", BUFSIZ);
++ strlcat(buff, argv[i++], BUFSIZ);
++ }
++ cmd++;
++ goto once;
++ }
++
++ printf("Enter date, or blank line to exit.\n> ");
+ fflush (stdout);
+
+ buff[BUFSIZ - 1] = '\0';
+- while (fgets (buff, BUFSIZ - 1, stdin) && buff[0])
++ while (fgets(buff, BUFSIZ - 1, stdin) && buff[0] &&
++ buff[0] != '\r' && buff[0] != '\n')
+ {
+ struct timespec d;
+ struct tm const *tm;
++ once:
+ if (! get_date (&d, buff, NULL))
+ printf ("Bad format - couldn't convert.\n");
+ else if (! (tm = localtime (&d.tv_sec)))
+ {
+- long int sec = d.tv_sec;
+- printf ("localtime (%ld) failed\n", sec);
++ printf ("localtime (%lld) failed\n", (long long)d.tv_sec);
+ }
+ else
+ {
+ int ns = d.tv_nsec;
+- printf ("%04ld-%02d-%02d %02d:%02d:%02d.%09d\n",
+- tm->tm_year + 1900L, tm->tm_mon + 1, tm->tm_mday,
++ printf ("%13lld =\t%04ld-%02d-%02d %02d:%02d:%02d.%09d\n",
++ (long long)d.tv_sec, (long)tm->tm_year + 1900,
++ tm->tm_mon + 1, tm->tm_mday,
+ tm->tm_hour, tm->tm_min, tm->tm_sec, ns);
+ }
+- printf ("\t> ");
++ if (cmd)
++ return 0;
++ printf ("> ");
+ fflush (stdout);
+ }
+ return 0;
+ }
+ #endif /* TEST */
+-
+-
+--- cvs-1.12.13+real.orig/lib/getdate.h
++++ cvs-1.12.13+real/lib/getdate.h
+@@ -1,6 +1,9 @@
++/* $MirOS: src/gnu/usr.bin/cvs/lib/getdate.h,v 1.7 2016/10/22 20:15:03 tg Exp $ */
++
+ /* Parse a string into an internal time stamp.
+
+- Copyright (C) 1995, 1997, 1998, 2003, 2004 Free Software Foundation, Inc.
++ Copyright (C) 1995, 1997, 1998, 2003, 2004, 2005
++ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -16,7 +19,17 @@
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
++#ifndef GETDATE_H
++#define GETDATE_H
++
+ #include <stdbool.h>
++#ifndef IN_RCS
+ #include "timespec.h"
++#else
++#include <sys/time.h>
++#include <time.h>
++#endif
+
+ bool get_date (struct timespec *, char const *, struct timespec const *);
++
++#endif /* GETDATE_H */
+--- cvs-1.12.13+real.orig/lib/getdate.y
++++ cvs-1.12.13+real/lib/getdate.y
+@@ -1,8 +1,11 @@
+ %{
+ /* Parse a string into an internal time stamp.
+
+- Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 Free Software
+- Foundation, Inc.
++ Copyright (C) 1995, 1997, 1998, 2003, 2004, 2005
++ Free Software Foundation, Inc.
++
++ Copyright (c) 2005, 2006, 2007, 2010, 2016
++ mirabilos <m@mirbsd.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -38,6 +41,10 @@
+
+ #include "getdate.h"
+
++#ifdef USE_LIBBSD
++size_t strlcat(char *, const char *, size_t);
++#endif
++
+ /* There's no need to extend the stack, so there's no need to involve
+ alloca. */
+ #define YYSTACK_USE_ALLOCA 0
+@@ -65,10 +72,44 @@
+ #include <stdlib.h>
+ #include <string.h>
+
++#ifndef _STDLIB_H
++#define _STDLIB_H 1 /* GNU bison needs this */
++#endif
++
++#ifndef IN_RCS
+ #include "setenv.h"
+ #include "xalloc.h"
++#else /* IN_RCS */
++#include <unistd.h>
++
++#define HAVE_STRUCT_TM_TM_ZONE 1
++#define HAVE_TM_GMTOFF 1
++
++#define gettime(ts) clock_gettime(CLOCK_REALTIME,(ts))
++
++static void *
++xmalloc(size_t s)
++{
++ static const char xmalloc_enomem[] = "memory exhausted\n";
++ void *x;
++
++ if ((x = malloc(s)) == NULL) {
++ write(2, xmalloc_enomem, sizeof(xmalloc_enomem) - 1);
++ exit(1);
++ }
+
+-#if STDC_HEADERS || (! defined isascii && ! HAVE_ISASCII)
++ return (x);
++}
++
++static void *
++xmemdup(void const *p, size_t s)
++{
++ return (memcpy(xmalloc(s), p, s));
++}
++#endif /* IN_RCS */
++
++#if (defined(STDC_HEADERS) && STDC_HEADERS) || \
++ (!defined(isascii) && !HAVE_ISASCII)
+ # define IN_CTYPE_DOMAIN(c) 1
+ #else
+ # define IN_CTYPE_DOMAIN(c) isascii (c)
+@@ -87,7 +128,8 @@
+ of `digit' even when the host does not conform to POSIX. */
+ #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
+
+-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
++#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || \
++ (defined(__STRICT_ANSI__) && __STRICT_ANSI__)
+ # define __attribute__(x)
+ #endif
+
+@@ -95,6 +137,15 @@
+ # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+ #endif
+
++#ifndef __IDSTRING
++#define __IDSTRING(varname, string) \
++ static const char varname[] __attribute__((__used__)) = \
++ "@(""#)" #varname ": " string
++#endif
++
++__IDSTRING(rcsid_code, "$MirOS: src/gnu/usr.bin/cvs/lib/getdate.y,v 1.11 2016/10/22 22:45:50 tg Exp $");
++/* placeholder line for __IDSTRING(rcsid_bron, "$miros: ..."); so that cpp #line directives work */
++
+ /* Shift A right by B bits portably, by dividing A by 2**B and
+ truncating towards minus infinity. A and B should be free of side
+ effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
+@@ -191,7 +242,7 @@
+
+ union YYSTYPE;
+ static int yylex (union YYSTYPE *, parser_control *);
+-static int yyerror (parser_control *, char *);
++static int yyerror (parser_control *, const char *);
+ static long int time_zone_hhmm (textint, long int);
+
+ %}
+@@ -1081,7 +1132,7 @@
+
+ /* Do nothing if the parser reports an error. */
+ static int
+-yyerror (parser_control *pc ATTRIBUTE_UNUSED, char *s ATTRIBUTE_UNUSED)
++yyerror (parser_control *pc ATTRIBUTE_UNUSED, const char *s ATTRIBUTE_UNUSED)
+ {
+ return 0;
+ }
+@@ -1354,7 +1405,8 @@
+ + sizeof pc.time_zone * CHAR_BIT / 3];
+ if (!tz_was_altered)
+ tz0 = get_tz (tz0buf);
+- sprintf (tz1buf, "XXX%s%ld:%02d", "-" + (time_zone < 0),
++ snprintf(tz1buf, sizeof(tz1buf),
++ "XXX%s%ld:%02d", "-" + (time_zone < 0),
+ abs_time_zone_hour, abs_time_zone_min);
+ if (setenv ("TZ", tz1buf, 1) != 0)
+ goto fail;
+@@ -1452,7 +1504,7 @@
+ ok = false;
+ done:
+ if (tz_was_altered)
+- ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0;
++ ok &= (tz0 ? setenv("TZ", tz0, 1) : (unsetenv("TZ"), 0)) == 0;
+ if (tz0 != tz0buf)
+ free (tz0);
+ return ok;
+@@ -1461,33 +1513,50 @@
+ #if TEST
+
+ int
+-main (int ac, char **av)
++main(int argc, char **argv)
+ {
+ char buff[BUFSIZ];
++ int cmd = 0;
++
++ if (argc > 1) {
++ int i = 1;
++ buff[0] = '\0';
++ while (i < argc) {
++ if (i > 1)
++ strlcat(buff, " ", BUFSIZ);
++ strlcat(buff, argv[i++], BUFSIZ);
++ }
++ cmd++;
++ goto once;
++ }
+
+- printf ("Enter date, or blank line to exit.\n\t> ");
++ printf("Enter date, or blank line to exit.\n> ");
+ fflush (stdout);
+
+ buff[BUFSIZ - 1] = '\0';
+- while (fgets (buff, BUFSIZ - 1, stdin) && buff[0])
++ while (fgets(buff, BUFSIZ - 1, stdin) && buff[0] &&
++ buff[0] != '\r' && buff[0] != '\n')
+ {
+ struct timespec d;
+ struct tm const *tm;
++ once:
+ if (! get_date (&d, buff, NULL))
+ printf ("Bad format - couldn't convert.\n");
+ else if (! (tm = localtime (&d.tv_sec)))
+ {
+- long int sec = d.tv_sec;
+- printf ("localtime (%ld) failed\n", sec);
++ printf ("localtime (%lld) failed\n", (long long)d.tv_sec);
+ }
+ else
+ {
+ int ns = d.tv_nsec;
+- printf ("%04ld-%02d-%02d %02d:%02d:%02d.%09d\n",
+- tm->tm_year + 1900L, tm->tm_mon + 1, tm->tm_mday,
++ printf ("%13lld =\t%04ld-%02d-%02d %02d:%02d:%02d.%09d\n",
++ (long long)d.tv_sec, (long)tm->tm_year + 1900,
++ tm->tm_mon + 1, tm->tm_mday,
+ tm->tm_hour, tm->tm_min, tm->tm_sec, ns);
+ }
+- printf ("\t> ");
++ if (cmd)
++ return 0;
++ printf ("> ");
+ fflush (stdout);
+ }
+ return 0;
+--- cvs-1.12.13+real.orig/lib/getdelim.c
++++ cvs-1.12.13+real/lib/getdelim.c
+@@ -48,7 +48,6 @@
+ {
+ int result = 0;
+ ssize_t cur_len = 0;
+- ssize_t len;
+
+ if (lineptr == NULL || n == NULL || fp == NULL)
+ {
+@@ -71,7 +70,6 @@
+
+ for (;;)
+ {
+- char *t;
+ int i;
+
+ i = getc (fp);
+--- cvs-1.12.13+real.orig/lib/pagealign_alloc.c
++++ cvs-1.12.13+real/lib/pagealign_alloc.c
+@@ -44,6 +44,10 @@
+ #include "xalloc.h"
+ #include "gettext.h"
+
++#if HAVE_MMAP && !defined(HAVE_MAP_ANONYMOUS)
++#include <stdio.h>
++#endif
++
+ #define _(str) gettext (str)
+
+ #if HAVE_MMAP
+@@ -132,6 +136,7 @@
+ const int fd = -1;
+ const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+ # else /* !HAVE_MAP_ANONYMOUS */
++ static int beenhere = 0;
+ static int fd = -1; /* Only open /dev/zero once in order to avoid limiting
+ the amount of memory we may allocate based on the
+ number of open file descriptors. */
+@@ -140,7 +145,20 @@
+ {
+ fd = open ("/dev/zero", O_RDONLY, 0666);
+ if (fd < 0)
+- error (EXIT_FAILURE, errno, _("Failed to open /dev/zero for read"));
++ {
++ if (!beenhere)
++ {
++ beenhere = 1;
++ error (EXIT_FAILURE, errno, _("Failed to open /dev/zero for read"));
++ }
++ else
++ {
++ fprintf (stderr, "Fatal in pagealign: %s\n",
++ _("Failed to open /dev/zero for read"));
++ fflush (stderr);
++ _exit (EXIT_FAILURE);
++ }
++ }
+ }
+ # endif /* HAVE_MAP_ANONYMOUS */
+ ret = mmap (NULL, size, PROT_READ | PROT_WRITE, flags, fd, 0);
+--- cvs-1.12.13+real.orig/lib/regcomp.c
++++ cvs-1.12.13+real/lib/regcomp.c
+@@ -1652,8 +1652,6 @@
+ && dfa->edests[node].nelem
+ && !dfa->nodes[dfa->edests[node].elems[0]].duplicated)
+ {
+- Idx org_node, cur_node;
+- org_node = cur_node = node;
+ err = duplicate_node_closure (dfa, node, node, node, constraint);
+ if (BE (err != REG_NOERROR, 0))
+ return err;
+--- cvs-1.12.13+real.orig/lib/regex_internal.c
++++ cvs-1.12.13+real/lib/regex_internal.c
+@@ -629,7 +629,7 @@
+
+ if (pstr->is_utf8)
+ {
+- const unsigned char *raw, *p, *q, *end;
++ const unsigned char *raw, *p, *end;
+
+ /* Special case UTF-8. Multi-byte chars start with any
+ byte other than 0x80 - 0xbf. */
+@@ -641,17 +641,8 @@
+ mbstate_t cur_state;
+ wchar_t wc2;
+ Idx mlen = raw + pstr->len - p;
+- unsigned char buf[6];
+ size_t mbclen;
+
+- q = p;
+- if (BE (pstr->trans != NULL, 0))
+- {
+- int i = mlen < 6 ? mlen : 6;
+- while (--i >= 0)
+- buf[i] = pstr->trans[p[i]];
+- q = buf;
+- }
+ /* XXX Don't use mbrtowc, we know which conversion
+ to use (UTF-8 -> UCS4). */
+ memset (&cur_state, 0, sizeof (cur_state));
+--- cvs-1.12.13+real.orig/lib/regex_internal.h
++++ cvs-1.12.13+real/lib/regex_internal.h
+@@ -451,7 +451,9 @@
+ #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx))
+ #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx))
+
++#ifdef HAVE_ALLOCA_H
+ #include <alloca.h>
++#endif
+
+ #ifndef _LIBC
+ # if HAVE_ALLOCA
+--- cvs-1.12.13+real.orig/lib/sunos57-select.c
++++ cvs-1.12.13+real/lib/sunos57-select.c
+@@ -40,6 +40,11 @@
+ #include <sys/stat.h>
+ #include <errno.h>
+
++#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
++# include <string.h>
++#else
++# include <strings.h>
++#endif
+ #ifdef HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif /* HAVE_UNISTD_H */
+--- cvs-1.12.13+real.orig/lib/test-getdate.sh
++++ cvs-1.12.13+real/lib/test-getdate.sh
+@@ -1,4 +1,5 @@
+ #! /bin/sh
++# $MirOS: src/gnu/usr.bin/cvs/lib/test-getdate.sh,v 1.2 2016/10/22 15:34:32 tg Exp $
+
+ # Test that a getdate executable meets its specification.
+ #
+@@ -19,6 +20,11 @@
+ # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+
++# as this uses POSIX behaviour and does not count leap seconds...
++if test -n "$GETDATE_LD_PRELOAD"; then
++ LD_PRELOAD=$GETDATE_LD_PRELOAD
++ export LD_PRELOAD
++fi
+
+ ###
+ ### Globals
+@@ -113,10 +119,9 @@
+ NTZ=`TZ=$1 date +%Z`
+ if test "$NTZ" = "$UTZ" || test "$NTZ" = "$1"; then
+ skipreason="$1 is not a recognized timezone on this system"
+- return `false`
+- else
+- return `:`
++ return 1
+ fi
++ :
+ }
+
+
+@@ -184,22 +189,22 @@
+
+ cat >getdate-expected <<EOF
+ Enter date, or blank line to exit.
+- > Bad format - couldn't convert.
+- > Bad format - couldn't convert.
+- > 1972-12-05 00:00:00.000000000
+- > 1974-03-29 00:00:00.000000000
+- > 1996-05-12 13:57:45.000000000
+- > 2012-05-12 00:00:00.000000000
+- > 1996-05-12 00:00:00.000000000
+- > Bad format - couldn't convert.
+- > Bad format - couldn't convert.
+- > 1970-01-01 02:00:00.000000000
+- > Bad format - couldn't convert.
+- > 1969-12-31 22:00:00.000000000
+- > Bad format - couldn't convert.
+- > 1970-01-01 06:00:00.000000000
+- > 1997-01-12 00:00:00.000000000
+- >
++> Bad format - couldn't convert.
++> Bad format - couldn't convert.
++> 92361600 = 1972-12-05 00:00:00.000000000
++> 133747200 = 1974-03-29 00:00:00.000000000
++> 831909465 = 1996-05-12 13:57:45.000000000
++> 1336780800 = 2012-05-12 00:00:00.000000000
++> 831859200 = 1996-05-12 00:00:00.000000000
++> Bad format - couldn't convert.
++> Bad format - couldn't convert.
++> 7200 = 1970-01-01 02:00:00.000000000
++> Bad format - couldn't convert.
++> -7200 = 1969-12-31 22:00:00.000000000
++> Bad format - couldn't convert.
++> 21600 = 1970-01-01 06:00:00.000000000
++> 853027200 = 1997-01-12 00:00:00.000000000
++>
+ EOF
+
+ ./getdate >getdate-got <<EOF
+@@ -235,22 +240,22 @@
+ if valid_timezone $TZ; then
+ cat >getdate-expected <<EOF
+ Enter date, or blank line to exit.
+- > 2005-03-01 00:00:00.000000000
+- > 2005-03-27 00:00:00.000000000
+- > 2005-03-28 01:00:00.000000000
+- > 2005-03-28 01:00:00.000000000
+- > 2005-03-29 01:00:00.000000000
+- > 2005-03-29 01:00:00.000000000
+- > 2005-03-30 01:00:00.000000000
+- > 2005-03-30 01:00:00.000000000
+- > 2005-03-31 01:00:00.000000000
+- > 2005-03-31 01:00:00.000000000
+- > 2005-04-01 01:00:00.000000000
+- > 2005-04-01 01:00:00.000000000
+- > 2005-04-10 01:00:00.000000000
+- > 2005-04-10 01:00:00.000000000
+- > 2005-04-01 00:00:00.000000000
+- >
++> 1109635200 = 2005-03-01 00:00:00.000000000
++> 1111881600 = 2005-03-27 00:00:00.000000000
++> 1111968000 = 2005-03-28 01:00:00.000000000
++> 1111968000 = 2005-03-28 01:00:00.000000000
++> 1112054400 = 2005-03-29 01:00:00.000000000
++> 1112054400 = 2005-03-29 01:00:00.000000000
++> 1112140800 = 2005-03-30 01:00:00.000000000
++> 1112140800 = 2005-03-30 01:00:00.000000000
++> 1112227200 = 2005-03-31 01:00:00.000000000
++> 1112227200 = 2005-03-31 01:00:00.000000000
++> 1112313600 = 2005-04-01 01:00:00.000000000
++> 1112313600 = 2005-04-01 01:00:00.000000000
++> 1113091200 = 2005-04-10 01:00:00.000000000
++> 1113091200 = 2005-04-10 01:00:00.000000000
++> 1112310000 = 2005-04-01 00:00:00.000000000
++>
+ EOF
+
+ ./getdate >getdate-got <<EOF
+@@ -297,20 +302,20 @@
+ if valid_timezone $TZ; then
+ cat >getdate-expected <<EOF
+ Enter date, or blank line to exit.
+- > 2005-03-01 00:00:00.000000000
+- > 2005-02-28 18:00:00.000000000
+- > 2005-04-01 00:00:00.000000000
+- > Bad format - couldn't convert.
+- > 2005-04-30 19:00:00.000000000
+- > 2005-04-30 20:00:00.000000000
+- > 2005-05-01 00:00:00.000000000
+- > 2005-04-30 20:00:00.000000000
+- > Bad format - couldn't convert.
+- > 2005-05-31 19:00:00.000000000
+- > 2005-05-31 20:00:00.000000000
+- > 2005-06-01 00:00:00.000000000
+- > 2005-05-31 20:00:00.000000000
+- >
++> 1109653200 = 2005-03-01 00:00:00.000000000
++> 1109631600 = 2005-02-28 18:00:00.000000000
++> 1112331600 = 2005-04-01 00:00:00.000000000
++> Bad format - couldn't convert.
++> 1114902000 = 2005-04-30 19:00:00.000000000
++> 1114905600 = 2005-04-30 20:00:00.000000000
++> 1114920000 = 2005-05-01 00:00:00.000000000
++> 1114905600 = 2005-04-30 20:00:00.000000000
++> Bad format - couldn't convert.
++> 1117580400 = 2005-05-31 19:00:00.000000000
++> 1117584000 = 2005-05-31 20:00:00.000000000
++> 1117598400 = 2005-06-01 00:00:00.000000000
++> 1117584000 = 2005-05-31 20:00:00.000000000
++>
+ EOF
+
+ ./getdate >getdate-got <<EOF
+--- cvs-1.12.13+real.orig/lib/vasnprintf.c
++++ cvs-1.12.13+real/lib/vasnprintf.c
+@@ -26,7 +26,9 @@
+ # include <config.h>
+ #endif
+ #ifndef IN_LIBINTL
++# ifdef HAVE_ALLOCA_H
+ # include <alloca.h>
++# endif
+ #endif
+
+ /* Specification. */
+@@ -100,7 +102,12 @@
+ # define DIRECTIVE char_directive
+ # define DIRECTIVES char_directives
+ # define PRINTF_PARSE printf_parse
++#if 0
++/* disabled for security reasons, to avoid having %n in writable memory */
+ # define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF)
++#else
++# define USE_SNPRINTF 0
++#endif
+ # if HAVE_DECL__SNPRINTF
+ /* Windows. */
+ # define SNPRINTF _snprintf
+@@ -591,11 +598,12 @@
+ {
+ size_t maxlen;
+ int count;
+- int retcount;
++#if USE_SNPRINTF
++ int retcount = 0;
++#endif
+
+ maxlen = allocated - length;
+ count = -1;
+- retcount = 0;
+
+ #if USE_SNPRINTF
+ # define SNPRINTF_BUF(arg) \
+--- cvs-1.12.13+real.orig/m4/getdate.m4
++++ cvs-1.12.13+real/m4/getdate.m4
+@@ -6,7 +6,7 @@
+
+ AC_DEFUN([gl_GETDATE],
+ [
+- AC_LIBSOURCES([getdate.h, getdate.y])
++ AC_LIBSOURCES([getdate.h, getdate.c])
+ AC_LIBOBJ([getdate])
+
+ dnl Prerequisites of lib/getdate.h.
+--- cvs-1.12.13+real.orig/m4/longdouble.m4
++++ cvs-1.12.13+real/m4/longdouble.m4
+@@ -8,21 +8,12 @@
+ dnl Test whether the compiler supports the 'long double' type.
+ dnl Prerequisite: AC_PROG_CC
+
++dnl $MirOS: src/gnu/usr.bin/cvs/m4/longdouble.m4,v 1.4 2016/10/22 03:36:43 tg Exp $
++
+ AC_DEFUN([gt_TYPE_LONGDOUBLE],
+ [
+- AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
+- [if test "$GCC" = yes; then
+- gt_cv_c_long_double=yes
+- else
+- AC_TRY_COMPILE([
+- /* The Stardent Vistra knows sizeof(long double), but does not support it. */
+- long double foo = 0.0;
+- /* On Ultrix 4.3 cc, long double is 4 and double is 8. */
+- int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+- ], ,
+- gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
+- fi])
+- if test $gt_cv_c_long_double = yes; then
++ AC_CHECK_TYPE([long double], [gt_cv_c_long_double=yes], [gt_cv_c_long_double=no])
++ if test x"$gt_cv_c_long_double" = x"yes"; then
+ AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
+ fi
+ ])
+--- cvs-1.12.13+real.orig/m4/mktime.m4
++++ cvs-1.12.13+real/m4/mktime.m4
+@@ -6,6 +6,9 @@
+
+ dnl From Jim Meyering.
+
++dnl Test program updated to git faefb77009239f82ac2f77ac0c10d71d4f38af07
++dnl for Debian.
++
+ # Redefine AC_FUNC_MKTIME, to fix a bug in Autoconf 2.57 and earlier.
+ # This redefinition can be removed once a new version of Autoconf comes out.
+ # The redefinition is taken from
+@@ -19,27 +22,16 @@
+ AC_CACHE_CHECK([for working mktime], ac_cv_func_working_mktime,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE(
+ [[/* Test program from Paul Eggert and Tony Leneis. */
+-#if TIME_WITH_SYS_TIME
+-# include <sys/time.h>
+-# include <time.h>
+-#else
+-# if HAVE_SYS_TIME_H
+-# include <sys/time.h>
+-# else
+-# include <time.h>
+-# endif
+-#endif
++#include <limits.h>
++#include <stdlib.h>
++#include <time.h>
+
+-#if HAVE_STDLIB_H
+-# include <stdlib.h>
+-#endif
+-
+-#if HAVE_UNISTD_H
++#ifdef HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif
+
+-#if !HAVE_ALARM
+-# define alarm(X) /* empty */
++#if HAVE_DECL_ALARM
++# include <signal.h>
+ #endif
+
+ /* Work around redefinition to rpl_putenv by other config tests. */
+@@ -55,9 +47,9 @@
+ };
+ #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0]))
+
+-/* Fail if mktime fails to convert a date in the spring-forward gap.
++/* Return 0 if mktime fails to convert a date in the spring-forward gap.
+ Based on a problem report from Andreas Jaeger. */
+-static void
++static int
+ spring_forward_gap ()
+ {
+ /* glibc (up to about 1998-10-07) failed this test. */
+@@ -76,29 +68,25 @@
+ tm.tm_min = 0;
+ tm.tm_sec = 0;
+ tm.tm_isdst = -1;
+- if (mktime (&tm) == (time_t)-1)
+- exit (1);
++ return mktime (&tm) != (time_t) -1;
+ }
+
+-static void
+-mktime_test1 (now)
+- time_t now;
++static int
++mktime_test1 (time_t now)
+ {
+ struct tm *lt;
+- if ((lt = localtime (&now)) && mktime (lt) != now)
+- exit (1);
++ return ! (lt = localtime (&now)) || mktime (lt) == now;
+ }
+
+-static void
+-mktime_test (now)
+- time_t now;
++static int
++mktime_test (time_t now)
+ {
+- mktime_test1 (now);
+- mktime_test1 ((time_t) (time_t_max - now));
+- mktime_test1 ((time_t) (time_t_min + now));
++ return (mktime_test1 (now)
++ && mktime_test1 ((time_t) (time_t_max - now))
++ && mktime_test1 ((time_t) (time_t_min + now)));
+ }
+
+-static void
++static int
+ irix_6_4_bug ()
+ {
+ /* Based on code from Ariel Faigon. */
+@@ -111,13 +99,11 @@
+ tm.tm_sec = 0;
+ tm.tm_isdst = -1;
+ mktime (&tm);
+- if (tm.tm_mon != 2 || tm.tm_mday != 31)
+- exit (1);
++ return tm.tm_mon == 2 && tm.tm_mday == 31;
+ }
+
+-static void
+-bigtime_test (j)
+- int j;
++static int
++bigtime_test (int j)
+ {
+ struct tm tm;
+ time_t now;
+@@ -127,56 +113,110 @@
+ {
+ struct tm *lt = localtime (&now);
+ if (! (lt
+- && lt->tm_year == tm.tm_year
+- && lt->tm_mon == tm.tm_mon
+- && lt->tm_mday == tm.tm_mday
+- && lt->tm_hour == tm.tm_hour
+- && lt->tm_min == tm.tm_min
+- && lt->tm_sec == tm.tm_sec
+- && lt->tm_yday == tm.tm_yday
+- && lt->tm_wday == tm.tm_wday
+- && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
+- == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
+- exit (1);
++ && lt->tm_year == tm.tm_year
++ && lt->tm_mon == tm.tm_mon
++ && lt->tm_mday == tm.tm_mday
++ && lt->tm_hour == tm.tm_hour
++ && lt->tm_min == tm.tm_min
++ && lt->tm_sec == tm.tm_sec
++ && lt->tm_yday == tm.tm_yday
++ && lt->tm_wday == tm.tm_wday
++ && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
++ == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
++ return 0;
+ }
++ return 1;
++}
++
++static int
++year_2050_test ()
++{
++ /* The correct answer for 2050-02-01 00:00:00 in Pacific time,
++ ignoring leap seconds. */
++ unsigned long int answer = 2527315200UL;
++
++ struct tm tm;
++ time_t t;
++ tm.tm_year = 2050 - 1900;
++ tm.tm_mon = 2 - 1;
++ tm.tm_mday = 1;
++ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
++ tm.tm_isdst = -1;
++
++ /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
++ instead of "TZ=America/Vancouver" in order to detect the bug even
++ on systems that don't support the Olson extension, or don't have the
++ full zoneinfo tables installed. */
++ putenv ("TZ=PST8PDT,M4.1.0,M10.5.0");
++
++ t = mktime (&tm);
++
++ /* Check that the result is either a failure, or close enough
++ to the correct answer that we can assume the discrepancy is
++ due to leap seconds. */
++ return (t == (time_t) -1
++ || (0 < t && answer - 120 <= t && t <= answer + 120));
+ }
+
+ int
+ main ()
+ {
++ int result = 0;
+ time_t t, delta;
+ int i, j;
++ int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1;
++ int time_t_signed = ! ((time_t) 0 < (time_t) -1);
+
++#if HAVE_DECL_ALARM
+ /* This test makes some buggy mktime implementations loop.
+ Give up after 60 seconds; a mktime slower than that
+ isn't worth using anyway. */
++ signal (SIGALRM, SIG_DFL);
+ alarm (60);
++#endif
++
++ time_t_max = (! time_t_signed
++ ? (time_t) -1
++ : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1)
++ * 2 + 1));
++ time_t_min = (! time_t_signed
++ ? (time_t) 0
++ : time_t_signed_magnitude
++ ? ~ (time_t) 0
++ : ~ time_t_max);
+
+- for (time_t_max = 1; 0 < time_t_max; time_t_max *= 2)
+- continue;
+- time_t_max--;
+- if ((time_t) -1 < 0)
+- for (time_t_min = -1; (time_t) (time_t_min * 2) < 0; time_t_min *= 2)
+- continue;
+ delta = time_t_max / 997; /* a suitable prime number */
+ for (i = 0; i < N_STRINGS; i++)
+ {
+ if (tz_strings[i])
+- putenv (tz_strings[i]);
++ putenv (tz_strings[i]);
+
+- for (t = 0; t <= time_t_max - delta; t += delta)
+- mktime_test (t);
+- mktime_test ((time_t) 1);
+- mktime_test ((time_t) (60 * 60));
+- mktime_test ((time_t) (60 * 60 * 24));
+-
+- for (j = 1; 0 < j; j *= 2)
+- bigtime_test (j);
+- bigtime_test (j - 1);
++ for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta)
++ if (! mktime_test (t))
++ result |= 1;
++ if ((result & 2) == 0
++ && ! (mktime_test ((time_t) 1)
++ && mktime_test ((time_t) (60 * 60))
++ && mktime_test ((time_t) (60 * 60 * 24))))
++ result |= 2;
++
++ for (j = 1; (result & 4) == 0; j <<= 1)
++ {
++ if (! bigtime_test (j))
++ result |= 4;
++ if (INT_MAX / 2 < j)
++ break;
++ }
++ if ((result & 8) == 0 && ! bigtime_test (INT_MAX))
++ result |= 8;
+ }
+- irix_6_4_bug ();
+- spring_forward_gap ();
+- exit (0);
++ if (! irix_6_4_bug ())
++ result |= 16;
++ if (! spring_forward_gap ())
++ result |= 32;
++ if (! year_2050_test ())
++ result |= 64;
++ return result;
+ }]])],
+ [ac_cv_func_working_mktime=yes],
+ [ac_cv_func_working_mktime=no],
+--- cvs-1.12.13+real.orig/man/cvs.5
++++ cvs-1.12.13+real/man/cvs.5
+@@ -1,3 +1,4 @@
++.\" $MirOS: src/gnu/usr.bin/cvs/man/cvs.5,v 1.3 2010/09/19 19:43:00 tg Exp $
+ .TH cvs 5 "12 February 1992"
+ .\" Full space in nroff; half space in troff
+ .de SP
+@@ -238,9 +239,9 @@
+ .B add
+ for `tag',
+ .B mov
+-for `tag -F', and
++for `tag \-F', and
+ .B del
+-for `tag -d`),
++for `tag \-d`),
+ .I repository ,
+ and any remaining are pairs of
+ .B "filename revision" .
+--- cvs-1.12.13+real.orig/src/Makefile.am
++++ cvs-1.12.13+real/src/Makefile.am
+@@ -1,4 +1,5 @@
+ ## Process this file with automake to produce Makefile.in
++# $MirOS: src/gnu/usr.bin/cvs/src/Makefile.am,v 1.8 2011/12/04 22:50:41 tg Exp $
+ # Makefile for GNU CVS program.
+ #
+ # Copyright (C) 1986-2005 The Free Software Foundation, Inc.
+@@ -22,7 +23,6 @@
+ -I$(top_srcdir)/diff $(ZLIB_CPPFLAGS)
+
+ bin_PROGRAMS = cvs
+-bin_SCRIPTS = cvsbug
+
+ # The cvs executable
+ cvs_SOURCES = \
+@@ -79,6 +79,7 @@
+ stack.c stack.h \
+ status.c \
+ subr.c subr.h \
++ suck.c \
+ tag.c \
+ update.c \
+ version.c \
+@@ -109,6 +110,7 @@
+ ../diff/libdiff.a \
+ ../lib/libcvs.a \
+ $(ZLIB_LIBS)
++cvs_LDFLAGS = -Wl,--as-needed
+ cvs_LDADD = $(cvs_client_objects) \
+ ../diff/libdiff.a \
+ ../lib/libcvs.a \
+--- cvs-1.12.13+real.orig/src/add.c
++++ cvs-1.12.13+real/src/add.c
+@@ -532,7 +532,8 @@
+ free (bbuf);
+ }
+ Register (entries, finfo.file, "0",
+- timestamp ? timestamp : vers->ts_user,
++ timestamp ? timestamp :
++ vers->ts_user_ists ? "locally added" : vers->ts_user,
+ vers->options, vers->tag, vers->date, NULL);
+ if (timestamp) free (timestamp);
+ #ifdef SERVER_SUPPORT
+@@ -784,7 +785,7 @@
+ }
+
+ /* setup the log message */
+- message = Xasprintf ("Directory %s added to the repository\n%s%s%s%s%s%s",
++ message = Xasprintf ("Directory %s put under version control\n%s%s%s%s%s%s",
+ rcsdir,
+ tag ? "--> Using per-directory sticky tag `" : "",
+ tag ? tag : "", tag ? "'\n" : "",
+--- cvs-1.12.13+real.orig/src/admin.c
++++ cvs-1.12.13+real/src/admin.c
+@@ -147,6 +147,7 @@
+ TRACE (TRACE_FUNCTION, "postadmin_proc (%s, %s)", repository, filter);
+
+ /* %c = cvs_cmd_name
++ * %I = commit ID
+ * %R = referrer
+ * %p = shortrepos
+ * %r = repository
+@@ -162,6 +163,7 @@
+ #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+ filter,
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ #ifdef SERVER_SUPPORT
+ "R", "s", referrer ? referrer->original : "NONE",
+ #endif /* SERVER_SUPPORT */
+--- cvs-1.12.13+real.orig/src/annotate.c
++++ cvs-1.12.13+real/src/annotate.c
+@@ -21,6 +21,7 @@
+
+ /* Options from the command line. */
+
++static int backwards = 0;
+ static int force_tag_match = 1;
+ static int force_binary = 0;
+ static char *tag = NULL;
+@@ -36,7 +37,8 @@
+
+ static const char *const annotate_usage[] =
+ {
+- "Usage: %s %s [-lRfF] [-r rev] [-D date] [files...]\n",
++ "Usage: %s %s [-blRfF] [-r rev] [-D date] [files...]\n",
++ "\t-b\tBackwards, show when a line was removed.\n",
+ "\t-l\tLocal directory only, no recursion.\n",
+ "\t-R\tProcess directories recursively.\n",
+ "\t-f\tUse head revision if tag/date not found.\n",
+@@ -63,10 +65,13 @@
+ usage (annotate_usage);
+
+ optind = 0;
+- while ((c = getopt (argc, argv, "+lr:D:fFR")) != -1)
++ while ((c = getopt (argc, argv, "+blr:D:fFR")) != -1)
+ {
+ switch (c)
+ {
++ case 'b':
++ backwards = 1;
++ break;
+ case 'l':
+ local = 1;
+ break;
+@@ -105,6 +110,8 @@
+
+ ign_setup ();
+
++ if (backwards)
++ send_arg ("-b");
+ if (local)
+ send_arg ("-l");
+ if (!force_tag_match)
+@@ -280,7 +287,8 @@
+ else
+ {
+ RCS_deltas (finfo->rcs, NULL, NULL,
+- version, RCS_ANNOTATE, NULL, NULL, NULL, NULL);
++ version, backwards ? RCS_ANNOTATE_BACKWARDS : RCS_ANNOTATE,
++ NULL, NULL, NULL, NULL);
+ }
+ free (version);
+ return 0;
+--- cvs-1.12.13+real.orig/src/buffer.c
++++ cvs-1.12.13+real/src/buffer.c
+@@ -536,9 +536,10 @@
+ void
+ buf_free_data (struct buffer *buffer)
+ {
+- if (buf_empty_p (buffer)) return;
++ if (buffer->data) {
+ buf_free_datas (buffer->data, buffer->last);
+ buffer->data = buffer->last = NULL;
++ }
+ }
+
+
+--- cvs-1.12.13+real.orig/src/client.c
++++ cvs-1.12.13+real/src/client.c
+@@ -3510,6 +3510,17 @@
+ sock = socket (AF_INET, SOCK_STREAM, 0);
+ if (sock == -1)
+ error (1, 0, "cannot create socket: %s", SOCK_STRERROR (SOCK_ERRNO));
++
++#ifdef TCP_NODELAY
++ /* Avoid latency due to Nagle algorithm. */
++ {
++ int on = 1;
++
++ if (setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof on) < 0)
++ error (0, errno, "warning: cannot set TCP_NODELAY on socket");
++ }
++#endif
++
+ port_number = get_cvs_port_number (root);
+
+ /* if we have a proxy connect to that instead */
+@@ -3558,9 +3569,9 @@
+ * code.
+ */
+ read_line_via (from_server, to_server, &read_buf);
+- sscanf (read_buf, "%s %d", write_buf, &codenum);
++ count = sscanf (read_buf, "%*s %d", &codenum);
+
+- if ((codenum / 100) != 2)
++ if (count != 1 || (codenum / 100) != 2)
+ error (1, 0, "proxy server %s:%d does not support http tunnelling",
+ root->proxy_hostname, proxy_port_number);
+ free (read_buf);
+@@ -3901,8 +3912,12 @@
+ case ext_method:
+ #ifdef NO_EXT_METHOD
+ error (0, 0, ":ext: method not supported by this port of CVS");
++ if (0)
++ case extssh_method:
++ error (0, 0, ":extssh: method not supported by this port of CVS");
+ error (1, 0, "try :server: instead");
+ #else /* ! NO_EXT_METHOD */
++ case extssh_method:
+ start_rsh_server (root, to_server_p,
+ from_server_p);
+ #endif /* NO_EXT_METHOD */
+@@ -4362,7 +4377,7 @@
+ sprintf (tmp, "%lu\n", (unsigned long) newsize);
+ send_to_server (tmp, 0);
+
+- send_to_server (buf, newsize);
++ send_to_server ((const void *)buf, newsize);
+ }
+ }
+ else
+@@ -4415,7 +4430,7 @@
+ * one.
+ */
+ if (newsize > 0)
+- send_to_server (buf, newsize);
++ send_to_server ((const void *)buf, newsize);
+ }
+ free (buf);
+ free (mode_string);
+--- cvs-1.12.13+real.orig/src/client.h
++++ cvs-1.12.13+real/src/client.h
+@@ -213,6 +213,7 @@
+ #if defined AUTH_CLIENT_SUPPORT || defined HAVE_KERBEROS || defined HAVE_GSSAPI
+ # include <sys/socket.h>
+ # include <netinet/in.h>
++# include <netinet/tcp.h>
+ # include <arpa/inet.h>
+ # include <netdb.h>
+ struct hostent *init_sockaddr (struct sockaddr_in *, char *, unsigned int);
+--- cvs-1.12.13+real.orig/src/commit.c
++++ cvs-1.12.13+real/src/commit.c
+@@ -613,31 +613,7 @@
+
+ send_to_server ("ci\012", 0);
+ err = get_responses_and_close ();
+- if (err != 0 && use_editor && saved_message != NULL)
+- {
+- /* If there was an error, don't nuke the user's carefully
+- constructed prose. This is something of a kludge; a better
+- solution is probably more along the lines of #150 in TODO
+- (doing a second up-to-date check before accepting the
+- log message has also been suggested, but that seems kind of
+- iffy because the real up-to-date check could still fail,
+- another error could occur, &c. Also, a second check would
+- slow things down). */
+-
+- char *fname;
+- FILE *fp;
+-
+- fp = cvs_temp_file (&fname);
+- if (fp == NULL)
+- error (1, 0, "cannot create temporary file %s", fname);
+- if (fwrite (saved_message, 1, strlen (saved_message), fp)
+- != strlen (saved_message))
+- error (1, errno, "cannot write temporary file %s", fname);
+- if (fclose (fp) < 0)
+- error (0, errno, "cannot close temporary file %s", fname);
+- error (0, 0, "saving log message in %s", fname);
+- free (fname);
+- }
++ logmsg_cleanup(err);
+ return err;
+ }
+ #endif
+@@ -702,6 +678,7 @@
+ sleep_past (last_register_time);
+ }
+
++ logmsg_cleanup(err);
+ return err;
+ }
+
+@@ -853,7 +830,7 @@
+ case T_ADDED:
+ case T_REMOVED:
+ {
+- char *editor;
++ char *editor = NULL;
+
+ /*
+ * some quick sanity checks; if no numeric -r option specified:
+@@ -1250,6 +1227,7 @@
+ #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+ filter,
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ #ifdef SERVER_SUPPORT
+ "R", "s", referrer ? referrer->original : "NONE",
+ #endif /* SERVER_SUPPORT */
+@@ -2255,9 +2233,10 @@
+ this was added into the log message. */
+ t = time (NULL);
+ ct = gmtime (&t);
+- tmp = Xasprintf ("file %s was added on branch %s on %d-%02d-%02d %02d:%02d:%02d +0000",
++ tmp = Xasprintf ("file %s was added on branch %s on %ld-%02d-%02d %02d:%02d:%02d +0000",
+ file, tag,
+- ct->tm_year + (ct->tm_year < 100 ? 0 : 1900),
++ (long)ct->tm_year
++ + (ct->tm_year < 100 ? 0 : 1900),
+ ct->tm_mon + 1, ct->tm_mday,
+ ct->tm_hour, ct->tm_min, ct->tm_sec);
+
+--- cvs-1.12.13+real.orig/src/cvs.h
++++ cvs-1.12.13+real/src/cvs.h
+@@ -1,3 +1,5 @@
++/* $MirOS: src/gnu/usr.bin/cvs/src/cvs.h,v 1.7 2016/10/21 16:41:16 tg Exp $ */
++
+ /*
+ * Copyright (C) 1986-2005 The Free Software Foundation, Inc.
+ *
+@@ -365,6 +367,7 @@
+
+ extern const char *program_name, *program_path, *cvs_cmd_name;
+ extern char *Editor;
++extern char *LogMsgFile;
+ extern int cvsadmin_root;
+ extern char *CurDir;
+ extern int really_quiet, quiet;
+@@ -504,6 +507,8 @@
+ int unlink_file (const char *f);
+ int unlink_file_dir (const char *f);
+
++int suck (int argc, char *argv[]);
++
+ /* This is the structure that the recursion processor passes to the
+ fileproc to tell it about a particular file. */
+ struct file_info
+@@ -629,6 +634,7 @@
+ FILE *xlogfp, List *xchanges);
+ void do_editor (const char *dir, char **messagep,
+ const char *repository, List *changes);
++void logmsg_cleanup (int err);
+
+ void do_verify (char **messagep, const char *repository, List *changes);
+
+@@ -726,7 +732,7 @@
+ /* This is the timestamp from stating the file in the working directory.
+ It is NULL if there is no file in the working directory. It is
+ "Is-modified" if we know the file is modified but don't have its
+- contents. */
++ contents. See also: ts_user_ists. */
+ char *ts_user;
+ /* Timestamp from CVS/Entries. For the server, ts_user and ts_rcs
+ are computed in a slightly different way, but the fact remains that
+@@ -759,6 +765,9 @@
+
+ /* Pointer to parsed src file info */
+ RCSNode *srcfile;
++
++ /* 1 if ts_user is known to be the actual timestamp of a local file */
++ unsigned char ts_user_ists;
+ };
+ typedef struct vers_ts Vers_TS;
+
+--- cvs-1.12.13+real.orig/src/cvsrc.c
++++ cvs-1.12.13+real/src/cvsrc.c
+@@ -41,6 +41,7 @@
+ size_t line_chars_allocated;
+
+ char *optstart;
++ int white_len = 0;
+
+ int command_len;
+ int found = 0;
+@@ -96,9 +97,12 @@
+ if (line[0] == '#')
+ continue;
+
++ while (isspace(line[white_len]))
++ ++white_len;
++
+ /* stop if we match the current command */
+- if (!strncmp (line, cmdname, command_len)
+- && isspace ((unsigned char) *(line + command_len)))
++ if (!strncmp (line + white_len, cmdname, command_len)
++ && isspace ((unsigned char) *(line + white_len + command_len)))
+ {
+ found = 1;
+ break;
+@@ -120,7 +124,7 @@
+ if (found)
+ {
+ /* skip over command in the options line */
+- for (optstart = strtok (line + command_len, "\t \n");
++ for (optstart = strtok (line + white_len + command_len, "\t \n");
+ optstart;
+ optstart = strtok (NULL, "\t \n"))
+ {
+--- cvs-1.12.13+real.orig/src/diff.c
++++ cvs-1.12.13+real/src/diff.c
+@@ -21,6 +21,8 @@
+
+ #include "cvs.h"
+
++#define TAG_BHEAD ".bhead"
++
+ enum diff_file
+ {
+ DIFF_ERROR,
+@@ -444,9 +446,9 @@
+ }
+ #endif
+
+- if (diff_rev1 != NULL)
++ if (diff_rev1 != NULL && strcmp(diff_rev1, TAG_BHEAD))
+ tag_check_valid (diff_rev1, argc, argv, local, 0, "", false);
+- if (diff_rev2 != NULL)
++ if (diff_rev2 != NULL && strcmp(diff_rev2, TAG_BHEAD))
+ tag_check_valid (diff_rev2, argc, argv, local, 0, "", false);
+
+ which = W_LOCAL;
+@@ -903,8 +905,14 @@
+
+ if (diff_rev1 || diff_date1)
+ {
+- /* special handling for TAG_HEAD */
+- if (diff_rev1 && strcmp (diff_rev1, TAG_HEAD) == 0)
++ /*
++ * the special handling is broken, -rbranchname is the
++ * head (tip) of the branch already, -rHEAD is supposed
++ * to be the head (tip) of the MAIN branch (trunk); we
++ * introduce ".bhead" here, for now, but only here
++ */
++ /* special handling for TAG_BHEAD */
++ if (diff_rev1 && strcmp (diff_rev1, TAG_BHEAD) == 0)
+ {
+ if (vers->vn_rcs != NULL && vers->srcfile != NULL)
+ use_rev1 = RCS_branch_head (vers->srcfile, vers->vn_rcs);
+@@ -919,8 +927,8 @@
+ }
+ if (diff_rev2 || diff_date2)
+ {
+- /* special handling for TAG_HEAD */
+- if (diff_rev2 && strcmp (diff_rev2, TAG_HEAD) == 0)
++ /* special handling for TAG_BHEAD */
++ if (diff_rev2 && strcmp (diff_rev2, TAG_BHEAD) == 0)
+ {
+ if (vers->vn_rcs && vers->srcfile)
+ use_rev2 = RCS_branch_head (vers->srcfile, vers->vn_rcs);
+--- cvs-1.12.13+real.orig/src/edit.c
++++ cvs-1.12.13+real/src/edit.c
+@@ -828,6 +828,7 @@
+ #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+ filter,
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ #ifdef SERVER_SUPPORT
+ "R", "s", referrer ? referrer->original : "NONE",
+ #endif /* SERVER_SUPPORT */
+--- cvs-1.12.13+real.orig/src/error.c
++++ cvs-1.12.13+real/src/error.c
+@@ -208,7 +208,7 @@
+ * with the message here.
+ */
+ #if HAVE_SYSLOG_H
+- syslog (LOG_DAEMON | LOG_EMERG, "Memory exhausted. Aborting.");
++ syslog (LOG_DAEMON | LOG_CRIT, "Memory exhausted. Aborting.");
+ #endif /* HAVE_SYSLOG_H */
+
+ goto sidestep_done;
+@@ -219,18 +219,18 @@
+ * error while attempting to send the last error message to the client.
+ */
+
+- syslog (LOG_DAEMON | LOG_EMERG,
++ syslog (LOG_DAEMON | LOG_ALERT,
+ "error (%d, %d) called recursively. Original message was:",
+ last_status, last_errnum);
+- syslog (LOG_DAEMON | LOG_EMERG, "%s", last_message);
++ syslog (LOG_DAEMON | LOG_ALERT, "%s", last_message);
+
+
+- syslog (LOG_DAEMON | LOG_EMERG,
++ syslog (LOG_DAEMON | LOG_ALERT,
+ "error (%d, %d) called recursively. Second message was:",
+ status, errnum);
+- syslog (LOG_DAEMON | LOG_EMERG, "%s", buf2);
++ syslog (LOG_DAEMON | LOG_ALERT, "%s", buf2);
+
+- syslog (LOG_DAEMON | LOG_EMERG, "Aborting.");
++ syslog (LOG_DAEMON | LOG_ALERT, "Aborting.");
+ #endif /* HAVE_SYSLOG_H */
+
+ sidestep_done:
+--- cvs-1.12.13+real.orig/src/fileattr.c
++++ cvs-1.12.13+real/src/fileattr.c
+@@ -514,6 +514,7 @@
+ TRACE (TRACE_FUNCTION, "postwatch_proc (%s, %s)", repository, filter);
+
+ /* %c = command name
++ * %I = commit ID
+ * %p = shortrepos
+ * %r = repository
+ */
+@@ -528,6 +529,7 @@
+ #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+ filter,
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ #ifdef SERVER_SUPPORT
+ "R", "s", referrer ? referrer->original : "NONE",
+ #endif /* SERVER_SUPPORT */
+--- cvs-1.12.13+real.orig/src/history.c
++++ cvs-1.12.13+real/src/history.c
+@@ -379,7 +379,7 @@
+ static const char *
+ get_history_log_name (time_t now)
+ {
+- char *log_name;
++ char *log_name = NULL;
+
+ if (config->HistoryLogPath)
+ {
+@@ -1561,7 +1561,7 @@
+ tm = localtime (&(lr->date));
+
+ (void) printf ("%c %04d-%02d-%02d %02d:%02d %s %-*s", ty,
+- tm->tm_year+1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour,
++ (int)(tm->tm_year+1900), tm->tm_mon + 1, tm->tm_mday, tm->tm_hour,
+ tm->tm_min, tz_name, user_len, lr->user);
+
+ workdir = xmalloc (strlen (lr->dir) + strlen (lr->end) + 10);
+--- cvs-1.12.13+real.orig/src/import.c
++++ cvs-1.12.13+real/src/import.c
+@@ -238,6 +238,23 @@
+ regfree (&pat);
+ }
+
++ /*
++ * If you use even vendor branches, something evil[TM] can happen.
++ */
++ {
++ regex_t pat;
++ assert (!regcomp (&pat, "^[1-9][0-9]*\\.[1-9][0-9]*\\.[0-9]*[13579]$",
++ REG_EXTENDED));
++ if (regexec (&pat, vbranch, 0, NULL, 0))
++ {
++ error (0, 0,
++ "warning: you are using an even vendor branch, which can\n"
++ "lead to problems: '%s'. Use an odd branch such as '1.1.3' instead.",
++ vbranch);
++ }
++ regfree (&pat);
++ }
++
+ /* Set vhead to the branch's parent. */
+ vhead = xstrdup (vbranch);
+ cp = strrchr (vhead, '.');
+@@ -311,6 +328,7 @@
+ free (vhead);
+ send_to_server ("import\012", 0);
+ err += get_responses_and_close ();
++ logmsg_cleanup(err);
+ return err;
+ }
+ #endif
+@@ -436,6 +454,7 @@
+ free (vbranch);
+ free (vhead);
+
++ logmsg_cleanup(err);
+ return err;
+ }
+
+@@ -595,7 +614,7 @@
+ /* Attempt to make the Attic directory, in case it
+ does not exist. */
+ (void) sprintf (rcs, "%s/%s", repository, CVSATTIC);
+- if (CVS_MKDIR (rcs, 0777 ) != 0 && errno != EEXIST)
++ if (noexec == 0 && CVS_MKDIR (rcs, 0777 ) != 0 && errno != EEXIST)
+ error (1, errno, "cannot make directory `%s'", rcs);
+
+ /* Note that the above clobbered the path name, so we
+@@ -1253,7 +1272,7 @@
+ (void) time (&now);
+ ftm = gmtime (&now);
+ (void) sprintf (altdate1, DATEFORM,
+- ftm->tm_year + (ftm->tm_year < 100 ? 0 : 1900),
++ (long)ftm->tm_year + (ftm->tm_year < 100 ? 0L : 1900L),
+ ftm->tm_mon + 1, ftm->tm_mday, ftm->tm_hour,
+ ftm->tm_min, ftm->tm_sec);
+ author = getcaller ();
+--- cvs-1.12.13+real.orig/src/kerberos4-client.c
++++ cvs-1.12.13+real/src/kerberos4-client.c
+@@ -17,6 +17,8 @@
+ #include "buffer.h"
+ #include "socket-client.h"
+
++#include <netinet/tcp.h>
++
+ # include <krb.h>
+
+ extern char *krb_realmofhost ();
+@@ -48,6 +50,16 @@
+ if (s < 0)
+ error (1, 0, "cannot create socket: %s", SOCK_STRERROR (SOCK_ERRNO));
+
++#ifdef TCP_NODELAY
++ /* Avoid latency due to Nagle algorithm. */
++ {
++ int on = 1;
++
++ if (setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof on) < 0)
++ error (0, errno, "warning: cannot set TCP_NODELAY on socket");
++ }
++#endif
++
+ port = get_cvs_port_number (root);
+
+ hp = init_sockaddr (&sin, root->hostname, port);
+--- cvs-1.12.13+real.orig/src/lock.c
++++ cvs-1.12.13+real/src/lock.c
+@@ -1319,6 +1319,10 @@
+ lock->repository = Xasprintf ("%s/%s", xrepository, CVSROOTADM);
+ lock->free_repository = true;
+
++ /* do nothing if we know it fails anyway */
++ if (readonlyfs)
++ return 0;
++
+ /* get the lock dir for our own */
+ if (set_lock (lock, 1) != L_OK)
+ {
+--- cvs-1.12.13+real.orig/src/login.c
++++ cvs-1.12.13+real/src/login.c
+@@ -200,11 +200,21 @@
+ return NULL;
+ }
+ *p = ' ';
+- tmp_root_canonical = normalize_cvsroot (tmp_root);
+- if (strcmp (cvsroot_canonical, tmp_root_canonical) == 0)
+- password = p + 1;
+-
+- free (tmp_root_canonical);
++ switch (tmp_root->method)
++ {
++ case gserver_method:
++ case pserver_method:
++#ifdef HAVE_KERBEROS
++ case kserver_method:
++#endif /* HAVE_KERBEROS */
++ tmp_root_canonical = normalize_cvsroot (tmp_root);
++ if (strcmp (cvsroot_canonical, tmp_root_canonical) == 0)
++ password = p + 1;
++ free (tmp_root_canonical);
++ break;
++ default:
++ break;
++ }
+ }
+
+ return password;
+@@ -309,7 +319,9 @@
+ fp = CVS_FOPEN (passfile, "r");
+ if (fp == NULL)
+ {
++ if (errno != ENOENT) {
+ error (0, errno, "warning: failed to open %s for reading", passfile);
++ }
+ goto process;
+ }
+
+--- cvs-1.12.13+real.orig/src/logmsg.c
++++ cvs-1.12.13+real/src/logmsg.c
+@@ -31,6 +31,8 @@
+ static FILE *fp;
+ static Ctype type;
+
++char *LogMsgFile = NULL;
++
+ struct verifymsg_proc_data
+ {
+ /* The name of the temp file storing the log message to be verified. This
+@@ -201,6 +203,7 @@
+ char *fname;
+ struct stat pre_stbuf, post_stbuf;
+ int retcode = 0;
++ int finish = 0;
+
+ assert (!current_parsed_root->isremote != !repository);
+
+@@ -224,6 +227,10 @@
+ (*messagep)[strlen (*messagep) - 1] != '\n')
+ (void) fprintf (fp, "\n");
+ }
++ else
++ (void) fputc ('\n', fp);
++ if (finish)
++ goto finish_off;
+
+ if (repository != NULL)
+ /* tack templates on if necessary */
+@@ -267,6 +274,9 @@
+ (void) fprintf (fp,
+ "%s----------------------------------------------------------------------\n",
+ CVSEDITPREFIX);
++ if (readonlyfs)
++ (void) fprintf (fp, "%sATTENTION: read-only mode selected!\n",
++ CVSEDITPREFIX);
+ (void) fprintf (fp,
+ "%sEnter Log. Lines beginning with `%.*s' are removed automatically\n%s\n",
+ CVSEDITPREFIX, CVSEDITPREFIXLEN, CVSEDITPREFIX,
+@@ -280,28 +290,38 @@
+ "%s----------------------------------------------------------------------\n",
+ CVSEDITPREFIX);
+
++ finish_off:
+ /* finish off the temp file */
+ if (fclose (fp) == EOF)
+ error (1, errno, "%s", fname);
+- if (stat (fname, &pre_stbuf) == -1)
++ if (LogMsgFile)
++ {
++ if (unlink_file (LogMsgFile) < 0)
++ error (0, errno, "warning: cannot remove temp file %s", LogMsgFile);
++ free (LogMsgFile);
++ }
++ LogMsgFile = fname;
++ if (finish)
++ return;
++ if (stat (LogMsgFile, &pre_stbuf) == -1)
+ pre_stbuf.st_mtime = 0;
+
+ /* run the editor */
+ run_setup (Editor);
+- run_add_arg (fname);
++ run_add_arg (LogMsgFile);
+ if ((retcode = run_exec (RUN_TTY, RUN_TTY, RUN_TTY,
+ RUN_NORMAL | RUN_SIGIGNORE)) != 0)
+ error (0, retcode == -1 ? errno : 0, "warning: editor session failed");
+
+ /* put the entire message back into the *messagep variable */
+
+- fp = xfopen (fname, "r");
++ fp = xfopen (LogMsgFile, "r");
+
+ if (*messagep)
+ free (*messagep);
+
+- if (stat (fname, &post_stbuf) != 0)
+- error (1, errno, "cannot find size of temp file %s", fname);
++ if (stat (LogMsgFile, &post_stbuf) != 0)
++ error (1, errno, "cannot find size of temp file %s", LogMsgFile);
+
+ if (post_stbuf.st_size == 0)
+ *messagep = NULL;
+@@ -326,7 +346,7 @@
+ if (line_length == -1)
+ {
+ if (ferror (fp))
+- error (0, errno, "warning: cannot read %s", fname);
++ error (0, errno, "warning: cannot read %s", LogMsgFile);
+ break;
+ }
+ if (strncmp (line, CVSEDITPREFIX, CVSEDITPREFIXLEN) == 0)
+@@ -339,7 +359,7 @@
+ }
+ }
+ if (fclose (fp) < 0)
+- error (0, errno, "warning: cannot close %s", fname);
++ error (0, errno, "warning: cannot close %s", LogMsgFile);
+
+ /* canonicalize emply messages */
+ if (*messagep != NULL &&
+@@ -349,7 +369,11 @@
+ *messagep = NULL;
+ }
+
+- if (pre_stbuf.st_mtime == post_stbuf.st_mtime || *messagep == NULL)
++ if (pre_stbuf.st_mtime == post_stbuf.st_mtime ||
++ *messagep == NULL ||
++ (*messagep)[0] == '\0' ||
++ strcmp (*messagep, "\n") == 0 ||
++ strcmp (*messagep, "\n\n") == 0)
+ {
+ for (;;)
+ {
+@@ -361,9 +385,11 @@
+ if (line_length < 0)
+ {
+ error (0, errno, "cannot read from stdin");
+- if (unlink_file (fname) < 0)
++ if (unlink_file (LogMsgFile) < 0)
+ error (0, errno,
+- "warning: cannot remove temp file %s", fname);
++ "warning: cannot remove temp file %s", LogMsgFile);
++ free (LogMsgFile);
++ LogMsgFile = NULL;
+ error (1, 0, "aborting");
+ }
+ else if (line_length == 0
+@@ -371,8 +397,10 @@
+ break;
+ if (*line == 'a' || *line == 'A')
+ {
+- if (unlink_file (fname) < 0)
+- error (0, errno, "warning: cannot remove temp file %s", fname);
++ if (unlink_file (LogMsgFile) < 0)
++ error (0, errno, "warning: cannot remove temp file %s", LogMsgFile);
++ free (LogMsgFile);
++ LogMsgFile = NULL;
+ error (1, 0, "aborted by user");
+ }
+ if (*line == 'e' || *line == 'E')
+@@ -387,15 +415,14 @@
+ }
+ if (line)
+ free (line);
+- if (unlink_file (fname) < 0)
+- error (0, errno, "warning: cannot remove temp file %s", fname);
+- free (fname);
++ finish = 1;
++ goto again;
+ }
+
+ /* Runs the user-defined verification script as part of the commit or import
+ process. This verification is meant to be run whether or not the user
+ included the -m attribute. unlike the do_editor function, this is
+- independant of the running of an editor for getting a message.
++ independent of the running of an editor for getting a message.
+ */
+ void
+ do_verify (char **messagep, const char *repository, List *changes)
+@@ -785,6 +812,7 @@
+ `%s' is left as an exercise for the reader. */
+
+ /* %c = cvs_cmd_name
++ * %I = commit ID
+ * %p = shortrepos
+ * %r = repository
+ * %{sVv} = file name, old revision (precommit), new revision (postcommit)
+@@ -800,6 +828,7 @@
+ #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+ filter,
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ #ifdef SERVER_SUPPORT
+ "R", "s", referrer ? referrer->original : "NONE",
+ #endif /* SERVER_SUPPORT */
+@@ -922,6 +951,7 @@
+ #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+ script,
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ #ifdef SERVER_SUPPORT
+ "R", "s", referrer
+ ? referrer->original : "NONE",
+@@ -975,3 +1005,20 @@
+ return abs (run_exec (RUN_TTY, RUN_TTY, RUN_TTY,
+ RUN_NORMAL | RUN_SIGIGNORE));
+ }
++
++void
++logmsg_cleanup (int err)
++{
++ if (!use_editor || LogMsgFile == NULL)
++ return;
++
++ if (err == 0)
++ {
++ if (unlink_file (LogMsgFile) < 0)
++ error (0, errno, "warning: cannot remove temp file %s", LogMsgFile);
++ }
++ else
++ error (0, 0, "your log message was saved in %s", LogMsgFile);
++ free (LogMsgFile);
++ LogMsgFile = NULL;
++}
+--- cvs-1.12.13+real.orig/src/main.c
++++ cvs-1.12.13+real/src/main.c
+@@ -24,6 +24,10 @@
+ #include "strftime.h"
+ #include "xgethostname.h"
+
++#ifdef USE_LIBBSD
++uint32_t arc4random(void);
++#endif
++
+ const char *program_name;
+ const char *program_path;
+ const char *cvs_cmd_name;
+@@ -170,6 +174,7 @@
+ #ifdef SERVER_SUPPORT
+ { "server", NULL, NULL, server, CVS_CMD_MODIFIES_REPOSITORY | CVS_CMD_USES_WORK_DIR },
+ #endif
++ { "suck", NULL, NULL, suck, 0 },
+ { "status", "st", "stat", cvsstatus, CVS_CMD_USES_WORK_DIR },
+ { "tag", "ta", "freeze", cvstag, CVS_CMD_MODIFIES_REPOSITORY | CVS_CMD_USES_WORK_DIR },
+ { "unedit", NULL, NULL, unedit, CVS_CMD_MODIFIES_REPOSITORY | CVS_CMD_USES_WORK_DIR },
+@@ -230,7 +235,7 @@
+ {
+ "CVS commands are:\n",
+ " add Add a new file/directory to the repository\n",
+- " admin Administration front end for rcs\n",
++ " admin Administration front-end for RCS\n",
+ " annotate Show last revision where each line was modified\n",
+ " checkout Checkout sources for editing\n",
+ " commit Check files into the repository\n",
+@@ -242,7 +247,7 @@
+ " import Import sources into CVS, using vendor branches\n",
+ " init Create a CVS repository if it doesn't exist\n",
+ #if defined (HAVE_KERBEROS) && defined (SERVER_SUPPORT)
+- " kserver Kerberos server mode\n",
++ " kserver Act in Kerberos server mode\n",
+ #endif
+ " log Print out history information for files\n",
+ #ifdef AUTH_CLIENT_SUPPORT
+@@ -251,18 +256,19 @@
+ #endif /* AUTH_CLIENT_SUPPORT */
+ " ls List files available from CVS\n",
+ #if (defined(AUTH_SERVER_SUPPORT) || defined (HAVE_GSSAPI)) && defined(SERVER_SUPPORT)
+- " pserver Password server mode\n",
++ " pserver Act in password server mode\n",
+ #endif
+ " rannotate Show last revision where each line of module was modified\n",
+- " rdiff Create 'patch' format diffs between releases\n",
+- " release Indicate that a Module is no longer in use\n",
++ " rdiff Create 'patch' format diffs between revisions\n",
++ " release Indicate that a work subdirectory is no longer in use\n",
+ " remove Remove an entry from the repository\n",
+ " rlog Print out history information for a module\n",
+ " rls List files in a module\n",
+ " rtag Add a symbolic tag to a module\n",
+ #ifdef SERVER_SUPPORT
+- " server Server mode\n",
++ " server Act in server mode\n",
+ #endif
++ " suck Download RCS ,v file raw\n",
+ " status Display status information on checked out files\n",
+ " tag Add a symbolic tag to checked out version of files\n",
+ " unedit Undo an edit command\n",
+@@ -283,6 +289,7 @@
+ " -q Cause CVS to be somewhat quiet.\n",
+ " -r Make checked-out files read-only.\n",
+ " -w Make checked-out files read-write (default).\n",
++ " -g Force group-write permissions on checked-out files.\n",
+ " -n Do not execute anything that will change the disk.\n",
+ " -t Show trace of program execution (repeat for more\n",
+ " verbosity) -- try with -n.\n",
+@@ -458,46 +465,6 @@
+
+
+
+-
+-enum {RANDOM_BYTES = 8};
+-enum {COMMITID_RAW_SIZE = (sizeof(time_t) + RANDOM_BYTES)};
+-
+-static char const alphabet[62] =
+- "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+-
+-/* Divide BUF by D, returning the remainder. Replace BUF by the
+- quotient. BUF[0] is the most significant part of BUF.
+- D must not exceed UINT_MAX >> CHAR_BIT. */
+-static unsigned int
+-divide_by (unsigned char buf[COMMITID_RAW_SIZE], unsigned int d)
+-{
+- unsigned int carry = 0;
+- int i;
+- for (i = 0; i < COMMITID_RAW_SIZE; i++)
+- {
+- unsigned int byte = buf[i];
+- unsigned int dividend = (carry << CHAR_BIT) + byte;
+- buf[i] = dividend / d;
+- carry = dividend % d;
+- }
+- return carry;
+-}
+-
+-static void
+-convert (char const input[COMMITID_RAW_SIZE], char *output)
+-{
+- static char const zero[COMMITID_RAW_SIZE] = { 0, };
+- unsigned char buf[COMMITID_RAW_SIZE];
+- size_t o = 0;
+- memcpy (buf, input, COMMITID_RAW_SIZE);
+- while (memcmp (buf, zero, COMMITID_RAW_SIZE) != 0)
+- output[o++] = alphabet[divide_by (buf, sizeof alphabet)];
+- if (! o)
+- output[o++] = '0';
+- output[o] = '\0';
+-}
+-
+-
+ int
+ main (int argc, char **argv)
+ {
+@@ -511,7 +478,7 @@
+ int help = 0; /* Has the user asked for help? This
+ lets us support the `cvs -H cmd'
+ convention to give help for cmd. */
+- static const char short_options[] = "+QqrwtnRvb:T:e:d:Hfz:s:xa";
++ static const char short_options[] = "+QqrwgtnRvb:T:e:d:Hfz:s:xal";
+ static struct option long_options[] =
+ {
+ {"help", 0, NULL, 'H'},
+@@ -521,6 +488,7 @@
+ {"help-options", 0, NULL, 4},
+ #ifdef SERVER_SUPPORT
+ {"allow-root", required_argument, NULL, 3},
++ {"allow-root-regexp", required_argument, NULL, 14},
+ #endif /* SERVER_SUPPORT */
+ {0, 0, 0, 0}
+ };
+@@ -645,6 +613,10 @@
+ /* --allow-root */
+ root_allow_add (optarg, gConfigPath);
+ break;
++ case 14:
++ /* --allow-root-regexp */
++ root_allow_regexp_add (optarg, gConfigPath);
++ break;
+ #endif /* SERVER_SUPPORT */
+ case 'Q':
+ really_quiet = 1;
+@@ -658,6 +630,13 @@
+ case 'w':
+ cvswrite = 1;
+ break;
++ case 'g':
++ /*
++ * Force full write permissions for the group.
++ * See the user's manual for details and dangers.
++ */
++ umask(umask(S_IRWXG|S_IRWXO) & S_IRWXO);
++ break;
+ case 't':
+ trace++;
+ break;
+@@ -669,6 +648,9 @@
+ noexec = 1;
+ logoff = 1;
+ break;
++ case 'l':
++ /* no-op to simply ignore the old -l option */
++ break;
+ case 'v':
+ (void) fputs ("\n", stdout);
+ version (0, NULL);
+@@ -676,6 +658,7 @@
+ (void) fputs ("\
+ Copyright (C) 2005 Free Software Foundation, Inc.\n\
+ \n\
++Portions contributed by Thorsten Glaser for the MirOS Project and Debian.\n\
+ Senior active maintainers include Larry Jones, Derek R. Price,\n\
+ and Mark D. Baushke. Please see the AUTHORS and README files from the CVS\n\
+ distribution kit for a complete list of contributors and copyrights.\n",
+@@ -764,56 +747,12 @@
+ if (argc < 1)
+ usage (usg);
+
+- if (readonlyfs && !really_quiet) {
+- error (0, 0,
+- "WARNING: Read-only repository access mode selected via `cvs -R'.\n\
+-Using this option to access a repository which some users write to may\n\
+-cause intermittent sandbox corruption.");
+- }
+-
+ /* Calculate the cvs global session ID */
+
+- {
+- char buf[COMMITID_RAW_SIZE] = { 0, };
+- char out[COMMITID_RAW_SIZE * 2];
+- ssize_t len = 0;
+- time_t rightnow = time (NULL);
+- char *startrand = buf + sizeof (time_t);
+- unsigned char *p = (unsigned char *) startrand;
+- size_t randbytes = RANDOM_BYTES;
+- int flags = O_RDONLY;
+- int fd;
+-#ifdef O_NOCTTY
+- flags |= O_NOCTTY;
+-#endif
+- if (rightnow != (time_t)-1)
+- while (rightnow > 0) {
+- *--p = rightnow % (UCHAR_MAX + 1);
+- rightnow /= UCHAR_MAX + 1;
+- }
+- else {
+- /* try to use more random data */
+- randbytes = COMMITID_RAW_SIZE;
+- startrand = buf;
+- }
+- fd = open ("/dev/urandom", flags);
+- if (fd >= 0) {
+- len = read (fd, startrand, randbytes);
+- close (fd);
+- }
+- if (len <= 0) {
+- /* no random data was available so use pid */
+- long int pid = (long int)getpid ();
+- p = (unsigned char *) (startrand + sizeof (pid));
+- while (pid > 0) {
+- *--p = pid % (UCHAR_MAX + 1);
+- pid /= UCHAR_MAX + 1;
+- }
+- }
+- convert(buf, out);
+- global_session_id = strdup (out);
+- }
+-
++ global_session_id = Xasprintf("1%010llX%04X%04X",
++ (unsigned long long)time(NULL),
++ (unsigned int)(getpid() & 0xFFFF),
++ (unsigned int)(arc4random() & 0xFFFF));
+
+ TRACE (TRACE_FUNCTION, "main: Session ID is %s", global_session_id);
+
+@@ -1011,7 +950,7 @@
+ /* Now we've reconciled CVSROOT from the command line, the
+ CVS/Root file, and the environment variable. Do the
+ last sanity checks on the variable. */
+- if (!CVSroot_parsed)
++ if (!CVSroot_parsed && cm->func != version)
+ {
+ error (0, 0,
+ "No CVSROOT specified! Please use the `-d' option");
+@@ -1043,6 +982,11 @@
+
+ assert (current_parsed_root == NULL);
+
++ /* Handle running 'cvs version' with no CVSROOT. */
++
++ if (cm->func == version && !CVSroot_parsed)
++ server_active = !0;
++
+ /* If we're running the server, we want to execute this main
+ loop once and only once (we won't be serving multiple roots
+ from this connection, so there's no need to do it more than
+@@ -1173,6 +1117,7 @@
+ dellist (&root_directories);
+ } /* end of stuff that gets done if the user DOESN'T ask for help */
+
++ config = NULL;
+ root_allow_free ();
+
+ /* This is exit rather than return because apparently that keeps
+@@ -1244,7 +1189,7 @@
+ if (*++p)
+ {
+ if (*date) free (*date);
+- *date = Make_Date (p);
++ *date = strcmp (p, "BASE") ? Make_Date (p) : xstrdup (p);
+ }
+ }
+ else if (strlen (input))
+@@ -1285,7 +1230,7 @@
+ ftm = localtime (&unixtime);
+
+ (void) sprintf (date, DATEFORM,
+- ftm->tm_year + (ftm->tm_year < 100 ? 0 : 1900),
++ (long)ftm->tm_year + (ftm->tm_year < 100 ? 0L : 1900L),
+ ftm->tm_mon + 1, ftm->tm_mday, ftm->tm_hour,
+ ftm->tm_min, ftm->tm_sec);
+ ret = xstrdup (date);
+@@ -1315,8 +1260,10 @@
+ void
+ date_to_tm (struct tm *dest, const char *source)
+ {
++ int y;
++
+ if (sscanf (source, SDATEFORM,
+- &dest->tm_year, &dest->tm_mon, &dest->tm_mday,
++ &y, &dest->tm_mon, &dest->tm_mday,
+ &dest->tm_hour, &dest->tm_min, &dest->tm_sec)
+ != 6)
+ /* Is there a better way to handle errors here? I made this
+@@ -1324,9 +1271,7 @@
+ deal with fatal errors. */
+ error (0, 0, "internal error: bad date %s", source);
+
+- if (dest->tm_year > 100)
+- dest->tm_year -= 1900;
+-
++ dest->tm_year = y - ((y > 100) ? 1900 : 0);
+ dest->tm_mon -= 1;
+ }
+
+@@ -1348,10 +1293,10 @@
+ {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+
+- sprintf (dest, "%d %s %d %02d:%02d:%02d -0000", source->tm_mday,
++ sprintf (dest, "%d %s %ld %02d:%02d:%02d -0000", source->tm_mday,
+ source->tm_mon < 0 || source->tm_mon > 11
+ ? "???" : month_names[source->tm_mon],
+- source->tm_year + 1900, source->tm_hour, source->tm_min,
++ (long)source->tm_year + 1900, source->tm_hour, source->tm_min,
+ source->tm_sec);
+ }
+
+@@ -1458,7 +1403,7 @@
+ {
+ (void) fprintf (stderr, *cpp++, program_name, cvs_cmd_name);
+ for (; *cpp; cpp++)
+- (void) fprintf (stderr, *cpp);
++ (void) fprintf (stderr, "%s", *cpp);
+ exit (EXIT_FAILURE);
+ }
+
+--- cvs-1.12.13+real.orig/src/mkmodules.c
++++ cvs-1.12.13+real/src/mkmodules.c
+@@ -68,6 +68,7 @@
+ "# If any format strings are present in the filter, they will be replaced\n",
+ "# as follows:\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -82,7 +83,7 @@
+ "# Thus %{sv} is a legal format string, but will only be replaced with\n",
+ "# file name and new revision.\n",
+ "# It also generates multiple arguments for each file being operated upon.\n",
+- "# That is, if two files, file1 & file2, are being commited from 1.1 to\n",
++ "# That is, if two files, file1 & file2, are being committed from 1.1 to\n",
+ "# version 1.1.2.1 and from 1.1.2.2 to 1.1.2.3, respectively, %{sVv} will\n",
+ "# generate the following six arguments in this order:\n",
+ "# file1, 1.1, 1.1.2.1, file2, 1.1.2.2, 1.1.2.3.\n",
+@@ -124,13 +125,14 @@
+ "#\n",
+ "# Making sure that the entered bug-id number is correct.\n",
+ "# Validating that the code that was reviewed is indeed the code being\n",
+- "# checked in (using the bug-id number or a seperate review\n",
++ "# checked in (using the bug-id number or a separate review\n",
+ "# number to identify this particular code set.).\n",
+ "#\n",
+ "# If any of the above test failed, then the commit would be aborted.\n",
+ "#\n",
+ "# Format strings present in the filter will be replaced as follows:\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -152,8 +154,8 @@
+
+ static const char *const commitinfo_contents[] = {
+ "# The \"commitinfo\" file is used to control pre-commit checks.\n",
+- "# The filter on the right is invoked with the repository and a list \n",
+- "# of files to check. A non-zero exit of the filter program will \n",
++ "# The filter on the right is invoked with the repository and a list\n",
++ "# of files to check. A non-zero exit of the filter program will\n",
+ "# cause the commit to be aborted.\n",
+ "#\n",
+ "# The first entry on a line is a regular expression which is tested\n",
+@@ -163,6 +165,7 @@
+ "#\n",
+ "# Format strings present in the filter will be replaced as follows:\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -199,6 +202,7 @@
+ "# | \"N\" (not branch)\n",
+ "# %o = operation = \"add\" | \"mov\" | \"del\"\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -245,6 +249,7 @@
+ "# If any format strings are present in the filter, they will be replaced\n",
+ "# as follows:\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -271,6 +276,7 @@
+ "# If any format strings are present in the filter, they will be replaced\n",
+ "# as follows:\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -299,6 +305,7 @@
+ "# If any format strings are present in the filter, they will be replaced\n",
+ "# as follows:\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -328,6 +335,7 @@
+ "# | \"N\" (not branch)\n",
+ "# %o = operation = \"add\" | \"mov\" | \"del\"\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -363,11 +371,12 @@
+
+ static const char *const postwatch_contents[] = {
+ "# The \"postwatch\" file is called after any command finishes writing new\n",
+- "# file attibute (watch/edit) information in a directory.\n",
++ "# file attribute (watch/edit) information in a directory.\n",
+ "#\n",
+ "# If any format strings are present in the filter, they will be replaced\n",
+ "# as follows:\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -446,6 +455,7 @@
+ "#\n",
+ "# format strings are replaceed as follows:\n",
+ "# %c = canonical name of the command being executed\n",
++ "# %I = unique (randomly generated) commit ID\n",
+ #ifdef PROXY_SUPPORT
+ "# %R = the name of the referrer, if any, otherwise the value NONE\n",
+ #endif
+@@ -465,11 +475,10 @@
+ "# key [options] directory files...\n",
+ "#\n",
+ "# Where \"options\" are composed of:\n",
+- "# -i prog Run \"prog\" on \"cvs commit\" from top-level of module.\n",
+ "# -o prog Run \"prog\" on \"cvs checkout\" of module.\n",
+ "# -e prog Run \"prog\" on \"cvs export\" of module.\n",
++ "# -s status Assign a status to the module.\n",
+ "# -t prog Run \"prog\" on \"cvs rtag\" of module.\n",
+- "# -u prog Run \"prog\" on \"cvs update\" of module.\n",
+ "# -d dir Place module in directory \"dir\" instead of module name.\n",
+ "# -l Top-level directory only -- do not recurse.\n",
+ "#\n",
+@@ -489,67 +498,68 @@
+ };
+
+ static const char *const config_contents[] = {
+- "# Set `SystemAuth' to `no' if pserver shouldn't check system users/passwords.\n",
++ "# Set 'SystemAuth' to 'no' if pserver shouldn't check system users/passwords.\n",
+ "#SystemAuth=no\n",
+ "\n",
+- "# Set `LocalKeyword' to specify a local alias for a standard keyword.\n",
++ "# Set 'LocalKeyword' to specify a local alias for a standard keyword.\n",
+ "#LocalKeyword=MYCVS=CVSHeader\n",
+ "\n",
+- "# Set `KeywordExpand' to `i' followed by a list of keywords to expand or\n",
+- "# `e' followed by a list of keywords to not expand.\n"
+- "#KeywordExpand=iMYCVS,Name,Date\n",
++ "# Set 'KeywordExpand' to 'i' followed by a list of keywords to expand or\n",
++ "# 'e' followed by a list of keywords to not expand.\n"
++ "#KeywordExpand=iMYCVS,Name,Date,Mdocdate\n",
+ "#KeywordExpand=eCVSHeader\n",
+ "\n",
+ #ifdef PRESERVE_PERMISSIONS_SUPPORT
+- "# Set `PreservePermissions' to `yes' to save file status information\n",
++ "# Set 'PreservePermissions' to 'yes' to save file status information\n",
+ "# in the repository.\n",
+ "#PreservePermissions=no\n",
+ "\n",
+ #endif
+- "# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top\n",
+- "# level of the new working directory when using the `cvs checkout'\n",
++ "# Set 'TopLevelAdmin' to 'yes' to create a CVS directory at the top\n",
++ "# level of the new working directory when using the 'cvs checkout'\n",
+ "# command.\n",
+ "#TopLevelAdmin=no\n",
+ "\n",
+ "# Put CVS lock files in this directory rather than directly in the repository.\n",
+ "#LockDir=/var/lock/cvs\n",
+ "\n",
+- "# Set `LogHistory' to `all' or `" ALL_HISTORY_REC_TYPES "' to log all transactions to the\n",
+- "# history file, or a subset as needed (ie `TMAR' logs all write operations)\n",
++ "# Set 'LogHistory' to 'all' or '" ALL_HISTORY_REC_TYPES "' to log all transactions to the\n",
++ "# history file, or a subset as needed (ie 'TMAR' logs all write operations)\n",
+ "#LogHistory=" ALL_HISTORY_REC_TYPES "\n",
++ "LogHistory=TMAR\n",
+ "\n",
+- "# Set `RereadLogAfterVerify' to `always' (the default) to allow the verifymsg\n",
+- "# script to change the log message. Set it to `stat' to force CVS to verify\n",
++ "# Set 'RereadLogAfterVerify' to 'always' (the default) to allow the verifymsg\n",
++ "# script to change the log message. Set it to 'stat' to force CVS to verify\n",
+ "# that the file has changed before reading it (this can take up to an extra\n",
+ "# second per directory being committed, so it is not recommended for large\n",
+- "# repositories. Set it to `never' (the previous CVS behavior) to prevent\n",
++ "# repositories. Set it to 'never' (the previous CVS behavior) to prevent\n",
+ "# verifymsg scripts from changing the log message.\n",
+ "#RereadLogAfterVerify=always\n",
+ "\n",
+- "# Set `UserAdminOptions' to the list of `cvs admin' commands (options)\n",
+- "# that users not in the `cvsadmin' group are allowed to run. This\n",
+- "# defaults to `k', or only allowing the changing of the default\n",
+- "# keyword expansion mode for files for users not in the `cvsadmin' group.\n",
+- "# This value is ignored if the `cvsadmin' group does not exist.\n",
++ "# Set 'UserAdminOptions' to the list of 'cvs admin' commands (options)\n",
++ "# that users not in the '_cvsadmin' group are allowed to run. This\n",
++ "# defaults to 'k', or only allowing the changing of the default\n",
++ "# keyword expansion mode for files for users not in the '_cvsadmin' group.\n",
++ "# This value is ignored if the '_cvsadmin' group does not exist.\n",
+ "#\n",
+- "# The following string would enable all `cvs admin' commands for all\n",
++ "# The following string would enable all 'cvs admin' commands for all\n",
+ "# users:\n",
+ "#UserAdminOptions=aAbceIklLmnNostuU\n",
+ #ifdef SUPPORT_OLD_INFO_FMT_STRINGS
+ "\n",
+- "# Set `UseNewInfoFmtStrings' to `no' if you must support a legacy system by\n",
++ "# Set 'UseNewInfoFmtStrings' to 'no' if you must support a legacy system by\n",
+ "# enabling the deprecated old style info file command line format strings.\n",
+ "# Be warned that these strings could be disabled in any new version of CVS.\n",
+ "UseNewInfoFmtStrings=yes\n",
+ #endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+ "\n",
+- "# Set `ImportNewFilesToVendorBranchOnly' to `yes' if you wish to force\n",
+- "# every `cvs import' command to behave as if the `-X' flag was\n",
++ "# Set 'ImportNewFilesToVendorBranchOnly' to 'yes' if you wish to force\n",
++ "# every 'cvs import' command to behave as if the '-X' flag was\n",
+ "# specified.\n",
+ "#ImportNewFilesToVendorBranchOnly=no\n",
+ #ifdef PROXY_SUPPORT
+ "\n",
+- "# Set `PrimaryServer' to the CVSROOT to the primary, or write, server when\n",
++ "# Set 'PrimaryServer' to the CVSROOT to the primary, or write, server when\n",
+ "# establishing one or more read-only mirrors which serve as proxies for\n",
+ "# the write server in write mode or redirect the client to the primary for\n",
+ "# write requests.\n",
+@@ -558,13 +568,13 @@
+ "#\n",
+ "# PrimaryServer=:fork:localhost/cvsroot\n",
+ "\n",
+- "# Set `MaxProxyBufferSize' to the the maximum allowable secondary\n",
++ "# Set 'MaxProxyBufferSize' to the the maximum allowable secondary\n",
+ "# buffer memory cache size before the buffer begins being stored to disk, in\n",
+- "# bytes. Must be a positive integer but may end in `k', `M', `G', or `T' (for\n",
+- "# kiilo, mega, giga, & tera, respectively). If an otherwise valid number you\n",
++ "# bytes. Must be a positive integer but may end in 'K', 'M', 'G', or 'T' (for\n",
++ "# Kibi, Mebi, Gibi, & Tebi, respectively). If an otherwise valid number you\n",
+ "# specify is greater than the SIZE_MAX defined by your system's C compiler,\n",
+ "# then it will be resolved to SIZE_MAX without a warning. Defaults to 8M (8\n",
+- "# megabytes).\n",
++ "# Mebibytes). The 'i' from 'Ki', 'Mi', etc. is omitted.\n",
+ "#\n",
+ "# High values for MaxProxyBufferSize may speed up a secondary server\n",
+ "# with old hardware and a lot of available memory but can actually slow a\n",
+@@ -575,23 +585,23 @@
+ "# MaxProxyBufferSize=1G\n",
+ #endif /* PROXY_SUPPORT */
+ "\n",
+- "# Set `MaxCommentLeaderLength' to the maximum length permitted for the\n",
++ "# Set 'MaxCommentLeaderLength' to the maximum length permitted for the\n",
+ "# automagically determined comment leader used when expanding the Log\n",
+ "# keyword, in bytes. CVS's behavior when the automagically determined\n",
+- "# comment leader exceeds this length is dependant on the value of\n",
+- "# `UseArchiveCommentLeader' set in this file. `unlimited' is a valid\n",
++ "# comment leader exceeds this length is dependent on the value of\n",
++ "# 'UseArchiveCommentLeader' set in this file. 'unlimited' is a valid\n",
+ "# setting for this value. Defaults to 20 bytes.\n",
+ "#\n",
+ "# For example:\n",
+ "#\n",
+ "# MaxCommentLeaderLength=20\n",
+ "\n",
+- "# Set `UseArchiveCommentLeader' to `yes' to cause CVS to fall back on\n",
++ "# Set 'UseArchiveCommentLeader' to 'yes' to cause CVS to fall back on\n",
+ "# the comment leader set in the RCS archive file, if any, when the\n",
+- "# automagically determined comment leader exceeds `MaxCommentLeaderLength'\n",
+- "# bytes. If `UseArchiveCommentLeader' is not set and a comment leader\n",
+- "# greater than `MaxCommentLeaderLength' is calculated, the Log keyword\n",
+- "# being examined will not be expanded. Defaults to `no'.\n",
++ "# automagically determined comment leader exceeds 'MaxCommentLeaderLength'\n",
++ "# bytes. If 'UseArchiveCommentLeader' is not set and a comment leader\n",
++ "# greater than 'MaxCommentLeaderLength' is calculated, the Log keyword\n",
++ "# being examined will not be expanded. Defaults to 'no'.\n",
+ "#\n",
+ "# For example:\n",
+ "#\n",
+@@ -816,7 +826,7 @@
+ }
+
+ if (restore_cwd (&cwd))
+- error (1, errno, "Failed to restore current directory, `%s'.",
++ error (1, errno, "Failed to restore current directory, '%s'.",
+ cwd.name);
+ free_cwd (&cwd);
+
+@@ -878,7 +888,7 @@
+ {
+ /* Probably not necessary (?); RCS_parsercsfile already printed a
+ message. */
+- error (0, 0, "Failed to parse `%s'.", rcs);
++ error (0, 0, "Failed to parse '%s'.", rcs);
+ free (rcs);
+ return 1;
+ }
+@@ -962,20 +972,22 @@
+ key.dptr = vp;
+ while (*vp && !isspace ((unsigned char) *vp))
+ vp++;
+- key.dsize = vp - key.dptr;
++ key.dsize = vp - (char *)key.dptr;
+ *vp++ = '\0'; /* NULL terminate the key */
+ while (*vp && isspace ((unsigned char) *vp))
+ vp++; /* skip whitespace to value */
+ if (*vp == '\0')
+ {
+- error (0, 0, "warning: NULL value for key `%s'", key.dptr);
++ error (0, 0, "warning: NULL value for key '%s'",
++ (char *)key.dptr);
+ continue;
+ }
+ val.dptr = vp;
+ val.dsize = strlen (vp);
+ if (dbm_store (db, key, val, DBM_INSERT) == 1)
+ {
+- error (0, 0, "duplicate key found for `%s'", key.dptr);
++ error (0, 0, "duplicate key found for '%s'",
++ (char *)key.dptr);
+ err++;
+ }
+ }
+@@ -1175,6 +1187,9 @@
+ which needs to be created. */
+ mkdir_if_needed (current_parsed_root->directory);
+
++ if (noexec)
++ return (0);
++
+ adm = Xasprintf ("%s/%s", current_parsed_root->directory, CVSROOTADM);
+ mkdir_if_needed (adm);
+
+@@ -1249,11 +1264,6 @@
+ fp = xfopen (info, "w");
+ if (fclose (fp) < 0)
+ error (1, errno, "cannot close %s", info);
+-
+- /* Make the new history file world-writeable, since every CVS
+- user will need to be able to write to it. We use chmod()
+- because xchmod() is too shy. */
+- chmod (info, 0666);
+ }
+
+ /* Make an empty val-tags file to prevent problems creating it later. */
+@@ -1267,11 +1277,6 @@
+ fp = xfopen (info, "w");
+ if (fclose (fp) < 0)
+ error (1, errno, "cannot close %s", info);
+-
+- /* Make the new val-tags file world-writeable, since every CVS
+- user will need to be able to write to it. We use chmod()
+- because xchmod() is too shy. */
+- chmod (info, 0666);
+ }
+
+ free (info);
+--- cvs-1.12.13+real.orig/src/modules.c
++++ cvs-1.12.13+real/src/modules.c
+@@ -450,7 +450,7 @@
+ case '?':
+ error (0, 0,
+ "modules file has invalid option for key %s value %s",
+- key.dptr, value);
++ (char *)key.dptr, value);
+ err++;
+ goto do_module_return;
+ }
+--- cvs-1.12.13+real.orig/src/parseinfo.c
++++ cvs-1.12.13+real/src/parseinfo.c
+@@ -230,7 +230,7 @@
+ return true;
+ }
+
+- /* Record the factor character (kilo, mega, giga, tera). */
++ /* Record the factor character (kibi, mebi, gibi, tebi). */
+ if (!isdigit (p[strlen(p) - 1]))
+ {
+ switch (p[strlen(p) - 1])
+@@ -241,16 +241,16 @@
+ factor = xtimes (factor, 1024);
+ case 'M':
+ factor = xtimes (factor, 1024);
+- case 'k':
++ case 'K':
+ factor = xtimes (factor, 1024);
+ break;
+ default:
+ error (0, 0,
+ "%s: Unknown %s factor: `%c'",
+- infopath, option, p[strlen(p)]);
++ infopath, option, p[strlen(p) - 1]);
+ return false;
+ }
+- TRACE (TRACE_DATA, "readSizeT(): Found factor %u for %s",
++ TRACE (TRACE_DATA, "readSizeT(): Found factor %zu for %s",
+ factor, option);
+ }
+
+@@ -274,9 +274,9 @@
+ /* Don't return an error, just max out. */
+ num = SIZE_MAX;
+
+- TRACE (TRACE_DATA, "readSizeT(): read number %u for %s", num, option);
++ TRACE (TRACE_DATA, "readSizeT(): read number %zu for %s", num, option);
+ *val = xtimes (strtoul (p, NULL, 10), factor);
+- TRACE (TRACE_DATA, "readSizeT(): returnning %u for %s", *val, option);
++ TRACE (TRACE_DATA, "readSizeT(): returnning %zu for %s", *val, option);
+ return true;
+ }
+
+@@ -298,7 +298,7 @@
+ new->MaxCompressionLevel = 9;
+ #endif /* SERVER_SUPPORT */
+ #ifdef PROXY_SUPPORT
+- new->MaxProxyBufferSize = (size_t)(8 * 1024 * 1024); /* 8 megabytes,
++ new->MaxProxyBufferSize = (size_t)(8 * 1024 * 1024); /* 8 mebibytes,
+ * by default.
+ */
+ #endif /* PROXY_SUPPORT */
+@@ -392,6 +392,9 @@
+ */
+ bool processing = true;
+ bool processed = true;
++#ifdef SERVER_SUPPORT
++ size_t dummy_sizet;
++#endif
+
+ TRACE (TRACE_FUNCTION, "parse_config (%s)", cvsroot);
+
+@@ -689,13 +692,44 @@
+ readBool (infopath, "UseArchiveCommentLeader", p,
+ &retval->UseArchiveCommentLeader);
+ #ifdef SERVER_SUPPORT
+- else if (!strcmp (line, "MinCompressionLevel"))
+- readSizeT (infopath, "MinCompressionLevel", p,
+- &retval->MinCompressionLevel);
+- else if (!strcmp (line, "MaxCompressionLevel"))
+- readSizeT (infopath, "MaxCompressionLevel", p,
+- &retval->MaxCompressionLevel);
++ else if (!strcmp (line, "MinCompressionLevel")) {
++ readSizeT (infopath, "MinCompressionLevel", p, &dummy_sizet);
++ retval->MinCompressionLevel = dummy_sizet;
++ }
++ else if (!strcmp (line, "MaxCompressionLevel")) {
++ readSizeT (infopath, "MaxCompressionLevel", p, &dummy_sizet);
++ retval->MaxCompressionLevel = dummy_sizet;
++ }
+ #endif /* SERVER_SUPPORT */
++ else if (!strcmp (line, "tag")) {
++ char *pp;
++
++ pp = Xasprintf("%s=Id", p);
++ RCS_setlocalid (infopath, ln, &retval->keywords, pp);
++ free(pp);
++
++#if !defined(LOCK_COMPATIBILITY) || !defined(SUPPORT_OLD_INFO_FMT_STRINGS)
++ error (0, 0, "%s: found keyword '%s' in repository",
++ infopath, line);
++ error (readonlyfs ? 0 : 1, 0, readonlyfs
++ ? "Danger: Granting read access to incompatible repository!"
++ : "Do not try to access a cvs 1.11 repository!");
++#endif
++ }
++#if !defined(LOCK_COMPATIBILITY) || !defined(SUPPORT_OLD_INFO_FMT_STRINGS)
++ else if ((!strcmp (line, "umask"))
++ || (!strcmp (line, "DisableXProg")) || (!strcmp (line, "dlimit"))
++ || (!strcmp (line, "forceReadOnlyFS"))) {
++ /* We are dealing with keywords removed between cvs 1.11.1p1
++ and cvs 1.12.10; odds are we are not being able to handle
++ access or concurrent access with 1.11 cvs correctly */
++ error (0, 0, "%s: found keyword '%s' in repository",
++ infopath, line);
++ error (readonlyfs ? 0 : 1, 0, readonlyfs
++ ? "Danger: Granting read access to incompatible repository!"
++ : "Do not try to access a cvs 1.11 repository!");
++ }
++#endif
+ else
+ /* We may be dealing with a keyword which was added in a
+ subsequent version of CVS. In that case it is a good idea
+--- cvs-1.12.13+real.orig/src/parseinfo.h
++++ cvs-1.12.13+real/src/parseinfo.h
+@@ -1,3 +1,5 @@
++/* $MirOS: src/gnu/usr.bin/cvs/src/parseinfo.h,v 1.4 2010/09/19 19:43:07 tg Exp $ */
++
+ /*
+ * Copyright (c) 2004 Derek Price, Ximbiot <http://ximbiot.com>,
+ * and the Free Software Foundation
+@@ -53,8 +55,8 @@
+ size_t MaxProxyBufferSize;
+ #endif /* PROXY_SUPPORT */
+ #ifdef SERVER_SUPPORT
+- size_t MinCompressionLevel;
+- size_t MaxCompressionLevel;
++ unsigned MinCompressionLevel;
++ unsigned MaxCompressionLevel;
+ #endif /* SERVER_SUPPORT */
+ #ifdef PRESERVE_PERMISSIONS_SUPPORT
+ bool preserve_perms;
+--- cvs-1.12.13+real.orig/src/patch.c
++++ cvs-1.12.13+real/src/patch.c
+@@ -46,13 +46,13 @@
+
+ static const char *const patch_usage[] =
+ {
+- "Usage: %s %s [-flR] [-c|-u] [-s|-t] [-V %%d] [-k kopt]\n",
++ "Usage: %s %s [-flR] [-c|-u[p]] [-s|-t] [-V %%d] [-k kopt]\n",
+ " -r rev|-D date [-r rev2 | -D date2] modules...\n",
+ "\t-f\tForce a head revision match if tag/date not found.\n",
+ "\t-l\tLocal directory only, not recursive\n",
+ "\t-R\tProcess directories recursively.\n",
+ "\t-c\tContext diffs (default)\n",
+- "\t-u\tUnidiff format.\n",
++ "\t-u\tUnidiff format (-p works the same as in diff).\n",
+ "\t-s\tShort patch - one liner per file.\n",
+ "\t-t\tTop two diffs - last change made to the file.\n",
+ "\t-V vers\tUse RCS Version \"vers\" for keyword expansion.\n",
+@@ -78,7 +78,7 @@
+ usage (patch_usage);
+
+ optind = 0;
+- while ((c = getopt (argc, argv, "+V:k:cuftsQqlRD:r:")) != -1)
++ while ((c = getopt (argc, argv, "+V:k:cupftsQqlRD:r:")) != -1)
+ {
+ switch (c)
+ {
+@@ -149,10 +149,13 @@
+ "the -V option is obsolete and should not be used");
+ break;
+ case 'u':
+- unidiff = 1; /* Unidiff */
++ unidiff |= 1; /* Unidiff */
+ break;
+ case 'c': /* Context diff */
+- unidiff = 0;
++ unidiff &= ~1;
++ break;
++ case 'p':
++ unidiff |= 2; /* Unidiff context */
+ break;
+ case '?':
+ default:
+@@ -167,6 +170,8 @@
+ if (argc < 1)
+ usage (patch_usage);
+
++ if (!(unidiff & 1))
++ unidiff = 0;
+ if (toptwo_diffs && patch_short)
+ error (1, 0, "-t and -s options are mutually exclusive");
+ if (toptwo_diffs && (date1 != NULL || date2 != NULL ||
+@@ -202,6 +207,8 @@
+ send_arg("-s");
+ if (unidiff)
+ send_arg("-u");
++ if (unidiff & 2)
++ send_arg("-p");
+
+ if (rev1)
+ option_with_arg ("-r", rev1);
+@@ -270,6 +277,7 @@
+ int which;
+ char *repository;
+ char *where;
++ char *cp;
+
+ TRACE ( TRACE_FUNCTION, "patch_proc ( %s, %s, %s, %d, %d, %s, %s )",
+ xwhere ? xwhere : "(null)",
+@@ -292,7 +300,6 @@
+ /* if mfile isn't null, we need to set up to do only part of the module */
+ if (mfile != NULL)
+ {
+- char *cp;
+ char *path;
+
+ /* if the portion of the module is a path, put the dir part on repos */
+@@ -342,14 +349,30 @@
+
+ if (rev1 != NULL && !rev1_validated)
+ {
+- tag_check_valid (rev1, argc - 1, argv + 1, local_specified, 0,
+- repository, false);
++ if ((cp = strchr(rev1, ':')) != NULL)
++ {
++ *cp++ = '\0';
++ date1 = Make_Date (cp);
++ if (*rev1 == '\0')
++ rev1 = NULL;
++ }
++ if (rev1)
++ tag_check_valid (rev1, argc - 1, argv + 1, local_specified, 0,
++ repository, false);
+ rev1_validated = 1;
+ }
+ if (rev2 != NULL && !rev2_validated)
+ {
+- tag_check_valid (rev2, argc - 1, argv + 1, local_specified, 0,
+- repository, false);
++ if ((cp = strchr(rev2, ':')) != NULL)
++ {
++ *cp++ = '\0';
++ date2 = Make_Date (cp);
++ if (*rev2 == '\0')
++ rev2 = NULL;
++ }
++ if (rev2)
++ tag_check_valid (rev2, argc - 1, argv + 1, local_specified, 0,
++ repository, false);
+ rev2_validated = 1;
+ }
+
+@@ -571,6 +594,7 @@
+
+ if (unidiff) run_add_arg_p (&dargc, &darg_allocated, &dargv, "-u");
+ else run_add_arg_p (&dargc, &darg_allocated, &dargv, "-c");
++ if (unidiff & 2) run_add_arg_p (&dargc, &darg_allocated, &dargv, "-p");
+ switch (diff_exec (tmpfile1, tmpfile2, NULL, NULL, dargc, dargv,
+ tmpfile3))
+ {
+@@ -671,7 +695,10 @@
+ program. */
+ if (unidiff)
+ {
+- cvs_output ("diff -u ", 0);
++ if (unidiff & 2)
++ cvs_output ("diff -up ", 0);
++ else
++ cvs_output ("diff -u ", 0);
+ cvs_output (file1, 0);
+ cvs_output (" ", 1);
+ cvs_output (file2, 0);
+--- cvs-1.12.13+real.orig/src/rcs.c
++++ cvs-1.12.13+real/src/rcs.c
+@@ -103,6 +103,7 @@
+ static char *truncate_revnum_in_place (char *);
+ static char *truncate_revnum (const char *);
+ static char *printable_date (const char *);
++static char *mdoc_date (const char *);
+ static char *escape_keyword_value (const char *, int *);
+ static void expand_keywords (RCSNode *, RCSVers *, const char *,
+ const char *, size_t, enum kflag, char *,
+@@ -2166,6 +2167,8 @@
+
+ if (! RCS_nodeisbranch (rcs, tag))
+ {
++ if (! strcmp (date, "BASE"))
++ return RCS_gettag (rcs, tag, force_tag_match, simple_tag);
+ /* We can't get a particular date if the tag is not a
+ branch. */
+ return NULL;
+@@ -2177,6 +2180,15 @@
+ else
+ branch = xstrdup (tag);
+
++ if (! strcmp (date, "BASE"))
++ {
++ /* Cut off the branch suffix and return. */
++ rev = strrchr (branch, '.');
++ if (rev)
++ *rev = '\0';
++ return branch;
++ }
++
+ /* Fetch the revision of branch as of date. */
+ rev = RCS_getdatebranch (rcs, date, branch);
+ free (branch);
+@@ -3120,6 +3132,7 @@
+ struct timespec revdate;
+ Node *p;
+ RCSVers *vers;
++ int y;
+
+ /* make sure we have something to look at... */
+ assert (rcs != NULL);
+@@ -3134,7 +3147,7 @@
+ vers = p->data;
+
+ /* split up the date */
+- if (sscanf (vers->date, SDATEFORM, &xtm.tm_year, &xtm.tm_mon,
++ if (sscanf (vers->date, SDATEFORM, &y, &xtm.tm_mon,
+ &xtm.tm_mday, &xtm.tm_hour, &xtm.tm_min, &xtm.tm_sec) != 6)
+ error (1, 0, "%s: invalid date for revision %s (%s)", rcs->print_path,
+ rev, vers->date);
+@@ -3144,15 +3157,14 @@
+ 2000+, RCS files contain all four digits and we subtract 1900,
+ because the tm_year field should contain years since 1900. */
+
+- if (xtm.tm_year >= 100 && xtm.tm_year < 2000)
++ if (y >= 100 && y < 2000)
+ error (0, 0, "%s: non-standard date format for revision %s (%s)",
+ rcs->print_path, rev, vers->date);
+- if (xtm.tm_year >= 1900)
+- xtm.tm_year -= 1900;
++ xtm.tm_year = y - ((y >= 1900) ? 1900 : 0);
+
+ /* put the date in a form getdate can grok */
+- tdate = Xasprintf ("%d-%d-%d %d:%d:%d -0000",
+- xtm.tm_year + 1900, xtm.tm_mon, xtm.tm_mday,
++ tdate = Xasprintf ("%ld-%d-%d %d:%d:%d -0000",
++ (long)xtm.tm_year + 1900, xtm.tm_mon, xtm.tm_mday,
+ xtm.tm_hour, xtm.tm_min, xtm.tm_sec);
+
+ /* Turn it into seconds since the epoch.
+@@ -3173,7 +3185,7 @@
+ /* Put an appropriate string into `date', if we were given one. */
+ ftm = gmtime (&revdate.tv_sec);
+ (void) sprintf (date, DATEFORM,
+- ftm->tm_year + (ftm->tm_year < 100 ? 0 : 1900),
++ (long)ftm->tm_year + (ftm->tm_year < 100 ? 0L : 1900L),
+ ftm->tm_mon + 1, ftm->tm_mday, ftm->tm_hour,
+ ftm->tm_min, ftm->tm_sec);
+ }
+@@ -3475,6 +3487,7 @@
+ KEYWORD_REVISION,
+ KEYWORD_SOURCE,
+ KEYWORD_STATE,
++ KEYWORD_MDOCDATE,
+ KEYWORD_LOCALID
+ };
+ struct rcs_keyword
+@@ -3511,6 +3524,7 @@
+ KEYWORD_INIT (new, KEYWORD_REVISION, "Revision");
+ KEYWORD_INIT (new, KEYWORD_SOURCE, "Source");
+ KEYWORD_INIT (new, KEYWORD_STATE, "State");
++ KEYWORD_INIT (new, KEYWORD_MDOCDATE, "Mdocdate");
+
+ return new;
+ }
+@@ -3544,6 +3558,30 @@
+
+
+
++/* Convert an RCS date string into an mdoc string. This is like
++ the RCS date2str function, but for manual pages. */
++static char *
++mdoc_date (const char *rcs_date)
++{
++ int year, mon, mday, hour, min, sec;
++ char buf[100];
++ const char *months[] = { "January", "February", "March", "April",
++ "May", "June", "July", "August",
++ "September", "October", "November", "December",
++ "corrupt" };
++
++ (void) sscanf (rcs_date, SDATEFORM, &year, &mon, &mday, &hour, &min,
++ &sec);
++ if (mon < 1 || mon > 12)
++ mon = 13;
++ if (year < 1900)
++ year += 1900;
++ sprintf (buf, "%s %d %04d", months[mon - 1], mday, year);
++ return xstrdup (buf);
++}
++
++
++
+ /* Escape the characters in a string so that it can be included in an
+ RCS value. */
+ static char *
+@@ -3680,13 +3718,13 @@
+ srch_len -= (srch_next + 1) - srch;
+ srch = srch_next + 1;
+
+- /* Look for the first non alphabetic character after the '$'. */
++ /* Look for the first non alphanumeric character after the '$'. */
+ send = srch + srch_len;
+ for (s = srch; s < send; s++)
+- if (! isalpha ((unsigned char) *s))
++ if (! isalnum ((unsigned char) *s))
+ break;
+
+- /* If the first non alphabetic character is not '$' or ':',
++ /* If the first non alphanumeric character is not '$' or ':',
+ then this is not an RCS keyword. */
+ if (s == send || (*s != '$' && *s != ':'))
+ continue;
+@@ -3741,6 +3779,11 @@
+ free_value = 1;
+ break;
+
++ case KEYWORD_MDOCDATE:
++ value = mdoc_date (ver->date);
++ free_value = 1;
++ break;
++
+ case KEYWORD_CVSHEADER:
+ case KEYWORD_HEADER:
+ case KEYWORD_ID:
+@@ -4177,6 +4220,9 @@
+ : (sout != RUN_TTY ? sout
+ : "(stdout)"))));
+
++ if (rev && *rev == '-')
++ ++rev;
++
+ assert (rev == NULL || isdigit ((unsigned char) *rev));
+
+ if (noexec && !server_active && workfile != NULL)
+@@ -5081,7 +5127,7 @@
+ (void) time (&modtime);
+ ftm = gmtime (&modtime);
+ delta->date = Xasprintf (DATEFORM,
+- ftm->tm_year + (ftm->tm_year < 100 ? 0 : 1900),
++ (long)ftm->tm_year + (ftm->tm_year < 100 ? 0L : 1900L),
+ ftm->tm_mon + 1, ftm->tm_mday, ftm->tm_hour,
+ ftm->tm_min, ftm->tm_sec);
+ if (flags & RCS_FLAGS_DEAD)
+@@ -7235,6 +7281,7 @@
+ /* Walk the deltas in RCS to get to revision VERSION.
+
+ If OP is RCS_ANNOTATE, then write annotations using cvs_output.
++ If OP is RCS_ANNOTATE_BACKWARDS, do the same backwards.
+
+ If OP is RCS_FETCH, then put the contents of VERSION into a
+ newly-malloc'd array and put a pointer to it in *TEXT. Each line
+@@ -7263,6 +7310,7 @@
+ RCSVers *vers;
+ RCSVers *prev_vers;
+ RCSVers *trunk_vers;
++ RCSVers *top_vers;
+ char *next;
+ int ishead, isnext, isversion, onbranch;
+ Node *node;
+@@ -7285,6 +7333,7 @@
+ vers = NULL;
+ prev_vers = NULL;
+ trunk_vers = NULL;
++ top_vers = NULL;
+ next = NULL;
+ onbranch = 0;
+ foundhead = 0;
+@@ -7332,12 +7381,28 @@
+ vers = node->data;
+ next = vers->next;
+
++ /* The top version is either HEAD or
++ the last version on the branch. */
++ if (top_vers == NULL ||
++ (onbranch && (op == RCS_ANNOTATE_BACKWARDS)))
++ top_vers = vers;
++
+ /* Compare key and trunkversion now, because key points to
+ storage controlled by rcsbuf_getkey. */
+ if (STREQ (branchversion, key))
+ isversion = 1;
+ else
+ isversion = 0;
++
++ /* If we are going back and up a branch, and this is
++ the version we should start annotating, we need to
++ clear out all accumulated annotations. */
++ if ((op == RCS_ANNOTATE_BACKWARDS) && onbranch && STREQ (version, key)) {
++ unsigned int ln;
++
++ for (ln = 0; ln < curlines.nlines; ++ln)
++ curlines.vector[ln]->vers = NULL;
++ }
+ }
+
+ while (1)
+@@ -7365,17 +7430,27 @@
+ rcsbuf_valpolish (rcsbuf, value, 0, &vallen);
+ if (ishead)
+ {
+- if (! linevector_add (&curlines, value, vallen, NULL, 0))
++ if (! linevector_add (&curlines, value, vallen,
++ (op == RCS_ANNOTATE_BACKWARDS) ? vers : NULL, 0))
+ error (1, 0, "invalid rcs file %s", rcs->print_path);
+
+ ishead = 0;
+ }
+ else if (isnext)
+ {
++ RCSVers *addv, *delv;
++
++ if (op == RCS_ANNOTATE_BACKWARDS) {
++ addv = onbranch ? NULL : prev_vers;
++ delv = onbranch ? vers : NULL;
++ } else {
++ addv = onbranch ? vers : NULL;
++ delv = onbranch ? NULL : prev_vers;
++ }
++
+ if (! apply_rcs_changes (&curlines, value, vallen,
+ rcs->path,
+- onbranch ? vers : NULL,
+- onbranch ? NULL : prev_vers))
++ addv, delv))
+ error (1, 0, "invalid change text in %s", rcs->print_path);
+ }
+ break;
+@@ -7384,6 +7459,14 @@
+
+ if (isversion)
+ {
++ /* If we're going backwards and not up a branch, and we
++ reached the version to start at, we're done. */
++ if ((op == RCS_ANNOTATE_BACKWARDS) && !onbranch && STREQ (version, key)) {
++ foundhead = 1;
++ linevector_copy (&headlines, &curlines);
++ break;
++ }
++
+ /* This is either the version we want, or it is the
+ branchpoint to the version we want. */
+ if (STREQ (branchversion, version))
+@@ -7391,7 +7474,9 @@
+ /* This is the version we want. */
+ linevector_copy (&headlines, &curlines);
+ foundhead = 1;
+- if (onbranch)
++ /* If we are annotating backwards, we have to
++ continue tracking when we're tracking a branch. */
++ if (onbranch && !(op == RCS_ANNOTATE_BACKWARDS))
+ {
+ /* We have found this version by tracking up a
+ branch. Restore back to the lines we saved
+@@ -7480,6 +7565,7 @@
+ switch (op)
+ {
+ case RCS_ANNOTATE:
++ case RCS_ANNOTATE_BACKWARDS:
+ {
+ unsigned int ln;
+
+--- cvs-1.12.13+real.orig/src/rcs.h
++++ cvs-1.12.13+real/src/rcs.h
+@@ -1,3 +1,5 @@
++/* $MirOS: src/gnu/usr.bin/cvs/src/rcs.h,v 1.5 2010/09/19 19:43:09 tg Exp $ */
++
+ /*
+ * Copyright (C) 1986-2005 The Free Software Foundation, Inc.
+ *
+@@ -33,7 +35,7 @@
+ CVS) will put this into RCS files. Considered obsolete. */
+ #define RCSDEAD "dead"
+
+-#define DATEFORM "%02d.%02d.%02d.%02d.%02d.%02d"
++#define DATEFORM "%02ld.%02d.%02d.%02d.%02d.%02d"
+ #define SDATEFORM "%d.%d.%d.%d.%d.%d"
+
+ /*
+@@ -189,7 +191,7 @@
+ struct rcsbuffer;
+
+ /* What RCS_deltas is supposed to do. */
+-enum rcs_delta_op {RCS_ANNOTATE, RCS_FETCH};
++enum rcs_delta_op {RCS_ANNOTATE, RCS_ANNOTATE_BACKWARDS, RCS_FETCH};
+
+ /*
+ * exported interfaces
+--- cvs-1.12.13+real.orig/src/root.c
++++ cvs-1.12.13+real/src/root.c
+@@ -265,6 +265,7 @@
+ directories. Then we can check against them when a remote user
+ hands us a CVSROOT directory. */
+ static List *root_allow;
++static List *root_allow_regexp;
+
+ static void
+ delconfig (Node *n)
+@@ -288,15 +289,65 @@
+ }
+
+ void
++root_allow_regexp_add (const char *arg, const char *configPath)
++{
++ Node *n;
++
++ if (!root_allow_regexp) root_allow_regexp = getlist();
++ n = getnode();
++ n->key = xstrdup (arg);
++
++ /* This is a regexp, not the final cvsroot path - we cannot attach
++ it a config. So we attach configPath and we'll root_allow_add()
++ the actual, matching root in root_allow_compare_regexp() */
++ n->data = (void*)configPath;
++
++ addnode (root_allow_regexp, n);
++}
++
++void
+ root_allow_free (void)
+ {
+ dellist (&root_allow);
++ dellist (&root_allow_regexp);
++}
++
++int
++root_allow_used (void)
++{
++ return root_allow || root_allow_regexp;
++}
++
++/* walklist() callback for determining if 'root_to_check' matches
++ n->key (a regexp). If yes, 'root_to_check' will be added as if
++ directly specified through --allow-root.
++ */
++static int
++root_allow_compare_regexp (Node *n, void *root_to_check)
++{
++ int status;
++ regex_t re;
++
++ if (regcomp(&re, n->key,
++ REG_EXTENDED|REG_NOSUB) != 0)
++ {
++ return 0; /* report error? */
++ }
++ status = regexec(&re, root_to_check, (size_t) 0, NULL, 0);
++ regfree(&re);
++ if (status == 0)
++ {
++ /* n->data contains gConfigPath */
++ root_allow_add (root_to_check, n->data);
++ return 1;
++ }
++ return 0;
+ }
+
+ bool
+ root_allow_ok (const char *arg)
+ {
+- if (!root_allow)
++ if (!root_allow_used())
+ {
+ /* Probably someone upgraded from CVS before 1.9.10 to 1.9.10
+ or later without reading the documentation about
+@@ -308,12 +359,18 @@
+ back "error" rather than waiting for the next request which
+ expects responses. */
+ printf ("\
+-error 0 Server configuration missing --allow-root in inetd.conf\n");
++error 0 Server configuration missing --allow-root or --allow-root-regexp in inetd.conf\n");
+ exit (EXIT_FAILURE);
+ }
+
++ /* Look for 'arg' in the list of full-path allowed roots */
+ if (findnode (root_allow, arg))
+ return true;
++
++ /* Match 'arg' against the list of allowed roots regexps */
++ if (walklist (root_allow_regexp, root_allow_compare_regexp, (void*)arg))
++ return true;
++
+ return false;
+ }
+
+@@ -535,6 +592,12 @@
+ method = "";
+ #endif /* defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT) */
+
++ if (NULL == method)
++ {
++ error (0, 0, "Missing method in CVSROOT.");
++ goto error_exit;
++ }
++
+ /* Now we have an access method -- see if it's valid. */
+
+ if (!strcasecmp (method, "local"))
+@@ -547,6 +610,16 @@
+ newroot->method = gserver_method;
+ else if (!strcasecmp (method, "server"))
+ newroot->method = server_method;
++ else if (strncmp (method, "ext=", 4) == 0)
++ {
++ newroot->cvs_rsh = xstrdup(method + 4);
++ newroot->method = ext_method;
++ }
++ else if (!strcasecmp (method, "extssh"))
++ {
++ newroot->cvs_rsh = xstrdup("ssh");
++ newroot->method = extssh_method;
++ }
+ else if (!strcasecmp (method, "ext"))
+ newroot->method = ext_method;
+ else if (!strcasecmp (method, "fork"))
+@@ -597,13 +670,15 @@
+ else if (!strcasecmp (p, "CVS_RSH"))
+ {
+ /* override CVS_RSH environment variable */
+- if (newroot->method == ext_method)
+- newroot->cvs_rsh = xstrdup (q);
++ if (newroot->method == ext_method
++ || newroot->method == extssh_method)
++ newroot->cvs_rsh = xstrdup (q);
+ }
+ else if (!strcasecmp (p, "CVS_SERVER"))
+ {
+ /* override CVS_SERVER environment variable */
+ if (newroot->method == ext_method
++ || newroot->method == extssh_method
+ || newroot->method == fork_method)
+ newroot->cvs_server = xstrdup (q);
+ }
+@@ -635,7 +710,8 @@
+ newroot->isremote = (newroot->method != local_method);
+
+ #if defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT)
+- if (readonlyfs && newroot->isremote)
++ if (readonlyfs && newroot->isremote && (newroot->method != ext_method)
++ && (newroot->method != extssh_method))
+ error (1, 0,
+ "Read-only repository feature unavailable with remote roots (cvsroot = %s)",
+ cvsroot_copy);
+@@ -828,6 +904,7 @@
+ case server_method:
+ case ext_method:
+ no_port = 1;
++ case extssh_method:
+ /* no_password already set */
+ check_hostname = 1;
+ break;
+@@ -871,8 +948,8 @@
+ if (no_port && newroot->port)
+ {
+ error (0, 0,
+-"CVSROOT port specification is only valid for gserver, kserver,");
+- error (0, 0, "and pserver connection methods.");
++"CVSROOT port specification is only valid for extssh,");
++ error (0, 0, "gserver, kserver and pserver connection methods.");
+ goto error_exit;
+ }
+ #endif /* defined(CLIENT_SUPPORT) || defined (SERVER_SUPPORT) */
+--- cvs-1.12.13+real.orig/src/root.h
++++ cvs-1.12.13+real/src/root.h
+@@ -1,3 +1,5 @@
++/* $MirOS: src/gnu/usr.bin/cvs/src/root.h,v 1.5 2017/01/08 19:13:05 tg Exp $ */
++
+ /*
+ * Copyright (C) 1986-2005 The Free Software Foundation, Inc.
+ *
+@@ -22,6 +24,7 @@
+ kserver_method,
+ gserver_method,
+ ext_method,
++ extssh_method,
+ fork_method
+ } CVSmethod;
+ extern const char method_names[][16]; /* change this in root.c if you change
+@@ -62,8 +65,10 @@
+ __attribute__ ((__malloc__));
+ void Create_Root (const char *dir, const char *rootdir);
+ void root_allow_add (const char *, const char *configPath);
++void root_allow_regexp_add (const char *, const char *configPath);
+ void root_allow_free (void);
+ bool root_allow_ok (const char *);
++int root_allow_used (void);
+ struct config *get_root_allow_config (const char *arg, const char *configPath);
+ const char *primary_root_translate (const char *root_in);
+ const char *primary_root_inverse_translate (const char *root_in);
+--- cvs-1.12.13+real.orig/src/rsh-client.c
++++ cvs-1.12.13+real/src/rsh-client.c
+@@ -53,9 +53,11 @@
+ char *cvs_server = (root->cvs_server != NULL
+ ? root->cvs_server : getenv ("CVS_SERVER"));
+ int i = 0;
+- /* This needs to fit "rsh", "-b", "-l", "USER", "host",
+- "cmd (w/ args)", and NULL. We leave some room to grow. */
+- char *rsh_argv[10];
++ /* This needs to fit "rsh", "-b", "-l", "USER", "-p", port,
++ "--", "host", "cvs", "-R", "server", and NULL.
++ We leave some room to grow. */
++ char *rsh_argv[16];
++ char argvport[16];
+
+ if (!cvs_rsh)
+ /* People sometimes suggest or assume that this should default
+@@ -97,8 +99,20 @@
+ rsh_argv[i++] = root->username;
+ }
+
++ if (root->method == extssh_method && root->port)
++ {
++ snprintf(argvport, sizeof(argvport), "%d", root->port);
++ rsh_argv[i++] = "-p";
++ rsh_argv[i++] = argvport;
++ }
++
++ /* Only non-option arguments from here. (CVE-2017-12836) */
++ rsh_argv[i++] = "--";
++
+ rsh_argv[i++] = root->hostname;
+ rsh_argv[i++] = cvs_server;
++ if (readonlyfs)
++ rsh_argv[i++] = "-R";
+ rsh_argv[i++] = "server";
+
+ /* Mark the end of the arg list. */
+@@ -154,10 +168,11 @@
+ * on the server machine does not set CVSROOT to something
+ * containing a colon (or better yet, upgrade the server).
+ */
+- command = Xasprintf ("%s server", cvs_server);
++ command = Xasprintf ("%s%s server", cvs_server, readonlyfs ? " -R" : "");
+
+ {
+- char *argv[10];
++ char argvport[16];
++ char *argv[16];
+ char **p = argv;
+
+ *p++ = cvs_rsh;
+@@ -171,6 +186,15 @@
+ *p++ = root->username;
+ }
+
++ if (root->method == extssh_method && root->port)
++ {
++ snprintf(argvport, sizeof(argvport), "%d", root->port);
++ *p++ = "-p";
++ *p++ = argvport;
++ }
++
++ *p++ = "--";
++
+ *p++ = root->hostname;
+ *p++ = command;
+ *p++ = NULL;
+--- cvs-1.12.13+real.orig/src/sanity.sh
++++ cvs-1.12.13+real/src/sanity.sh
+@@ -1,5 +1,9 @@
+ #! /bin/sh
+ :
++# $MirOS: src/gnu/usr.bin/cvs/src/sanity.sh,v 1.7 2017/01/08 21:14:34 tg Exp $
++#-
++# set DISABLE_ANY_RSH=1 to skip rsh and ssh calls
++#
+ # sanity.sh -- a growing testsuite for cvs.
+ #
+ # The copyright notice said: "Copyright (C) 1992, 1993 Cygnus Support"
+@@ -90,6 +94,23 @@
+ fi
+ }
+
++do_save_TZ()
++{
++ saveset_TZ=${TZ+false}
++ save_TZ=$TZ
++ TZ=UTC0; export TZ
++}
++
++do_restore_TZ()
++{
++ if $saveset_TZ :; then
++ unset TZ
++ else
++ TZ=$save_TZ
++ export TZ
++ fi
++}
++
+ # See TODO list at end of file.
+
+ # required to make this script work properly.
+@@ -1205,6 +1226,11 @@
+ # 77.
+ require_rsh ()
+ {
++ if test x"$DISABLE_ANY_RSH" = x"1"; then
++ skipreason="administratively prohibited"
++ return 77
++ fi
++
+ host=${remotehost-"`hostname`"}
+ result=`$1 $host 'echo test'`
+ rc=$?
+@@ -1313,7 +1339,7 @@
+ if $remote && $LS $TMPDIR/cvs-serv* >/dev/null 2>&1; then
+ # A true value means ls found files/directories with these names.
+ # Give the server some time to finish, then retry.
+- sleep 1
++ sleep 2
+ if $LS $TMPDIR/cvs-serv* >/dev/null 2>&1; then
+ warn "$1" "Found cvs-serv* directories in $TMPDIR."
+ # The above will exit if $skipfail
+@@ -1503,6 +1529,9 @@
+ # lack \|).
+ dotest ()
+ {
++ #echo dotest >$TESTDIR/_dotest.fun
++ #pwd >$TESTDIR/_dotest.cwd
++ #printf '%s\n' "$2" >$TESTDIR/_dotest.cmd
+ rm -f $TESTDIR/dotest.ex? 2>&1
+ eval "$2" >$TESTDIR/dotest.tmp 2>&1
+ status=$?
+@@ -1518,6 +1547,9 @@
+ # Like dotest except only 2 args and result must exactly match stdin
+ dotest_lit ()
+ {
++ #echo dotest_lit >$TESTDIR/_dotest.fun
++ #pwd >$TESTDIR/_dotest.cwd
++ #printf '%s\n' "$2" >$TESTDIR/_dotest.cmd
+ rm -f $TESTDIR/dotest.ex? 2>&1
+ eval "$2" >$TESTDIR/dotest.tmp 2>&1
+ status=$?
+@@ -1543,6 +1575,9 @@
+ # Like dotest except exitstatus should be nonzero.
+ dotest_fail ()
+ {
++ #echo dotest_fail >$TESTDIR/_dotest.fun
++ #pwd >$TESTDIR/_dotest.cwd
++ #printf '%s\n' "$2" >$TESTDIR/_dotest.cmd
+ rm -f $TESTDIR/dotest.ex? 2>&1
+ eval "$2" >$TESTDIR/dotest.tmp 2>&1
+ status=$?
+@@ -1558,6 +1593,9 @@
+ # Like dotest except output is sorted.
+ dotest_sort ()
+ {
++ #echo dotest_sort >$TESTDIR/_dotest.fun
++ #pwd >$TESTDIR/_dotest.cwd
++ #printf '%s\n' "$2" >$TESTDIR/_dotest.cmd
+ rm -f $TESTDIR/dotest.ex? 2>&1
+ eval "$2" >$TESTDIR/dotest.tmp1 2>&1
+ status=$?
+@@ -1574,6 +1612,9 @@
+ # Like dotest_fail except output is sorted.
+ dotest_fail_sort ()
+ {
++ #echo dotest_fail_sort >$TESTDIR/_dotest.fun
++ #pwd >$TESTDIR/_dotest.cwd
++ #printf '%s\n' "$2" >$TESTDIR/_dotest.cmd
+ rm -f $TESTDIR/dotest.ex? 2>&1
+ eval "$2" >$TESTDIR/dotest.tmp1 2>&1
+ status=$?
+@@ -1622,6 +1663,7 @@
+ tests="$tests parseroot parseroot2 parseroot3 files spacefiles"
+ tests="${tests} commit-readonly commit-add-missing"
+ tests="${tests} status"
++ tests="${tests} suck"
+ # Branching, tagging, removing, adding, multiple directories
+ tests="${tests} rdiff rdiff-short"
+ tests="${tests} rdiff2 diff diffnl death death2"
+@@ -2600,6 +2642,22 @@
+ ###
+ dotest init-1 "$testcvs init"
+
++# We might need to allow "cvs admin" access.
++mkdir wnt
++cd wnt
++dotest init-1a "$testcvs -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++cd CVSROOT
++sed -e 's/^#UserAdminOptions=/UserAdminOptions=/' \
++ -e '/^LogHistory/d' \
++ <config >tmpconfig
++mv tmpconfig config
++dotest init-1b "$testcvs -q ci -m allow-cvs-admin" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++cd ../..
++rm -r wnt
++
+ # Now hide the primary root behind a secondary if requested.
+ if $proxy; then
+ # Save the primary root.
+@@ -2726,7 +2784,7 @@
+ esac # \$dir
+
+ # Avoid timestamp comparison issues with rsync.
+-sleep 1
++sleep 2
+ EOF
+ chmod a+x $TESTDIR/sync-secondary
+
+@@ -2781,6 +2839,21 @@
+ ###
+ dotest init-2 "$testcvs init"
+
++# We might need to allow "cvs admin" access.
++mkdir wnt
++cd wnt
++dotest init-2a "$testcvs -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++cd CVSROOT
++sed -e 's/^#UserAdminOptions=/UserAdminOptions=/' \
++ -e '/^LogHistory/d' \
++ <config >tmpconfig
++mv tmpconfig config
++dotest init-2b "$testcvs -q ci -m allow-cvs-admin" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++cd ../..
++rm -r wnt
+
+
+ ###
+@@ -2805,6 +2878,7 @@
+
+ Copyright (C) [0-9]* Free Software Foundation, Inc.
+
++Portions contributed by Thorsten Glaser for the MirOS Project and Debian.
+ Senior active maintainers include Larry Jones, Derek R. Price,
+ and Mark D. Baushke. Please see the AUTHORS and README files from the CVS
+ distribution kit for a complete list of contributors and copyrights.
+@@ -2822,8 +2896,8 @@
+ #Secondary Server: Concurrent Versions System (CVS) [0-9p.]* (.*server)'
+ if $remote; then
+ dotest version-2r "${testcvs} version" \
+-'Client: Concurrent Versions System (CVS) [0-9p.]* (client.*)
+-Server: Concurrent Versions System (CVS) [0-9p.]* (.*server)'
++'Client: Concurrent Versions System (CVS) [0-9p.]*\(-Mir[^ ]*\)* (client.*)
++Server: Concurrent Versions System (CVS) [0-9p.]*\(-Mir[^ ]*\)* (.*server)'
+ else
+ dotest version-2 "${testcvs} version" \
+ 'Concurrent Versions System (CVS) [0-9.]*.*'
+@@ -2846,7 +2920,7 @@
+ dotest basica-0a "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest basica-0b "$testcvs add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd ..
+ rm -r 1
+
+@@ -2865,17 +2939,17 @@
+ # Remote CVS gives the "cannot open CVS/Entries" error, which is
+ # clearly a bug, but not a simple one to fix.
+ dotest basica-1a10 "$testcvs -n add sdir" \
+-"Directory $CVSROOT_DIRNAME/first-dir/sdir added to the repository" \
++"Directory $CVSROOT_DIRNAME/first-dir/sdir put under version control" \
+ "$SPROG add: cannot open CVS/Entries for reading: No such file or directory
+-Directory $CVSROOT_DIRNAME/first-dir/sdir added to the repository"
++Directory $CVSROOT_DIRNAME/first-dir/sdir put under version control"
+ dotest_fail basica-1a11 \
+ "test -d $CVSROOT_DIRNAME/first-dir/sdir"
+ dotest basica-2 "$testcvs add sdir" \
+-"Directory $CVSROOT_DIRNAME/first-dir/sdir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir/sdir put under version control"
+ cd sdir
+ mkdir ssdir
+ dotest basica-3 "$testcvs add ssdir" \
+-"Directory $CVSROOT_DIRNAME/first-dir/sdir/ssdir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir/sdir/ssdir put under version control"
+ cd ssdir
+ echo ssfile >ssfile
+
+@@ -3145,7 +3219,7 @@
+ dotest basicb-0d0 "${testcvs} -q co -l ." ""
+ mkdir first-dir
+ dotest basicb-0e "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd ..
+ rm -r 2
+
+@@ -3165,8 +3239,8 @@
+ # special only when it is directly in $CVSROOT/CVSROOT.
+ mkdir Emptydir sdir2
+ dotest basicb-2 "${testcvs} add Emptydir sdir2" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/Emptydir added to the repository
+-Directory ${CVSROOT_DIRNAME}/first-dir/sdir2 added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/Emptydir put under version control
++Directory ${CVSROOT_DIRNAME}/first-dir/sdir2 put under version control"
+ cd Emptydir
+ echo sfile1 starts >sfile1
+ dotest basicb-2a10 "${testcvs} -n add sfile1" \
+@@ -3288,7 +3362,7 @@
+ dotest basicb-14 "${testcvs} -q co -l ." 'U topfile'
+ mkdir second-dir
+ dotest basicb-15 "${testcvs} add second-dir" \
+-"Directory ${CVSROOT_DIRNAME}/second-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/second-dir put under version control"
+ cd second-dir
+ touch aa
+ dotest basicb-16 "${testcvs} add aa" \
+@@ -3327,10 +3401,15 @@
+ # many other folks are still using the older 'invalid option'
+ # lib/getopt.c will use POSIX when __posixly_correct
+ # otherwise the other, so accept both of them. -- mdb
++ # Added optional single quotes. -- mirabilos
++ # The above is actually untrue, POSIX only documents some older
++ # texts that can be used and explicitly leaves open the format
++ # of these messages. Also, GNU getopt is broken and does not
++ # use __progname in the first place. *sigh* -- mirabilos
+ dotest_fail basicb-21 "${testcvs} -q admin -H" \
+-"admin: invalid option -- H
++"admin: invalid option -- '*H'*
+ ${CPROG} \[admin aborted\]: specify ${CPROG} -H admin for usage information" \
+-"admin: illegal option -- H
++"cvs: illegal option -- '*H'*
+ ${CPROG} \[admin aborted\]: specify ${CPROG} -H admin for usage information"
+ cd ..
+ rmdir 1
+@@ -3356,8 +3435,8 @@
+ dotest basicc-2 "$testcvs -q co -l ."
+ mkdir first-dir second-dir
+ dotest basicc-3 "${testcvs} add first-dir second-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository
+-Directory ${CVSROOT_DIRNAME}/second-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control
++Directory ${CVSROOT_DIRNAME}/second-dir put under version control"
+ # Old versions of CVS often didn't create this top-level CVS
+ # directory in the first place. I think that maybe the only
+ # way to get it to work currently is to let CVS create it,
+@@ -3807,7 +3886,7 @@
+ for i in dir1 dir2 dir3 dir4 dir5 dir6 dir7 dir8; do
+ mkdir $i
+ dotest deep-2-$i "${testcvs} add $i" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir1[/dir0-9]* added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir1[/dir0-9]* put under version control"
+ cd $i
+ echo file1 >file1
+ dotest deep-3-$i "${testcvs} add file1" \
+@@ -3924,7 +4003,7 @@
+ if test ! -d $i ; then
+ mkdir $i
+ dotest basic2-2-$i "${testcvs} add $i" \
+-"Directory ${CVSROOT_DIRNAME}/.*/$i added to the repository"
++"Directory ${CVSROOT_DIRNAME}/.*/$i put under version control"
+ fi
+
+ cd $i
+@@ -4907,14 +4986,14 @@
+
+ # try and list a file before it's created, during an old revision, in
+ # a period when it was dead and in the future
+- time_prebirth=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 1
++ time_prebirth=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 2
+ touch dated
+ dotest ls-D-init-1 "$testcvs -Q add dated"
+ dotest ls-D-init-2 "$testcvs -Q ci -mm dated"
+- time_newborn=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 1
++ time_newborn=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 2
+ echo mm >> dated
+ dotest ls-D-init-2 "$testcvs -Q ci -mm dated"
+- time_predeath=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 1
++ time_predeath=`date '+%Y-%m-%d %H:%M:%S'` ; sleep 2
+ rm dated
+ dotest ls-D-init-3 "$testcvs -Q rm dated"
+ dotest ls-D-init-4 "$testcvs -Q ci -mm dated"
+@@ -4963,7 +5042,6 @@
+ CVSROOT=":pserver;proxy=localhost;proxyport=8080:localhost/dev/null"
+ dotest parseroot-3r "$testcvs -d'$CVSROOT' logout" \
+ "Logging out of :pserver:$username@localhost:2401/dev/null
+-$CPROG logout: warning: failed to open $HOME/\.cvspass for reading: No such file or directory
+ $CPROG logout: Entry not found."
+ CVSROOT=":pserver;proxyport=8080:localhost/dev/null"
+ dotest_fail parseroot-4r "$testcvs -d'$CVSROOT' logout" \
+@@ -5010,7 +5088,7 @@
+ dotest files-1 "${testcvs} -q co -l ." ""
+ mkdir first-dir
+ dotest files-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch tfile
+ dotest files-3 "${testcvs} add tfile" \
+@@ -5023,7 +5101,7 @@
+ dotest files-6 "${testcvs} -q update -r C" ""
+ mkdir dir
+ dotest files-7 "${testcvs} add dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir added to the repository
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir put under version control
+ --> Using per-directory sticky tag .C'"
+ cd dir
+ touch .file
+@@ -5032,12 +5110,12 @@
+ ${SPROG} add: use .${SPROG} commit. to add this file permanently"
+ mkdir sdir
+ dotest files-7c "${testcvs} add sdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir/sdir added to the repository
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir/sdir put under version control
+ --> Using per-directory sticky tag .C'"
+ cd sdir
+ mkdir ssdir
+ dotest files-8 "${testcvs} add ssdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir/sdir/ssdir added to the repository
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir/sdir/ssdir put under version control
+ --> Using per-directory sticky tag .C'"
+ cd ssdir
+ touch .file
+@@ -5117,10 +5195,10 @@
+ initial revision: 1\.1"
+ mkdir 'first dir'
+ dotest spacefiles-4 "${testcvs} add 'first dir'" \
+-"Directory ${CVSROOT_DIRNAME}/first dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first dir put under version control"
+ mkdir ./-b
+ dotest spacefiles-5 "${testcvs} add -- -b" \
+-"Directory ${CVSROOT_DIRNAME}/-b added to the repository"
++"Directory ${CVSROOT_DIRNAME}/-b put under version control"
+ cd 'first dir'
+ touch 'a file'
+ dotest spacefiles-6 "${testcvs} add 'a file'" \
+@@ -5193,7 +5271,7 @@
+ dotest status-init-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest status-init-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ echo a line >tfile
+ dotest status-init-3 "${testcvs} add tfile" \
+@@ -5285,7 +5363,7 @@
+ cd ..
+ mkdir fourth-dir
+ dotest status-init-8 "$testcvs add fourth-dir" \
+-"Directory $CVSROOT_DIRNAME/fourth-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/fourth-dir put under version control"
+ cd fourth-dir
+ echo yet another line >t3file
+ dotest status-init-9 "$testcvs add t3file" \
+@@ -5297,7 +5375,7 @@
+ cd ../first-dir
+ mkdir third-dir
+ dotest status-init-11 "$testcvs add third-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir/third-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir/third-dir put under version control"
+ cd third-dir
+ echo another line >t2file
+ dotest status-init-12 "$testcvs add t2file" \
+@@ -5650,7 +5728,7 @@
+ dotest diff-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest diff-2 "$testcvs add first-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir put under version control"
+ cd first-dir
+
+ # diff is anomalous. Most CVS commands print the "nothing
+@@ -5697,7 +5775,7 @@
+ dotest diffnl-000 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest diffnl-001 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ ${AWK} 'BEGIN {printf("one\ntwo\nthree\nfour\nfive\nsix")}' </dev/null >abc
+@@ -5861,7 +5939,7 @@
+ # doesn't get confused by it.
+ mkdir subdir
+ dotest 65a0 "${testcvs} add subdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/subdir put under version control"
+ cd subdir
+ echo file in subdir >sfile
+ dotest 65a1 "${testcvs} add sfile" \
+@@ -6590,7 +6668,7 @@
+ dotest rmadd-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest rmadd-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ echo first file1 >file1
+ dotest rmadd-3 "${testcvs} add file1" \
+@@ -6668,6 +6746,7 @@
+ >$CVSROOT_DIRNAME/CVSROOT/val-tags-tmp
+ mv $CVSROOT_DIRNAME/CVSROOT/val-tags-tmp \
+ $CVSROOT_DIRNAME/CVSROOT/val-tags
++ rm -f $CVSROOT_DIRNAME/CVSROOT/val-tags.db
+
+ dotest rmadd-18 "$testcvs -q update -p -r mynonbranch file1" \
+ "first file1"
+@@ -6733,7 +6812,7 @@
+ # now try forced revision with recursion
+ mkdir sub
+ dotest rmadd-26 "${testcvs} -q add sub" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/sub added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/sub put under version control"
+ echo hello >sub/subfile
+ dotest rmadd-27 "${testcvs} -q add sub/subfile" \
+ "${SPROG} add: use .${SPROG} commit. to add this file permanently"
+@@ -6790,7 +6869,7 @@
+ dotest rmadd2-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest rmadd2-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ echo 'initial contents' >file1
+ dotest rmadd2-3 "${testcvs} add file1" \
+@@ -6890,7 +6969,7 @@
+ dotest rmadd3-init1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest rmadd3-init2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ echo initial content for file1 >file1
+@@ -6941,7 +7020,7 @@
+ dotest resurrection-init1 "$testcvs -q co -l ." ''
+ mkdir first-dir
+ dotest resurrection-init2 "$testcvs add first-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir put under version control"
+ cd first-dir
+
+ echo initial content for file1 >file1
+@@ -7106,11 +7185,11 @@
+ dotest dirs2-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest dirs2-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ mkdir sdir
+ dotest dirs2-3 "${testcvs} add sdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/sdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/sdir put under version control"
+ touch sdir/file1
+ dotest dirs2-4 "${testcvs} add sdir/file1" \
+ "${SPROG} add: scheduling file .sdir/file1. for addition
+@@ -7452,7 +7531,7 @@
+ '"${SPROG}"' add: use .'"${SPROG}"' commit. to add this file permanently'
+ mkdir dir1
+ dotest branches2-9 "${testcvs} add dir1" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir1 added to the repository
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir1 put under version control
+ --> Using per-directory sticky tag "'`'"b1'"
+ echo "file3 first revision" > dir1/file3
+ dotest branches2-10 "${testcvs} add dir1/file3" \
+@@ -7802,7 +7881,7 @@
+ cd first-dir
+ mkdir dir2
+ dotest branches2-25 "${testcvs} add dir2" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir2 added to the repository
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir2 put under version control
+ --> Using per-directory sticky tag "'`'"b1'"
+ echo "file4 first revision" > dir2/file4
+ dotest branches2-26 "${testcvs} add dir2/file4" \
+@@ -7952,10 +8031,10 @@
+ cd first-dir
+ mkdir branches mixed mixed2 versions
+ dotest branches4-2 "${testcvs} -q add branches mixed mixed2 versions" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/branches added to the repository
+-Directory ${CVSROOT_DIRNAME}/first-dir/mixed added to the repository
+-Directory ${CVSROOT_DIRNAME}/first-dir/mixed2 added to the repository
+-Directory ${CVSROOT_DIRNAME}/first-dir/versions added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/branches put under version control
++Directory ${CVSROOT_DIRNAME}/first-dir/mixed put under version control
++Directory ${CVSROOT_DIRNAME}/first-dir/mixed2 put under version control
++Directory ${CVSROOT_DIRNAME}/first-dir/versions put under version control"
+
+ echo file1 >branches/file1
+ echo file2 >branches/file2
+@@ -8031,7 +8110,7 @@
+ dotest tagc-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest tagc-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch file1 file2
+ dotest tagc-3 "${testcvs} add file1 file2" \
+@@ -8052,7 +8131,7 @@
+ T file2"
+ # Avoid timestamp granularity bugs (FIXME: CVS should be
+ # doing the sleep, right?).
+- sleep 1
++ sleep 2
+ echo myedit >>file1
+ dotest tagc-6a "${testcvs} rm -f file2" \
+ "${SPROG} remove: scheduling .file2. for removal
+@@ -8193,7 +8272,7 @@
+ dotest tagf-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest tagf-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch file1 file2
+ dotest tagf-3 "${testcvs} add file1 file2" \
+@@ -8397,7 +8476,7 @@
+ dotest tag-space-init-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest tag-space-init-2 "$testcvs add first-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir put under version control"
+ cd first-dir
+ touch file1
+ dotest tag-space-init-3 "$testcvs add file1" \
+@@ -8672,7 +8751,7 @@
+ dotest rcslib-merge-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest rcslib-merge-2 "$testcvs -q add first-dir" \
+-"Directory $CVSROOT_DIRNAME.*/first-dir added to the repository"
++"Directory $CVSROOT_DIRNAME.*/first-dir put under version control"
+ cd ..; rm -r 1
+
+ dotest rcslib-merge-3 "$testcvs -q co first-dir" ""
+@@ -9320,8 +9399,7 @@
+ # Also the -d option.
+
+ # Set a predictable time zone for these tests.
+- save_TZ=$TZ
+- TZ=UTC0; export TZ
++ do_save_TZ
+
+ mkdir 1; cd 1
+ mkdir adir bdir cdir
+@@ -9444,7 +9522,7 @@
+ dotest_fail importc-12 "test -d ${TESTDIR}/other" ""
+
+ dokeep
+- TZ=$save_TZ
++ do_restore_TZ
+ cd ..
+ rm -r 1 2
+ modify_repo rm -rf $CVSROOT_DIRNAME/first-dir
+@@ -9757,7 +9835,19 @@
+ N import-quirks-4/file1
+ N import-quirks-4/file2
+ N import-quirks-4/file3
+-No conflicts created by this import"
++No conflicts created by this import
++cvs import: warning: you are using an even vendor branch, which can
++lead to problems: '1.1.2'. Use an odd branch such as '1.1.3' instead." \
++"
++
++N import-quirks-4/file1
++N import-quirks-4/file2
++N import-quirks-4/file3
++No conflicts created by this import
++cvs import: warning: you are using an even vendor branch, which can
++cvs import: warning: you are using an even vendor branch, which can
++lead to problems: '1.1.2'. Use an odd branch such as '1.1.3' instead.
++lead to problems: '1.1.2'. Use an odd branch such as '1.1.3' instead."
+
+ dokeep
+ cd ..
+@@ -9785,14 +9875,18 @@
+ # Create the module.
+ dotest import-after-initial-1 \
+ "$testcvs -Q import -m. $module X Y" ''
++ sync >/dev/null 2>&1
+
+ file=m
+ # Check it out and add a file.
+ dotest import-after-initial-2 "$testcvs -Q co $module" ''
++ sync >/dev/null 2>&1
+ cd $module
+ echo original > $file
+ dotest import-after-initial-3 "${testcvs} -Q add $file" ""
++ sync >/dev/null 2>&1
+ dotest import-after-initial-4 "$testcvs -Q ci -m. $file"
++ sync >/dev/null 2>&1
+
+ # Delay a little so the following import isn't done in the same
+ # second as the preceding commit.
+@@ -9803,12 +9897,14 @@
+ mkdir sub
+ cd sub
+ echo newer-via-import > $file
++ sync >/dev/null 2>&1
+ dotest import-after-initial-5 \
+ "$testcvs -Q import -m. $module X Y2" ''
++ sync >/dev/null 2>&1
+ cd ..
+
+ # Sleep a second so we're sure to be after the second of the import.
+- sleep 1
++ sleep 2
+
+ dotest import-after-initial-6 \
+ "$testcvs -Q update -p -D now $file" 'original'
+@@ -10380,7 +10476,7 @@
+ dotest join2-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest join2-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ echo 'initial contents of file1' >file1
+ dotest join2-3 "${testcvs} add file1" \
+@@ -10489,7 +10585,7 @@
+ dotest join3-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest join3-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ echo 'initial contents of file1' >file1
+ dotest join3-3 "${testcvs} add file1" \
+@@ -11130,7 +11226,7 @@
+ module=x
+ mkdir $module
+ dotest join-admin-0-2 "$testcvs -q add $module" \
+-"Directory $CVSROOT_DIRNAME/$module added to the repository"
++"Directory $CVSROOT_DIRNAME/$module put under version control"
+ cd $module
+
+ # Create a file so applying the first tag works.
+@@ -11182,7 +11278,7 @@
+ module=x
+ mkdir $module
+ dotest join-admin-2-2 "$testcvs -q add $module" \
+-"Directory ${CVSROOT_DIRNAME}/x added to the repository"
++"Directory ${CVSROOT_DIRNAME}/x put under version control"
+ cd $module
+
+ # Create a file so applying the first tag works.
+@@ -11252,7 +11348,7 @@
+ dotest join-rm-init-1 "$testcvs -q co -l ." ''
+ mkdir $module
+ dotest join-rm-init-2 "$testcvs -q add $module" \
+-"Directory $CVSROOT_DIRNAME/$module added to the repository"
++"Directory $CVSROOT_DIRNAME/$module put under version control"
+ cd $module
+
+ # add some files.
+@@ -11497,7 +11593,7 @@
+ echo add a line >>a
+ mkdir dir1
+ dotest conflicts-127b "${testcvs} add dir1" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir1 added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir1 put under version control"
+ dotest conflicts-128 "${testcvs} -q ci -m changed" \
+ "$CVSROOT_DIRNAME/first-dir/a,v <-- a
+ new revision: 1\.2; previous revision: 1\.1"
+@@ -11945,7 +12041,7 @@
+ dotest conflicts3-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest conflicts3-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd ..
+ mkdir 2; cd 2
+ dotest conflicts3-3 "${testcvs} -q co -l first-dir" ''
+@@ -11994,7 +12090,7 @@
+ # and see that CVS doesn't lose its mind.
+ mkdir sdir
+ dotest conflicts3-14 "${testcvs} add sdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/sdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/sdir put under version control"
+ touch sdir/sfile
+ dotest conflicts3-14a "${testcvs} add sdir/sfile" \
+ "${SPROG} add: scheduling file .sdir/sfile. for addition
+@@ -12107,7 +12203,7 @@
+ dotest clean-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest clean-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ echo "The usual boring test text." > cleanme.txt
+ dotest clean-3 "${testcvs} add cleanme.txt" \
+@@ -12437,12 +12533,12 @@
+ cd first-dir
+ mkdir subdir
+ dotest modules-143a "${testcvs} add subdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/subdir put under version control"
+
+ cd subdir
+ mkdir ssdir
+ dotest modules-143b "${testcvs} add ssdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/subdir/ssdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/subdir/ssdir put under version control"
+
+ touch a b
+
+@@ -12699,9 +12795,9 @@
+ mkdir first-dir second-dir third-dir
+ dotest modules2-setup-2 \
+ "${testcvs} add first-dir second-dir third-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository
+-Directory ${CVSROOT_DIRNAME}/second-dir added to the repository
+-Directory ${CVSROOT_DIRNAME}/third-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control
++Directory ${CVSROOT_DIRNAME}/second-dir put under version control
++Directory ${CVSROOT_DIRNAME}/third-dir put under version control"
+ cd third-dir
+ touch file3
+ dotest modules2-setup-3 "${testcvs} add file3" \
+@@ -12947,7 +13043,7 @@
+ dotest modules3-0 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest modules3-1 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+
+ cd first-dir
+ echo file1 >file1
+@@ -13008,11 +13104,11 @@
+ cd second-dir
+ mkdir suba
+ dotest modules3-7-workaround1 "${testcvs} add suba" \
+-"Directory ${CVSROOT_DIRNAME}/second-dir/suba added to the repository"
++"Directory ${CVSROOT_DIRNAME}/second-dir/suba put under version control"
+ cd suba
+ mkdir subb
+ dotest modules3-7-workaround2 "${testcvs} add subb" \
+-"Directory ${CVSROOT_DIRNAME}/second-dir/suba/subb added to the repository"
++"Directory ${CVSROOT_DIRNAME}/second-dir/suba/subb put under version control"
+ cd ../..
+ fi
+
+@@ -13113,13 +13209,13 @@
+ dotest modules4-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest modules4-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+
+ cd first-dir
+ mkdir subdir subdir_long
+ dotest modules4-3 "${testcvs} add subdir subdir_long" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository
+-Directory ${CVSROOT_DIRNAME}/first-dir/subdir_long added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/subdir put under version control
++Directory ${CVSROOT_DIRNAME}/first-dir/subdir_long put under version control"
+
+ echo file1 > file1
+ dotest modules4-4 "${testcvs} add file1" \
+@@ -13248,11 +13344,11 @@
+ cd first-dir
+ mkdir subdir
+ dotest modules5-2 "${testcvs} add subdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/subdir put under version control"
+ cd subdir
+ mkdir ssdir
+ dotest modules5-3 "${testcvs} add ssdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/subdir/ssdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/subdir/ssdir put under version control"
+ touch a b
+ dotest modules5-4 "${testcvs} add a b" \
+ "${SPROG} add: scheduling file .a. for addition
+@@ -13291,7 +13387,7 @@
+ for i in checkout export tag; do
+ cat >> ${CVSROOT_DIRNAME}/$i.sh <<EOF
+ #! $TESTSHELL
+-sleep 1
++sleep 2
+ echo "$i script invoked in \`pwd\`"
+ echo "args: \$@"
+ EOF
+@@ -13950,12 +14046,12 @@
+ mkdir mod2-2
+ mkdir mod2-2/sub2-2
+ dotest cvsadm-2a "${testcvs} add mod1 mod1-2 mod2 mod2/sub2 mod2-2 mod2-2/sub2-2" \
+-"Directory ${CVSROOT_DIRNAME}/mod1 added to the repository
+-Directory ${CVSROOT_DIRNAME}/mod1-2 added to the repository
+-Directory ${CVSROOT_DIRNAME}/mod2 added to the repository
+-Directory ${CVSROOT_DIRNAME}/mod2/sub2 added to the repository
+-Directory ${CVSROOT_DIRNAME}/mod2-2 added to the repository
+-Directory ${CVSROOT_DIRNAME}/mod2-2/sub2-2 added to the repository"
++"Directory ${CVSROOT_DIRNAME}/mod1 put under version control
++Directory ${CVSROOT_DIRNAME}/mod1-2 put under version control
++Directory ${CVSROOT_DIRNAME}/mod2 put under version control
++Directory ${CVSROOT_DIRNAME}/mod2/sub2 put under version control
++Directory ${CVSROOT_DIRNAME}/mod2-2 put under version control
++Directory ${CVSROOT_DIRNAME}/mod2-2/sub2-2 put under version control"
+
+ # Populate the directories for the halibut
+ echo "file1" > mod1/file1
+@@ -15001,7 +15097,7 @@
+ echo "file1" > mod1/file1
+ mkdir moda/modasub
+ dotest emptydir-3b "${testcvs} add moda/modasub" \
+-"Directory ${CVSROOT_DIRNAME}/moda/modasub added to the repository"
++"Directory ${CVSROOT_DIRNAME}/moda/modasub put under version control"
+ echo "filea" > moda/modasub/filea
+ dotest emptydir-4 "${testcvs} add mod1/file1 moda/modasub/filea" \
+ "${SPROG} add: scheduling file .mod1/file1. for addition
+@@ -15328,8 +15424,8 @@
+ dotest toplevel-1 "${testcvs} -q co -l ." ''
+ mkdir top-dir second-dir
+ dotest toplevel-2 "${testcvs} add top-dir second-dir" \
+-"Directory ${CVSROOT_DIRNAME}/top-dir added to the repository
+-Directory ${CVSROOT_DIRNAME}/second-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/top-dir put under version control
++Directory ${CVSROOT_DIRNAME}/second-dir put under version control"
+ cd top-dir
+
+ touch file1
+@@ -15447,8 +15543,8 @@
+ dotest toplevel2-1 "${testcvs} -q co -l ." ''
+ mkdir top-dir second-dir
+ dotest toplevel2-2 "${testcvs} add top-dir second-dir" \
+-"Directory ${CVSROOT_DIRNAME}/top-dir added to the repository
+-Directory ${CVSROOT_DIRNAME}/second-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/top-dir put under version control
++Directory ${CVSROOT_DIRNAME}/second-dir put under version control"
+ cd top-dir
+
+ touch file1
+@@ -15686,7 +15782,7 @@
+ # can see the "CVS:" lines.
+ cat >${TESTDIR}/editme <<EOF
+ #!${TESTSHELL}
+-sleep 1
++sleep 2
+ sed <\$1 -e 's/^/x/' >${TESTDIR}/edit.new
+ mv ${TESTDIR}/edit.new \$1
+ exit 0
+@@ -15697,7 +15793,7 @@
+ dotest editor-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest editor-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch file1 file2
+ dotest editor-3 "${testcvs} add file1 file2" \
+@@ -15741,6 +15837,7 @@
+ revision 1\.1
+ date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid};
+ branches: 1\.1\.2;
++x
+ xCVS: ----------------------------------------------------------------------
+ xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically
+ xCVS:
+@@ -15752,6 +15849,7 @@
+ ----------------------------
+ revision 1\.1\.2\.1
+ date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid};
++x
+ xCVS: ----------------------------------------------------------------------
+ xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically
+ xCVS:
+@@ -15779,6 +15877,7 @@
+ revision 1\.1
+ date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid};
+ branches: 1\.1\.2;
++x
+ xCVS: ----------------------------------------------------------------------
+ xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically
+ xCVS:
+@@ -15790,6 +15889,7 @@
+ ----------------------------
+ revision 1\.1\.2\.1
+ date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid};
++x
+ xCVS: ----------------------------------------------------------------------
+ xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically
+ xCVS:
+@@ -15811,6 +15911,7 @@
+ revision 1\.1
+ date: ${ISO8601DATE}; author: ${username}; state: Exp; commitid: ${commitid};
+ branches: 1\.1\.2;
++x
+ xCVS: ----------------------------------------------------------------------
+ xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically
+ xCVS:
+@@ -15822,6 +15923,7 @@
+ ----------------------------
+ revision 1\.1\.2\.1
+ date: ${ISO8601DATE}; author: ${username}; state: Exp; lines: ${PLUS}1 -0; commitid: ${commitid};
++x
+ xCVS: ----------------------------------------------------------------------
+ xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically
+ xCVS:
+@@ -15836,7 +15938,7 @@
+ # Test CVS's response to an unchanged log message
+ cat >${TESTDIR}/editme <<EOF
+ #!${TESTSHELL}
+-sleep 1
++sleep 2
+ exit 0
+ EOF
+ chmod +x ${TESTDIR}/editme
+@@ -15849,7 +15951,7 @@
+ # Test CVS's response to an empty log message
+ cat >${TESTDIR}/editme <<EOF
+ #!${TESTSHELL}
+-sleep 1
++sleep 2
+ cat /dev/null >\$1
+ exit 0
+ EOF
+@@ -15863,7 +15965,7 @@
+ # Test CVS's response to a log message with one blank line
+ cat >${TESTDIR}/editme <<EOF
+ #!${TESTSHELL}
+-sleep 1
++sleep 2
+ echo >\$1
+ exit 0
+ EOF
+@@ -15877,7 +15979,7 @@
+ # Test CVS's response to a log message with only comments
+ cat >${TESTDIR}/editme <<EOF
+ #!${TESTSHELL}
+-sleep 1
++sleep 2
+ cat \$1 >${TESTDIR}/edit.new
+ mv ${TESTDIR}/edit.new \$1
+ exit 0
+@@ -15905,7 +16007,7 @@
+ cd ../first-dir
+ cat >${TESTDIR}/editme <<EOF
+ #!${TESTSHELL}
+-sleep 1
++sleep 2
+ cp /dev/null \$1
+ exit 1
+ EOF
+@@ -16065,7 +16167,7 @@
+ cd ..
+ mkdir env
+ dotest env-3 "${testcvs} -q add env" \
+-"Directory ${CVSROOT_DIRNAME}/env added to the repository"
++"Directory ${CVSROOT_DIRNAME}/env put under version control"
+ cd env
+ echo testing >file1
+ dotest env-4 "${testcvs} add file1" \
+@@ -16159,7 +16261,7 @@
+ dotest errmsg2-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest errmsg2-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ dotest_fail errmsg2-3 "${testcvs} add CVS" \
+ "${CPROG} add: cannot add special file .CVS.; skipping"
+@@ -16189,7 +16291,7 @@
+ mkdir sdir
+ cd ..
+ dotest errmsg2-8 "${testcvs} add first-dir/sdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/sdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/sdir put under version control"
+ # while we're here... check commit with no CVS directory
+ dotest_fail errmsg2-8a "${testcvs} -q ci first-dir nonexistant" \
+ "${CPROG} commit: nothing known about .nonexistant'
+@@ -16205,7 +16307,7 @@
+ mkdir sdir10
+ dotest errmsg2-10 "${testcvs} add file10 sdir10" \
+ "${SPROG} add: scheduling file .file10. for addition
+-Directory ${CVSROOT_DIRNAME}/first-dir/sdir10 added to the repository
++Directory ${CVSROOT_DIRNAME}/first-dir/sdir10 put under version control
+ ${SPROG} add: use .${SPROG} commit. to add this file permanently"
+ dotest errmsg2-11 "${testcvs} -q ci -m add-file10" \
+ "$CVSROOT_DIRNAME/first-dir/file10,v <-- file10
+@@ -16219,7 +16321,7 @@
+ cd ..
+ mkdir first-dir/sdir10/ssdir
+ dotest errmsg2-13 "${testcvs} add first-dir/sdir10/ssdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/sdir10/ssdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/sdir10/ssdir put under version control"
+
+ touch first-dir/sdir10/ssdir/ssfile
+ dotest errmsg2-14 \
+@@ -16360,7 +16462,7 @@
+ dotest adderrmsg-init1 "${testcvs} -q co -l ." ''
+ mkdir adderrmsg-dir
+ dotest adderrmsg-init2 "${testcvs} add adderrmsg-dir" \
+-"Directory ${CVSROOT_DIRNAME}/adderrmsg-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/adderrmsg-dir put under version control"
+ cd adderrmsg-dir
+
+ # try to add the admin dir
+@@ -16839,7 +16941,7 @@
+ dotest watch4-0a "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest watch4-0b "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+
+ cd first-dir
+ dotest watch4-1 "${testcvs} watch on" ''
+@@ -16854,7 +16956,7 @@
+ # Now test the analogous behavior for directories.
+ mkdir subdir
+ dotest watch4-4 "${testcvs} add subdir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/subdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/subdir put under version control"
+ cd subdir
+ touch sfile
+ dotest watch4-5 "${testcvs} add sfile" \
+@@ -16945,7 +17047,7 @@
+ dotest watch5-0a "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest watch5-0b "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+
+ cd first-dir
+ dotest watch5-1 "${testcvs} watch on" ''
+@@ -17125,7 +17227,7 @@
+ dotest edit-check-0a "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest edit-check-0b "$testcvs add first-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir put under version control"
+
+ cd first-dir
+ dotest edit-check-1 "$testcvs watch on"
+@@ -17374,7 +17476,7 @@
+
+ mkdir second-dir
+ dotest edit-check-32c "$testcvs add second-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir/second-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir/second-dir put under version control"
+ cd second-dir
+ echo ThirdFile >file3
+
+@@ -18770,7 +18872,7 @@
+ dotest mwrap-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest mwrap-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch aa
+ dotest mwrap-3 "${testcvs} add aa" \
+@@ -19180,7 +19282,7 @@
+ exit 0
+ else
+ echo "No BugId found."
+- sleep 1
++ sleep 2
+ exit 1
+ fi
+ EOF
+@@ -19747,7 +19849,7 @@
+ dotest taginfo-newfmt-8 "${testcvs} -q tag tag1" ""
+ mkdir sdir
+ dotest taginfo-newfmt-8b "${testcvs} -q add sdir" \
+-"Directory ${TESTDIR}/cvsroot/first-dir/sdir added to the repository"
++"Directory ${TESTDIR}/cvsroot/first-dir/sdir put under version control"
+ touch sdir/file3
+ dotest taginfo-newfmt-8c "${testcvs} -q add sdir/file3" \
+ "${SPROG} add: use .${SPROG} commit. to add this file permanently"
+@@ -20043,7 +20145,7 @@
+ new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
+ $SPROG commit: Rebuilding administrative file database"
+
+- sleep 1
++ sleep 2
+ echo '# noop' >> config
+ dotest config-7 "$testcvs -q ci -mlog-commit" \
+ "$CVSROOT_DIRNAME/CVSROOT/config,v <-- config
+@@ -21586,7 +21688,7 @@
+ dotest logopt-1 "$testcvs -q co -l ." ''
+ mkdir first-dir
+ dotest logopt-2 "$testcvs add first-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir put under version control"
+ cd first-dir
+ echo hi >file1
+ dotest logopt-3 "${testcvs} add file1" \
+@@ -21631,7 +21733,7 @@
+ dotest ann-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest ann-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ cat >file1 <<EOF
+ this
+@@ -21811,7 +21913,7 @@
+ module=x
+ mkdir $module
+ dotest ann-id-2 "${testcvs} add $module" \
+-"Directory ${CVSROOT_DIRNAME}/$module added to the repository"
++"Directory ${CVSROOT_DIRNAME}/$module put under version control"
+ cd $module
+
+ file=m
+@@ -21972,7 +22074,7 @@
+ dotest crerepos-8 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest crerepos-9 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch file1
+ dotest crerepos-10 "${testcvs} add file1" \
+@@ -21988,7 +22090,7 @@
+ dotest crerepos-12 "$testcvs -d $CREREPOS_ROOT -q co -l ."
+ mkdir crerepos-dir
+ dotest crerepos-13 "$testcvs add crerepos-dir" \
+-"Directory $TESTDIR/crerepos/crerepos-dir added to the repository"
++"Directory $TESTDIR/crerepos/crerepos-dir put under version control"
+ cd crerepos-dir
+ touch cfile
+ dotest crerepos-14 "${testcvs} add cfile" \
+@@ -22039,8 +22141,7 @@
+
+ # Save the timezone and set it to UTC for these tests to make the
+ # value more predicatable.
+- save_TZ=$TZ
+- TZ=UTC0; export TZ
++ do_save_TZ
+
+ modify_repo mkdir $CVSROOT_DIRNAME/first-dir
+
+@@ -22517,7 +22618,7 @@
+ revision 1\.4"
+
+ dokeep
+- TZ=$save_TZ
++ do_restore_TZ
+ cd ..
+ rm -r first-dir
+ modify_repo rm -rf $CVSROOT_DIRNAME/first-dir
+@@ -22707,8 +22808,7 @@
+ # revisions 1.1 and 1.1.1.1 differ by 1 second.
+
+ # Need a predictable time zone.
+- save_TZ=$TZ
+- TZ=UTC0; export TZ
++ do_save_TZ
+
+ mkdir rcs4
+ cd rcs4
+@@ -22766,7 +22866,7 @@
+ Sticky Options: (none)'
+
+ dokeep
+- TZ=$save_TZ
++ do_restore_TZ
+ cd ../..
+ rm -r rcs4
+ modify_repo rm -rf $CVSROOT_DIRNAME/rcs4-dir
+@@ -23087,11 +23187,11 @@
+ dotest backuprecover-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest backuprecover-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ mkdir dir
+ dotest backuprecover-3 "${testcvs} add dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir put under version control"
+ touch file1 dir/file2
+ dotest backuprecover-4 "${testcvs} -q add file1 dir/file2" \
+ "${SPROG} add: use \`${SPROG} commit' to add these files permanently"
+@@ -23348,7 +23448,7 @@
+ dotest sshstdio-1 "$testcvs -d $SSHSTDIO_ROOT -q co -l ."
+ mkdir first-dir
+ dotest sshstdio-2 "$testcvs add first-dir" \
+- "Directory $CVSROOT_DIRNAME/first-dir added to the repository"
++ "Directory $CVSROOT_DIRNAME/first-dir put under version control"
+ cd first-dir
+ a='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+ c='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+@@ -23526,16 +23626,17 @@
+ continue
+ fi
+
++ # times have been tweaked so leap seconds don't matter
+ cat <<EOF >$CVSROOT_DIRNAME/CVSROOT/history
+-O3395c677|anonymous|<remote>/*0|ccvs||ccvs
++O3395c684|anonymous|<remote>/*0|ccvs||ccvs
+ O3396c677|anonymous|<remote>/src|ccvs||src
+ O3397c677|kingdon|<remote>/*0|ccvs||ccvs
+ M339cafae|nk|<remote>|ccvs/src|1.229|sanity.sh
+-M339cafff|anonymous|<remote>|ccvs/src|1.23|Makefile
++M339cb00c|anonymous|<remote>|ccvs/src|1.23|Makefile
+ M339dc339|kingdon|~/work/*0|ccvs/src|1.231|sanity.sh
+ W33a6eada|anonymous|<remote>*4|ccvs/emx||Makefile.in
+ C3b235f50|kingdon|<remote>|ccvs/emx|1.3|README
+-M3b23af50|kingdon|~/work/*0|ccvs/doc|1.281|cvs.texinfo
++M3b23af62|kingdon|~/work/*0|ccvs/doc|1.281|cvs.texinfo
+ EOF
+
+ dotest history-1 "${testcvs} history -e -a" \
+@@ -23691,7 +23792,7 @@
+ dotest modes-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest modes-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch aa
+ dotest modes-3 "${testcvs} add aa" \
+@@ -23817,7 +23918,7 @@
+ dotest modes2-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest modes2-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch aa
+ dotest modes2-3 "${testcvs} add aa" \
+@@ -23864,8 +23965,8 @@
+ dotest modes3-1 "$testcvs -q co -l ."
+ mkdir first-dir second-dir
+ dotest modes3-2 "${testcvs} add first-dir second-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository
+-Directory ${CVSROOT_DIRNAME}/second-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control
++Directory ${CVSROOT_DIRNAME}/second-dir put under version control"
+ touch first-dir/aa second-dir/ab
+ dotest modes3-3 "${testcvs} add first-dir/aa second-dir/ab" \
+ "${SPROG} add: scheduling file .first-dir/aa. for addition
+@@ -23944,7 +24045,7 @@
+ dotest stamps-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest stamps-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch aa
+ echo '$''Id$' >kw
+@@ -24073,7 +24174,7 @@
+ dotest perms-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest perms-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ touch foo
+@@ -24115,7 +24216,7 @@
+ dotest symlinks-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest symlinks-2 "$testcvs add first-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir put under version control"
+ cd first-dir
+
+ dotest symlinks-2.1 "ln -s $TESTDIR/fumble slink"
+@@ -24158,7 +24259,7 @@
+ dotest symlinks2-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest symlinks2-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ echo nonsymlink > slink
+ dotest symlinks2-3 "${testcvs} add slink" \
+@@ -24196,7 +24297,7 @@
+ dotest hardlinks-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest hardlinks-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ # Make up some ugly filenames, to test that they get
+@@ -24285,7 +24386,7 @@
+ dotest sticky-1 "$testcvs -q co -l ."
+ mkdir first-dir
+ dotest sticky-2 "$testcvs add first-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir put under version control"
+ cd first-dir
+
+ touch file1
+@@ -24390,7 +24491,7 @@
+ dotest keyword-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest keyword-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ echo '$''Author$' > file1
+@@ -24595,7 +24696,7 @@
+ dotest keywordlog-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest keywordlog-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ echo initial >file1
+ dotest keywordlog-3 "${testcvs} add file1" \
+@@ -24852,7 +24953,7 @@
+ xx"
+
+ cd ../CVSROOT
+- echo "MaxCommentLeaderLength=1k" >>config
++ echo "MaxCommentLeaderLength=1K" >>config
+ dotest keywordlog-35 "$testcvs -Q ci -mset-MaxCommentLeaderLength"
+
+ cd ../first-dir
+@@ -24892,7 +24993,7 @@
+ dotest keywordname-init-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest keywordname-init-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ echo '$'"Name$" >file1
+@@ -25012,7 +25113,7 @@
+ dotest keyword2-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest keyword2-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ echo '$''Revision$' >> file1
+@@ -25214,7 +25315,7 @@
+ ${PLUS} modify on branch
+ ${PLUS} modify on branch after brtag"
+
+- # With a branch sticky tag, HEAD is the head of the trunk.
++ # Even with a branch sticky tag, HEAD is the head of the trunk.
+ dotest head-br1-setup "${testcvs} -q update -r br1" "[UP] file1"
+ dotest head-br1-update "${testcvs} -q update -r HEAD -p file1" \
+ "imported contents
+@@ -25222,7 +25323,26 @@
+ add a line on trunk after trunktag"
+ # But diff thinks that HEAD is "br1". Case (b) from cvs.texinfo.
+ # Probably people are relying on it.
+- dotest head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
++ #dotest head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
++ dotest head-br1-diffdot "${testcvs} -q diff -c -r .bhead -r br1" ""
++ # Always. Fuck people relying on it.
++ dotest_fail head-br1-diff "${testcvs} -q diff -c -r HEAD -r br1" \
++"Index: file1
++===================================================================
++RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
++retrieving revision 1\.3
++retrieving revision 1\.3\.2\.2
++diff -c -r1\.3 -r1\.3\.2\.2
++\*\*\* file1 ${RFCDATE} 1\.3
++--- file1 ${RFCDATE} 1\.3\.2\.2
++\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
++\*\*\* 1,3 \*\*\*\*
++--- 1,5 ----
++ imported contents
++ add a line on trunk
++ add a line on trunk after trunktag
++${PLUS} modify on branch
++${PLUS} modify on branch after brtag"
+
+ # With a nonbranch sticky tag on a branch,
+ # HEAD is the head of the trunk
+@@ -25235,7 +25355,26 @@
+ # CVS 1.9 and older thought that HEAD is "brtag" (this was
+ # noted as "strange, maybe accidental"). But "br1" makes a
+ # whole lot more sense.
+- dotest head-brtag-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
++ #dotest head-brtag-diff "${testcvs} -q diff -c -r HEAD -r br1" ""
++ dotest head-brtag-diffdot "${testcvs} -q diff -c -r .bhead -r br1" ""
++ # HEAD is always tip of the trunk.
++ dotest_fail head-brtag-diff "${testcvs} -q diff -c -r HEAD -r br1" \
++"Index: file1
++===================================================================
++RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
++retrieving revision 1\.3
++retrieving revision 1\.3\.2\.2
++diff -c -r1\.3 -r1\.3\.2\.2
++\*\*\* file1 ${RFCDATE} 1\.3
++--- file1 ${RFCDATE} 1\.3\.2\.2
++\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
++\*\*\* 1,3 \*\*\*\*
++--- 1,5 ----
++ imported contents
++ add a line on trunk
++ add a line on trunk after trunktag
++${PLUS} modify on branch
++${PLUS} modify on branch after brtag"
+
+ # With a nonbranch sticky tag on the trunk, HEAD is the head
+ # of the trunk, I think.
+@@ -25319,12 +25458,11 @@
+ # for checkout and update as well.
+ #
+ mkdir 1; cd 1
+- save_TZ=$TZ
+- TZ=UTC0; export TZ
++ do_save_TZ
+ dotest tagdate-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest tagdate-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ echo trunk-1 >file1
+@@ -25784,7 +25922,7 @@
+
+ unset date_T1 date_T2 date_T3 date_T4 date_T5
+ unset date_T6 date_T7 date_T8 date_T9
+- TZ=$save_TZ
++ do_restore_TZ
+
+ dokeep
+ rm -r 1 2 3 4
+@@ -25802,7 +25940,7 @@
+ dotest multibranch2-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest multibranch2-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ echo trunk-1 >file1
+@@ -26038,7 +26176,7 @@
+ dotest admin-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest admin-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+
+ dotest_fail admin-3 "${testcvs} -q admin -i file1" \
+@@ -27002,7 +27140,7 @@
+ dotest reserved-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest reserved-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch file1
+ dotest reserved-3 "${testcvs} add file1" \
+@@ -28061,18 +28199,18 @@
+ dotest release-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest release-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ mkdir dir1
+ dotest release-3 "${testcvs} add dir1" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir1 added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir1 put under version control"
+ mkdir dir2
+ dotest release-4 "${testcvs} add dir2" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir2 added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir2 put under version control"
+ cd dir2
+ mkdir dir3
+ dotest release-5 "${testcvs} add dir3" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir2/dir3 added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir2/dir3 put under version control"
+
+ cd ../..
+ dotest release-6 "${testcvs} release -d first-dir/dir2/dir3 first-dir/dir1" \
+@@ -28093,11 +28231,11 @@
+ cd first-dir
+ mkdir dir1
+ dotest release-10 "${testcvs} add dir1" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir1 added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir1 put under version control"
+ cd dir2
+ mkdir dir3
+ dotest release-11 "${testcvs} add dir3" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir/dir2/dir3 added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir/dir2/dir3 put under version control"
+
+ cd ../..
+ dotest release-12 "${testcvs} release first-dir/dir2/dir3 first-dir/dir1" \
+@@ -28148,7 +28286,7 @@
+ cd first-dir
+ mkdir second-dir
+ dotest release-18 "$testcvs add second-dir" \
+-"Directory $CVSROOT_DIRNAME/first-dir/second-dir added to the repository"
++"Directory $CVSROOT_DIRNAME/first-dir/second-dir put under version control"
+
+ cd second-dir
+ touch file1
+@@ -28756,8 +28894,33 @@
+ testcvs2="$testcvs -d '$CVSROOT2'"
+
+ dotest multiroot-setup-1 "mkdir $CVSROOT1_DIRNAME $CVSROOT2_DIRNAME"
++
+ dotest multiroot-setup-2 "$testcvs1 init"
++ # remove automatically-created LogHistory to work around the fact
++ # that CVS does not track those per root (and thus warns about
++ # encountering multiple of these entries)
++ mkdir wrkarnd; cd wrkarnd
++ dotest multiroot-setup-2a "$testcvs1 -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++ cd CVSROOT
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
++ dotest multiroot-setup-2b "$testcvs1 -q ci -m workaround-LogHistory" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++ cd ../..; rm -r wrkarnd
++
+ dotest multiroot-setup-3 "$testcvs2 init"
++ mkdir wrkarnd; cd wrkarnd
++ dotest multiroot-setup-3a "$testcvs2 -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++ cd CVSROOT
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
++ dotest multiroot-setup-3b "$testcvs2 -q ci -m workaround-LogHistory" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++ cd ../..; rm -r wrkarnd
+
+ #
+ # create some directories in ${CVSROOT1_DIRNAME}
+@@ -28766,8 +28929,8 @@
+ dotest multiroot-setup-4 "${testcvs1} co -l ." "${SPROG} checkout: Updating ."
+ mkdir mod1-1 mod1-2
+ dotest multiroot-setup-5 "${testcvs1} add mod1-1 mod1-2" \
+-"Directory ${CVSROOT1_DIRNAME}/mod1-1 added to the repository
+-Directory ${CVSROOT1_DIRNAME}/mod1-2 added to the repository"
++"Directory ${CVSROOT1_DIRNAME}/mod1-1 put under version control
++Directory ${CVSROOT1_DIRNAME}/mod1-2 put under version control"
+ echo file1-1 > mod1-1/file1-1
+ echo file1-2 > mod1-2/file1-2
+ dotest multiroot-setup-6 "${testcvs1} add mod1-1/file1-1 mod1-2/file1-2" \
+@@ -28792,8 +28955,8 @@
+ dotest multiroot-setup-8 "${testcvs2} co -l ." "${SPROG} checkout: Updating ."
+ mkdir mod2-1 mod2-2
+ dotest multiroot-setup-9 "${testcvs2} add mod2-1 mod2-2" \
+-"Directory ${CVSROOT2_DIRNAME}/mod2-1 added to the repository
+-Directory ${CVSROOT2_DIRNAME}/mod2-2 added to the repository"
++"Directory ${CVSROOT2_DIRNAME}/mod2-1 put under version control
++Directory ${CVSROOT2_DIRNAME}/mod2-2 put under version control"
+ echo file2-1 > mod2-1/file2-1
+ echo file2-2 > mod2-2/file2-2
+ dotest multiroot-setup-6 "${testcvs2} add mod2-1/file2-1 mod2-2/file2-2" \
+@@ -29861,7 +30024,27 @@
+ CVSROOT2=`newroot $CVSROOT2_DIRNAME`
+
+ dotest multiroot2-1 "${testcvs} -d ${CVSROOT1} init" ""
++ mkdir wrkarnd; cd wrkarnd
++ dotest multiroot2-1a "$testcvs -d ${CVSROOT1} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++ cd CVSROOT
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
++ dotest multiroot2-1b "$testcvs -d ${CVSROOT1} -q ci -m workaround-LogHistory" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++ cd ../..; rm -r wrkarnd
+ dotest multiroot2-2 "${testcvs} -d ${CVSROOT2} init" ""
++ mkdir wrkarnd; cd wrkarnd
++ dotest multiroot2-2a "$testcvs -d ${CVSROOT2} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++ cd CVSROOT
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
++ dotest multiroot2-2b "$testcvs -d ${CVSROOT2} -q ci -m workaround-LogHistory" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++ cd ../..; rm -r wrkarnd
+
+ mkdir imp-dir; cd imp-dir
+ echo file1 >file1
+@@ -30017,12 +30200,32 @@
+
+ mkdir 1; cd 1
+ dotest multiroot3-1 "${testcvs} -d ${CVSROOT1} init" ""
++ mkdir wrkarnd; cd wrkarnd
++ dotest multiroot3-1a "$testcvs -d ${CVSROOT1} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++ cd CVSROOT
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
++ dotest multiroot3-1b "$testcvs -d ${CVSROOT1} -q ci -m workaround-LogHistory" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++ cd ../..; rm -r wrkarnd
+ dotest multiroot3-2 "${testcvs} -d ${CVSROOT1} -q co -l ." ""
+ mkdir dir1
+ dotest multiroot3-3 "${testcvs} add dir1" \
+-"Directory ${TESTDIR}/root1/dir1 added to the repository"
++"Directory ${TESTDIR}/root1/dir1 put under version control"
+ dotest multiroot3-4 "${testcvs} -d ${CVSROOT2} init" ""
+ rm -r CVS
++ mkdir wrkarnd; cd wrkarnd
++ dotest multiroot3-4a "$testcvs -d ${CVSROOT2} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++ cd CVSROOT
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
++ dotest multiroot3-4b "$testcvs -d ${CVSROOT2} -q ci -m workaround-LogHistory" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++ cd ../..; rm -r wrkarnd
+ dotest multiroot3-5 "${testcvs} -d ${CVSROOT2} -q co -l ." ""
+ mkdir dir2
+
+@@ -30037,7 +30240,7 @@
+ echo "D/dir2////" >>CVS/Entries
+
+ dotest multiroot3-7 "${testcvs} add dir2" \
+-"Directory ${TESTDIR}/root2/dir2 added to the repository"
++"Directory ${TESTDIR}/root2/dir2 put under version control"
+
+ touch dir1/file1 dir2/file2
+ if $remote; then
+@@ -30143,10 +30346,20 @@
+
+ mkdir 1; cd 1
+ dotest multiroot4-1 "${testcvs} -d ${CVSROOT1} init" ""
++ mkdir wrkarnd; cd wrkarnd
++ dotest multiroot4-1a "$testcvs -d ${CVSROOT1} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++ cd CVSROOT
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
++ dotest multiroot4-1b "$testcvs -d ${CVSROOT1} -q ci -m workaround-LogHistory" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++ cd ../..; rm -r wrkarnd
+ dotest multiroot4-2 "${testcvs} -d ${CVSROOT1} -q co -l ." ""
+ mkdir dircom
+ dotest multiroot4-3 "${testcvs} add dircom" \
+-"Directory ${TESTDIR}/root1/dircom added to the repository"
++"Directory ${TESTDIR}/root1/dircom put under version control"
+ cd dircom
+ touch file1
+ dotest multiroot4-4 "${testcvs} add file1" \
+@@ -30158,10 +30371,20 @@
+ cd ../..
+ mkdir 2; cd 2
+ dotest multiroot4-6 "${testcvs} -d ${CVSROOT2} init" ""
++ mkdir wrkarnd; cd wrkarnd
++ dotest multiroot4-6a "$testcvs -d ${CVSROOT2} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
++ cd CVSROOT
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
++ dotest multiroot4-6b "$testcvs -d ${CVSROOT2} -q ci -m workaround-LogHistory" "" \
++".*/CVSROOT/config,v <-- config
++new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
++$SPROG commit: Rebuilding administrative file database"
++ cd ../..; rm -r wrkarnd
+ dotest multiroot4-7 "${testcvs} -d ${CVSROOT2} -q co -l ." ""
+ mkdir dircom
+ dotest multiroot4-8 "${testcvs} add dircom" \
+-"Directory ${TESTDIR}/root2/dircom added to the repository"
++"Directory ${TESTDIR}/root2/dircom put under version control"
+ cd dircom
+ touch file2
+ dotest multiroot4-9 "${testcvs} add file2" \
+@@ -30179,7 +30402,7 @@
+ # repository) and so on would also look the same.
+ mkdir sdir2
+ dotest multiroot4-11 "${testcvs} -d ${CVSROOT2} add sdir2" \
+-"Directory ${TESTDIR}/root2/dircom/sdir2 added to the repository"
++"Directory ${TESTDIR}/root2/dircom/sdir2 put under version control"
+
+ dotest multiroot4-12 "${testcvs} -q update" ""
+ cd ..
+@@ -30208,7 +30431,7 @@
+ dotest rmroot-setup-1 "${testcvs} -q co -l ." ''
+ mkdir first-dir
+ dotest rmroot-setup-2 "${testcvs} add first-dir" \
+-"Directory ${CVSROOT_DIRNAME}/first-dir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/first-dir put under version control"
+ cd first-dir
+ touch file1 file2
+ dotest rmroot-setup-3 "${testcvs} add file1 file2" \
+@@ -30383,7 +30606,7 @@
+ willfail: :whocares
+ EOF
+ dotest_fail pserver-3 "$servercvs pserver" \
+-"error 0 Server configuration missing --allow-root in inetd.conf" <<EOF
++"error 0 Server configuration missing --allow-root or --allow-root-regexp in inetd.conf" <<EOF
+ BEGIN AUTH REQUEST
+ $CVSROOT_DIRNAME
+ testme
+@@ -30391,6 +30614,26 @@
+ END AUTH REQUEST
+ EOF
+
++ regexp='^'`dirname ${CVSROOT_DIRNAME}`'/[^/]+$'
++ dotest pserver-3b "${testcvs} --allow-root-regexp=$regexp pserver" \
++"I LOVE YOU" <<EOF
++BEGIN AUTH REQUEST
++${CVSROOT_DIRNAME}
++testme
++Ay::'d
++END AUTH REQUEST
++EOF
++
++ regexp='^'`dirname ${CVSROOT_DIRNAME}`'/[^/]+$'
++ dotest_fail pserver-3c "${testcvs} --allow-root-regexp=$regexp pserver" \
++"$CPROG \\[pserver aborted\\]: ${CVSROOT_DIRNAME}/subdir: no such repository" <<EOF
++BEGIN AUTH REQUEST
++${CVSROOT_DIRNAME}/subdir
++testme
++Ay::'d
++END AUTH REQUEST
++EOF
++
+ # Confirm that not sending a newline during auth cannot constitute
+ # a denial-of-service attack. This assumes that PATH_MAX is less
+ # than 65536 bytes. If PATH_MAX is larger than 65535 bytes, this
+@@ -31033,6 +31276,8 @@
+ EOF
+ echo THIS-CONFIG-OPTION-IS-BAD=XXX >$TESTDIR/newconfig
+ dotest_fail server-20 "$testcvs server -c $TESTDIR/newconfig" \
++"Usage: cvs server
++Normally invoked by a cvs client on a remote machine." \
+ "E $SPROG \[server aborted\]: Invalid path to config file specified: \`$TESTDIR/newconfig'" <<EOF
+ Root $TESTDIR/crerepos
+ Directory .
+@@ -31041,6 +31286,8 @@
+ EOF
+ dotest_fail server-21 \
+ "$testcvs server -c /etc/cvs/this-shouldnt-exist" \
++"Usage: cvs server
++Normally invoked by a cvs client on a remote machine." \
+ "E $SPROG \[server aborted\]: Failed to resolve path: \`/etc/cvs/this-shouldnt-exist': No such file or directory" <<EOF
+ Root $TESTDIR/crerepos
+ Directory .
+@@ -31301,7 +31548,7 @@
+ #
+ # Incidentally, I can reproduce this behavior with Linux 2.4.20 and
+ # Bash 2.05 or Bash 2.05b.
+- sleep 1
++ sleep 2
+ dotest_fail client-10 "$testcvs update" \
+ "$CPROG update: Server attempted to update a file via an invalid pathname:
+ $CPROG \[update aborted\]: \`$HOME/.bashrc'\."
+@@ -31322,7 +31569,7 @@
+ echo "ok"
+ cat >/dev/null
+ EOF
+- sleep 1
++ sleep 2
+ dotest_fail client-11 "$testcvs update" \
+ "$CPROG \[update aborted\]: patch original file \./\.bashrc does not exist"
+
+@@ -31342,7 +31589,7 @@
+ echo "ok"
+ cat >/dev/null
+ EOF
+- sleep 1
++ sleep 2
+ dotest_fail client-12 "$testcvs update" \
+ "$CPROG update: Server attempted to update a file via an invalid pathname:
+ $CPROG \[update aborted\]: \`\.\./\.\./home/.bashrc'\."
+@@ -31362,7 +31609,7 @@
+ echo "ok"
+ cat >/dev/null
+ EOF
+- sleep 1
++ sleep 2
+ dotest_fail client-13 "$testcvs update" \
+ "$CPROG update: Server attempted to update a file via an invalid pathname:
+ $CPROG \[update aborted\]: \`$HOME/.bashrc'\."
+@@ -31382,7 +31629,7 @@
+ echo "ok"
+ cat >/dev/null
+ EOF
+- sleep 1
++ sleep 2
+ dotest_fail client-14 "$testcvs update" \
+ "$CPROG update: Server attempted to update a file via an invalid pathname:
+ $CPROG \[update aborted\]: \`\.\./\.\./home/.bashrc'\."
+@@ -31402,7 +31649,7 @@
+ echo "ok"
+ cat >/dev/null
+ EOF
+- sleep 1
++ sleep 2
+ dotest_fail client-15 "$testcvs update" \
+ "$CPROG update: Server attempted to update a file via an invalid pathname:
+ $CPROG \[update aborted\]: \`$HOME/.bashrc'\."
+@@ -31422,7 +31669,7 @@
+ echo "ok"
+ cat >/dev/null
+ EOF
+- sleep 1
++ sleep 2
+ dotest_fail client-16 "$testcvs update" \
+ "$CPROG update: Server attempted to update a file via an invalid pathname:
+ $CPROG \[update aborted\]: \`\.\./\.\./home/.bashrc'\."
+@@ -31446,7 +31693,7 @@
+ echo "ok"
+ cat >/dev/null
+ EOF
+- sleep 1
++ sleep 2
+ dotest_fail client-18 "$testcvs update" \
+ "$CPROG \[update aborted\]: protocol error: Copy-file tried to specify directory"
+
+@@ -31459,7 +31706,7 @@
+ # Check that the client detects redirect loops.
+ cat >$TESTDIR/serveme <<EOF
+ #!$TESTSHELL
+-echo "Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set Gssapi-authenticate expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version"
++echo "Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set Gssapi-authenticate expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version suck"
+ echo "ok"
+ echo "Redirect $CVSROOT"
+
+@@ -31467,7 +31714,7 @@
+ cat >/dev/null
+ EOF
+ echo newstuff >file1
+- sleep 1
++ sleep 2
+ dotest_fail client-20 "$testcvs ci" \
+ "$CPROG commit: Examining \.
+ $CPROG \[commit aborted\]: \`Redirect' loop detected\. Server misconfiguration$QUESTION"
+@@ -31709,7 +31956,7 @@
+ cd second
+ mkdir otherdir
+ dotest template-add-1 "${testcvs} add otherdir" \
+-"Directory ${CVSROOT_DIRNAME}/second/otherdir added to the repository"
++"Directory ${CVSROOT_DIRNAME}/second/otherdir put under version control"
+ if $remote; then
+ dotest template-add-2r \
+ "cmp otherdir/CVS/Template ${TESTDIR}/template/temp.def" ''
+@@ -31856,6 +32103,10 @@
+ ALL (cat >/dev/null; echo %R) >$TESTDIR/referrer
+ ALL $RSYNC -gopr --delete $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME
+ EOF
++ # remove automatically-created LogHistory to work around the fact
++ # that we see both writeproxy and primary config here
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
+ cat >>config <<EOF
+ PrimaryServer=$PRIMARY_CVSROOT
+ EOF
+@@ -31868,7 +32119,7 @@
+ save_CVS_SERVER=$CVS_SERVER
+ ln -s $PRIMARY_CVSROOT_DIRNAME $TESTDIR/primary_link
+ dotest writeproxy-0 "$CVS_SERVER server" \
+-"Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version
++"Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version suck
+ ok
+ ok
+ ok" \
+@@ -32066,6 +32317,10 @@
+ cat >>loginfo <<EOF
+ ALL $RSYNC -gopr --delete $PRIMARY_CVSROOT_DIRNAME/ $SECONDARY_CVSROOT_DIRNAME
+ EOF
++ # remove automatically-created LogHistory to work around the fact
++ # that we see both writeproxy and primary config here
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
+ cat >>config <<EOF
+ PrimaryServer=$PRIMARY_CVSROOT
+ EOF
+@@ -32088,7 +32343,7 @@
+
+ # No need to check the PID of the last client since we are testing with
+ # Redirect disabled.
+-proot_arg="--allow-root $SECONDARY_CVSROOT_DIRNAME"
++proot_arg="--allow-root ${PRIMARY_CVSROOT##*:} --allow-root $SECONDARY_CVSROOT_DIRNAME"
+ exec $servercvs \$proot_arg "\$@"
+ EOF
+ cat <<EOF >$TESTDIR/writeproxy-primary-wrapper
+@@ -32152,7 +32407,7 @@
+ mv $TESTDIR/save-root $PRIMARY_CVSROOT_DIRNAME
+
+ dotest writeproxy-noredirect-5 "$CVS_SERVER server" \
+-"Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version
++"Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version suck
+ ok
+ ok
+ ok
+@@ -32184,7 +32439,7 @@
+ cd firstdir
+ echo now you see me >file1
+ dotest writeproxy-noredirect-6 "$CVS_SERVER server" \
+-"Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version
++"Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version suck
+ ok
+ ok
+ ok
+@@ -32214,7 +32469,7 @@
+ echo /file1/0/dummy+timestamp// >>CVS/Entries
+
+ dotest writeproxy-noredirect-7 "$CVS_SERVER server" \
+-"Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version
++"Valid-requests Root Valid-responses valid-requests Command-prep Referrer Repository Directory Relative-directory Max-dotdot Static-directory Sticky Entry Kopt Checkin-time Modified Is-modified UseUnchanged Unchanged Notify Hostname LocalDir Questionable Argument Argumentx Global_option Gzip-stream wrapper-sendme-rcsOptions Set ${DOTSTAR}expand-modules ci co update diff log rlog list rlist global-list-quiet ls add remove update-patches gzip-file-contents status rdiff tag rtag import admin export history release watch-on watch-off watch-add watch-remove watchers editors edit init annotate rannotate noop version suck
+ ok
+ ok
+ Mode u=rw,g=rw,o=r
+@@ -32327,9 +32582,9 @@
+
+ # Set new roots.
+ PRIMARY_CVSROOT_DIRNAME=$TESTDIR/primary_cvsroot
+- PRIMARY_CVSROOT=:ext:$host$PRIMARY_CVSROOT_DIRNAME
++ PRIMARY_CVSROOT=:ext:$host:$PRIMARY_CVSROOT_DIRNAME
+ SECONDARY_CVSROOT_DIRNAME=$TESTDIR/writeproxy_cvsroot
+- SECONDARY_CVSROOT=":ext;Redirect=yes:$host$SECONDARY_CVSROOT_DIRNAME"
++ SECONDARY_CVSROOT=":ext;Redirect=yes:$host:$SECONDARY_CVSROOT_DIRNAME"
+
+ # Initialize the primary repository
+ dotest writeproxy-ssh-init-1 "$testcvs -d$PRIMARY_CVSROOT init"
+@@ -32343,6 +32598,10 @@
+ cat >>loginfo <<EOF
+ ALL echo Referrer=%R; cat >/dev/null
+ EOF
++ # remove automatically-created LogHistory to work around the fact
++ # that we see both writeproxy and primary config here
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
+ cat >>config <<EOF
+ PrimaryServer=$PRIMARY_CVSROOT
+ EOF
+@@ -32426,9 +32685,9 @@
+
+ # Set new roots.
+ PRIMARY_CVSROOT_DIRNAME=$TESTDIR/primary_cvsroot
+- PRIMARY_CVSROOT=:ext:$host$PRIMARY_CVSROOT_DIRNAME
++ PRIMARY_CVSROOT=:ext:$host:$PRIMARY_CVSROOT_DIRNAME
+ SECONDARY_CVSROOT_DIRNAME=$TESTDIR/writeproxy_cvsroot
+- SECONDARY_CVSROOT=":ext;Redirect=no:$host$PRIMARY_CVSROOT_DIRNAME"
++ SECONDARY_CVSROOT=":ext;Redirect=no:$host:$PRIMARY_CVSROOT_DIRNAME"
+
+ # Initialize the primary repository
+ dotest writeproxy-ssh-noredirect-init-1 \
+@@ -32444,6 +32703,10 @@
+ cat >>loginfo <<EOF
+ ALL echo Referrer=%R; cat >/dev/null
+ EOF
++ # remove automatically-created LogHistory to work around the fact
++ # that we see both writeproxy and primary config here
++ sed -e '/^LogHistory/d' <config >tmpconfig
++ mv tmpconfig config
+ cat >>config <<EOF
+ PrimaryServer=$PRIMARY_CVSROOT
+ EOF
+@@ -32463,7 +32726,7 @@
+
+ # No need to check the PID of the last client since we are testing with
+ # Redirect disabled.
+-proot_arg="--allow-root=$SECONDARY_CVSROOT_DIRNAME"
++proot_arg="--allow-root ${PRIMARY_CVSROOT##*:} --allow-root=$SECONDARY_CVSROOT_DIRNAME"
+ exec $CVS_SERVER \$proot_arg "\$@"
+ EOF
+ cat <<EOF >$TESTDIR/writeproxy-primary-wrapper
+@@ -32836,7 +33099,7 @@
+ *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )
+ *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )
+ *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )
+-Directory ${CVSROOT_DIRNAME}/trace/subdir added to the repository" \
++Directory ${CVSROOT_DIRNAME}/trace/subdir put under version control" \
+ "
+ *callerdat=${PFMT}, argc=1, argv=${PFMT},
+ *direntproc=${PFMT}, dirleavproc=${PFMT},
+@@ -32868,7 +33131,7 @@
+ *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )
+ *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )
+ *-> walklist ( list=${PFMT}, proc=${PFMT}, closure=${PFMT} )
+-${DOTSTAR}Directory ${CVSROOT_DIRNAME}/trace/subdir added to the repository
++${DOTSTAR}Directory ${CVSROOT_DIRNAME}/trace/subdir put under version control
+ S -> CVS_SERVER_SLEEP not set\.
+ S -> Lock_Cleanup()
+ S -> Lock_Cleanup()
+@@ -35507,6 +35770,35 @@
+ ;;
+
+
++
++ suck)
++ modify_repo mkdir $CVSROOT_DIRNAME/first-dir
++ dotest suck-init-1 "$testcvs -Q co first-dir"
++
++ cd first-dir
++ ${AWK} 'BEGIN { for (i = 64; i < 96; i++) printf "%02x %c\n", i-64, i }' \
++ </dev/null | ${TR} '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_' \
++ '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037' \
++ | ${TR} 'abcdef' 'ABCDEF' >alloctet.dat
++ ${AWK} 'BEGIN { for (i = 32; i < 256; i++) printf "%02X %c\n", i, i }' \
++ </dev/null >>alloctet.dat
++
++ dotest suck-1 "$testcvs -Q add alloctet.dat"
++ dotest suck-2 "$testcvs -Q ci -m added"
++
++ cd ..
++
++ dotest suck-3 "$testcvs -Q suck first-dir/alloctet.dat >commavs"
++ echo "first-dir/alloctet.dat,v" >commavl
++ cat $CVSROOT_DIRNAME/first-dir/alloctet.dat,v >>commavl
++ dotest suck-eq "diff commavs commavl"
++
++ dokeep
++ rm -r first-dir commavs commavl
++ modify_repo rm -rf $CVSROOT_DIRNAME/first-dir
++ ;;
++
++
+
+ *)
+ echo $what is not the name of a test -- ignored
+--- cvs-1.12.13+real.orig/src/server.c
++++ cvs-1.12.13+real/src/server.c
+@@ -80,6 +80,13 @@
+ /* for select */
+ # include "xselect.h"
+
++/* for TCP_NODELAY */
++# include <netinet/tcp.h>
++
++# ifndef S_ISSOCK
++# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
++# endif
++
+ # ifndef O_NONBLOCK
+ # define O_NONBLOCK O_NDELAY
+ # endif
+@@ -823,6 +830,14 @@
+ }
+ # endif
+
++ if (root_allow_used() && !root_allow_ok(arg))
++ {
++ if (alloc_pending (80 + strlen (arg)))
++ sprintf (pending_error_text,
++ "E Bad root %s", arg);
++ return;
++ }
++
+ /* For pserver, this will already have happened, and the call will do
+ nothing. But for rsh, we need to do it now. */
+ config = get_root_allow_config (current_parsed_root->directory,
+@@ -2350,6 +2365,7 @@
+ bool *pre = closure;
+
+ /* %c = cvs_cmd_name
++ * %I = commit ID
+ * %p = shortrepos
+ * %r = repository
+ */
+@@ -2367,6 +2383,7 @@
+ # endif /* SUPPORT_OLD_INFO_FMT_STRINGS */
+ filter,
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ "R", "s", referrer ? referrer->original : "NONE",
+ "p", "s", ".",
+ "r", "s", current_parsed_root->directory,
+@@ -3519,7 +3536,7 @@
+ * Therefore, we wish to avoid reprocessing the command since that would
+ * cause endless recursion.
+ */
+- if (isProxyServer())
++ if ((command != version || current_parsed_root) && isProxyServer())
+ {
+ # ifdef PROXY_SUPPORT
+ if (reprocessing)
+@@ -4621,6 +4638,14 @@
+
+
+ static void
++serve_suck (char *arg)
++{
++ do_cvs_command ("suck", suck);
++}
++
++
++
++static void
+ serve_add (char *arg)
+ {
+ do_cvs_command ("add", add);
+@@ -5237,6 +5262,7 @@
+ {
+ free (vers->ts_user);
+ vers->ts_user = NULL;
++ vers->ts_user_ists = 0;
+ }
+ }
+ else if (scratched_file == NULL && entries_line == NULL)
+@@ -5962,6 +5988,7 @@
+ REQ_LINE("rannotate", serve_rannotate, 0),
+ REQ_LINE("noop", serve_noop, RQ_ROOTLESS),
+ REQ_LINE("version", serve_version, RQ_ROOTLESS),
++ REQ_LINE("suck", serve_suck, 0),
+ REQ_LINE(NULL, NULL, 0)
+
+ #undef REQ_LINE
+@@ -6271,8 +6298,12 @@
+
+ static const char *const server_usage[] =
+ {
++#ifdef ALLOW_CONFIG_OVERRIDE
+ "Usage: %s %s [-c config-file]\n",
+ "\t-c config-file\tPath to an alternative CVS config file.\n",
++#else
++ "Usage: %s %s\n",
++#endif
+ "Normally invoked by a cvs client on a remote machine.\n",
+ NULL
+ };
+@@ -6289,8 +6320,8 @@
+ {
+ switch (c)
+ {
+-#ifdef ALLOW_CONFIG_OVERRIDE
+ case 'c':
++#ifdef ALLOW_CONFIG_OVERRIDE
+ if (gConfigPath) free (gConfigPath);
+ gConfigPath = xstrdup (optarg);
+ break;
+@@ -6671,6 +6702,22 @@
+
+ extern char *crypt (const char *, const char *);
+
++char *crypt_trad(const char *, const char *);
++
++char *
++crypt_trad(const char *key, const char *setting)
++{
++ char *rv;
++ static char buf[2];
++
++ if ((rv = crypt(key, setting)) == NULL) {
++ buf[0] = setting && (*setting == 'x') ? '*' : 'x';
++ buf[1] = '\0';
++ rv = buf;
++ }
++
++ return (rv);
++}
+
+ /*
+ * 0 means no entry found for this user.
+@@ -6799,7 +6846,7 @@
+
+ /* Verify blank passwords directly, otherwise use crypt(). */
+ if ((found_password == NULL)
+- || ((strcmp (found_password, crypt (password, found_password))
++ || ((strcmp (found_password, crypt_trad (password, found_password))
+ == 0)))
+ {
+ /* Give host_user_ptr permanent storage. */
+@@ -6811,7 +6858,7 @@
+ #ifdef LOG_AUTHPRIV
+ syslog (LOG_AUTHPRIV | LOG_NOTICE,
+ "password mismatch for %s in %s: %s vs. %s", username,
+- repository, crypt(password, found_password), found_password);
++ repository, crypt_trad(password, found_password), found_password);
+ #endif
+ *host_user_ptr = NULL;
+ retval = 2;
+@@ -6887,7 +6934,7 @@
+ static int
+ check_pam_password (char **username, char *password)
+ {
+- int retval, err;
++ int retval;
+ struct pam_conv conv = { cvs_pam_conv, 0 };
+ char *pam_stage = "start";
+
+@@ -6930,7 +6977,7 @@
+
+ return retval == PAM_SUCCESS; /* indicate success */
+ }
+-#endif
++#else /* !HAVE_PAM */
+
+ static int
+ check_system_password (char *username, char *password)
+@@ -6976,14 +7023,14 @@
+ if (*found_passwd)
+ {
+ /* user exists and has a password */
+- if (strcmp (found_passwd, crypt (password, found_passwd)) == 0)
++ if (strcmp (found_passwd, crypt_trad (password, found_passwd)) == 0)
+ return 1;
+ else
+ {
+ #ifdef LOG_AUTHPRIV
+ syslog (LOG_AUTHPRIV | LOG_NOTICE,
+ "password mismatch for %s: %s vs. %s", username,
+- crypt(password, found_passwd), found_passwd);
++ crypt_trad(password, found_passwd), found_passwd);
+ #endif
+ return 0;
+ }
+@@ -6996,6 +7043,7 @@
+ #endif
+ return 1;
+ }
++#endif /* !HAVE_PAM */
+
+
+
+@@ -7164,8 +7212,10 @@
+ if the client dies while we are waiting for input. */
+ {
+ int on = 1;
++ struct stat sb;
+
+- if (setsockopt (STDIN_FILENO, SOL_SOCKET, SO_KEEPALIVE,
++ if (fstat (STDIN_FILENO, &sb) == 0 && S_ISSOCK(sb.st_mode) &&
++ setsockopt (STDIN_FILENO, SOL_SOCKET, SO_KEEPALIVE,
+ &on, sizeof on) < 0)
+ {
+ # ifdef HAVE_SYSLOG_H
+@@ -7175,6 +7225,23 @@
+ }
+ #endif
+
++#ifdef TCP_NODELAY
++ /* Avoid latency due to Nagle algorithm. */
++ {
++ int on = 1;
++ struct stat sb;
++
++ if (fstat (STDOUT_FILENO, &sb) == 0 && S_ISSOCK(sb.st_mode) &&
++ setsockopt (STDOUT_FILENO, IPPROTO_TCP, TCP_NODELAY,
++ &on, sizeof on) < 0)
++ {
++# ifdef HAVE_SYSLOG_H
++ syslog (LOG_DAEMON | LOG_ERR, "error setting TCP_NODELAY: %m");
++# endif /* HAVE_SYSLOG_H */
++ }
++ }
++#endif
++
+ /* Make sure the protocol starts off on the right foot... */
+ pserver_read_line (&tmp, NULL);
+
+@@ -7317,8 +7384,10 @@
+ if the client dies while we are waiting for input. */
+ {
+ int on = 1;
++ struct stat sb;
+
+- if (setsockopt (STDIN_FILENO, SOL_SOCKET, SO_KEEPALIVE,
++ if (fstat (STDIN_FILENO, &sb) == 0 && S_ISSOCK(sb.st_mode) &&
++ setsockopt (STDIN_FILENO, SOL_SOCKET, SO_KEEPALIVE,
+ (char *) &on, sizeof on) < 0)
+ {
+ # ifdef HAVE_SYSLOG_H
+@@ -7326,6 +7395,23 @@
+ # endif /* HAVE_SYSLOG_H */
+ }
+ }
++#endif
++
++#ifdef TCP_NODELAY
++ /* Avoid latency due to Nagle algorithm. */
++ {
++ int on = 1;
++ struct stat sb;
++
++ if (fstat (STDOUT_FILENO, &sb) == 0 && S_ISSOCK(sb.st_mode) &&
++ setsockopt (STDOUT_FILENO, IPPROTO_TCP, TCP_NODELAY,
++ (char *) &on, sizeof on) < 0)
++ {
++# ifdef HAVE_SYSLOG_H
++ syslog (LOG_DAEMON | LOG_ERR, "error setting TCP_NODELAY: %m");
++# endif /* HAVE_SYSLOG_H */
++ }
++ }
+ #endif
+
+ status = krb_recvauth (KOPT_DO_MUTUAL, STDIN_FILENO, &ticket, "rcmd",
+--- cvs-1.12.13+real.orig/src/status.c
++++ cvs-1.12.13+real/src/status.c
+@@ -213,8 +213,11 @@
+ cvs_output (" Working revision:\t", 0);
+ cvs_output (vers->vn_user, 0);
+
+- /* Only add the UTC timezone if there is a time to use. */
+- if (!server_active && strlen (vers->ts_rcs) > 0)
++ /* Only add the UTC timezone if there is a time to use.
++ * ts_rcs sometimes contains only "=" character so we check len > 1 */
++ if (!server_active && strlen (vers->ts_rcs) > 1 &&
++ /* prevent an ugly error message */
++ strcmp(vers->ts_rcs, "Result of merge") != 0)
+ {
+ /* Convert from the asctime() format to ISO 8601 */
+ char *buf;
+--- cvs-1.12.13+real.orig/src/subr.c
++++ cvs-1.12.13+real/src/subr.c
+@@ -807,6 +807,8 @@
+ long s;
+ long us;
+
++ if (time (&t) > desttime) return;
++
+ while (time (&t) <= desttime)
+ {
+ #ifdef HAVE_GETTIMEOFDAY
+@@ -835,6 +837,14 @@
+ (void)nanosleep (&ts, NULL);
+ }
+ }
++
++ /* sleep another 20 ms (2 HZ) to avoid races */
++ {
++ struct timespec ts;
++ ts.tv_sec = 0;
++ ts.tv_nsec = 20 * 1000 * 1000;
++ (void)nanosleep (&ts, NULL);
++ }
+ }
+
+
+@@ -1285,7 +1295,7 @@
+ dellist(&pflist);
+ free(b);
+ error (1, 0,
+-"internal error: unknown integer arg size (%d)",
++"internal error: unknown integer arg size (%zd)",
+ length);
+ break;
+ }
+@@ -1328,7 +1338,7 @@
+ dellist(&pflist);
+ free(b);
+ error (1, 0,
+-"internal error: unknown floating point arg size (%d)",
++"internal error: unknown floating point arg size (%zd)",
+ length);
+ break;
+ }
+--- cvs-1.12.13+real.orig/src/suck.c
++++ cvs-1.12.13+real/src/suck.c
+@@ -0,0 +1,140 @@
++/*-
++ * Copyright (c) 2011
++ * Thorsten Glaser <tg@mirbsd.org>
++ *
++ * Provided that these terms and disclaimer and all copyright notices
++ * are retained or reproduced in an accompanying document, permission
++ * is granted to deal in this work without restriction, including un-
++ * limited rights to use, publicly perform, distribute, sell, modify,
++ * merge, give away, or sublicence.
++ *
++ * This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
++ * the utmost extent permitted by applicable law, neither express nor
++ * implied; without malicious intent or gross negligence. In no event
++ * may a licensor, author or contributor be held liable for indirect,
++ * direct, other damage, loss, or other issues arising in any way out
++ * of dealing in the work, even if advised of the possibility of such
++ * damage or existence of a defect, except proven that it results out
++ * of said person's immediate fault when using the work as intended.
++ *-
++ * Download a ,v file from the repository
++ */
++
++#include "cvs.h"
++
++#ifdef HAVE_MMAP
++#include <sys/mman.h>
++
++#ifndef MAP_FILE
++#define MAP_FILE 0
++#endif
++
++#ifndef MAP_FAILED
++#define MAP_FAILED ((void *)-1)
++#endif
++#endif
++
++static const char * const suck_usage[] = {
++ "Usage: %s %s module/filename\n",
++ NULL
++};
++
++int
++suck(int argc, char *argv[])
++{
++ size_t m, n;
++ int fd;
++ char *buf, *cp, *fn;
++ struct stat sb;
++ FILE *fp;
++ RCSNode *rcs;
++
++ if (argc != 2)
++ usage(suck_usage);
++
++#ifdef CLIENT_SUPPORT
++ if (current_parsed_root->isremote) {
++ start_server();
++
++ if (!supported_request("suck"))
++ error(1, 0, "server does not support %s", "suck");
++
++ send_arg(argv[1]);
++ send_to_server("suck\012", 0);
++
++ return (get_responses_and_close());
++ }
++#endif
++
++ /* check for ../ attack */
++ if (pathname_levels(argv[1]) > 0)
++ error(1, 0, "path %s outside of repository", argv[1]);
++
++ /* repo + / + module/file */
++ cp = Xasprintf("%s/%s", current_parsed_root->directory, argv[1]);
++
++ /* find the slash */
++ if ((fn = cp + (last_component(cp) - cp)) == cp)
++ usage(suck_usage);
++
++ /* repo/module + file */
++ fn[-1] = '\0';
++
++ /* check if it's a valid RCS file, not /etc/passwd or somesuch */
++ if ((rcs = RCS_parse(fn, cp)) == NULL) {
++ error(1, 0, "not a valid RCS file: %s/%s", cp, fn);
++ return (1);
++ }
++
++ /* save the real pathname of the RCS file for later */
++ fn = xstrdup(rcs->path);
++
++ /* free up resources allocated until now */
++ freercsnode(&rcs);
++ free(cp);
++
++ /* attempt to open the file ourselves */
++ if ((fp = CVS_FOPEN(fn, FOPEN_BINARY_READ)) == NULL)
++ error(1, errno, "Could not open RCS archive %s", fn);
++ if (fstat(fd = fileno(fp), &sb) < 0)
++ error(1, errno, "Could not stat RCS archive %s", fn);
++
++ /*XXX this code will fail for large files */
++
++ /* attempt to slurp entire file into memory */
++#ifdef HAVE_MMAP
++ buf = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
++ if (buf == NULL || buf == MAP_FAILED) {
++ error(0, errno, "Could not map memory to RCS archive %s", fn);
++#endif
++ /* backup: just read */
++ cp = buf = xmalloc(n = sb.st_size);
++ while (n) {
++ m = read(fd, cp, n);
++ if (m == (size_t)-1)
++ error(1, errno,
++ "Could not read RCS archive %s", fn);
++ cp += m;
++ n -= m;
++ }
++#ifdef HAVE_MMAP
++ }
++#endif
++
++ /* write real pathname plus newline as text */
++ cvs_output(fn + strlen(current_parsed_root->directory) + 1, 0);
++ cvs_output("\n", 1);
++
++ /* write file content as binary */
++ cvs_output_binary(buf, sb.st_size);
++
++ /* release all resources allocated */
++#ifdef HAVE_MMAP
++ munmap(buf, sb.st_size);
++#endif
++ fclose(fp);
++ free(fn);
++
++ /* success */
++ return (0);
++}
+--- cvs-1.12.13+real.orig/src/tag.c
++++ cvs-1.12.13+real/src/tag.c
+@@ -310,6 +310,7 @@
+ * %b = branch mode = "?" (delete ops - unknown) | "T" (branch)
+ * | "N" (not branch)
+ * %c = cvs_cmd_name
++ * %I = commit ID
+ * %p = path from $CVSROOT
+ * %r = path from root
+ * %{sVv} = attribute list = file name, old version tag will be deleted
+@@ -333,6 +334,7 @@
+ "b", "c", delete_flag
+ ? '?' : branch_mode ? 'T' : 'N',
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ #ifdef SERVER_SUPPORT
+ "R", "s", referrer ? referrer->original : "NONE",
+ #endif /* SERVER_SUPPORT */
+@@ -747,6 +749,7 @@
+ * %b = branch mode = "?" (delete ops - unknown) | "T" (branch)
+ * | "N" (not branch)
+ * %c = cvs_cmd_name
++ * %I = commit ID
+ * %p = path from $CVSROOT
+ * %r = path from root
+ * %{sVv} = attribute list = file name, old version tag will be deleted
+@@ -770,6 +773,7 @@
+ "b", "c", delete_flag
+ ? '?' : branch_mode ? 'T' : 'N',
+ "c", "s", cvs_cmd_name,
++ "I", "s", global_session_id,
+ #ifdef SERVER_SUPPORT
+ "R", "s", referrer ? referrer->original : "NONE",
+ #endif /* SERVER_SUPPORT */
+@@ -1235,14 +1239,14 @@
+ else if (strcmp (version, "0") == 0)
+ {
+ if (!quiet)
+- error (0, 0, "couldn't tag added but un-commited file `%s'",
++ error (0, 0, "couldn't tag added but un-committed file `%s'",
+ finfo->file);
+ goto free_vars_and_return;
+ }
+ else if (version[0] == '-')
+ {
+ if (!quiet)
+- error (0, 0, "skipping removed but un-commited file `%s'",
++ error (0, 0, "skipping removed but un-committed file `%s'",
+ finfo->file);
+ goto free_vars_and_return;
+ }
+@@ -1450,6 +1454,7 @@
+ * 2. If IDB is non-NULL and val-tags cannot be opened for write.
+ * This allows callers to ignore the harmless inability to
+ * update the val-tags cache.
++ * 3. If CVSREADONLYFS is set (same as #2 above).
+ * false If the file could be opened and the tag is not present.
+ */
+ static int is_in_val_tags (DBM **idb, const char *name)
+@@ -1459,6 +1464,10 @@
+ datum mytag;
+ int status;
+
++ /* do nothing if we know we fail anyway */
++ if (readonlyfs)
++ return 1;
++
+ /* Casting out const should be safe here - input datums are not
+ * written to by the myndbm functions.
+ */
+@@ -1580,7 +1589,7 @@
+ * we are already there, or "" if we should do a W_LOCAL recursion.
+ * Sorry for three cases, but the "" case is needed in case the
+ * working directories come from diverse parts of the repository, the
+- * NULL case avoids an unneccesary chdir, and the non-NULL, non-""
++ * NULL case avoids an unnecessary chdir, and the non-NULL, non-""
+ * case is needed for checkout, where we don't want to chdir if the
+ * tag is found in CVSROOTADM_VALTAGS, but there is not (yet) any
+ * local directory.
+--- cvs-1.12.13+real.orig/src/update.c
++++ cvs-1.12.13+real/src/update.c
+@@ -58,7 +58,7 @@
+ static int patch_file (struct file_info *finfo,
+ Vers_TS *vers_ts,
+ int *docheckout, struct stat *file_info,
+- unsigned char *checksum);
++ md5_uint32 *checksum);
+ static void patch_file_write (void *, const char *, size_t);
+ #endif
+ static int merge_file (struct file_info *finfo, Vers_TS *vers);
+@@ -723,7 +723,7 @@
+ {
+ int docheckout;
+ struct stat file_info;
+- unsigned char checksum[16];
++ md5_uint32 checksum[4];
+
+ retval = patch_file (finfo,
+ vers, &docheckout,
+@@ -735,7 +735,8 @@
+ (rcs_diff_patches
+ ? SERVER_RCS_DIFF
+ : SERVER_PATCHED),
+- file_info.st_mode, checksum,
++ file_info.st_mode,
++ (void *)checksum,
+ NULL);
+ break;
+ }
+@@ -1181,6 +1182,7 @@
+ {
+ free (vers->ts_user);
+ vers->ts_user = NULL;
++ vers->ts_user_ists = 0;
+ }
+ }
+ return 0;
+@@ -1197,7 +1199,7 @@
+ {
+ char *backup;
+ int set_time, retval = 0;
+- int status;
++ int status = 0;
+ int file_is_dead;
+ struct buffer *revbuf;
+
+@@ -1366,6 +1368,7 @@
+
+ if (xvers_ts->ts_user != NULL)
+ free (xvers_ts->ts_user);
++ xvers_ts->ts_user_ists = 0; /*XXX really? */
+ xvers_ts->ts_user = xstrdup (xvers_ts->ts_rcs);
+ }
+
+@@ -1511,7 +1514,7 @@
+ */
+ static int
+ patch_file (struct file_info *finfo, Vers_TS *vers_ts, int *docheckout,
+- struct stat *file_info, unsigned char *checksum)
++ struct stat *file_info, md5_uint32 *checksum)
+ {
+ char *backup;
+ char *file1;
+--- cvs-1.12.13+real.orig/src/vers_ts.c
++++ cvs-1.12.13+real/src/vers_ts.c
+@@ -268,7 +268,10 @@
+ time_stamp_server (finfo->file, vers_ts, entdata);
+ else
+ #endif
++ {
+ vers_ts->ts_user = time_stamp (finfo->file);
++ vers_ts->ts_user_ists = 1;
++ }
+ }
+
+ return (vers_ts);
+@@ -339,6 +342,7 @@
+ {
+ struct tm *tm_p;
+
++ vers_ts->ts_user_ists = 1;
+ vers_ts->ts_user = xmalloc (25);
+ /* We want to use the same timestamp format as is stored in the
+ st_mtime. For unix (and NT I think) this *must* be universal
+--- cvs-1.12.13+real.orig/src/wrapper.c
++++ cvs-1.12.13+real/src/wrapper.c
+@@ -86,7 +86,7 @@
+ move this to a per-connection data structure, or better yet
+ think about a cleaner solution. */
+ static int wrap_setup_already_done = 0;
+- char *homedir;
++ char *homedir = NULL;
+
+ if (wrap_setup_already_done != 0)
+ return;
+@@ -107,6 +107,11 @@
+ free (file);
+ }
+
++#ifdef SERVER_SUPPORT
++ if (!server_active)
++#endif
++ {
++
+ /* Then add entries found in home dir, (if user has one) and file
+ exists. */
+ homedir = get_homedir ();
+@@ -115,6 +120,8 @@
+ hand it might be obnoxious to complain when CVS will function
+ just fine without .cvswrappers (and many users won't even know what
+ .cvswrappers is). */
++ }
++
+ if (homedir != NULL)
+ {
+ char *file = strcat_filename_onto_homedir (homedir, CVSDOTWRAPPER);
+@@ -339,6 +346,12 @@
+ if (!line || line[0] == '#')
+ return;
+
++ /* Allows user to declare all wrappers null and void */
++ if (line[0] == '!') {
++ wrap_kill ();
++ return;
++ }
++
+ memset (&e, 0, sizeof(e));
+
+ /* Search for the wild card */
+--- cvs-1.12.13+real.orig/src/zlib.c
++++ cvs-1.12.13+real/src/zlib.c
+@@ -229,7 +229,7 @@
+ would fetch all the available bytes, and at least one byte. */
+
+ status = (*cb->buf->input) (cb->buf->closure, bd->text,
+- need, BUFFER_DATA_SIZE, &nread);
++ need ? 1 : 0, BUFFER_DATA_SIZE, &nread);
+
+ if (status == -2)
+ /* Don't try to recover from memory allcoation errors. */
diff --git a/data/cvs/cvs_1.12.13+real.orig.tar.gz b/data/cvs/cvs_1.12.13+real.orig.tar.gz
new file mode 100644
index 000000000..5b3006a57
--- /dev/null
+++ b/data/cvs/cvs_1.12.13+real.orig.tar.gz
Binary files differ
diff --git a/data/cvs/linker.diff b/data/cvs/linker.diff
new file mode 100644
index 000000000..b4cca5076
--- /dev/null
+++ b/data/cvs/linker.diff
@@ -0,0 +1,11 @@
+diff -ur cvs-1.12.13/src/Makefile.am cvs-1.12.13+iPhone/src/Makefile.am
+--- cvs-1.12.13/src/Makefile.am 2018-09-04 10:32:01.000000000 -1000
++++ cvs-1.12.13+iPhone/src/Makefile.am 2018-09-04 10:32:57.000000000 -1000
+@@ -110,7 +110,6 @@
+ ../diff/libdiff.a \
+ ../lib/libcvs.a \
+ $(ZLIB_LIBS)
+-cvs_LDFLAGS = -Wl,--as-needed
+ cvs_LDADD = $(cvs_client_objects) \
+ ../diff/libdiff.a \
+ ../lib/libcvs.a \
diff --git a/data/cvs/make.sh b/data/cvs/make.sh
index a1eb6e34e..d266d0315 100644
--- a/data/cvs/make.sh
+++ b/data/cvs/make.sh
@@ -1,6 +1,7 @@
pkg:setup
-pkg:configure --without-gssapi
-make
+autoreconf -f -i
+pkg:configure --without-gssapi cvs_cv_func_printf_ptr=yes --with-external-zlib
+make -j8
pkg:install
pkg: mkdir -p /etc/profile.d
pkg: cp -a %/cvs.sh /etc/profile.d
diff --git a/data/cvs/mdns.diff b/data/cvs/mdns.diff
deleted file mode 100644
index b11a26a90..000000000
--- a/data/cvs/mdns.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru cvs-1.11.22/src/main.c cvs-1.11.22+iPhone/src/main.c
---- cvs-1.11.22/src/main.c 2006-05-16 03:12:35.000000000 +0000
-+++ cvs-1.11.22+iPhone/src/main.c 2008-02-02 14:50:57.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * Copyright (C) 1986-2006 The Free Software Foundation, Inc.
- *
-@@ -395,6 +397,15 @@
- int argc;
- char **argv;
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- cvsroot_t *CVSroot_parsed = NULL;
- int cvsroot_update_env = 1;
- char *cp, *end;
diff --git a/data/cwidget/_metadata/in.1443.00 b/data/cwidget/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/cwidget/_metadata/in.1443.00
diff --git a/data/cwidget/_metadata/version b/data/cwidget/_metadata/version
index 659914ae9..d8aef8135 100644
--- a/data/cwidget/_metadata/version
+++ b/data/cwidget/_metadata/version
@@ -1 +1 @@
-0.5.8
+0.5.17
diff --git a/data/cwidget/cwidget-0.5.17.tar.xz b/data/cwidget/cwidget-0.5.17.tar.xz
new file mode 100644
index 000000000..9c700f175
--- /dev/null
+++ b/data/cwidget/cwidget-0.5.17.tar.xz
Binary files differ
diff --git a/data/cwidget/cwidget-0.5.8.tar.gz b/data/cwidget/cwidget-0.5.8.tar.gz
deleted file mode 100644
index 8ef70af3d..000000000
--- a/data/cwidget/cwidget-0.5.8.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/cwidget/debian/changelog b/data/cwidget/debian/changelog
new file mode 100644
index 000000000..187b15997
--- /dev/null
+++ b/data/cwidget/debian/changelog
@@ -0,0 +1,402 @@
+cwidget (0.5.17-4) unstable; urgency=medium
+
+ * Acknowledge NMU.
+ * Fix failure with autopkgtest when using g++ 5 (Closes: #795177).
+ Thanks Martin Pitt.
+
+ -- Manuel A. Fernandez Montecelo <mafm@debian.org> Thu, 13 Aug 2015 14:13:04 +0100
+
+cwidget (0.5.17-3.1) unstable; urgency=medium
+
+ * Non-maintainer upload.
+ * Rename libcwidget3 to libcwidget3v5, libcwidget3 to libcwidget3v5,
+ follow-up for the libstdc++6 ABI transition. Addresses: #794594.
+ * Add Conflicts/Replaces for the old packages.
+
+ -- Matthias Klose <doko@debian.org> Tue, 04 Aug 2015 20:46:19 +0200
+
+cwidget (0.5.17-3) unstable; urgency=low
+
+ * Changes to build with GCC-5 and in C++11 mode (Closes: #792681).
+ Thanks Matthias Klose. Prompted by:
+ - transition to GCC-5 as default compiler in Debian unstable;
+ - failure to compile cwidget without -std=c++11 with
+ this new version;
+ - there is a change in the ABI of libstdc++ w.r.t. GCC < 5, in
+ std::string, std::list and other parts (sigc++-2.0 is a dependency of
+ cwidget and uses std::list in the API)
+ * Quell lintian warning xs-testsuite-header-in-debian-control by
+ removing XS- prefix in debian/control
+ * Revamp options passed to the compiler, among others some obsolete
+ compiler flags that tried to address a problem with old versions of
+ the compiler, but that were actually not enabled since long ago
+ * Do not install jquery.js and link it from documentation directories in
+ another place where it cropped up
+ * Update Build-Depends-Indep on perlmagick to libimage-magick-perl
+ (Closes: #789224). Thanks Martin Michlmayr.
+
+ -- Manuel A. Fernandez Montecelo <mafm@debian.org> Fri, 31 Jul 2015 01:10:21 +0100
+
+cwidget (0.5.17-2) unstable; urgency=medium
+
+ [ Jérémy Bobbio ]
+ * Add a patch to have Doxygen not write timestamps in the generated
+ documentation to allow package builds to be reproducible. (Closes:
+ #762666)
+
+ [ Manuel A. Fernandez Montecelo ]
+ * Bump Standards-Version to 3.9.6 (no changes needed)
+ * Change priority of source package to 'optional' (from 'extra'), and
+ remove the override of priority 'important' for the binary package
+ libcwidget3
+
+ -- Manuel A. Fernandez Montecelo <mafm@debian.org> Sun, 28 Sep 2014 16:03:09 +0100
+
+cwidget (0.5.17-1) unstable; urgency=medium
+
+ * New upstream release
+ - Incorporated changes of last NMUs
+ - Remove -1.9 from some of the autotools commands, run instead the
+ latest/default versions of the system (1.9 is quite old by now)
+ * debian/source/format: move from "1.0" to "3.0 (quilt)"
+ * debian/compat: level 9
+ - Multi-Arch enabled now
+ * Add tests for autopkgtest
+
+ -- Manuel A. Fernandez Montecelo <mafm@debian.org> Sat, 22 Feb 2014 00:21:23 +0000
+
+cwidget (0.5.16-5) unstable; urgency=medium
+
+ * Bump Standards-Version to 3.9.5 (no changes needed)
+ * Use dh-autoreconf instead of autotools-dev for better new-port
+ coverage. Thanks Colin Watson for the report and the patch (I applied
+ it by hand and slightly modified since it didn't apply cleanly).
+ (Closes: #732539)
+ * Quell lintian warnings:
+ - embedded-javascript-library: add Depends on libjs-jquery in the -doc
+ package, and create a symbolic link instead of install the local copy
+ of the file "jquery.min.js"
+ - "binary-control-field-duplicates-source": remove duplicate Priority
+ field from most of the binary packages
+ - missing-debian-source-format: add "1.0" to "debian/source/format"
+ for the time being
+ - vcs-field-not-canonical
+ - no-upstream-changelog: upstream's NEWS is the changelog
+ * In -doc package, downgrade browser from Recommends to Suggests
+ * VCS changed from 'cwidget/debian/.git' to 'cwidget/cwidget.git'
+
+ -- Manuel A. Fernandez Montecelo <mafm@debian.org> Fri, 21 Feb 2014 18:02:04 +0000
+
+cwidget (0.5.16-4) unstable; urgency=medium
+
+ * New maintainer (Closes: #738893)
+ * Incorporate changes from all previous NMUs
+
+ -- Manuel A. Fernandez Montecelo <mafm@debian.org> Sat, 15 Feb 2014 16:45:15 +0000
+
+cwidget (0.5.16-3.5) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Support cross-building (thanks, Eleanor Chen; closes: #721357).
+ * Use the autotools-dev dh addon to update config.guess/config.sub for
+ arm64 (closes: #725913).
+
+ -- Colin Watson <cjwatson@debian.org> Thu, 14 Nov 2013 10:02:05 +0000
+
+cwidget (0.5.16-3.4) unstable; urgency=low
+
+ * Non-maintainer upload.
+
+ [ New translations ]
+ * Japanese, thanks to Kenshi Muto. (Closes: #675739)
+ * Chinese (China), thanks to Never Min.
+ * Russian, thanks to Yuri Kozlov. (Closes: #676247)
+ * Thai, thanks to Theppitak Karoonboonyanan. (Closes: 676905)
+ * Brazilian, thanks to Adriano Rafael Gomes. (Closes: 676989)
+ * Croatian, thanks to Tomislav Krznar.
+ * All remaining translations from aptitude.
+
+ -- David Prévot <taffit@debian.org> Sun, 17 Jun 2012 15:26:05 -0400
+
+cwidget (0.5.16-3.3) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Actually display translated strings: cherry-pick c65cae upstream, and use
+ libcwidget3 as domain name in src/cwidget/generic/util/i18n.h and
+ po/Makevars; install usr/share/locale files. (Closes: #559738)
+ * Cursor displayed in proper place for wide-char prompt, thanks to Daniel
+ Hartwig. (Closes: #316939)
+ * Pressing 'delete' in search/tree limit dialog delete previous entry
+ thanks to Samuel Fogh. (Closes: #493320)
+
+ [ New translations ]
+ * German, thanks to Sven Joachim. (Closes: #561147)
+ * Spanish, thanks to Omar Campagne. (Closes: #655849)
+ * French, thanks to Julien Patriarca. (Closes: #655689)
+ * Polish, thanks to Michał Kułach. (Closes: #660944)
+ * Danish, thanks to Joe Hansen. (Closes: #671762)
+ * Czech, thanks to Michal Šimůnek. (Closes: #673141)
+
+ -- David Prévot <taffit@debian.org> Sat, 02 Jun 2012 20:33:52 -0400
+
+cwidget (0.5.16-3.2) unstable; urgency=low
+
+ * Non maintainer upload.
+ * Build using hardened build flags. Closes: #656024.
+ * Fix build failure with GCC-4.7. Closes: #667147.
+
+ -- Matthias Klose <doko@debian.org> Mon, 16 Apr 2012 19:40:07 +0200
+
+cwidget (0.5.16-3.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Don't ship .la files (Closes: #621184).
+
+ -- Luk Claes <luk@debian.org> Sat, 11 Jun 2011 16:31:11 +0200
+
+cwidget (0.5.16-3) unstable; urgency=low
+
+ * Disable strict aliasing to prevent g++ from erroring out in the build.
+ "Fixing" it this way is a horrible hack, but the error message is
+ entirely incomprehensible, I can't figure out which code, if any, is
+ at fault here, and my attempts to fix it by phrasing the code
+ differently have failed. (Closes: #561157, #526674)
+
+ * Add misc:Depends entries on the Depends lines.
+
+ -- Daniel Burrows <dburrows@debian.org> Sun, 17 Jan 2010 14:22:37 -0800
+
+cwidget (0.5.16-2) unstable; urgency=low
+
+ * Try a less subtle approach to fixing the threading test cases on hppa.
+ (Closes: #557982)
+
+ -- Daniel Burrows <dburrows@debian.org> Mon, 30 Nov 2009 15:10:53 -0800
+
+cwidget (0.5.16-1) unstable; urgency=low
+
+ * New upstream version.
+
+ -- Daniel Burrows <dburrows@debian.org> Sun, 29 Nov 2009 18:45:42 -0800
+
+cwidget (0.5.15-1) unstable; urgency=low
+
+ * New upstream version.
+
+ + Hopefully fixes the FTBFS on hppa (Closes: #546171).
+
+ -- Daniel Burrows <dburrows@debian.org> Sun, 29 Nov 2009 12:50:15 -0800
+
+cwidget (0.5.14-1) unstable; urgency=low
+
+ * New upstream version.
+
+ + Fix a divide-by-zero in the column fragment code. (Closes: #556185)
+
+ -- Daniel Burrows <dburrows@debian.org> Tue, 17 Nov 2009 12:33:11 -0800
+
+cwidget (0.5.13-1) unstable; urgency=low
+
+ * New upstream version.
+
+ * Move libcwidget3-dbg into the "debug" section as per the new archive
+ layout.
+
+ * Remove doc/ikiwiki/.ikiwiki in "clean".
+
+ * Add perlmagick to Build-Depends-Indep. (Closes: #497877)
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 05 Sep 2009 09:46:41 -0700
+
+cwidget (0.5.12-4) unstable; urgency=low
+
+ * Backport a fix for a nasty deadlock that was causing aptitude to
+ freeze up after running dpkg. (Closes: #511708)
+
+ -- Daniel Burrows <dburrows@debian.org> Tue, 27 Jan 2009 23:18:01 -0800
+
+cwidget (0.5.12-3) unstable; urgency=low
+
+ * Fix the string truncation fix so that it doesn't enter an infinite
+ loop and use up all the available memory when the output string is
+ empty.
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 06 Sep 2008 16:22:07 -0700
+
+cwidget (0.5.12-2) unstable; urgency=low
+
+ * Backport a fix for a string truncation bug from HEAD (Closes: #496119).
+
+ * Fix the URL to the packaging VCS (Closes: #492584).
+
+ -- Daniel Burrows <dburrows@debian.org> Sun, 31 Aug 2008 22:01:53 -0700
+
+cwidget (0.5.12-1) unstable; urgency=low
+
+ * New upstream version.
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 28 Jun 2008 08:58:24 -0700
+
+cwidget (0.5.11-1) unstable; urgency=low
+
+ * New upstream version; really fixes the backspacing problem.
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 12 Apr 2008 08:03:45 -0700
+
+cwidget (0.5.10-1) unstable; urgency=low
+
+ * New upstream version.
+
+ - Treat KEY_DC, KEY_BACKSPACE, and character 127 as equivalent in
+ key_matches(). (Closes: #452651)
+
+ -- Daniel Burrows <dburrows@debian.org> Fri, 11 Apr 2008 22:13:27 -0700
+
+cwidget (0.5.9-1) unstable; urgency=low
+
+ * New upstream version.
+
+ - Compiles with libsigc++ version 2.2.
+
+ -- Daniel Burrows <dburrows@debian.org> Fri, 21 Mar 2008 17:03:00 -0700
+
+cwidget (0.5.8-2) unstable; urgency=low
+
+ * Upload to unstable.
+
+ * Build-depend on ikiwiki (>= 1.34) for goodstuff. (Closes: #471997)
+
+ * Eliminate the last few missing #includes (in the test cases,
+ Closes: #461682)
+
+ Note that in order to build or use cwidget with g++-4.3, you will need a
+ version of libsigc++ that supports g++-4.3 (>= 2.0.18-1).
+
+ * Put the documentation in Programming/C++, not the nonexistant
+ section Apps/Programming.
+
+ -- Daniel Burrows <dburrows@debian.org> Fri, 21 Mar 2008 14:51:07 -0700
+
+cwidget (0.5.8-1) experimental; urgency=low
+
+ * New upstream version.
+ - ABI change due to the changes below.
+ - Remove all references to hash_map; use std::map instead.
+ - Fix all compilation errors with g++ 4.3. (Closes: #461682)
+
+ -- Daniel Burrows <dburrows@debian.org> Sun, 20 Jan 2008 09:37:11 -0800
+
+cwidget (0.5.7-1) experimental; urgency=low
+
+ * New Upstream Version.
+
+ * ABI change again; create libcwidget2* packages.
+
+ * Fix several threading errors in handling input, particularly when
+ cwidget was temporarily suspended and then resumed.
+
+ (Closes: #461342) and possibly more, but I'll have to ask the
+ reporters.
+
+ * If a byte sequence read from stdin can't be decoded in the current
+ locale, beep at the user instead of throwing a fatal
+ exception. (Closes: #460722)
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 19 Jan 2008 10:26:00 -0800
+
+cwidget (0.5.6.1-3) unstable; urgency=low
+
+ * Apply patch from Michael Daenzer to support building with
+ dpkg-buildpackage -j (Closes: #456678).
+
+ * ikiwiki now depends only on what the core engine needs, and so some of
+ the plugins that cwidget users are no longer available in a build
+ environment without explicitly installing them.
+
+ Add libhtml-scrubber-perl to Build-Depends (Closes: #458654).
+
+ -- Daniel Burrows <dburrows@debian.org> Sun, 06 Jan 2008 08:58:49 -0800
+
+cwidget (0.5.6.1-2) unstable; urgency=low
+
+ * Rename debian/libcwidget0.install to debian/libcwidget1.install so the
+ library actually gets installed.
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 15 Dec 2007 22:24:48 -0800
+
+cwidget (0.5.6.1-1) unstable; urgency=low
+
+ * New upstream version.
+
+ * Rename libcwidget0 and libcwidget0-dbg to libcwidget1 and
+ libcwidget1-dbg.
+
+ * Declare libcwidget-doc to be in section doc, to make lintian happy.
+
+ * No longer conflict/provide/replace libcwidget-dbg; those relationships
+ were added because libcwidget0-dbg fully replaced libcwidget-dbg, but
+ libcwidget1-dbg is not related to libcwidget-dbg.
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 15 Dec 2007 18:46:50 -0800
+
+cwidget (0.5.6-1) unstable; urgency=low
+
+ * New upstream version.
+
+ * ABI change; the SONAME is now libcwidget.so.1.
+
+ * If stdin is closed, abort the main loop with an exception instead
+ of spinning forever. (Closes: #451770)
+
+ * Add a missing #include <stdarg.h>; fixes building on stable and on
+ some other platforms. (Closes: #452979)
+
+ * Add a build dependency on cppunit so 'make check' does something
+ useful.
+
+ * Add a build dependency on ikiwiki so we can build all the
+ documentation.
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 15 Dec 2007 18:07:37 -0800
+
+cwidget (0.5.5-4) unstable; urgency=low
+
+ * Fix a related but different bug in Makefile.am. (Closes: #451400)
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 24 Nov 2007 21:35:51 -0800
+
+cwidget (0.5.5-3) unstable; urgency=low
+
+ * Actually fix Makefile.in. (Closes: #451400)
+
+ * Add Homepage and VCS-* fields to the control file.
+
+ -- Daniel Burrows <dburrows@debian.org> Sat, 24 Nov 2007 08:21:57 -0800
+
+cwidget (0.5.5-2) unstable; urgency=low
+
+ * Do a quick fix for a Makefile bug (a better fix is already present in
+ the upstream repository). (Closes: #451400)
+
+ * Rename the debug package from libcwidget-dbg to libcwidget0-dbg, since
+ obviously once the soname changes we'll need a separate debug package.
+
+ -- Daniel Burrows <dburrows@debian.org> Mon, 19 Nov 2007 21:08:10 -0800
+
+cwidget (0.5.5-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Daniel Burrows <dburrows@debian.org> Thu, 15 Nov 2007 21:23:56 -0800
+
+cwidget (0.5.4-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Daniel Burrows <dburrows@debian.org> Mon, 12 Nov 2007 17:15:18 -0800
+
+cwidget (0.5.3-1) unstable; urgency=low
+
+ * Initial release.
+
+ -- Daniel Burrows <dburrows@debian.org> Fri, 09 Nov 2007 07:02:45 -0800
diff --git a/data/cwidget/debian/compat b/data/cwidget/debian/compat
new file mode 100644
index 000000000..ec635144f
--- /dev/null
+++ b/data/cwidget/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/data/cwidget/debian/control b/data/cwidget/debian/control
new file mode 100644
index 000000000..7928c5cb9
--- /dev/null
+++ b/data/cwidget/debian/control
@@ -0,0 +1,94 @@
+Source: cwidget
+Priority: optional
+Section: libs
+Homepage: http://cwidget.alioth.debian.org
+Vcs-Git: git://anonscm.debian.org/cwidget/cwidget.git
+Vcs-Browser: http://anonscm.debian.org/gitweb/?p=cwidget/cwidget.git
+Maintainer: Manuel A. Fernandez Montecelo <mafm@debian.org>
+Build-Depends: debhelper (>= 9~),
+ g++ (>= 4:5.2),
+ dh-autoreconf,
+ gettext,
+ libcppunit-dev (>= 1.13.2-2.1),
+ libncursesw5-dev,
+ libsigc++-2.0-dev
+Build-Depends-Indep: doxygen,
+ ikiwiki (>= 1.34),
+ libhtml-scrubber-perl,
+ libimage-magick-perl
+Standards-Version: 3.9.6
+Testsuite: autopkgtest
+
+Package: libcwidget3v5
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends},
+ ${shlibs:Depends}
+Suggests: libcwidget-dev
+Conflicts: libcwidget3
+Replaces: libcwidget3
+Description: high-level terminal interface library for C++ (runtime files)
+ libcwidget is a modern user interface library modeled on GTK+ and Qt,
+ but using curses as its display layer and with widgets that are
+ tailored to a terminal environment.
+ .
+ This package contains the files that are required to run programs
+ compiled against libcwidget.
+
+Package: libcwidget3v5-dbg
+Section: debug
+Priority: extra
+Architecture: any
+Multi-Arch: same
+Depends: ${misc:Depends},
+ libcwidget3v5 (= ${binary:Version})
+Suggests: libcwidget-dev
+Conflicts: libcwidget3-dbg
+Replaces: libcwidget3-dbg
+Description: high-level terminal interface library for C++ (debugging files)
+ libcwidget is a modern user interface library modeled on GTK+ and Qt,
+ but using curses as its display layer and with widgets that are
+ tailored to a terminal environment.
+ .
+ This package contains debugging symbols for libcwidget-dbg. It is
+ only needed if you want to generate useful backtraces for programs
+ using cwidget.
+
+Package: libcwidget-dev
+Section: libdevel
+Architecture: any
+Multi-Arch: same
+Depends: ${misc:Depends},
+ libcwidget3v5 (= ${binary:Version}),
+ libsigc++-2.0-dev,
+ libncursesw5-dev,
+ pkg-config
+Suggests: libcwidget-doc
+Description: high-level terminal interface library for C++ (development files)
+ libcwidget is a modern user interface library modeled on GTK+ and Qt,
+ but using curses as its display layer and with widgets that are
+ tailored to a terminal environment.
+ .
+ This package contains files that are needed to write or compile
+ software that uses libcwidget.
+ .
+ WARNING: this is a newly created library whose development is closely
+ tied to the development of aptitude. Its API may be incomplete and
+ is likely to change considerably version-over-version! You may want
+ to avoid cwidget for stable projects.
+
+Package: libcwidget-doc
+Section: doc
+Architecture: all
+Multi-Arch: foreign
+Depends: ${misc:Depends},
+ libjs-jquery
+Suggests: libcwidget-dev,
+ iceweasel | www-browser
+Description: high-level terminal interface library for C++ (documentation)
+ libcwidget is a modern user interface library modeled on GTK+ and Qt,
+ but using curses as its display layer and with widgets that are
+ tailored to a terminal environment.
+ .
+ This package contains documentation for libcwidget, in HTML format.
diff --git a/data/cwidget/debian/copyright b/data/cwidget/debian/copyright
new file mode 100644
index 000000000..850616e03
--- /dev/null
+++ b/data/cwidget/debian/copyright
@@ -0,0 +1,5 @@
+Copyright 1999-2007 Daniel Burrows <dburrows@debian.org>
+
+The upstream Web site for cwidget is http://cwidget.alioth.debian.org
+
+License: GPL (/usr/share/common-licenses/GPL)
diff --git a/data/cwidget/debian/gbp.conf b/data/cwidget/debian/gbp.conf
new file mode 100644
index 000000000..69ef158e5
--- /dev/null
+++ b/data/cwidget/debian/gbp.conf
@@ -0,0 +1,3 @@
+[DEFAULT]
+builder = pdebuild --debbuildopts "-i\.git -I.git"
+pristine-tar = True
diff --git a/data/cwidget/debian/libcwidget-dev.docs b/data/cwidget/debian/libcwidget-dev.docs
new file mode 100644
index 000000000..100b93820
--- /dev/null
+++ b/data/cwidget/debian/libcwidget-dev.docs
@@ -0,0 +1 @@
+README \ No newline at end of file
diff --git a/data/cwidget/debian/libcwidget-dev.install b/data/cwidget/debian/libcwidget-dev.install
new file mode 100644
index 000000000..e72f0bac9
--- /dev/null
+++ b/data/cwidget/debian/libcwidget-dev.install
@@ -0,0 +1,5 @@
+usr/include/cwidget
+usr/lib/*/libcwidget.so
+usr/lib/*/libcwidget.a
+usr/lib/*/pkgconfig
+usr/lib/*/cwidget
diff --git a/data/cwidget/debian/libcwidget-doc.doc-base b/data/cwidget/debian/libcwidget-doc.doc-base
new file mode 100644
index 000000000..6dbff17e5
--- /dev/null
+++ b/data/cwidget/debian/libcwidget-doc.doc-base
@@ -0,0 +1,12 @@
+Document: cwidget-doc
+Title: CWidget API Documentation
+Author: Daniel Burrows
+Abstract: This documentation, autogenerated by doxygen, describes
+ the programming interface to the CWidget UI library. CWidget is
+ a high-level C++ library for programs that provide a terminal-based
+ user interface.
+Section: Programming/C++
+
+Format: HTML
+Index: /usr/share/doc/libcwidget-doc/html/index.html
+Files: /usr/share/doc/libcwidget-doc/html/*.html
diff --git a/data/cwidget/debian/libcwidget-doc.docs b/data/cwidget/debian/libcwidget-doc.docs
new file mode 100644
index 000000000..0bd3136cd
--- /dev/null
+++ b/data/cwidget/debian/libcwidget-doc.docs
@@ -0,0 +1 @@
+doc/html
diff --git a/data/cwidget/debian/libcwidget-doc.links b/data/cwidget/debian/libcwidget-doc.links
new file mode 100644
index 000000000..98c26b11b
--- /dev/null
+++ b/data/cwidget/debian/libcwidget-doc.links
@@ -0,0 +1,2 @@
+usr/share/javascript/jquery/jquery.min.js usr/share/doc/libcwidget-doc/html/ikiwiki/jquery.min.js
+usr/share/javascript/jquery/jquery.js usr/share/doc/libcwidget-doc/html/documentation/api/jquery.js
diff --git a/data/cwidget/debian/libcwidget3v5.install b/data/cwidget/debian/libcwidget3v5.install
new file mode 100644
index 000000000..75a620dc3
--- /dev/null
+++ b/data/cwidget/debian/libcwidget3v5.install
@@ -0,0 +1,2 @@
+usr/lib/*/libcwidget.so.*
+usr/share/locale
diff --git a/data/cwidget/debian/patches/series b/data/cwidget/debian/patches/series
new file mode 100644
index 000000000..ab3c544f4
--- /dev/null
+++ b/data/cwidget/debian/patches/series
@@ -0,0 +1 @@
+do-not-write-timestamps-in-documentation
diff --git a/data/cwidget/debian/rules b/data/cwidget/debian/rules
new file mode 100755
index 000000000..44fc573e0
--- /dev/null
+++ b/data/cwidget/debian/rules
@@ -0,0 +1,38 @@
+#!/usr/bin/make -f
+
+#export DH_VERBOSE=1
+
+
+export DEB_CXXFLAGS_MAINT_APPEND := -pipe -Wall -std=c++11
+export DEB_LDFLAGS_MAINT_APPEND := -Wl,--as-needed
+
+
+%:
+ dh $@ --with autoreconf --parallel
+
+override_dh_auto_configure:
+ dh_auto_configure -- --disable-werror $(CROSS_CONFIGURE_OPTIONS)
+
+override_dh_auto_clean:
+ -rm -rf doc/ikiwiki/.ikiwiki
+ dh_auto_clean
+
+# Build indep overrides
+override_dh_auto_build-indep:
+ $(MAKE) -C doc doc
+
+override_dh_auto_test-indep:
+ # No tests needed for docs
+
+override_dh_auto_install-indep:
+ $(MAKE) -C doc install
+ dh_install -i -Xjquery.min.js -Xjquery.js
+
+override_dh_installchangelogs:
+ dh_installchangelogs -- NEWS
+
+override_dh_installexamples:
+ dh_installexamples -plibcwidget-dev src/cwidget/testcwidget.cc
+
+override_dh_strip:
+ dh_strip -a --dbg-package=libcwidget3v5-dbg
diff --git a/data/cwidget/debian/source/format b/data/cwidget/debian/source/format
new file mode 100644
index 000000000..163aaf8d8
--- /dev/null
+++ b/data/cwidget/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/data/cwidget/debian/tests/compile-example-testcwidget b/data/cwidget/debian/tests/compile-example-testcwidget
new file mode 100644
index 000000000..a1a5692de
--- /dev/null
+++ b/data/cwidget/debian/tests/compile-example-testcwidget
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# Author: Manuel A. Fernandez Montecelo <mafm@debian.org>
+#
+# autopkgtest check: Build and run a program against the library, to verify that
+# the headers and pkg-config file are installed correctly
+
+
+set -e
+
+WORKDIR=$(mktemp -d)
+trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
+cd $WORKDIR
+
+SRCFILE=testcwidget.cc
+SRCFILEGZ=testcwidget.cc.gz
+BINFILE=testcwidget
+
+gunzip -c /usr/share/doc/libcwidget-dev/examples/$SRCFILEGZ > $SRCFILE
+
+g++ -o $BINFILE $SRCFILE -std=c++11 `pkg-config --cflags --libs cwidget` -I /usr/include/cwidget
+echo "build: OK"
+
+[ -x $BINFILE ]
+# interactive, cannot invoke and close from command line
+#./$BINFILE
+echo "run: OK"
diff --git a/data/cwidget/debian/tests/control b/data/cwidget/debian/tests/control
new file mode 100644
index 000000000..14cc57793
--- /dev/null
+++ b/data/cwidget/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: compile-example-testcwidget
+Depends: libcwidget-dev, build-essential
diff --git a/data/cwidget/lock.diff b/data/cwidget/lock.diff
new file mode 100644
index 000000000..54a259938
--- /dev/null
+++ b/data/cwidget/lock.diff
@@ -0,0 +1,12 @@
+diff -ur cwidget-0.5.17/src/cwidget/toplevel.cc cwidget-0.5.17+iPhone/src/cwidget/toplevel.cc
+--- cwidget-0.5.17/src/cwidget/toplevel.cc 2014-02-21 06:00:38.000000000 -1000
++++ cwidget-0.5.17+iPhone/src/cwidget/toplevel.cc 2018-08-30 17:10:21.000000000 -1000
+@@ -1056,7 +1056,7 @@
+
+ void updatecursornow()
+ {
+- threads::mutex::lock(get_mutex());
++ threads::mutex::lock l(get_mutex());
+
+ if(toplevel->get_cursorvisible())
+ {
diff --git a/data/cwidget/make.sh b/data/cwidget/make.sh
index 01abde691..3e0ff053d 100644
--- a/data/cwidget/make.sh
+++ b/data/cwidget/make.sh
@@ -1,5 +1,6 @@
pkg:setup
-pkg:configure
-pkg:make
+cp ${PKG_BASE}/config.sub .
+CXXFLAGS="-std=c++11 -D_XOPEN_SOURCE_EXTENDED -Wno-error" CFLAGS="-D_XOPEN_SOURCE_EXTENDED" pkg:configure
+pkg:make -j8
pkg:install
pkg: cp -a cwidget-config.h /usr/include/
diff --git a/data/cwidget/max.diff b/data/cwidget/max.diff
new file mode 100644
index 000000000..fc4bcce95
--- /dev/null
+++ b/data/cwidget/max.diff
@@ -0,0 +1,12 @@
+diff -ur cwidget-0.5.17/src/cwidget/widgets/text_layout.cc cwidget-0.5.17+iPhone/src/cwidget/widgets/text_layout.cc
+--- cwidget-0.5.17/src/cwidget/widgets/text_layout.cc 2014-02-21 04:34:52.000000000 -1000
++++ cwidget-0.5.17+iPhone/src/cwidget/widgets/text_layout.cc 2018-08-30 17:05:02.000000000 -1000
+@@ -86,7 +86,7 @@
+ {
+ freshen_contents(lastst);
+ if(start > 0)
+- set_start(std::max(0, start - mouse_wheel_scroll_lines));
++ set_start(std::max((unsigned long)0, start - mouse_wheel_scroll_lines));
+ }
+ }
+ else if((bstate & BUTTON5_PRESSED) != 0)
diff --git a/data/cwidget/pod.diff b/data/cwidget/pod.diff
new file mode 100644
index 000000000..f88c45713
--- /dev/null
+++ b/data/cwidget/pod.diff
@@ -0,0 +1,14 @@
+diff -ur cwidget-0.5.17/src/cwidget/curses++.h cwidget-0.5.17+iPhone/src/cwidget/curses++.h
+--- cwidget-0.5.17/src/cwidget/curses++.h 2014-02-21 04:34:52.000000000 -1000
++++ cwidget-0.5.17+iPhone/src/cwidget/curses++.h 2018-08-30 16:30:44.000000000 -1000
+@@ -58,9 +58,7 @@
+ */
+ attr_t attrs;
+
+- wchtype()
+- {
+- }
++ wchtype() = default;
+
+ wchtype(const wchar_t &_ch, const attr_t &_attrs)
+ :ch(_ch), attrs(_attrs)
diff --git a/data/cwidget/pthread.diff b/data/cwidget/pthread.diff
new file mode 100644
index 000000000..9c94a2cbb
--- /dev/null
+++ b/data/cwidget/pthread.diff
@@ -0,0 +1,11 @@
+diff -ur cwidget-0.5.17/src/cwidget/generic/threads/threads.h cwidget-0.5.17+iPhone/src/cwidget/generic/threads/threads.h
+--- cwidget-0.5.17/src/cwidget/generic/threads/threads.h 2014-02-21 04:34:52.000000000 -1000
++++ cwidget-0.5.17+iPhone/src/cwidget/generic/threads/threads.h 2018-08-30 16:56:11.000000000 -1000
+@@ -25,6 +25,7 @@
+ #ifndef THREADS_H
+ #define THREADS_H
+
++#include <pthread.h>
+ #include <errno.h>
+ #include <cwidget/generic/util/exception.h>
+
diff --git a/data/cwidget/timestamps.diff b/data/cwidget/timestamps.diff
new file mode 100644
index 000000000..3b5c25544
--- /dev/null
+++ b/data/cwidget/timestamps.diff
@@ -0,0 +1,24 @@
+Description: Do not write timestamps in documentation generated by Doxygen
+ In order to make the build reproducible, we configure Doxygen to skip
+ writing timestamps in the HTML documentation it generates.
+Author: Jérémy Bobbio <lunar@debian.org>
+Last-Update: 2014-09-24
+
+--- cwidget-0.5.17.orig/Doxyfile.in
++++ cwidget-0.5.17/Doxyfile.in
+@@ -699,6 +699,15 @@ HTML_HEADER =
+
+ HTML_FOOTER =
+
++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
++# page will contain the date and time when the page was generated. Setting this
++# to NO can help when comparing the output of multiple runs.
++# The default value is: YES.
++# This tag requires that the tag GENERATE_HTML is set to YES.
++
++HTML_TIMESTAMP = NO
++
++
+ # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+ # style sheet that is used by each HTML page. It can be used to
+ # fine-tune the look of the HTML output. If the tag is left blank doxygen
diff --git a/data/cwidget/xopen.diff b/data/cwidget/xopen.diff
deleted file mode 100644
index d657f7698..000000000
--- a/data/cwidget/xopen.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-diff -ru cwidget-0.5.8/src/cwidget/curses++.h cwidget-0.5.8+iPhone/src/cwidget/curses++.h
---- cwidget-0.5.8/src/cwidget/curses++.h 2008-01-20 17:37:06.000000000 +0000
-+++ cwidget-0.5.8+iPhone/src/cwidget/curses++.h 2009-07-07 07:28:31.000000000 +0000
-@@ -22,6 +22,9 @@
- #ifndef CURSES_PLUSPLUS_H
- #define CURSES_PLUSPLUS_H
-
-+#define _XOPEN_SOURCE
-+#define _XOPEN_SOURCE_EXTENDED 1
-+
- #include <string>
- #include <ncursesw/curses.h>
-
-diff -ru cwidget-0.5.8/src/cwidget/style.h cwidget-0.5.8+iPhone/src/cwidget/style.h
---- cwidget-0.5.8/src/cwidget/style.h 2008-01-20 17:37:06.000000000 +0000
-+++ cwidget-0.5.8+iPhone/src/cwidget/style.h 2009-07-07 07:28:42.000000000 +0000
-@@ -20,6 +20,9 @@
- #ifndef STYLE_H
- #define STYLE_H
-
-+#define _XOPEN_SOURCE
-+#define _XOPEN_SOURCE_EXTENDED 1
-+
- #include <ncursesw/curses.h>
-
- #include <cwidget/curses++.h>
diff --git a/data/darwintools/_metadata/in.1443.00 b/data/darwintools/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/darwintools/_metadata/in.1443.00
diff --git a/data/darwintools/_metadata/maintainer b/data/darwintools/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/darwintools/_metadata/maintainer
+++ b/data/darwintools/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/darwintools/make.sh b/data/darwintools/make.sh
index 7294145fd..f7703a23b 100644
--- a/data/darwintools/make.sh
+++ b/data/darwintools/make.sh
@@ -1,7 +1,7 @@
pkg:setup
-"${PKG_TARG}-gcc" -O2 -mthumb -o startupfiletool startupfiletool.c
-"${PKG_TARG}-gcc" -O2 -mthumb -o sw_vers sw_vers.c -framework CoreFoundation
+"${PKG_TARG}-gcc" -O2 -o startupfiletool startupfiletool.c
+"${PKG_TARG}-gcc" -O2 -o sw_vers sw_vers.c -framework CoreFoundation
pkg: mkdir -p /usr/{,s}bin
pkg: cp -a sw_vers /usr/bin
diff --git a/data/dbus/_metadata/in.1443.00 b/data/dbus/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/dbus/_metadata/in.1443.00
diff --git a/data/dbus/_metadata/maintainer b/data/dbus/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/dbus/_metadata/maintainer
+++ b/data/dbus/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/debianutils/_metadata/in.1443.00 b/data/debianutils/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/debianutils/_metadata/in.1443.00
diff --git a/data/debianutils/_metadata/maintainer b/data/debianutils/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/debianutils/_metadata/maintainer
+++ b/data/debianutils/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/debianutils/_metadata/version b/data/debianutils/_metadata/version
index 1da39dc97..7ea59483d 100644
--- a/data/debianutils/_metadata/version
+++ b/data/debianutils/_metadata/version
@@ -1 +1 @@
-3.4.3ubuntu1
+4.8.6
diff --git a/data/debianutils/debian-binary b/data/debianutils/debian-binary
new file mode 100644
index 000000000..cd5ac039d
--- /dev/null
+++ b/data/debianutils/debian-binary
@@ -0,0 +1 @@
+2.0
diff --git a/data/debianutils/debianutils_3.4.3ubuntu1.tar.gz b/data/debianutils/debianutils_3.4.3ubuntu1.tar.gz
deleted file mode 100644
index 53f75c625..000000000
--- a/data/debianutils/debianutils_3.4.3ubuntu1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/debianutils/debianutils_4.8.6.tar.xz b/data/debianutils/debianutils_4.8.6.tar.xz
new file mode 100644
index 000000000..de06c81d4
--- /dev/null
+++ b/data/debianutils/debianutils_4.8.6.tar.xz
Binary files differ
diff --git a/data/developer-cmds/_metadata/in.1443.00 b/data/developer-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/developer-cmds/_metadata/in.1443.00
diff --git a/data/developer-cmds/_metadata/maintainer b/data/developer-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/developer-cmds/_metadata/maintainer
+++ b/data/developer-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/developer-cmds/make.sh b/data/developer-cmds/make.sh
index cc176fdf7..43b80ceeb 100644
--- a/data/developer-cmds/make.sh
+++ b/data/developer-cmds/make.sh
@@ -1,10 +1,10 @@
pkg:setup
pkg: mkdir -p /usr/bin
-${PKG_TARG}-gcc -o hexdump/hexdump hexdump/{conv,display,hexdump,hexsyntax,odsyntax,parse}.c -D'__FBSDID(x)='
+${PKG_TARG}-gcc -o hexdump/hexdump hexdump/{conv,display,hexdump,hexsyntax,odsyntax,parse}.c -D'__FBSDID(x)=' -D__DARWIN_C_LEVEL=200112L
pkg: cp -a hexdump/hexdump /usr/bin
for bin in ctags error rpcgen unifdef; do
- ${PKG_TARG}-gcc -o "${bin}/${bin}" "${bin}"/*.c
+ ${PKG_TARG}-gcc -o "${bin}/${bin}" "${bin}"/*.c -D_POSIX_C_SOURCE=200112L -DS_IREAD=S_IRUSR -DS_IWRITE=S_IWUSR
pkg: cp -a "${bin}/${bin}" /usr/bin
done
diff --git a/data/dict/_metadata/in.1443.00 b/data/dict/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/dict/_metadata/in.1443.00
diff --git a/data/dict/_metadata/maintainer b/data/dict/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/dict/_metadata/maintainer
+++ b/data/dict/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/dict/make.sh b/data/dict/make.sh
index d1151073e..d752dac67 100644
--- a/data/dict/make.sh
+++ b/data/dict/make.sh
@@ -1,4 +1,6 @@
pkg:setup
+cp ${PKG_BASE}/config.sub .
+cp ${PKG_BASE}/config.sub libmaa/
pkg:configure ac_cv_type_wint_t=yes ac_cv_prog_AR=$(which ${PKG_TARG}-ar)
make AR=${PKG_TARG}-ar
pkg:install
diff --git a/data/diffutils/_metadata/in.1443.00 b/data/diffutils/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/diffutils/_metadata/in.1443.00
diff --git a/data/diffutils/_metadata/maintainer b/data/diffutils/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/diffutils/_metadata/maintainer
+++ b/data/diffutils/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/diffutils/_metadata/version b/data/diffutils/_metadata/version
index dbe590065..d70c8f8d8 100644
--- a/data/diffutils/_metadata/version
+++ b/data/diffutils/_metadata/version
@@ -1 +1 @@
-2.8.1
+3.6
diff --git a/data/diffutils/diffutils-2.8.1.tar.gz b/data/diffutils/diffutils-2.8.1.tar.gz
deleted file mode 100644
index 0ae0a9c7f..000000000
--- a/data/diffutils/diffutils-2.8.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/diffutils/diffutils-3.6.tar.xz b/data/diffutils/diffutils-3.6.tar.xz
new file mode 100644
index 000000000..c39680810
--- /dev/null
+++ b/data/diffutils/diffutils-3.6.tar.xz
Binary files differ
diff --git a/data/diffutils/make.sh b/data/diffutils/make.sh
index 0a689ba95..96cb7c375 100644
--- a/data/diffutils/make.sh
+++ b/data/diffutils/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-pkg:make
+pkg:make -j8
make install prefix="${PKG_DEST}/usr"
diff --git a/data/diskdev-cmds/_metadata/in.1443.00 b/data/diskdev-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/diskdev-cmds/_metadata/in.1443.00
diff --git a/data/diskdev-cmds/_metadata/maintainer b/data/diskdev-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/diskdev-cmds/_metadata/maintainer
+++ b/data/diskdev-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/diskdev-cmds/_metadata/version b/data/diskdev-cmds/_metadata/version
index 2b70dea57..fec150702 100644
--- a/data/diskdev-cmds/_metadata/version
+++ b/data/diskdev-cmds/_metadata/version
@@ -1 +1 @@
-421.7
+593.221.1
diff --git a/data/diskdev-cmds/diskdev_cmds-421.7.tar.gz b/data/diskdev-cmds/diskdev_cmds-421.7.tar.gz
deleted file mode 100644
index 4693e32ec..000000000
--- a/data/diskdev-cmds/diskdev_cmds-421.7.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/diskdev-cmds/diskdev_cmds-593.221.1.tar.gz b/data/diskdev-cmds/diskdev_cmds-593.221.1.tar.gz
new file mode 100644
index 000000000..579fd970d
--- /dev/null
+++ b/data/diskdev-cmds/diskdev_cmds-593.221.1.tar.gz
Binary files differ
diff --git a/data/diskdev-cmds/make.sh b/data/diskdev-cmds/make.sh
index 1b9b8cf73..66e2455a0 100644
--- a/data/diskdev-cmds/make.sh
+++ b/data/diskdev-cmds/make.sh
@@ -7,7 +7,7 @@ ${PKG_TARG}-gcc -fno-common -c *.c
${PKG_TARG}-ar -r libdisk.a *.o
cd ..
-for tproj in !(fstyp|fsck_hfs|fuser|mount_portal|mount_swapfs|mount_umap).tproj; do
+for tproj in !(fstyp|fsck_hfs|fuser|mount_portal|mount_swapfs|mount_umap|newfs_hfs_debug).tproj; do
tproj=$(basename "${tproj}" .tproj)
echo ${tproj}
@@ -41,6 +41,6 @@ pkg: mkdir -p /usr/bin /usr/libexec /usr/sbin /sbin
# XXX: mt ufs
pkg: cp -a quota /usr/bin
-pkg: cp -a dev_mkdb edquota fdisk quot quotaon repquota vsdbutil /usr/sbin
+pkg: cp -a dev_mkdb edquota fdisk quotaon repquota vsdbutil /usr/sbin
pkg: cp -a vndevice /usr/libexec
-pkg: cp -a clri dump dumpfs quotacheck restore tunefs umount @(fsck|fstyp|mount|newfs)?(_*([a-z0-9])) /sbin
+pkg: cp -a quotacheck umount @(fstyp|newfs)?(_*([a-z0-9])) @(mount_*([a-z0-9])) /sbin
diff --git a/data/dmg2img/_metadata/in.1443.00 b/data/dmg2img/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/dmg2img/_metadata/in.1443.00
diff --git a/data/dmg2img/_metadata/maintainer b/data/dmg2img/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/dmg2img/_metadata/maintainer
+++ b/data/dmg2img/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/dns2tcp/_metadata/in.1443.00 b/data/dns2tcp/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/dns2tcp/_metadata/in.1443.00
diff --git a/data/dpkg-perl/_metadata/description b/data/dpkg-perl/_metadata/description
new file mode 100644
index 000000000..907140415
--- /dev/null
+++ b/data/dpkg-perl/_metadata/description
@@ -0,0 +1 @@
+perl-based package maintainance tools from Debian
diff --git a/data/dpkg-perl/_metadata/dpkg.dep b/data/dpkg-perl/_metadata/dpkg.dep
new file mode 120000
index 000000000..3e57eea03
--- /dev/null
+++ b/data/dpkg-perl/_metadata/dpkg.dep
@@ -0,0 +1 @@
+../../dpkg \ No newline at end of file
diff --git a/data/dpkg-perl/_metadata/homepage b/data/dpkg-perl/_metadata/homepage
new file mode 100644
index 000000000..c5221e589
--- /dev/null
+++ b/data/dpkg-perl/_metadata/homepage
@@ -0,0 +1 @@
+http://wiki.debian.org/Teams/Dpkg
diff --git a/data/dpkg-perl/_metadata/in.1443.00 b/data/dpkg-perl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/dpkg-perl/_metadata/in.1443.00
diff --git a/data/dpkg-perl/_metadata/in.550.58 b/data/dpkg-perl/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/dpkg-perl/_metadata/in.550.58
diff --git a/data/dpkg-perl/_metadata/license b/data/dpkg-perl/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/dpkg-perl/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/dpkg-perl/_metadata/maintainer b/data/dpkg-perl/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/dpkg-perl/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/dpkg-perl/_metadata/name b/data/dpkg-perl/_metadata/name
new file mode 100644
index 000000000..494093c26
--- /dev/null
+++ b/data/dpkg-perl/_metadata/name
@@ -0,0 +1 @@
+Debian Packager (Perl)
diff --git a/data/dpkg-perl/_metadata/perl.dep b/data/dpkg-perl/_metadata/perl.dep
new file mode 120000
index 000000000..899dc46ed
--- /dev/null
+++ b/data/dpkg-perl/_metadata/perl.dep
@@ -0,0 +1 @@
+../../perl \ No newline at end of file
diff --git a/data/hackndev.org/_metadata/priority b/data/dpkg-perl/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/hackndev.org/_metadata/priority
+++ b/data/dpkg-perl/_metadata/priority
diff --git a/data/dpkg-perl/_metadata/role b/data/dpkg-perl/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/dpkg-perl/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/dpkg-perl/_metadata/section b/data/dpkg-perl/_metadata/section
new file mode 100644
index 000000000..702b7b8d3
--- /dev/null
+++ b/data/dpkg-perl/_metadata/section
@@ -0,0 +1 @@
+Packaging
diff --git a/data/dpkg-perl/_metadata/tags b/data/dpkg-perl/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/dpkg-perl/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/dpkg-perl/_metadata/version b/data/dpkg-perl/_metadata/version
new file mode 120000
index 000000000..3d7c43343
--- /dev/null
+++ b/data/dpkg-perl/_metadata/version
@@ -0,0 +1 @@
+../../_dpkg/_metadata/version \ No newline at end of file
diff --git a/data/dpkg-perl/make.sh b/data/dpkg-perl/make.sh
new file mode 100644
index 000000000..85b166be0
--- /dev/null
+++ b/data/dpkg-perl/make.sh
@@ -0,0 +1,11 @@
+LIBDIR="$("$(PKG_WORK_ perl)"/perl-5*/miniperl_top -e 'use Config; print $Config{vendorlib};')"
+pkg: mkdir -p "/${LIBDIR}"
+cp -a "$(PKG_DEST_ _dpkg)/${LIBDIR}" "${PKG_DEST}/${LIBDIR}"
+pushd "$(PKG_DEST_ _dpkg)/"
+grep -Erl '#!\s?/usr/bin/perl' . | while read -r line; do
+ dir=$(dirname $line)
+ pkg: mkdir -p "/${dir}"
+ pkg: cp -a "$line" "/${dir}"
+done
+popd
+pkg: rm -rf /{usr,var}/lib{,exec}/dpkg/methods
diff --git a/data/dpkg/_metadata/_dpkg.dep b/data/dpkg/_metadata/_dpkg.dep
new file mode 120000
index 000000000..ace4a76a6
--- /dev/null
+++ b/data/dpkg/_metadata/_dpkg.dep
@@ -0,0 +1 @@
+../../_dpkg \ No newline at end of file
diff --git a/data/dpkg/_metadata/bzip2.dep b/data/dpkg/_metadata/bzip2.dep
index a49d97af9..15aa44a77 100644..120000
--- a/data/dpkg/_metadata/bzip2.dep
+++ b/data/dpkg/_metadata/bzip2.dep
@@ -1 +1 @@
-link ../../bzip2 \ No newline at end of file
+../../bzip2 \ No newline at end of file
diff --git a/data/dpkg/_metadata/in.1443.00 b/data/dpkg/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/dpkg/_metadata/in.1443.00
diff --git a/data/dpkg/_metadata/maintainer b/data/dpkg/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/dpkg/_metadata/maintainer
+++ b/data/dpkg/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/dpkg/_metadata/postinst b/data/dpkg/_metadata/postinst
new file mode 100755
index 000000000..2b593ddc2
--- /dev/null
+++ b/data/dpkg/_metadata/postinst
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if [[ ! -e /var/lib/dpkg/available ]]; then
+ touch /var/lib/dpkg/available
+fi
diff --git a/data/dpkg/_metadata/priority b/data/dpkg/_metadata/priority
index fad9e164a..d0b3ce728 100644
--- a/data/dpkg/_metadata/priority
+++ b/data/dpkg/_metadata/priority
@@ -1 +1 @@
-required
++required
diff --git a/data/dpkg/_metadata/version b/data/dpkg/_metadata/version
index 0150af135..3ed574417 100644
--- a/data/dpkg/_metadata/version
+++ b/data/dpkg/_metadata/version
@@ -1 +1 @@
-1.18.10
+1.18.25
diff --git a/data/dpkg/_metadata/xz.dep b/data/dpkg/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/dpkg/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/dpkg/blankline.diff b/data/dpkg/blankline.diff
deleted file mode 100644
index 4c743aabe..000000000
--- a/data/dpkg/blankline.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-diff -ru dpkg-1.18.10/lib/dpkg/parse.c dpkg-1.18.10+iPhone/lib/dpkg/parse.c
---- dpkg-1.18.10/lib/dpkg/parse.c 2016-07-05 01:55:13.000000000 +0000
-+++ dpkg-1.18.10+iPhone/lib/dpkg/parse.c 2016-12-30 02:19:22.000000000 +0000
-@@ -622,8 +622,6 @@
-
- /* Loop per field. */
- for (;;) {
-- bool blank_line;
--
- /* Scan field name. */
- fs->fieldstart = ps->dataptr - 1;
- while (!parse_at_eof(ps) && !c_isspace(c) && c != ':' && c != MSDOS_EOF_CHAR)
-@@ -667,16 +665,10 @@
- parse_error(ps, _("MSDOS end of file (^Z) in value of field '%.*s' (missing newline?)"),
- fs->fieldlen, fs->fieldstart);
-
-- blank_line = false;
--
- /* Scan field value. */
- fs->valuestart = ps->dataptr - 1;
- for (;;) {
- if (c == '\n' || c == MSDOS_EOF_CHAR) {
-- if (blank_line)
-- parse_error(ps,
-- _("blank line in value of field '%.*s'"),
-- fs->fieldlen, fs->fieldstart);
- ps->lno++;
-
- if (parse_at_eof(ps))
-@@ -688,9 +680,6 @@
- break;
-
- parse_ungetc(c, ps);
-- blank_line = true;
-- } else if (blank_line && !c_isspace(c)) {
-- blank_line = false;
- }
-
- if (parse_at_eof(ps))
diff --git a/data/dpkg/dpkg_1.18.10.tar.xz b/data/dpkg/dpkg_1.18.10.tar.xz
deleted file mode 100644
index d7fc053e6..000000000
--- a/data/dpkg/dpkg_1.18.10.tar.xz
+++ /dev/null
Binary files differ
diff --git a/data/dpkg/lzma.diff b/data/dpkg/lzma.diff
deleted file mode 100644
index fa749a88a..000000000
--- a/data/dpkg/lzma.diff
+++ /dev/null
@@ -1,64 +0,0 @@
-diff -ru dpkg-1.18.10/dpkg-deb/main.c dpkg-1.18.10+iPhone/dpkg-deb/main.c
---- dpkg-1.18.10/dpkg-deb/main.c 2016-07-05 01:55:13.000000000 +0000
-+++ dpkg-1.18.10+iPhone/dpkg-deb/main.c 2016-08-22 22:37:49.000000000 +0000
-@@ -212,8 +212,6 @@
- compress_params.type = compressor_find_by_name(value);
- if (compress_params.type == COMPRESSOR_TYPE_UNKNOWN)
- badusage(_("unknown compression type '%s'!"), value);
-- if (compress_params.type == COMPRESSOR_TYPE_LZMA)
-- warning(_("deprecated compression type '%s'; use xz instead"), value);
- if (compress_params.type == COMPRESSOR_TYPE_BZIP2)
- warning(_("deprecated compression type '%s'; use xz or gzip instead"), value);
- }
-diff -ru dpkg-1.18.10/lib/dpkg/compress.c dpkg-1.18.10+iPhone/lib/dpkg/compress.c
---- dpkg-1.18.10/lib/dpkg/compress.c 2016-07-05 02:00:41.000000000 +0000
-+++ dpkg-1.18.10+iPhone/lib/dpkg/compress.c 2016-08-22 22:38:01.000000000 +0000
-@@ -639,6 +639,16 @@
- * Lzma compressor.
- */
-
-+#define LZMA "lzma"
-+
-+static void
-+fixup_lzma_params(struct compress_params *params)
-+{
-+ /* Normalize compression level. */
-+ if (params->level == 0)
-+ params->level = 1;
-+}
-+
- #ifdef WITH_LIBLZMA
- static void
- filter_unlzma_init(struct io_lzma *io, lzma_stream *s)
-@@ -700,10 +710,12 @@
- filter_lzma(&io, fd_in, fd_out);
- }
- #else
-+static const char *env_lzma[] = { "LZMA", NULL };
-+
- static void
- decompress_lzma(int fd_in, int fd_out, const char *desc)
- {
-- fd_fd_filter(fd_in, fd_out, desc, env_xz, XZ, "-dc", "--format=lzma", NULL);
-+ fd_fd_filter(fd_in, fd_out, desc, env_lzma, LZMA, "-dc", NULL);
- }
-
- static void
-@@ -712,7 +724,7 @@
- char combuf[6];
-
- snprintf(combuf, sizeof(combuf), "-c%d", params->level);
-- fd_fd_filter(fd_in, fd_out, desc, env_xz, XZ, combuf, "--format=lzma", NULL);
-+ fd_fd_filter(fd_in, fd_out, desc, env_lzma, LZMA, combuf, NULL);
- }
- #endif
-
-@@ -720,7 +732,7 @@
- .name = "lzma",
- .extension = ".lzma",
- .default_level = 6,
-- .fixup_params = fixup_none_params,
-+ .fixup_params = fixup_lzma_params,
- .compress = compress_lzma,
- .decompress = decompress_lzma,
- };
diff --git a/data/dpkg/make.sh b/data/dpkg/make.sh
index 074b599f4..d43867069 100644
--- a/data/dpkg/make.sh
+++ b/data/dpkg/make.sh
@@ -1,12 +1,8 @@
-pkg:setup
-#autoconf
-#cp -a libcompat/obstack.[ch] lib
-pkg:configure --with-admindir=/var/lib/dpkg --disable-start-stop-daemon --disable-nls --sysconfdir=/etc --disable-linker-optimisations dpkg_cv_va_copy=yes --enable-static=yes --enable-shared=no --with-dpkg-deb-compressor=gzip
-pkg:make
-pkg:install
-pkg: rm -rf /usr/share/perl5
-pkg: grep -Erl '#! ?/usr/bin/perl' / | while read -r line; do
+cp -a "$(PKG_DEST_ _dpkg)/." "${PKG_DEST}/"
+pkg: rm -rf "$("$(PKG_WORK_ perl)"/perl-5*/miniperl_top -e 'use Config; print $Config{vendorlib};')"
+pkg: grep -Erl '#!\s?/usr/bin/perl' / | while read -r line; do
+ echo rm -f "${line}"
rm -f "${line}"
done
-pkg: rm -rf /{usr,var}/lib/dpkg/methods
-pkg: rm -rf /usr/lib/dpkg/parsechangelog
+pkg: rm -rf /{usr,var}/lib{,exec}/dpkg/methods
+pkg: mkdir -p /var/log/dpkg
diff --git a/data/dpkg/telesphoreo.diff b/data/dpkg/telesphoreo.diff
deleted file mode 100644
index 57f19261e..000000000
--- a/data/dpkg/telesphoreo.diff
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -ru dpkg-1.18.10/triplettable dpkg-1.18.10+iPhone/triplettable
---- dpkg-1.18.10/triplettable 2016-07-05 01:55:14.000000000 +0000
-+++ dpkg-1.18.10+iPhone/triplettable 2016-08-15 23:48:36.000000000 +0000
-@@ -30,6 +30,7 @@
- bsd-openbsd-<cpu> openbsd-<cpu>
- bsd-netbsd-<cpu> netbsd-<cpu>
- bsd-darwin-<cpu> darwin-<cpu>
-+bsd-darwin-arm iphoneos-arm
- sysv-solaris-<cpu> solaris-<cpu>
- uclibceabi-uclinux-arm uclinux-armel
- uclibc-uclinux-<cpu> uclinux-<cpu>
diff --git a/data/dpkg/tolerance.diff b/data/dpkg/tolerance.diff
deleted file mode 100644
index 810b04f18..000000000
--- a/data/dpkg/tolerance.diff
+++ /dev/null
@@ -1,35 +0,0 @@
-diff -ru dpkg-1.18.10/lib/dpkg/parse.c dpkg-1.18.10+iPhone/lib/dpkg/parse.c
---- dpkg-1.18.10/lib/dpkg/parse.c 2016-07-05 01:55:13.000000000 +0000
-+++ dpkg-1.18.10+iPhone/lib/dpkg/parse.c 2016-08-22 21:55:26.000000000 +0000
-@@ -187,8 +187,6 @@
- if ((ps->flags & pdb_recordavailable) ||
- (pkg->status != PKG_STAT_NOTINSTALLED &&
- pkg->status != PKG_STAT_HALFINSTALLED)) {
-- parse_ensure_have_field(ps, &pkgbin->description, "description");
-- parse_ensure_have_field(ps, &pkgbin->maintainer, "maintainer");
- parse_must_have_field(ps, pkgbin->version.version, "version");
- }
-
-diff -ru dpkg-1.18.10/lib/dpkg/parsehelp.c dpkg-1.18.10+iPhone/lib/dpkg/parsehelp.c
---- dpkg-1.18.10/lib/dpkg/parsehelp.c 2016-07-05 01:55:13.000000000 +0000
-+++ dpkg-1.18.10+iPhone/lib/dpkg/parsehelp.c 2016-08-22 21:55:03.000000000 +0000
-@@ -233,19 +233,6 @@
- *hyphen++ = '\0';
- rversion->revision= hyphen ? hyphen : "";
-
-- /* XXX: Would be faster to use something like cisversion and cisrevision. */
-- ptr = rversion->version;
-- if (*ptr && !c_isdigit(*ptr++))
-- return dpkg_put_warn(err, _("version number does not start with digit"));
-- for (; *ptr; ptr++) {
-- if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".-+~:", *ptr) == NULL)
-- return dpkg_put_warn(err, _("invalid character in version number"));
-- }
-- for (ptr = rversion->revision; *ptr; ptr++) {
-- if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".+~", *ptr) == NULL)
-- return dpkg_put_warn(err, _("invalid character in revision number"));
-- }
--
- return 0;
- }
-
diff --git a/data/easywakeup.net/_metadata/description b/data/easywakeup.net/_metadata/description
deleted file mode 100644
index b9933dd63..000000000
--- a/data/easywakeup.net/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-EasyWakeup master repository
diff --git a/data/easywakeup.net/_metadata/license b/data/easywakeup.net/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/easywakeup.net/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/easywakeup.net/_metadata/maintainer b/data/easywakeup.net/_metadata/maintainer
deleted file mode 100644
index 7d9bfbd14..000000000
--- a/data/easywakeup.net/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Alexandra <my-company@freeterra.org>
diff --git a/data/easywakeup.net/_metadata/name b/data/easywakeup.net/_metadata/name
deleted file mode 100644
index fc9740e59..000000000
--- a/data/easywakeup.net/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-EasyWakeup.net
diff --git a/data/easywakeup.net/_metadata/section b/data/easywakeup.net/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/easywakeup.net/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/easywakeup.net/_metadata/tags b/data/easywakeup.net/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/easywakeup.net/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/easywakeup.net/_metadata/version b/data/easywakeup.net/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/easywakeup.net/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/easywakeup.net/easywakeup.net.list b/data/easywakeup.net/easywakeup.net.list
deleted file mode 100644
index ca2104067..000000000
--- a/data/easywakeup.net/easywakeup.net.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://db.easywakeup.net/rep/ ./
diff --git a/data/easywakeup.net/easywakeup.net.png b/data/easywakeup.net/easywakeup.net.png
deleted file mode 100644
index 9471b689a..000000000
--- a/data/easywakeup.net/easywakeup.net.png
+++ /dev/null
Binary files differ
diff --git a/data/easywakeup.net/icon.png b/data/easywakeup.net/icon.png
deleted file mode 100644
index a5dc54d35..000000000
--- a/data/easywakeup.net/icon.png
+++ /dev/null
Binary files differ
diff --git a/data/easywakeup.net/make.sh b/data/easywakeup.net/make.sh
deleted file mode 100644
index f4ea8cea5..000000000
--- a/data/easywakeup.net/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/easywakeup.net.list /etc/apt/sources.list.d
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/icon.png /Applications/Cydia.app/Sources/db.easywakeup.net.png
diff --git a/data/ed/_metadata/in.1443.00 b/data/ed/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ed/_metadata/in.1443.00
diff --git a/data/ed/_metadata/maintainer b/data/ed/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ed/_metadata/maintainer
+++ b/data/ed/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/essential/_metadata/in.1443.00 b/data/essential/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/essential/_metadata/in.1443.00
diff --git a/data/essential/_metadata/maintainer b/data/essential/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/essential/_metadata/maintainer
+++ b/data/essential/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/expat/_metadata/in.1443.00 b/data/expat/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/expat/_metadata/in.1443.00
diff --git a/data/expat/_metadata/in.550.58 b/data/expat/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/expat/_metadata/in.550.58
diff --git a/data/expat/_metadata/maintainer b/data/expat/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/expat/_metadata/maintainer
+++ b/data/expat/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/expat/_metadata/version b/data/expat/_metadata/version
index 38f77a65b..21bb5e156 100644
--- a/data/expat/_metadata/version
+++ b/data/expat/_metadata/version
@@ -1 +1 @@
-2.0.1
+2.2.5
diff --git a/data/expat/expat-2.0.1.tar.gz b/data/expat/expat-2.0.1.tar.gz
deleted file mode 100644
index f42c713f2..000000000
--- a/data/expat/expat-2.0.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/expat/expat-2.2.5.tar.bz2 b/data/expat/expat-2.2.5.tar.bz2
new file mode 100644
index 000000000..4e6b24c83
--- /dev/null
+++ b/data/expat/expat-2.2.5.tar.bz2
Binary files differ
diff --git a/data/faac/_metadata/in.1443.00 b/data/faac/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/faac/_metadata/in.1443.00
diff --git a/data/faac/_metadata/maintainer b/data/faac/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/faac/_metadata/maintainer
+++ b/data/faac/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/faad/_metadata/in.1443.00 b/data/faad/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/faad/_metadata/in.1443.00
diff --git a/data/faad/_metadata/maintainer b/data/faad/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/faad/_metadata/maintainer
+++ b/data/faad/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/faad/_metadata/version b/data/faad/_metadata/version
index 6a6a3d8e3..80803faf1 100644
--- a/data/faad/_metadata/version
+++ b/data/faad/_metadata/version
@@ -1 +1 @@
-2.6.1
+2.8.8
diff --git a/data/faad/faad2-2.6.1.tar.gz b/data/faad/faad2-2.6.1.tar.gz
deleted file mode 100644
index 58b28f09d..000000000
--- a/data/faad/faad2-2.6.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/faad/faad2-2.8.8.tar.gz b/data/faad/faad2-2.8.8.tar.gz
new file mode 100644
index 000000000..acc42372a
--- /dev/null
+++ b/data/faad/faad2-2.8.8.tar.gz
Binary files differ
diff --git a/data/faad/make.sh b/data/faad/make.sh
index 8325cc734..452a4bfd5 100644
--- a/data/faad/make.sh
+++ b/data/faad/make.sh
@@ -1,5 +1,4 @@
pkg:setup
-./bootstrap
pkg:configure
make
pkg:install
diff --git a/data/faad/timestamp.diff b/data/faad/timestamp.diff
index b5b0d9cf0..ba844fa35 100644
--- a/data/faad/timestamp.diff
+++ b/data/faad/timestamp.diff
@@ -1,63 +1,30 @@
-diff -ru faad2/frontend/main.c faad2+iPhone/frontend/main.c
---- faad2/frontend/main.c 2007-11-01 12:33:29.000000000 +0000
-+++ faad2+iPhone/frontend/main.c 2008-06-19 04:37:40.000000000 +0000
-@@ -1167,7 +1167,6 @@
+diff -ur faad2-2.8.8/frontend/main.c faad2-2.8.8+iPhone/frontend/main.c
+--- faad2-2.8.8/frontend/main.c 2017-12-17 06:17:36.000000000 -1000
++++ faad2-2.8.8+iPhone/frontend/main.c 2018-07-27 22:48:22.000000000 -1000
+@@ -1202,7 +1202,7 @@
+ NeAACDecGetVersion(&faad_id_string, &faad_copyright_string);
-
- faad_fprintf(stderr, " *********** Ahead Software MPEG-4 AAC Decoder V%s ******************\n\n", FAAD2_VERSION);
+ faad_fprintf(stderr, " *********** Ahead Software MPEG-4 AAC Decoder V%s ******************\n\n", faad_id_string);
- faad_fprintf(stderr, " Build: %s\n", __DATE__);
- faad_fprintf(stderr, " Copyright 2002-2004: Ahead Software AG\n");
- faad_fprintf(stderr, " http://www.audiocoding.com\n");
++ faad_fprintf(stderr, " Build: 2.8.8\n");
+ faad_fprintf(stderr, "%s", faad_copyright_string);
if (cap & FIXED_POINT_CAP)
-diff -ru faad2/plugins/in_mp4/in_mp4.c faad2+iPhone/plugins/in_mp4/in_mp4.c
---- faad2/plugins/in_mp4/in_mp4.c 2004-10-19 18:02:10.000000000 +0000
-+++ faad2+iPhone/plugins/in_mp4/in_mp4.c 2008-06-19 04:37:55.000000000 +0000
-@@ -1219,7 +1219,7 @@
- void about(HWND hwndParent)
- {
- MessageBox(hwndParent,
-- "AudioCoding.com MPEG-4 AAC player " FAAD2_VERSION " compiled on " __DATE__ ".\n"
-+ "AudioCoding.com MPEG-4 AAC player " FAAD2_VERSION ".\n"
- "Visit the website for more info.\n"
- "Copyright 2002-2004 AudioCoding.com",
- "About",
-@@ -2563,7 +2563,7 @@
- static In_Module module =
- {
- IN_VER,
-- "AudioCoding.com MPEG-4 AAC player: " FAAD2_VERSION " compiled on " __DATE__,
-+ "AudioCoding.com MPEG-4 AAC player: " FAAD2_VERSION,
- 0, // hMainWindow
- 0, // hDllInstance
- NULL,
-diff -ru faad2/plugins/QCD/QCDFAAD.c faad2+iPhone/plugins/QCD/QCDFAAD.c
---- faad2/plugins/QCD/QCDFAAD.c 2003-04-28 19:04:35.000000000 +0000
-+++ faad2+iPhone/plugins/QCD/QCDFAAD.c 2008-06-19 04:37:40.000000000 +0000
-@@ -349,7 +349,7 @@
- {
- static RECT rcLOGO, rcMail1, rcMail2/*, rcMail3*/;
- POINT ptMouse;
-- static char szPluginVer[] = "QCD FAAD Input Plug-in v1.0b\nCompiled on " __TIME__ ", " __DATE__;
-+ static char szPluginVer[] = "QCD FAAD Input Plug-in v1.0b;
- static char szFLACVer[] = "Using: FAAD2 v "FAAD2_VERSION" by";
-
- switch (uMsg)
-@@ -1027,4 +1027,4 @@
- {
- return 0;
- }
+ faad_fprintf(stderr, " Fixed point version\n");
+@@ -1361,4 +1361,4 @@
+ #else
+ return faad_main(argc, argv);
+ #endif
-}
\ No newline at end of file
+}
-diff -ru faad2/plugins/QCDMp4/QCDMp4.c faad2+iPhone/plugins/QCDMp4/QCDMp4.c
---- faad2/plugins/QCDMp4/QCDMp4.c 2003-12-06 04:24:17.000000000 +0000
-+++ faad2+iPhone/plugins/QCDMp4/QCDMp4.c 2008-06-19 04:37:40.000000000 +0000
-@@ -1304,7 +1304,7 @@
- void About(int flags)
- {
- MessageBox(module.hMainWindow,
-- "AudioCoding.com MPEG-4 General Audio player " FAAD2_VERSION " compiled on " __DATE__ ".\n"
-+ "AudioCoding.com MPEG-4 General Audio player " FAAD2_VERSION ".\n"
- "Visit the website for more info.\n"
- "Ported to QCD by Shao Hao.\n"
- "Copyright 2002-2003 AudioCoding.com",
+diff -ur faad2-2.8.8/utils/win32/ac2ver.c faad2-2.8.8+iPhone/utils/win32/ac2ver.c
+--- faad2-2.8.8/utils/win32/ac2ver.c 2017-12-17 06:17:36.000000000 -1000
++++ faad2-2.8.8+iPhone/utils/win32/ac2ver.c 2018-07-27 22:49:02.000000000 -1000
+@@ -94,7 +94,6 @@
+ {
+ wchar_t file_name[_MAX_FNAME], file_ext[_MAX_EXT];
+ _wsplitpath(argv[0], NULL, NULL, file_name, file_ext);
+- fprintf(stderr, "AC2VER [%s]\n\n", __DATE__);
+ fprintf(stderr, "Usage: %S%S <lib_name> <path/to/configure.ac>\n\n", file_name, file_ext);
+ return EXIT_FAILURE;
+ }
diff --git a/data/fakeroot/_metadata/description b/data/fakeroot/_metadata/description
new file mode 100644
index 000000000..707a64cf7
--- /dev/null
+++ b/data/fakeroot/_metadata/description
@@ -0,0 +1 @@
+tool for simulating superuser privileges
diff --git a/data/fakeroot/_metadata/in.1443.00 b/data/fakeroot/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/fakeroot/_metadata/in.1443.00
diff --git a/data/fakeroot/_metadata/in.550.58 b/data/fakeroot/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/fakeroot/_metadata/in.550.58
diff --git a/data/fakeroot/_metadata/license b/data/fakeroot/_metadata/license
new file mode 120000
index 000000000..af4224931
--- /dev/null
+++ b/data/fakeroot/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-3 \ No newline at end of file
diff --git a/data/fakeroot/_metadata/maintainer b/data/fakeroot/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/fakeroot/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/fakeroot/_metadata/priority b/data/fakeroot/_metadata/priority
new file mode 100644
index 000000000..ea5b3d7ee
--- /dev/null
+++ b/data/fakeroot/_metadata/priority
@@ -0,0 +1 @@
+important
diff --git a/data/fakeroot/_metadata/role b/data/fakeroot/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/fakeroot/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/fakeroot/_metadata/section b/data/fakeroot/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/fakeroot/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/fakeroot/_metadata/shell-cmds.dep b/data/fakeroot/_metadata/shell-cmds.dep
new file mode 120000
index 000000000..27cb9a30a
--- /dev/null
+++ b/data/fakeroot/_metadata/shell-cmds.dep
@@ -0,0 +1 @@
+../../shell-cmds \ No newline at end of file
diff --git a/data/fakeroot/_metadata/shell-cmds.ver.iphoneos-arm b/data/fakeroot/_metadata/shell-cmds.ver.iphoneos-arm
new file mode 100644
index 000000000..cbda91a61
--- /dev/null
+++ b/data/fakeroot/_metadata/shell-cmds.ver.iphoneos-arm
@@ -0,0 +1 @@
+118-8
diff --git a/data/fakeroot/_metadata/tags b/data/fakeroot/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/fakeroot/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/fakeroot/_metadata/version b/data/fakeroot/_metadata/version
new file mode 100644
index 000000000..769e37e15
--- /dev/null
+++ b/data/fakeroot/_metadata/version
@@ -0,0 +1 @@
+1.20.2
diff --git a/data/fakeroot/fakeroot_1.20.2.tar.bz2 b/data/fakeroot/fakeroot_1.20.2.tar.bz2
new file mode 100644
index 000000000..c648fac8a
--- /dev/null
+++ b/data/fakeroot/fakeroot_1.20.2.tar.bz2
Binary files differ
diff --git a/data/fakeroot/iphone.diff b/data/fakeroot/iphone.diff
new file mode 100644
index 000000000..040046021
--- /dev/null
+++ b/data/fakeroot/iphone.diff
@@ -0,0 +1,371 @@
+diff -ur fakeroot-1.20.2/Makefile.am fakeroot-1.20.2+iPhone/Makefile.am
+--- fakeroot-1.20.2/Makefile.am 2014-10-05 05:16:00.000000000 -1000
++++ fakeroot-1.20.2+iPhone/Makefile.am 2019-01-28 21:53:27.000000000 -1000
+@@ -10,13 +10,8 @@
+ lib_LTLIBRARIES=libfakeroot.la
+ libfakeroot_la_SOURCES=libfakeroot.c statconv/glibc/linux/alpha/stats.h wrapdef.h wrapstruct.h communicate.h
+ libfakeroot_la_LDFLAGS=-release 0
+-if MACOSX
+-libfakeroot_la_DEPENDENCIES=wrapdef.h wrapstruct.h libcommunicate.la libmacosx.la $(LTLIBOBJS)
+-libfakeroot_la_LIBADD = libcommunicate.la libmacosx.la $(LTLIBOBJS)
+-else !MACOSX
+ libfakeroot_la_DEPENDENCIES=wrapdef.h wrapstruct.h libcommunicate.la $(LTLIBOBJS)
+ libfakeroot_la_LIBADD = libcommunicate.la $(LTLIBOBJS)
+-endif !MACOSX
+
+ bin_PROGRAMS=faked
+ faked_SOURCES = faked.c
+diff -ur fakeroot-1.20.2/Makefile.in fakeroot-1.20.2+iPhone/Makefile.in
+--- fakeroot-1.20.2/Makefile.in 2014-10-05 05:16:28.000000000 -1000
++++ fakeroot-1.20.2+iPhone/Makefile.in 2019-01-28 21:53:27.000000000 -1000
+@@ -413,10 +413,8 @@
+ lib_LTLIBRARIES = libfakeroot.la
+ libfakeroot_la_SOURCES = libfakeroot.c statconv/glibc/linux/alpha/stats.h wrapdef.h wrapstruct.h communicate.h
+ libfakeroot_la_LDFLAGS = -release 0
+-@MACOSX_FALSE@libfakeroot_la_DEPENDENCIES = wrapdef.h wrapstruct.h libcommunicate.la $(LTLIBOBJS)
+-@MACOSX_TRUE@libfakeroot_la_DEPENDENCIES = wrapdef.h wrapstruct.h libcommunicate.la libmacosx.la $(LTLIBOBJS)
+-@MACOSX_FALSE@libfakeroot_la_LIBADD = libcommunicate.la $(LTLIBOBJS)
+-@MACOSX_TRUE@libfakeroot_la_LIBADD = libcommunicate.la libmacosx.la $(LTLIBOBJS)
++libfakeroot_la_DEPENDENCIES = wrapdef.h wrapstruct.h libcommunicate.la $(LTLIBOBJS)
++libfakeroot_la_LIBADD = libcommunicate.la $(LTLIBOBJS)
+ faked_SOURCES = faked.c
+ faked_LDADD = libcommunicate.la
+ simple_SOURCES = simple.c
+diff -ur fakeroot-1.20.2/communicate.c fakeroot-1.20.2+iPhone/communicate.c
+--- fakeroot-1.20.2/communicate.c 2014-10-05 05:16:00.000000000 -1000
++++ fakeroot-1.20.2+iPhone/communicate.c 2019-01-28 21:53:27.000000000 -1000
+@@ -24,8 +24,14 @@
+ In this file, we want 'struct stat' to have a 32-bit 'ino_t'.
+ We use 'struct stat64' when we need a 64-bit 'ino_t'.
+ */
++# include <sys/cdefs.h>
++#if _DARWIN_FEATURE_ONLY_64_BIT_INODE
++#define STRUCT_STAT64 struct stat
++#else
++#define STRUCT_STAT64 struct stat64
+ #define _DARWIN_NO_64_BIT_INODE
+ #endif
++#endif
+
+ #include "communicate.h"
+ #include <dlfcn.h>
+@@ -218,7 +224,7 @@
+ #ifdef STAT64_SUPPORT
+
+ void cpyfakemstat64(struct fake_msg *f,
+- const struct stat64 *st
++ const STRUCT_STAT64 *st
+ #ifdef STUPID_ALPHA_HACK
+ , int ver
+ #endif
+@@ -281,7 +287,7 @@
+ }
+ #endif
+ }
+-void cpystat64fakem(struct stat64 *st,
++void cpystat64fakem(STRUCT_STAT64 *st,
+ const struct fake_msg *f
+ #ifdef STUPID_ALPHA_HACK
+ , int ver
+@@ -353,7 +359,7 @@
+
+ #ifdef _LARGEFILE_SOURCE
+
+-void stat64from32(struct stat64 *s64, const struct stat *s32)
++void stat64from32(STRUCT_STAT64 *s64, const struct stat *s32)
+ {
+ /* I've added st_size and st_blocks here.
+ Don't know why they were missing -- joost*/
+@@ -374,7 +380,7 @@
+
+ /* This assumes that the 64 bit structure is actually filled in and does not
+ down case the sizes from the 32 bit one.. */
+-void stat32from64(struct stat *s32, const struct stat64 *s64)
++void stat32from64(struct stat *s32, const STRUCT_STAT64 *s64)
+ {
+ s32->st_dev = s64->st_dev;
+ s32->st_ino = s64->st_ino;
+@@ -711,7 +717,7 @@
+ }
+
+ #ifdef STAT64_SUPPORT
+-void send_stat64(const struct stat64 *st,
++void send_stat64(const STRUCT_STAT64 *st,
+ func_id_t f
+ #ifdef STUPID_ALPHA_HACK
+ , int ver
+@@ -819,7 +825,7 @@
+ }
+
+ #ifdef STAT64_SUPPORT
+-void send_get_stat64(struct stat64 *st
++void send_get_stat64(STRUCT_STAT64 *st
+ #ifdef STUPID_ALPHA_HACK
+ , int ver
+ #endif
+@@ -847,7 +853,7 @@
+ }
+ }
+
+-void send_get_xattr64(struct stat64 *st
++void send_get_xattr64(STRUCT_STAT64 *st
+ , xattr_args *xattr
+ #ifdef STUPID_ALPHA_HACK
+ , int ver
+diff -ur fakeroot-1.20.2/communicate.h fakeroot-1.20.2+iPhone/communicate.h
+--- fakeroot-1.20.2/communicate.h 2014-10-05 05:16:00.000000000 -1000
++++ fakeroot-1.20.2+iPhone/communicate.h 2019-01-28 21:53:27.000000000 -1000
+@@ -51,15 +51,13 @@
+
+ #ifdef __APPLE__
+ # include <AvailabilityMacros.h>
+-# ifndef MAC_OS_X_VERSION_10_5 1050
+-# define MAC_OS_X_VERSION_10_5 1050
+-# endif
+-# ifndef MAC_OS_X_VERSION_10_6 1060
+-# define MAC_OS_X_VERSION_10_6 1060
+-# endif
+-# if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
+-# define HAVE_APPLE_STAT64 1
+-# endif
++# include <sys/cdefs.h>
++#if _DARWIN_FEATURE_ONLY_64_BIT_INODE
++#define STRUCT_STAT64 struct stat
++#else
++#define STRUCT_STAT64 struct stat64
++#endif
++# define HAVE_APPLE_STAT64 1
+ #endif
+
+ /* Then decide whether we do or do not use the stat64 support */
+@@ -205,16 +203,16 @@
+
+ #ifdef STAT64_SUPPORT
+ #ifndef STUPID_ALPHA_HACK
+-extern void send_stat64(const struct stat64 *st, func_id_t f);
+-extern void send_get_stat64(struct stat64 *buf);
+-extern void send_get_xattr64(struct stat64 *st, xattr_args *xattr);
+-#else
+-extern void send_stat64(const struct stat64 *st, func_id_t f, int ver);
+-extern void send_get_stat64(struct stat64 *buf, int ver);
+-extern void send_get_xattr64(struct stat64 *st, xattr_args *xattr, int ver);
++extern void send_stat64(const STRUCT_STAT64 *st, func_id_t f);
++extern void send_get_stat64(STRUCT_STAT64 *buf);
++extern void send_get_xattr64(STRUCT_STAT64 *st, xattr_args *xattr);
++#else
++extern void send_stat64(const STRUCT_STAT64 *st, func_id_t f, int ver);
++extern void send_get_stat64(STRUCT_STAT64 *buf, int ver);
++extern void send_get_xattr64(STRUCT_STAT64 *st, xattr_args *xattr, int ver);
+ #endif
+-extern void stat64from32(struct stat64 *s64, const struct stat *s32);
+-extern void stat32from64(struct stat *s32, const struct stat64 *s64);
++extern void stat64from32(STRUCT_STAT64 *s64, const struct stat *s32);
++extern void stat32from64(struct stat *s32, const STRUCT_STAT64 *s64);
+ #endif
+
+ #ifndef FAKEROOT_FAKENET
+diff -ur fakeroot-1.20.2/faked.c fakeroot-1.20.2+iPhone/faked.c
+--- fakeroot-1.20.2/faked.c 2014-10-05 05:16:00.000000000 -1000
++++ fakeroot-1.20.2+iPhone/faked.c 2019-01-28 21:53:27.000000000 -1000
+@@ -84,7 +84,10 @@
+ In this file, we want 'struct stat' to have a 32-bit 'ino_t'.
+ We use 'struct stat64' when we need a 64-bit 'ino_t'.
+ */
+-#define _DARWIN_NO_64_BIT_INODE
++# include <sys/cdefs.h>
++# if !__DARWIN_ONLY_64_BIT_INO_T
++# define _DARWIN_NO_64_BIT_INODE
++# endif
+ #endif
+
+ #include "config.h"
+diff -ur fakeroot-1.20.2/libfakeroot.c fakeroot-1.20.2+iPhone/libfakeroot.c
+--- fakeroot-1.20.2/libfakeroot.c 2014-10-05 05:16:00.000000000 -1000
++++ fakeroot-1.20.2+iPhone/libfakeroot.c 2019-01-28 21:59:28.000000000 -1000
+@@ -29,6 +29,7 @@
+ fakeroot
+ always bombs. Simple fix:
+ */
++#import <sys/stat.h>
+ #define _GNU_SOURCE
+
+ #define FAKEROOT_LIBFAKEROOT
+@@ -38,7 +39,14 @@
+ In this file, we want 'struct stat' to have a 32-bit 'ino_t'.
+ We use 'struct stat64' when we need a 64-bit 'ino_t'.
+ */
++#include <sys/cdefs.h>
++
++#if _DARWIN_FEATURE_ONLY_64_BIT_INODE
++#define STRUCT_STAT64 struct stat
++#else
++#define STRUCT_STAT64 struct stat64
+ #define _DARWIN_NO_64_BIT_INODE
++#endif
+
+ /* The helper _unix2003 version of this file calls a few functions in this file
+ that are marked with static_nonapple so that needs to become private instead
+@@ -95,7 +103,7 @@
+ the fakeroot library owns the storage of the stat variable.
+ */
+ #ifdef STAT64_SUPPORT
+-#define INT_STRUCT_STAT struct stat64
++#define INT_STRUCT_STAT STRUCT_STAT64
+ #define INT_NEXT_STAT(a,b) NEXT_STAT64(_STAT_VER,a,b)
+ #define INT_NEXT_LSTAT(a,b) NEXT_LSTAT64(_STAT_VER,a,b)
+ #define INT_NEXT_FSTAT(a,b) NEXT_FSTAT64(_STAT_VER,a,b)
+@@ -686,7 +694,7 @@
+
+ int WRAP_LSTAT64 LSTAT64_ARG (int ver,
+ const char *file_name,
+- struct stat64 *st){
++ STRUCT_STAT64 *st){
+
+ int r;
+
+@@ -707,7 +715,7 @@
+
+ int WRAP_STAT64 STAT64_ARG(int ver,
+ const char *file_name,
+- struct stat64 *st){
++ STRUCT_STAT64 *st){
+ int r;
+
+ #ifdef LIBFAKEROOT_DEBUGGING
+@@ -725,7 +733,7 @@
+
+ int WRAP_FSTAT64 FSTAT64_ARG(int ver,
+ int fd,
+- struct stat64 *st){
++ STRUCT_STAT64 *st){
+ int r;
+
+ #ifdef LIBFAKEROOT_DEBUGGING
+@@ -745,7 +753,7 @@
+ int WRAP_FSTATAT64 FSTATAT64_ARG(int ver,
+ int dir_fd,
+ const char *path,
+- struct stat64 *st,
++ STRUCT_STAT64 *st,
+ int flags){
+
+
+@@ -1894,7 +1902,7 @@
+ }
+ #endif /* HAVE_FREMOVEXATTR */
+
+-int setpriority(int which, int who, int prio){
++int setpriority(int which, id_t who, int prio){
+ if (fakeroot_disabled)
+ return next_setpriority(which, who, prio);
+ next_setpriority(which, who, prio);
+Only in fakeroot-1.20.2+iPhone/: libfakeroot.c.orig
+diff -ur fakeroot-1.20.2/libfakeroot_unix2003.c fakeroot-1.20.2+iPhone/libfakeroot_unix2003.c
+--- fakeroot-1.20.2/libfakeroot_unix2003.c 2014-10-05 05:16:00.000000000 -1000
++++ fakeroot-1.20.2+iPhone/libfakeroot_unix2003.c 2019-01-28 21:53:27.000000000 -1000
+@@ -18,7 +18,13 @@
+ In this file, we want 'struct stat' to have a 32-bit 'ino_t'.
+ We use 'struct stat64' when we need a 64-bit 'ino_t'.
+ */
++#include <sys/cdefs.h>
++#if _DARWIN_FEATURE_ONLY_64_BIT_INODE
++#define INT_STRUCT_STAT struct stat
++#else
++#define INT_STRUCT_STAT struct stat64
+ #define _DARWIN_NO_64_BIT_INODE
++#endif
+
+ /*
+ This file is for 32-bit symbols which have the "$UNIX2003" version, i.e.
+@@ -48,14 +54,12 @@
+ the fakeroot library owns the storage of the stat variable.
+ */
+ #ifdef STAT64_SUPPORT
+-#define INT_STRUCT_STAT struct stat64
+ #define INT_NEXT_STAT(a,b) NEXT_STAT64(_STAT_VER,a,b)
+ #define INT_NEXT_LSTAT(a,b) NEXT_LSTAT64(_STAT_VER,a,b)
+ #define INT_NEXT_FSTAT(a,b) NEXT_FSTAT64(_STAT_VER,a,b)
+ #define INT_NEXT_FSTATAT(a,b,c,d) NEXT_FSTATAT64(_STAT_VER,a,b,c,d)
+ #define INT_SEND_STAT(a,b) SEND_STAT64(a,b,_STAT_VER)
+ #else
+-#define INT_STRUCT_STAT struct stat
+ #define INT_NEXT_STAT(a,b) NEXT_STAT(_STAT_VER,a,b)
+ #define INT_NEXT_LSTAT(a,b) NEXT_LSTAT(_STAT_VER,a,b)
+ #define INT_NEXT_FSTAT(a,b) NEXT_FSTAT(_STAT_VER,a,b)
+diff -ur fakeroot-1.20.2/wrapfunc.inp fakeroot-1.20.2+iPhone/wrapfunc.inp
+--- fakeroot-1.20.2/wrapfunc.inp 2014-10-05 05:16:00.000000000 -1000
++++ fakeroot-1.20.2+iPhone/wrapfunc.inp 2019-01-28 21:59:28.000000000 -1000
+@@ -16,6 +16,14 @@
+ /* __*xstat are used on glibc systems instead of just *xstat. */
+ /**/
+
++#include <sys/cdefs.h>
++
++#if _DARWIN_FEATURE_ONLY_64_BIT_INODE
++#define STRUCT_STAT64 struct stat
++#else
++#define STRUCT_STAT64 struct stat64
++#endif
++
+ WRAP_LSTAT;int;LSTAT_ARG(int ver, const char *file_name, struct stat *buf);LSTAT_ARG(ver, file_name, buf);LSTAT
+ WRAP_STAT;int;STAT_ARG(int ver, const char *file_name, struct stat *buf);STAT_ARG(ver, file_name, buf);STAT
+ WRAP_FSTAT;int;FSTAT_ARG(int ver, int fd, struct stat *buf);FSTAT_ARG(ver, fd, buf);FSTAT
+@@ -24,11 +32,11 @@
+ #endif /* HAVE_FSTATAT */
+
+ #ifdef STAT64_SUPPORT
+-WRAP_LSTAT64;int;LSTAT64_ARG(int ver, const char *file_name, struct stat64 *buf);LSTAT64_ARG(ver, file_name, buf);LSTAT64
+-WRAP_STAT64;int;STAT64_ARG(int ver, const char *file_name, struct stat64 *buf);STAT64_ARG(ver, file_name, buf);STAT64
+-WRAP_FSTAT64;int;FSTAT64_ARG(int ver, int fd, struct stat64 *buf);FSTAT64_ARG(ver, fd, buf);FSTAT64
++WRAP_LSTAT64;int;LSTAT64_ARG(int ver, const char *file_name, STRUCT_STAT64 *buf);LSTAT64_ARG(ver, file_name, buf);LSTAT64
++WRAP_STAT64;int;STAT64_ARG(int ver, const char *file_name, STRUCT_STAT64 *buf);STAT64_ARG(ver, file_name, buf);STAT64
++WRAP_FSTAT64;int;FSTAT64_ARG(int ver, int fd, STRUCT_STAT64 *buf);FSTAT64_ARG(ver, fd, buf);FSTAT64
+ #ifdef HAVE_FSTATAT
+-WRAP_FSTATAT64;int;FSTATAT64_ARG(int ver, int dir_fd, const char *path, struct stat64 *buf, int flags);FSTATAT64_ARG(ver, dir_fd, path, buf, flags);FSTATAT64
++WRAP_FSTATAT64;int;FSTATAT64_ARG(int ver, int dir_fd, const char *path, STRUCT_STAT64 *buf, int flags);FSTATAT64_ARG(ver, dir_fd, path, buf, flags);FSTATAT64
+ #endif /* HAVE_FSTATAT */
+ #endif /* STAT64_SUPPORT */
+
+@@ -48,9 +56,11 @@
+ #endif
+ #endif
+ #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++#if !_DARWIN_FEATURE_ONLY_64_BIT_INODE
+ lstat$INODE64;int;(const char *file_name, struct stat *buf);(file_name, buf)
+ stat$INODE64;int;(const char *file_name, struct stat *buf);(file_name, buf)
+ fstat$INODE64;int;(int fd, struct stat *buf);(fd, buf)
++#endif
+ posix_spawn;int;(pid_t * __restrict pid, const char * __restrict path, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t * __restrict attrp, char *const argv[ __restrict], char *const envp[ __restrict]);(pid, path, file_actions, attrp, argv, envp)
+ posix_spawnp;int;(pid_t * __restrict pid, const char * __restrict path, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t * __restrict attrp, char *const argv[ __restrict], char *const envp[ __restrict]);(pid, path, file_actions, attrp, argv, envp)
+ #endif
+@@ -145,7 +155,7 @@
+ #endif /* HAVE_SETFSGID */
+ initgroups;int;(const char *user, INITGROUPS_SECOND_ARG group);(user, group)
+ setgroups;int;(SETGROUPS_SIZE_TYPE size, const gid_t *list);(size, list)
+-setpriority;int;(int which, int who, int prio);(which, who, prio)
++setpriority;int;(int which, id_t who, int prio);(which, who, prio)
+ #ifdef HAVE_CAPSET
+ capset;int;(cap_user_header_t hdrp, const cap_user_data_t datap);(hdrp, datap)
+ #endif /* HAVE_CAPSET */
+@@ -218,16 +228,20 @@
+ fts_read;FTSENT *;(FTS *ftsp);(ftsp)
+ #ifdef __APPLE__
+ #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++#if !_DARWIN_FEATURE_ONLY_64_BIT_INODE
+ fts_read$INODE64;FTSENT *;(FTS *ftsp);(ftsp)
+ #endif
++#endif
+ #endif /* ifdef __APPLE__ */
+ #endif /* HAVE_FTS_READ */
+ #ifdef HAVE_FTS_CHILDREN
+ fts_children;FTSENT *;(FTS *ftsp, int options);(ftsp, options)
+ #ifdef __APPLE__
+ #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
++#if !_DARWIN_FEATURE_ONLY_64_BIT_INODE
+ fts_children$INODE64;FTSENT *;(FTS *ftsp, int options);(ftsp, options)
+ #endif
++#endif
+ #endif /* ifdef __APPLE__ */
+ #endif /* HAVE_FTS_CHILDREN */
+
+Only in fakeroot-1.20.2+iPhone/: wrapfunc.inp.orig
diff --git a/data/fakeroot/make.sh b/data/fakeroot/make.sh
new file mode 100644
index 000000000..4524d2558
--- /dev/null
+++ b/data/fakeroot/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+#pkg:configure ac_cv_func_stat64=no ac_cv_func_fstat64=no ac_cv_func_fstatat64=no CFLAGS=-g --with-ipc=tcp
+pkg:configure --with-ipc=tcp
+pkg:make
+pkg:install
diff --git a/data/fakeroot/openat.diff b/data/fakeroot/openat.diff
new file mode 100644
index 000000000..3287bb4f3
--- /dev/null
+++ b/data/fakeroot/openat.diff
@@ -0,0 +1,52 @@
+>From d67f168080229bdfda9e07fc473fd699ed76a001 Mon Sep 17 00:00:00 2001
+From: Mikhail Gusarov <dottedmag@dottedmag.net>
+Date: Fri, 24 Oct 2014 17:36:15 +0200
+Subject: [PATCH 1/2] Implement openat(2) wrapper which handles optional
+ argument
+
+Unbreaks build on OS X 10.10
+---
+ libfakeroot.c | 16 ++++++++++++++++
+ wrapfunc.inp | 2 +-
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/libfakeroot.c b/libfakeroot.c
+index f867758..cd0be84 100644
+--- a/libfakeroot.c
++++ b/libfakeroot.c
+@@ -2426,3 +2426,19 @@ int sysinfo(int command, char *buf, long count)
+ }
+ }
+ #endif
++
++#ifdef HAVE_OPENAT
++int openat(int dir_fd, const char *pathname, int flags, ...)
++{
++ if (flags & O_CREAT)
++ {
++ va_list args;
++ mode_t mode;
++ va_start(args, flags);
++ mode = va_arg(args, int);
++ va_end(args);
++ return next_openat(dir_fd, pathname, flags, mode);
++ }
++ return next_openat(dir_fd, pathname, flags);
++}
++#endif
+diff --git a/wrapfunc.inp b/wrapfunc.inp
+index 5eff0cc..88bcc11 100644
+--- a/wrapfunc.inp
++++ b/wrapfunc.inp
+@@ -197,7 +197,7 @@ fchownat;int;(int dir_fd, const char *path, uid_t owner, gid_t group, int flags)
+ mkdirat;int;(int dir_fd, const char *pathname, mode_t mode);(dir_fd, pathname, mode)
+ #endif /* HAVE_MKDIRAT */
+ #ifdef HAVE_OPENAT
+-openat;int;(int dir_fd, const char *pathname, int flags);(dir_fd, pathname, flags)
++openat;int;(int dir_fd, const char *pathname, int flags, ...)
+ #endif /* HAVE_OPENAT */
+ #ifdef HAVE_RENAMEAT
+ renameat;int;(int olddir_fd, const char *oldpath, int newdir_fd, const char *newpath);(olddir_fd, oldpath, newdir_fd, newpath)
+--
+2.1.2
+
diff --git a/data/fastjar/_metadata/in.1443.00 b/data/fastjar/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/fastjar/_metadata/in.1443.00
diff --git a/data/fastjar/_metadata/maintainer b/data/fastjar/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/fastjar/_metadata/maintainer
+++ b/data/fastjar/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ffmpeg_/_metadata/in.1443.00 b/data/ffmpeg_/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ffmpeg_/_metadata/in.1443.00
diff --git a/data/ffmpeg_/_metadata/maintainer b/data/ffmpeg_/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ffmpeg_/_metadata/maintainer
+++ b/data/ffmpeg_/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ffmpeg_/armv5.diff b/data/ffmpeg_/armv5.diff
deleted file mode 100644
index 87895ba33..000000000
--- a/data/ffmpeg_/armv5.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru ffmpeg-export-2008-05-20/libavcodec/armv4l/mpegvideo_armv5te.c ffmpeg-export-2008-05-20+iPhone/libavcodec/armv4l/mpegvideo_armv5te.c
---- ffmpeg-export-2008-05-20/libavcodec/armv4l/mpegvideo_armv5te.c 2008-05-09 11:56:36.000000000 +0000
-+++ ffmpeg-export-2008-05-20+iPhone/libavcodec/armv4l/mpegvideo_armv5te.c 2008-05-21 08:43:52.000000000 +0000
-@@ -201,7 +201,7 @@
- void MPV_common_init_armv5te(MpegEncContext *s)
- {
- #ifdef HAVE_DCT_UNQUANTIZE_H263_ARMV5TE_OPTIMIZED
-- s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te;
-+ //s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te;
- s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_armv5te;
- #endif
- }
diff --git a/data/ffmpeg_/assembler.diff b/data/ffmpeg_/assembler.diff
deleted file mode 100644
index 83e63a837..000000000
--- a/data/ffmpeg_/assembler.diff
+++ /dev/null
@@ -1,538 +0,0 @@
-diff -ru ffmpeg-export-2008-02-26/libavcodec/armv4l/dsputil_arm_s.S ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/dsputil_arm_s.S
---- ffmpeg-export-2008-02-26/libavcodec/armv4l/dsputil_arm_s.S 2007-09-05 11:05:33.000000000 +0000
-+++ ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/dsputil_arm_s.S 2008-05-20 09:05:01.000000000 +0000
-@@ -72,8 +72,8 @@
-
- @ ----------------------------------------------------------------
- .align 8
-- .global put_pixels16_arm
--put_pixels16_arm:
-+ .global _put_pixels16_arm
-+_put_pixels16_arm:
- @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
- @ block = word aligned, pixles = unaligned
- pld [r1]
-@@ -134,8 +134,8 @@
-
- @ ----------------------------------------------------------------
- .align 8
-- .global put_pixels8_arm
--put_pixels8_arm:
-+ .global _put_pixels8_arm
-+_put_pixels8_arm:
- @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
- @ block = word aligned, pixles = unaligned
- pld [r1]
-@@ -196,8 +196,8 @@
-
- @ ----------------------------------------------------------------
- .align 8
-- .global put_pixels8_x2_arm
--put_pixels8_x2_arm:
-+ .global _put_pixels8_x2_arm
-+_put_pixels8_x2_arm:
- @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
- @ block = word aligned, pixles = unaligned
- pld [r1]
-@@ -265,8 +265,8 @@
- .word 4b
-
- .align 8
-- .global put_no_rnd_pixels8_x2_arm
--put_no_rnd_pixels8_x2_arm:
-+ .global _put_no_rnd_pixels8_x2_arm
-+_put_no_rnd_pixels8_x2_arm:
- @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
- @ block = word aligned, pixles = unaligned
- pld [r1]
-@@ -336,8 +336,8 @@
-
- @ ----------------------------------------------------------------
- .align 8
-- .global put_pixels8_y2_arm
--put_pixels8_y2_arm:
-+ .global _put_pixels8_y2_arm
-+_put_pixels8_y2_arm:
- @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
- @ block = word aligned, pixles = unaligned
- pld [r1]
-@@ -445,8 +445,8 @@
- .word 4b
-
- .align 8
-- .global put_no_rnd_pixels8_y2_arm
--put_no_rnd_pixels8_y2_arm:
-+ .global _put_no_rnd_pixels8_y2_arm
-+_put_no_rnd_pixels8_y2_arm:
- @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
- @ block = word aligned, pixles = unaligned
- pld [r1]
-@@ -618,8 +618,8 @@
- .endm
-
- .align 8
-- .global put_pixels8_xy2_arm
--put_pixels8_xy2_arm:
-+ .global _put_pixels8_xy2_arm
-+_put_pixels8_xy2_arm:
- @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
- @ block = word aligned, pixles = unaligned
- pld [r1]
-@@ -654,8 +654,8 @@
- .word 0x0F0F0F0F
-
- .align 8
-- .global put_no_rnd_pixels8_xy2_arm
--put_no_rnd_pixels8_xy2_arm:
-+ .global _put_no_rnd_pixels8_xy2_arm
-+_put_no_rnd_pixels8_xy2_arm:
- @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
- @ block = word aligned, pixles = unaligned
- pld [r1]
-diff -ru ffmpeg-export-2008-02-26/libavcodec/armv4l/jrevdct_arm.S ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/jrevdct_arm.S
---- ffmpeg-export-2008-02-26/libavcodec/armv4l/jrevdct_arm.S 2005-12-22 01:10:11.000000000 +0000
-+++ ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/jrevdct_arm.S 2008-05-20 09:03:43.000000000 +0000
-@@ -54,8 +54,8 @@
- .text
- .align
-
-- .global j_rev_dct_ARM
--j_rev_dct_ARM:
-+ .global _j_rev_dct_ARM
-+_j_rev_dct_ARM:
- stmdb sp!, { r4 - r12, lr } @ all callee saved regs
-
- sub sp, sp, #4 @ reserve some space on the stack
-diff -ru ffmpeg-export-2008-02-26/libavcodec/armv4l/simple_idct_arm.S ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/simple_idct_arm.S
---- ffmpeg-export-2008-02-26/libavcodec/armv4l/simple_idct_arm.S 2007-12-02 15:43:08.000000000 +0000
-+++ ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/simple_idct_arm.S 2008-05-20 09:03:13.000000000 +0000
-@@ -54,9 +54,9 @@
-
- .text
- .align
-- .global simple_idct_ARM
-+ .global _simple_idct_ARM
-
--simple_idct_ARM:
-+_simple_idct_ARM:
- @@ void simple_idct_ARM(int16_t *block)
- @@ save stack for reg needed (take all of them),
- @@ R0-R3 are scratch regs, so no need to save them, but R0 contains the pointer to block
-diff -ru ffmpeg-export-2008-02-26/libavcodec/armv4l/simple_idct_armv5te.S ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/simple_idct_armv5te.S
---- ffmpeg-export-2008-02-26/libavcodec/armv4l/simple_idct_armv5te.S 2007-07-05 20:08:51.000000000 +0000
-+++ ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/simple_idct_armv5te.S 2008-05-20 09:02:30.000000000 +0000
-@@ -42,9 +42,9 @@
- w57: .long W57
-
- .align
-- .type idct_row_armv5te, %function
-- .func idct_row_armv5te
--idct_row_armv5te:
-+ @.type idct_row_armv5te, %function
-+ @.func idct_row_armv5te
-+_idct_row_armv5te:
- str lr, [sp, #-4]!
-
- ldrd v1, [a1, #8]
-@@ -148,7 +148,7 @@
- strd a3, [a1, #8]
-
- ldr pc, [sp], #4
-- .endfunc
-+ @.endfunc
-
- .macro idct_col
- ldr a4, [a1] /* a4 = col[1:0] */
-@@ -263,9 +263,9 @@
- .endm
-
- .align
-- .type idct_col_armv5te, %function
-- .func idct_col_armv5te
--idct_col_armv5te:
-+ @.type idct_col_armv5te, %function
-+ @.func idct_col_armv5te
-+_idct_col_armv5te:
- str lr, [sp, #-4]!
-
- idct_col
-@@ -335,12 +335,12 @@
- str a2, [a1, #(16*4)]
-
- ldr pc, [sp], #4
-- .endfunc
-+ @.endfunc
-
- .align
-- .type idct_col_put_armv5te, %function
-- .func idct_col_put_armv5te
--idct_col_put_armv5te:
-+ @.type idct_col_put_armv5te, %function
-+ @.func idct_col_put_armv5te
-+_idct_col_put_armv5te:
- str lr, [sp, #-4]!
-
- idct_col
-@@ -455,12 +455,12 @@
- strh a2, [v2, -lr]
-
- ldr pc, [sp], #4
-- .endfunc
-+ @.endfunc
-
- .align
-- .type idct_col_add_armv5te, %function
-- .func idct_col_add_armv5te
--idct_col_add_armv5te:
-+ @.type idct_col_add_armv5te, %function
-+ @.func idct_col_add_armv5te
-+_idct_col_add_armv5te:
- str lr, [sp, #-4]!
-
- idct_col
-@@ -608,118 +608,118 @@
- strh a2, [v2]
-
- ldr pc, [sp], #4
-- .endfunc
-+ @.endfunc
-
- .align
-- .global simple_idct_armv5te
-- .type simple_idct_armv5te, %function
-- .func simple_idct_armv5te
--simple_idct_armv5te:
-+ .global _simple_idct_armv5te
-+ @.type simple_idct_armv5te, %function
-+ @.func simple_idct_armv5te
-+_simple_idct_armv5te:
- stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr}
-
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
-
- sub a1, a1, #(16*7)
-
-- bl idct_col_armv5te
-+ bl _idct_col_armv5te
- add a1, a1, #4
-- bl idct_col_armv5te
-+ bl _idct_col_armv5te
- add a1, a1, #4
-- bl idct_col_armv5te
-+ bl _idct_col_armv5te
- add a1, a1, #4
-- bl idct_col_armv5te
-+ bl _idct_col_armv5te
-
- ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-- .endfunc
-+ @.endfunc
-
- .align
-- .global simple_idct_add_armv5te
-- .type simple_idct_add_armv5te, %function
-- .func simple_idct_add_armv5te
--simple_idct_add_armv5te:
-+ .global _simple_idct_add_armv5te
-+ @.type simple_idct_add_armv5te, %function
-+ @.func simple_idct_add_armv5te
-+_simple_idct_add_armv5te:
- stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
-
- mov a1, a3
-
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
-
- sub a1, a1, #(16*7)
-
-- bl idct_col_add_armv5te
-+ bl _idct_col_add_armv5te
- add a1, a1, #4
-- bl idct_col_add_armv5te
-+ bl _idct_col_add_armv5te
- add a1, a1, #4
-- bl idct_col_add_armv5te
-+ bl _idct_col_add_armv5te
- add a1, a1, #4
-- bl idct_col_add_armv5te
-+ bl _idct_col_add_armv5te
-
- add sp, sp, #8
- ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-- .endfunc
-+ @.endfunc
-
- .align
-- .global simple_idct_put_armv5te
-- .type simple_idct_put_armv5te, %function
-- .func simple_idct_put_armv5te
--simple_idct_put_armv5te:
-+ .global _simple_idct_put_armv5te
-+ @.type simple_idct_put_armv5te, %function
-+ @.func simple_idct_put_armv5te
-+_simple_idct_put_armv5te:
- stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
-
- mov a1, a3
-
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
- add a1, a1, #16
-- bl idct_row_armv5te
-+ bl _idct_row_armv5te
-
- sub a1, a1, #(16*7)
-
-- bl idct_col_put_armv5te
-+ bl _idct_col_put_armv5te
- add a1, a1, #4
-- bl idct_col_put_armv5te
-+ bl _idct_col_put_armv5te
- add a1, a1, #4
-- bl idct_col_put_armv5te
-+ bl _idct_col_put_armv5te
- add a1, a1, #4
-- bl idct_col_put_armv5te
-+ bl _idct_col_put_armv5te
-
- add sp, sp, #8
- ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-- .endfunc
-+ @.endfunc
-diff -ru ffmpeg-export-2008-02-26/libavcodec/armv4l/simple_idct_armv6.S ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/simple_idct_armv6.S
---- ffmpeg-export-2008-02-26/libavcodec/armv4l/simple_idct_armv6.S 2007-07-05 20:08:51.000000000 +0000
-+++ ffmpeg-export-2008-02-26+iPhone/libavcodec/armv4l/simple_idct_armv6.S 2008-05-20 09:01:50.000000000 +0000
-@@ -191,9 +191,9 @@
- a2 = dest
- */
- .align
-- .type idct_row_armv6, %function
-- .func idct_row_armv6
--idct_row_armv6:
-+ @.type idct_row_armv6, %function
-+ @.func idct_row_armv6
-+_idct_row_armv6:
- str lr, [sp, #-4]!
-
- ldr lr, [a1, #12] /* lr = row[7,5] */
-@@ -238,7 +238,7 @@
- strh a3, [a2, #(16*5)]
- strh a3, [a2, #(16*7)]
- ldr pc, [sp], #4
-- .endfunc
-+ @.endfunc
-
- /*
- Compute IDCT of single column, read as row.
-@@ -246,9 +246,9 @@
- a2 = dest
- */
- .align
-- .type idct_col_armv6, %function
-- .func idct_col_armv6
--idct_col_armv6:
-+ @.type idct_col_armv6, %function
-+ @.func idct_col_armv6
-+_idct_col_armv6:
- stmfd sp!, {a2, lr}
-
- ldr a3, [a1] /* a3 = row[2,0] */
-@@ -268,7 +268,7 @@
- strh v5, [a2, #(16*7)]
-
- ldr pc, [sp], #4
-- .endfunc
-+ @.endfunc
-
- /*
- Compute IDCT of single column, read as row, store saturated 8-bit.
-@@ -277,9 +277,9 @@
- a3 = line size
- */
- .align
-- .type idct_col_put_armv6, %function
-- .func idct_col_put_armv6
--idct_col_put_armv6:
-+ @.type idct_col_put_armv6, %function
-+ @.func idct_col_put_armv6
-+_idct_col_put_armv6:
- stmfd sp!, {a2, a3, lr}
-
- ldr a3, [a1] /* a3 = row[2,0] */
-@@ -301,7 +301,7 @@
- sub a2, a2, a3, lsl #3
-
- ldr pc, [sp], #4
-- .endfunc
-+ @.endfunc
-
- /*
- Compute IDCT of single column, read as row, add/store saturated 8-bit.
-@@ -310,9 +310,9 @@
- a3 = line size
- */
- .align
-- .type idct_col_add_armv6, %function
-- .func idct_col_add_armv6
--idct_col_add_armv6:
-+ @.type idct_col_add_armv6, %function
-+ @.func idct_col_add_armv6
-+_idct_col_add_armv6:
- stmfd sp!, {a2, a3, lr}
-
- ldr a3, [a1] /* a3 = row[2,0] */
-@@ -359,7 +359,7 @@
- sub a2, a2, a3, lsl #3
-
- ldr pc, [sp], #4
-- .endfunc
-+ @.endfunc
-
- /*
- Compute 8 IDCT row transforms.
-@@ -394,62 +394,62 @@
- .endm
-
- .align
-- .global ff_simple_idct_armv6
-- .type ff_simple_idct_armv6, %function
-- .func ff_simple_idct_armv6
-+ .global _ff_simple_idct_armv6
-+ @.type ff_simple_idct_armv6, %function
-+ @.func ff_simple_idct_armv6
- /* void ff_simple_idct_armv6(DCTELEM *data); */
--ff_simple_idct_armv6:
-+_ff_simple_idct_armv6:
- stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr}
- sub sp, sp, #128
-
- mov a2, sp
-- idct_rows idct_row_armv6, 2
-+ idct_rows _idct_row_armv6, 2
- mov a2, a1
- mov a1, sp
-- idct_rows idct_col_armv6, 2
-+ idct_rows _idct_col_armv6, 2
-
- add sp, sp, #128
- ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-- .endfunc
-+ @.endfunc
-
- .align
-- .global ff_simple_idct_add_armv6
-- .type ff_simple_idct_add_armv6, %function
-- .func ff_simple_idct_add_armv6
-+ .global _ff_simple_idct_add_armv6
-+ @.type ff_simple_idct_add_armv6, %function
-+ @.func ff_simple_idct_add_armv6
- /* ff_simple_idct_add_armv6(uint8_t *dest, int line_size, DCTELEM *data); */
--ff_simple_idct_add_armv6:
-+_ff_simple_idct_add_armv6:
- stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
- sub sp, sp, #128
-
- mov a1, a3
- mov a2, sp
-- idct_rows idct_row_armv6, 2
-+ idct_rows _idct_row_armv6, 2
- mov a1, sp
- ldr a2, [sp, #128]
- ldr a3, [sp, #(128+4)]
-- idct_rows idct_col_add_armv6, 1
-+ idct_rows _idct_col_add_armv6, 1
-
- add sp, sp, #(128+8)
- ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-- .endfunc
-+ @.endfunc
-
- .align
-- .global ff_simple_idct_put_armv6
-- .type ff_simple_idct_put_armv6, %function
-- .func ff_simple_idct_put_armv6
-+ .global _ff_simple_idct_put_armv6
-+ @.type ff_simple_idct_put_armv6, %function
-+ @.func ff_simple_idct_put_armv6
- /* ff_simple_idct_put_armv6(uint8_t *dest, int line_size, DCTELEM *data); */
--ff_simple_idct_put_armv6:
-+_ff_simple_idct_put_armv6:
- stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
- sub sp, sp, #128
-
- mov a1, a3
- mov a2, sp
-- idct_rows idct_row_armv6, 2
-+ idct_rows _idct_row_armv6, 2
- mov a1, sp
- ldr a2, [sp, #128]
- ldr a3, [sp, #(128+4)]
-- idct_rows idct_col_put_armv6, 1
-+ idct_rows _idct_col_put_armv6, 1
-
- add sp, sp, #(128+8)
- ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-- .endfunc
-+ @.endfunc
diff --git a/data/ffmpeg_/ffmpeg-4.0.2.tar.gz b/data/ffmpeg_/ffmpeg-4.0.2.tar.gz
new file mode 100644
index 000000000..6deabe048
--- /dev/null
+++ b/data/ffmpeg_/ffmpeg-4.0.2.tar.gz
Binary files differ
diff --git a/data/ffmpeg_/ffmpeg-export-snapshot.tar.bz2 b/data/ffmpeg_/ffmpeg-export-snapshot.tar.bz2
deleted file mode 100644
index 56cf50555..000000000
--- a/data/ffmpeg_/ffmpeg-export-snapshot.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/ffmpeg_/make.sh b/data/ffmpeg_/make.sh
index f16f6f208..1760afb65 100644
--- a/data/ffmpeg_/make.sh
+++ b/data/ffmpeg_/make.sh
@@ -1,13 +1,12 @@
pkg:setup
-./configure \
+ARCH=$(echo ${PKG_TARG} | sed -e s/'-.*'//)
+./configure --arch=${ARCH} \
--prefix=/usr --enable-gpl --enable-postproc --enable-swscale \
- --disable-vhook --enable-avfilter --enable-avfilter-lavf \
+ --enable-avfilter \
--enable-cross-compile --cross-prefix=${PKG_TARG}- --target-os=darwin \
- --arch=arm --disable-iwmmxt --enable-armv5te --enable-armv6 \
--disable-static --enable-shared --disable-debug --disable-stripping \
- --enable-libfaac \
- --enable-libfaad \
+ --enable-libfdk-aac \
--enable-libmp3lame \
- --enable-libvorbis
+ --enable-libvorbis --enable-nonfree
make
pkg:install
diff --git a/data/ffmpeg_/mjpega.diff b/data/ffmpeg_/mjpega.diff
deleted file mode 100644
index c82baa8d3..000000000
--- a/data/ffmpeg_/mjpega.diff
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -ru ffmpeg-export-2008-05-20/libavcodec/mjpega_dump_header_bsf.c ffmpeg-export-2008-05-20+iPhone/libavcodec/mjpega_dump_header_bsf.c
---- ffmpeg-export-2008-05-20/libavcodec/mjpega_dump_header_bsf.c 2007-05-19 00:53:41.000000000 +0000
-+++ ffmpeg-export-2008-05-20+iPhone/libavcodec/mjpega_dump_header_bsf.c 2008-06-02 02:56:08.000000000 +0000
-@@ -56,15 +56,24 @@
- bytestream_put_be32(&poutbufp, buf_size + 44); /* pad field size */
- bytestream_put_be32(&poutbufp, 0); /* next ptr */
-
-+ uint32_t dqt = 0, dht = 0, sof0 = 0;
-+
- for (i = 0; i < buf_size - 1; i++) {
- if (buf[i] == 0xff) {
- switch (buf[i + 1]) {
-- case DQT: /* quant off */
-- case DHT: /* huff off */
-- case SOF0: /* image off */
-- bytestream_put_be32(&poutbufp, i + 46);
-+ case DQT:
-+ dqt = i + 46;
-+ break;
-+ case DHT:
-+ dht = i + 46;
-+ break;
-+ case SOF0:
-+ sof0 = i + 46;
- break;
- case SOS:
-+ bytestream_put_be32(&poutbufp, dqt); /* quant off */
-+ bytestream_put_be32(&poutbufp, dht); /* huff off */
-+ bytestream_put_be32(&poutbufp, sof0); /* image off */
- bytestream_put_be32(&poutbufp, i + 46); /* scan off */
- bytestream_put_be32(&poutbufp, i + 46 + AV_RB16(buf + i + 2)); /* data off */
- bytestream_put_buffer(&poutbufp, buf + 2, buf_size - 2); /* skip already written SOI */
diff --git a/data/ffmpeg_/r7.diff b/data/ffmpeg_/r7.diff
deleted file mode 100644
index 3b1af70fb..000000000
--- a/data/ffmpeg_/r7.diff
+++ /dev/null
@@ -1,48 +0,0 @@
-diff -ru ffmpeg-export-2008-05-20/libavcodec/armv4l/float_arm_vfp.c ffmpeg-export-2008-05-20+iPhone/libavcodec/armv4l/float_arm_vfp.c
---- ffmpeg-export-2008-05-20/libavcodec/armv4l/float_arm_vfp.c 2008-05-11 20:06:03.000000000 +0000
-+++ ffmpeg-export-2008-05-20+iPhone/libavcodec/armv4l/float_arm_vfp.c 2008-05-21 00:44:04.000000000 +0000
-@@ -141,6 +141,13 @@
- }
-
- #ifdef HAVE_ARMV6
-+
-+#ifdef __APPLE__
-+#define r7 "r9"
-+#else
-+#define r7 "r7"
-+#endif
-+
- /**
- * ARM VFP optimized float to int16 conversion.
- * Assume that len is a positive number and is multiple of 8, destination
-@@ -163,7 +170,7 @@
- "subs %[len], %[len], #8\n\t"
- "fmrrs r3, r4, {s0, s1}\n\t"
- "fmrrs r5, r6, {s2, s3}\n\t"
-- "fmrrs r7, r8, {s4, s5}\n\t"
-+ "fmrrs "r7", r8, {s4, s5}\n\t"
- "fmrrs ip, lr, {s6, s7}\n\t"
- "fldmiasgt %[src]!, {s16-s23}\n\t"
- "ssat r4, #16, r4\n\t"
-@@ -181,10 +188,10 @@
- "ftosisgt s6, s22\n\t"
- "ftosisgt s7, s23\n\t"
- "ssat r8, #16, r8\n\t"
-- "ssat r7, #16, r7\n\t"
-+ "ssat "r7", #16, "r7"\n\t"
- "ssat lr, #16, lr\n\t"
- "ssat ip, #16, ip\n\t"
-- "pkhbt r5, r7, r8, lsl #16\n\t"
-+ "pkhbt r5, "r7", r8, lsl #16\n\t"
- "pkhbt r6, ip, lr, lsl #16\n\t"
- "stmia %[dst]!, {r3-r6}\n\t"
- "bgt 1b\n\t"
-@@ -193,7 +200,7 @@
- :
- : "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
- "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
-- "r3", "r4", "r5", "r6", "r7", "r8", "ip", "lr",
-+ "r3", "r4", "r5", "r6", r7, "r8", "ip", "lr",
- "cc", "memory");
- }
- #endif
diff --git a/data/ffmpeg_/timestamp.diff b/data/ffmpeg_/timestamp.diff
deleted file mode 100644
index 266e7d614..000000000
--- a/data/ffmpeg_/timestamp.diff
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -ru ffmpeg-export-2008-05-20/cmdutils.c ffmpeg-export-2008-05-20+iPhone/cmdutils.c
---- ffmpeg-export-2008-05-20/cmdutils.c 2008-05-09 11:56:36.000000000 +0000
-+++ ffmpeg-export-2008-05-20+iPhone/cmdutils.c 2008-06-19 04:35:45.000000000 +0000
-@@ -206,7 +206,6 @@
- #if ENABLE_AVFILTER
- fprintf(stderr, " libavfilter version: " AV_STRINGIFY(LIBAVFILTER_VERSION) "\n");
- #endif
-- fprintf(stderr, " built on " __DATE__ " " __TIME__);
- #ifdef __GNUC__
- fprintf(stderr, ", gcc: " __VERSION__ "\n");
- #else
diff --git a/data/ffmpeg_/version.diff b/data/ffmpeg_/version.diff
deleted file mode 100644
index 4670687d1..000000000
--- a/data/ffmpeg_/version.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru ffmpeg-export-2008-05-20/configure ffmpeg-export-2008-05-20+iPhone/configure
---- ffmpeg-export-2008-05-20/configure 2008-05-16 16:12:55.000000000 +0000
-+++ ffmpeg-export-2008-05-20+iPhone/configure 2008-09-22 08:28:33.000000000 +0000
-@@ -1212,7 +1212,7 @@
- ;;
- darwin)
- disable need_memalign
-- SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
-+ SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME) -Wl,-read_only_relocs,suppress'
- VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
- strip="strip -x"
- FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
diff --git a/data/file-cmds/_metadata/in.1443.00 b/data/file-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/file-cmds/_metadata/in.1443.00
diff --git a/data/file-cmds/_metadata/maintainer b/data/file-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/file-cmds/_metadata/maintainer
+++ b/data/file-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/file/_metadata/in.1443.00 b/data/file/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/file/_metadata/in.1443.00
diff --git a/data/file/_metadata/maintainer b/data/file/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/file/_metadata/maintainer
+++ b/data/file/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/file/_metadata/version b/data/file/_metadata/version
index 1f49ed120..71cfb23f5 100644
--- a/data/file/_metadata/version
+++ b/data/file/_metadata/version
@@ -1 +1 @@
-4.23
+5.35
diff --git a/data/file/file-4.23.tar.gz b/data/file/file-4.23.tar.gz
deleted file mode 100644
index cc1a22818..000000000
--- a/data/file/file-4.23.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/file/file-5.35.tar.gz b/data/file/file-5.35.tar.gz
new file mode 100644
index 000000000..4c0ca01a6
--- /dev/null
+++ b/data/file/file-5.35.tar.gz
Binary files differ
diff --git a/data/findutils/_metadata/in.1443.00 b/data/findutils/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/findutils/_metadata/in.1443.00
diff --git a/data/findutils/_metadata/maintainer b/data/findutils/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/findutils/_metadata/maintainer
+++ b/data/findutils/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/findutils/_metadata/version b/data/findutils/_metadata/version
index 8ae57005f..6016e8add 100644
--- a/data/findutils/_metadata/version
+++ b/data/findutils/_metadata/version
@@ -1 +1 @@
-4.2.33
+4.6.0
diff --git a/data/findutils/findutils-4.2.33.tar.gz b/data/findutils/findutils-4.2.33.tar.gz
deleted file mode 100644
index 2e13d7566..000000000
--- a/data/findutils/findutils-4.2.33.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/findutils/findutils-4.6.0.tar.gz b/data/findutils/findutils-4.6.0.tar.gz
new file mode 100644
index 000000000..5d4e185cd
--- /dev/null
+++ b/data/findutils/findutils-4.6.0.tar.gz
Binary files differ
diff --git a/data/firefly/_metadata/in.1443.00 b/data/firefly/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/firefly/_metadata/in.1443.00
diff --git a/data/firefly/_metadata/maintainer b/data/firefly/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/firefly/_metadata/maintainer
+++ b/data/firefly/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/flac/_metadata/in.1443.00 b/data/flac/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/flac/_metadata/in.1443.00
diff --git a/data/flac/_metadata/maintainer b/data/flac/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/flac/_metadata/maintainer
+++ b/data/flac/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/flac/_metadata/version b/data/flac/_metadata/version
index 6085e9465..1892b9267 100644
--- a/data/flac/_metadata/version
+++ b/data/flac/_metadata/version
@@ -1 +1 @@
-1.2.1
+1.3.2
diff --git a/data/flac/flac-1.2.1.tar.gz b/data/flac/flac-1.2.1.tar.gz
deleted file mode 100644
index 80d26fdcb..000000000
--- a/data/flac/flac-1.2.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/flac/flac-1.3.2.tar.xz b/data/flac/flac-1.3.2.tar.xz
new file mode 100644
index 000000000..5b9c69afd
--- /dev/null
+++ b/data/flac/flac-1.3.2.tar.xz
Binary files differ
diff --git a/data/flac/make.sh b/data/flac/make.sh
index 87c264adb..e3c706eb1 100644
--- a/data/flac/make.sh
+++ b/data/flac/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure --with-ogg="$(PKG_DEST_ ogg)"
-make
+make -j8
pkg:install
diff --git a/data/flex/_metadata/in.1443.00 b/data/flex/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/flex/_metadata/in.1443.00
diff --git a/data/flex/_metadata/maintainer b/data/flex/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/flex/_metadata/maintainer
+++ b/data/flex/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/flex/_metadata/version b/data/flex/_metadata/version
index 908153bec..2714f5313 100644
--- a/data/flex/_metadata/version
+++ b/data/flex/_metadata/version
@@ -1 +1 @@
-2.5.35
+2.6.4
diff --git a/data/flex/flex-2.5.35.tar.bz2 b/data/flex/flex-2.5.35.tar.bz2
deleted file mode 100644
index 46d2c5d39..000000000
--- a/data/flex/flex-2.5.35.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/flex/flex-2.6.4.tar.xz b/data/flex/flex-2.6.4.tar.xz
new file mode 100644
index 000000000..1c452e512
--- /dev/null
+++ b/data/flex/flex-2.6.4.tar.xz
Binary files differ
diff --git a/data/flex/make.sh b/data/flex/make.sh
index f4139bd6a..67a993dee 100644
--- a/data/flex/make.sh
+++ b/data/flex/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes
-pkg:make
+make -j8
pkg:install
diff --git a/data/flite/_metadata/in.1443.00 b/data/flite/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/flite/_metadata/in.1443.00
diff --git a/data/flite/_metadata/maintainer b/data/flite/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/flite/_metadata/maintainer
+++ b/data/flite/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/freecoder.org/_metadata/description b/data/freecoder.org/_metadata/description
deleted file mode 100644
index 488b810e5..000000000
--- a/data/freecoder.org/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-iCosta Master Repository
diff --git a/data/freecoder.org/_metadata/license b/data/freecoder.org/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/freecoder.org/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/freecoder.org/_metadata/maintainer b/data/freecoder.org/_metadata/maintainer
deleted file mode 100644
index 75d3a4c10..000000000
--- a/data/freecoder.org/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Pin Xue <pinxue@gmail.com>
diff --git a/data/freecoder.org/_metadata/name b/data/freecoder.org/_metadata/name
deleted file mode 100644
index 7e13a8f86..000000000
--- a/data/freecoder.org/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-FreeCoder's Source
diff --git a/data/freecoder.org/_metadata/role b/data/freecoder.org/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/freecoder.org/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/freecoder.org/_metadata/section b/data/freecoder.org/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/freecoder.org/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/freecoder.org/_metadata/tags b/data/freecoder.org/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/freecoder.org/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/freecoder.org/_metadata/version b/data/freecoder.org/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/freecoder.org/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/freecoder.org/freecoder.org.list b/data/freecoder.org/freecoder.org.list
deleted file mode 100644
index 26b818e34..000000000
--- a/data/freecoder.org/freecoder.org.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://iphone.freecoder.org/apt/ ./
diff --git a/data/freecoder.org/make.sh b/data/freecoder.org/make.sh
deleted file mode 100644
index 7cf6336a2..000000000
--- a/data/freecoder.org/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/freecoder.org.list /etc/apt/sources.list.d
diff --git a/data/gawk/_metadata/in.1443.00 b/data/gawk/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gawk/_metadata/in.1443.00
diff --git a/data/gawk/_metadata/maintainer b/data/gawk/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gawk/_metadata/maintainer
+++ b/data/gawk/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gawk/_metadata/version b/data/gawk/_metadata/version
index 9cec7165a..fae6e3d04 100644
--- a/data/gawk/_metadata/version
+++ b/data/gawk/_metadata/version
@@ -1 +1 @@
-3.1.6
+4.2.1
diff --git a/data/gawk/dynamic.diff b/data/gawk/dynamic.diff
deleted file mode 100644
index 322b9acec..000000000
--- a/data/gawk/dynamic.diff
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -r -u gawk-3.1.6/configure.ac gawk-3.1.6+iPhone/configure.ac
---- gawk-3.1.6/configure.ac 2007-10-22 06:51:06.000000000 +0000
-+++ gawk-3.1.6+iPhone/configure.ac 2007-12-27 12:18:29.000000000 +0000
-@@ -285,15 +285,6 @@
- dnl This is known to be very primitive
- AC_CHECK_HEADER(dlfcn.h,
- [AC_DEFINE([DYNAMIC], 1, [dynamic loading is possible])
-- if test "$GCC" = yes
-- then
-- # Add others here as appropriate,
-- # one day use GNU libtool.
-- if uname | $EGREP -i 'linux|freebsd|cygwin' > /dev/null
-- then
-- LDFLAGS="$LDFLAGS -export-dynamic"
-- fi
-- fi
-
- # Check this separately. Some systems have dlopen
- # in libc. Notably freebsd and cygwin.
diff --git a/data/gawk/gawk-3.1.6.tar.gz b/data/gawk/gawk-3.1.6.tar.gz
deleted file mode 100644
index 36c324543..000000000
--- a/data/gawk/gawk-3.1.6.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/gawk/gawk-4.2.1.tar.xz b/data/gawk/gawk-4.2.1.tar.xz
new file mode 100644
index 000000000..156da1ea6
--- /dev/null
+++ b/data/gawk/gawk-4.2.1.tar.xz
Binary files differ
diff --git a/data/gcrypt/_metadata/in.1443.00 b/data/gcrypt/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gcrypt/_metadata/in.1443.00
diff --git a/data/gcrypt/_metadata/maintainer b/data/gcrypt/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gcrypt/_metadata/maintainer
+++ b/data/gcrypt/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gcrypt/_metadata/version b/data/gcrypt/_metadata/version
index 88c5fb891..a7ee35a3e 100644
--- a/data/gcrypt/_metadata/version
+++ b/data/gcrypt/_metadata/version
@@ -1 +1 @@
-1.4.0
+1.8.3
diff --git a/data/gcrypt/armasm.diff b/data/gcrypt/armasm.diff
deleted file mode 100644
index 662ee656b..000000000
--- a/data/gcrypt/armasm.diff
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -r -u libgcrypt-1.4.0/mpi/longlong.h libgcrypt-1.4.0+iPhone/mpi/longlong.h
---- libgcrypt-1.4.0/mpi/longlong.h 2005-07-29 13:31:17.000000000 +0000
-+++ libgcrypt-1.4.0+iPhone/mpi/longlong.h 2008-01-01 11:09:27.000000000 +0000
-@@ -225,8 +225,8 @@
- : "r0", "r1", "r2")
- #else
- #define umul_ppmm(xh, xl, a, b) \
-- __asm__ ("%@ Inlined umul_ppmm\n" \
-- "umull %r1, %r0, %r2, %r3" \
-+ __asm__ ("@ Inlined umul_ppmm\n" \
-+ "umull %1, %0, %2, %3" \
- : "=&r" ((USItype)(xh)), \
- "=r" ((USItype)(xl)) \
- : "r" ((USItype)(a)), \
diff --git a/data/gcrypt/asm.diff b/data/gcrypt/asm.diff
new file mode 100644
index 000000000..4d2cbffba
--- /dev/null
+++ b/data/gcrypt/asm.diff
@@ -0,0 +1,100 @@
+diff -ur libgcrypt-1.8.3/mpi/aarch64/mpih-add1.S libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-add1.S
+--- libgcrypt-1.8.3/mpi/aarch64/mpih-add1.S 2017-11-23 08:16:58.000000000 -1000
++++ libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-add1.S 2018-08-15 10:10:26.000000000 -1000
+@@ -33,9 +33,8 @@
+
+ .text
+
+-.globl _gcry_mpih_add_n
+-.type _gcry_mpih_add_n,%function
+-_gcry_mpih_add_n:
++.globl __gcry_mpih_add_n
++__gcry_mpih_add_n:
+ and x5, x3, #3;
+ adds xzr, xzr, xzr; /* clear carry flag */
+
+@@ -68,4 +67,3 @@
+ .Lend:
+ adc x0, xzr, xzr;
+ ret;
+-.size _gcry_mpih_add_n,.-_gcry_mpih_add_n;
+diff -ur libgcrypt-1.8.3/mpi/aarch64/mpih-mul1.S libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-mul1.S
+--- libgcrypt-1.8.3/mpi/aarch64/mpih-mul1.S 2017-11-23 08:16:58.000000000 -1000
++++ libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-mul1.S 2018-08-15 10:10:34.000000000 -1000
+@@ -33,9 +33,8 @@
+
+ .text
+
+-.globl _gcry_mpih_mul_1
+-.type _gcry_mpih_mul_1,%function
+-_gcry_mpih_mul_1:
++.globl __gcry_mpih_mul_1
++__gcry_mpih_mul_1:
+ and x5, x2, #3;
+ mov x4, xzr;
+
+@@ -93,4 +92,3 @@
+ .Lend:
+ mov x0, x4;
+ ret;
+-.size _gcry_mpih_mul_1,.-_gcry_mpih_mul_1;
+diff -ur libgcrypt-1.8.3/mpi/aarch64/mpih-mul2.S libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-mul2.S
+--- libgcrypt-1.8.3/mpi/aarch64/mpih-mul2.S 2017-11-23 08:16:58.000000000 -1000
++++ libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-mul2.S 2018-08-15 10:10:41.000000000 -1000
+@@ -33,9 +33,8 @@
+
+ .text
+
+-.globl _gcry_mpih_addmul_1
+-.type _gcry_mpih_addmul_1,%function
+-_gcry_mpih_addmul_1:
++.globl __gcry_mpih_addmul_1
++__gcry_mpih_addmul_1:
+ and x5, x2, #3;
+ mov x6, xzr;
+ mov x7, xzr;
+@@ -105,4 +104,3 @@
+ .Lend:
+ mov x0, x6;
+ ret;
+-.size _gcry_mpih_addmul_1,.-_gcry_mpih_addmul_1;
+diff -ur libgcrypt-1.8.3/mpi/aarch64/mpih-mul3.S libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-mul3.S
+--- libgcrypt-1.8.3/mpi/aarch64/mpih-mul3.S 2017-11-23 08:16:58.000000000 -1000
++++ libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-mul3.S 2018-08-15 10:10:49.000000000 -1000
+@@ -33,9 +33,8 @@
+
+ .text
+
+-.globl _gcry_mpih_submul_1
+-.type _gcry_mpih_submul_1,%function
+-_gcry_mpih_submul_1:
++.globl __gcry_mpih_submul_1
++__gcry_mpih_submul_1:
+ and x5, x2, #3;
+ mov x7, xzr;
+ cbz x5, .Large_loop;
+@@ -118,4 +117,3 @@
+ .Loop_end:
+ cinc x0, x7, cc;
+ ret;
+-.size _gcry_mpih_submul_1,.-_gcry_mpih_submul_1;
+diff -ur libgcrypt-1.8.3/mpi/aarch64/mpih-sub1.S libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-sub1.S
+--- libgcrypt-1.8.3/mpi/aarch64/mpih-sub1.S 2017-11-23 08:16:58.000000000 -1000
++++ libgcrypt-1.8.3+iPhone/mpi/aarch64/mpih-sub1.S 2018-08-15 10:10:52.000000000 -1000
+@@ -33,9 +33,8 @@
+
+ .text
+
+-.globl _gcry_mpih_sub_n
+-.type _gcry_mpih_sub_n,%function
+-_gcry_mpih_sub_n:
++.globl __gcry_mpih_sub_n
++__gcry_mpih_sub_n:
+ and x5, x3, #3;
+ subs xzr, xzr, xzr; /* prepare carry flag for sub */
+
+@@ -68,4 +67,3 @@
+ .Lend:
+ cset x0, cc;
+ ret;
+-.size _gcry_mpih_sub_n,.-_gcry_mpih_sub_n;
diff --git a/data/gnupg2/_metadata/gcrypt.dep b/data/gcrypt/gcrypt
index 0a21c7b07..0a21c7b07 120000
--- a/data/gnupg2/_metadata/gcrypt.dep
+++ b/data/gcrypt/gcrypt
diff --git a/data/gcrypt/libgcrypt-1.4.0.tar.gz b/data/gcrypt/libgcrypt-1.4.0.tar.gz
deleted file mode 100644
index 6f27010c3..000000000
--- a/data/gcrypt/libgcrypt-1.4.0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/gcrypt/libgcrypt-1.8.3.tar.bz2 b/data/gcrypt/libgcrypt-1.8.3.tar.bz2
new file mode 100644
index 000000000..469d97aac
--- /dev/null
+++ b/data/gcrypt/libgcrypt-1.8.3.tar.bz2
Binary files differ
diff --git a/data/gcrypt/make.sh b/data/gcrypt/make.sh
index 5686d8094..b14bd2624 100644
--- a/data/gcrypt/make.sh
+++ b/data/gcrypt/make.sh
@@ -1,5 +1,4 @@
pkg:setup
-pkg:autoconf
pkg:configure --with-gpg-error-prefix="$(PKG_DEST_ libgpg-error)/usr"
-make
+make -j8
pkg:install
diff --git a/data/gdata-objectivec-client/_metadata/in.1443.00 b/data/gdata-objectivec-client/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gdata-objectivec-client/_metadata/in.1443.00
diff --git a/data/gdata-objectivec-client/_metadata/maintainer b/data/gdata-objectivec-client/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gdata-objectivec-client/_metadata/maintainer
+++ b/data/gdata-objectivec-client/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gdb/_metadata/in.1443.00 b/data/gdb/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gdb/_metadata/in.1443.00
diff --git a/data/gdb/_metadata/maintainer b/data/gdb/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gdb/_metadata/maintainer
+++ b/data/gdb/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gdbm/_metadata/in.1443.00 b/data/gdbm/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gdbm/_metadata/in.1443.00
diff --git a/data/gdbm/_metadata/maintainer b/data/gdbm/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gdbm/_metadata/maintainer
+++ b/data/gdbm/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gettext/_metadata/in.1443.00 b/data/gettext/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gettext/_metadata/in.1443.00
diff --git a/data/gettext/_metadata/maintainer b/data/gettext/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gettext/_metadata/maintainer
+++ b/data/gettext/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gettext/_metadata/version b/data/gettext/_metadata/version
index 50653ad0a..158ef5780 100644
--- a/data/gettext/_metadata/version
+++ b/data/gettext/_metadata/version
@@ -1 +1 @@
-0.17
+0.19.8
diff --git a/data/gettext/equality.diff b/data/gettext/equality.diff
deleted file mode 100644
index 61d469a45..000000000
--- a/data/gettext/equality.diff
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -ru gettext-0.17/gettext-tools/libgettextpo/Makefile.in gettext-0.17+iPhone/gettext-tools/libgettextpo/Makefile.in
---- gettext-0.17/gettext-tools/libgettextpo/Makefile.in 2007-11-06 23:39:59.000000000 +0000
-+++ gettext-0.17+iPhone/gettext-tools/libgettextpo/Makefile.in 2008-01-09 13:05:02.000000000 +0000
-@@ -1408,6 +1408,7 @@
- esac; \
- done; \
- } 5>&1 \
-+ | grep -v = \
- | sed -e 's,.* ,,' | LC_ALL=C sort | LC_ALL=C uniq \
- | sed -e 's,^obstack_free$$,__obstack_free,' \
- | sed -e 's,^\(.*\)$$,#define \1 libgettextpo_\1,' > config.h-t && \
diff --git a/data/gettext/gettext-0.17.tar.gz b/data/gettext/gettext-0.17.tar.gz
deleted file mode 100644
index 050319b34..000000000
--- a/data/gettext/gettext-0.17.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/gettext/gettext-0.19.8.tar.xz b/data/gettext/gettext-0.19.8.tar.xz
new file mode 100644
index 000000000..e72175c7d
--- /dev/null
+++ b/data/gettext/gettext-0.19.8.tar.xz
Binary files differ
diff --git a/data/gettext/make.sh b/data/gettext/make.sh
index 47812a40f..a7c62f3cb 100644
--- a/data/gettext/make.sh
+++ b/data/gettext/make.sh
@@ -1,5 +1,5 @@
pkg:setup
pkg:configure --disable-java --without-libintl-prefix
-make
+make -j8
pkg:install
pkg: rm -rf /usr/share
diff --git a/data/gettext/regex.diff b/data/gettext/regex.diff
deleted file mode 100644
index 247f12201..000000000
--- a/data/gettext/regex.diff
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -ru gettext-0.17/gettext-tools/libgrep/regex.c gettext-0.17+iPhone/gettext-tools/libgrep/regex.c
---- gettext-0.17/gettext-tools/libgrep/regex.c 2007-10-07 19:37:37.000000000 +0000
-+++ gettext-0.17+iPhone/gettext-tools/libgrep/regex.c 2008-04-04 19:45:52.000000000 +0000
-@@ -45,13 +45,13 @@
- # include <wctype.h>
- # endif
-
--# ifdef _LIBC
--/* We have to keep the namespace clean. */
- # define regfree(preg) __regfree (preg)
- # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
- # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
- # define regerror(errcode, preg, errbuf, errbuf_size) \
- __regerror(errcode, preg, errbuf, errbuf_size)
-+# ifdef _LIBC
-+/* We have to keep the namespace clean. */
- # define re_set_registers(bu, re, nu, st, en) \
- __re_set_registers (bu, re, nu, st, en)
- # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
diff --git a/data/git/_metadata/expat.ver.iphoneos-arm b/data/git/_metadata/expat.ver.iphoneos-arm
new file mode 100644
index 000000000..8bbe6cf74
--- /dev/null
+++ b/data/git/_metadata/expat.ver.iphoneos-arm
@@ -0,0 +1 @@
+2.2
diff --git a/data/git/_metadata/in.1443.00 b/data/git/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/git/_metadata/in.1443.00
diff --git a/data/git/_metadata/in.550.58 b/data/git/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/git/_metadata/in.550.58
diff --git a/data/git/_metadata/libssl1.0.dep b/data/git/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/git/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/git/_metadata/maintainer b/data/git/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/git/_metadata/maintainer
+++ b/data/git/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/git/_metadata/openssl.dep b/data/git/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/git/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/git/_metadata/version b/data/git/_metadata/version
index dbe590065..7329e21c3 100644
--- a/data/git/_metadata/version
+++ b/data/git/_metadata/version
@@ -1 +1 @@
-2.8.1
+2.20.0
diff --git a/data/git/git-2.20.0.tar.xz b/data/git/git-2.20.0.tar.xz
new file mode 100644
index 000000000..c1f4046cb
--- /dev/null
+++ b/data/git/git-2.20.0.tar.xz
Binary files differ
diff --git a/data/git/git-2.8.1.tar.gz b/data/git/git-2.8.1.tar.gz
deleted file mode 100644
index c6dc9f33c..000000000
--- a/data/git/git-2.8.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/git/make.sh b/data/git/make.sh
index ea013a4c0..e5d40a2bc 100644
--- a/data/git/make.sh
+++ b/data/git/make.sh
@@ -1,6 +1,6 @@
pkg:setup
-export PATH=/apl/tel/path:$PATH
-pkg:configure ac_cv_c_c99_format=yes ac_cv_fread_reads_directories=no ac_cv_snprintf_returns_bogus=yes --without-tcltk
-make
-pkg:install NO_INSTALL_HARDLINKS=yes
+make configure
+pkg:configure ac_cv_c_c99_format=yes ac_cv_fread_reads_directories=no ac_cv_snprintf_returns_bogus=yes --without-tcltk CURL_CONFIG="$(PKG_DEST_ curl)/usr/bin/curl-config"
+make -j8 NO_DARWIN_PORTS=1 NO_FINK=1
+make -j8 install DESTDIR="${PKG_DEST}" NO_DARWIN_PORTS=1 NO_FINK=1 NO_INSTALL_HARDLINKS=yes
pkg: rm -f /usr/lib/perl/5.10.1/perllocal.pod
diff --git a/data/git/shebang.diff b/data/git/shebang.diff
new file mode 100644
index 000000000..1659a5ce4
--- /dev/null
+++ b/data/git/shebang.diff
@@ -0,0 +1,22 @@
+diff -ur git-2.18.0/run-command.c git-2.18.0+iPhone/run-command.c
+--- git-2.18.0/run-command.c 2018-06-21 07:00:06.000000000 -1000
++++ git-2.18.0+iPhone/run-command.c 2018-09-14 15:34:44.000000000 -1000
+@@ -814,9 +814,16 @@
+ */
+ execve(argv.argv[1], (char *const *) argv.argv + 1,
+ (char *const *) childenv);
+- if (errno == ENOEXEC)
+- execve(argv.argv[0], (char *const *) argv.argv,
++ if (errno == ENOEXEC || errno == EPERM) {
++ struct argv_array out = ARGV_ARRAY_INIT;
++ argv_array_push(&out, SHELL_PATH);
++ argv_array_push(&out, "-c");
++ argv_array_push(&out, "\"$@\"");
++ argv_array_push(&out, SHELL_PATH); // unused $0
++ argv_array_pushv(&out, cmd->argv);
++ execve(SHELL_PATH, (char *const *) out.argv,
+ (char *const *) childenv);
++ }
+
+ if (errno == ENOENT) {
+ if (cmd->silent_exec_failure)
diff --git a/data/glib/_metadata/in.1443.00 b/data/glib/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/glib/_metadata/in.1443.00
diff --git a/data/glib/_metadata/libffi.dep b/data/glib/_metadata/libffi.dep
new file mode 120000
index 000000000..da9d6c358
--- /dev/null
+++ b/data/glib/_metadata/libffi.dep
@@ -0,0 +1 @@
+../../libffi \ No newline at end of file
diff --git a/data/glib/_metadata/maintainer b/data/glib/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/glib/_metadata/maintainer
+++ b/data/glib/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/nmap/_metadata/pcre.dep b/data/glib/_metadata/pcre.dep
index f88da5e24..f88da5e24 120000
--- a/data/nmap/_metadata/pcre.dep
+++ b/data/glib/_metadata/pcre.dep
diff --git a/data/glib/glib-2.20.4.tar.bz2 b/data/glib/glib-2.20.4.tar.bz2
deleted file mode 100644
index ccd58fdb7..000000000
--- a/data/glib/glib-2.20.4.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/glib/glib-2.57.2.tar.xz b/data/glib/glib-2.57.2.tar.xz
new file mode 100644
index 000000000..dd586e7b7
--- /dev/null
+++ b/data/glib/glib-2.57.2.tar.xz
Binary files differ
diff --git a/data/glib/libiconv.diff b/data/glib/libiconv.diff
deleted file mode 100644
index d299b3293..000000000
--- a/data/glib/libiconv.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -ru glib-2.12.13/glib/gconvert.c glib-2.12.13+iPhone/glib/gconvert.c
---- glib-2.12.13/glib/gconvert.c 2007-07-16 18:57:12.000000000 +0000
-+++ glib-2.12.13+iPhone/glib/gconvert.c 2008-06-18 04:14:55.000000000 +0000
-@@ -41,13 +41,6 @@
-
- #include "glibintl.h"
-
--#if defined(USE_LIBICONV_GNU) && !defined (_LIBICONV_H)
--#error GNU libiconv in use but included iconv.h not from libiconv
--#endif
--#if !defined(USE_LIBICONV_GNU) && defined (_LIBICONV_H)
--#error GNU libiconv not in use but included iconv.h is from libiconv
--#endif
--
- #include "galias.h"
-
- GQuark
diff --git a/data/glib/make.sh b/data/glib/make.sh
index 3e4e753e7..966b3d22c 100644
--- a/data/glib/make.sh
+++ b/data/glib/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+NOCONFIGURE=1 ./autogen.sh
pkg:configure glib_cv_stack_grows=no glib_cv_uscore=yes ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes --with-libiconv=native
-make
+make -j8
pkg:install
diff --git a/data/gnupg/_metadata/conflicts b/data/gnupg/_metadata/conflicts
new file mode 100644
index 000000000..239772ed9
--- /dev/null
+++ b/data/gnupg/_metadata/conflicts
@@ -0,0 +1 @@
+gnupg2
diff --git a/data/gnupg/_metadata/description b/data/gnupg/_metadata/description
index c55bd894d..687f6a23c 100644
--- a/data/gnupg/_metadata/description
+++ b/data/gnupg/_metadata/description
@@ -1 +1 @@
-older encryption compatible with OpenPGP
+GNU privacy guard - a free PGP replacement
diff --git a/data/gnupg/_metadata/gcrypt.dep b/data/gnupg/_metadata/gcrypt.dep
new file mode 120000
index 000000000..0a21c7b07
--- /dev/null
+++ b/data/gnupg/_metadata/gcrypt.dep
@@ -0,0 +1 @@
+../../gcrypt \ No newline at end of file
diff --git a/data/gnupg/_metadata/gnutls.dep b/data/gnupg/_metadata/gnutls.dep
new file mode 120000
index 000000000..2dbb733a2
--- /dev/null
+++ b/data/gnupg/_metadata/gnutls.dep
@@ -0,0 +1 @@
+../../gnutls \ No newline at end of file
diff --git a/data/gnupg/_metadata/homepage b/data/gnupg/_metadata/homepage
deleted file mode 100644
index b6cb504d6..000000000
--- a/data/gnupg/_metadata/homepage
+++ /dev/null
@@ -1 +0,0 @@
-http://www.gnupg.org/
diff --git a/data/gnupg/_metadata/in.1443.00 b/data/gnupg/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gnupg/_metadata/in.1443.00
diff --git a/data/gnupg2/_metadata/libassuan.dep b/data/gnupg/_metadata/libassuan.dep
index faf83d0e8..faf83d0e8 120000
--- a/data/gnupg2/_metadata/libassuan.dep
+++ b/data/gnupg/_metadata/libassuan.dep
diff --git a/data/gnupg2/_metadata/libksba.dep b/data/gnupg/_metadata/libksba.dep
index af0be215f..af0be215f 120000
--- a/data/gnupg2/_metadata/libksba.dep
+++ b/data/gnupg/_metadata/libksba.dep
diff --git a/data/gnupg/_metadata/maintainer b/data/gnupg/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gnupg/_metadata/maintainer
+++ b/data/gnupg/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gnupg/_metadata/name b/data/gnupg/_metadata/name
index 0fb54137f..fb453f25a 100644
--- a/data/gnupg/_metadata/name
+++ b/data/gnupg/_metadata/name
@@ -1 +1 @@
-GNU Privacy Guard
+GnuPG
diff --git a/data/gnupg/_metadata/npth.dep b/data/gnupg/_metadata/npth.dep
new file mode 120000
index 000000000..ba035bc31
--- /dev/null
+++ b/data/gnupg/_metadata/npth.dep
@@ -0,0 +1 @@
+../../npth \ No newline at end of file
diff --git a/data/gnupg/_metadata/provides b/data/gnupg/_metadata/provides
new file mode 100644
index 000000000..239772ed9
--- /dev/null
+++ b/data/gnupg/_metadata/provides
@@ -0,0 +1 @@
+gnupg2
diff --git a/data/gnupg/_metadata/replaces b/data/gnupg/_metadata/replaces
new file mode 100644
index 000000000..239772ed9
--- /dev/null
+++ b/data/gnupg/_metadata/replaces
@@ -0,0 +1 @@
+gnupg2
diff --git a/data/gnupg/_metadata/version b/data/gnupg/_metadata/version
index b2e46d185..0b6e43134 100644
--- a/data/gnupg/_metadata/version
+++ b/data/gnupg/_metadata/version
@@ -1 +1 @@
-1.4.8
+2.2.11
diff --git a/data/gnupg/armasm.diff b/data/gnupg/armasm.diff
deleted file mode 100644
index 955d2467c..000000000
--- a/data/gnupg/armasm.diff
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -ru gnupg-1.4.8/mpi/longlong.h gnupg-1.4.8+iPhone/mpi/longlong.h
---- gnupg-1.4.8/mpi/longlong.h 2007-10-23 09:15:14.000000000 +0000
-+++ gnupg-1.4.8+iPhone/mpi/longlong.h 2008-01-01 12:58:42.000000000 +0000
-@@ -221,8 +221,8 @@
- : "r0", "r1", "r2")
- #else
- #define umul_ppmm(xh, xl, a, b) \
-- __asm__ ("%@ Inlined umul_ppmm\n" \
-- "umull %r1, %r0, %r2, %r3" \
-+ __asm__ ("@ Inlined umul_ppmm\n" \
-+ "umull %1, %0, %2, %3" \
- : "=&r" ((USItype)(xh)), \
- "=r" ((USItype)(xl)) \
- : "r" ((USItype)(a)), \
diff --git a/data/gnupg/clock_gettime.diff b/data/gnupg/clock_gettime.diff
new file mode 100644
index 000000000..f53ca2971
--- /dev/null
+++ b/data/gnupg/clock_gettime.diff
@@ -0,0 +1,12 @@
+diff -ur gnupg-2.2.9/agent/protect.c gnupg-2.2.9+iPhone/agent/protect.c
+--- gnupg-2.2.9/agent/protect.c 2018-06-12 01:25:39.000000000 -1000
++++ gnupg-2.2.9+iPhone/agent/protect.c 2018-12-03 11:31:42.000000000 -1000
+@@ -105,7 +105,7 @@
+ &data->creation_time, &data->exit_time,
+ &data->kernel_time, &data->user_time);
+ # endif
+-#elif defined (CLOCK_THREAD_CPUTIME_ID)
++#elif defined (CLOCK_THREAD_CPUTIME_ID) && defined (HAVE_CLOCK_GETTIME)
+ struct timespec tmp;
+
+ clock_gettime (CLOCK_THREAD_CPUTIME_ID, &tmp);
diff --git a/data/gnupg/gnupg-1.4.9.tar.bz2 b/data/gnupg/gnupg-1.4.9.tar.bz2
deleted file mode 100644
index e56b9b3da..000000000
--- a/data/gnupg/gnupg-1.4.9.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/gnupg/gnupg-2.2.11.tar.bz2 b/data/gnupg/gnupg-2.2.11.tar.bz2
new file mode 100644
index 000000000..c5b9cb7b0
--- /dev/null
+++ b/data/gnupg/gnupg-2.2.11.tar.bz2
Binary files differ
diff --git a/data/gnupg/make.sh b/data/gnupg/make.sh
index 05dc5f4ac..7e96b678b 100644
--- a/data/gnupg/make.sh
+++ b/data/gnupg/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-pkg:configure --disable-nls
-make
+CFLAGS="-fcommon" pkg:configure --with-ksba-prefix="$(PKG_DEST_ libksba)/usr" --with-libassuan-prefix="$(PKG_DEST_ libassuan)/usr" --with-npth-prefix="$(PKG_DEST_ npth)/usr" --sysconfdir=/etc --with-gpg-error-prefix="$(PKG_DEST_ libgpg-error)/usr" --with-libgcrypt-prefix="$(PKG_DEST_ gcrypt)/usr"
+make -j8
pkg:install
-pkg: rm -f /usr/share/gnupg/{FAQ,faq.html}
+pkg: ln -s gnupg /usr/bin/gnupg2
diff --git a/data/gnupg2/_metadata/description b/data/gnupg2/_metadata/description
index 72bfbf994..6d2be28f4 100644
--- a/data/gnupg2/_metadata/description
+++ b/data/gnupg2/_metadata/description
@@ -1 +1 @@
-newer encryption compatible with OpenPGP
+GNU privacy guard - a free PGP replacement (dummy transitional package)
diff --git a/data/gnupg2/_metadata/gnupg.dep b/data/gnupg2/_metadata/gnupg.dep
new file mode 120000
index 000000000..277e892bf
--- /dev/null
+++ b/data/gnupg2/_metadata/gnupg.dep
@@ -0,0 +1 @@
+../../gnupg \ No newline at end of file
diff --git a/data/gnupg2/_metadata/gnupg.ver.iphoneos-arm b/data/gnupg2/_metadata/gnupg.ver.iphoneos-arm
new file mode 100644
index 000000000..cd5ac039d
--- /dev/null
+++ b/data/gnupg2/_metadata/gnupg.ver.iphoneos-arm
@@ -0,0 +1 @@
+2.0
diff --git a/data/gnupg2/_metadata/gnupg.ver.iphoneos-arm64 b/data/gnupg2/_metadata/gnupg.ver.iphoneos-arm64
new file mode 100644
index 000000000..cd5ac039d
--- /dev/null
+++ b/data/gnupg2/_metadata/gnupg.ver.iphoneos-arm64
@@ -0,0 +1 @@
+2.0
diff --git a/data/gnupg2/_metadata/gnupth.dep b/data/gnupg2/_metadata/gnupth.dep
deleted file mode 120000
index cc4ec2bde..000000000
--- a/data/gnupg2/_metadata/gnupth.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../gnupth \ No newline at end of file
diff --git a/data/gnupg2/_metadata/in.1443.00 b/data/gnupg2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gnupg2/_metadata/in.1443.00
diff --git a/data/gnupg2/_metadata/maintainer b/data/gnupg2/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gnupg2/_metadata/maintainer
+++ b/data/gnupg2/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gnupg2/_metadata/version b/data/gnupg2/_metadata/version
index 815e68dd2..a6333e400 100644
--- a/data/gnupg2/_metadata/version
+++ b/data/gnupg2/_metadata/version
@@ -1 +1 @@
-2.0.8
+2.2.9
diff --git a/data/gnupg2/gnupg-2.0.8.tar.bz2 b/data/gnupg2/gnupg-2.0.8.tar.bz2
deleted file mode 100644
index aad5b3e71..000000000
--- a/data/gnupg2/gnupg-2.0.8.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/gnupg2/gnupth.diff b/data/gnupg2/gnupth.diff
deleted file mode 100644
index aa46248cb..000000000
--- a/data/gnupg2/gnupth.diff
+++ /dev/null
@@ -1,28 +0,0 @@
-diff -r -u gnupg-2.0.8/m4/gnupg-pth.m4 gnupg-2.0.8+iPhone/m4/gnupg-pth.m4
---- gnupg-2.0.8/m4/gnupg-pth.m4 2007-05-30 10:40:00.000000000 +0000
-+++ gnupg-2.0.8+iPhone/m4/gnupg-pth.m4 2008-01-01 11:49:03.000000000 +0000
-@@ -51,9 +51,9 @@
- _gnupg_pth_save_cflags=$CFLAGS
- _gnupg_pth_save_ldflags=$LDFLAGS
- _gnupg_pth_save_libs=$LIBS
-- CFLAGS="$CFLAGS `$PTH_CONFIG --cflags`"
-- LDFLAGS="$LDFLAGS `$PTH_CONFIG --ldflags`"
-- LIBS="$LIBS `$PTH_CONFIG --libs --all`"
-+ CFLAGS=
-+ LDFLAGS=
-+ LIBS=-lpth
- AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pth.h>
- ],
- [[ pth_init ();]])],
-@@ -92,9 +92,8 @@
- if test "$PTH_CONFIG" != "no"; then
- GNUPG_PTH_VERSION_CHECK($tmp)
- if test $have_pth = yes; then
-- PTH_CFLAGS=`$PTH_CONFIG --cflags`
-- PTH_LIBS=`$PTH_CONFIG --ldflags`
-- PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
-+ PTH_CFLAGS=
-+ PTH_LIBS=-lpth
- AC_DEFINE(HAVE_PTH, 1,
- [Defined if the GNU Pth is available])
- fi
diff --git a/data/gnupg2/make.sh b/data/gnupg2/make.sh
index 6c4c8cf74..a26dde533 100644
--- a/data/gnupg2/make.sh
+++ b/data/gnupg2/make.sh
@@ -1,5 +1,2 @@
-pkg:setup
-autoconf
-pkg:configure --with-ksba-prefix="$(PKG_DEST_ libksba)/usr" --with-libassuan-prefix="$(PKG_DEST_ libassuan)/usr" --with-pth-prefix="$(PKG_DEST_ gnupth)/usr" --sysconfdir=/etc
-make
-pkg:install
+mkdir -p "$(PKG_DEST_ gnupg2)/usr/bin"
+ln -s gnupg "$(PKG_DEST_ gnupg2)/usr/bin/gnupg2"
diff --git a/data/gnupth/_metadata/name b/data/gnupth/_metadata/name
deleted file mode 100644
index 5eb4b2060..000000000
--- a/data/gnupth/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-GNU Portable Threads
diff --git a/data/gnupth/_metadata/version b/data/gnupth/_metadata/version
deleted file mode 100644
index f1547e6d1..000000000
--- a/data/gnupth/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-2.0.7
diff --git a/data/gnupth/make.sh b/data/gnupth/make.sh
deleted file mode 100644
index 452a4bfd5..000000000
--- a/data/gnupth/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg:setup
-pkg:configure
-make
-pkg:install
diff --git a/data/gnupth/pth-2.0.7.tar.gz b/data/gnupth/pth-2.0.7.tar.gz
deleted file mode 100644
index 8cf1597d9..000000000
--- a/data/gnupth/pth-2.0.7.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/gnutls/_metadata/in.1443.00 b/data/gnutls/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gnutls/_metadata/in.1443.00
diff --git a/data/gnutls/_metadata/libgmp10.dep b/data/gnutls/_metadata/libgmp10.dep
new file mode 120000
index 000000000..524659b66
--- /dev/null
+++ b/data/gnutls/_metadata/libgmp10.dep
@@ -0,0 +1 @@
+../../libgmp10 \ No newline at end of file
diff --git a/data/gnutls/_metadata/libidn2.dep b/data/gnutls/_metadata/libidn2.dep
new file mode 120000
index 000000000..368989301
--- /dev/null
+++ b/data/gnutls/_metadata/libidn2.dep
@@ -0,0 +1 @@
+../../libidn2 \ No newline at end of file
diff --git a/data/gnutls/_metadata/libunistring.dep b/data/gnutls/_metadata/libunistring.dep
new file mode 120000
index 000000000..795713de2
--- /dev/null
+++ b/data/gnutls/_metadata/libunistring.dep
@@ -0,0 +1 @@
+../../libunistring \ No newline at end of file
diff --git a/data/gnutls/_metadata/maintainer b/data/gnutls/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gnutls/_metadata/maintainer
+++ b/data/gnutls/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gnutls/_metadata/nettle.dep b/data/gnutls/_metadata/nettle.dep
new file mode 120000
index 000000000..a27c28e57
--- /dev/null
+++ b/data/gnutls/_metadata/nettle.dep
@@ -0,0 +1 @@
+../../nettle \ No newline at end of file
diff --git a/data/gnutls/_metadata/p11-kit.dep b/data/gnutls/_metadata/p11-kit.dep
new file mode 120000
index 000000000..1019ede75
--- /dev/null
+++ b/data/gnutls/_metadata/p11-kit.dep
@@ -0,0 +1 @@
+../../p11-kit \ No newline at end of file
diff --git a/data/gnutls/_metadata/version b/data/gnutls/_metadata/version
index 005119baa..11cce27e5 100644
--- a/data/gnutls/_metadata/version
+++ b/data/gnutls/_metadata/version
@@ -1 +1 @@
-2.4.1
+3.5.19
diff --git a/data/gnutls/asm.diff b/data/gnutls/asm.diff
new file mode 100644
index 000000000..40f1b6db8
--- /dev/null
+++ b/data/gnutls/asm.diff
@@ -0,0 +1,6397 @@
+diff --git a/cfg.mk b/cfg.mk
+index 2c227f370ca9871075107eac7f861ee60c961891..c532250797d195536acd2560954da0e948a3f3a2 100644
+--- a/cfg.mk
++++ b/cfg.mk
+@@ -247,4 +247,16 @@ lib/accelerated/aarch64/elf/%.s: devel/perlasm/%.pl .submodule.stamp
+ echo ".section .note.GNU-stack,\"\",%progbits" >> $@
+ rm -f $@.tmp.S $@.tmp.s $@.tmp
+
++lib/accelerated/aarch64/macosx/%.s: devel/perlasm/%.pl .submodule.stamp
++ rm -f $@tmp
++ CC=aarch64-linux-gnu-gcc perl $< ios64 $@.tmp
++ cat $@.tmp | /usr/bin/perl -ne '/^#(line)?\s*[0-9]+/ or print' > $@.tmp.S
++ echo "" >> $@.tmp.S
++ sed -i 's/OPENSSL_armcap_P/_gnutls_arm_cpuid_s/g' $@.tmp.S
++ sed -i 's/arm_arch.h/aarch64-common.h/g' $@.tmp.S
++ aarch64-linux-gnu-gcc -D__ARM_MAX_ARCH__=8 -Ilib/accelerated/aarch64 -Wa,--noexecstack -E $@.tmp.S -o $@.tmp.s
++ cat $<.license $@.tmp.s > $@
++ rm -f $@.tmp.S $@.tmp.s $@.tmp
+
++lib/accelerated/aarch64/coff/%.s: devel/perlasm/%.pl .submodule.stamp
++ @true
+diff --git a/lib/accelerated/aarch64/Makefile.am b/lib/accelerated/aarch64/Makefile.am
+index 7ccc8553671b9bd504de17ed5c5d6c7e393644bc..ccf37e991bf44c363e8fb891e3d90683acabd0b8 100644
+--- a/lib/accelerated/aarch64/Makefile.am
++++ b/lib/accelerated/aarch64/Makefile.am
+@@ -43,8 +43,12 @@ noinst_LTLIBRARIES = libaarch64.la
+ libaarch64_la_SOURCES = aarch64-common.c aarch64-common.h sha-aarch64.h sha-aarch64.c \
+ hmac-sha-aarch64.c aes-cbc-aarch64.c aes-gcm-aarch64.c aes-aarch64.h aes-ccm-aarch64.c
+
+-if ASM_AARCH64
+-libaarch64_la_SOURCES += elf/sha1-armv8.s elf/sha512-armv8.s elf/sha256-armv8.s \
+- elf/aes-aarch64.s elf/ghash-aarch64.s
++if MACOSX
++ADIR=macosx
++else
++ADIR=elf
++endif
++
++libaarch64_la_SOURCES += $(ADIR)/sha1-armv8.s $(ADIR)/sha512-armv8.s $(ADIR)/sha256-armv8.s \
++ $(ADIR)/aes-aarch64.s $(ADIR)/ghash-aarch64.s
+
+-endif #ASM_AARCH64
+diff --git a/lib/accelerated/aarch64/aarch64-common.h b/lib/accelerated/aarch64/aarch64-common.h
+index 7330775ac04115b8ace3e2048e3001450cd50cfe..b850bae725750b4375845119ddba97528bcba994 100644
+--- a/lib/accelerated/aarch64/aarch64-common.h
++++ b/lib/accelerated/aarch64/aarch64-common.h
+@@ -34,7 +34,10 @@
+ void register_aarch64_crypto(void);
+ #endif
+
++#define ARMV7_NEON (1<<0)
++#define ARMV7_TICK (1<<1)
+ #define ARMV8_AES (1<<2)
+ #define ARMV8_SHA1 (1<<3)
+ #define ARMV8_SHA256 (1<<4)
+ #define ARMV8_PMULL (1<<5)
++#define ARMV8_SHA512 (1<<6)
+diff --git a/lib/accelerated/aarch64/macosx/aes-aarch64.s b/lib/accelerated/aarch64/macosx/aes-aarch64.s
+new file mode 100644
+index 0000000000000000000000000000000000000000..f017bcd95d9dab8c9485d4234ec015cef4b2cd42
+--- /dev/null
++++ b/lib/accelerated/aarch64/macosx/aes-aarch64.s
+@@ -0,0 +1,791 @@
++# Copyright (c) 2011-2016, Andy Polyakov <appro@openssl.org>
++# All rights reserved.
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions
++# are met:
++#
++# * Redistributions of source code must retain copyright notices,
++# this list of conditions and the following disclaimer.
++#
++# * Redistributions in binary form must reproduce the above
++# copyright notice, this list of conditions and the following
++# disclaimer in the documentation and/or other materials
++# provided with the distribution.
++#
++# * Neither the name of the Andy Polyakov nor the names of its
++# copyright holder and contributors may be used to endorse or
++# promote products derived from this software without specific
++# prior written permission.
++#
++# ALTERNATIVELY, provided that this notice is retained in full, this
++# product may be distributed under the terms of the GNU General Public
++# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
++# those given above.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
++# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++#
++# *** This file is auto-generated ***
++#
++# 1 "lib/accelerated/aarch64/macosx/aes-aarch64.s.tmp.S"
++# 1 "<built-in>"
++# 1 "<command-line>"
++# 1 "/usr/aarch64-linux-gnu/include/stdc-predef.h" 1 3
++# 1 "<command-line>" 2
++# 1 "lib/accelerated/aarch64/macosx/aes-aarch64.s.tmp.S"
++# 1 "lib/accelerated/aarch64/aarch64-common.h" 1
++# 2 "lib/accelerated/aarch64/macosx/aes-aarch64.s.tmp.S" 2
++
++
++.text
++
++.align 5
++Lrcon:
++.long 0x01,0x01,0x01,0x01
++.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
++.long 0x1b,0x1b,0x1b,0x1b
++
++.globl _aes_v8_set_encrypt_key
++
++.align 5
++_aes_v8_set_encrypt_key:
++Lenc_key:
++ stp x29,x30,[sp,#-16]!
++ add x29,sp,#0
++ mov x3,#-1
++ cmp x0,#0
++ b.eq Lenc_key_abort
++ cmp x2,#0
++ b.eq Lenc_key_abort
++ mov x3,#-2
++ cmp w1,#128
++ b.lt Lenc_key_abort
++ cmp w1,#256
++ b.gt Lenc_key_abort
++ tst w1,#0x3f
++ b.ne Lenc_key_abort
++
++ adr x3,Lrcon
++ cmp w1,#192
++
++ eor v0.16b,v0.16b,v0.16b
++ ld1 {v3.16b},[x0],#16
++ mov w1,#8
++ ld1 {v1.4s,v2.4s},[x3],#32
++
++ b.lt Loop128
++ b.eq L192
++ b L256
++
++.align 4
++Loop128:
++ tbl v6.16b,{v3.16b},v2.16b
++ ext v5.16b,v0.16b,v3.16b,#12
++ st1 {v3.4s},[x2],#16
++ aese v6.16b,v0.16b
++ subs w1,w1,#1
++
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v6.16b,v6.16b,v1.16b
++ eor v3.16b,v3.16b,v5.16b
++ shl v1.16b,v1.16b,#1
++ eor v3.16b,v3.16b,v6.16b
++ b.ne Loop128
++
++ ld1 {v1.4s},[x3]
++
++ tbl v6.16b,{v3.16b},v2.16b
++ ext v5.16b,v0.16b,v3.16b,#12
++ st1 {v3.4s},[x2],#16
++ aese v6.16b,v0.16b
++
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v6.16b,v6.16b,v1.16b
++ eor v3.16b,v3.16b,v5.16b
++ shl v1.16b,v1.16b,#1
++ eor v3.16b,v3.16b,v6.16b
++
++ tbl v6.16b,{v3.16b},v2.16b
++ ext v5.16b,v0.16b,v3.16b,#12
++ st1 {v3.4s},[x2],#16
++ aese v6.16b,v0.16b
++
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v6.16b,v6.16b,v1.16b
++ eor v3.16b,v3.16b,v5.16b
++ eor v3.16b,v3.16b,v6.16b
++ st1 {v3.4s},[x2]
++ add x2,x2,#0x50
++
++ mov w12,#10
++ b Ldone
++
++.align 4
++L192:
++ ld1 {v4.8b},[x0],#8
++ movi v6.16b,#8
++ st1 {v3.4s},[x2],#16
++ sub v2.16b,v2.16b,v6.16b
++
++Loop192:
++ tbl v6.16b,{v4.16b},v2.16b
++ ext v5.16b,v0.16b,v3.16b,#12
++ st1 {v4.8b},[x2],#8
++ aese v6.16b,v0.16b
++ subs w1,w1,#1
++
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v3.16b,v3.16b,v5.16b
++
++ dup v5.4s,v3.s[3]
++ eor v5.16b,v5.16b,v4.16b
++ eor v6.16b,v6.16b,v1.16b
++ ext v4.16b,v0.16b,v4.16b,#12
++ shl v1.16b,v1.16b,#1
++ eor v4.16b,v4.16b,v5.16b
++ eor v3.16b,v3.16b,v6.16b
++ eor v4.16b,v4.16b,v6.16b
++ st1 {v3.4s},[x2],#16
++ b.ne Loop192
++
++ mov w12,#12
++ add x2,x2,#0x20
++ b Ldone
++
++.align 4
++L256:
++ ld1 {v4.16b},[x0]
++ mov w1,#7
++ mov w12,#14
++ st1 {v3.4s},[x2],#16
++
++Loop256:
++ tbl v6.16b,{v4.16b},v2.16b
++ ext v5.16b,v0.16b,v3.16b,#12
++ st1 {v4.4s},[x2],#16
++ aese v6.16b,v0.16b
++ subs w1,w1,#1
++
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v3.16b,v3.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v6.16b,v6.16b,v1.16b
++ eor v3.16b,v3.16b,v5.16b
++ shl v1.16b,v1.16b,#1
++ eor v3.16b,v3.16b,v6.16b
++ st1 {v3.4s},[x2],#16
++ b.eq Ldone
++
++ dup v6.4s,v3.s[3]
++ ext v5.16b,v0.16b,v4.16b,#12
++ aese v6.16b,v0.16b
++
++ eor v4.16b,v4.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v4.16b,v4.16b,v5.16b
++ ext v5.16b,v0.16b,v5.16b,#12
++ eor v4.16b,v4.16b,v5.16b
++
++ eor v4.16b,v4.16b,v6.16b
++ b Loop256
++
++Ldone:
++ str w12,[x2]
++ mov x3,#0
++
++Lenc_key_abort:
++ mov x0,x3
++ ldr x29,[sp],#16
++ ret
++
++
++.globl _aes_v8_set_decrypt_key
++
++.align 5
++_aes_v8_set_decrypt_key:
++ stp x29,x30,[sp,#-16]!
++ add x29,sp,#0
++ bl Lenc_key
++
++ cmp x0,#0
++ b.ne Ldec_key_abort
++
++ sub x2,x2,#240
++ mov x4,#-16
++ add x0,x2,x12,lsl#4
++
++ ld1 {v0.4s},[x2]
++ ld1 {v1.4s},[x0]
++ st1 {v0.4s},[x0],x4
++ st1 {v1.4s},[x2],#16
++
++Loop_imc:
++ ld1 {v0.4s},[x2]
++ ld1 {v1.4s},[x0]
++ aesimc v0.16b,v0.16b
++ aesimc v1.16b,v1.16b
++ st1 {v0.4s},[x0],x4
++ st1 {v1.4s},[x2],#16
++ cmp x0,x2
++ b.hi Loop_imc
++
++ ld1 {v0.4s},[x2]
++ aesimc v0.16b,v0.16b
++ st1 {v0.4s},[x0]
++
++ eor x0,x0,x0
++Ldec_key_abort:
++ ldp x29,x30,[sp],#16
++ ret
++
++.globl _aes_v8_encrypt
++
++.align 5
++_aes_v8_encrypt:
++ ldr w3,[x2,#240]
++ ld1 {v0.4s},[x2],#16
++ ld1 {v2.16b},[x0]
++ sub w3,w3,#2
++ ld1 {v1.4s},[x2],#16
++
++Loop_enc:
++ aese v2.16b,v0.16b
++ aesmc v2.16b,v2.16b
++ ld1 {v0.4s},[x2],#16
++ subs w3,w3,#2
++ aese v2.16b,v1.16b
++ aesmc v2.16b,v2.16b
++ ld1 {v1.4s},[x2],#16
++ b.gt Loop_enc
++
++ aese v2.16b,v0.16b
++ aesmc v2.16b,v2.16b
++ ld1 {v0.4s},[x2]
++ aese v2.16b,v1.16b
++ eor v2.16b,v2.16b,v0.16b
++
++ st1 {v2.16b},[x1]
++ ret
++
++.globl _aes_v8_decrypt
++
++.align 5
++_aes_v8_decrypt:
++ ldr w3,[x2,#240]
++ ld1 {v0.4s},[x2],#16
++ ld1 {v2.16b},[x0]
++ sub w3,w3,#2
++ ld1 {v1.4s},[x2],#16
++
++Loop_dec:
++ aesd v2.16b,v0.16b
++ aesimc v2.16b,v2.16b
++ ld1 {v0.4s},[x2],#16
++ subs w3,w3,#2
++ aesd v2.16b,v1.16b
++ aesimc v2.16b,v2.16b
++ ld1 {v1.4s},[x2],#16
++ b.gt Loop_dec
++
++ aesd v2.16b,v0.16b
++ aesimc v2.16b,v2.16b
++ ld1 {v0.4s},[x2]
++ aesd v2.16b,v1.16b
++ eor v2.16b,v2.16b,v0.16b
++
++ st1 {v2.16b},[x1]
++ ret
++
++.globl _aes_v8_cbc_encrypt
++
++.align 5
++_aes_v8_cbc_encrypt:
++ stp x29,x30,[sp,#-16]!
++ add x29,sp,#0
++ subs x2,x2,#16
++ mov x8,#16
++ b.lo Lcbc_abort
++ csel x8,xzr,x8,eq
++
++ cmp w5,#0
++ ldr w5,[x3,#240]
++ and x2,x2,#-16
++ ld1 {v6.16b},[x4]
++ ld1 {v0.16b},[x0],x8
++
++ ld1 {v16.4s,v17.4s},[x3]
++ sub w5,w5,#6
++ add x7,x3,x5,lsl#4
++ sub w5,w5,#2
++ ld1 {v18.4s,v19.4s},[x7],#32
++ ld1 {v20.4s,v21.4s},[x7],#32
++ ld1 {v22.4s,v23.4s},[x7],#32
++ ld1 {v7.4s},[x7]
++
++ add x7,x3,#32
++ mov w6,w5
++ b.eq Lcbc_dec
++
++ cmp w5,#2
++ eor v0.16b,v0.16b,v6.16b
++ eor v5.16b,v16.16b,v7.16b
++ b.eq Lcbc_enc128
++
++ ld1 {v2.4s,v3.4s},[x7]
++ add x7,x3,#16
++ add x6,x3,#16*4
++ add x12,x3,#16*5
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ add x14,x3,#16*6
++ add x3,x3,#16*7
++ b Lenter_cbc_enc
++
++.align 4
++Loop_cbc_enc:
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ st1 {v6.16b},[x1],#16
++Lenter_cbc_enc:
++ aese v0.16b,v17.16b
++ aesmc v0.16b,v0.16b
++ aese v0.16b,v2.16b
++ aesmc v0.16b,v0.16b
++ ld1 {v16.4s},[x6]
++ cmp w5,#4
++ aese v0.16b,v3.16b
++ aesmc v0.16b,v0.16b
++ ld1 {v17.4s},[x12]
++ b.eq Lcbc_enc192
++
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ ld1 {v16.4s},[x14]
++ aese v0.16b,v17.16b
++ aesmc v0.16b,v0.16b
++ ld1 {v17.4s},[x3]
++ nop
++
++Lcbc_enc192:
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ subs x2,x2,#16
++ aese v0.16b,v17.16b
++ aesmc v0.16b,v0.16b
++ csel x8,xzr,x8,eq
++ aese v0.16b,v18.16b
++ aesmc v0.16b,v0.16b
++ aese v0.16b,v19.16b
++ aesmc v0.16b,v0.16b
++ ld1 {v16.16b},[x0],x8
++ aese v0.16b,v20.16b
++ aesmc v0.16b,v0.16b
++ eor v16.16b,v16.16b,v5.16b
++ aese v0.16b,v21.16b
++ aesmc v0.16b,v0.16b
++ ld1 {v17.4s},[x7]
++ aese v0.16b,v22.16b
++ aesmc v0.16b,v0.16b
++ aese v0.16b,v23.16b
++ eor v6.16b,v0.16b,v7.16b
++ b.hs Loop_cbc_enc
++
++ st1 {v6.16b},[x1],#16
++ b Lcbc_done
++
++.align 5
++Lcbc_enc128:
++ ld1 {v2.4s,v3.4s},[x7]
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ b Lenter_cbc_enc128
++Loop_cbc_enc128:
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ st1 {v6.16b},[x1],#16
++Lenter_cbc_enc128:
++ aese v0.16b,v17.16b
++ aesmc v0.16b,v0.16b
++ subs x2,x2,#16
++ aese v0.16b,v2.16b
++ aesmc v0.16b,v0.16b
++ csel x8,xzr,x8,eq
++ aese v0.16b,v3.16b
++ aesmc v0.16b,v0.16b
++ aese v0.16b,v18.16b
++ aesmc v0.16b,v0.16b
++ aese v0.16b,v19.16b
++ aesmc v0.16b,v0.16b
++ ld1 {v16.16b},[x0],x8
++ aese v0.16b,v20.16b
++ aesmc v0.16b,v0.16b
++ aese v0.16b,v21.16b
++ aesmc v0.16b,v0.16b
++ aese v0.16b,v22.16b
++ aesmc v0.16b,v0.16b
++ eor v16.16b,v16.16b,v5.16b
++ aese v0.16b,v23.16b
++ eor v6.16b,v0.16b,v7.16b
++ b.hs Loop_cbc_enc128
++
++ st1 {v6.16b},[x1],#16
++ b Lcbc_done
++.align 5
++Lcbc_dec:
++ ld1 {v18.16b},[x0],#16
++ subs x2,x2,#32
++ add w6,w5,#2
++ orr v3.16b,v0.16b,v0.16b
++ orr v1.16b,v0.16b,v0.16b
++ orr v19.16b,v18.16b,v18.16b
++ b.lo Lcbc_dec_tail
++
++ orr v1.16b,v18.16b,v18.16b
++ ld1 {v18.16b},[x0],#16
++ orr v2.16b,v0.16b,v0.16b
++ orr v3.16b,v1.16b,v1.16b
++ orr v19.16b,v18.16b,v18.16b
++
++Loop3x_cbc_dec:
++ aesd v0.16b,v16.16b
++ aesimc v0.16b,v0.16b
++ aesd v1.16b,v16.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v16.16b
++ aesimc v18.16b,v18.16b
++ ld1 {v16.4s},[x7],#16
++ subs w6,w6,#2
++ aesd v0.16b,v17.16b
++ aesimc v0.16b,v0.16b
++ aesd v1.16b,v17.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v17.16b
++ aesimc v18.16b,v18.16b
++ ld1 {v17.4s},[x7],#16
++ b.gt Loop3x_cbc_dec
++
++ aesd v0.16b,v16.16b
++ aesimc v0.16b,v0.16b
++ aesd v1.16b,v16.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v16.16b
++ aesimc v18.16b,v18.16b
++ eor v4.16b,v6.16b,v7.16b
++ subs x2,x2,#0x30
++ eor v5.16b,v2.16b,v7.16b
++ csel x6,x2,x6,lo
++ aesd v0.16b,v17.16b
++ aesimc v0.16b,v0.16b
++ aesd v1.16b,v17.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v17.16b
++ aesimc v18.16b,v18.16b
++ eor v17.16b,v3.16b,v7.16b
++ add x0,x0,x6
++
++
++ orr v6.16b,v19.16b,v19.16b
++ mov x7,x3
++ aesd v0.16b,v20.16b
++ aesimc v0.16b,v0.16b
++ aesd v1.16b,v20.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v20.16b
++ aesimc v18.16b,v18.16b
++ ld1 {v2.16b},[x0],#16
++ aesd v0.16b,v21.16b
++ aesimc v0.16b,v0.16b
++ aesd v1.16b,v21.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v21.16b
++ aesimc v18.16b,v18.16b
++ ld1 {v3.16b},[x0],#16
++ aesd v0.16b,v22.16b
++ aesimc v0.16b,v0.16b
++ aesd v1.16b,v22.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v22.16b
++ aesimc v18.16b,v18.16b
++ ld1 {v19.16b},[x0],#16
++ aesd v0.16b,v23.16b
++ aesd v1.16b,v23.16b
++ aesd v18.16b,v23.16b
++ ld1 {v16.4s},[x7],#16
++ add w6,w5,#2
++ eor v4.16b,v4.16b,v0.16b
++ eor v5.16b,v5.16b,v1.16b
++ eor v18.16b,v18.16b,v17.16b
++ ld1 {v17.4s},[x7],#16
++ st1 {v4.16b},[x1],#16
++ orr v0.16b,v2.16b,v2.16b
++ st1 {v5.16b},[x1],#16
++ orr v1.16b,v3.16b,v3.16b
++ st1 {v18.16b},[x1],#16
++ orr v18.16b,v19.16b,v19.16b
++ b.hs Loop3x_cbc_dec
++
++ cmn x2,#0x30
++ b.eq Lcbc_done
++ nop
++
++Lcbc_dec_tail:
++ aesd v1.16b,v16.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v16.16b
++ aesimc v18.16b,v18.16b
++ ld1 {v16.4s},[x7],#16
++ subs w6,w6,#2
++ aesd v1.16b,v17.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v17.16b
++ aesimc v18.16b,v18.16b
++ ld1 {v17.4s},[x7],#16
++ b.gt Lcbc_dec_tail
++
++ aesd v1.16b,v16.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v16.16b
++ aesimc v18.16b,v18.16b
++ aesd v1.16b,v17.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v17.16b
++ aesimc v18.16b,v18.16b
++ aesd v1.16b,v20.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v20.16b
++ aesimc v18.16b,v18.16b
++ cmn x2,#0x20
++ aesd v1.16b,v21.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v21.16b
++ aesimc v18.16b,v18.16b
++ eor v5.16b,v6.16b,v7.16b
++ aesd v1.16b,v22.16b
++ aesimc v1.16b,v1.16b
++ aesd v18.16b,v22.16b
++ aesimc v18.16b,v18.16b
++ eor v17.16b,v3.16b,v7.16b
++ aesd v1.16b,v23.16b
++ aesd v18.16b,v23.16b
++ b.eq Lcbc_dec_one
++ eor v5.16b,v5.16b,v1.16b
++ eor v17.16b,v17.16b,v18.16b
++ orr v6.16b,v19.16b,v19.16b
++ st1 {v5.16b},[x1],#16
++ st1 {v17.16b},[x1],#16
++ b Lcbc_done
++
++Lcbc_dec_one:
++ eor v5.16b,v5.16b,v18.16b
++ orr v6.16b,v19.16b,v19.16b
++ st1 {v5.16b},[x1],#16
++
++Lcbc_done:
++ st1 {v6.16b},[x4]
++Lcbc_abort:
++ ldr x29,[sp],#16
++ ret
++
++.globl _aes_v8_ctr32_encrypt_blocks
++
++.align 5
++_aes_v8_ctr32_encrypt_blocks:
++ stp x29,x30,[sp,#-16]!
++ add x29,sp,#0
++ ldr w5,[x3,#240]
++
++ ldr w8, [x4, #12]
++ ld1 {v0.4s},[x4]
++
++ ld1 {v16.4s,v17.4s},[x3]
++ sub w5,w5,#4
++ mov x12,#16
++ cmp x2,#2
++ add x7,x3,x5,lsl#4
++ sub w5,w5,#2
++ ld1 {v20.4s,v21.4s},[x7],#32
++ ld1 {v22.4s,v23.4s},[x7],#32
++ ld1 {v7.4s},[x7]
++ add x7,x3,#32
++ mov w6,w5
++ csel x12,xzr,x12,lo
++
++ rev w8, w8
++
++ orr v1.16b,v0.16b,v0.16b
++ add w10, w8, #1
++ orr v18.16b,v0.16b,v0.16b
++ add w8, w8, #2
++ orr v6.16b,v0.16b,v0.16b
++ rev w10, w10
++ mov v1.s[3],w10
++ b.ls Lctr32_tail
++ rev w12, w8
++ sub x2,x2,#3
++ mov v18.s[3],w12
++ b Loop3x_ctr32
++
++.align 4
++Loop3x_ctr32:
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v16.16b
++ aesmc v1.16b,v1.16b
++ aese v18.16b,v16.16b
++ aesmc v18.16b,v18.16b
++ ld1 {v16.4s},[x7],#16
++ subs w6,w6,#2
++ aese v0.16b,v17.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v17.16b
++ aesmc v1.16b,v1.16b
++ aese v18.16b,v17.16b
++ aesmc v18.16b,v18.16b
++ ld1 {v17.4s},[x7],#16
++ b.gt Loop3x_ctr32
++
++ aese v0.16b,v16.16b
++ aesmc v4.16b,v0.16b
++ aese v1.16b,v16.16b
++ aesmc v5.16b,v1.16b
++ ld1 {v2.16b},[x0],#16
++ orr v0.16b,v6.16b,v6.16b
++ aese v18.16b,v16.16b
++ aesmc v18.16b,v18.16b
++ ld1 {v3.16b},[x0],#16
++ orr v1.16b,v6.16b,v6.16b
++ aese v4.16b,v17.16b
++ aesmc v4.16b,v4.16b
++ aese v5.16b,v17.16b
++ aesmc v5.16b,v5.16b
++ ld1 {v19.16b},[x0],#16
++ mov x7,x3
++ aese v18.16b,v17.16b
++ aesmc v17.16b,v18.16b
++ orr v18.16b,v6.16b,v6.16b
++ add w9,w8,#1
++ aese v4.16b,v20.16b
++ aesmc v4.16b,v4.16b
++ aese v5.16b,v20.16b
++ aesmc v5.16b,v5.16b
++ eor v2.16b,v2.16b,v7.16b
++ add w10,w8,#2
++ aese v17.16b,v20.16b
++ aesmc v17.16b,v17.16b
++ eor v3.16b,v3.16b,v7.16b
++ add w8,w8,#3
++ aese v4.16b,v21.16b
++ aesmc v4.16b,v4.16b
++ aese v5.16b,v21.16b
++ aesmc v5.16b,v5.16b
++ eor v19.16b,v19.16b,v7.16b
++ rev w9,w9
++ aese v17.16b,v21.16b
++ aesmc v17.16b,v17.16b
++ mov v0.s[3], w9
++ rev w10,w10
++ aese v4.16b,v22.16b
++ aesmc v4.16b,v4.16b
++ aese v5.16b,v22.16b
++ aesmc v5.16b,v5.16b
++ mov v1.s[3], w10
++ rev w12,w8
++ aese v17.16b,v22.16b
++ aesmc v17.16b,v17.16b
++ mov v18.s[3], w12
++ subs x2,x2,#3
++ aese v4.16b,v23.16b
++ aese v5.16b,v23.16b
++ aese v17.16b,v23.16b
++
++ eor v2.16b,v2.16b,v4.16b
++ ld1 {v16.4s},[x7],#16
++ st1 {v2.16b},[x1],#16
++ eor v3.16b,v3.16b,v5.16b
++ mov w6,w5
++ st1 {v3.16b},[x1],#16
++ eor v19.16b,v19.16b,v17.16b
++ ld1 {v17.4s},[x7],#16
++ st1 {v19.16b},[x1],#16
++ b.hs Loop3x_ctr32
++
++ adds x2,x2,#3
++ b.eq Lctr32_done
++ cmp x2,#1
++ mov x12,#16
++ csel x12,xzr,x12,eq
++
++Lctr32_tail:
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v16.16b
++ aesmc v1.16b,v1.16b
++ ld1 {v16.4s},[x7],#16
++ subs w6,w6,#2
++ aese v0.16b,v17.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v17.16b
++ aesmc v1.16b,v1.16b
++ ld1 {v17.4s},[x7],#16
++ b.gt Lctr32_tail
++
++ aese v0.16b,v16.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v16.16b
++ aesmc v1.16b,v1.16b
++ aese v0.16b,v17.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v17.16b
++ aesmc v1.16b,v1.16b
++ ld1 {v2.16b},[x0],x12
++ aese v0.16b,v20.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v20.16b
++ aesmc v1.16b,v1.16b
++ ld1 {v3.16b},[x0]
++ aese v0.16b,v21.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v21.16b
++ aesmc v1.16b,v1.16b
++ eor v2.16b,v2.16b,v7.16b
++ aese v0.16b,v22.16b
++ aesmc v0.16b,v0.16b
++ aese v1.16b,v22.16b
++ aesmc v1.16b,v1.16b
++ eor v3.16b,v3.16b,v7.16b
++ aese v0.16b,v23.16b
++ aese v1.16b,v23.16b
++
++ cmp x2,#1
++ eor v2.16b,v2.16b,v0.16b
++ eor v3.16b,v3.16b,v1.16b
++ st1 {v2.16b},[x1],#16
++ b.eq Lctr32_done
++ st1 {v3.16b},[x1]
++
++Lctr32_done:
++ ldr x29,[sp],#16
++ ret
+diff --git a/lib/accelerated/aarch64/macosx/ghash-aarch64.s b/lib/accelerated/aarch64/macosx/ghash-aarch64.s
+new file mode 100644
+index 0000000000000000000000000000000000000000..f49a8dbb70c948bd9d84089a5112489d853f13ee
+--- /dev/null
++++ b/lib/accelerated/aarch64/macosx/ghash-aarch64.s
+@@ -0,0 +1,589 @@
++# Copyright (c) 2011-2016, Andy Polyakov <appro@openssl.org>
++# All rights reserved.
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions
++# are met:
++#
++# * Redistributions of source code must retain copyright notices,
++# this list of conditions and the following disclaimer.
++#
++# * Redistributions in binary form must reproduce the above
++# copyright notice, this list of conditions and the following
++# disclaimer in the documentation and/or other materials
++# provided with the distribution.
++#
++# * Neither the name of the Andy Polyakov nor the names of its
++# copyright holder and contributors may be used to endorse or
++# promote products derived from this software without specific
++# prior written permission.
++#
++# ALTERNATIVELY, provided that this notice is retained in full, this
++# product may be distributed under the terms of the GNU General Public
++# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
++# those given above.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
++# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++#
++# *** This file is auto-generated ***
++#
++# 1 "lib/accelerated/aarch64/macosx/ghash-aarch64.s.tmp.S"
++# 1 "<built-in>"
++# 1 "<command-line>"
++# 1 "/usr/aarch64-linux-gnu/include/stdc-predef.h" 1 3
++# 1 "<command-line>" 2
++# 1 "lib/accelerated/aarch64/macosx/ghash-aarch64.s.tmp.S"
++# 1 "lib/accelerated/aarch64/aarch64-common.h" 1
++# 2 "lib/accelerated/aarch64/macosx/ghash-aarch64.s.tmp.S" 2
++
++.text
++
++.globl _gcm_init_v8
++
++.align 4
++_gcm_init_v8:
++ ld1 {v17.2d},[x1]
++ movi v19.16b,#0xe1
++ shl v19.2d,v19.2d,#57
++ ext v3.16b,v17.16b,v17.16b,#8
++ ushr v18.2d,v19.2d,#63
++ dup v17.4s,v17.s[1]
++ ext v16.16b,v18.16b,v19.16b,#8
++ ushr v18.2d,v3.2d,#63
++ sshr v17.4s,v17.4s,#31
++ and v18.16b,v18.16b,v16.16b
++ shl v3.2d,v3.2d,#1
++ ext v18.16b,v18.16b,v18.16b,#8
++ and v16.16b,v16.16b,v17.16b
++ orr v3.16b,v3.16b,v18.16b
++ eor v20.16b,v3.16b,v16.16b
++ st1 {v20.2d},[x0],#16
++
++
++ ext v16.16b,v20.16b,v20.16b,#8
++ pmull v0.1q,v20.1d,v20.1d
++ eor v16.16b,v16.16b,v20.16b
++ pmull2 v2.1q,v20.2d,v20.2d
++ pmull v1.1q,v16.1d,v16.1d
++
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v17.16b
++ eor v1.16b,v1.16b,v18.16b
++ pmull v18.1q,v0.1d,v19.1d
++
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ eor v0.16b,v1.16b,v18.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ eor v18.16b,v18.16b,v2.16b
++ eor v22.16b,v0.16b,v18.16b
++
++ ext v17.16b,v22.16b,v22.16b,#8
++ eor v17.16b,v17.16b,v22.16b
++ ext v21.16b,v16.16b,v17.16b,#8
++ st1 {v21.2d,v22.2d},[x0],#32
++
++ pmull v0.1q,v20.1d, v22.1d
++ pmull v5.1q,v22.1d,v22.1d
++ pmull2 v2.1q,v20.2d, v22.2d
++ pmull2 v7.1q,v22.2d,v22.2d
++ pmull v1.1q,v16.1d,v17.1d
++ pmull v6.1q,v17.1d,v17.1d
++
++ ext v16.16b,v0.16b,v2.16b,#8
++ ext v17.16b,v5.16b,v7.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v16.16b
++ eor v4.16b,v5.16b,v7.16b
++ eor v6.16b,v6.16b,v17.16b
++ eor v1.16b,v1.16b,v18.16b
++ pmull v18.1q,v0.1d,v19.1d
++ eor v6.16b,v6.16b,v4.16b
++ pmull v4.1q,v5.1d,v19.1d
++
++ ins v2.d[0],v1.d[1]
++ ins v7.d[0],v6.d[1]
++ ins v1.d[1],v0.d[0]
++ ins v6.d[1],v5.d[0]
++ eor v0.16b,v1.16b,v18.16b
++ eor v5.16b,v6.16b,v4.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ ext v4.16b,v5.16b,v5.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ pmull v5.1q,v5.1d,v19.1d
++ eor v18.16b,v18.16b,v2.16b
++ eor v4.16b,v4.16b,v7.16b
++ eor v20.16b, v0.16b,v18.16b
++ eor v22.16b,v5.16b,v4.16b
++
++ ext v16.16b,v20.16b, v20.16b,#8
++ ext v17.16b,v22.16b,v22.16b,#8
++ eor v16.16b,v16.16b,v20.16b
++ eor v17.16b,v17.16b,v22.16b
++ ext v21.16b,v16.16b,v17.16b,#8
++ st1 {v20.2d,v21.2d,v22.2d},[x0]
++ ret
++
++.globl _gcm_gmult_v8
++
++.align 4
++_gcm_gmult_v8:
++ ld1 {v17.2d},[x0]
++ movi v19.16b,#0xe1
++ ld1 {v20.2d,v21.2d},[x1]
++ shl v19.2d,v19.2d,#57
++
++ rev64 v17.16b,v17.16b
++
++ ext v3.16b,v17.16b,v17.16b,#8
++
++ pmull v0.1q,v20.1d,v3.1d
++ eor v17.16b,v17.16b,v3.16b
++ pmull2 v2.1q,v20.2d,v3.2d
++ pmull v1.1q,v21.1d,v17.1d
++
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v17.16b
++ eor v1.16b,v1.16b,v18.16b
++ pmull v18.1q,v0.1d,v19.1d
++
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ eor v0.16b,v1.16b,v18.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ eor v18.16b,v18.16b,v2.16b
++ eor v0.16b,v0.16b,v18.16b
++
++
++ rev64 v0.16b,v0.16b
++
++ ext v0.16b,v0.16b,v0.16b,#8
++ st1 {v0.2d},[x0]
++
++ ret
++
++.globl _gcm_ghash_v8
++
++.align 4
++_gcm_ghash_v8:
++ cmp x3,#64
++ b.hs Lgcm_ghash_v8_4x
++ ld1 {v0.2d},[x0]
++
++
++
++
++
++ subs x3,x3,#32
++ mov x12,#16
++# 158 "lib/accelerated/aarch64/macosx/ghash-aarch64.s.tmp.S"
++ ld1 {v20.2d,v21.2d},[x1],#32
++ movi v19.16b,#0xe1
++ ld1 {v22.2d},[x1]
++ csel x12,xzr,x12,eq
++ ext v0.16b,v0.16b,v0.16b,#8
++ ld1 {v16.2d},[x2],#16
++ shl v19.2d,v19.2d,#57
++
++ rev64 v16.16b,v16.16b
++ rev64 v0.16b,v0.16b
++
++ ext v3.16b,v16.16b,v16.16b,#8
++ b.lo Lodd_tail_v8
++ ld1 {v17.2d},[x2],x12
++
++ rev64 v17.16b,v17.16b
++
++ ext v7.16b,v17.16b,v17.16b,#8
++ eor v3.16b,v3.16b,v0.16b
++ pmull v4.1q,v20.1d,v7.1d
++ eor v17.16b,v17.16b,v7.16b
++ pmull2 v6.1q,v20.2d,v7.2d
++ b Loop_mod2x_v8
++
++.align 4
++Loop_mod2x_v8:
++ ext v18.16b,v3.16b,v3.16b,#8
++ subs x3,x3,#32
++ pmull v0.1q,v22.1d,v3.1d
++ csel x12,xzr,x12,lo
++
++ pmull v5.1q,v21.1d,v17.1d
++ eor v18.16b,v18.16b,v3.16b
++ pmull2 v2.1q,v22.2d,v3.2d
++ eor v0.16b,v0.16b,v4.16b
++ pmull2 v1.1q,v21.2d,v18.2d
++ ld1 {v16.2d},[x2],x12
++
++ eor v2.16b,v2.16b,v6.16b
++ csel x12,xzr,x12,eq
++ eor v1.16b,v1.16b,v5.16b
++
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v17.16b
++ ld1 {v17.2d},[x2],x12
++
++ rev64 v16.16b,v16.16b
++
++ eor v1.16b,v1.16b,v18.16b
++ pmull v18.1q,v0.1d,v19.1d
++
++
++ rev64 v17.16b,v17.16b
++
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ ext v7.16b,v17.16b,v17.16b,#8
++ ext v3.16b,v16.16b,v16.16b,#8
++ eor v0.16b,v1.16b,v18.16b
++ pmull v4.1q,v20.1d,v7.1d
++ eor v3.16b,v3.16b,v2.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ eor v3.16b,v3.16b,v18.16b
++ eor v17.16b,v17.16b,v7.16b
++ eor v3.16b,v3.16b,v0.16b
++ pmull2 v6.1q,v20.2d,v7.2d
++ b.hs Loop_mod2x_v8
++
++ eor v2.16b,v2.16b,v18.16b
++ ext v3.16b,v16.16b,v16.16b,#8
++ adds x3,x3,#32
++ eor v0.16b,v0.16b,v2.16b
++ b.eq Ldone_v8
++Lodd_tail_v8:
++ ext v18.16b,v0.16b,v0.16b,#8
++ eor v3.16b,v3.16b,v0.16b
++ eor v17.16b,v16.16b,v18.16b
++
++ pmull v0.1q,v20.1d,v3.1d
++ eor v17.16b,v17.16b,v3.16b
++ pmull2 v2.1q,v20.2d,v3.2d
++ pmull v1.1q,v21.1d,v17.1d
++
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v17.16b
++ eor v1.16b,v1.16b,v18.16b
++ pmull v18.1q,v0.1d,v19.1d
++
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ eor v0.16b,v1.16b,v18.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ eor v18.16b,v18.16b,v2.16b
++ eor v0.16b,v0.16b,v18.16b
++
++Ldone_v8:
++
++ rev64 v0.16b,v0.16b
++
++ ext v0.16b,v0.16b,v0.16b,#8
++ st1 {v0.2d},[x0]
++
++ ret
++
++
++.align 4
++gcm_ghash_v8_4x:
++Lgcm_ghash_v8_4x:
++ ld1 {v0.2d},[x0]
++ ld1 {v20.2d,v21.2d,v22.2d},[x1],#48
++ movi v19.16b,#0xe1
++ ld1 {v26.2d,v27.2d,v28.2d},[x1]
++ shl v19.2d,v19.2d,#57
++
++ ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64
++
++ rev64 v0.16b,v0.16b
++ rev64 v5.16b,v5.16b
++ rev64 v6.16b,v6.16b
++ rev64 v7.16b,v7.16b
++ rev64 v4.16b,v4.16b
++
++ ext v25.16b,v7.16b,v7.16b,#8
++ ext v24.16b,v6.16b,v6.16b,#8
++ ext v23.16b,v5.16b,v5.16b,#8
++
++ pmull v29.1q,v20.1d,v25.1d
++ eor v7.16b,v7.16b,v25.16b
++ pmull2 v31.1q,v20.2d,v25.2d
++ pmull v30.1q,v21.1d,v7.1d
++
++ pmull v16.1q,v22.1d,v24.1d
++ eor v6.16b,v6.16b,v24.16b
++ pmull2 v24.1q,v22.2d,v24.2d
++ pmull2 v6.1q,v21.2d,v6.2d
++
++ eor v29.16b,v29.16b,v16.16b
++ eor v31.16b,v31.16b,v24.16b
++ eor v30.16b,v30.16b,v6.16b
++
++ pmull v7.1q,v26.1d,v23.1d
++ eor v5.16b,v5.16b,v23.16b
++ pmull2 v23.1q,v26.2d,v23.2d
++ pmull v5.1q,v27.1d,v5.1d
++
++ eor v29.16b,v29.16b,v7.16b
++ eor v31.16b,v31.16b,v23.16b
++ eor v30.16b,v30.16b,v5.16b
++
++ subs x3,x3,#128
++ b.lo Ltail4x
++
++ b Loop4x
++
++.align 4
++Loop4x:
++ eor v16.16b,v4.16b,v0.16b
++ ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64
++ ext v3.16b,v16.16b,v16.16b,#8
++
++ rev64 v5.16b,v5.16b
++ rev64 v6.16b,v6.16b
++ rev64 v7.16b,v7.16b
++ rev64 v4.16b,v4.16b
++
++
++ pmull v0.1q,v28.1d,v3.1d
++ eor v16.16b,v16.16b,v3.16b
++ pmull2 v2.1q,v28.2d,v3.2d
++ ext v25.16b,v7.16b,v7.16b,#8
++ pmull2 v1.1q,v27.2d,v16.2d
++
++ eor v0.16b,v0.16b,v29.16b
++ eor v2.16b,v2.16b,v31.16b
++ ext v24.16b,v6.16b,v6.16b,#8
++ eor v1.16b,v1.16b,v30.16b
++ ext v23.16b,v5.16b,v5.16b,#8
++
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ pmull v29.1q,v20.1d,v25.1d
++ eor v7.16b,v7.16b,v25.16b
++ eor v1.16b,v1.16b,v17.16b
++ pmull2 v31.1q,v20.2d,v25.2d
++ eor v1.16b,v1.16b,v18.16b
++ pmull v30.1q,v21.1d,v7.1d
++
++ pmull v18.1q,v0.1d,v19.1d
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ pmull v16.1q,v22.1d,v24.1d
++ eor v6.16b,v6.16b,v24.16b
++ pmull2 v24.1q,v22.2d,v24.2d
++ eor v0.16b,v1.16b,v18.16b
++ pmull2 v6.1q,v21.2d,v6.2d
++
++ eor v29.16b,v29.16b,v16.16b
++ eor v31.16b,v31.16b,v24.16b
++ eor v30.16b,v30.16b,v6.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ pmull v7.1q,v26.1d,v23.1d
++ eor v5.16b,v5.16b,v23.16b
++ eor v18.16b,v18.16b,v2.16b
++ pmull2 v23.1q,v26.2d,v23.2d
++ pmull v5.1q,v27.1d,v5.1d
++
++ eor v0.16b,v0.16b,v18.16b
++ eor v29.16b,v29.16b,v7.16b
++ eor v31.16b,v31.16b,v23.16b
++ ext v0.16b,v0.16b,v0.16b,#8
++ eor v30.16b,v30.16b,v5.16b
++
++ subs x3,x3,#64
++ b.hs Loop4x
++
++Ltail4x:
++ eor v16.16b,v4.16b,v0.16b
++ ext v3.16b,v16.16b,v16.16b,#8
++
++ pmull v0.1q,v28.1d,v3.1d
++ eor v16.16b,v16.16b,v3.16b
++ pmull2 v2.1q,v28.2d,v3.2d
++ pmull2 v1.1q,v27.2d,v16.2d
++
++ eor v0.16b,v0.16b,v29.16b
++ eor v2.16b,v2.16b,v31.16b
++ eor v1.16b,v1.16b,v30.16b
++
++ adds x3,x3,#64
++ b.eq Ldone4x
++
++ cmp x3,#32
++ b.lo Lone
++ b.eq Ltwo
++Lthree:
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v17.16b
++ ld1 {v4.2d,v5.2d,v6.2d},[x2]
++ eor v1.16b,v1.16b,v18.16b
++
++ rev64 v5.16b,v5.16b
++ rev64 v6.16b,v6.16b
++ rev64 v4.16b,v4.16b
++
++
++ pmull v18.1q,v0.1d,v19.1d
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ ext v24.16b,v6.16b,v6.16b,#8
++ ext v23.16b,v5.16b,v5.16b,#8
++ eor v0.16b,v1.16b,v18.16b
++
++ pmull v29.1q,v20.1d,v24.1d
++ eor v6.16b,v6.16b,v24.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ eor v18.16b,v18.16b,v2.16b
++ pmull2 v31.1q,v20.2d,v24.2d
++ pmull v30.1q,v21.1d,v6.1d
++ eor v0.16b,v0.16b,v18.16b
++ pmull v7.1q,v22.1d,v23.1d
++ eor v5.16b,v5.16b,v23.16b
++ ext v0.16b,v0.16b,v0.16b,#8
++
++ pmull2 v23.1q,v22.2d,v23.2d
++ eor v16.16b,v4.16b,v0.16b
++ pmull2 v5.1q,v21.2d,v5.2d
++ ext v3.16b,v16.16b,v16.16b,#8
++
++ eor v29.16b,v29.16b,v7.16b
++ eor v31.16b,v31.16b,v23.16b
++ eor v30.16b,v30.16b,v5.16b
++
++ pmull v0.1q,v26.1d,v3.1d
++ eor v16.16b,v16.16b,v3.16b
++ pmull2 v2.1q,v26.2d,v3.2d
++ pmull v1.1q,v27.1d,v16.1d
++
++ eor v0.16b,v0.16b,v29.16b
++ eor v2.16b,v2.16b,v31.16b
++ eor v1.16b,v1.16b,v30.16b
++ b Ldone4x
++
++.align 4
++Ltwo:
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v17.16b
++ ld1 {v4.2d,v5.2d},[x2]
++ eor v1.16b,v1.16b,v18.16b
++
++ rev64 v5.16b,v5.16b
++ rev64 v4.16b,v4.16b
++
++
++ pmull v18.1q,v0.1d,v19.1d
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ ext v23.16b,v5.16b,v5.16b,#8
++ eor v0.16b,v1.16b,v18.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ eor v18.16b,v18.16b,v2.16b
++ eor v0.16b,v0.16b,v18.16b
++ ext v0.16b,v0.16b,v0.16b,#8
++
++ pmull v29.1q,v20.1d,v23.1d
++ eor v5.16b,v5.16b,v23.16b
++
++ eor v16.16b,v4.16b,v0.16b
++ ext v3.16b,v16.16b,v16.16b,#8
++
++ pmull2 v31.1q,v20.2d,v23.2d
++ pmull v30.1q,v21.1d,v5.1d
++
++ pmull v0.1q,v22.1d,v3.1d
++ eor v16.16b,v16.16b,v3.16b
++ pmull2 v2.1q,v22.2d,v3.2d
++ pmull2 v1.1q,v21.2d,v16.2d
++
++ eor v0.16b,v0.16b,v29.16b
++ eor v2.16b,v2.16b,v31.16b
++ eor v1.16b,v1.16b,v30.16b
++ b Ldone4x
++
++.align 4
++Lone:
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v17.16b
++ ld1 {v4.2d},[x2]
++ eor v1.16b,v1.16b,v18.16b
++
++ rev64 v4.16b,v4.16b
++
++
++ pmull v18.1q,v0.1d,v19.1d
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ eor v0.16b,v1.16b,v18.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ eor v18.16b,v18.16b,v2.16b
++ eor v0.16b,v0.16b,v18.16b
++ ext v0.16b,v0.16b,v0.16b,#8
++
++ eor v16.16b,v4.16b,v0.16b
++ ext v3.16b,v16.16b,v16.16b,#8
++
++ pmull v0.1q,v20.1d,v3.1d
++ eor v16.16b,v16.16b,v3.16b
++ pmull2 v2.1q,v20.2d,v3.2d
++ pmull v1.1q,v21.1d,v16.1d
++
++Ldone4x:
++ ext v17.16b,v0.16b,v2.16b,#8
++ eor v18.16b,v0.16b,v2.16b
++ eor v1.16b,v1.16b,v17.16b
++ eor v1.16b,v1.16b,v18.16b
++
++ pmull v18.1q,v0.1d,v19.1d
++ ins v2.d[0],v1.d[1]
++ ins v1.d[1],v0.d[0]
++ eor v0.16b,v1.16b,v18.16b
++
++ ext v18.16b,v0.16b,v0.16b,#8
++ pmull v0.1q,v0.1d,v19.1d
++ eor v18.16b,v18.16b,v2.16b
++ eor v0.16b,v0.16b,v18.16b
++ ext v0.16b,v0.16b,v0.16b,#8
++
++
++ rev64 v0.16b,v0.16b
++
++ st1 {v0.2d},[x0]
++
++ ret
++
++.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
++.align 2
++.align 2
+diff --git a/lib/accelerated/aarch64/macosx/sha1-armv8.s b/lib/accelerated/aarch64/macosx/sha1-armv8.s
+new file mode 100644
+index 0000000000000000000000000000000000000000..221dc11731caa41d68d667d0bf0b0e9709be03f7
+--- /dev/null
++++ b/lib/accelerated/aarch64/macosx/sha1-armv8.s
+@@ -0,0 +1,1267 @@
++# Copyright (c) 2011-2016, Andy Polyakov <appro@openssl.org>
++# All rights reserved.
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions
++# are met:
++#
++# * Redistributions of source code must retain copyright notices,
++# this list of conditions and the following disclaimer.
++#
++# * Redistributions in binary form must reproduce the above
++# copyright notice, this list of conditions and the following
++# disclaimer in the documentation and/or other materials
++# provided with the distribution.
++#
++# * Neither the name of the Andy Polyakov nor the names of its
++# copyright holder and contributors may be used to endorse or
++# promote products derived from this software without specific
++# prior written permission.
++#
++# ALTERNATIVELY, provided that this notice is retained in full, this
++# product may be distributed under the terms of the GNU General Public
++# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
++# those given above.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
++# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++#
++# *** This file is auto-generated ***
++#
++# 1 "lib/accelerated/aarch64/macosx/sha1-armv8.s.tmp.S"
++# 1 "<built-in>"
++# 1 "<command-line>"
++# 1 "/usr/aarch64-linux-gnu/include/stdc-predef.h" 1 3
++# 1 "<command-line>" 2
++# 1 "lib/accelerated/aarch64/macosx/sha1-armv8.s.tmp.S"
++# 1 "lib/accelerated/aarch64/aarch64-common.h" 1
++# 2 "lib/accelerated/aarch64/macosx/sha1-armv8.s.tmp.S" 2
++
++.text
++
++
++.globl _sha1_block_data_order
++
++.align 6
++_sha1_block_data_order:
++
++
++
++ ldr x16,L_gnutls_arm_cpuid_s
++
++ adr x17,L_gnutls_arm_cpuid_s
++ add x16,x16,x17
++ ldr w16,[x16]
++ tst w16,#(1<<3)
++ b.ne Lv8_entry
++
++ stp x29,x30,[sp,#-96]!
++ add x29,sp,#0
++ stp x19,x20,[sp,#16]
++ stp x21,x22,[sp,#32]
++ stp x23,x24,[sp,#48]
++ stp x25,x26,[sp,#64]
++ stp x27,x28,[sp,#80]
++
++ ldp w20,w21,[x0]
++ ldp w22,w23,[x0,#8]
++ ldr w24,[x0,#16]
++
++Loop:
++ ldr x3,[x1],#64
++ movz w28,#0x7999
++ sub x2,x2,#1
++ movk w28,#0x5a82,lsl#16
++
++
++
++ rev32 x3,x3
++
++ add w24,w24,w28
++ add w24,w24,w3
++ lsr x4,x3,#32
++ ldr x5,[x1,#-56]
++ bic w25,w23,w21
++ and w26,w22,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ orr w25,w25,w26
++ add w24,w24,w27
++ ror w21,w21,#2
++ add w23,w23,w4
++ add w24,w24,w25
++
++
++
++ rev32 x5,x5
++
++ bic w25,w22,w20
++ and w26,w21,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ orr w25,w25,w26
++ add w23,w23,w27
++ ror w20,w20,#2
++ add w22,w22,w5
++ add w23,w23,w25
++ lsr x6,x5,#32
++ ldr x7,[x1,#-48]
++ bic w25,w21,w24
++ and w26,w20,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ orr w25,w25,w26
++ add w22,w22,w27
++ ror w24,w24,#2
++ add w21,w21,w6
++ add w22,w22,w25
++
++
++
++ rev32 x7,x7
++
++ bic w25,w20,w23
++ and w26,w24,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ orr w25,w25,w26
++ add w21,w21,w27
++ ror w23,w23,#2
++ add w20,w20,w7
++ add w21,w21,w25
++ lsr x8,x7,#32
++ ldr x9,[x1,#-40]
++ bic w25,w24,w22
++ and w26,w23,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ orr w25,w25,w26
++ add w20,w20,w27
++ ror w22,w22,#2
++ add w24,w24,w8
++ add w20,w20,w25
++
++
++
++ rev32 x9,x9
++
++ bic w25,w23,w21
++ and w26,w22,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ orr w25,w25,w26
++ add w24,w24,w27
++ ror w21,w21,#2
++ add w23,w23,w9
++ add w24,w24,w25
++ lsr x10,x9,#32
++ ldr x11,[x1,#-32]
++ bic w25,w22,w20
++ and w26,w21,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ orr w25,w25,w26
++ add w23,w23,w27
++ ror w20,w20,#2
++ add w22,w22,w10
++ add w23,w23,w25
++
++
++
++ rev32 x11,x11
++
++ bic w25,w21,w24
++ and w26,w20,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ orr w25,w25,w26
++ add w22,w22,w27
++ ror w24,w24,#2
++ add w21,w21,w11
++ add w22,w22,w25
++ lsr x12,x11,#32
++ ldr x13,[x1,#-24]
++ bic w25,w20,w23
++ and w26,w24,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ orr w25,w25,w26
++ add w21,w21,w27
++ ror w23,w23,#2
++ add w20,w20,w12
++ add w21,w21,w25
++
++
++
++ rev32 x13,x13
++
++ bic w25,w24,w22
++ and w26,w23,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ orr w25,w25,w26
++ add w20,w20,w27
++ ror w22,w22,#2
++ add w24,w24,w13
++ add w20,w20,w25
++ lsr x14,x13,#32
++ ldr x15,[x1,#-16]
++ bic w25,w23,w21
++ and w26,w22,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ orr w25,w25,w26
++ add w24,w24,w27
++ ror w21,w21,#2
++ add w23,w23,w14
++ add w24,w24,w25
++
++
++
++ rev32 x15,x15
++
++ bic w25,w22,w20
++ and w26,w21,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ orr w25,w25,w26
++ add w23,w23,w27
++ ror w20,w20,#2
++ add w22,w22,w15
++ add w23,w23,w25
++ lsr x16,x15,#32
++ ldr x17,[x1,#-8]
++ bic w25,w21,w24
++ and w26,w20,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ orr w25,w25,w26
++ add w22,w22,w27
++ ror w24,w24,#2
++ add w21,w21,w16
++ add w22,w22,w25
++
++
++
++ rev32 x17,x17
++
++ bic w25,w20,w23
++ and w26,w24,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ orr w25,w25,w26
++ add w21,w21,w27
++ ror w23,w23,#2
++ add w20,w20,w17
++ add w21,w21,w25
++ lsr x19,x17,#32
++ eor w3,w3,w5
++ bic w25,w24,w22
++ and w26,w23,w22
++ ror w27,w21,#27
++ eor w3,w3,w11
++ add w24,w24,w28
++ orr w25,w25,w26
++ add w20,w20,w27
++ eor w3,w3,w16
++ ror w22,w22,#2
++ add w24,w24,w19
++ add w20,w20,w25
++ ror w3,w3,#31
++ eor w4,w4,w6
++ bic w25,w23,w21
++ and w26,w22,w21
++ ror w27,w20,#27
++ eor w4,w4,w12
++ add w23,w23,w28
++ orr w25,w25,w26
++ add w24,w24,w27
++ eor w4,w4,w17
++ ror w21,w21,#2
++ add w23,w23,w3
++ add w24,w24,w25
++ ror w4,w4,#31
++ eor w5,w5,w7
++ bic w25,w22,w20
++ and w26,w21,w20
++ ror w27,w24,#27
++ eor w5,w5,w13
++ add w22,w22,w28
++ orr w25,w25,w26
++ add w23,w23,w27
++ eor w5,w5,w19
++ ror w20,w20,#2
++ add w22,w22,w4
++ add w23,w23,w25
++ ror w5,w5,#31
++ eor w6,w6,w8
++ bic w25,w21,w24
++ and w26,w20,w24
++ ror w27,w23,#27
++ eor w6,w6,w14
++ add w21,w21,w28
++ orr w25,w25,w26
++ add w22,w22,w27
++ eor w6,w6,w3
++ ror w24,w24,#2
++ add w21,w21,w5
++ add w22,w22,w25
++ ror w6,w6,#31
++ eor w7,w7,w9
++ bic w25,w20,w23
++ and w26,w24,w23
++ ror w27,w22,#27
++ eor w7,w7,w15
++ add w20,w20,w28
++ orr w25,w25,w26
++ add w21,w21,w27
++ eor w7,w7,w4
++ ror w23,w23,#2
++ add w20,w20,w6
++ add w21,w21,w25
++ ror w7,w7,#31
++ movz w28,#0xeba1
++ movk w28,#0x6ed9,lsl#16
++ eor w8,w8,w10
++ bic w25,w24,w22
++ and w26,w23,w22
++ ror w27,w21,#27
++ eor w8,w8,w16
++ add w24,w24,w28
++ orr w25,w25,w26
++ add w20,w20,w27
++ eor w8,w8,w5
++ ror w22,w22,#2
++ add w24,w24,w7
++ add w20,w20,w25
++ ror w8,w8,#31
++ eor w9,w9,w11
++ eor w25,w23,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ eor w9,w9,w17
++ eor w25,w25,w22
++ add w24,w24,w27
++ ror w21,w21,#2
++ eor w9,w9,w6
++ add w23,w23,w8
++ add w24,w24,w25
++ ror w9,w9,#31
++ eor w10,w10,w12
++ eor w25,w22,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ eor w10,w10,w19
++ eor w25,w25,w21
++ add w23,w23,w27
++ ror w20,w20,#2
++ eor w10,w10,w7
++ add w22,w22,w9
++ add w23,w23,w25
++ ror w10,w10,#31
++ eor w11,w11,w13
++ eor w25,w21,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ eor w11,w11,w3
++ eor w25,w25,w20
++ add w22,w22,w27
++ ror w24,w24,#2
++ eor w11,w11,w8
++ add w21,w21,w10
++ add w22,w22,w25
++ ror w11,w11,#31
++ eor w12,w12,w14
++ eor w25,w20,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ eor w12,w12,w4
++ eor w25,w25,w24
++ add w21,w21,w27
++ ror w23,w23,#2
++ eor w12,w12,w9
++ add w20,w20,w11
++ add w21,w21,w25
++ ror w12,w12,#31
++ eor w13,w13,w15
++ eor w25,w24,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ eor w13,w13,w5
++ eor w25,w25,w23
++ add w20,w20,w27
++ ror w22,w22,#2
++ eor w13,w13,w10
++ add w24,w24,w12
++ add w20,w20,w25
++ ror w13,w13,#31
++ eor w14,w14,w16
++ eor w25,w23,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ eor w14,w14,w6
++ eor w25,w25,w22
++ add w24,w24,w27
++ ror w21,w21,#2
++ eor w14,w14,w11
++ add w23,w23,w13
++ add w24,w24,w25
++ ror w14,w14,#31
++ eor w15,w15,w17
++ eor w25,w22,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ eor w15,w15,w7
++ eor w25,w25,w21
++ add w23,w23,w27
++ ror w20,w20,#2
++ eor w15,w15,w12
++ add w22,w22,w14
++ add w23,w23,w25
++ ror w15,w15,#31
++ eor w16,w16,w19
++ eor w25,w21,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ eor w16,w16,w8
++ eor w25,w25,w20
++ add w22,w22,w27
++ ror w24,w24,#2
++ eor w16,w16,w13
++ add w21,w21,w15
++ add w22,w22,w25
++ ror w16,w16,#31
++ eor w17,w17,w3
++ eor w25,w20,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ eor w17,w17,w9
++ eor w25,w25,w24
++ add w21,w21,w27
++ ror w23,w23,#2
++ eor w17,w17,w14
++ add w20,w20,w16
++ add w21,w21,w25
++ ror w17,w17,#31
++ eor w19,w19,w4
++ eor w25,w24,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ eor w19,w19,w10
++ eor w25,w25,w23
++ add w20,w20,w27
++ ror w22,w22,#2
++ eor w19,w19,w15
++ add w24,w24,w17
++ add w20,w20,w25
++ ror w19,w19,#31
++ eor w3,w3,w5
++ eor w25,w23,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ eor w3,w3,w11
++ eor w25,w25,w22
++ add w24,w24,w27
++ ror w21,w21,#2
++ eor w3,w3,w16
++ add w23,w23,w19
++ add w24,w24,w25
++ ror w3,w3,#31
++ eor w4,w4,w6
++ eor w25,w22,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ eor w4,w4,w12
++ eor w25,w25,w21
++ add w23,w23,w27
++ ror w20,w20,#2
++ eor w4,w4,w17
++ add w22,w22,w3
++ add w23,w23,w25
++ ror w4,w4,#31
++ eor w5,w5,w7
++ eor w25,w21,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ eor w5,w5,w13
++ eor w25,w25,w20
++ add w22,w22,w27
++ ror w24,w24,#2
++ eor w5,w5,w19
++ add w21,w21,w4
++ add w22,w22,w25
++ ror w5,w5,#31
++ eor w6,w6,w8
++ eor w25,w20,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ eor w6,w6,w14
++ eor w25,w25,w24
++ add w21,w21,w27
++ ror w23,w23,#2
++ eor w6,w6,w3
++ add w20,w20,w5
++ add w21,w21,w25
++ ror w6,w6,#31
++ eor w7,w7,w9
++ eor w25,w24,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ eor w7,w7,w15
++ eor w25,w25,w23
++ add w20,w20,w27
++ ror w22,w22,#2
++ eor w7,w7,w4
++ add w24,w24,w6
++ add w20,w20,w25
++ ror w7,w7,#31
++ eor w8,w8,w10
++ eor w25,w23,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ eor w8,w8,w16
++ eor w25,w25,w22
++ add w24,w24,w27
++ ror w21,w21,#2
++ eor w8,w8,w5
++ add w23,w23,w7
++ add w24,w24,w25
++ ror w8,w8,#31
++ eor w9,w9,w11
++ eor w25,w22,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ eor w9,w9,w17
++ eor w25,w25,w21
++ add w23,w23,w27
++ ror w20,w20,#2
++ eor w9,w9,w6
++ add w22,w22,w8
++ add w23,w23,w25
++ ror w9,w9,#31
++ eor w10,w10,w12
++ eor w25,w21,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ eor w10,w10,w19
++ eor w25,w25,w20
++ add w22,w22,w27
++ ror w24,w24,#2
++ eor w10,w10,w7
++ add w21,w21,w9
++ add w22,w22,w25
++ ror w10,w10,#31
++ eor w11,w11,w13
++ eor w25,w20,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ eor w11,w11,w3
++ eor w25,w25,w24
++ add w21,w21,w27
++ ror w23,w23,#2
++ eor w11,w11,w8
++ add w20,w20,w10
++ add w21,w21,w25
++ ror w11,w11,#31
++ movz w28,#0xbcdc
++ movk w28,#0x8f1b,lsl#16
++ eor w12,w12,w14
++ eor w25,w24,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ eor w12,w12,w4
++ eor w25,w25,w23
++ add w20,w20,w27
++ ror w22,w22,#2
++ eor w12,w12,w9
++ add w24,w24,w11
++ add w20,w20,w25
++ ror w12,w12,#31
++ orr w25,w21,w22
++ and w26,w21,w22
++ eor w13,w13,w15
++ ror w27,w20,#27
++ and w25,w25,w23
++ add w23,w23,w28
++ eor w13,w13,w5
++ add w24,w24,w27
++ orr w25,w25,w26
++ ror w21,w21,#2
++ eor w13,w13,w10
++ add w23,w23,w12
++ add w24,w24,w25
++ ror w13,w13,#31
++ orr w25,w20,w21
++ and w26,w20,w21
++ eor w14,w14,w16
++ ror w27,w24,#27
++ and w25,w25,w22
++ add w22,w22,w28
++ eor w14,w14,w6
++ add w23,w23,w27
++ orr w25,w25,w26
++ ror w20,w20,#2
++ eor w14,w14,w11
++ add w22,w22,w13
++ add w23,w23,w25
++ ror w14,w14,#31
++ orr w25,w24,w20
++ and w26,w24,w20
++ eor w15,w15,w17
++ ror w27,w23,#27
++ and w25,w25,w21
++ add w21,w21,w28
++ eor w15,w15,w7
++ add w22,w22,w27
++ orr w25,w25,w26
++ ror w24,w24,#2
++ eor w15,w15,w12
++ add w21,w21,w14
++ add w22,w22,w25
++ ror w15,w15,#31
++ orr w25,w23,w24
++ and w26,w23,w24
++ eor w16,w16,w19
++ ror w27,w22,#27
++ and w25,w25,w20
++ add w20,w20,w28
++ eor w16,w16,w8
++ add w21,w21,w27
++ orr w25,w25,w26
++ ror w23,w23,#2
++ eor w16,w16,w13
++ add w20,w20,w15
++ add w21,w21,w25
++ ror w16,w16,#31
++ orr w25,w22,w23
++ and w26,w22,w23
++ eor w17,w17,w3
++ ror w27,w21,#27
++ and w25,w25,w24
++ add w24,w24,w28
++ eor w17,w17,w9
++ add w20,w20,w27
++ orr w25,w25,w26
++ ror w22,w22,#2
++ eor w17,w17,w14
++ add w24,w24,w16
++ add w20,w20,w25
++ ror w17,w17,#31
++ orr w25,w21,w22
++ and w26,w21,w22
++ eor w19,w19,w4
++ ror w27,w20,#27
++ and w25,w25,w23
++ add w23,w23,w28
++ eor w19,w19,w10
++ add w24,w24,w27
++ orr w25,w25,w26
++ ror w21,w21,#2
++ eor w19,w19,w15
++ add w23,w23,w17
++ add w24,w24,w25
++ ror w19,w19,#31
++ orr w25,w20,w21
++ and w26,w20,w21
++ eor w3,w3,w5
++ ror w27,w24,#27
++ and w25,w25,w22
++ add w22,w22,w28
++ eor w3,w3,w11
++ add w23,w23,w27
++ orr w25,w25,w26
++ ror w20,w20,#2
++ eor w3,w3,w16
++ add w22,w22,w19
++ add w23,w23,w25
++ ror w3,w3,#31
++ orr w25,w24,w20
++ and w26,w24,w20
++ eor w4,w4,w6
++ ror w27,w23,#27
++ and w25,w25,w21
++ add w21,w21,w28
++ eor w4,w4,w12
++ add w22,w22,w27
++ orr w25,w25,w26
++ ror w24,w24,#2
++ eor w4,w4,w17
++ add w21,w21,w3
++ add w22,w22,w25
++ ror w4,w4,#31
++ orr w25,w23,w24
++ and w26,w23,w24
++ eor w5,w5,w7
++ ror w27,w22,#27
++ and w25,w25,w20
++ add w20,w20,w28
++ eor w5,w5,w13
++ add w21,w21,w27
++ orr w25,w25,w26
++ ror w23,w23,#2
++ eor w5,w5,w19
++ add w20,w20,w4
++ add w21,w21,w25
++ ror w5,w5,#31
++ orr w25,w22,w23
++ and w26,w22,w23
++ eor w6,w6,w8
++ ror w27,w21,#27
++ and w25,w25,w24
++ add w24,w24,w28
++ eor w6,w6,w14
++ add w20,w20,w27
++ orr w25,w25,w26
++ ror w22,w22,#2
++ eor w6,w6,w3
++ add w24,w24,w5
++ add w20,w20,w25
++ ror w6,w6,#31
++ orr w25,w21,w22
++ and w26,w21,w22
++ eor w7,w7,w9
++ ror w27,w20,#27
++ and w25,w25,w23
++ add w23,w23,w28
++ eor w7,w7,w15
++ add w24,w24,w27
++ orr w25,w25,w26
++ ror w21,w21,#2
++ eor w7,w7,w4
++ add w23,w23,w6
++ add w24,w24,w25
++ ror w7,w7,#31
++ orr w25,w20,w21
++ and w26,w20,w21
++ eor w8,w8,w10
++ ror w27,w24,#27
++ and w25,w25,w22
++ add w22,w22,w28
++ eor w8,w8,w16
++ add w23,w23,w27
++ orr w25,w25,w26
++ ror w20,w20,#2
++ eor w8,w8,w5
++ add w22,w22,w7
++ add w23,w23,w25
++ ror w8,w8,#31
++ orr w25,w24,w20
++ and w26,w24,w20
++ eor w9,w9,w11
++ ror w27,w23,#27
++ and w25,w25,w21
++ add w21,w21,w28
++ eor w9,w9,w17
++ add w22,w22,w27
++ orr w25,w25,w26
++ ror w24,w24,#2
++ eor w9,w9,w6
++ add w21,w21,w8
++ add w22,w22,w25
++ ror w9,w9,#31
++ orr w25,w23,w24
++ and w26,w23,w24
++ eor w10,w10,w12
++ ror w27,w22,#27
++ and w25,w25,w20
++ add w20,w20,w28
++ eor w10,w10,w19
++ add w21,w21,w27
++ orr w25,w25,w26
++ ror w23,w23,#2
++ eor w10,w10,w7
++ add w20,w20,w9
++ add w21,w21,w25
++ ror w10,w10,#31
++ orr w25,w22,w23
++ and w26,w22,w23
++ eor w11,w11,w13
++ ror w27,w21,#27
++ and w25,w25,w24
++ add w24,w24,w28
++ eor w11,w11,w3
++ add w20,w20,w27
++ orr w25,w25,w26
++ ror w22,w22,#2
++ eor w11,w11,w8
++ add w24,w24,w10
++ add w20,w20,w25
++ ror w11,w11,#31
++ orr w25,w21,w22
++ and w26,w21,w22
++ eor w12,w12,w14
++ ror w27,w20,#27
++ and w25,w25,w23
++ add w23,w23,w28
++ eor w12,w12,w4
++ add w24,w24,w27
++ orr w25,w25,w26
++ ror w21,w21,#2
++ eor w12,w12,w9
++ add w23,w23,w11
++ add w24,w24,w25
++ ror w12,w12,#31
++ orr w25,w20,w21
++ and w26,w20,w21
++ eor w13,w13,w15
++ ror w27,w24,#27
++ and w25,w25,w22
++ add w22,w22,w28
++ eor w13,w13,w5
++ add w23,w23,w27
++ orr w25,w25,w26
++ ror w20,w20,#2
++ eor w13,w13,w10
++ add w22,w22,w12
++ add w23,w23,w25
++ ror w13,w13,#31
++ orr w25,w24,w20
++ and w26,w24,w20
++ eor w14,w14,w16
++ ror w27,w23,#27
++ and w25,w25,w21
++ add w21,w21,w28
++ eor w14,w14,w6
++ add w22,w22,w27
++ orr w25,w25,w26
++ ror w24,w24,#2
++ eor w14,w14,w11
++ add w21,w21,w13
++ add w22,w22,w25
++ ror w14,w14,#31
++ orr w25,w23,w24
++ and w26,w23,w24
++ eor w15,w15,w17
++ ror w27,w22,#27
++ and w25,w25,w20
++ add w20,w20,w28
++ eor w15,w15,w7
++ add w21,w21,w27
++ orr w25,w25,w26
++ ror w23,w23,#2
++ eor w15,w15,w12
++ add w20,w20,w14
++ add w21,w21,w25
++ ror w15,w15,#31
++ movz w28,#0xc1d6
++ movk w28,#0xca62,lsl#16
++ orr w25,w22,w23
++ and w26,w22,w23
++ eor w16,w16,w19
++ ror w27,w21,#27
++ and w25,w25,w24
++ add w24,w24,w28
++ eor w16,w16,w8
++ add w20,w20,w27
++ orr w25,w25,w26
++ ror w22,w22,#2
++ eor w16,w16,w13
++ add w24,w24,w15
++ add w20,w20,w25
++ ror w16,w16,#31
++ eor w17,w17,w3
++ eor w25,w23,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ eor w17,w17,w9
++ eor w25,w25,w22
++ add w24,w24,w27
++ ror w21,w21,#2
++ eor w17,w17,w14
++ add w23,w23,w16
++ add w24,w24,w25
++ ror w17,w17,#31
++ eor w19,w19,w4
++ eor w25,w22,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ eor w19,w19,w10
++ eor w25,w25,w21
++ add w23,w23,w27
++ ror w20,w20,#2
++ eor w19,w19,w15
++ add w22,w22,w17
++ add w23,w23,w25
++ ror w19,w19,#31
++ eor w3,w3,w5
++ eor w25,w21,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ eor w3,w3,w11
++ eor w25,w25,w20
++ add w22,w22,w27
++ ror w24,w24,#2
++ eor w3,w3,w16
++ add w21,w21,w19
++ add w22,w22,w25
++ ror w3,w3,#31
++ eor w4,w4,w6
++ eor w25,w20,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ eor w4,w4,w12
++ eor w25,w25,w24
++ add w21,w21,w27
++ ror w23,w23,#2
++ eor w4,w4,w17
++ add w20,w20,w3
++ add w21,w21,w25
++ ror w4,w4,#31
++ eor w5,w5,w7
++ eor w25,w24,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ eor w5,w5,w13
++ eor w25,w25,w23
++ add w20,w20,w27
++ ror w22,w22,#2
++ eor w5,w5,w19
++ add w24,w24,w4
++ add w20,w20,w25
++ ror w5,w5,#31
++ eor w6,w6,w8
++ eor w25,w23,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ eor w6,w6,w14
++ eor w25,w25,w22
++ add w24,w24,w27
++ ror w21,w21,#2
++ eor w6,w6,w3
++ add w23,w23,w5
++ add w24,w24,w25
++ ror w6,w6,#31
++ eor w7,w7,w9
++ eor w25,w22,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ eor w7,w7,w15
++ eor w25,w25,w21
++ add w23,w23,w27
++ ror w20,w20,#2
++ eor w7,w7,w4
++ add w22,w22,w6
++ add w23,w23,w25
++ ror w7,w7,#31
++ eor w8,w8,w10
++ eor w25,w21,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ eor w8,w8,w16
++ eor w25,w25,w20
++ add w22,w22,w27
++ ror w24,w24,#2
++ eor w8,w8,w5
++ add w21,w21,w7
++ add w22,w22,w25
++ ror w8,w8,#31
++ eor w9,w9,w11
++ eor w25,w20,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ eor w9,w9,w17
++ eor w25,w25,w24
++ add w21,w21,w27
++ ror w23,w23,#2
++ eor w9,w9,w6
++ add w20,w20,w8
++ add w21,w21,w25
++ ror w9,w9,#31
++ eor w10,w10,w12
++ eor w25,w24,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ eor w10,w10,w19
++ eor w25,w25,w23
++ add w20,w20,w27
++ ror w22,w22,#2
++ eor w10,w10,w7
++ add w24,w24,w9
++ add w20,w20,w25
++ ror w10,w10,#31
++ eor w11,w11,w13
++ eor w25,w23,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ eor w11,w11,w3
++ eor w25,w25,w22
++ add w24,w24,w27
++ ror w21,w21,#2
++ eor w11,w11,w8
++ add w23,w23,w10
++ add w24,w24,w25
++ ror w11,w11,#31
++ eor w12,w12,w14
++ eor w25,w22,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ eor w12,w12,w4
++ eor w25,w25,w21
++ add w23,w23,w27
++ ror w20,w20,#2
++ eor w12,w12,w9
++ add w22,w22,w11
++ add w23,w23,w25
++ ror w12,w12,#31
++ eor w13,w13,w15
++ eor w25,w21,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ eor w13,w13,w5
++ eor w25,w25,w20
++ add w22,w22,w27
++ ror w24,w24,#2
++ eor w13,w13,w10
++ add w21,w21,w12
++ add w22,w22,w25
++ ror w13,w13,#31
++ eor w14,w14,w16
++ eor w25,w20,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ eor w14,w14,w6
++ eor w25,w25,w24
++ add w21,w21,w27
++ ror w23,w23,#2
++ eor w14,w14,w11
++ add w20,w20,w13
++ add w21,w21,w25
++ ror w14,w14,#31
++ eor w15,w15,w17
++ eor w25,w24,w22
++ ror w27,w21,#27
++ add w24,w24,w28
++ eor w15,w15,w7
++ eor w25,w25,w23
++ add w20,w20,w27
++ ror w22,w22,#2
++ eor w15,w15,w12
++ add w24,w24,w14
++ add w20,w20,w25
++ ror w15,w15,#31
++ eor w16,w16,w19
++ eor w25,w23,w21
++ ror w27,w20,#27
++ add w23,w23,w28
++ eor w16,w16,w8
++ eor w25,w25,w22
++ add w24,w24,w27
++ ror w21,w21,#2
++ eor w16,w16,w13
++ add w23,w23,w15
++ add w24,w24,w25
++ ror w16,w16,#31
++ eor w17,w17,w3
++ eor w25,w22,w20
++ ror w27,w24,#27
++ add w22,w22,w28
++ eor w17,w17,w9
++ eor w25,w25,w21
++ add w23,w23,w27
++ ror w20,w20,#2
++ eor w17,w17,w14
++ add w22,w22,w16
++ add w23,w23,w25
++ ror w17,w17,#31
++ eor w19,w19,w4
++ eor w25,w21,w24
++ ror w27,w23,#27
++ add w21,w21,w28
++ eor w19,w19,w10
++ eor w25,w25,w20
++ add w22,w22,w27
++ ror w24,w24,#2
++ eor w19,w19,w15
++ add w21,w21,w17
++ add w22,w22,w25
++ ror w19,w19,#31
++ ldp w4,w5,[x0]
++ eor w25,w20,w23
++ ror w27,w22,#27
++ add w20,w20,w28
++ eor w25,w25,w24
++ add w21,w21,w27
++ ror w23,w23,#2
++ add w20,w20,w19
++ add w21,w21,w25
++ ldp w6,w7,[x0,#8]
++ eor w25,w24,w22
++ ror w27,w21,#27
++ eor w25,w25,w23
++ add w20,w20,w27
++ ror w22,w22,#2
++ ldr w8,[x0,#16]
++ add w20,w20,w25
++ add w21,w21,w5
++ add w22,w22,w6
++ add w20,w20,w4
++ add w23,w23,w7
++ add w24,w24,w8
++ stp w20,w21,[x0]
++ stp w22,w23,[x0,#8]
++ str w24,[x0,#16]
++ cbnz x2,Loop
++
++ ldp x19,x20,[sp,#16]
++ ldp x21,x22,[sp,#32]
++ ldp x23,x24,[sp,#48]
++ ldp x25,x26,[sp,#64]
++ ldp x27,x28,[sp,#80]
++ ldr x29,[sp],#96
++ ret
++
++
++.align 6
++sha1_block_armv8:
++Lv8_entry:
++ stp x29,x30,[sp,#-16]!
++ add x29,sp,#0
++
++ adr x4,Lconst
++ eor v1.16b,v1.16b,v1.16b
++ ld1 {v0.4s},[x0],#16
++ ld1 {v1.s}[0],[x0]
++ sub x0,x0,#16
++ ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4]
++
++Loop_hw:
++ ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
++ sub x2,x2,#1
++ rev32 v4.16b,v4.16b
++ rev32 v5.16b,v5.16b
++
++ add v20.4s,v16.4s,v4.4s
++ rev32 v6.16b,v6.16b
++ orr v22.16b,v0.16b,v0.16b
++
++ add v21.4s,v16.4s,v5.4s
++ rev32 v7.16b,v7.16b
++.long 0x5e280803
++.long 0x5e140020
++ add v20.4s,v16.4s,v6.4s
++.long 0x5e0630a4
++.long 0x5e280802
++.long 0x5e150060
++ add v21.4s,v16.4s,v7.4s
++.long 0x5e2818e4
++.long 0x5e0730c5
++.long 0x5e280803
++.long 0x5e140040
++ add v20.4s,v16.4s,v4.4s
++.long 0x5e281885
++.long 0x5e0430e6
++.long 0x5e280802
++.long 0x5e150060
++ add v21.4s,v17.4s,v5.4s
++.long 0x5e2818a6
++.long 0x5e053087
++.long 0x5e280803
++.long 0x5e140040
++ add v20.4s,v17.4s,v6.4s
++.long 0x5e2818c7
++.long 0x5e0630a4
++.long 0x5e280802
++.long 0x5e151060
++ add v21.4s,v17.4s,v7.4s
++.long 0x5e2818e4
++.long 0x5e0730c5
++.long 0x5e280803
++.long 0x5e141040
++ add v20.4s,v17.4s,v4.4s
++.long 0x5e281885
++.long 0x5e0430e6
++.long 0x5e280802
++.long 0x5e151060
++ add v21.4s,v17.4s,v5.4s
++.long 0x5e2818a6
++.long 0x5e053087
++.long 0x5e280803
++.long 0x5e141040
++ add v20.4s,v18.4s,v6.4s
++.long 0x5e2818c7
++.long 0x5e0630a4
++.long 0x5e280802
++.long 0x5e151060
++ add v21.4s,v18.4s,v7.4s
++.long 0x5e2818e4
++.long 0x5e0730c5
++.long 0x5e280803
++.long 0x5e142040
++ add v20.4s,v18.4s,v4.4s
++.long 0x5e281885
++.long 0x5e0430e6
++.long 0x5e280802
++.long 0x5e152060
++ add v21.4s,v18.4s,v5.4s
++.long 0x5e2818a6
++.long 0x5e053087
++.long 0x5e280803
++.long 0x5e142040
++ add v20.4s,v18.4s,v6.4s
++.long 0x5e2818c7
++.long 0x5e0630a4
++.long 0x5e280802
++.long 0x5e152060
++ add v21.4s,v19.4s,v7.4s
++.long 0x5e2818e4
++.long 0x5e0730c5
++.long 0x5e280803
++.long 0x5e142040
++ add v20.4s,v19.4s,v4.4s
++.long 0x5e281885
++.long 0x5e0430e6
++.long 0x5e280802
++.long 0x5e151060
++ add v21.4s,v19.4s,v5.4s
++.long 0x5e2818a6
++.long 0x5e053087
++.long 0x5e280803
++.long 0x5e141040
++ add v20.4s,v19.4s,v6.4s
++.long 0x5e2818c7
++.long 0x5e280802
++.long 0x5e151060
++ add v21.4s,v19.4s,v7.4s
++
++.long 0x5e280803
++.long 0x5e141040
++
++.long 0x5e280802
++.long 0x5e151060
++
++ add v1.4s,v1.4s,v2.4s
++ add v0.4s,v0.4s,v22.4s
++
++ cbnz x2,Loop_hw
++
++ st1 {v0.4s},[x0],#16
++ st1 {v1.s}[0],[x0]
++
++ ldr x29,[sp],#16
++ ret
++
++.align 6
++Lconst:
++.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999
++.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
++.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
++.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
++L_gnutls_arm_cpuid_s:
++
++
++
++.quad __gnutls_arm_cpuid_s-.
++
++.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
++.align 2
++.align 2
++.comm __gnutls_arm_cpuid_s,4,4
+diff --git a/lib/accelerated/aarch64/macosx/sha256-armv8.s b/lib/accelerated/aarch64/macosx/sha256-armv8.s
+new file mode 100644
+index 0000000000000000000000000000000000000000..b48f6ca42a914ac0ef7a1e9486ba642747ed4610
+--- /dev/null
++++ b/lib/accelerated/aarch64/macosx/sha256-armv8.s
+@@ -0,0 +1,2054 @@
++# Copyright (c) 2011-2016, Andy Polyakov <appro@openssl.org>
++# All rights reserved.
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions
++# are met:
++#
++# * Redistributions of source code must retain copyright notices,
++# this list of conditions and the following disclaimer.
++#
++# * Redistributions in binary form must reproduce the above
++# copyright notice, this list of conditions and the following
++# disclaimer in the documentation and/or other materials
++# provided with the distribution.
++#
++# * Neither the name of the Andy Polyakov nor the names of its
++# copyright holder and contributors may be used to endorse or
++# promote products derived from this software without specific
++# prior written permission.
++#
++# ALTERNATIVELY, provided that this notice is retained in full, this
++# product may be distributed under the terms of the GNU General Public
++# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
++# those given above.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
++# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++#
++# *** This file is auto-generated ***
++#
++# 1 "lib/accelerated/aarch64/macosx/sha256-armv8.s.tmp.S"
++# 1 "<built-in>"
++# 1 "<command-line>"
++# 1 "/usr/aarch64-linux-gnu/include/stdc-predef.h" 1 3
++# 1 "<command-line>" 2
++# 1 "lib/accelerated/aarch64/macosx/sha256-armv8.s.tmp.S"
++# 56 "lib/accelerated/aarch64/macosx/sha256-armv8.s.tmp.S"
++# 1 "lib/accelerated/aarch64/aarch64-common.h" 1
++# 57 "lib/accelerated/aarch64/macosx/sha256-armv8.s.tmp.S" 2
++
++
++.text
++
++
++.globl _sha256_block_data_order
++
++.align 6
++_sha256_block_data_order:
++
++
++
++
++ ldr x16,L_gnutls_arm_cpuid_s
++
++ adr x17,L_gnutls_arm_cpuid_s
++ add x16,x16,x17
++ ldr w16,[x16]
++ tst w16,#(1<<4)
++ b.ne Lv8_entry
++ tst w16,#(1<<0)
++ b.ne Lneon_entry
++
++ stp x29,x30,[sp,#-128]!
++ add x29,sp,#0
++
++ stp x19,x20,[sp,#16]
++ stp x21,x22,[sp,#32]
++ stp x23,x24,[sp,#48]
++ stp x25,x26,[sp,#64]
++ stp x27,x28,[sp,#80]
++ sub sp,sp,#4*4
++
++ ldp w20,w21,[x0]
++ ldp w22,w23,[x0,#2*4]
++ ldp w24,w25,[x0,#4*4]
++ add x2,x1,x2,lsl#6
++ ldp w26,w27,[x0,#6*4]
++ adr x30,LK256
++ stp x0,x2,[x29,#96]
++
++Loop:
++ ldp w3,w4,[x1],#2*4
++ ldr w19,[x30],#4
++ eor w28,w21,w22
++ str x1,[x29,#112]
++
++ rev w3,w3
++
++ ror w16,w24,#6
++ add w27,w27,w19
++ eor w6,w24,w24,ror#14
++ and w17,w25,w24
++ bic w19,w26,w24
++ add w27,w27,w3
++ orr w17,w17,w19
++ eor w19,w20,w21
++ eor w16,w16,w6,ror#11
++ ror w6,w20,#2
++ add w27,w27,w17
++ eor w17,w20,w20,ror#9
++ add w27,w27,w16
++ and w28,w28,w19
++ add w23,w23,w27
++ eor w28,w28,w21
++ eor w17,w6,w17,ror#13
++ add w27,w27,w28
++ ldr w28,[x30],#4
++
++
++ rev w4,w4
++
++ ldp w5,w6,[x1],#2*4
++ add w27,w27,w17
++ ror w16,w23,#6
++ add w26,w26,w28
++ eor w7,w23,w23,ror#14
++ and w17,w24,w23
++ bic w28,w25,w23
++ add w26,w26,w4
++ orr w17,w17,w28
++ eor w28,w27,w20
++ eor w16,w16,w7,ror#11
++ ror w7,w27,#2
++ add w26,w26,w17
++ eor w17,w27,w27,ror#9
++ add w26,w26,w16
++ and w19,w19,w28
++ add w22,w22,w26
++ eor w19,w19,w20
++ eor w17,w7,w17,ror#13
++ add w26,w26,w19
++ ldr w19,[x30],#4
++
++
++ rev w5,w5
++
++ add w26,w26,w17
++ ror w16,w22,#6
++ add w25,w25,w19
++ eor w8,w22,w22,ror#14
++ and w17,w23,w22
++ bic w19,w24,w22
++ add w25,w25,w5
++ orr w17,w17,w19
++ eor w19,w26,w27
++ eor w16,w16,w8,ror#11
++ ror w8,w26,#2
++ add w25,w25,w17
++ eor w17,w26,w26,ror#9
++ add w25,w25,w16
++ and w28,w28,w19
++ add w21,w21,w25
++ eor w28,w28,w27
++ eor w17,w8,w17,ror#13
++ add w25,w25,w28
++ ldr w28,[x30],#4
++
++
++ rev w6,w6
++
++ ldp w7,w8,[x1],#2*4
++ add w25,w25,w17
++ ror w16,w21,#6
++ add w24,w24,w28
++ eor w9,w21,w21,ror#14
++ and w17,w22,w21
++ bic w28,w23,w21
++ add w24,w24,w6
++ orr w17,w17,w28
++ eor w28,w25,w26
++ eor w16,w16,w9,ror#11
++ ror w9,w25,#2
++ add w24,w24,w17
++ eor w17,w25,w25,ror#9
++ add w24,w24,w16
++ and w19,w19,w28
++ add w20,w20,w24
++ eor w19,w19,w26
++ eor w17,w9,w17,ror#13
++ add w24,w24,w19
++ ldr w19,[x30],#4
++
++
++ rev w7,w7
++
++ add w24,w24,w17
++ ror w16,w20,#6
++ add w23,w23,w19
++ eor w10,w20,w20,ror#14
++ and w17,w21,w20
++ bic w19,w22,w20
++ add w23,w23,w7
++ orr w17,w17,w19
++ eor w19,w24,w25
++ eor w16,w16,w10,ror#11
++ ror w10,w24,#2
++ add w23,w23,w17
++ eor w17,w24,w24,ror#9
++ add w23,w23,w16
++ and w28,w28,w19
++ add w27,w27,w23
++ eor w28,w28,w25
++ eor w17,w10,w17,ror#13
++ add w23,w23,w28
++ ldr w28,[x30],#4
++
++
++ rev w8,w8
++
++ ldp w9,w10,[x1],#2*4
++ add w23,w23,w17
++ ror w16,w27,#6
++ add w22,w22,w28
++ eor w11,w27,w27,ror#14
++ and w17,w20,w27
++ bic w28,w21,w27
++ add w22,w22,w8
++ orr w17,w17,w28
++ eor w28,w23,w24
++ eor w16,w16,w11,ror#11
++ ror w11,w23,#2
++ add w22,w22,w17
++ eor w17,w23,w23,ror#9
++ add w22,w22,w16
++ and w19,w19,w28
++ add w26,w26,w22
++ eor w19,w19,w24
++ eor w17,w11,w17,ror#13
++ add w22,w22,w19
++ ldr w19,[x30],#4
++
++
++ rev w9,w9
++
++ add w22,w22,w17
++ ror w16,w26,#6
++ add w21,w21,w19
++ eor w12,w26,w26,ror#14
++ and w17,w27,w26
++ bic w19,w20,w26
++ add w21,w21,w9
++ orr w17,w17,w19
++ eor w19,w22,w23
++ eor w16,w16,w12,ror#11
++ ror w12,w22,#2
++ add w21,w21,w17
++ eor w17,w22,w22,ror#9
++ add w21,w21,w16
++ and w28,w28,w19
++ add w25,w25,w21
++ eor w28,w28,w23
++ eor w17,w12,w17,ror#13
++ add w21,w21,w28
++ ldr w28,[x30],#4
++
++
++ rev w10,w10
++
++ ldp w11,w12,[x1],#2*4
++ add w21,w21,w17
++ ror w16,w25,#6
++ add w20,w20,w28
++ eor w13,w25,w25,ror#14
++ and w17,w26,w25
++ bic w28,w27,w25
++ add w20,w20,w10
++ orr w17,w17,w28
++ eor w28,w21,w22
++ eor w16,w16,w13,ror#11
++ ror w13,w21,#2
++ add w20,w20,w17
++ eor w17,w21,w21,ror#9
++ add w20,w20,w16
++ and w19,w19,w28
++ add w24,w24,w20
++ eor w19,w19,w22
++ eor w17,w13,w17,ror#13
++ add w20,w20,w19
++ ldr w19,[x30],#4
++
++
++ rev w11,w11
++
++ add w20,w20,w17
++ ror w16,w24,#6
++ add w27,w27,w19
++ eor w14,w24,w24,ror#14
++ and w17,w25,w24
++ bic w19,w26,w24
++ add w27,w27,w11
++ orr w17,w17,w19
++ eor w19,w20,w21
++ eor w16,w16,w14,ror#11
++ ror w14,w20,#2
++ add w27,w27,w17
++ eor w17,w20,w20,ror#9
++ add w27,w27,w16
++ and w28,w28,w19
++ add w23,w23,w27
++ eor w28,w28,w21
++ eor w17,w14,w17,ror#13
++ add w27,w27,w28
++ ldr w28,[x30],#4
++
++
++ rev w12,w12
++
++ ldp w13,w14,[x1],#2*4
++ add w27,w27,w17
++ ror w16,w23,#6
++ add w26,w26,w28
++ eor w15,w23,w23,ror#14
++ and w17,w24,w23
++ bic w28,w25,w23
++ add w26,w26,w12
++ orr w17,w17,w28
++ eor w28,w27,w20
++ eor w16,w16,w15,ror#11
++ ror w15,w27,#2
++ add w26,w26,w17
++ eor w17,w27,w27,ror#9
++ add w26,w26,w16
++ and w19,w19,w28
++ add w22,w22,w26
++ eor w19,w19,w20
++ eor w17,w15,w17,ror#13
++ add w26,w26,w19
++ ldr w19,[x30],#4
++
++
++ rev w13,w13
++
++ add w26,w26,w17
++ ror w16,w22,#6
++ add w25,w25,w19
++ eor w0,w22,w22,ror#14
++ and w17,w23,w22
++ bic w19,w24,w22
++ add w25,w25,w13
++ orr w17,w17,w19
++ eor w19,w26,w27
++ eor w16,w16,w0,ror#11
++ ror w0,w26,#2
++ add w25,w25,w17
++ eor w17,w26,w26,ror#9
++ add w25,w25,w16
++ and w28,w28,w19
++ add w21,w21,w25
++ eor w28,w28,w27
++ eor w17,w0,w17,ror#13
++ add w25,w25,w28
++ ldr w28,[x30],#4
++
++
++ rev w14,w14
++
++ ldp w15,w0,[x1],#2*4
++ add w25,w25,w17
++ str w6,[sp,#12]
++ ror w16,w21,#6
++ add w24,w24,w28
++ eor w6,w21,w21,ror#14
++ and w17,w22,w21
++ bic w28,w23,w21
++ add w24,w24,w14
++ orr w17,w17,w28
++ eor w28,w25,w26
++ eor w16,w16,w6,ror#11
++ ror w6,w25,#2
++ add w24,w24,w17
++ eor w17,w25,w25,ror#9
++ add w24,w24,w16
++ and w19,w19,w28
++ add w20,w20,w24
++ eor w19,w19,w26
++ eor w17,w6,w17,ror#13
++ add w24,w24,w19
++ ldr w19,[x30],#4
++
++
++ rev w15,w15
++
++ add w24,w24,w17
++ str w7,[sp,#0]
++ ror w16,w20,#6
++ add w23,w23,w19
++ eor w7,w20,w20,ror#14
++ and w17,w21,w20
++ bic w19,w22,w20
++ add w23,w23,w15
++ orr w17,w17,w19
++ eor w19,w24,w25
++ eor w16,w16,w7,ror#11
++ ror w7,w24,#2
++ add w23,w23,w17
++ eor w17,w24,w24,ror#9
++ add w23,w23,w16
++ and w28,w28,w19
++ add w27,w27,w23
++ eor w28,w28,w25
++ eor w17,w7,w17,ror#13
++ add w23,w23,w28
++ ldr w28,[x30],#4
++
++
++ rev w0,w0
++
++ ldp w1,w2,[x1]
++ add w23,w23,w17
++ str w8,[sp,#4]
++ ror w16,w27,#6
++ add w22,w22,w28
++ eor w8,w27,w27,ror#14
++ and w17,w20,w27
++ bic w28,w21,w27
++ add w22,w22,w0
++ orr w17,w17,w28
++ eor w28,w23,w24
++ eor w16,w16,w8,ror#11
++ ror w8,w23,#2
++ add w22,w22,w17
++ eor w17,w23,w23,ror#9
++ add w22,w22,w16
++ and w19,w19,w28
++ add w26,w26,w22
++ eor w19,w19,w24
++ eor w17,w8,w17,ror#13
++ add w22,w22,w19
++ ldr w19,[x30],#4
++
++
++ rev w1,w1
++
++ ldr w6,[sp,#12]
++ add w22,w22,w17
++ str w9,[sp,#8]
++ ror w16,w26,#6
++ add w21,w21,w19
++ eor w9,w26,w26,ror#14
++ and w17,w27,w26
++ bic w19,w20,w26
++ add w21,w21,w1
++ orr w17,w17,w19
++ eor w19,w22,w23
++ eor w16,w16,w9,ror#11
++ ror w9,w22,#2
++ add w21,w21,w17
++ eor w17,w22,w22,ror#9
++ add w21,w21,w16
++ and w28,w28,w19
++ add w25,w25,w21
++ eor w28,w28,w23
++ eor w17,w9,w17,ror#13
++ add w21,w21,w28
++ ldr w28,[x30],#4
++
++
++ rev w2,w2
++
++ ldr w7,[sp,#0]
++ add w21,w21,w17
++ str w10,[sp,#12]
++ ror w16,w25,#6
++ add w20,w20,w28
++ ror w9,w4,#7
++ and w17,w26,w25
++ ror w8,w1,#17
++ bic w28,w27,w25
++ ror w10,w21,#2
++ add w20,w20,w2
++ eor w16,w16,w25,ror#11
++ eor w9,w9,w4,ror#18
++ orr w17,w17,w28
++ eor w28,w21,w22
++ eor w16,w16,w25,ror#25
++ eor w10,w10,w21,ror#13
++ add w20,w20,w17
++ and w19,w19,w28
++ eor w8,w8,w1,ror#19
++ eor w9,w9,w4,lsr#3
++ add w20,w20,w16
++ eor w19,w19,w22
++ eor w17,w10,w21,ror#22
++ eor w8,w8,w1,lsr#10
++ add w3,w3,w12
++ add w24,w24,w20
++ add w20,w20,w19
++ ldr w19,[x30],#4
++ add w3,w3,w9
++ add w20,w20,w17
++ add w3,w3,w8
++Loop_16_xx:
++ ldr w8,[sp,#4]
++ str w11,[sp,#0]
++ ror w16,w24,#6
++ add w27,w27,w19
++ ror w10,w5,#7
++ and w17,w25,w24
++ ror w9,w2,#17
++ bic w19,w26,w24
++ ror w11,w20,#2
++ add w27,w27,w3
++ eor w16,w16,w24,ror#11
++ eor w10,w10,w5,ror#18
++ orr w17,w17,w19
++ eor w19,w20,w21
++ eor w16,w16,w24,ror#25
++ eor w11,w11,w20,ror#13
++ add w27,w27,w17
++ and w28,w28,w19
++ eor w9,w9,w2,ror#19
++ eor w10,w10,w5,lsr#3
++ add w27,w27,w16
++ eor w28,w28,w21
++ eor w17,w11,w20,ror#22
++ eor w9,w9,w2,lsr#10
++ add w4,w4,w13
++ add w23,w23,w27
++ add w27,w27,w28
++ ldr w28,[x30],#4
++ add w4,w4,w10
++ add w27,w27,w17
++ add w4,w4,w9
++ ldr w9,[sp,#8]
++ str w12,[sp,#4]
++ ror w16,w23,#6
++ add w26,w26,w28
++ ror w11,w6,#7
++ and w17,w24,w23
++ ror w10,w3,#17
++ bic w28,w25,w23
++ ror w12,w27,#2
++ add w26,w26,w4
++ eor w16,w16,w23,ror#11
++ eor w11,w11,w6,ror#18
++ orr w17,w17,w28
++ eor w28,w27,w20
++ eor w16,w16,w23,ror#25
++ eor w12,w12,w27,ror#13
++ add w26,w26,w17
++ and w19,w19,w28
++ eor w10,w10,w3,ror#19
++ eor w11,w11,w6,lsr#3
++ add w26,w26,w16
++ eor w19,w19,w20
++ eor w17,w12,w27,ror#22
++ eor w10,w10,w3,lsr#10
++ add w5,w5,w14
++ add w22,w22,w26
++ add w26,w26,w19
++ ldr w19,[x30],#4
++ add w5,w5,w11
++ add w26,w26,w17
++ add w5,w5,w10
++ ldr w10,[sp,#12]
++ str w13,[sp,#8]
++ ror w16,w22,#6
++ add w25,w25,w19
++ ror w12,w7,#7
++ and w17,w23,w22
++ ror w11,w4,#17
++ bic w19,w24,w22
++ ror w13,w26,#2
++ add w25,w25,w5
++ eor w16,w16,w22,ror#11
++ eor w12,w12,w7,ror#18
++ orr w17,w17,w19
++ eor w19,w26,w27
++ eor w16,w16,w22,ror#25
++ eor w13,w13,w26,ror#13
++ add w25,w25,w17
++ and w28,w28,w19
++ eor w11,w11,w4,ror#19
++ eor w12,w12,w7,lsr#3
++ add w25,w25,w16
++ eor w28,w28,w27
++ eor w17,w13,w26,ror#22
++ eor w11,w11,w4,lsr#10
++ add w6,w6,w15
++ add w21,w21,w25
++ add w25,w25,w28
++ ldr w28,[x30],#4
++ add w6,w6,w12
++ add w25,w25,w17
++ add w6,w6,w11
++ ldr w11,[sp,#0]
++ str w14,[sp,#12]
++ ror w16,w21,#6
++ add w24,w24,w28
++ ror w13,w8,#7
++ and w17,w22,w21
++ ror w12,w5,#17
++ bic w28,w23,w21
++ ror w14,w25,#2
++ add w24,w24,w6
++ eor w16,w16,w21,ror#11
++ eor w13,w13,w8,ror#18
++ orr w17,w17,w28
++ eor w28,w25,w26
++ eor w16,w16,w21,ror#25
++ eor w14,w14,w25,ror#13
++ add w24,w24,w17
++ and w19,w19,w28
++ eor w12,w12,w5,ror#19
++ eor w13,w13,w8,lsr#3
++ add w24,w24,w16
++ eor w19,w19,w26
++ eor w17,w14,w25,ror#22
++ eor w12,w12,w5,lsr#10
++ add w7,w7,w0
++ add w20,w20,w24
++ add w24,w24,w19
++ ldr w19,[x30],#4
++ add w7,w7,w13
++ add w24,w24,w17
++ add w7,w7,w12
++ ldr w12,[sp,#4]
++ str w15,[sp,#0]
++ ror w16,w20,#6
++ add w23,w23,w19
++ ror w14,w9,#7
++ and w17,w21,w20
++ ror w13,w6,#17
++ bic w19,w22,w20
++ ror w15,w24,#2
++ add w23,w23,w7
++ eor w16,w16,w20,ror#11
++ eor w14,w14,w9,ror#18
++ orr w17,w17,w19
++ eor w19,w24,w25
++ eor w16,w16,w20,ror#25
++ eor w15,w15,w24,ror#13
++ add w23,w23,w17
++ and w28,w28,w19
++ eor w13,w13,w6,ror#19
++ eor w14,w14,w9,lsr#3
++ add w23,w23,w16
++ eor w28,w28,w25
++ eor w17,w15,w24,ror#22
++ eor w13,w13,w6,lsr#10
++ add w8,w8,w1
++ add w27,w27,w23
++ add w23,w23,w28
++ ldr w28,[x30],#4
++ add w8,w8,w14
++ add w23,w23,w17
++ add w8,w8,w13
++ ldr w13,[sp,#8]
++ str w0,[sp,#4]
++ ror w16,w27,#6
++ add w22,w22,w28
++ ror w15,w10,#7
++ and w17,w20,w27
++ ror w14,w7,#17
++ bic w28,w21,w27
++ ror w0,w23,#2
++ add w22,w22,w8
++ eor w16,w16,w27,ror#11
++ eor w15,w15,w10,ror#18
++ orr w17,w17,w28
++ eor w28,w23,w24
++ eor w16,w16,w27,ror#25
++ eor w0,w0,w23,ror#13
++ add w22,w22,w17
++ and w19,w19,w28
++ eor w14,w14,w7,ror#19
++ eor w15,w15,w10,lsr#3
++ add w22,w22,w16
++ eor w19,w19,w24
++ eor w17,w0,w23,ror#22
++ eor w14,w14,w7,lsr#10
++ add w9,w9,w2
++ add w26,w26,w22
++ add w22,w22,w19
++ ldr w19,[x30],#4
++ add w9,w9,w15
++ add w22,w22,w17
++ add w9,w9,w14
++ ldr w14,[sp,#12]
++ str w1,[sp,#8]
++ ror w16,w26,#6
++ add w21,w21,w19
++ ror w0,w11,#7
++ and w17,w27,w26
++ ror w15,w8,#17
++ bic w19,w20,w26
++ ror w1,w22,#2
++ add w21,w21,w9
++ eor w16,w16,w26,ror#11
++ eor w0,w0,w11,ror#18
++ orr w17,w17,w19
++ eor w19,w22,w23
++ eor w16,w16,w26,ror#25
++ eor w1,w1,w22,ror#13
++ add w21,w21,w17
++ and w28,w28,w19
++ eor w15,w15,w8,ror#19
++ eor w0,w0,w11,lsr#3
++ add w21,w21,w16
++ eor w28,w28,w23
++ eor w17,w1,w22,ror#22
++ eor w15,w15,w8,lsr#10
++ add w10,w10,w3
++ add w25,w25,w21
++ add w21,w21,w28
++ ldr w28,[x30],#4
++ add w10,w10,w0
++ add w21,w21,w17
++ add w10,w10,w15
++ ldr w15,[sp,#0]
++ str w2,[sp,#12]
++ ror w16,w25,#6
++ add w20,w20,w28
++ ror w1,w12,#7
++ and w17,w26,w25
++ ror w0,w9,#17
++ bic w28,w27,w25
++ ror w2,w21,#2
++ add w20,w20,w10
++ eor w16,w16,w25,ror#11
++ eor w1,w1,w12,ror#18
++ orr w17,w17,w28
++ eor w28,w21,w22
++ eor w16,w16,w25,ror#25
++ eor w2,w2,w21,ror#13
++ add w20,w20,w17
++ and w19,w19,w28
++ eor w0,w0,w9,ror#19
++ eor w1,w1,w12,lsr#3
++ add w20,w20,w16
++ eor w19,w19,w22
++ eor w17,w2,w21,ror#22
++ eor w0,w0,w9,lsr#10
++ add w11,w11,w4
++ add w24,w24,w20
++ add w20,w20,w19
++ ldr w19,[x30],#4
++ add w11,w11,w1
++ add w20,w20,w17
++ add w11,w11,w0
++ ldr w0,[sp,#4]
++ str w3,[sp,#0]
++ ror w16,w24,#6
++ add w27,w27,w19
++ ror w2,w13,#7
++ and w17,w25,w24
++ ror w1,w10,#17
++ bic w19,w26,w24
++ ror w3,w20,#2
++ add w27,w27,w11
++ eor w16,w16,w24,ror#11
++ eor w2,w2,w13,ror#18
++ orr w17,w17,w19
++ eor w19,w20,w21
++ eor w16,w16,w24,ror#25
++ eor w3,w3,w20,ror#13
++ add w27,w27,w17
++ and w28,w28,w19
++ eor w1,w1,w10,ror#19
++ eor w2,w2,w13,lsr#3
++ add w27,w27,w16
++ eor w28,w28,w21
++ eor w17,w3,w20,ror#22
++ eor w1,w1,w10,lsr#10
++ add w12,w12,w5
++ add w23,w23,w27
++ add w27,w27,w28
++ ldr w28,[x30],#4
++ add w12,w12,w2
++ add w27,w27,w17
++ add w12,w12,w1
++ ldr w1,[sp,#8]
++ str w4,[sp,#4]
++ ror w16,w23,#6
++ add w26,w26,w28
++ ror w3,w14,#7
++ and w17,w24,w23
++ ror w2,w11,#17
++ bic w28,w25,w23
++ ror w4,w27,#2
++ add w26,w26,w12
++ eor w16,w16,w23,ror#11
++ eor w3,w3,w14,ror#18
++ orr w17,w17,w28
++ eor w28,w27,w20
++ eor w16,w16,w23,ror#25
++ eor w4,w4,w27,ror#13
++ add w26,w26,w17
++ and w19,w19,w28
++ eor w2,w2,w11,ror#19
++ eor w3,w3,w14,lsr#3
++ add w26,w26,w16
++ eor w19,w19,w20
++ eor w17,w4,w27,ror#22
++ eor w2,w2,w11,lsr#10
++ add w13,w13,w6
++ add w22,w22,w26
++ add w26,w26,w19
++ ldr w19,[x30],#4
++ add w13,w13,w3
++ add w26,w26,w17
++ add w13,w13,w2
++ ldr w2,[sp,#12]
++ str w5,[sp,#8]
++ ror w16,w22,#6
++ add w25,w25,w19
++ ror w4,w15,#7
++ and w17,w23,w22
++ ror w3,w12,#17
++ bic w19,w24,w22
++ ror w5,w26,#2
++ add w25,w25,w13
++ eor w16,w16,w22,ror#11
++ eor w4,w4,w15,ror#18
++ orr w17,w17,w19
++ eor w19,w26,w27
++ eor w16,w16,w22,ror#25
++ eor w5,w5,w26,ror#13
++ add w25,w25,w17
++ and w28,w28,w19
++ eor w3,w3,w12,ror#19
++ eor w4,w4,w15,lsr#3
++ add w25,w25,w16
++ eor w28,w28,w27
++ eor w17,w5,w26,ror#22
++ eor w3,w3,w12,lsr#10
++ add w14,w14,w7
++ add w21,w21,w25
++ add w25,w25,w28
++ ldr w28,[x30],#4
++ add w14,w14,w4
++ add w25,w25,w17
++ add w14,w14,w3
++ ldr w3,[sp,#0]
++ str w6,[sp,#12]
++ ror w16,w21,#6
++ add w24,w24,w28
++ ror w5,w0,#7
++ and w17,w22,w21
++ ror w4,w13,#17
++ bic w28,w23,w21
++ ror w6,w25,#2
++ add w24,w24,w14
++ eor w16,w16,w21,ror#11
++ eor w5,w5,w0,ror#18
++ orr w17,w17,w28
++ eor w28,w25,w26
++ eor w16,w16,w21,ror#25
++ eor w6,w6,w25,ror#13
++ add w24,w24,w17
++ and w19,w19,w28
++ eor w4,w4,w13,ror#19
++ eor w5,w5,w0,lsr#3
++ add w24,w24,w16
++ eor w19,w19,w26
++ eor w17,w6,w25,ror#22
++ eor w4,w4,w13,lsr#10
++ add w15,w15,w8
++ add w20,w20,w24
++ add w24,w24,w19
++ ldr w19,[x30],#4
++ add w15,w15,w5
++ add w24,w24,w17
++ add w15,w15,w4
++ ldr w4,[sp,#4]
++ str w7,[sp,#0]
++ ror w16,w20,#6
++ add w23,w23,w19
++ ror w6,w1,#7
++ and w17,w21,w20
++ ror w5,w14,#17
++ bic w19,w22,w20
++ ror w7,w24,#2
++ add w23,w23,w15
++ eor w16,w16,w20,ror#11
++ eor w6,w6,w1,ror#18
++ orr w17,w17,w19
++ eor w19,w24,w25
++ eor w16,w16,w20,ror#25
++ eor w7,w7,w24,ror#13
++ add w23,w23,w17
++ and w28,w28,w19
++ eor w5,w5,w14,ror#19
++ eor w6,w6,w1,lsr#3
++ add w23,w23,w16
++ eor w28,w28,w25
++ eor w17,w7,w24,ror#22
++ eor w5,w5,w14,lsr#10
++ add w0,w0,w9
++ add w27,w27,w23
++ add w23,w23,w28
++ ldr w28,[x30],#4
++ add w0,w0,w6
++ add w23,w23,w17
++ add w0,w0,w5
++ ldr w5,[sp,#8]
++ str w8,[sp,#4]
++ ror w16,w27,#6
++ add w22,w22,w28
++ ror w7,w2,#7
++ and w17,w20,w27
++ ror w6,w15,#17
++ bic w28,w21,w27
++ ror w8,w23,#2
++ add w22,w22,w0
++ eor w16,w16,w27,ror#11
++ eor w7,w7,w2,ror#18
++ orr w17,w17,w28
++ eor w28,w23,w24
++ eor w16,w16,w27,ror#25
++ eor w8,w8,w23,ror#13
++ add w22,w22,w17
++ and w19,w19,w28
++ eor w6,w6,w15,ror#19
++ eor w7,w7,w2,lsr#3
++ add w22,w22,w16
++ eor w19,w19,w24
++ eor w17,w8,w23,ror#22
++ eor w6,w6,w15,lsr#10
++ add w1,w1,w10
++ add w26,w26,w22
++ add w22,w22,w19
++ ldr w19,[x30],#4
++ add w1,w1,w7
++ add w22,w22,w17
++ add w1,w1,w6
++ ldr w6,[sp,#12]
++ str w9,[sp,#8]
++ ror w16,w26,#6
++ add w21,w21,w19
++ ror w8,w3,#7
++ and w17,w27,w26
++ ror w7,w0,#17
++ bic w19,w20,w26
++ ror w9,w22,#2
++ add w21,w21,w1
++ eor w16,w16,w26,ror#11
++ eor w8,w8,w3,ror#18
++ orr w17,w17,w19
++ eor w19,w22,w23
++ eor w16,w16,w26,ror#25
++ eor w9,w9,w22,ror#13
++ add w21,w21,w17
++ and w28,w28,w19
++ eor w7,w7,w0,ror#19
++ eor w8,w8,w3,lsr#3
++ add w21,w21,w16
++ eor w28,w28,w23
++ eor w17,w9,w22,ror#22
++ eor w7,w7,w0,lsr#10
++ add w2,w2,w11
++ add w25,w25,w21
++ add w21,w21,w28
++ ldr w28,[x30],#4
++ add w2,w2,w8
++ add w21,w21,w17
++ add w2,w2,w7
++ ldr w7,[sp,#0]
++ str w10,[sp,#12]
++ ror w16,w25,#6
++ add w20,w20,w28
++ ror w9,w4,#7
++ and w17,w26,w25
++ ror w8,w1,#17
++ bic w28,w27,w25
++ ror w10,w21,#2
++ add w20,w20,w2
++ eor w16,w16,w25,ror#11
++ eor w9,w9,w4,ror#18
++ orr w17,w17,w28
++ eor w28,w21,w22
++ eor w16,w16,w25,ror#25
++ eor w10,w10,w21,ror#13
++ add w20,w20,w17
++ and w19,w19,w28
++ eor w8,w8,w1,ror#19
++ eor w9,w9,w4,lsr#3
++ add w20,w20,w16
++ eor w19,w19,w22
++ eor w17,w10,w21,ror#22
++ eor w8,w8,w1,lsr#10
++ add w3,w3,w12
++ add w24,w24,w20
++ add w20,w20,w19
++ ldr w19,[x30],#4
++ add w3,w3,w9
++ add w20,w20,w17
++ add w3,w3,w8
++ cbnz w19,Loop_16_xx
++
++ ldp x0,x2,[x29,#96]
++ ldr x1,[x29,#112]
++ sub x30,x30,#260
++
++ ldp w3,w4,[x0]
++ ldp w5,w6,[x0,#2*4]
++ add x1,x1,#14*4
++ ldp w7,w8,[x0,#4*4]
++ add w20,w20,w3
++ ldp w9,w10,[x0,#6*4]
++ add w21,w21,w4
++ add w22,w22,w5
++ add w23,w23,w6
++ stp w20,w21,[x0]
++ add w24,w24,w7
++ add w25,w25,w8
++ stp w22,w23,[x0,#2*4]
++ add w26,w26,w9
++ add w27,w27,w10
++ cmp x1,x2
++ stp w24,w25,[x0,#4*4]
++ stp w26,w27,[x0,#6*4]
++ b.ne Loop
++
++ ldp x19,x20,[x29,#16]
++ add sp,sp,#4*4
++ ldp x21,x22,[x29,#32]
++ ldp x23,x24,[x29,#48]
++ ldp x25,x26,[x29,#64]
++ ldp x27,x28,[x29,#80]
++ ldp x29,x30,[sp],#128
++ ret
++
++
++.align 6
++
++LK256:
++.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
++.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
++.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
++.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
++.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
++.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
++.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
++.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
++.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
++.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
++.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
++.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
++.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
++.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
++.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
++.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
++.long 0
++
++
++.align 3
++L_gnutls_arm_cpuid_s:
++
++
++
++.quad __gnutls_arm_cpuid_s-.
++
++
++.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
++.align 2
++.align 2
++
++
++.align 6
++sha256_block_armv8:
++Lv8_entry:
++ stp x29,x30,[sp,#-16]!
++ add x29,sp,#0
++
++ ld1 {v0.4s,v1.4s},[x0]
++ adr x3,LK256
++
++Loop_hw:
++ ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
++ sub x2,x2,#1
++ ld1 {v16.4s},[x3],#16
++ rev32 v4.16b,v4.16b
++ rev32 v5.16b,v5.16b
++ rev32 v6.16b,v6.16b
++ rev32 v7.16b,v7.16b
++ orr v18.16b,v0.16b,v0.16b
++ orr v19.16b,v1.16b,v1.16b
++ ld1 {v17.4s},[x3],#16
++ add v16.4s,v16.4s,v4.4s
++.long 0x5e2828a4
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e104020
++.long 0x5e105041
++.long 0x5e0760c4
++ ld1 {v16.4s},[x3],#16
++ add v17.4s,v17.4s,v5.4s
++.long 0x5e2828c5
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e114020
++.long 0x5e115041
++.long 0x5e0460e5
++ ld1 {v17.4s},[x3],#16
++ add v16.4s,v16.4s,v6.4s
++.long 0x5e2828e6
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e104020
++.long 0x5e105041
++.long 0x5e056086
++ ld1 {v16.4s},[x3],#16
++ add v17.4s,v17.4s,v7.4s
++.long 0x5e282887
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e114020
++.long 0x5e115041
++.long 0x5e0660a7
++ ld1 {v17.4s},[x3],#16
++ add v16.4s,v16.4s,v4.4s
++.long 0x5e2828a4
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e104020
++.long 0x5e105041
++.long 0x5e0760c4
++ ld1 {v16.4s},[x3],#16
++ add v17.4s,v17.4s,v5.4s
++.long 0x5e2828c5
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e114020
++.long 0x5e115041
++.long 0x5e0460e5
++ ld1 {v17.4s},[x3],#16
++ add v16.4s,v16.4s,v6.4s
++.long 0x5e2828e6
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e104020
++.long 0x5e105041
++.long 0x5e056086
++ ld1 {v16.4s},[x3],#16
++ add v17.4s,v17.4s,v7.4s
++.long 0x5e282887
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e114020
++.long 0x5e115041
++.long 0x5e0660a7
++ ld1 {v17.4s},[x3],#16
++ add v16.4s,v16.4s,v4.4s
++.long 0x5e2828a4
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e104020
++.long 0x5e105041
++.long 0x5e0760c4
++ ld1 {v16.4s},[x3],#16
++ add v17.4s,v17.4s,v5.4s
++.long 0x5e2828c5
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e114020
++.long 0x5e115041
++.long 0x5e0460e5
++ ld1 {v17.4s},[x3],#16
++ add v16.4s,v16.4s,v6.4s
++.long 0x5e2828e6
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e104020
++.long 0x5e105041
++.long 0x5e056086
++ ld1 {v16.4s},[x3],#16
++ add v17.4s,v17.4s,v7.4s
++.long 0x5e282887
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e114020
++.long 0x5e115041
++.long 0x5e0660a7
++ ld1 {v17.4s},[x3],#16
++ add v16.4s,v16.4s,v4.4s
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e104020
++.long 0x5e105041
++
++ ld1 {v16.4s},[x3],#16
++ add v17.4s,v17.4s,v5.4s
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e114020
++.long 0x5e115041
++
++ ld1 {v17.4s},[x3]
++ add v16.4s,v16.4s,v6.4s
++ sub x3,x3,#64*4-16
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e104020
++.long 0x5e105041
++
++ add v17.4s,v17.4s,v7.4s
++ orr v2.16b,v0.16b,v0.16b
++.long 0x5e114020
++.long 0x5e115041
++
++ add v0.4s,v0.4s,v18.4s
++ add v1.4s,v1.4s,v19.4s
++
++ cbnz x2,Loop_hw
++
++ st1 {v0.4s,v1.4s},[x0]
++
++ ldr x29,[sp],#16
++ ret
++
++
++
++
++
++
++.align 4
++_sha256_block_neon:
++Lneon_entry:
++ stp x29, x30, [sp, #-16]!
++ mov x29, sp
++ sub sp,sp,#16*4
++
++ adr x16,LK256
++ add x2,x1,x2,lsl#6
++
++ ld1 {v0.16b},[x1], #16
++ ld1 {v1.16b},[x1], #16
++ ld1 {v2.16b},[x1], #16
++ ld1 {v3.16b},[x1], #16
++ ld1 {v4.4s},[x16], #16
++ ld1 {v5.4s},[x16], #16
++ ld1 {v6.4s},[x16], #16
++ ld1 {v7.4s},[x16], #16
++ rev32 v0.16b,v0.16b
++ rev32 v1.16b,v1.16b
++ rev32 v2.16b,v2.16b
++ rev32 v3.16b,v3.16b
++ mov x17,sp
++ add v4.4s,v4.4s,v0.4s
++ add v5.4s,v5.4s,v1.4s
++ add v6.4s,v6.4s,v2.4s
++ st1 {v4.4s,v5.4s},[x17], #32
++ add v7.4s,v7.4s,v3.4s
++ st1 {v6.4s,v7.4s},[x17]
++ sub x17,x17,#32
++
++ ldp w3,w4,[x0]
++ ldp w5,w6,[x0,#8]
++ ldp w7,w8,[x0,#16]
++ ldp w9,w10,[x0,#24]
++ ldr w12,[sp,#0]
++ mov w13,wzr
++ eor w14,w4,w5
++ mov w15,wzr
++ b L_00_48
++
++.align 4
++L_00_48:
++ ext v4.16b,v0.16b,v1.16b,#4
++ add w10,w10,w12
++ add w3,w3,w15
++ and w12,w8,w7
++ bic w15,w9,w7
++ ext v7.16b,v2.16b,v3.16b,#4
++ eor w11,w7,w7,ror#5
++ add w3,w3,w13
++ mov d19,v3.d[1]
++ orr w12,w12,w15
++ eor w11,w11,w7,ror#19
++ ushr v6.4s,v4.4s,#7
++ eor w15,w3,w3,ror#11
++ ushr v5.4s,v4.4s,#3
++ add w10,w10,w12
++ add v0.4s,v0.4s,v7.4s
++ ror w11,w11,#6
++ sli v6.4s,v4.4s,#25
++ eor w13,w3,w4
++ eor w15,w15,w3,ror#20
++ ushr v7.4s,v4.4s,#18
++ add w10,w10,w11
++ ldr w12,[sp,#4]
++ and w14,w14,w13
++ eor v5.16b,v5.16b,v6.16b
++ ror w15,w15,#2
++ add w6,w6,w10
++ sli v7.4s,v4.4s,#14
++ eor w14,w14,w4
++ ushr v16.4s,v19.4s,#17
++ add w9,w9,w12
++ add w10,w10,w15
++ and w12,w7,w6
++ eor v5.16b,v5.16b,v7.16b
++ bic w15,w8,w6
++ eor w11,w6,w6,ror#5
++ sli v16.4s,v19.4s,#15
++ add w10,w10,w14
++ orr w12,w12,w15
++ ushr v17.4s,v19.4s,#10
++ eor w11,w11,w6,ror#19
++ eor w15,w10,w10,ror#11
++ ushr v7.4s,v19.4s,#19
++ add w9,w9,w12
++ ror w11,w11,#6
++ add v0.4s,v0.4s,v5.4s
++ eor w14,w10,w3
++ eor w15,w15,w10,ror#20
++ sli v7.4s,v19.4s,#13
++ add w9,w9,w11
++ ldr w12,[sp,#8]
++ and w13,w13,w14
++ eor v17.16b,v17.16b,v16.16b
++ ror w15,w15,#2
++ add w5,w5,w9
++ eor w13,w13,w3
++ eor v17.16b,v17.16b,v7.16b
++ add w8,w8,w12
++ add w9,w9,w15
++ and w12,w6,w5
++ add v0.4s,v0.4s,v17.4s
++ bic w15,w7,w5
++ eor w11,w5,w5,ror#5
++ add w9,w9,w13
++ ushr v18.4s,v0.4s,#17
++ orr w12,w12,w15
++ ushr v19.4s,v0.4s,#10
++ eor w11,w11,w5,ror#19
++ eor w15,w9,w9,ror#11
++ sli v18.4s,v0.4s,#15
++ add w8,w8,w12
++ ushr v17.4s,v0.4s,#19
++ ror w11,w11,#6
++ eor w13,w9,w10
++ eor v19.16b,v19.16b,v18.16b
++ eor w15,w15,w9,ror#20
++ add w8,w8,w11
++ sli v17.4s,v0.4s,#13
++ ldr w12,[sp,#12]
++ and w14,w14,w13
++ ror w15,w15,#2
++ ld1 {v4.4s},[x16], #16
++ add w4,w4,w8
++ eor v19.16b,v19.16b,v17.16b
++ eor w14,w14,w10
++ eor v17.16b,v17.16b,v17.16b
++ add w7,w7,w12
++ add w8,w8,w15
++ and w12,w5,w4
++ mov v17.d[1],v19.d[0]
++ bic w15,w6,w4
++ eor w11,w4,w4,ror#5
++ add w8,w8,w14
++ add v0.4s,v0.4s,v17.4s
++ orr w12,w12,w15
++ eor w11,w11,w4,ror#19
++ eor w15,w8,w8,ror#11
++ add v4.4s,v4.4s,v0.4s
++ add w7,w7,w12
++ ror w11,w11,#6
++ eor w14,w8,w9
++ eor w15,w15,w8,ror#20
++ add w7,w7,w11
++ ldr w12,[sp,#16]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w3,w3,w7
++ eor w13,w13,w9
++ st1 {v4.4s},[x17], #16
++ ext v4.16b,v1.16b,v2.16b,#4
++ add w6,w6,w12
++ add w7,w7,w15
++ and w12,w4,w3
++ bic w15,w5,w3
++ ext v7.16b,v3.16b,v0.16b,#4
++ eor w11,w3,w3,ror#5
++ add w7,w7,w13
++ mov d19,v0.d[1]
++ orr w12,w12,w15
++ eor w11,w11,w3,ror#19
++ ushr v6.4s,v4.4s,#7
++ eor w15,w7,w7,ror#11
++ ushr v5.4s,v4.4s,#3
++ add w6,w6,w12
++ add v1.4s,v1.4s,v7.4s
++ ror w11,w11,#6
++ sli v6.4s,v4.4s,#25
++ eor w13,w7,w8
++ eor w15,w15,w7,ror#20
++ ushr v7.4s,v4.4s,#18
++ add w6,w6,w11
++ ldr w12,[sp,#20]
++ and w14,w14,w13
++ eor v5.16b,v5.16b,v6.16b
++ ror w15,w15,#2
++ add w10,w10,w6
++ sli v7.4s,v4.4s,#14
++ eor w14,w14,w8
++ ushr v16.4s,v19.4s,#17
++ add w5,w5,w12
++ add w6,w6,w15
++ and w12,w3,w10
++ eor v5.16b,v5.16b,v7.16b
++ bic w15,w4,w10
++ eor w11,w10,w10,ror#5
++ sli v16.4s,v19.4s,#15
++ add w6,w6,w14
++ orr w12,w12,w15
++ ushr v17.4s,v19.4s,#10
++ eor w11,w11,w10,ror#19
++ eor w15,w6,w6,ror#11
++ ushr v7.4s,v19.4s,#19
++ add w5,w5,w12
++ ror w11,w11,#6
++ add v1.4s,v1.4s,v5.4s
++ eor w14,w6,w7
++ eor w15,w15,w6,ror#20
++ sli v7.4s,v19.4s,#13
++ add w5,w5,w11
++ ldr w12,[sp,#24]
++ and w13,w13,w14
++ eor v17.16b,v17.16b,v16.16b
++ ror w15,w15,#2
++ add w9,w9,w5
++ eor w13,w13,w7
++ eor v17.16b,v17.16b,v7.16b
++ add w4,w4,w12
++ add w5,w5,w15
++ and w12,w10,w9
++ add v1.4s,v1.4s,v17.4s
++ bic w15,w3,w9
++ eor w11,w9,w9,ror#5
++ add w5,w5,w13
++ ushr v18.4s,v1.4s,#17
++ orr w12,w12,w15
++ ushr v19.4s,v1.4s,#10
++ eor w11,w11,w9,ror#19
++ eor w15,w5,w5,ror#11
++ sli v18.4s,v1.4s,#15
++ add w4,w4,w12
++ ushr v17.4s,v1.4s,#19
++ ror w11,w11,#6
++ eor w13,w5,w6
++ eor v19.16b,v19.16b,v18.16b
++ eor w15,w15,w5,ror#20
++ add w4,w4,w11
++ sli v17.4s,v1.4s,#13
++ ldr w12,[sp,#28]
++ and w14,w14,w13
++ ror w15,w15,#2
++ ld1 {v4.4s},[x16], #16
++ add w8,w8,w4
++ eor v19.16b,v19.16b,v17.16b
++ eor w14,w14,w6
++ eor v17.16b,v17.16b,v17.16b
++ add w3,w3,w12
++ add w4,w4,w15
++ and w12,w9,w8
++ mov v17.d[1],v19.d[0]
++ bic w15,w10,w8
++ eor w11,w8,w8,ror#5
++ add w4,w4,w14
++ add v1.4s,v1.4s,v17.4s
++ orr w12,w12,w15
++ eor w11,w11,w8,ror#19
++ eor w15,w4,w4,ror#11
++ add v4.4s,v4.4s,v1.4s
++ add w3,w3,w12
++ ror w11,w11,#6
++ eor w14,w4,w5
++ eor w15,w15,w4,ror#20
++ add w3,w3,w11
++ ldr w12,[sp,#32]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w7,w7,w3
++ eor w13,w13,w5
++ st1 {v4.4s},[x17], #16
++ ext v4.16b,v2.16b,v3.16b,#4
++ add w10,w10,w12
++ add w3,w3,w15
++ and w12,w8,w7
++ bic w15,w9,w7
++ ext v7.16b,v0.16b,v1.16b,#4
++ eor w11,w7,w7,ror#5
++ add w3,w3,w13
++ mov d19,v1.d[1]
++ orr w12,w12,w15
++ eor w11,w11,w7,ror#19
++ ushr v6.4s,v4.4s,#7
++ eor w15,w3,w3,ror#11
++ ushr v5.4s,v4.4s,#3
++ add w10,w10,w12
++ add v2.4s,v2.4s,v7.4s
++ ror w11,w11,#6
++ sli v6.4s,v4.4s,#25
++ eor w13,w3,w4
++ eor w15,w15,w3,ror#20
++ ushr v7.4s,v4.4s,#18
++ add w10,w10,w11
++ ldr w12,[sp,#36]
++ and w14,w14,w13
++ eor v5.16b,v5.16b,v6.16b
++ ror w15,w15,#2
++ add w6,w6,w10
++ sli v7.4s,v4.4s,#14
++ eor w14,w14,w4
++ ushr v16.4s,v19.4s,#17
++ add w9,w9,w12
++ add w10,w10,w15
++ and w12,w7,w6
++ eor v5.16b,v5.16b,v7.16b
++ bic w15,w8,w6
++ eor w11,w6,w6,ror#5
++ sli v16.4s,v19.4s,#15
++ add w10,w10,w14
++ orr w12,w12,w15
++ ushr v17.4s,v19.4s,#10
++ eor w11,w11,w6,ror#19
++ eor w15,w10,w10,ror#11
++ ushr v7.4s,v19.4s,#19
++ add w9,w9,w12
++ ror w11,w11,#6
++ add v2.4s,v2.4s,v5.4s
++ eor w14,w10,w3
++ eor w15,w15,w10,ror#20
++ sli v7.4s,v19.4s,#13
++ add w9,w9,w11
++ ldr w12,[sp,#40]
++ and w13,w13,w14
++ eor v17.16b,v17.16b,v16.16b
++ ror w15,w15,#2
++ add w5,w5,w9
++ eor w13,w13,w3
++ eor v17.16b,v17.16b,v7.16b
++ add w8,w8,w12
++ add w9,w9,w15
++ and w12,w6,w5
++ add v2.4s,v2.4s,v17.4s
++ bic w15,w7,w5
++ eor w11,w5,w5,ror#5
++ add w9,w9,w13
++ ushr v18.4s,v2.4s,#17
++ orr w12,w12,w15
++ ushr v19.4s,v2.4s,#10
++ eor w11,w11,w5,ror#19
++ eor w15,w9,w9,ror#11
++ sli v18.4s,v2.4s,#15
++ add w8,w8,w12
++ ushr v17.4s,v2.4s,#19
++ ror w11,w11,#6
++ eor w13,w9,w10
++ eor v19.16b,v19.16b,v18.16b
++ eor w15,w15,w9,ror#20
++ add w8,w8,w11
++ sli v17.4s,v2.4s,#13
++ ldr w12,[sp,#44]
++ and w14,w14,w13
++ ror w15,w15,#2
++ ld1 {v4.4s},[x16], #16
++ add w4,w4,w8
++ eor v19.16b,v19.16b,v17.16b
++ eor w14,w14,w10
++ eor v17.16b,v17.16b,v17.16b
++ add w7,w7,w12
++ add w8,w8,w15
++ and w12,w5,w4
++ mov v17.d[1],v19.d[0]
++ bic w15,w6,w4
++ eor w11,w4,w4,ror#5
++ add w8,w8,w14
++ add v2.4s,v2.4s,v17.4s
++ orr w12,w12,w15
++ eor w11,w11,w4,ror#19
++ eor w15,w8,w8,ror#11
++ add v4.4s,v4.4s,v2.4s
++ add w7,w7,w12
++ ror w11,w11,#6
++ eor w14,w8,w9
++ eor w15,w15,w8,ror#20
++ add w7,w7,w11
++ ldr w12,[sp,#48]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w3,w3,w7
++ eor w13,w13,w9
++ st1 {v4.4s},[x17], #16
++ ext v4.16b,v3.16b,v0.16b,#4
++ add w6,w6,w12
++ add w7,w7,w15
++ and w12,w4,w3
++ bic w15,w5,w3
++ ext v7.16b,v1.16b,v2.16b,#4
++ eor w11,w3,w3,ror#5
++ add w7,w7,w13
++ mov d19,v2.d[1]
++ orr w12,w12,w15
++ eor w11,w11,w3,ror#19
++ ushr v6.4s,v4.4s,#7
++ eor w15,w7,w7,ror#11
++ ushr v5.4s,v4.4s,#3
++ add w6,w6,w12
++ add v3.4s,v3.4s,v7.4s
++ ror w11,w11,#6
++ sli v6.4s,v4.4s,#25
++ eor w13,w7,w8
++ eor w15,w15,w7,ror#20
++ ushr v7.4s,v4.4s,#18
++ add w6,w6,w11
++ ldr w12,[sp,#52]
++ and w14,w14,w13
++ eor v5.16b,v5.16b,v6.16b
++ ror w15,w15,#2
++ add w10,w10,w6
++ sli v7.4s,v4.4s,#14
++ eor w14,w14,w8
++ ushr v16.4s,v19.4s,#17
++ add w5,w5,w12
++ add w6,w6,w15
++ and w12,w3,w10
++ eor v5.16b,v5.16b,v7.16b
++ bic w15,w4,w10
++ eor w11,w10,w10,ror#5
++ sli v16.4s,v19.4s,#15
++ add w6,w6,w14
++ orr w12,w12,w15
++ ushr v17.4s,v19.4s,#10
++ eor w11,w11,w10,ror#19
++ eor w15,w6,w6,ror#11
++ ushr v7.4s,v19.4s,#19
++ add w5,w5,w12
++ ror w11,w11,#6
++ add v3.4s,v3.4s,v5.4s
++ eor w14,w6,w7
++ eor w15,w15,w6,ror#20
++ sli v7.4s,v19.4s,#13
++ add w5,w5,w11
++ ldr w12,[sp,#56]
++ and w13,w13,w14
++ eor v17.16b,v17.16b,v16.16b
++ ror w15,w15,#2
++ add w9,w9,w5
++ eor w13,w13,w7
++ eor v17.16b,v17.16b,v7.16b
++ add w4,w4,w12
++ add w5,w5,w15
++ and w12,w10,w9
++ add v3.4s,v3.4s,v17.4s
++ bic w15,w3,w9
++ eor w11,w9,w9,ror#5
++ add w5,w5,w13
++ ushr v18.4s,v3.4s,#17
++ orr w12,w12,w15
++ ushr v19.4s,v3.4s,#10
++ eor w11,w11,w9,ror#19
++ eor w15,w5,w5,ror#11
++ sli v18.4s,v3.4s,#15
++ add w4,w4,w12
++ ushr v17.4s,v3.4s,#19
++ ror w11,w11,#6
++ eor w13,w5,w6
++ eor v19.16b,v19.16b,v18.16b
++ eor w15,w15,w5,ror#20
++ add w4,w4,w11
++ sli v17.4s,v3.4s,#13
++ ldr w12,[sp,#60]
++ and w14,w14,w13
++ ror w15,w15,#2
++ ld1 {v4.4s},[x16], #16
++ add w8,w8,w4
++ eor v19.16b,v19.16b,v17.16b
++ eor w14,w14,w6
++ eor v17.16b,v17.16b,v17.16b
++ add w3,w3,w12
++ add w4,w4,w15
++ and w12,w9,w8
++ mov v17.d[1],v19.d[0]
++ bic w15,w10,w8
++ eor w11,w8,w8,ror#5
++ add w4,w4,w14
++ add v3.4s,v3.4s,v17.4s
++ orr w12,w12,w15
++ eor w11,w11,w8,ror#19
++ eor w15,w4,w4,ror#11
++ add v4.4s,v4.4s,v3.4s
++ add w3,w3,w12
++ ror w11,w11,#6
++ eor w14,w4,w5
++ eor w15,w15,w4,ror#20
++ add w3,w3,w11
++ ldr w12,[x16]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w7,w7,w3
++ eor w13,w13,w5
++ st1 {v4.4s},[x17], #16
++ cmp w12,#0
++ ldr w12,[sp,#0]
++ sub x17,x17,#64
++ bne L_00_48
++
++ sub x16,x16,#256
++ cmp x1,x2
++ mov x17, #64
++ csel x17, x17, xzr, eq
++ sub x1,x1,x17
++ mov x17,sp
++ add w10,w10,w12
++ add w3,w3,w15
++ and w12,w8,w7
++ ld1 {v0.16b},[x1],#16
++ bic w15,w9,w7
++ eor w11,w7,w7,ror#5
++ ld1 {v4.4s},[x16],#16
++ add w3,w3,w13
++ orr w12,w12,w15
++ eor w11,w11,w7,ror#19
++ eor w15,w3,w3,ror#11
++ rev32 v0.16b,v0.16b
++ add w10,w10,w12
++ ror w11,w11,#6
++ eor w13,w3,w4
++ eor w15,w15,w3,ror#20
++ add v4.4s,v4.4s,v0.4s
++ add w10,w10,w11
++ ldr w12,[sp,#4]
++ and w14,w14,w13
++ ror w15,w15,#2
++ add w6,w6,w10
++ eor w14,w14,w4
++ add w9,w9,w12
++ add w10,w10,w15
++ and w12,w7,w6
++ bic w15,w8,w6
++ eor w11,w6,w6,ror#5
++ add w10,w10,w14
++ orr w12,w12,w15
++ eor w11,w11,w6,ror#19
++ eor w15,w10,w10,ror#11
++ add w9,w9,w12
++ ror w11,w11,#6
++ eor w14,w10,w3
++ eor w15,w15,w10,ror#20
++ add w9,w9,w11
++ ldr w12,[sp,#8]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w5,w5,w9
++ eor w13,w13,w3
++ add w8,w8,w12
++ add w9,w9,w15
++ and w12,w6,w5
++ bic w15,w7,w5
++ eor w11,w5,w5,ror#5
++ add w9,w9,w13
++ orr w12,w12,w15
++ eor w11,w11,w5,ror#19
++ eor w15,w9,w9,ror#11
++ add w8,w8,w12
++ ror w11,w11,#6
++ eor w13,w9,w10
++ eor w15,w15,w9,ror#20
++ add w8,w8,w11
++ ldr w12,[sp,#12]
++ and w14,w14,w13
++ ror w15,w15,#2
++ add w4,w4,w8
++ eor w14,w14,w10
++ add w7,w7,w12
++ add w8,w8,w15
++ and w12,w5,w4
++ bic w15,w6,w4
++ eor w11,w4,w4,ror#5
++ add w8,w8,w14
++ orr w12,w12,w15
++ eor w11,w11,w4,ror#19
++ eor w15,w8,w8,ror#11
++ add w7,w7,w12
++ ror w11,w11,#6
++ eor w14,w8,w9
++ eor w15,w15,w8,ror#20
++ add w7,w7,w11
++ ldr w12,[sp,#16]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w3,w3,w7
++ eor w13,w13,w9
++ st1 {v4.4s},[x17], #16
++ add w6,w6,w12
++ add w7,w7,w15
++ and w12,w4,w3
++ ld1 {v1.16b},[x1],#16
++ bic w15,w5,w3
++ eor w11,w3,w3,ror#5
++ ld1 {v4.4s},[x16],#16
++ add w7,w7,w13
++ orr w12,w12,w15
++ eor w11,w11,w3,ror#19
++ eor w15,w7,w7,ror#11
++ rev32 v1.16b,v1.16b
++ add w6,w6,w12
++ ror w11,w11,#6
++ eor w13,w7,w8
++ eor w15,w15,w7,ror#20
++ add v4.4s,v4.4s,v1.4s
++ add w6,w6,w11
++ ldr w12,[sp,#20]
++ and w14,w14,w13
++ ror w15,w15,#2
++ add w10,w10,w6
++ eor w14,w14,w8
++ add w5,w5,w12
++ add w6,w6,w15
++ and w12,w3,w10
++ bic w15,w4,w10
++ eor w11,w10,w10,ror#5
++ add w6,w6,w14
++ orr w12,w12,w15
++ eor w11,w11,w10,ror#19
++ eor w15,w6,w6,ror#11
++ add w5,w5,w12
++ ror w11,w11,#6
++ eor w14,w6,w7
++ eor w15,w15,w6,ror#20
++ add w5,w5,w11
++ ldr w12,[sp,#24]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w9,w9,w5
++ eor w13,w13,w7
++ add w4,w4,w12
++ add w5,w5,w15
++ and w12,w10,w9
++ bic w15,w3,w9
++ eor w11,w9,w9,ror#5
++ add w5,w5,w13
++ orr w12,w12,w15
++ eor w11,w11,w9,ror#19
++ eor w15,w5,w5,ror#11
++ add w4,w4,w12
++ ror w11,w11,#6
++ eor w13,w5,w6
++ eor w15,w15,w5,ror#20
++ add w4,w4,w11
++ ldr w12,[sp,#28]
++ and w14,w14,w13
++ ror w15,w15,#2
++ add w8,w8,w4
++ eor w14,w14,w6
++ add w3,w3,w12
++ add w4,w4,w15
++ and w12,w9,w8
++ bic w15,w10,w8
++ eor w11,w8,w8,ror#5
++ add w4,w4,w14
++ orr w12,w12,w15
++ eor w11,w11,w8,ror#19
++ eor w15,w4,w4,ror#11
++ add w3,w3,w12
++ ror w11,w11,#6
++ eor w14,w4,w5
++ eor w15,w15,w4,ror#20
++ add w3,w3,w11
++ ldr w12,[sp,#32]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w7,w7,w3
++ eor w13,w13,w5
++ st1 {v4.4s},[x17], #16
++ add w10,w10,w12
++ add w3,w3,w15
++ and w12,w8,w7
++ ld1 {v2.16b},[x1],#16
++ bic w15,w9,w7
++ eor w11,w7,w7,ror#5
++ ld1 {v4.4s},[x16],#16
++ add w3,w3,w13
++ orr w12,w12,w15
++ eor w11,w11,w7,ror#19
++ eor w15,w3,w3,ror#11
++ rev32 v2.16b,v2.16b
++ add w10,w10,w12
++ ror w11,w11,#6
++ eor w13,w3,w4
++ eor w15,w15,w3,ror#20
++ add v4.4s,v4.4s,v2.4s
++ add w10,w10,w11
++ ldr w12,[sp,#36]
++ and w14,w14,w13
++ ror w15,w15,#2
++ add w6,w6,w10
++ eor w14,w14,w4
++ add w9,w9,w12
++ add w10,w10,w15
++ and w12,w7,w6
++ bic w15,w8,w6
++ eor w11,w6,w6,ror#5
++ add w10,w10,w14
++ orr w12,w12,w15
++ eor w11,w11,w6,ror#19
++ eor w15,w10,w10,ror#11
++ add w9,w9,w12
++ ror w11,w11,#6
++ eor w14,w10,w3
++ eor w15,w15,w10,ror#20
++ add w9,w9,w11
++ ldr w12,[sp,#40]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w5,w5,w9
++ eor w13,w13,w3
++ add w8,w8,w12
++ add w9,w9,w15
++ and w12,w6,w5
++ bic w15,w7,w5
++ eor w11,w5,w5,ror#5
++ add w9,w9,w13
++ orr w12,w12,w15
++ eor w11,w11,w5,ror#19
++ eor w15,w9,w9,ror#11
++ add w8,w8,w12
++ ror w11,w11,#6
++ eor w13,w9,w10
++ eor w15,w15,w9,ror#20
++ add w8,w8,w11
++ ldr w12,[sp,#44]
++ and w14,w14,w13
++ ror w15,w15,#2
++ add w4,w4,w8
++ eor w14,w14,w10
++ add w7,w7,w12
++ add w8,w8,w15
++ and w12,w5,w4
++ bic w15,w6,w4
++ eor w11,w4,w4,ror#5
++ add w8,w8,w14
++ orr w12,w12,w15
++ eor w11,w11,w4,ror#19
++ eor w15,w8,w8,ror#11
++ add w7,w7,w12
++ ror w11,w11,#6
++ eor w14,w8,w9
++ eor w15,w15,w8,ror#20
++ add w7,w7,w11
++ ldr w12,[sp,#48]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w3,w3,w7
++ eor w13,w13,w9
++ st1 {v4.4s},[x17], #16
++ add w6,w6,w12
++ add w7,w7,w15
++ and w12,w4,w3
++ ld1 {v3.16b},[x1],#16
++ bic w15,w5,w3
++ eor w11,w3,w3,ror#5
++ ld1 {v4.4s},[x16],#16
++ add w7,w7,w13
++ orr w12,w12,w15
++ eor w11,w11,w3,ror#19
++ eor w15,w7,w7,ror#11
++ rev32 v3.16b,v3.16b
++ add w6,w6,w12
++ ror w11,w11,#6
++ eor w13,w7,w8
++ eor w15,w15,w7,ror#20
++ add v4.4s,v4.4s,v3.4s
++ add w6,w6,w11
++ ldr w12,[sp,#52]
++ and w14,w14,w13
++ ror w15,w15,#2
++ add w10,w10,w6
++ eor w14,w14,w8
++ add w5,w5,w12
++ add w6,w6,w15
++ and w12,w3,w10
++ bic w15,w4,w10
++ eor w11,w10,w10,ror#5
++ add w6,w6,w14
++ orr w12,w12,w15
++ eor w11,w11,w10,ror#19
++ eor w15,w6,w6,ror#11
++ add w5,w5,w12
++ ror w11,w11,#6
++ eor w14,w6,w7
++ eor w15,w15,w6,ror#20
++ add w5,w5,w11
++ ldr w12,[sp,#56]
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w9,w9,w5
++ eor w13,w13,w7
++ add w4,w4,w12
++ add w5,w5,w15
++ and w12,w10,w9
++ bic w15,w3,w9
++ eor w11,w9,w9,ror#5
++ add w5,w5,w13
++ orr w12,w12,w15
++ eor w11,w11,w9,ror#19
++ eor w15,w5,w5,ror#11
++ add w4,w4,w12
++ ror w11,w11,#6
++ eor w13,w5,w6
++ eor w15,w15,w5,ror#20
++ add w4,w4,w11
++ ldr w12,[sp,#60]
++ and w14,w14,w13
++ ror w15,w15,#2
++ add w8,w8,w4
++ eor w14,w14,w6
++ add w3,w3,w12
++ add w4,w4,w15
++ and w12,w9,w8
++ bic w15,w10,w8
++ eor w11,w8,w8,ror#5
++ add w4,w4,w14
++ orr w12,w12,w15
++ eor w11,w11,w8,ror#19
++ eor w15,w4,w4,ror#11
++ add w3,w3,w12
++ ror w11,w11,#6
++ eor w14,w4,w5
++ eor w15,w15,w4,ror#20
++ add w3,w3,w11
++ and w13,w13,w14
++ ror w15,w15,#2
++ add w7,w7,w3
++ eor w13,w13,w5
++ st1 {v4.4s},[x17], #16
++ add w3,w3,w15
++ ldp w11,w12,[x0,#0]
++ add w3,w3,w13
++ ldp w13,w14,[x0,#8]
++ add w3,w3,w11
++ add w4,w4,w12
++ ldp w11,w12,[x0,#16]
++ add w5,w5,w13
++ add w6,w6,w14
++ ldp w13,w14,[x0,#24]
++ add w7,w7,w11
++ add w8,w8,w12
++ ldr w12,[sp,#0]
++ stp w3,w4,[x0,#0]
++ add w9,w9,w13
++ mov w13,wzr
++ stp w5,w6,[x0,#8]
++ add w10,w10,w14
++ stp w7,w8,[x0,#16]
++ eor w14,w4,w5
++ stp w9,w10,[x0,#24]
++ mov w15,wzr
++ mov x17,sp
++ b.ne L_00_48
++
++ ldr x29,[x29]
++ add sp,sp,#16*4+16
++ ret
++
++
++.comm __gnutls_arm_cpuid_s,4,4
+diff --git a/lib/accelerated/aarch64/macosx/sha512-armv8.s b/lib/accelerated/aarch64/macosx/sha512-armv8.s
+new file mode 100644
+index 0000000000000000000000000000000000000000..798619bc9a15b7a870f5a45b6440f6b54446521b
+--- /dev/null
++++ b/lib/accelerated/aarch64/macosx/sha512-armv8.s
+@@ -0,0 +1,1609 @@
++# Copyright (c) 2011-2016, Andy Polyakov <appro@openssl.org>
++# All rights reserved.
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions
++# are met:
++#
++# * Redistributions of source code must retain copyright notices,
++# this list of conditions and the following disclaimer.
++#
++# * Redistributions in binary form must reproduce the above
++# copyright notice, this list of conditions and the following
++# disclaimer in the documentation and/or other materials
++# provided with the distribution.
++#
++# * Neither the name of the Andy Polyakov nor the names of its
++# copyright holder and contributors may be used to endorse or
++# promote products derived from this software without specific
++# prior written permission.
++#
++# ALTERNATIVELY, provided that this notice is retained in full, this
++# product may be distributed under the terms of the GNU General Public
++# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
++# those given above.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
++# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++#
++# *** This file is auto-generated ***
++#
++# 1 "lib/accelerated/aarch64/macosx/sha512-armv8.s.tmp.S"
++# 1 "<built-in>"
++# 1 "<command-line>"
++# 1 "/usr/aarch64-linux-gnu/include/stdc-predef.h" 1 3
++# 1 "<command-line>" 2
++# 1 "lib/accelerated/aarch64/macosx/sha512-armv8.s.tmp.S"
++# 56 "lib/accelerated/aarch64/macosx/sha512-armv8.s.tmp.S"
++# 1 "lib/accelerated/aarch64/aarch64-common.h" 1
++# 57 "lib/accelerated/aarch64/macosx/sha512-armv8.s.tmp.S" 2
++
++
++.text
++
++
++.globl _sha512_block_data_order
++
++.align 6
++_sha512_block_data_order:
++
++
++
++
++ ldr x16,L_gnutls_arm_cpuid_s
++
++ adr x17,L_gnutls_arm_cpuid_s
++ add x16,x16,x17
++ ldr w16,[x16]
++ tst w16,#(1<<6)
++ b.ne Lv8_entry
++
++ stp x29,x30,[sp,#-128]!
++ add x29,sp,#0
++
++ stp x19,x20,[sp,#16]
++ stp x21,x22,[sp,#32]
++ stp x23,x24,[sp,#48]
++ stp x25,x26,[sp,#64]
++ stp x27,x28,[sp,#80]
++ sub sp,sp,#4*8
++
++ ldp x20,x21,[x0]
++ ldp x22,x23,[x0,#2*8]
++ ldp x24,x25,[x0,#4*8]
++ add x2,x1,x2,lsl#7
++ ldp x26,x27,[x0,#6*8]
++ adr x30,LK512
++ stp x0,x2,[x29,#96]
++
++Loop:
++ ldp x3,x4,[x1],#2*8
++ ldr x19,[x30],#8
++ eor x28,x21,x22
++ str x1,[x29,#112]
++
++ rev x3,x3
++
++ ror x16,x24,#14
++ add x27,x27,x19
++ eor x6,x24,x24,ror#23
++ and x17,x25,x24
++ bic x19,x26,x24
++ add x27,x27,x3
++ orr x17,x17,x19
++ eor x19,x20,x21
++ eor x16,x16,x6,ror#18
++ ror x6,x20,#28
++ add x27,x27,x17
++ eor x17,x20,x20,ror#5
++ add x27,x27,x16
++ and x28,x28,x19
++ add x23,x23,x27
++ eor x28,x28,x21
++ eor x17,x6,x17,ror#34
++ add x27,x27,x28
++ ldr x28,[x30],#8
++
++
++ rev x4,x4
++
++ ldp x5,x6,[x1],#2*8
++ add x27,x27,x17
++ ror x16,x23,#14
++ add x26,x26,x28
++ eor x7,x23,x23,ror#23
++ and x17,x24,x23
++ bic x28,x25,x23
++ add x26,x26,x4
++ orr x17,x17,x28
++ eor x28,x27,x20
++ eor x16,x16,x7,ror#18
++ ror x7,x27,#28
++ add x26,x26,x17
++ eor x17,x27,x27,ror#5
++ add x26,x26,x16
++ and x19,x19,x28
++ add x22,x22,x26
++ eor x19,x19,x20
++ eor x17,x7,x17,ror#34
++ add x26,x26,x19
++ ldr x19,[x30],#8
++
++
++ rev x5,x5
++
++ add x26,x26,x17
++ ror x16,x22,#14
++ add x25,x25,x19
++ eor x8,x22,x22,ror#23
++ and x17,x23,x22
++ bic x19,x24,x22
++ add x25,x25,x5
++ orr x17,x17,x19
++ eor x19,x26,x27
++ eor x16,x16,x8,ror#18
++ ror x8,x26,#28
++ add x25,x25,x17
++ eor x17,x26,x26,ror#5
++ add x25,x25,x16
++ and x28,x28,x19
++ add x21,x21,x25
++ eor x28,x28,x27
++ eor x17,x8,x17,ror#34
++ add x25,x25,x28
++ ldr x28,[x30],#8
++
++
++ rev x6,x6
++
++ ldp x7,x8,[x1],#2*8
++ add x25,x25,x17
++ ror x16,x21,#14
++ add x24,x24,x28
++ eor x9,x21,x21,ror#23
++ and x17,x22,x21
++ bic x28,x23,x21
++ add x24,x24,x6
++ orr x17,x17,x28
++ eor x28,x25,x26
++ eor x16,x16,x9,ror#18
++ ror x9,x25,#28
++ add x24,x24,x17
++ eor x17,x25,x25,ror#5
++ add x24,x24,x16
++ and x19,x19,x28
++ add x20,x20,x24
++ eor x19,x19,x26
++ eor x17,x9,x17,ror#34
++ add x24,x24,x19
++ ldr x19,[x30],#8
++
++
++ rev x7,x7
++
++ add x24,x24,x17
++ ror x16,x20,#14
++ add x23,x23,x19
++ eor x10,x20,x20,ror#23
++ and x17,x21,x20
++ bic x19,x22,x20
++ add x23,x23,x7
++ orr x17,x17,x19
++ eor x19,x24,x25
++ eor x16,x16,x10,ror#18
++ ror x10,x24,#28
++ add x23,x23,x17
++ eor x17,x24,x24,ror#5
++ add x23,x23,x16
++ and x28,x28,x19
++ add x27,x27,x23
++ eor x28,x28,x25
++ eor x17,x10,x17,ror#34
++ add x23,x23,x28
++ ldr x28,[x30],#8
++
++
++ rev x8,x8
++
++ ldp x9,x10,[x1],#2*8
++ add x23,x23,x17
++ ror x16,x27,#14
++ add x22,x22,x28
++ eor x11,x27,x27,ror#23
++ and x17,x20,x27
++ bic x28,x21,x27
++ add x22,x22,x8
++ orr x17,x17,x28
++ eor x28,x23,x24
++ eor x16,x16,x11,ror#18
++ ror x11,x23,#28
++ add x22,x22,x17
++ eor x17,x23,x23,ror#5
++ add x22,x22,x16
++ and x19,x19,x28
++ add x26,x26,x22
++ eor x19,x19,x24
++ eor x17,x11,x17,ror#34
++ add x22,x22,x19
++ ldr x19,[x30],#8
++
++
++ rev x9,x9
++
++ add x22,x22,x17
++ ror x16,x26,#14
++ add x21,x21,x19
++ eor x12,x26,x26,ror#23
++ and x17,x27,x26
++ bic x19,x20,x26
++ add x21,x21,x9
++ orr x17,x17,x19
++ eor x19,x22,x23
++ eor x16,x16,x12,ror#18
++ ror x12,x22,#28
++ add x21,x21,x17
++ eor x17,x22,x22,ror#5
++ add x21,x21,x16
++ and x28,x28,x19
++ add x25,x25,x21
++ eor x28,x28,x23
++ eor x17,x12,x17,ror#34
++ add x21,x21,x28
++ ldr x28,[x30],#8
++
++
++ rev x10,x10
++
++ ldp x11,x12,[x1],#2*8
++ add x21,x21,x17
++ ror x16,x25,#14
++ add x20,x20,x28
++ eor x13,x25,x25,ror#23
++ and x17,x26,x25
++ bic x28,x27,x25
++ add x20,x20,x10
++ orr x17,x17,x28
++ eor x28,x21,x22
++ eor x16,x16,x13,ror#18
++ ror x13,x21,#28
++ add x20,x20,x17
++ eor x17,x21,x21,ror#5
++ add x20,x20,x16
++ and x19,x19,x28
++ add x24,x24,x20
++ eor x19,x19,x22
++ eor x17,x13,x17,ror#34
++ add x20,x20,x19
++ ldr x19,[x30],#8
++
++
++ rev x11,x11
++
++ add x20,x20,x17
++ ror x16,x24,#14
++ add x27,x27,x19
++ eor x14,x24,x24,ror#23
++ and x17,x25,x24
++ bic x19,x26,x24
++ add x27,x27,x11
++ orr x17,x17,x19
++ eor x19,x20,x21
++ eor x16,x16,x14,ror#18
++ ror x14,x20,#28
++ add x27,x27,x17
++ eor x17,x20,x20,ror#5
++ add x27,x27,x16
++ and x28,x28,x19
++ add x23,x23,x27
++ eor x28,x28,x21
++ eor x17,x14,x17,ror#34
++ add x27,x27,x28
++ ldr x28,[x30],#8
++
++
++ rev x12,x12
++
++ ldp x13,x14,[x1],#2*8
++ add x27,x27,x17
++ ror x16,x23,#14
++ add x26,x26,x28
++ eor x15,x23,x23,ror#23
++ and x17,x24,x23
++ bic x28,x25,x23
++ add x26,x26,x12
++ orr x17,x17,x28
++ eor x28,x27,x20
++ eor x16,x16,x15,ror#18
++ ror x15,x27,#28
++ add x26,x26,x17
++ eor x17,x27,x27,ror#5
++ add x26,x26,x16
++ and x19,x19,x28
++ add x22,x22,x26
++ eor x19,x19,x20
++ eor x17,x15,x17,ror#34
++ add x26,x26,x19
++ ldr x19,[x30],#8
++
++
++ rev x13,x13
++
++ add x26,x26,x17
++ ror x16,x22,#14
++ add x25,x25,x19
++ eor x0,x22,x22,ror#23
++ and x17,x23,x22
++ bic x19,x24,x22
++ add x25,x25,x13
++ orr x17,x17,x19
++ eor x19,x26,x27
++ eor x16,x16,x0,ror#18
++ ror x0,x26,#28
++ add x25,x25,x17
++ eor x17,x26,x26,ror#5
++ add x25,x25,x16
++ and x28,x28,x19
++ add x21,x21,x25
++ eor x28,x28,x27
++ eor x17,x0,x17,ror#34
++ add x25,x25,x28
++ ldr x28,[x30],#8
++
++
++ rev x14,x14
++
++ ldp x15,x0,[x1],#2*8
++ add x25,x25,x17
++ str x6,[sp,#24]
++ ror x16,x21,#14
++ add x24,x24,x28
++ eor x6,x21,x21,ror#23
++ and x17,x22,x21
++ bic x28,x23,x21
++ add x24,x24,x14
++ orr x17,x17,x28
++ eor x28,x25,x26
++ eor x16,x16,x6,ror#18
++ ror x6,x25,#28
++ add x24,x24,x17
++ eor x17,x25,x25,ror#5
++ add x24,x24,x16
++ and x19,x19,x28
++ add x20,x20,x24
++ eor x19,x19,x26
++ eor x17,x6,x17,ror#34
++ add x24,x24,x19
++ ldr x19,[x30],#8
++
++
++ rev x15,x15
++
++ add x24,x24,x17
++ str x7,[sp,#0]
++ ror x16,x20,#14
++ add x23,x23,x19
++ eor x7,x20,x20,ror#23
++ and x17,x21,x20
++ bic x19,x22,x20
++ add x23,x23,x15
++ orr x17,x17,x19
++ eor x19,x24,x25
++ eor x16,x16,x7,ror#18
++ ror x7,x24,#28
++ add x23,x23,x17
++ eor x17,x24,x24,ror#5
++ add x23,x23,x16
++ and x28,x28,x19
++ add x27,x27,x23
++ eor x28,x28,x25
++ eor x17,x7,x17,ror#34
++ add x23,x23,x28
++ ldr x28,[x30],#8
++
++
++ rev x0,x0
++
++ ldp x1,x2,[x1]
++ add x23,x23,x17
++ str x8,[sp,#8]
++ ror x16,x27,#14
++ add x22,x22,x28
++ eor x8,x27,x27,ror#23
++ and x17,x20,x27
++ bic x28,x21,x27
++ add x22,x22,x0
++ orr x17,x17,x28
++ eor x28,x23,x24
++ eor x16,x16,x8,ror#18
++ ror x8,x23,#28
++ add x22,x22,x17
++ eor x17,x23,x23,ror#5
++ add x22,x22,x16
++ and x19,x19,x28
++ add x26,x26,x22
++ eor x19,x19,x24
++ eor x17,x8,x17,ror#34
++ add x22,x22,x19
++ ldr x19,[x30],#8
++
++
++ rev x1,x1
++
++ ldr x6,[sp,#24]
++ add x22,x22,x17
++ str x9,[sp,#16]
++ ror x16,x26,#14
++ add x21,x21,x19
++ eor x9,x26,x26,ror#23
++ and x17,x27,x26
++ bic x19,x20,x26
++ add x21,x21,x1
++ orr x17,x17,x19
++ eor x19,x22,x23
++ eor x16,x16,x9,ror#18
++ ror x9,x22,#28
++ add x21,x21,x17
++ eor x17,x22,x22,ror#5
++ add x21,x21,x16
++ and x28,x28,x19
++ add x25,x25,x21
++ eor x28,x28,x23
++ eor x17,x9,x17,ror#34
++ add x21,x21,x28
++ ldr x28,[x30],#8
++
++
++ rev x2,x2
++
++ ldr x7,[sp,#0]
++ add x21,x21,x17
++ str x10,[sp,#24]
++ ror x16,x25,#14
++ add x20,x20,x28
++ ror x9,x4,#1
++ and x17,x26,x25
++ ror x8,x1,#19
++ bic x28,x27,x25
++ ror x10,x21,#28
++ add x20,x20,x2
++ eor x16,x16,x25,ror#18
++ eor x9,x9,x4,ror#8
++ orr x17,x17,x28
++ eor x28,x21,x22
++ eor x16,x16,x25,ror#41
++ eor x10,x10,x21,ror#34
++ add x20,x20,x17
++ and x19,x19,x28
++ eor x8,x8,x1,ror#61
++ eor x9,x9,x4,lsr#7
++ add x20,x20,x16
++ eor x19,x19,x22
++ eor x17,x10,x21,ror#39
++ eor x8,x8,x1,lsr#6
++ add x3,x3,x12
++ add x24,x24,x20
++ add x20,x20,x19
++ ldr x19,[x30],#8
++ add x3,x3,x9
++ add x20,x20,x17
++ add x3,x3,x8
++Loop_16_xx:
++ ldr x8,[sp,#8]
++ str x11,[sp,#0]
++ ror x16,x24,#14
++ add x27,x27,x19
++ ror x10,x5,#1
++ and x17,x25,x24
++ ror x9,x2,#19
++ bic x19,x26,x24
++ ror x11,x20,#28
++ add x27,x27,x3
++ eor x16,x16,x24,ror#18
++ eor x10,x10,x5,ror#8
++ orr x17,x17,x19
++ eor x19,x20,x21
++ eor x16,x16,x24,ror#41
++ eor x11,x11,x20,ror#34
++ add x27,x27,x17
++ and x28,x28,x19
++ eor x9,x9,x2,ror#61
++ eor x10,x10,x5,lsr#7
++ add x27,x27,x16
++ eor x28,x28,x21
++ eor x17,x11,x20,ror#39
++ eor x9,x9,x2,lsr#6
++ add x4,x4,x13
++ add x23,x23,x27
++ add x27,x27,x28
++ ldr x28,[x30],#8
++ add x4,x4,x10
++ add x27,x27,x17
++ add x4,x4,x9
++ ldr x9,[sp,#16]
++ str x12,[sp,#8]
++ ror x16,x23,#14
++ add x26,x26,x28
++ ror x11,x6,#1
++ and x17,x24,x23
++ ror x10,x3,#19
++ bic x28,x25,x23
++ ror x12,x27,#28
++ add x26,x26,x4
++ eor x16,x16,x23,ror#18
++ eor x11,x11,x6,ror#8
++ orr x17,x17,x28
++ eor x28,x27,x20
++ eor x16,x16,x23,ror#41
++ eor x12,x12,x27,ror#34
++ add x26,x26,x17
++ and x19,x19,x28
++ eor x10,x10,x3,ror#61
++ eor x11,x11,x6,lsr#7
++ add x26,x26,x16
++ eor x19,x19,x20
++ eor x17,x12,x27,ror#39
++ eor x10,x10,x3,lsr#6
++ add x5,x5,x14
++ add x22,x22,x26
++ add x26,x26,x19
++ ldr x19,[x30],#8
++ add x5,x5,x11
++ add x26,x26,x17
++ add x5,x5,x10
++ ldr x10,[sp,#24]
++ str x13,[sp,#16]
++ ror x16,x22,#14
++ add x25,x25,x19
++ ror x12,x7,#1
++ and x17,x23,x22
++ ror x11,x4,#19
++ bic x19,x24,x22
++ ror x13,x26,#28
++ add x25,x25,x5
++ eor x16,x16,x22,ror#18
++ eor x12,x12,x7,ror#8
++ orr x17,x17,x19
++ eor x19,x26,x27
++ eor x16,x16,x22,ror#41
++ eor x13,x13,x26,ror#34
++ add x25,x25,x17
++ and x28,x28,x19
++ eor x11,x11,x4,ror#61
++ eor x12,x12,x7,lsr#7
++ add x25,x25,x16
++ eor x28,x28,x27
++ eor x17,x13,x26,ror#39
++ eor x11,x11,x4,lsr#6
++ add x6,x6,x15
++ add x21,x21,x25
++ add x25,x25,x28
++ ldr x28,[x30],#8
++ add x6,x6,x12
++ add x25,x25,x17
++ add x6,x6,x11
++ ldr x11,[sp,#0]
++ str x14,[sp,#24]
++ ror x16,x21,#14
++ add x24,x24,x28
++ ror x13,x8,#1
++ and x17,x22,x21
++ ror x12,x5,#19
++ bic x28,x23,x21
++ ror x14,x25,#28
++ add x24,x24,x6
++ eor x16,x16,x21,ror#18
++ eor x13,x13,x8,ror#8
++ orr x17,x17,x28
++ eor x28,x25,x26
++ eor x16,x16,x21,ror#41
++ eor x14,x14,x25,ror#34
++ add x24,x24,x17
++ and x19,x19,x28
++ eor x12,x12,x5,ror#61
++ eor x13,x13,x8,lsr#7
++ add x24,x24,x16
++ eor x19,x19,x26
++ eor x17,x14,x25,ror#39
++ eor x12,x12,x5,lsr#6
++ add x7,x7,x0
++ add x20,x20,x24
++ add x24,x24,x19
++ ldr x19,[x30],#8
++ add x7,x7,x13
++ add x24,x24,x17
++ add x7,x7,x12
++ ldr x12,[sp,#8]
++ str x15,[sp,#0]
++ ror x16,x20,#14
++ add x23,x23,x19
++ ror x14,x9,#1
++ and x17,x21,x20
++ ror x13,x6,#19
++ bic x19,x22,x20
++ ror x15,x24,#28
++ add x23,x23,x7
++ eor x16,x16,x20,ror#18
++ eor x14,x14,x9,ror#8
++ orr x17,x17,x19
++ eor x19,x24,x25
++ eor x16,x16,x20,ror#41
++ eor x15,x15,x24,ror#34
++ add x23,x23,x17
++ and x28,x28,x19
++ eor x13,x13,x6,ror#61
++ eor x14,x14,x9,lsr#7
++ add x23,x23,x16
++ eor x28,x28,x25
++ eor x17,x15,x24,ror#39
++ eor x13,x13,x6,lsr#6
++ add x8,x8,x1
++ add x27,x27,x23
++ add x23,x23,x28
++ ldr x28,[x30],#8
++ add x8,x8,x14
++ add x23,x23,x17
++ add x8,x8,x13
++ ldr x13,[sp,#16]
++ str x0,[sp,#8]
++ ror x16,x27,#14
++ add x22,x22,x28
++ ror x15,x10,#1
++ and x17,x20,x27
++ ror x14,x7,#19
++ bic x28,x21,x27
++ ror x0,x23,#28
++ add x22,x22,x8
++ eor x16,x16,x27,ror#18
++ eor x15,x15,x10,ror#8
++ orr x17,x17,x28
++ eor x28,x23,x24
++ eor x16,x16,x27,ror#41
++ eor x0,x0,x23,ror#34
++ add x22,x22,x17
++ and x19,x19,x28
++ eor x14,x14,x7,ror#61
++ eor x15,x15,x10,lsr#7
++ add x22,x22,x16
++ eor x19,x19,x24
++ eor x17,x0,x23,ror#39
++ eor x14,x14,x7,lsr#6
++ add x9,x9,x2
++ add x26,x26,x22
++ add x22,x22,x19
++ ldr x19,[x30],#8
++ add x9,x9,x15
++ add x22,x22,x17
++ add x9,x9,x14
++ ldr x14,[sp,#24]
++ str x1,[sp,#16]
++ ror x16,x26,#14
++ add x21,x21,x19
++ ror x0,x11,#1
++ and x17,x27,x26
++ ror x15,x8,#19
++ bic x19,x20,x26
++ ror x1,x22,#28
++ add x21,x21,x9
++ eor x16,x16,x26,ror#18
++ eor x0,x0,x11,ror#8
++ orr x17,x17,x19
++ eor x19,x22,x23
++ eor x16,x16,x26,ror#41
++ eor x1,x1,x22,ror#34
++ add x21,x21,x17
++ and x28,x28,x19
++ eor x15,x15,x8,ror#61
++ eor x0,x0,x11,lsr#7
++ add x21,x21,x16
++ eor x28,x28,x23
++ eor x17,x1,x22,ror#39
++ eor x15,x15,x8,lsr#6
++ add x10,x10,x3
++ add x25,x25,x21
++ add x21,x21,x28
++ ldr x28,[x30],#8
++ add x10,x10,x0
++ add x21,x21,x17
++ add x10,x10,x15
++ ldr x15,[sp,#0]
++ str x2,[sp,#24]
++ ror x16,x25,#14
++ add x20,x20,x28
++ ror x1,x12,#1
++ and x17,x26,x25
++ ror x0,x9,#19
++ bic x28,x27,x25
++ ror x2,x21,#28
++ add x20,x20,x10
++ eor x16,x16,x25,ror#18
++ eor x1,x1,x12,ror#8
++ orr x17,x17,x28
++ eor x28,x21,x22
++ eor x16,x16,x25,ror#41
++ eor x2,x2,x21,ror#34
++ add x20,x20,x17
++ and x19,x19,x28
++ eor x0,x0,x9,ror#61
++ eor x1,x1,x12,lsr#7
++ add x20,x20,x16
++ eor x19,x19,x22
++ eor x17,x2,x21,ror#39
++ eor x0,x0,x9,lsr#6
++ add x11,x11,x4
++ add x24,x24,x20
++ add x20,x20,x19
++ ldr x19,[x30],#8
++ add x11,x11,x1
++ add x20,x20,x17
++ add x11,x11,x0
++ ldr x0,[sp,#8]
++ str x3,[sp,#0]
++ ror x16,x24,#14
++ add x27,x27,x19
++ ror x2,x13,#1
++ and x17,x25,x24
++ ror x1,x10,#19
++ bic x19,x26,x24
++ ror x3,x20,#28
++ add x27,x27,x11
++ eor x16,x16,x24,ror#18
++ eor x2,x2,x13,ror#8
++ orr x17,x17,x19
++ eor x19,x20,x21
++ eor x16,x16,x24,ror#41
++ eor x3,x3,x20,ror#34
++ add x27,x27,x17
++ and x28,x28,x19
++ eor x1,x1,x10,ror#61
++ eor x2,x2,x13,lsr#7
++ add x27,x27,x16
++ eor x28,x28,x21
++ eor x17,x3,x20,ror#39
++ eor x1,x1,x10,lsr#6
++ add x12,x12,x5
++ add x23,x23,x27
++ add x27,x27,x28
++ ldr x28,[x30],#8
++ add x12,x12,x2
++ add x27,x27,x17
++ add x12,x12,x1
++ ldr x1,[sp,#16]
++ str x4,[sp,#8]
++ ror x16,x23,#14
++ add x26,x26,x28
++ ror x3,x14,#1
++ and x17,x24,x23
++ ror x2,x11,#19
++ bic x28,x25,x23
++ ror x4,x27,#28
++ add x26,x26,x12
++ eor x16,x16,x23,ror#18
++ eor x3,x3,x14,ror#8
++ orr x17,x17,x28
++ eor x28,x27,x20
++ eor x16,x16,x23,ror#41
++ eor x4,x4,x27,ror#34
++ add x26,x26,x17
++ and x19,x19,x28
++ eor x2,x2,x11,ror#61
++ eor x3,x3,x14,lsr#7
++ add x26,x26,x16
++ eor x19,x19,x20
++ eor x17,x4,x27,ror#39
++ eor x2,x2,x11,lsr#6
++ add x13,x13,x6
++ add x22,x22,x26
++ add x26,x26,x19
++ ldr x19,[x30],#8
++ add x13,x13,x3
++ add x26,x26,x17
++ add x13,x13,x2
++ ldr x2,[sp,#24]
++ str x5,[sp,#16]
++ ror x16,x22,#14
++ add x25,x25,x19
++ ror x4,x15,#1
++ and x17,x23,x22
++ ror x3,x12,#19
++ bic x19,x24,x22
++ ror x5,x26,#28
++ add x25,x25,x13
++ eor x16,x16,x22,ror#18
++ eor x4,x4,x15,ror#8
++ orr x17,x17,x19
++ eor x19,x26,x27
++ eor x16,x16,x22,ror#41
++ eor x5,x5,x26,ror#34
++ add x25,x25,x17
++ and x28,x28,x19
++ eor x3,x3,x12,ror#61
++ eor x4,x4,x15,lsr#7
++ add x25,x25,x16
++ eor x28,x28,x27
++ eor x17,x5,x26,ror#39
++ eor x3,x3,x12,lsr#6
++ add x14,x14,x7
++ add x21,x21,x25
++ add x25,x25,x28
++ ldr x28,[x30],#8
++ add x14,x14,x4
++ add x25,x25,x17
++ add x14,x14,x3
++ ldr x3,[sp,#0]
++ str x6,[sp,#24]
++ ror x16,x21,#14
++ add x24,x24,x28
++ ror x5,x0,#1
++ and x17,x22,x21
++ ror x4,x13,#19
++ bic x28,x23,x21
++ ror x6,x25,#28
++ add x24,x24,x14
++ eor x16,x16,x21,ror#18
++ eor x5,x5,x0,ror#8
++ orr x17,x17,x28
++ eor x28,x25,x26
++ eor x16,x16,x21,ror#41
++ eor x6,x6,x25,ror#34
++ add x24,x24,x17
++ and x19,x19,x28
++ eor x4,x4,x13,ror#61
++ eor x5,x5,x0,lsr#7
++ add x24,x24,x16
++ eor x19,x19,x26
++ eor x17,x6,x25,ror#39
++ eor x4,x4,x13,lsr#6
++ add x15,x15,x8
++ add x20,x20,x24
++ add x24,x24,x19
++ ldr x19,[x30],#8
++ add x15,x15,x5
++ add x24,x24,x17
++ add x15,x15,x4
++ ldr x4,[sp,#8]
++ str x7,[sp,#0]
++ ror x16,x20,#14
++ add x23,x23,x19
++ ror x6,x1,#1
++ and x17,x21,x20
++ ror x5,x14,#19
++ bic x19,x22,x20
++ ror x7,x24,#28
++ add x23,x23,x15
++ eor x16,x16,x20,ror#18
++ eor x6,x6,x1,ror#8
++ orr x17,x17,x19
++ eor x19,x24,x25
++ eor x16,x16,x20,ror#41
++ eor x7,x7,x24,ror#34
++ add x23,x23,x17
++ and x28,x28,x19
++ eor x5,x5,x14,ror#61
++ eor x6,x6,x1,lsr#7
++ add x23,x23,x16
++ eor x28,x28,x25
++ eor x17,x7,x24,ror#39
++ eor x5,x5,x14,lsr#6
++ add x0,x0,x9
++ add x27,x27,x23
++ add x23,x23,x28
++ ldr x28,[x30],#8
++ add x0,x0,x6
++ add x23,x23,x17
++ add x0,x0,x5
++ ldr x5,[sp,#16]
++ str x8,[sp,#8]
++ ror x16,x27,#14
++ add x22,x22,x28
++ ror x7,x2,#1
++ and x17,x20,x27
++ ror x6,x15,#19
++ bic x28,x21,x27
++ ror x8,x23,#28
++ add x22,x22,x0
++ eor x16,x16,x27,ror#18
++ eor x7,x7,x2,ror#8
++ orr x17,x17,x28
++ eor x28,x23,x24
++ eor x16,x16,x27,ror#41
++ eor x8,x8,x23,ror#34
++ add x22,x22,x17
++ and x19,x19,x28
++ eor x6,x6,x15,ror#61
++ eor x7,x7,x2,lsr#7
++ add x22,x22,x16
++ eor x19,x19,x24
++ eor x17,x8,x23,ror#39
++ eor x6,x6,x15,lsr#6
++ add x1,x1,x10
++ add x26,x26,x22
++ add x22,x22,x19
++ ldr x19,[x30],#8
++ add x1,x1,x7
++ add x22,x22,x17
++ add x1,x1,x6
++ ldr x6,[sp,#24]
++ str x9,[sp,#16]
++ ror x16,x26,#14
++ add x21,x21,x19
++ ror x8,x3,#1
++ and x17,x27,x26
++ ror x7,x0,#19
++ bic x19,x20,x26
++ ror x9,x22,#28
++ add x21,x21,x1
++ eor x16,x16,x26,ror#18
++ eor x8,x8,x3,ror#8
++ orr x17,x17,x19
++ eor x19,x22,x23
++ eor x16,x16,x26,ror#41
++ eor x9,x9,x22,ror#34
++ add x21,x21,x17
++ and x28,x28,x19
++ eor x7,x7,x0,ror#61
++ eor x8,x8,x3,lsr#7
++ add x21,x21,x16
++ eor x28,x28,x23
++ eor x17,x9,x22,ror#39
++ eor x7,x7,x0,lsr#6
++ add x2,x2,x11
++ add x25,x25,x21
++ add x21,x21,x28
++ ldr x28,[x30],#8
++ add x2,x2,x8
++ add x21,x21,x17
++ add x2,x2,x7
++ ldr x7,[sp,#0]
++ str x10,[sp,#24]
++ ror x16,x25,#14
++ add x20,x20,x28
++ ror x9,x4,#1
++ and x17,x26,x25
++ ror x8,x1,#19
++ bic x28,x27,x25
++ ror x10,x21,#28
++ add x20,x20,x2
++ eor x16,x16,x25,ror#18
++ eor x9,x9,x4,ror#8
++ orr x17,x17,x28
++ eor x28,x21,x22
++ eor x16,x16,x25,ror#41
++ eor x10,x10,x21,ror#34
++ add x20,x20,x17
++ and x19,x19,x28
++ eor x8,x8,x1,ror#61
++ eor x9,x9,x4,lsr#7
++ add x20,x20,x16
++ eor x19,x19,x22
++ eor x17,x10,x21,ror#39
++ eor x8,x8,x1,lsr#6
++ add x3,x3,x12
++ add x24,x24,x20
++ add x20,x20,x19
++ ldr x19,[x30],#8
++ add x3,x3,x9
++ add x20,x20,x17
++ add x3,x3,x8
++ cbnz x19,Loop_16_xx
++
++ ldp x0,x2,[x29,#96]
++ ldr x1,[x29,#112]
++ sub x30,x30,#648
++
++ ldp x3,x4,[x0]
++ ldp x5,x6,[x0,#2*8]
++ add x1,x1,#14*8
++ ldp x7,x8,[x0,#4*8]
++ add x20,x20,x3
++ ldp x9,x10,[x0,#6*8]
++ add x21,x21,x4
++ add x22,x22,x5
++ add x23,x23,x6
++ stp x20,x21,[x0]
++ add x24,x24,x7
++ add x25,x25,x8
++ stp x22,x23,[x0,#2*8]
++ add x26,x26,x9
++ add x27,x27,x10
++ cmp x1,x2
++ stp x24,x25,[x0,#4*8]
++ stp x26,x27,[x0,#6*8]
++ b.ne Loop
++
++ ldp x19,x20,[x29,#16]
++ add sp,sp,#4*8
++ ldp x21,x22,[x29,#32]
++ ldp x23,x24,[x29,#48]
++ ldp x25,x26,[x29,#64]
++ ldp x27,x28,[x29,#80]
++ ldp x29,x30,[sp],#128
++ ret
++
++
++.align 6
++
++LK512:
++.quad 0x428a2f98d728ae22,0x7137449123ef65cd
++.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
++.quad 0x3956c25bf348b538,0x59f111f1b605d019
++.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
++.quad 0xd807aa98a3030242,0x12835b0145706fbe
++.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
++.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
++.quad 0x9bdc06a725c71235,0xc19bf174cf692694
++.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
++.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
++.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
++.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
++.quad 0x983e5152ee66dfab,0xa831c66d2db43210
++.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
++.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
++.quad 0x06ca6351e003826f,0x142929670a0e6e70
++.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
++.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
++.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
++.quad 0x81c2c92e47edaee6,0x92722c851482353b
++.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
++.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
++.quad 0xd192e819d6ef5218,0xd69906245565a910
++.quad 0xf40e35855771202a,0x106aa07032bbd1b8
++.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
++.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
++.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
++.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
++.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
++.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
++.quad 0x90befffa23631e28,0xa4506cebde82bde9
++.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
++.quad 0xca273eceea26619c,0xd186b8c721c0c207
++.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
++.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
++.quad 0x113f9804bef90dae,0x1b710b35131c471b
++.quad 0x28db77f523047d84,0x32caab7b40c72493
++.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
++.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
++.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
++.quad 0
++
++
++.align 3
++L_gnutls_arm_cpuid_s:
++
++
++
++.quad __gnutls_arm_cpuid_s-.
++
++
++.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
++.align 2
++.align 2
++
++
++.align 6
++sha512_block_armv8:
++Lv8_entry:
++ stp x29,x30,[sp,#-16]!
++ add x29,sp,#0
++
++ ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x1],#64
++ ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64
++
++ ld1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0]
++ adr x3,LK512
++
++ rev64 v16.16b,v16.16b
++ rev64 v17.16b,v17.16b
++ rev64 v18.16b,v18.16b
++ rev64 v19.16b,v19.16b
++ rev64 v20.16b,v20.16b
++ rev64 v21.16b,v21.16b
++ rev64 v22.16b,v22.16b
++ rev64 v23.16b,v23.16b
++ b Loop_hw
++
++.align 4
++Loop_hw:
++ ld1 {v24.2d},[x3],#16
++ subs x2,x2,#1
++ sub x4,x1,#128
++ orr v26.16b,v0.16b,v0.16b
++ orr v27.16b,v1.16b,v1.16b
++ orr v28.16b,v2.16b,v2.16b
++ orr v29.16b,v3.16b,v3.16b
++ csel x1,x1,x4,ne
++ add v24.2d,v24.2d,v16.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v2.16b,v3.16b,#8
++ ext v6.16b,v1.16b,v2.16b,#8
++ add v3.2d,v3.2d,v24.2d
++.long 0xcec08230
++ ext v7.16b,v20.16b,v21.16b,#8
++.long 0xce6680a3
++.long 0xce678af0
++ add v4.2d,v1.2d,v3.2d
++.long 0xce608423
++ add v25.2d,v25.2d,v17.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v4.16b,v2.16b,#8
++ ext v6.16b,v0.16b,v4.16b,#8
++ add v2.2d,v2.2d,v25.2d
++.long 0xcec08251
++ ext v7.16b,v21.16b,v22.16b,#8
++.long 0xce6680a2
++.long 0xce678a11
++ add v1.2d,v0.2d,v2.2d
++.long 0xce638402
++ add v24.2d,v24.2d,v18.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v1.16b,v4.16b,#8
++ ext v6.16b,v3.16b,v1.16b,#8
++ add v4.2d,v4.2d,v24.2d
++.long 0xcec08272
++ ext v7.16b,v22.16b,v23.16b,#8
++.long 0xce6680a4
++.long 0xce678a32
++ add v0.2d,v3.2d,v4.2d
++.long 0xce628464
++ add v25.2d,v25.2d,v19.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v0.16b,v1.16b,#8
++ ext v6.16b,v2.16b,v0.16b,#8
++ add v1.2d,v1.2d,v25.2d
++.long 0xcec08293
++ ext v7.16b,v23.16b,v16.16b,#8
++.long 0xce6680a1
++.long 0xce678a53
++ add v3.2d,v2.2d,v1.2d
++.long 0xce648441
++ add v24.2d,v24.2d,v20.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v3.16b,v0.16b,#8
++ ext v6.16b,v4.16b,v3.16b,#8
++ add v0.2d,v0.2d,v24.2d
++.long 0xcec082b4
++ ext v7.16b,v16.16b,v17.16b,#8
++.long 0xce6680a0
++.long 0xce678a74
++ add v2.2d,v4.2d,v0.2d
++.long 0xce618480
++ add v25.2d,v25.2d,v21.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v2.16b,v3.16b,#8
++ ext v6.16b,v1.16b,v2.16b,#8
++ add v3.2d,v3.2d,v25.2d
++.long 0xcec082d5
++ ext v7.16b,v17.16b,v18.16b,#8
++.long 0xce6680a3
++.long 0xce678a95
++ add v4.2d,v1.2d,v3.2d
++.long 0xce608423
++ add v24.2d,v24.2d,v22.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v4.16b,v2.16b,#8
++ ext v6.16b,v0.16b,v4.16b,#8
++ add v2.2d,v2.2d,v24.2d
++.long 0xcec082f6
++ ext v7.16b,v18.16b,v19.16b,#8
++.long 0xce6680a2
++.long 0xce678ab6
++ add v1.2d,v0.2d,v2.2d
++.long 0xce638402
++ add v25.2d,v25.2d,v23.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v1.16b,v4.16b,#8
++ ext v6.16b,v3.16b,v1.16b,#8
++ add v4.2d,v4.2d,v25.2d
++.long 0xcec08217
++ ext v7.16b,v19.16b,v20.16b,#8
++.long 0xce6680a4
++.long 0xce678ad7
++ add v0.2d,v3.2d,v4.2d
++.long 0xce628464
++ add v24.2d,v24.2d,v16.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v0.16b,v1.16b,#8
++ ext v6.16b,v2.16b,v0.16b,#8
++ add v1.2d,v1.2d,v24.2d
++.long 0xcec08230
++ ext v7.16b,v20.16b,v21.16b,#8
++.long 0xce6680a1
++.long 0xce678af0
++ add v3.2d,v2.2d,v1.2d
++.long 0xce648441
++ add v25.2d,v25.2d,v17.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v3.16b,v0.16b,#8
++ ext v6.16b,v4.16b,v3.16b,#8
++ add v0.2d,v0.2d,v25.2d
++.long 0xcec08251
++ ext v7.16b,v21.16b,v22.16b,#8
++.long 0xce6680a0
++.long 0xce678a11
++ add v2.2d,v4.2d,v0.2d
++.long 0xce618480
++ add v24.2d,v24.2d,v18.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v2.16b,v3.16b,#8
++ ext v6.16b,v1.16b,v2.16b,#8
++ add v3.2d,v3.2d,v24.2d
++.long 0xcec08272
++ ext v7.16b,v22.16b,v23.16b,#8
++.long 0xce6680a3
++.long 0xce678a32
++ add v4.2d,v1.2d,v3.2d
++.long 0xce608423
++ add v25.2d,v25.2d,v19.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v4.16b,v2.16b,#8
++ ext v6.16b,v0.16b,v4.16b,#8
++ add v2.2d,v2.2d,v25.2d
++.long 0xcec08293
++ ext v7.16b,v23.16b,v16.16b,#8
++.long 0xce6680a2
++.long 0xce678a53
++ add v1.2d,v0.2d,v2.2d
++.long 0xce638402
++ add v24.2d,v24.2d,v20.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v1.16b,v4.16b,#8
++ ext v6.16b,v3.16b,v1.16b,#8
++ add v4.2d,v4.2d,v24.2d
++.long 0xcec082b4
++ ext v7.16b,v16.16b,v17.16b,#8
++.long 0xce6680a4
++.long 0xce678a74
++ add v0.2d,v3.2d,v4.2d
++.long 0xce628464
++ add v25.2d,v25.2d,v21.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v0.16b,v1.16b,#8
++ ext v6.16b,v2.16b,v0.16b,#8
++ add v1.2d,v1.2d,v25.2d
++.long 0xcec082d5
++ ext v7.16b,v17.16b,v18.16b,#8
++.long 0xce6680a1
++.long 0xce678a95
++ add v3.2d,v2.2d,v1.2d
++.long 0xce648441
++ add v24.2d,v24.2d,v22.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v3.16b,v0.16b,#8
++ ext v6.16b,v4.16b,v3.16b,#8
++ add v0.2d,v0.2d,v24.2d
++.long 0xcec082f6
++ ext v7.16b,v18.16b,v19.16b,#8
++.long 0xce6680a0
++.long 0xce678ab6
++ add v2.2d,v4.2d,v0.2d
++.long 0xce618480
++ add v25.2d,v25.2d,v23.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v2.16b,v3.16b,#8
++ ext v6.16b,v1.16b,v2.16b,#8
++ add v3.2d,v3.2d,v25.2d
++.long 0xcec08217
++ ext v7.16b,v19.16b,v20.16b,#8
++.long 0xce6680a3
++.long 0xce678ad7
++ add v4.2d,v1.2d,v3.2d
++.long 0xce608423
++ add v24.2d,v24.2d,v16.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v4.16b,v2.16b,#8
++ ext v6.16b,v0.16b,v4.16b,#8
++ add v2.2d,v2.2d,v24.2d
++.long 0xcec08230
++ ext v7.16b,v20.16b,v21.16b,#8
++.long 0xce6680a2
++.long 0xce678af0
++ add v1.2d,v0.2d,v2.2d
++.long 0xce638402
++ add v25.2d,v25.2d,v17.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v1.16b,v4.16b,#8
++ ext v6.16b,v3.16b,v1.16b,#8
++ add v4.2d,v4.2d,v25.2d
++.long 0xcec08251
++ ext v7.16b,v21.16b,v22.16b,#8
++.long 0xce6680a4
++.long 0xce678a11
++ add v0.2d,v3.2d,v4.2d
++.long 0xce628464
++ add v24.2d,v24.2d,v18.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v0.16b,v1.16b,#8
++ ext v6.16b,v2.16b,v0.16b,#8
++ add v1.2d,v1.2d,v24.2d
++.long 0xcec08272
++ ext v7.16b,v22.16b,v23.16b,#8
++.long 0xce6680a1
++.long 0xce678a32
++ add v3.2d,v2.2d,v1.2d
++.long 0xce648441
++ add v25.2d,v25.2d,v19.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v3.16b,v0.16b,#8
++ ext v6.16b,v4.16b,v3.16b,#8
++ add v0.2d,v0.2d,v25.2d
++.long 0xcec08293
++ ext v7.16b,v23.16b,v16.16b,#8
++.long 0xce6680a0
++.long 0xce678a53
++ add v2.2d,v4.2d,v0.2d
++.long 0xce618480
++ add v24.2d,v24.2d,v20.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v2.16b,v3.16b,#8
++ ext v6.16b,v1.16b,v2.16b,#8
++ add v3.2d,v3.2d,v24.2d
++.long 0xcec082b4
++ ext v7.16b,v16.16b,v17.16b,#8
++.long 0xce6680a3
++.long 0xce678a74
++ add v4.2d,v1.2d,v3.2d
++.long 0xce608423
++ add v25.2d,v25.2d,v21.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v4.16b,v2.16b,#8
++ ext v6.16b,v0.16b,v4.16b,#8
++ add v2.2d,v2.2d,v25.2d
++.long 0xcec082d5
++ ext v7.16b,v17.16b,v18.16b,#8
++.long 0xce6680a2
++.long 0xce678a95
++ add v1.2d,v0.2d,v2.2d
++.long 0xce638402
++ add v24.2d,v24.2d,v22.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v1.16b,v4.16b,#8
++ ext v6.16b,v3.16b,v1.16b,#8
++ add v4.2d,v4.2d,v24.2d
++.long 0xcec082f6
++ ext v7.16b,v18.16b,v19.16b,#8
++.long 0xce6680a4
++.long 0xce678ab6
++ add v0.2d,v3.2d,v4.2d
++.long 0xce628464
++ add v25.2d,v25.2d,v23.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v0.16b,v1.16b,#8
++ ext v6.16b,v2.16b,v0.16b,#8
++ add v1.2d,v1.2d,v25.2d
++.long 0xcec08217
++ ext v7.16b,v19.16b,v20.16b,#8
++.long 0xce6680a1
++.long 0xce678ad7
++ add v3.2d,v2.2d,v1.2d
++.long 0xce648441
++ add v24.2d,v24.2d,v16.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v3.16b,v0.16b,#8
++ ext v6.16b,v4.16b,v3.16b,#8
++ add v0.2d,v0.2d,v24.2d
++.long 0xcec08230
++ ext v7.16b,v20.16b,v21.16b,#8
++.long 0xce6680a0
++.long 0xce678af0
++ add v2.2d,v4.2d,v0.2d
++.long 0xce618480
++ add v25.2d,v25.2d,v17.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v2.16b,v3.16b,#8
++ ext v6.16b,v1.16b,v2.16b,#8
++ add v3.2d,v3.2d,v25.2d
++.long 0xcec08251
++ ext v7.16b,v21.16b,v22.16b,#8
++.long 0xce6680a3
++.long 0xce678a11
++ add v4.2d,v1.2d,v3.2d
++.long 0xce608423
++ add v24.2d,v24.2d,v18.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v4.16b,v2.16b,#8
++ ext v6.16b,v0.16b,v4.16b,#8
++ add v2.2d,v2.2d,v24.2d
++.long 0xcec08272
++ ext v7.16b,v22.16b,v23.16b,#8
++.long 0xce6680a2
++.long 0xce678a32
++ add v1.2d,v0.2d,v2.2d
++.long 0xce638402
++ add v25.2d,v25.2d,v19.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v1.16b,v4.16b,#8
++ ext v6.16b,v3.16b,v1.16b,#8
++ add v4.2d,v4.2d,v25.2d
++.long 0xcec08293
++ ext v7.16b,v23.16b,v16.16b,#8
++.long 0xce6680a4
++.long 0xce678a53
++ add v0.2d,v3.2d,v4.2d
++.long 0xce628464
++ add v24.2d,v24.2d,v20.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v0.16b,v1.16b,#8
++ ext v6.16b,v2.16b,v0.16b,#8
++ add v1.2d,v1.2d,v24.2d
++.long 0xcec082b4
++ ext v7.16b,v16.16b,v17.16b,#8
++.long 0xce6680a1
++.long 0xce678a74
++ add v3.2d,v2.2d,v1.2d
++.long 0xce648441
++ add v25.2d,v25.2d,v21.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v3.16b,v0.16b,#8
++ ext v6.16b,v4.16b,v3.16b,#8
++ add v0.2d,v0.2d,v25.2d
++.long 0xcec082d5
++ ext v7.16b,v17.16b,v18.16b,#8
++.long 0xce6680a0
++.long 0xce678a95
++ add v2.2d,v4.2d,v0.2d
++.long 0xce618480
++ add v24.2d,v24.2d,v22.2d
++ ld1 {v25.2d},[x3],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v2.16b,v3.16b,#8
++ ext v6.16b,v1.16b,v2.16b,#8
++ add v3.2d,v3.2d,v24.2d
++.long 0xcec082f6
++ ext v7.16b,v18.16b,v19.16b,#8
++.long 0xce6680a3
++.long 0xce678ab6
++ add v4.2d,v1.2d,v3.2d
++.long 0xce608423
++ add v25.2d,v25.2d,v23.2d
++ ld1 {v24.2d},[x3],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v4.16b,v2.16b,#8
++ ext v6.16b,v0.16b,v4.16b,#8
++ add v2.2d,v2.2d,v25.2d
++.long 0xcec08217
++ ext v7.16b,v19.16b,v20.16b,#8
++.long 0xce6680a2
++.long 0xce678ad7
++ add v1.2d,v0.2d,v2.2d
++.long 0xce638402
++ ld1 {v25.2d},[x3],#16
++ add v24.2d,v24.2d,v16.2d
++ ld1 {v16.16b},[x1],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v1.16b,v4.16b,#8
++ ext v6.16b,v3.16b,v1.16b,#8
++ add v4.2d,v4.2d,v24.2d
++.long 0xce6680a4
++ rev64 v16.16b,v16.16b
++ add v0.2d,v3.2d,v4.2d
++.long 0xce628464
++ ld1 {v24.2d},[x3],#16
++ add v25.2d,v25.2d,v17.2d
++ ld1 {v17.16b},[x1],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v0.16b,v1.16b,#8
++ ext v6.16b,v2.16b,v0.16b,#8
++ add v1.2d,v1.2d,v25.2d
++.long 0xce6680a1
++ rev64 v17.16b,v17.16b
++ add v3.2d,v2.2d,v1.2d
++.long 0xce648441
++ ld1 {v25.2d},[x3],#16
++ add v24.2d,v24.2d,v18.2d
++ ld1 {v18.16b},[x1],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v3.16b,v0.16b,#8
++ ext v6.16b,v4.16b,v3.16b,#8
++ add v0.2d,v0.2d,v24.2d
++.long 0xce6680a0
++ rev64 v18.16b,v18.16b
++ add v2.2d,v4.2d,v0.2d
++.long 0xce618480
++ ld1 {v24.2d},[x3],#16
++ add v25.2d,v25.2d,v19.2d
++ ld1 {v19.16b},[x1],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v2.16b,v3.16b,#8
++ ext v6.16b,v1.16b,v2.16b,#8
++ add v3.2d,v3.2d,v25.2d
++.long 0xce6680a3
++ rev64 v19.16b,v19.16b
++ add v4.2d,v1.2d,v3.2d
++.long 0xce608423
++ ld1 {v25.2d},[x3],#16
++ add v24.2d,v24.2d,v20.2d
++ ld1 {v20.16b},[x1],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v4.16b,v2.16b,#8
++ ext v6.16b,v0.16b,v4.16b,#8
++ add v2.2d,v2.2d,v24.2d
++.long 0xce6680a2
++ rev64 v20.16b,v20.16b
++ add v1.2d,v0.2d,v2.2d
++.long 0xce638402
++ ld1 {v24.2d},[x3],#16
++ add v25.2d,v25.2d,v21.2d
++ ld1 {v21.16b},[x1],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v1.16b,v4.16b,#8
++ ext v6.16b,v3.16b,v1.16b,#8
++ add v4.2d,v4.2d,v25.2d
++.long 0xce6680a4
++ rev64 v21.16b,v21.16b
++ add v0.2d,v3.2d,v4.2d
++.long 0xce628464
++ ld1 {v25.2d},[x3],#16
++ add v24.2d,v24.2d,v22.2d
++ ld1 {v22.16b},[x1],#16
++ ext v24.16b,v24.16b,v24.16b,#8
++ ext v5.16b,v0.16b,v1.16b,#8
++ ext v6.16b,v2.16b,v0.16b,#8
++ add v1.2d,v1.2d,v24.2d
++.long 0xce6680a1
++ rev64 v22.16b,v22.16b
++ add v3.2d,v2.2d,v1.2d
++.long 0xce648441
++ sub x3,x3,#80*8
++ add v25.2d,v25.2d,v23.2d
++ ld1 {v23.16b},[x1],#16
++ ext v25.16b,v25.16b,v25.16b,#8
++ ext v5.16b,v3.16b,v0.16b,#8
++ ext v6.16b,v4.16b,v3.16b,#8
++ add v0.2d,v0.2d,v25.2d
++.long 0xce6680a0
++ rev64 v23.16b,v23.16b
++ add v2.2d,v4.2d,v0.2d
++.long 0xce618480
++ add v0.2d,v0.2d,v26.2d
++ add v1.2d,v1.2d,v27.2d
++ add v2.2d,v2.2d,v28.2d
++ add v3.2d,v3.2d,v29.2d
++
++ cbnz x2,Loop_hw
++
++ st1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0]
++
++ ldr x29,[sp],#16
++ ret
++
++
++
++.comm __gnutls_arm_cpuid_s,4,4
diff --git a/data/gnutls/cflags.diff b/data/gnutls/cflags.diff
deleted file mode 100644
index 50dbf5f08..000000000
--- a/data/gnutls/cflags.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru gnutls-2.4.1/lib/libgnutls-config.in gnutls-2.4.1+iPhone/lib/libgnutls-config.in
---- gnutls-2.4.1/lib/libgnutls-config.in 2008-06-19 10:00:10.000000000 +0000
-+++ gnutls-2.4.1+iPhone/lib/libgnutls-config.in 2008-08-18 17:48:32.000000000 +0000
-@@ -4,10 +4,6 @@
- exec_prefix=@exec_prefix@
- exec_prefix_set=no
-
--gnutls_libs="@LIBGNUTLS_LIBS@"
--gnutls_cflags="@LIBGNUTLS_CFLAGS@"
--gnutls_la_file="@libdir@/libgnutls.la"
--
- usage()
- {
- cat <<EOF
-@@ -72,6 +68,10 @@
- shift
- done
-
-+gnutls_libs="@LIBGNUTLS_LIBS@"
-+gnutls_cflags="@LIBGNUTLS_CFLAGS@"
-+gnutls_la_file="@libdir@/libgnutls.la"
-+
- if test "$echo_prefix" = "yes"; then
- echo $prefix
- fi
diff --git a/data/gnutls/gnutls-2.4.1.tar.bz2 b/data/gnutls/gnutls-2.4.1.tar.bz2
deleted file mode 100644
index 38c8c55bb..000000000
--- a/data/gnutls/gnutls-2.4.1.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/gnutls/gnutls-3.5.19.tar.xz b/data/gnutls/gnutls-3.5.19.tar.xz
new file mode 100644
index 000000000..e881270b1
--- /dev/null
+++ b/data/gnutls/gnutls-3.5.19.tar.xz
Binary files differ
diff --git a/data/gnutls/make.sh b/data/gnutls/make.sh
index e02dc72bc..0db47e445 100644
--- a/data/gnutls/make.sh
+++ b/data/gnutls/make.sh
@@ -1,4 +1,7 @@
pkg:setup
-pkg:configure --with-libgcrypt-prefix="$(PKG_DEST_ gcrypt)/usr" --with-included-libtasn1
-make
-pkg:install
+autoreconf -f -i
+pkg:configure --with-included-libtasn1 --without-libiconv-prefix --without-libintl-prefix --without-libseccomp-prefix \
+ --without-libcrypto-prefix --without-librt-prefix --without-libpthread-prefix --without-libnsl-prefix \
+ --without-libunistring-prefix --without-libdl-prefix --without-libz-prefix P11_KIT_LIBS="-lp11-kit"
+make -j8 V=1
+pkg:install V=1
diff --git a/data/grep/_metadata/in.1443.00 b/data/grep/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/grep/_metadata/in.1443.00
diff --git a/data/grep/_metadata/maintainer b/data/grep/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/grep/_metadata/maintainer
+++ b/data/grep/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/grep/_metadata/version b/data/grep/_metadata/version
index fe16b348d..8c50098d8 100644
--- a/data/grep/_metadata/version
+++ b/data/grep/_metadata/version
@@ -1 +1 @@
-2.5.4
+3.1
diff --git a/data/grep/grep-2.5.4.tar.bz2 b/data/grep/grep-2.5.4.tar.bz2
deleted file mode 100644
index 48ee68c90..000000000
--- a/data/grep/grep-2.5.4.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/grep/grep-3.1.tar.xz b/data/grep/grep-3.1.tar.xz
new file mode 100644
index 000000000..cd1ab0cda
--- /dev/null
+++ b/data/grep/grep-3.1.tar.xz
Binary files differ
diff --git a/data/grep/make.sh b/data/grep/make.sh
index 38d617b80..eda88f015 100644
--- a/data/grep/make.sh
+++ b/data/grep/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-pkg:configure --disable-perl-regexp --bindir=/bin
-make
+pkg:configure --disable-perl-regexp --bindir=/bin ac_use_included_regex=no
+make -j8
pkg:install
diff --git a/data/grep/regcomp.diff b/data/grep/regcomp.diff
deleted file mode 100644
index f4922f80d..000000000
--- a/data/grep/regcomp.diff
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -ru grep-2.5/lib/regex.c grep-2.5+iPhone/lib/regex.c
---- grep-2.5/lib/regex.c 2001-04-02 18:04:45.000000000 +0000
-+++ grep-2.5+iPhone/lib/regex.c 2008-04-05 05:18:34.000000000 +0000
-@@ -80,13 +80,13 @@
- # define PUT_CHAR(c) putchar (c)
- #endif /* MBS_SUPPORT */
-
--#ifdef _LIBC
--/* We have to keep the namespace clean. */
- # define regfree(preg) __regfree (preg)
- # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
- # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
- # define regerror(errcode, preg, errbuf, errbuf_size) \
- __regerror(errcode, preg, errbuf, errbuf_size)
-+#ifdef _LIBC
-+/* We have to keep the namespace clean. */
- # define re_set_registers(bu, re, nu, st, en) \
- __re_set_registers (bu, re, nu, st, en)
- # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
diff --git a/data/gzip/_metadata/grep.dep b/data/gzip/_metadata/grep.dep
deleted file mode 120000
index a7c23a155..000000000
--- a/data/gzip/_metadata/grep.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../grep \ No newline at end of file
diff --git a/data/gzip/_metadata/in.1443.00 b/data/gzip/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/gzip/_metadata/in.1443.00
diff --git a/data/gzip/_metadata/maintainer b/data/gzip/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/gzip/_metadata/maintainer
+++ b/data/gzip/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/gzip/_metadata/version b/data/gzip/_metadata/version
index 810ee4e91..2e0e38c63 100644
--- a/data/gzip/_metadata/version
+++ b/data/gzip/_metadata/version
@@ -1 +1 @@
-1.6
+1.9
diff --git a/data/gzip/gzip-1.6.tar.gz b/data/gzip/gzip-1.6.tar.gz
deleted file mode 100644
index 5307e7537..000000000
--- a/data/gzip/gzip-1.6.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/gzip/gzip-1.9.tar.xz b/data/gzip/gzip-1.9.tar.xz
new file mode 100644
index 000000000..26b7f19f8
--- /dev/null
+++ b/data/gzip/gzip-1.9.tar.xz
Binary files differ
diff --git a/data/gzip/make.sh b/data/gzip/make.sh
index 00bf96237..a1db2e024 100644
--- a/data/gzip/make.sh
+++ b/data/gzip/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+autoreconf
pkg:configure
make
pkg:install
diff --git a/data/hackndev.org/_metadata/description b/data/hackndev.org/_metadata/description
deleted file mode 100644
index 6913ea734..000000000
--- a/data/hackndev.org/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-iCommander Master Source
diff --git a/data/hackndev.org/_metadata/license b/data/hackndev.org/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/hackndev.org/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/hackndev.org/_metadata/maintainer b/data/hackndev.org/_metadata/maintainer
deleted file mode 100644
index e364184f1..000000000
--- a/data/hackndev.org/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Vladimir Pouzanov <farcaller@gmail.com>
diff --git a/data/hackndev.org/_metadata/name b/data/hackndev.org/_metadata/name
deleted file mode 100644
index f9955d3b7..000000000
--- a/data/hackndev.org/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-Hack&Dev Team Source
diff --git a/data/hackndev.org/_metadata/postinst b/data/hackndev.org/_metadata/postinst
deleted file mode 100755
index fb793da23..000000000
--- a/data/hackndev.org/_metadata/postinst
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-/usr/bin/apt-key add /usr/share/keyrings/hackndev.org-keyring.gpg
diff --git a/data/hackndev.org/_metadata/prerm b/data/hackndev.org/_metadata/prerm
deleted file mode 100755
index cb91eb374..000000000
--- a/data/hackndev.org/_metadata/prerm
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-case "$1" in
- (remove|purge)
- /usr/bin/apt-key del EC85EE8E
- ;;
-esac
diff --git a/data/hackndev.org/_metadata/role b/data/hackndev.org/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/hackndev.org/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/hackndev.org/_metadata/section b/data/hackndev.org/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/hackndev.org/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/hackndev.org/_metadata/tags b/data/hackndev.org/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/hackndev.org/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/hackndev.org/_metadata/version b/data/hackndev.org/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/hackndev.org/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/hackndev.org/farcaller.gpg b/data/hackndev.org/farcaller.gpg
deleted file mode 100644
index e05675bf6..000000000
--- a/data/hackndev.org/farcaller.gpg
+++ /dev/null
@@ -1,46 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.8 (Darwin)
-
-mQGiBEiYW80RBACFumKy8/gf/iuNyzCr7rw02OM4mVP5Ad+J9l8WZvKnEX6gMuDX
-7ghjwoa2BbSp184mSCk4+B/6T4WeT6CvAgQl7gk3S+RiwjYy51eFW6G3YYqiV4ro
-kbt1kpqV/ysdfsgwFWV+BK37jq1HPMYPSyOLHM3eMEjji942FxUHfWPwEwCgvWwb
-MqakfwJTtO6Rj5tWDFGlAC8D/0s0FM2bun2NdJ2GK/lFfeDKjrK2dupapmMtjxuj
-gi6B9POd+7aSNnZfaoYuhFfClupO+zqDlOWd8IZ860IFby4znKmOYL/WwJjtnxIc
-s3I4OSRUm7U2baVJfgRgQm+srzvIkJ/Q/YpRoZLMc6OIjabM0MtzkUWp1nmFEWJh
-LxpiA/94ZITapDN45DvB1bbHCAglVfgD2D9JLtxkDx1g9Vkaqfy8EAaKA7XUJtkG
-Yv62WY77idLNqJtIuKIGAb1knFNkRydqzy+k11ggWjVKHe+ibEBFxidsjCYyl9bX
-EjkFhhqPGxqtMYkaWaorwdaesvjeeuf6/SLut7kfBLipqOVhILQ2VmxhZGltaXIg
-UG91emFub3YgKEZhcmNhbGxlcikgPGZhcmNhbGxlckBoYWNrbmRldi5jb20+iGYE
-ExECACYFAkiYX9MCGwMFCQHhM4AGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRDG
-L52s7IXujtkKAJwLaqaVovplUD83FLYxK+ksVQ8EYwCggTAsfUNSlm1+HWTKBLiV
-hhx9tv2JARwEEAECAAYFAkiYYp8ACgkQbNN82ZB62XU98AgAvB0ILM7ZGy2/xVrC
-XHIEXurnJfy+mRzIgkqPDHmJ1MBznG52pzj+FPvgx2o4WQx5YW8inykIppGy+wlj
-HSSiuXgz/DmjkcVy+zTLei8QBi/HIgNctFWu0LK2TgmUgq627BZ1yb5XUuY3ngkJ
-AgDZeonRB5U0UVJeheAHtNk7o1+1Ffh5AJEqe4dxESp9o4ySF4faDravTnyqWSDZ
-YCpWUVNVJLQC/MQ1GYYd64dgA90bWnCq1auAHEIYCEB48vP7YHze24ar/HKsEkNT
-rZgXP3l+kw0DNj/ji9xRx5hGJ9rqsCwY7gcJ43gok0mLE/nua6D/su7rLrr504Mb
-ecjJQLQzVmxhZGltaXIgUG91emFub3YgKEZhcmNhbGxlcikgPGZhcmNhbGxlckBn
-bWFpbC5jb20+iGkEExECACkCGwMFCQHhM4AGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
-gAUCSJhmhAIZAQAKCRDGL52s7IXujoXMAKCPUP64GWbb/1cLV5wPuIq55+7TGwCf
-WJIfS5kbxXsX2uHNeRz2q/oMB1yJARwEEAECAAYFAkiYYp8ACgkQbNN82ZB62XVD
-pQf/cbeol5LAyys7yD2vYzTmjIaOR7s/uCeyr5pfT3m+6I3H/meNVi6sh4ehuxyT
-EawSh7gTUi6crrgbVMpRCz6ZQ17XEwO7uX7enq9eo9j25d7qhy/SoxxYVZZoJmsH
-zymT/IGtGctonaU120oK0zY7Ln9a/gJ09RJUHyasph3YQm9dGi9CzgKpAjXXZqsn
-eU0yXq9FETetiyg5naKrJ//WIltTDEGoICIhz7y7KfAtT7uDd6xv2yU8sgJnchc1
-IehLhWsBdWJocWyJ95S/sNC5pLfWzIXhVm33DFzdE8GX1+S60iyIxs0XCgRnXJIn
-DJIFrwg1XSYV71KbZUPRKx6+W7kCDQRImFvNEAgAnYCLbVSCkyDGxsscCGcI0wRl
-HtixKR/7XQhGZLBd7uyVK/dQ92/UplhL15wq8+PQxRF0uz9NAQDXyKyB5qGX2Nkr
-9TjkQEKuXMJgYpyJIBjooIgfueLocxIm42a7pt9RvAXexw8PerzEklntDyLBF2eB
-asxN+fXaTpKqtRWXXukTWQTJ6cCSQBBgywABQzPeKZXGLL8nHVRlURQ2gZSA82OD
-wjfwQHur014WUfH9xh5S6+X00TR5LFuqwJ99TjxkmBOSEDjp8rsfaIWVQzMY2Cvn
-JKWfG4gE1p6DdaGYZomm/WLUwl3bSGKOnV5xtUARJ1AKoGLlxW0WSz++FeaaIwAD
-BQf+JLmNHWY+SNv+INOj2IYGdbdFmW11lGvXNB4UCnNdd6IgPJjhxlHk5fXYMJ+r
-wjkuIVy+5qLr9e/QX84isTZiFc86Jq19yAheYCZSuqcXUtQQN+VCeotnEUzfCEDp
-uZYJmCCmcANGMOttvQtqy5VRIPT6o8i5xsTq9obLxaK1V//xKZreCnxvyQjqkGbG
-akDym1epxACD8UgtgsBPh9+AseSIm7gWlSgnfAh6QEX7vap2StNWZ+g3Ayh7fypU
-bfWkde/2BHh4673J6bkoHI4d2fAauwUfl983aVKyApaMRJCdMynAnQeiRT63jjUH
-Dq4mSwszUL8ymFrAsy/S/XpeLohPBBgRAgAPBQJImFvNAhsMBQkB4TOAAAoJEMYv
-nazshe6OSZUAn3YyY42fXGPfoFaGHiZpUFZ55aACAJsFncBN3nkOW4bh9ykvt/eu
-cD+aGQ==
-=XAYW
------END PGP PUBLIC KEY BLOCK-----
diff --git a/data/hackndev.org/hackndev.org.list b/data/hackndev.org/hackndev.org.list
deleted file mode 100644
index f11d68d75..000000000
--- a/data/hackndev.org/hackndev.org.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://iphone.hackndev.org/apt/ hnd main
diff --git a/data/hackndev.org/make.sh b/data/hackndev.org/make.sh
deleted file mode 100644
index 8a44d9347..000000000
--- a/data/hackndev.org/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/hackndev.org.list /etc/apt/sources.list.d
-pkg: mkdir -p /usr/share/keyrings
-pkg: cp -a %/farcaller.gpg /usr/share/keyrings/hackndev.org-keyring.gpg
diff --git a/data/htop/_metadata/description b/data/htop/_metadata/description
new file mode 100644
index 000000000..97a7d7b79
--- /dev/null
+++ b/data/htop/_metadata/description
@@ -0,0 +1 @@
+An interactive process viewer for Unix systems.
diff --git a/data/htop/_metadata/in.1443.00 b/data/htop/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/htop/_metadata/in.1443.00
diff --git a/data/htop/_metadata/license b/data/htop/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/htop/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/htop/_metadata/maintainer b/data/htop/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/htop/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/htop/_metadata/ncurses.dep b/data/htop/_metadata/ncurses.dep
new file mode 120000
index 000000000..a395fad08
--- /dev/null
+++ b/data/htop/_metadata/ncurses.dep
@@ -0,0 +1 @@
+../../ncurses \ No newline at end of file
diff --git a/data/htop/_metadata/ncurses.ver.iphoneos-arm b/data/htop/_metadata/ncurses.ver.iphoneos-arm
new file mode 100644
index 000000000..e0ea36fee
--- /dev/null
+++ b/data/htop/_metadata/ncurses.ver.iphoneos-arm
@@ -0,0 +1 @@
+6.0
diff --git a/data/htop/_metadata/priority b/data/htop/_metadata/priority
new file mode 100644
index 000000000..ea5b3d7ee
--- /dev/null
+++ b/data/htop/_metadata/priority
@@ -0,0 +1 @@
+important
diff --git a/data/htop/_metadata/role b/data/htop/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/htop/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/pam/_metadata/section b/data/htop/_metadata/section
index eb7a34ddd..eb7a34ddd 100644
--- a/data/pam/_metadata/section
+++ b/data/htop/_metadata/section
diff --git a/data/htop/_metadata/tags b/data/htop/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/htop/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/htop/_metadata/version b/data/htop/_metadata/version
new file mode 100644
index 000000000..ccbccc3dc
--- /dev/null
+++ b/data/htop/_metadata/version
@@ -0,0 +1 @@
+2.2.0
diff --git a/data/htop/extern.diff b/data/htop/extern.diff
new file mode 100644
index 000000000..5a62ad093
--- /dev/null
+++ b/data/htop/extern.diff
@@ -0,0 +1,28 @@
+diff -ur htop-2.2.0/CRT.h htop-2.2.0+iPhone/CRT.h
+--- htop-2.2.0/CRT.h 2018-04-10 03:23:24.000000000 -1000
++++ htop-2.2.0+iPhone/CRT.h 2018-08-03 13:45:18.000000000 -1000
+@@ -140,7 +140,7 @@
+
+ extern int CRT_delay;
+
+-int* CRT_colors;
++extern int* CRT_colors;
+
+ extern int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT];
+
+@@ -150,13 +150,13 @@
+
+ extern int CRT_scrollWheelVAmount;
+
+-char* CRT_termType;
++extern char* CRT_termType;
+
+ // TODO move color scheme to Settings, perhaps?
+
+ extern int CRT_colorScheme;
+
+-void *backtraceArray[128];
++extern void *backtraceArray[128];
+
+ #if HAVE_SETUID_ENABLED
+
diff --git a/data/htop/htop-2.2.0.tar.gz b/data/htop/htop-2.2.0.tar.gz
new file mode 100644
index 000000000..b552740ae
--- /dev/null
+++ b/data/htop/htop-2.2.0.tar.gz
Binary files differ
diff --git a/data/htop/make.sh b/data/htop/make.sh
new file mode 100644
index 000000000..e9580110b
--- /dev/null
+++ b/data/htop/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+pkg:configure HTOP_NCURSESW6_CONFIG_SCRIPT="${PKG_DATA}/ncursesw6-config" --disable-linux-affinity
+pkg:make -j8
+pkg:install
+pkg: rm -rf /usr/share
diff --git a/data/htop/ncursesw6-config b/data/htop/ncursesw6-config
new file mode 100755
index 000000000..d9f1bd0ff
--- /dev/null
+++ b/data/htop/ncursesw6-config
@@ -0,0 +1,207 @@
+#!/bin/sh
+# $Id: ncurses-config.in,v 1.36 2017/12/09 22:45:44 tom Exp $
+##############################################################################
+# Copyright (c) 2006-2015,2017 Free Software Foundation, Inc. #
+# #
+# Permission is hereby granted, free of charge, to any person obtaining a #
+# copy of this software and associated documentation files (the "Software"), #
+# to deal in the Software without restriction, including without limitation #
+# the rights to use, copy, modify, merge, publish, distribute, distribute #
+# with modifications, sublicense, and/or sell copies of the Software, and to #
+# permit persons to whom the Software is furnished to do so, subject to the #
+# following conditions: #
+# #
+# The above copyright notice and this permission notice shall be included in #
+# all copies or substantial portions of the Software. #
+# #
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
+# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
+# DEALINGS IN THE SOFTWARE. #
+# #
+# Except as contained in this notice, the name(s) of the above copyright #
+# holders shall not be used in advertising or otherwise to promote the sale, #
+# use or other dealings in this Software without prior written #
+# authorization. #
+##############################################################################
+#
+# Author: Thomas E. Dickey, 2006-on
+
+LANG=C; export LANG
+LANGUAGE=C; export LANGUAGE
+LC_ALL=C; export LC_ALL
+LC_CTYPE=C; export LC_CTYPE
+
+prefix="$(PKG_DEST_ ncurses)/usr"
+exec_prefix="${prefix}"
+
+bindir="${exec_prefix}/bin"
+includedir="${prefix}/include"
+libdir="${exec_prefix}/lib"
+datarootdir="${prefix}/share"
+datadir="${datarootdir}"
+mandir="${datarootdir}/man"
+
+THIS="ncursesw"
+TINFO_LIB="ncursesw"
+RPATH_LIST="${libdir}"
+
+includesubdir="${prefix}/include/${THIS}"
+
+# Ensure that RPATH_LIST contains only absolute pathnames, if it is nonempty.
+# We cannot filter it out within the build-process since the variable is used
+# in some special cases of installation using a relative path.
+if test -n "$RPATH_LIST"
+then
+ save_IFS="$IFS"
+ IFS=':'
+ filtered=
+ for item in $RPATH_LIST
+ do
+ case "$item" in
+ ./*|../*|*/..|*/../*)
+ ;;
+ *)
+ test -n "$filtered" && filtered="${filtered}:"
+ filtered="${filtered}${item}"
+ ;;
+ esac
+ done
+ IFS="$save_IFS"
+ # if the result is empty, there is little we can do to fix it
+ RPATH_LIST="$filtered"
+fi
+
+# with --disable-overwrite, we installed into a subdirectory, but transformed
+# the headers to include like this:
+# <ncursesw/curses.h>
+if test xno = xno ; then
+ case $includedir in
+ $prefix/include/ncursesw)
+ includedir=`echo "$includedir" | sed -e 's,/[^/]*$,,'`
+ ;;
+ esac
+fi
+
+test $# = 0 && exec /bin/sh $0 --error
+
+while test $# -gt 0; do
+ case "$1" in
+ # basic configuration
+ --prefix)
+ echo "$prefix"
+ ;;
+ --exec-prefix)
+ echo "$exec_prefix"
+ ;;
+ # compile/link
+ --cflags)
+ INCS=" -D_DARWIN_C_SOURCE"
+ if test "xno" = xno ; then
+ INCS="$INCS -I${includesubdir}"
+ fi
+ if test "${includedir}" != /usr/include ; then
+ INCS="$INCS -I${includedir}"
+ fi
+ sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
+ $INCS
+ENDECHO
+ ;;
+ --libs)
+ if test "$libdir" = /usr/lib
+ then
+ LIBDIR=
+ else
+ LIBDIR=-L$libdir
+ fi
+ if test ncurses = ncurses ; then
+ sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
+ $LIBDIR -l${THIS}
+ENDECHO
+ else
+ sed -e 's,^[ ]*,,' -e 's, [ ]*, ,g' -e 's,[ ]*$,,' <<-ENDECHO
+ $LIBDIR -l${THIS} -l${TINFO_LIB}
+ENDECHO
+ fi
+ ;;
+ # identification
+ --version)
+ echo "6.1.20180127"
+ ;;
+ --abi-version)
+ echo "6"
+ ;;
+ --mouse-version)
+ echo "2"
+ ;;
+ # locations
+ --bindir)
+ echo "${bindir}"
+ ;;
+ --datadir)
+ echo "${datadir}"
+ ;;
+ --includedir)
+ INCS=
+ if test "xno" = xno ; then
+ INCS="${includesubdir}"
+ elif test "${includedir}" != /usr/include ; then
+ INCS="${includedir}"
+ fi
+ echo $INCS
+ ;;
+ --libdir)
+ echo "${libdir}"
+ ;;
+ --mandir)
+ echo "${mandir}"
+ ;;
+ --terminfo)
+ echo "/usr/share/terminfo"
+ ;;
+ --terminfo-dirs)
+ echo "/usr/share/terminfo"
+ ;;
+ --termpath)
+ echo "/etc/termcap:/usr/share/misc/termcap"
+ ;;
+ # general info
+ --help)
+ cat <<ENDHELP
+Usage: `basename $0` [options]
+
+Options:
+ --prefix echos the package-prefix of ${THIS}
+ --exec-prefix echos the executable-prefix of ${THIS}
+
+ --cflags echos the C compiler flags needed to compile with ${THIS}
+ --libs echos the libraries needed to link with ${THIS}
+
+ --version echos the release+patchdate version of ${THIS}
+ --abi-version echos the ABI version of ${THIS}
+ --mouse-version echos the mouse-interface version of ${THIS}
+
+ --bindir echos the directory containing ${THIS} programs
+ --datadir echos the directory containing ${THIS} data
+ --includedir echos the directory containing ${THIS} header files
+ --libdir echos the directory containing ${THIS} libraries
+ --mandir echos the directory containing ${THIS} manpages
+ --terminfo echos the \$TERMINFO terminfo database path
+ --terminfo-dirs echos the \$TERMINFO_DIRS directory list
+ --termpath echos the \$TERMPATH termcap list
+
+ --help prints this message
+ENDHELP
+ ;;
+ --error|*)
+ /bin/sh $0 --help 1>&2
+ exit 1
+ ;;
+ esac
+ shift
+done
+# vi:ts=4 sw=4
+# vile:shmode
diff --git a/data/hvkls.dyndns.org/_metadata/description b/data/hvkls.dyndns.org/_metadata/description
deleted file mode 100644
index 59cec9f35..000000000
--- a/data/hvkls.dyndns.org/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-André Berger's repository
diff --git a/data/hvkls.dyndns.org/_metadata/license b/data/hvkls.dyndns.org/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/hvkls.dyndns.org/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/hvkls.dyndns.org/_metadata/maintainer b/data/hvkls.dyndns.org/_metadata/maintainer
deleted file mode 100644
index e7222c8c1..000000000
--- a/data/hvkls.dyndns.org/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-André Berger <andre.berger@web.de>
diff --git a/data/hvkls.dyndns.org/_metadata/name b/data/hvkls.dyndns.org/_metadata/name
deleted file mode 100644
index 4ebd5c9f9..000000000
--- a/data/hvkls.dyndns.org/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-HVKLS
diff --git a/data/hvkls.dyndns.org/_metadata/postinst b/data/hvkls.dyndns.org/_metadata/postinst
deleted file mode 100755
index cc9bd1655..000000000
--- a/data/hvkls.dyndns.org/_metadata/postinst
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == configure ]]; then
- /usr/bin/apt-key add /usr/share/keyrings/hvkls.dyndns.org-keyring.gpg
-fi
diff --git a/data/hvkls.dyndns.org/_metadata/prerm b/data/hvkls.dyndns.org/_metadata/prerm
deleted file mode 100755
index c0300a2b9..000000000
--- a/data/hvkls.dyndns.org/_metadata/prerm
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == remove ]]; then
- /usr/bin/apt-key del F9C1FEEB
-fi
diff --git a/data/hvkls.dyndns.org/_metadata/role b/data/hvkls.dyndns.org/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/hvkls.dyndns.org/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/hvkls.dyndns.org/_metadata/section b/data/hvkls.dyndns.org/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/hvkls.dyndns.org/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/hvkls.dyndns.org/_metadata/tags b/data/hvkls.dyndns.org/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/hvkls.dyndns.org/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/hvkls.dyndns.org/_metadata/version b/data/hvkls.dyndns.org/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/hvkls.dyndns.org/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/hvkls.dyndns.org/hvkls.dyndns.org.list b/data/hvkls.dyndns.org/hvkls.dyndns.org.list
deleted file mode 100644
index 9fc4ffeb1..000000000
--- a/data/hvkls.dyndns.org/hvkls.dyndns.org.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://hvkls.dyndns.org/downloads/debian/ ./
diff --git a/data/hvkls.dyndns.org/hvkls_public_gpg.asc b/data/hvkls.dyndns.org/hvkls_public_gpg.asc
deleted file mode 100644
index d9c0ec3af..000000000
--- a/data/hvkls.dyndns.org/hvkls_public_gpg.asc
+++ /dev/null
@@ -1,42 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-mQGiBElNCHoRBAChgzGeC5hYtMHN29xp8QnuRoPA/p4hY2vRUG3NVgITvV1rkto2
-v9ZDm+jZqX445+V03MREm2/Fr0lz5Omk2HMY2bOHR+KVPEZhl/ACrIqU/BC9d/Dg
-+RczWeI+n3xvOIkAi3LhOwXdFDrzibU5Z+63wgtKLHLzgO8q9YDch7vXDwCgsFa1
-xyv7beF0AnEXGse6CDNxbUED/j9xFI3SFx0ErU8VflfK+EuIbztrBZaN3cNeudj7
-EmKvr7WPB937TWb+1wN441Ag/inK30MR0jL1p7Azh0ZI3WFAdj75O1FcbVP80udL
-Ul29wcqdIdkAn2gexI4U8+d4RIecIg/ELuhz+oLXhCZ/fulxiz/IQZB9z8ac+TQC
-3AWSA/97nF4CXcx6PRiPtbWICbS0L1ZlIg7AEJn8o60OYHVOIK22kpJ4VWf+YI67
-YgpeOs1wcV3NCrYUwVRunHqoHdJiU2VJTEtsr4oqcYGcc3VyakxEzmVQBYRwBn7s
-0aIkQLcRsDe4VtV9m3Q5m8etWPr+STuuKuL+iw/+l6TvkZr68bR3QW5kcmUgQmVy
-Z2VyIChFLU1haWwgYWRkcmVzcyBub3QgdmFsaWQ7IHVzZSA8aHR0cHM6Ly9odmts
-cy5keW5kbnMub3JnL2NvbnRhY3QuaHRtbD4gaW5zdGVhZCkgPGludmFsaWRAaHZr
-bHMuZHluZG5zLm9yZz6IYAQTEQIAIAUCSU0IegIbAwYLCQgHAwIEFQIIAwQWAgMB
-Ah4BAheAAAoJEHsl/3D5wf7ru6YAniR6KYOCpi5PA+nObQZFk0KLnuuKAJ4hxWFO
-JKWuVM/7o5NGAhqcN/pqpbkEDQRJTRpzEBAA5B7JzEqclO3pPPDjac0DueeNB0TJ
-mI6jNAmSYMZpLsl1aWBXXFQJdxN3YL1jj0xy5Q6njHUFxxIqzfDKxaq4ZAvcpVhF
-yl0aJfEYG3BH+1UpUizG91OymuuWF+8B8PbMvYgiArA70bkoomWysIwsiuPQsgpR
-6/2KVIDVnSPKJ8zEJ3YsuMHGQAJdx5gLK2EADYJxfWX81RbKuhrGenoSjFbPc6rK
-8vykkc2OBFUaG5hIRMHP5wUrlel1y/UtH/Aa2OtnGCymHIaKwHLmg3nB4RSYjWY1
-gIk6+fsyikRQ2JzFd615DMjD4mUq4RNtpTIj4g59+zt0BBSBZRfG0TrBRh5LbsfZ
-ovMtcWTmDiXBtcsK+fUcRjkE22QTnWvOJEp1wYJe1EiROOoeNLU2Igm/GQ42Mo65
-IsPDS2tq8/76VzrkfwaOZfiNhzcyUT6D0mW4dpcpKZH+5BHJB7tgvDYP9MMHVVre
-yud73KFt1x7PxV3j/9m1NiNHtWIcXIkc2loc/SGjiP8S7EHyzL5gbOVGifoNCNfJ
-uMfg1cn5DNnkz/IZruF8stG0Gs6WYJjNCz54w6IXHyCHELRkM3owSC0wvLuDCm/+
-Wd70ntKfEoiJDwEaPaAxIL1YFt4qnYj8Jf+0SixRbg5q+TAXwE2hoEYO6leBp2JB
-LPFplJ7+tLrXQvsAAwUP/i9IWcXYSpbk02aGv9tYxhqjxxkuUr3sWlqkgqAfkq8R
-k+dFzZor/cUNM2RM9/sQQunr9q9g/OZPLwSjkftmG+WaXvgDHYOXCi26ACz0cGYL
-/61TUOkTRVMUPIMUQOcFeVcD65UPvlGJnBKOdL04nTta54BYZODcT0juxmTlpn7o
-1oc2Jj1gYngk9N2diUEw74PGXaS5P0rt4v3471i6wZgsWajzw6rMNwPOV2XBkXaG
-Q9Kxp/GefVdmmiP2BrElD1YxHLMRq9ZYocoTZ0eBwQwzvfwPkgy28I6uSwXQQOx8
-mCy9Z1Ud+0xHJf5ZKpwnEQzByOcCQbDw0x1QNFZWa4ko6/GlC5iawRAHLqX/nPAB
-LEW0naSEoEmn+sR5JpMKoMklR3f3o/l5fpKD655YPaqTAWZght3EUXB0038O95J3
-pqi/HXdVYnYsZlhyIYGPmok1JqqHuooToY/XH2RGct0iai5EQlL6/eqsKceHlL2e
-WiIkuEm30Uwmb8V7/Ar9Psdyab7paVeX/PdsEkxJ9/x+8tvsZaX9Wr1x8HFCBNCd
-4uLoYOZnr4VQ8oaOLN6zLBAUsmXdrN+4cIpNg21+h4tEfOg+FaERsFoBOCH9nK61
-dOzPGum1OUN7T8CUm3cLd1IHktQVwD5OfP5KUKc6XBI1egYzDYeVEQY28rgFDx50
-iEkEGBECAAkFAklNGnMCGwwACgkQeyX/cPnB/uu34wCeJ/JmIk4hrYv2qbqIxx0x
-A1vLO3IAoJLFm9jK/10Tm3aylr2YsX4vi/JW
-=uFup
------END PGP PUBLIC KEY BLOCK-----
diff --git a/data/hvkls.dyndns.org/make.sh b/data/hvkls.dyndns.org/make.sh
deleted file mode 100644
index b97f9e514..000000000
--- a/data/hvkls.dyndns.org/make.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/hvkls.dyndns.org.list /etc/apt/sources.list.d
-pkg: mkdir -p /usr/share/keyrings
-pkg: cp -a %/hvkls_public_gpg.asc /usr/share/keyrings/hvkls.dyndns.org-keyring.gpg
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/sun.png /Applications/Cydia.app/Sources/hvkls.dyndns.org.png
diff --git a/data/hvkls.dyndns.org/sun.png b/data/hvkls.dyndns.org/sun.png
deleted file mode 100644
index 106440ba6..000000000
--- a/data/hvkls.dyndns.org/sun.png
+++ /dev/null
Binary files differ
diff --git a/data/iacces.com/_metadata/description b/data/iacces.com/_metadata/description
deleted file mode 100644
index 19bea1b5b..000000000
--- a/data/iacces.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-iAcces Master Repository
diff --git a/data/iacces.com/_metadata/license b/data/iacces.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/iacces.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/iacces.com/_metadata/maintainer b/data/iacces.com/_metadata/maintainer
deleted file mode 100644
index fd92da972..000000000
--- a/data/iacces.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Mason Ng <kk@phoebe.li>
diff --git a/data/iacces.com/_metadata/name b/data/iacces.com/_metadata/name
deleted file mode 100644
index 087c9825f..000000000
--- a/data/iacces.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iAcces's Source
diff --git a/data/iacces.com/_metadata/role b/data/iacces.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/iacces.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/iacces.com/_metadata/section b/data/iacces.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/iacces.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/iacces.com/_metadata/tags b/data/iacces.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/iacces.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/iacces.com/_metadata/version b/data/iacces.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/iacces.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/iacces.com/iacces.com.list b/data/iacces.com/iacces.com.list
deleted file mode 100644
index 367c39593..000000000
--- a/data/iacces.com/iacces.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://www.iacces.com/apt/ ./
diff --git a/data/iacces.com/make.sh b/data/iacces.com/make.sh
deleted file mode 100644
index 4156675a9..000000000
--- a/data/iacces.com/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/iacces.com.list /etc/apt/sources.list.d
diff --git a/data/ice/_metadata/in.1443.00 b/data/ice/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ice/_metadata/in.1443.00
diff --git a/data/ice/_metadata/maintainer b/data/ice/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ice/_metadata/maintainer
+++ b/data/ice/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ice/_metadata/version b/data/ice/_metadata/version
index ee90284c2..66c4c2263 100644
--- a/data/ice/_metadata/version
+++ b/data/ice/_metadata/version
@@ -1 +1 @@
-1.0.4
+1.0.9
diff --git a/data/ice/libICE-1.0.4.tar.gz b/data/ice/libICE-1.0.4.tar.gz
deleted file mode 100644
index a64b0b7c0..000000000
--- a/data/ice/libICE-1.0.4.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/ice/libICE-1.0.9.tar.bz2 b/data/ice/libICE-1.0.9.tar.bz2
new file mode 100644
index 000000000..a9cc7d4e6
--- /dev/null
+++ b/data/ice/libICE-1.0.9.tar.bz2
Binary files differ
diff --git a/data/ice/make.sh b/data/ice/make.sh
index 452a4bfd5..f24f8a191 100644
--- a/data/ice/make.sh
+++ b/data/ice/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+autoreconf -f -i
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/iclarified.com/_metadata/description b/data/iclarified.com/_metadata/description
deleted file mode 100644
index fc5ce6682..000000000
--- a/data/iclarified.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-repository from iClarified ;P
diff --git a/data/iclarified.com/_metadata/license b/data/iclarified.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/iclarified.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/iclarified.com/_metadata/maintainer b/data/iclarified.com/_metadata/maintainer
deleted file mode 100644
index 6fb279732..000000000
--- a/data/iclarified.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-iClarified <development@iClarified.com>
diff --git a/data/iclarified.com/_metadata/name b/data/iclarified.com/_metadata/name
deleted file mode 100644
index 5f1246954..000000000
--- a/data/iclarified.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iClarified's Source
diff --git a/data/iclarified.com/_metadata/role b/data/iclarified.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/iclarified.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/iclarified.com/_metadata/section b/data/iclarified.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/iclarified.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/iclarified.com/_metadata/tags b/data/iclarified.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/iclarified.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/iclarified.com/_metadata/version b/data/iclarified.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/iclarified.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/iclarified.com/iclarified.com.list b/data/iclarified.com/iclarified.com.list
deleted file mode 100644
index 7d28235c2..000000000
--- a/data/iclarified.com/iclarified.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://cydia.iclarified.com/ ./
diff --git a/data/iclarified.com/make.sh b/data/iclarified.com/make.sh
deleted file mode 100644
index 306671ba4..000000000
--- a/data/iclarified.com/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/iclarified.com.list /etc/apt/sources.list.d
diff --git a/data/ifon1.no/_metadata/description b/data/ifon1.no/_metadata/description
deleted file mode 100644
index a836ff7d8..000000000
--- a/data/ifon1.no/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Norwegian language support packages
diff --git a/data/ifon1.no/_metadata/license b/data/ifon1.no/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/ifon1.no/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/ifon1.no/_metadata/maintainer b/data/ifon1.no/_metadata/maintainer
deleted file mode 100644
index dbc4b4bfa..000000000
--- a/data/ifon1.no/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-ZiPLe <ziple@ifon1.no>
diff --git a/data/ifon1.no/_metadata/name b/data/ifon1.no/_metadata/name
deleted file mode 100644
index dfd4e0512..000000000
--- a/data/ifon1.no/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iFon Norway
diff --git a/data/ifon1.no/_metadata/role b/data/ifon1.no/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/ifon1.no/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/ifon1.no/_metadata/section b/data/ifon1.no/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/ifon1.no/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/ifon1.no/_metadata/tags b/data/ifon1.no/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/ifon1.no/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/ifon1.no/_metadata/version b/data/ifon1.no/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/ifon1.no/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/ifon1.no/ifon1.no.list b/data/ifon1.no/ifon1.no.list
deleted file mode 100644
index b537127c7..000000000
--- a/data/ifon1.no/ifon1.no.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://c.ifon1.no/ ./
diff --git a/data/ifon1.no/make.sh b/data/ifon1.no/make.sh
deleted file mode 100644
index e0d8ebcea..000000000
--- a/data/ifon1.no/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/ifon1.no.list /etc/apt/sources.list.d
diff --git a/data/ifoneguide.nl/_metadata/description b/data/ifoneguide.nl/_metadata/description
deleted file mode 100644
index 339216e5d..000000000
--- a/data/ifoneguide.nl/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Dutch language support packages
diff --git a/data/ifoneguide.nl/_metadata/extrainst_ b/data/ifoneguide.nl/_metadata/extrainst_
deleted file mode 100755
index 2799d66d0..000000000
--- a/data/ifoneguide.nl/_metadata/extrainst_
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-if [[ $1 == upgrade ]]; then
- /usr/bin/apt-key del A99404CB
-fi
-
-if [[ $1 == install || $1 == upgrade ]]; then
- /usr/bin/apt-key add /usr/share/keyrings/ifoneguide.nl-keyring.gpg
-fi
diff --git a/data/ifoneguide.nl/_metadata/license b/data/ifoneguide.nl/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/ifoneguide.nl/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/ifoneguide.nl/_metadata/maintainer b/data/ifoneguide.nl/_metadata/maintainer
deleted file mode 100644
index cc905ef63..000000000
--- a/data/ifoneguide.nl/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Fab1Man <fab1man@ifoneguide.nl>
diff --git a/data/ifoneguide.nl/_metadata/name b/data/ifoneguide.nl/_metadata/name
deleted file mode 100644
index 8e08276c9..000000000
--- a/data/ifoneguide.nl/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iFoneguide
diff --git a/data/ifoneguide.nl/_metadata/prerm b/data/ifoneguide.nl/_metadata/prerm
deleted file mode 100755
index e5b17c103..000000000
--- a/data/ifoneguide.nl/_metadata/prerm
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == remove ]]; then
- /usr/bin/apt-key del A99404CB
-fi
diff --git a/data/ifoneguide.nl/_metadata/replaces b/data/ifoneguide.nl/_metadata/replaces
deleted file mode 100644
index 404cd63a3..000000000
--- a/data/ifoneguide.nl/_metadata/replaces
+++ /dev/null
@@ -1 +0,0 @@
-cydia (<< 1.0.2913-55)
diff --git a/data/ifoneguide.nl/_metadata/role b/data/ifoneguide.nl/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/ifoneguide.nl/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/ifoneguide.nl/_metadata/section b/data/ifoneguide.nl/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/ifoneguide.nl/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/ifoneguide.nl/_metadata/tags b/data/ifoneguide.nl/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/ifoneguide.nl/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/ifoneguide.nl/_metadata/version b/data/ifoneguide.nl/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/ifoneguide.nl/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/ifoneguide.nl/cydia.ifoneguide.nl.png b/data/ifoneguide.nl/cydia.ifoneguide.nl.png
deleted file mode 100644
index 70278016a..000000000
--- a/data/ifoneguide.nl/cydia.ifoneguide.nl.png
+++ /dev/null
Binary files differ
diff --git a/data/ifoneguide.nl/iFoneguide.dat b/data/ifoneguide.nl/iFoneguide.dat
deleted file mode 100644
index 631911b4b..000000000
--- a/data/ifoneguide.nl/iFoneguide.dat
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.9 (GNU/Linux)
-
-mQGiBEjhMAQRBADT9SNDj01zvEuEDs1KacZddRV+ge7lKf8TxNR5RhAPO7U687bS
-Uzia37ro+KOP9HRr+nuQvr2cwwV3WrQA3S/JFbGnjI2I1a2FBdDEy18+iVuROW0/
-vGADTje85JJczAnFBOamWsGwZzHb9/aQGP+I4SJOWb2PFvchkDWzEstyFwCgqmor
-iuKygV8iUZV9ym/GyNcD4q8EAJo0R+5ndziao+YGQRxVlYnG42AxxW4YuckkQfu7
-2/BCCzp3eCfVubICZZCz1i46MRmkVKE66+dtt3p4ofSY9OcOU9O3EmsWGNzJNso4
-mL0yaql0YEC7BBGMUO/90jCAuWkKClORBP5LiVoTxGua2xFtIs6So8ZPBYCr/yYH
-+C4bA/wJqbPEG6Mx5u/JX4xqOz2XkxOP8C7nw6LOxPQDjtTZu/eINRAFlVWfiu7+
-2xQKgsycSAs6Q0XuQZuGpc1EZL1yWDunj2oyYNfjdlIMy14y4oIWtSQmsCgImsk/
-fzExYxdlniHNUzjrB3VnrSXkruRN5Ln9Sg9VM6+U51fZPBIg2bQ6aUZvbmVndWlk
-ZSAoaUZvbmVndWlkZSBSZXBvc2l0b3J5KSA8Y29udGFjdEBpZm9uZWd1aWRlLm5s
-PohfBBMRAgAfBQJI4TAEAhsDBgsJCAcDAgQVAggDAxYCAQIeAQIXgAAKCRCMsP40
-qZQEy+eiAKCCYxP9B9tQK8znBJ2hTH6yj8N3YgCfVrS6iZSMgJCDISB14e+BiAbJ
-sgC5AQ0ESOEwBBAEAKb87cxKgJsYzr4Mce5wUjh67c6npKGuTSRngml9MoIsVApC
-y2QEWEXWt6yBbOh7umXB8+tdYwu4DatTy2jqMnwUv5hax0hzXojfSLpYatSNyLwU
-8rlDn2fBIFCJde5aazrL+s7W/R/bmoTYqnKTahSZGvPcfVBsd/Smiu75S79DAAMF
-BACmxKa3UgW6TcUObxw+IobfixorhSjjLCLTmSdWv5tEtkmwhYuR4XLLRLdLUNAH
-Ebi05jZ3bRdF4DTlgW75I+PvB8c9J2vTBl/HdE/nLhc4awjsi89biBxbeO8KFRYc
-hXd+yKJOvRyG9bRWkGEtflk8/S5qfEhouCzYVQQGSIJYuohJBBgRAgAJBQJI4TAE
-AhsMAAoJEIyw/jSplATLr3QAn2Ps9QWJ9SCfETHVIrAXQrSKFf33AJ9lhuK+RxnM
-7VvLRotXl2VbR1Wr1A==
-=bZdm
------END PGP PUBLIC KEY BLOCK-----
diff --git a/data/ifoneguide.nl/iFoneguide.gpg b/data/ifoneguide.nl/iFoneguide.gpg
deleted file mode 100644
index 9101faaab..000000000
--- a/data/ifoneguide.nl/iFoneguide.gpg
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.9 (GNU/Linux)
-
-mQGiBEjhMAQRBADT9SNDj01zvEuEDs1KacZddRV+ge7lKf8TxNR5RhAPO7U687bS
-Uzia37ro+KOP9HRr+nuQvr2cwwV3WrQA3S/JFbGnjI2I1a2FBdDEy18+iVuROW0/
-vGADTje85JJczAnFBOamWsGwZzHb9/aQGP+I4SJOWb2PFvchkDWzEstyFwCgqmor
-iuKygV8iUZV9ym/GyNcD4q8EAJo0R+5ndziao+YGQRxVlYnG42AxxW4YuckkQfu7
-2/BCCzp3eCfVubICZZCz1i46MRmkVKE66+dtt3p4ofSY9OcOU9O3EmsWGNzJNso4
-mL0yaql0YEC7BBGMUO/90jCAuWkKClORBP5LiVoTxGua2xFtIs6So8ZPBYCr/yYH
-+C4bA/wJqbPEG6Mx5u/JX4xqOz2XkxOP8C7nw6LOxPQDjtTZu/eINRAFlVWfiu7+
-2xQKgsycSAs6Q0XuQZuGpc1EZL1yWDunj2oyYNfjdlIMy14y4oIWtSQmsCgImsk/
-fzExYxdlniHNUzjrB3VnrSXkruRN5Ln9Sg9VM6+U51fZPBIg2bQfaUZvbmVndWlk
-ZSA8cmVwb0BpZm9uZWd1aWRlLm5sPohjBBMRAgAjAhsDBgsJCAcDAgQVAggDBBYC
-AwECHgECF4AFAkk7smYCGQEACgkQjLD+NKmUBMtOFACfbI6zdYnn5h1CnaaqUBMn
-LT0HcFIAoKFkkWuG/Q2OcuTOoiWkSVYP+r+DuQENBEjhMAQQBACm/O3MSoCbGM6+
-DHHucFI4eu3Op6Shrk0kZ4JpfTKCLFQKQstkBFhF1resgWzoe7plwfPrXWMLuA2r
-U8to6jJ8FL+YWsdIc16I30i6WGrUjci8FPK5Q59nwSBQiXXuWms6y/rO1v0f25qE
-2Kpyk2oUmRrz3H1QbHf0poru+Uu/QwADBQQApsSmt1IFuk3FDm8cPiKG34saK4Uo
-4ywi05knVr+bRLZJsIWLkeFyy0S3S1DQBxG4tOY2d20XReA05YFu+SPj7wfHPSdr
-0wZfx3RP5y4XOGsI7IvPW4gcW3jvChUWHIV3fsiiTr0chvW0VpBhLX5ZPP0uanxI
-aLgs2FUEBkiCWLqISQQYEQIACQUCSOEwBAIbDAAKCRCMsP40qZQEy690AJ9X83VM
-tjV0qRfILJaGvMKqbnqfCgCePwliUgmZO1VFmc8/dcE8ykMnGso=
-=Fa1A
------END PGP PUBLIC KEY BLOCK-----
diff --git a/data/ifoneguide.nl/ifoneguide.nl.list b/data/ifoneguide.nl/ifoneguide.nl.list
deleted file mode 100644
index 1a02c07ad..000000000
--- a/data/ifoneguide.nl/ifoneguide.nl.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://cydia.ifoneguide.nl/ ./
diff --git a/data/ifoneguide.nl/make.sh b/data/ifoneguide.nl/make.sh
deleted file mode 100644
index c60a063f0..000000000
--- a/data/ifoneguide.nl/make.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/ifoneguide.nl.list /etc/apt/sources.list.d
-pkg: mkdir -p /usr/share/keyrings
-pkg: cp -a %/iFoneguide.gpg /usr/share/keyrings/ifoneguide.nl-keyring.gpg
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/cydia.ifoneguide.nl.png /Applications/Cydia.app/Sources/cydia.ifoneguide.nl.png
diff --git a/data/ifonetec.com/_metadata/description b/data/ifonetec.com/_metadata/description
deleted file mode 100644
index 3a2eb9596..000000000
--- a/data/ifonetec.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-MiVTones Master Repository
diff --git a/data/ifonetec.com/_metadata/license b/data/ifonetec.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/ifonetec.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/ifonetec.com/_metadata/maintainer b/data/ifonetec.com/_metadata/maintainer
deleted file mode 100644
index f3e329666..000000000
--- a/data/ifonetec.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-iFoneTec <tech@ifonetec.com>
diff --git a/data/ifonetec.com/_metadata/name b/data/ifonetec.com/_metadata/name
deleted file mode 100644
index 19f189c01..000000000
--- a/data/ifonetec.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iFoneTec's Source
diff --git a/data/ifonetec.com/_metadata/role b/data/ifonetec.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/ifonetec.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/ifonetec.com/_metadata/section b/data/ifonetec.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/ifonetec.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/ifonetec.com/_metadata/tags b/data/ifonetec.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/ifonetec.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/ifonetec.com/_metadata/version b/data/ifonetec.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/ifonetec.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/ifonetec.com/ifonetec.com.list b/data/ifonetec.com/ifonetec.com.list
deleted file mode 100644
index 698d69ef4..000000000
--- a/data/ifonetec.com/ifonetec.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://app.ifonetec.com/cydia/ ./
diff --git a/data/ifonetec.com/make.sh b/data/ifonetec.com/make.sh
deleted file mode 100644
index d5a9ecb8e..000000000
--- a/data/ifonetec.com/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/ifonetec.com.list /etc/apt/sources.list.d
diff --git a/data/imagemagick/ImageMagick-6.4.3-6.tar.bz2 b/data/imagemagick/ImageMagick-6.4.3-6.tar.bz2
deleted file mode 100644
index 8e3098161..000000000
--- a/data/imagemagick/ImageMagick-6.4.3-6.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/imagemagick/ImageMagick-7.0.8-11.tar.xz b/data/imagemagick/ImageMagick-7.0.8-11.tar.xz
new file mode 100644
index 000000000..87d69b0bf
--- /dev/null
+++ b/data/imagemagick/ImageMagick-7.0.8-11.tar.xz
Binary files differ
diff --git a/data/imagemagick/_metadata/in.1443.00 b/data/imagemagick/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/imagemagick/_metadata/in.1443.00
diff --git a/data/imagemagick/_metadata/libfftw3.dep b/data/imagemagick/_metadata/libfftw3.dep
new file mode 120000
index 000000000..8fddea995
--- /dev/null
+++ b/data/imagemagick/_metadata/libfftw3.dep
@@ -0,0 +1 @@
+../../libfftw3 \ No newline at end of file
diff --git a/data/imagemagick/_metadata/maintainer b/data/imagemagick/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/imagemagick/_metadata/maintainer
+++ b/data/imagemagick/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/imagemagick/_metadata/version b/data/imagemagick/_metadata/version
index 427b0a52d..51b2798d4 100644
--- a/data/imagemagick/_metadata/version
+++ b/data/imagemagick/_metadata/version
@@ -1 +1 @@
-6.4.3-6
+7.0.8-11
diff --git a/data/imagemagick/_metadata/xz.dep b/data/imagemagick/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/imagemagick/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/imagemagick/make.sh b/data/imagemagick/make.sh
index 0430004cb..bc99d98b0 100644
--- a/data/imagemagick/make.sh
+++ b/data/imagemagick/make.sh
@@ -1,4 +1,5 @@
pkg:setup
-pkg:configure --disable-largefile --with-perl=no --with-fontconfig=no --with-x=no
-make
+autoreconf -f -i
+pkg:configure --disable-largefile --with-perl=no --with-fontconfig=no --with-x=no --with-pango=no --without-freetype --with-gs-font-dir=none --with-lcms=no --without-webp
+make -j8
pkg:install
diff --git a/data/imagemagick/variable.diff b/data/imagemagick/variable.diff
new file mode 100644
index 000000000..c115f4035
--- /dev/null
+++ b/data/imagemagick/variable.diff
@@ -0,0 +1,108 @@
+diff -ur ImageMagick-7.0.8-11/MagickCore/magick-baseconfig.h ImageMagick-7.0.8-11+iPhone/MagickCore/magick-baseconfig.h
+--- ImageMagick-7.0.8-11/MagickCore/magick-baseconfig.h 2018-08-28 14:01:38.000000000 -1000
++++ ImageMagick-7.0.8-11+iPhone/MagickCore/magick-baseconfig.h 2018-09-04 13:25:48.000000000 -1000
+@@ -1142,8 +1142,8 @@
+ #endif
+
+ /* Directory where architecture-dependent files live. */
+-#ifndef MAGICKCORE_LIBRARY_PATH
+-#define MAGICKCORE_LIBRARY_PATH "/usr/lib64/ImageMagick-7.0.8/"
++#ifndef MAGICKCORE_MK_LIBRARY_PATH
++#define MAGICKCORE_MK_LIBRARY_PATH "/usr/lib64/ImageMagick-7.0.8/"
+ #endif
+
+ /* Subdirectory of lib where ImageMagick architecture dependent files are
+diff -ur ImageMagick-7.0.8-11/MagickCore/magick-config.h ImageMagick-7.0.8-11+iPhone/MagickCore/magick-config.h
+--- ImageMagick-7.0.8-11/MagickCore/magick-config.h 2018-08-28 14:00:00.000000000 -1000
++++ ImageMagick-7.0.8-11+iPhone/MagickCore/magick-config.h 2018-09-04 13:25:48.000000000 -1000
+@@ -150,7 +150,7 @@
+ #endif
+
+ #ifndef MAGICKCORE_MODULES_PATH
+-# define MAGICKCORE_MODULES_PATH MAGICKCORE_LIBRARY_PATH MAGICKCORE_DIR_SEPARATOR MAGICKCORE_MODULES_DIRNAME
++# define MAGICKCORE_MODULES_PATH MAGICKCORE_MK_LIBRARY_PATH MAGICKCORE_DIR_SEPARATOR MAGICKCORE_MODULES_DIRNAME
+ #endif
+
+ #ifndef MAGICKCORE_MODULES_RELATIVE_PATH
+@@ -189,7 +189,7 @@
+ #endif
+
+ #ifndef MAGICKCORE_SHAREARCH_PATH
+-# define MAGICKCORE_SHAREARCH_PATH MAGICKCORE_LIBRARY_PATH MAGICKCORE_DIR_SEPARATOR MAGICKCORE_SHAREARCH_DIRNAME MAGICKCORE_DIR_SEPARATOR
++# define MAGICKCORE_SHAREARCH_PATH MAGICKCORE_MK_LIBRARY_PATH MAGICKCORE_DIR_SEPARATOR MAGICKCORE_SHAREARCH_DIRNAME MAGICKCORE_DIR_SEPARATOR
+ #endif
+
+ #ifndef MAGICKCORE_SHAREARCH_RELATIVE_PATH
+diff -ur ImageMagick-7.0.8-11/MagickCore/studio.h ImageMagick-7.0.8-11+iPhone/MagickCore/studio.h
+--- ImageMagick-7.0.8-11/MagickCore/studio.h 2018-08-28 14:00:00.000000000 -1000
++++ ImageMagick-7.0.8-11+iPhone/MagickCore/studio.h 2018-09-04 13:25:48.000000000 -1000
+@@ -274,7 +274,7 @@
+ # define Exit exit
+ # define IsBasenameSeparator(c) \
+ (((c) == ']') || ((c) == ':') || ((c) == '/') ? MagickTrue : MagickFalse)
+-# define MAGICKCORE_LIBRARY_PATH "sys$login:"
++# define MAGICKCORE_MK_LIBRARY_PATH "sys$login:"
+ # define MAGICKCORE_SHARE_PATH "sys$login:"
+ # define X11_PREFERENCES_PATH "decw$user_defaults:"
+ # define ProcessPendingEvents(text)
+diff -ur ImageMagick-7.0.8-11/config/config.h.in ImageMagick-7.0.8-11+iPhone/config/config.h.in
+--- ImageMagick-7.0.8-11/config/config.h.in 2018-08-28 14:00:17.000000000 -1000
++++ ImageMagick-7.0.8-11+iPhone/config/config.h.in 2018-09-04 13:27:34.000000000 -1000
+@@ -749,7 +749,7 @@
+ #undef LIBOPENJP2_DELEGATE
+
+ /* Directory where architecture-dependent files live. */
+-#undef LIBRARY_PATH
++#undef MK_LIBRARY_PATH
+
+ /* Subdirectory of lib where ImageMagick architecture dependent files are
+ installed. */
+diff -ur ImageMagick-7.0.8-11/configure.ac ImageMagick-7.0.8-11+iPhone/configure.ac
+--- ImageMagick-7.0.8-11/configure.ac 2018-08-28 14:00:00.000000000 -1000
++++ ImageMagick-7.0.8-11+iPhone/configure.ac 2018-09-04 13:25:48.000000000 -1000
+@@ -2974,15 +2974,15 @@
+ AC_SUBST(EXECUTABLE_PATH)
+
+ # Path to ImageMagick lib
+-LIBRARY_PATH="${LIB_DIR}/${LIBRARY_RELATIVE_PATH}"
++MK_LIBRARY_PATH="${LIB_DIR}/${LIBRARY_RELATIVE_PATH}"
+ DEFINE_LIBRARY_PATH="${LIB_DIR}/${LIBRARY_RELATIVE_PATH}/"
+ case "${build_os}" in
+ mingw* )
+ DEFINE_LIBRARY_PATH=`$WinPathScript "$DEFINE_LIBRARY_PATH" 1`
+ ;;
+ esac
+-AC_DEFINE_UNQUOTED(LIBRARY_PATH,"$DEFINE_LIBRARY_PATH",[Directory where architecture-dependent files live.])
+-AC_SUBST(LIBRARY_PATH)
++AC_DEFINE_UNQUOTED(MK_LIBRARY_PATH,"$DEFINE_LIBRARY_PATH",[Directory where architecture-dependent files live.])
++AC_SUBST(MK_LIBRARY_PATH)
+
+ #
+ # path to local binaries
+@@ -2999,7 +2999,7 @@
+
+ LIB_BIN_DIR_RELATIVE_PATH=$LIB_BIN_DIR
+ AC_SUBST(LIB_BIN_DIR_RELATIVE_PATH)
+-LIB_BIN_DIR_PATH="${LIBRARY_PATH}/${LIB_BIN_DIR_RELATIVE_PATH}"
++LIB_BIN_DIR_PATH="${MK_LIBRARY_PATH}/${LIB_BIN_DIR_RELATIVE_PATH}"
+ AC_SUBST(LIB_BIN_DIR_PATH)
+
+ #
+@@ -3019,7 +3019,7 @@
+
+ MODULES_RELATIVE_PATH="${MODULES_DIRNAME}"
+ AC_SUBST(MODULES_RELATIVE_PATH)
+-MODULES_PATH="${LIBRARY_PATH}/${MODULES_RELATIVE_PATH}"
++MODULES_PATH="${MK_LIBRARY_PATH}/${MODULES_RELATIVE_PATH}"
+ AC_SUBST(MODULES_PATH)
+
+ #
+@@ -3112,7 +3112,7 @@
+
+ SHAREARCH_RELATIVE_PATH="${SHAREARCH_DIRNAME}"
+ AC_SUBST(SHAREARCH_RELATIVE_PATH)
+-SHAREARCH_PATH="${LIBRARY_PATH}/${SHAREARCH_RELATIVE_PATH}"
++SHAREARCH_PATH="${MK_LIBRARY_PATH}/${SHAREARCH_RELATIVE_PATH}"
+ AC_SUBST(SHAREARCH_PATH)
+
+ #
diff --git a/data/indent/_metadata/in.1443.00 b/data/indent/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/indent/_metadata/in.1443.00
diff --git a/data/indent/_metadata/maintainer b/data/indent/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/indent/_metadata/maintainer
+++ b/data/indent/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/indent/_metadata/version b/data/indent/_metadata/version
index a6333e400..0d3ad67af 100644
--- a/data/indent/_metadata/version
+++ b/data/indent/_metadata/version
@@ -1 +1 @@
-2.2.9
+2.2.10
diff --git a/data/indent/docs.diff b/data/indent/docs.diff
new file mode 100644
index 000000000..9f5b121f5
--- /dev/null
+++ b/data/indent/docs.diff
@@ -0,0 +1,43 @@
+diff -ur indent-2.2.10/Makefile.am indent-2.2.10+iPhone/Makefile.am
+--- indent-2.2.10/Makefile.am 2008-03-11 08:50:42.000000000 -1000
++++ indent-2.2.10+iPhone/Makefile.am 2018-09-04 09:52:21.000000000 -1000
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to produce Makefile.in
+ AUTOMAKE_OPTIONS = no-texinfo.tex
+
+-SUBDIRS = intl src doc po man
++SUBDIRS = intl src po
+
+ BUILT_SOURCES =
+
+@@ -19,18 +19,6 @@
+
+ DISTCLEANFILES=config/config.cache config/config.log config.h
+
+-ps:
+- cd doc && $(MAKE) @PACKAGE@.ps
+-
+-pdf:
+- cd doc && $(MAKE) @PACKAGE@.pdf
+-
+-html:
+- cd doc && $(MAKE) html
+-
+-html-split:
+- cd doc && $(MAKE) html-split
+-
+ # --------------- Maintainer's Section
+
+ MAINTAINERCLEANFILES = intl/* aclocal.m4 Makefile.in config.h.in stamp-h1 stamp-h.in configure \
+diff -ur indent-2.2.10/configure.ac indent-2.2.10+iPhone/configure.ac
+--- indent-2.2.10/configure.ac 2008-03-11 08:50:42.000000000 -1000
++++ indent-2.2.10+iPhone/configure.ac 2018-09-04 09:55:34.000000000 -1000
+@@ -63,8 +63,6 @@
+ po/Makefile.in
+ Makefile
+ src/Makefile
+- doc/Makefile
+- man/Makefile
+ ],
+ [touch Makefile.in])
+
diff --git a/data/indent/indent-2.2.10.tar.gz b/data/indent/indent-2.2.10.tar.gz
new file mode 100644
index 000000000..8c054ef6f
--- /dev/null
+++ b/data/indent/indent-2.2.10.tar.gz
Binary files differ
diff --git a/data/indent/indent-2.2.9.tar.gz b/data/indent/indent-2.2.9.tar.gz
deleted file mode 100644
index 154636662..000000000
--- a/data/indent/indent-2.2.9.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/indent/make.sh b/data/indent/make.sh
index 11d339a61..f24f8a191 100644
--- a/data/indent/make.sh
+++ b/data/indent/make.sh
@@ -1,7 +1,5 @@
pkg:setup
+autoreconf -f -i
pkg:configure
-cd man
-make CC=gcc
-cd ..
-make
+make -j8
pkg:install
diff --git a/data/indent/static.diff b/data/indent/static.diff
deleted file mode 100644
index 485f33555..000000000
--- a/data/indent/static.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru indent-2.2.9/src/indent.h indent-2.2.9+iPhone/src/indent.h
---- indent-2.2.9/src/indent.h 2002-11-10 21:02:48.000000000 +0000
-+++ indent-2.2.9+iPhone/src/indent.h 2008-01-01 23:08:20.000000000 +0000
-@@ -96,8 +96,6 @@
- /* Size of the input program, not including the ' \n\0' we add at the end */
- extern unsigned long in_prog_size;
-
--/* The output file. */
--extern FILE *output;
-
-
-
diff --git a/data/inetutils/_metadata/in.1443.00 b/data/inetutils/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/inetutils/_metadata/in.1443.00
diff --git a/data/inetutils/_metadata/maintainer b/data/inetutils/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/inetutils/_metadata/maintainer
+++ b/data/inetutils/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/inetutils/_metadata/readline.dep b/data/inetutils/_metadata/readline.dep
new file mode 120000
index 000000000..f35c9185b
--- /dev/null
+++ b/data/inetutils/_metadata/readline.dep
@@ -0,0 +1 @@
+../../readline \ No newline at end of file
diff --git a/data/inetutils/_metadata/version b/data/inetutils/_metadata/version
index 810ee4e91..d615fd0c0 100644
--- a/data/inetutils/_metadata/version
+++ b/data/inetutils/_metadata/version
@@ -1 +1 @@
-1.6
+1.9.4
diff --git a/data/inetutils/docs.diff b/data/inetutils/docs.diff
new file mode 100644
index 000000000..0bb0ccb30
--- /dev/null
+++ b/data/inetutils/docs.diff
@@ -0,0 +1,22 @@
+diff -ur inetutils-1.9.4/Makefile.am inetutils-1.9.4+iPhone/Makefile.am
+--- inetutils-1.9.4/Makefile.am 2015-06-08 21:45:35.000000000 -1000
++++ inetutils-1.9.4+iPhone/Makefile.am 2018-08-17 15:13:33.000000000 -1000
+@@ -25,7 +25,6 @@
+ SUBDIRS = lib \
+ libinetutils libtelnet libicmp libls \
+ src telnet telnetd ftp ftpd talk talkd whois ping ifconfig \
+- doc man \
+ tests
+
+ DISTCLEANFILES = pathdefs.make paths.defs \
+diff -ur inetutils-1.9.4/Makefile.in inetutils-1.9.4+iPhone/Makefile.in
+--- inetutils-1.9.4/Makefile.in 2015-06-08 21:48:08.000000000 -1000
++++ inetutils-1.9.4+iPhone/Makefile.in 2018-08-17 15:13:50.000000000 -1000
+@@ -1416,7 +1416,6 @@
+ SUBDIRS = lib \
+ libinetutils libtelnet libicmp libls \
+ src telnet telnetd ftp ftpd talk talkd whois ping ifconfig \
+- doc man \
+ tests
+
+ DISTCLEANFILES = pathdefs.make paths.defs \
diff --git a/data/inetutils/inetd.diff b/data/inetutils/inetd.diff
deleted file mode 100644
index 1640723dd..000000000
--- a/data/inetutils/inetd.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru inetutils-1.6/inetd/inetd.c inetutils-1.6+iPhone/inetd/inetd.c
---- inetutils-1.6/inetd/inetd.c 2008-12-27 18:50:35.000000000 +0000
-+++ inetutils-1.6+iPhone/inetd/inetd.c 2009-04-10 21:10:19.000000000 +0000
-@@ -163,6 +163,8 @@
- #endif
- #define SIGBLOCK (sigmask(SIGCHLD)|sigmask(SIGHUP)|sigmask(SIGALRM))
-
-+ARGP_PROGRAM_DATA_SIMPLE ("inetd", "2008");
-+
- bool debug = false;
- int nsock, maxsock;
- fd_set allsock;
diff --git a/data/inetutils/inetutils-1.6.tar.gz b/data/inetutils/inetutils-1.6.tar.gz
deleted file mode 100644
index a3b11e268..000000000
--- a/data/inetutils/inetutils-1.6.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/inetutils/inetutils-1.9.4.tar.xz b/data/inetutils/inetutils-1.9.4.tar.xz
new file mode 100644
index 000000000..47af66e5f
--- /dev/null
+++ b/data/inetutils/inetutils-1.9.4.tar.xz
Binary files differ
diff --git a/data/inetutils/logwtmp.diff b/data/inetutils/logwtmp.diff
deleted file mode 100644
index 3eb7684f3..000000000
--- a/data/inetutils/logwtmp.diff
+++ /dev/null
@@ -1,117 +0,0 @@
-diff -ru inetutils-1.6/libinetutils/Makefile.am inetutils-1.6+iPhone/libinetutils/Makefile.am
---- inetutils-1.6/libinetutils/Makefile.am 2007-06-29 16:29:31.000000000 +0000
-+++ inetutils-1.6+iPhone/libinetutils/Makefile.am 2009-04-10 20:58:01.000000000 +0000
-@@ -20,10 +20,8 @@
-
- noinst_HEADERS = argcv.h libinetutils.h
-
--EXTRA_DIST = logwtmp.c
--
- libinetutils_a_SOURCES = argcv.c cleansess.c daemon.c des_rw.c kcmd.c \
-- krcmd.c localhost.c logwtmpko.c setsig.c shishi.c tftpsubs.c \
-+ krcmd.c localhost.c setsig.c shishi.c tftpsubs.c \
- ttymsg.c utmp_init.c utmp_logout.c
-
- libinetutils_a_LIBADD = daemon.o $(top_builddir)/lib/libgnu.a
-diff -ru inetutils-1.6/libinetutils/Makefile.in inetutils-1.6+iPhone/libinetutils/Makefile.in
---- inetutils-1.6/libinetutils/Makefile.in 2008-12-27 20:52:24.000000000 +0000
-+++ inetutils-1.6+iPhone/libinetutils/Makefile.in 2009-04-10 20:58:14.000000000 +0000
-@@ -132,7 +132,7 @@
- libinetutils_a_DEPENDENCIES = daemon.o $(top_builddir)/lib/libgnu.a
- am_libinetutils_a_OBJECTS = argcv.$(OBJEXT) cleansess.$(OBJEXT) \
- daemon.$(OBJEXT) des_rw.$(OBJEXT) kcmd.$(OBJEXT) \
-- krcmd.$(OBJEXT) localhost.$(OBJEXT) logwtmpko.$(OBJEXT) \
-+ krcmd.$(OBJEXT) localhost.$(OBJEXT) \
- setsig.$(OBJEXT) shishi.$(OBJEXT) tftpsubs.$(OBJEXT) \
- ttymsg.$(OBJEXT) utmp_init.$(OBJEXT) utmp_logout.$(OBJEXT)
- libinetutils_a_OBJECTS = $(am_libinetutils_a_OBJECTS)
-@@ -638,9 +638,8 @@
- whois_INSTALL_HOOK = @whois_INSTALL_HOOK@
- noinst_LIBRARIES = libinetutils.a
- noinst_HEADERS = argcv.h libinetutils.h
--EXTRA_DIST = logwtmp.c
- libinetutils_a_SOURCES = argcv.c cleansess.c daemon.c des_rw.c kcmd.c \
-- krcmd.c localhost.c logwtmpko.c setsig.c shishi.c tftpsubs.c \
-+ krcmd.c localhost.c setsig.c shishi.c tftpsubs.c \
- ttymsg.c utmp_init.c utmp_logout.c
-
- libinetutils_a_LIBADD = daemon.o $(top_builddir)/lib/libgnu.a
-@@ -700,7 +699,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcmd.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/krcmd.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localhost.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logwtmpko.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsig.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shishi.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpsubs.Po@am__quote@
-diff -ru inetutils-1.6/ftpd/Makefile.am inetutils-1.6+iPhone/ftpd/Makefile.am
---- inetutils-1.6/ftpd/Makefile.am 2008-12-27 20:04:47.000000000 +0000
-+++ inetutils-1.6+iPhone/ftpd/Makefile.am 2009-04-10 21:16:12.000000000 +0000
-@@ -22,7 +22,7 @@
-
- EXTRA_PROGRAMS = ftpd
-
--ftpd_SOURCES = ftpcmd.y ftpd.c logwtmp.c popen.c pam.c auth.c \
-+ftpd_SOURCES = ftpcmd.y ftpd.c popen.c pam.c auth.c \
- conf.c server_mode.c
-
- noinst_HEADERS = extern.h
-diff -ru inetutils-1.6/ftpd/Makefile.in inetutils-1.6+iPhone/ftpd/Makefile.in
---- inetutils-1.6/ftpd/Makefile.in 2008-12-27 20:52:21.000000000 +0000
-+++ inetutils-1.6+iPhone/ftpd/Makefile.in 2009-04-10 21:16:22.000000000 +0000
-@@ -130,7 +130,7 @@
- am__installdirs = "$(DESTDIR)$(inetdaemondir)" "$(DESTDIR)$(man8dir)"
- inetdaemonPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
- PROGRAMS = $(inetdaemon_PROGRAMS)
--am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) ftpd.$(OBJEXT) logwtmp.$(OBJEXT) \
-+am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) ftpd.$(OBJEXT) \
- popen.$(OBJEXT) pam.$(OBJEXT) auth.$(OBJEXT) conf.$(OBJEXT) \
- server_mode.$(OBJEXT)
- ftpd_OBJECTS = $(am_ftpd_OBJECTS)
-@@ -644,7 +644,7 @@
- whois_BUILD = @whois_BUILD@
- whois_INSTALL_HOOK = @whois_INSTALL_HOOK@
- inetdaemon_PROGRAMS = @ftpd_BUILD@
--ftpd_SOURCES = ftpcmd.y ftpd.c logwtmp.c popen.c pam.c auth.c \
-+ftpd_SOURCES = ftpcmd.y ftpd.c popen.c pam.c auth.c \
- conf.c server_mode.c
-
- noinst_HEADERS = extern.h
-@@ -728,7 +728,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conf.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpcmd.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpd.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logwtmp.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/popen.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server_mode.Po@am__quote@
-diff -ru inetutils-1.6/ftpd/ftpd.c inetutils-1.6+iPhone/ftpd/ftpd.c
---- inetutils-1.6/ftpd/ftpd.c 2008-12-27 20:05:07.000000000 +0000
-+++ inetutils-1.6+iPhone/ftpd/ftpd.c 2009-04-10 21:22:09.000000000 +0000
-@@ -639,7 +639,7 @@
-
- /* open wtmp before chroot */
- snprintf (ttyline, sizeof (ttyline), "ftp%d", getpid ());
-- logwtmp_keep_open (ttyline, pcred->name, pcred->remotehost);
-+ logwtmp (ttyline, pcred->name, pcred->remotehost);
-
- if (pcred->guest)
- {
-@@ -788,7 +788,7 @@
- int atype = pcred->auth_type;
- seteuid ((uid_t) 0);
- if (pcred->logged_in)
-- logwtmp_keep_open (ttyline, "", "");
-+ logwtmp (ttyline, "", "");
-
- if (pcred->name)
- free (pcred->name);
-@@ -1703,7 +1703,7 @@
- if (cred.logged_in)
- {
- seteuid ((uid_t) 0);
-- logwtmp_keep_open (ttyline, "", "");
-+ logwtmp (ttyline, "", "");
- }
- /* beware of flushing buffers after a SIGPIPE */
- _exit (status);
diff --git a/data/inetutils/make.sh b/data/inetutils/make.sh
index 7481d441d..d456806e4 100644
--- a/data/inetutils/make.sh
+++ b/data/inetutils/make.sh
@@ -2,7 +2,7 @@ pkg:setup
autoconf
# XXX: I miss talkd
pkg:configure ac_cv_type_sa_family_t=yes ac_cv_type_socklen_t=yes ac_cv_member_struct_utmp_ut_user=yes ac_cv_func_obstack=no --disable-ifconfig --disable-ping6 --disable-syslogd --disable-talkd --disable-traceroute --disable-whois ac_cv_header_utmp_h=no
-make CFLAGS='-O2 -mthumb'
+make CFLAGS='-O2' -j8
pkg:install
pkg:bin ping
pkg: mkdir -p /sbin
diff --git a/data/inetutils/rlogind.diff b/data/inetutils/rlogind.diff
new file mode 100644
index 000000000..cb12a5627
--- /dev/null
+++ b/data/inetutils/rlogind.diff
@@ -0,0 +1,48 @@
+diff -ur inetutils-1.9.4/src/rlogind.c inetutils-1.9.4+iPhone/src/rlogind.c
+--- inetutils-1.9.4/src/rlogind.c 2015-05-12 02:13:25.000000000 -1000
++++ inetutils-1.9.4+iPhone/src/rlogind.c 2018-08-17 15:08:20.000000000 -1000
+@@ -1172,7 +1172,7 @@
+ struct auth_data auth_data;
+ char addrstr[INET6_ADDRSTRLEN];
+ const char *reply;
+- int true;
++ int _true;
+ char c;
+ int authenticated;
+ pid_t pid;
+@@ -1204,16 +1204,16 @@
+ ? ntohs (((struct sockaddr_in6 *) &auth_data.from)->sin6_port)
+ : ntohs (((struct sockaddr_in *) &auth_data.from)->sin_port));
+
+- true = 1;
++ _true = 1;
+ if (keepalive
+- && setsockopt (infd, SOL_SOCKET, SO_KEEPALIVE, &true, sizeof true) < 0)
++ && setsockopt (infd, SOL_SOCKET, SO_KEEPALIVE, &_true, sizeof _true) < 0)
+ syslog (LOG_WARNING, "setsockopt (SO_KEEPALIVE): %m");
+
+ #if defined IP_TOS && defined IPPROTO_IP && defined IPTOS_LOWDELAY
+- true = IPTOS_LOWDELAY;
++ _true = IPTOS_LOWDELAY;
+ if (auth_data.from.ss_family == AF_INET &&
+ setsockopt (infd, IPPROTO_IP, IP_TOS,
+- (char *) &true, sizeof true) < 0)
++ (char *) &_true, sizeof _true) < 0)
+ syslog (LOG_WARNING, "setsockopt (IP_TOS): %m");
+ #endif
+
+@@ -1260,10 +1260,10 @@
+ }
+
+ /* Parent */
+- true = 1;
+- IF_NOT_ENCRYPT (ioctl (infd, FIONBIO, &true));
+- ioctl (master, FIONBIO, &true);
+- ioctl (master, TIOCPKT, &true);
++ _true = 1;
++ IF_NOT_ENCRYPT (ioctl (infd, FIONBIO, &_true));
++ ioctl (master, FIONBIO, &_true);
++ ioctl (master, TIOCPKT, &_true);
+ netf = infd; /* Needed for cleanup() */
+ setsig (SIGCHLD, cleanup);
+ protocol (infd, master, &auth_data);
diff --git a/data/inetutils/talkd.diff b/data/inetutils/talkd.diff
deleted file mode 100644
index 2a17a1ddc..000000000
--- a/data/inetutils/talkd.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ru inetutils-1.5/configure.ac inetutils-1.5+iPhone/configure.ac
---- inetutils-1.5/configure.ac 2007-06-28 22:58:23.000000000 +0000
-+++ inetutils-1.5+iPhone/configure.ac 2008-03-24 13:47:26.000000000 +0000
-@@ -470,7 +470,8 @@
- [AC_DEFINE(HAVE_OSOCKADDR_H, 1,
- [Define to one if you have <osockaddr.h>.])],
- [#include <sys/types.h>
-- #include <sys/socket.h> ])
-+ #include <sys/socket.h>
-+ #include <protocols/talkd.h> ])
-
- AC_CHECK_TYPES(struct if_nameindex, , ,
- [#include <sys/types.h>
diff --git a/data/inetutils/utmpx.diff b/data/inetutils/utmpx.diff
deleted file mode 100644
index 319be4ea0..000000000
--- a/data/inetutils/utmpx.diff
+++ /dev/null
@@ -1,70 +0,0 @@
-diff -ru inetutils-1.5/configure.ac inetutils-1.5+iPhone/configure.ac
---- inetutils-1.5/configure.ac 2007-06-28 22:58:23.000000000 +0000
-+++ inetutils-1.5+iPhone/configure.ac 2008-01-02 02:07:05.000000000 +0000
-@@ -776,8 +776,7 @@
- AC_DEFINE(UTMPX, 1, [FIXME])
- AC_DEFINE(HAVE_STREAMSPTY, 1, [FIXME])
- ;;
--*irix* | *hpux*)
-- AC_DEFINE(UTMPX, 1, [FIXME])
-+*irix* | *hpux* | *darwin*)
- AC_DEFINE(UTMPX, 1, [FIXME])
- ;;
- esac
-diff -ru inetutils-1.6/libinetutils/utmp_logout.c inetutils-1.6+iPhone/libinetutils/utmp_logout.c
---- inetutils-1.6/libinetutils/utmp_logout.c 2006-10-21 15:24:20.000000000 +0000
-+++ inetutils-1.6+iPhone/libinetutils/utmp_logout.c 2009-04-09 10:07:11.000000000 +0000
-@@ -52,12 +52,22 @@
-
- if ((ut = getutxline (&utx)))
- {
-+# ifdef HAVE_STRUCT_UTMPX_UT_TYPE
- ut->ut_type = DEAD_PROCESS;
-+# endif
-+# ifdef HAVE_STRUCT_UTMPX_UT_EXIT
- ut->ut_exit.e_termination = 0;
- ut->ut_exit.e_exit = 0;
-+# endif
-+# ifdef HAVE_STRUCT_UTMPX_UT_TV
- gettimeofday (&(ut->ut_tv), 0);
-+# else
-+ time (&(ut->ut_time));
-+# endif
- pututxline (ut);
-+# ifdef HAVE_UPDWTMPX
- updwtmpx (PATH_WTMPX, ut);
-+# endif
- }
- endutxent ();
- #else
-diff -ru inetutils-1.6/libinetutils/logwtmp.c inetutils-1.6+iPhone/libinetutils/logwtmp.c
---- inetutils-1.6/libinetutils/logwtmp.c 2007-06-29 16:29:31.000000000 +0000
-+++ inetutils-1.6+iPhone/libinetutils/logwtmp.c 2009-04-10 19:44:24.000000000 +0000
-@@ -48,6 +48,7 @@
- # include <utmp.h>
- #else
- # ifdef HAVE_UTMPX_H
-+# define _UTMPX_COMPAT
- # include <utmpx.h>
- # define utmp utmpx /* make utmpx look more like utmp */
- # endif
-@@ -113,16 +114,16 @@
-
- /* Set information in new entry. */
- bzero (&ut, sizeof (ut));
--#ifdef HAVE_STRUCT_UTMP_UT_TYPE
-+#if defined(HAVE_STRUCT_UTMP_UT_TYPE) || defined(HAVE_STRUCT_UTMPX_UT_TYPE)
- ut.ut_type = USER_PROCESS;
- #endif
- strncpy (ut.ut_line, line, sizeof ut.ut_line);
- strncpy (ut.ut_name, name, sizeof ut.ut_name);
--#ifdef HAVE_STRUCT_UTMP_UT_HOST
-+#if defined(HAVE_STRUCT_UTMP_UT_HOST) || defined(HAVE_STRUCT_UTMPX_UT_HOST)
- strncpy (ut.ut_host, host, sizeof ut.ut_host);
- #endif
-
--#ifdef HAVE_STRUCT_UTMP_UT_TV
-+#if defined(HAVE_STRUCT_UTMP_UT_TV) || defined(HAVE_STRUCT_UTMPX_UT_TV)
- gettimeofday (&ut.ut_tv, NULL);
- #else
- time (&ut.ut_time);
diff --git a/data/inputproto/_metadata/in.1443.00 b/data/inputproto/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/inputproto/_metadata/in.1443.00
diff --git a/data/inputproto/_metadata/maintainer b/data/inputproto/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/inputproto/_metadata/maintainer
+++ b/data/inputproto/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/interceptty/_metadata/in.1443.00 b/data/interceptty/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/interceptty/_metadata/in.1443.00
diff --git a/data/interceptty/_metadata/maintainer b/data/interceptty/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/interceptty/_metadata/maintainer
+++ b/data/interceptty/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iokittools/IOKitTools-76.tar.gz b/data/iokittools/IOKitTools-76.tar.gz
deleted file mode 100644
index 25b29a4f0..000000000
--- a/data/iokittools/IOKitTools-76.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/iokittools/_metadata/in.1443.00 b/data/iokittools/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/iokittools/_metadata/in.1443.00
diff --git a/data/iokittools/_metadata/maintainer b/data/iokittools/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/iokittools/_metadata/maintainer
+++ b/data/iokittools/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iokittools/kernel.diff b/data/iokittools/kernel.diff
new file mode 100644
index 000000000..8057f5bba
--- /dev/null
+++ b/data/iokittools/kernel.diff
@@ -0,0 +1,14 @@
+diff -ur IOKitTools-108/ioclasscount.tproj/ioclasscount.c IOKitTools-108+iPhone/ioclasscount.tproj/ioclasscount.c
+--- IOKitTools-108/ioclasscount.tproj/ioclasscount.c 2017-07-15 15:12:07.000000000 -1000
++++ IOKitTools-108+iPhone/ioclasscount.tproj/ioclasscount.c 2018-09-02 12:57:00.000000000 -1000
+@@ -33,8 +33,8 @@
+ #include <mach/mach_vm.h>
+ #include <mach/vm_statistics.h>
+ #include <CoreFoundation/CoreFoundation.h>
+-#include <Kernel/IOKit/IOKitDebug.h>
+-#include <Kernel/libkern/OSKextLibPrivate.h>
++#include <IOKit/IOKitDebug.h>
++#include <libkern/OSKextLibPrivate.h>
+ #include <IOKit/IOKitLib.h>
+ #include <IOKit/IOKitKeys.h>
+ #include <CoreSymbolication/CoreSymbolication.h>
diff --git a/data/iokittools/make.sh b/data/iokittools/make.sh
index 4c10ed0f8..04807cd30 100644
--- a/data/iokittools/make.sh
+++ b/data/iokittools/make.sh
@@ -6,3 +6,5 @@ for tproj in *.tproj; do
${PKG_TARG}-gcc -lcurses -o "${tproj}" "${tproj}.tproj"/*.c -framework CoreFoundation -framework IOKit -save-temps
pkg: cp -a "${tproj}" /usr/sbin
done
+# In firmware-sbin
+pkg: rm /usr/sbin/ioreg
diff --git a/data/ipatcher_/_metadata/in.1443.00 b/data/ipatcher_/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ipatcher_/_metadata/in.1443.00
diff --git a/data/ipatcher_/_metadata/maintainer b/data/ipatcher_/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ipatcher_/_metadata/maintainer
+++ b/data/ipatcher_/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iphone-gcc/_metadata/in.1443.00 b/data/iphone-gcc/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/iphone-gcc/_metadata/in.1443.00
diff --git a/data/iphone-gcc/_metadata/maintainer b/data/iphone-gcc/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/iphone-gcc/_metadata/maintainer
+++ b/data/iphone-gcc/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iphone-java/_metadata/in.1443.00 b/data/iphone-java/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/iphone-java/_metadata/in.1443.00
diff --git a/data/iphone-java/_metadata/maintainer b/data/iphone-java/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/iphone-java/_metadata/maintainer
+++ b/data/iphone-java/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iphone-notes.de/_metadata/description b/data/iphone-notes.de/_metadata/description
deleted file mode 100644
index 141f7712c..000000000
--- a/data/iphone-notes.de/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Tools, Tweaks, and CarrierBundles
diff --git a/data/iphone-notes.de/_metadata/license b/data/iphone-notes.de/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/iphone-notes.de/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/iphone-notes.de/_metadata/maintainer b/data/iphone-notes.de/_metadata/maintainer
deleted file mode 100644
index 9da522e81..000000000
--- a/data/iphone-notes.de/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Andre Sendowski <iphone@sendowski.de>
diff --git a/data/iphone-notes.de/_metadata/name b/data/iphone-notes.de/_metadata/name
deleted file mode 100644
index 1dbd56214..000000000
--- a/data/iphone-notes.de/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iPhone-Notes.de's Source
diff --git a/data/iphone-notes.de/_metadata/postinst b/data/iphone-notes.de/_metadata/postinst
deleted file mode 100755
index 4dfb15dd3..000000000
--- a/data/iphone-notes.de/_metadata/postinst
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-/usr/bin/apt-key add /usr/share/keyrings/iphone-notes.de-keyring.gpg
diff --git a/data/iphone-notes.de/_metadata/prerm b/data/iphone-notes.de/_metadata/prerm
deleted file mode 100755
index 037a67a3f..000000000
--- a/data/iphone-notes.de/_metadata/prerm
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-case "$1" in
- (remove|purge)
- /usr/bin/apt-key del 04BBB74B
- ;;
-esac
diff --git a/data/iphone-notes.de/_metadata/role b/data/iphone-notes.de/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/iphone-notes.de/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/iphone-notes.de/_metadata/section b/data/iphone-notes.de/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/iphone-notes.de/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/iphone-notes.de/_metadata/tags b/data/iphone-notes.de/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/iphone-notes.de/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/iphone-notes.de/_metadata/version b/data/iphone-notes.de/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/iphone-notes.de/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/iphone-notes.de/icon.png b/data/iphone-notes.de/icon.png
deleted file mode 100644
index 971c01746..000000000
--- a/data/iphone-notes.de/icon.png
+++ /dev/null
Binary files differ
diff --git a/data/iphone-notes.de/iphone-notes.de.list b/data/iphone-notes.de/iphone-notes.de.list
deleted file mode 100644
index 02fcdf777..000000000
--- a/data/iphone-notes.de/iphone-notes.de.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://apt.iphone-storage.de/ trixy main
diff --git a/data/iphone-notes.de/iphone-notes_de.pub b/data/iphone-notes.de/iphone-notes_de.pub
deleted file mode 100644
index 84c57886b..000000000
--- a/data/iphone-notes.de/iphone-notes_de.pub
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.2 (GNU/Linux)
-
-mQELBEiF/F4BCAC6yoLkS17VTqoUr2NU+06h/e+a4sGFUG3OummwlNV7I3FRnBY6
-bycRcMhFsamDnSxVp9XUTYM0vHiNEmAPxc6DZ9+yFpgdtuLxIz+Hw+PWXlWIkihz
-zpuVEdsoDtFXpHk24NcMA0yvm0N+MdLsWYNrvFTmNmCu58FRSSstJvwvTwL8a7i6
-9LdPClvrMrZs4fyA/ZmvXsGrxSVXEHyW8YxPvm3jIvhF2Cbxp01eQ9ZRJ+n91wdM
-aiFeu4qE4ocrAEDVMFCt79IG0AQrUhk2TJ0i7GvTLWDSfoTtI8l32xSsrdGcBjXD
-sTgDMpoKfnwI3ucbPASpF8fzj6X2Sv70+ZQ7AAYptDdBbmRyZSBTZW5kb3dza2kg
-KGlwaG9uZS1ub3Rlcy5kZSkgPGlwaG9uZUBzZW5kb3dza2kuZGU+iQE2BBMBAgAg
-BQJIhfxeAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQkgMoawS7t0uF7ggA
-nK1muv7A/7LuUOon4eemcxCANQ4FoHz1ilLn7FCBHcSykqgEy5kaHYz7p4xIJWvZ
-7R5wG8cQ0nrTLtYJgsv0DNhXAFygej25lqICpduYOSN7/QuyWAsnUbkbEtNgtOsq
-BGNe99Yop0pHmrIIqnvs5RP0JLTdOGYkohQg30Urz9Fg1ARROn9SdY216Cg81xOG
-KCS1tke0bjeN8xyzgvgEUKGo2Ff1ZwcXETZx3n/c8LNV+17+7olgaPHVGt0G4cJM
-4F4txFLeRaGGDwBurq1VQljSjiwFF4uoeKbHJx0/BJskFcCtQjDZqhfgtrkEXCZa
-dJpVWbLRN55YJyLrLXO6Qw==
-=HlHl
------END PGP PUBLIC KEY BLOCK-----
diff --git a/data/iphone-notes.de/make.sh b/data/iphone-notes.de/make.sh
deleted file mode 100644
index 4ff97bb0f..000000000
--- a/data/iphone-notes.de/make.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/iphone-notes.de.list /etc/apt/sources.list.d
-pkg: mkdir -p /usr/share/keyrings
-pkg: cp -a %/iphone-notes_de.pub /usr/share/keyrings/iphone-notes.de-keyring.gpg
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/icon.png /Applications/Cydia.app/Sources/apt.iphone-storage.de.png
diff --git a/data/iphone-python/_metadata/maintainer b/data/iphone-python/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/iphone-python/_metadata/maintainer
+++ b/data/iphone-python/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iphoneislam.com/_metadata/description b/data/iphoneislam.com/_metadata/description
deleted file mode 100644
index af6f6aeb5..000000000
--- a/data/iphoneislam.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Arabic language support packages
diff --git a/data/iphoneislam.com/_metadata/license b/data/iphoneislam.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/iphoneislam.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/iphoneislam.com/_metadata/maintainer b/data/iphoneislam.com/_metadata/maintainer
deleted file mode 100644
index f60309ef2..000000000
--- a/data/iphoneislam.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-iPhoneIslam <info@iPhoneIslam.com>
diff --git a/data/iphoneislam.com/_metadata/name b/data/iphoneislam.com/_metadata/name
deleted file mode 100644
index e5d4f4341..000000000
--- a/data/iphoneislam.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iPhone Islam's Source
diff --git a/data/iphoneislam.com/_metadata/role b/data/iphoneislam.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/iphoneislam.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/iphoneislam.com/_metadata/section b/data/iphoneislam.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/iphoneislam.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/iphoneislam.com/_metadata/tags b/data/iphoneislam.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/iphoneislam.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/iphoneislam.com/_metadata/version b/data/iphoneislam.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/iphoneislam.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/iphoneislam.com/iphoneislam.com.list b/data/iphoneislam.com/iphoneislam.com.list
deleted file mode 100644
index 1671e9f6f..000000000
--- a/data/iphoneislam.com/iphoneislam.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://apps.iphoneislam.com/ ./
diff --git a/data/iphoneislam.com/make.sh b/data/iphoneislam.com/make.sh
deleted file mode 100644
index e4d19acbb..000000000
--- a/data/iphoneislam.com/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/iphoneislam.com.list /etc/apt/sources.list.d
diff --git a/data/iphonemod.com.br/_metadata/description b/data/iphonemod.com.br/_metadata/description
deleted file mode 100644
index 48015b590..000000000
--- a/data/iphonemod.com.br/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Brazilian language support packages
diff --git a/data/iphonemod.com.br/_metadata/license b/data/iphonemod.com.br/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/iphonemod.com.br/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/iphonemod.com.br/_metadata/maintainer b/data/iphonemod.com.br/_metadata/maintainer
deleted file mode 100644
index e73a9bec3..000000000
--- a/data/iphonemod.com.br/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Arnaldo H. Viegas de Lima <arnaldo@viegasdelima.com>
diff --git a/data/iphonemod.com.br/_metadata/name b/data/iphonemod.com.br/_metadata/name
deleted file mode 100644
index 32a002e39..000000000
--- a/data/iphonemod.com.br/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iPhoneMod Brazil
diff --git a/data/iphonemod.com.br/_metadata/role b/data/iphonemod.com.br/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/iphonemod.com.br/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/iphonemod.com.br/_metadata/section b/data/iphonemod.com.br/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/iphonemod.com.br/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/iphonemod.com.br/_metadata/tags b/data/iphonemod.com.br/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/iphonemod.com.br/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/iphonemod.com.br/_metadata/version b/data/iphonemod.com.br/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/iphonemod.com.br/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/iphonemod.com.br/iphonemod.com.br.list b/data/iphonemod.com.br/iphonemod.com.br.list
deleted file mode 100644
index 8e5208b69..000000000
--- a/data/iphonemod.com.br/iphonemod.com.br.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://cydia.iphonemod.com.br/ ./
diff --git a/data/iphonemod.com.br/make.sh b/data/iphonemod.com.br/make.sh
deleted file mode 100644
index f829e21a3..000000000
--- a/data/iphonemod.com.br/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/iphonemod.com.br.list /etc/apt/sources.list.d
diff --git a/data/iphonemodding.com/_metadata/description b/data/iphonemodding.com/_metadata/description
deleted file mode 100644
index 42e72d891..000000000
--- a/data/iphonemodding.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-iPhoneModding theme repository
diff --git a/data/iphonemodding.com/_metadata/license b/data/iphonemodding.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/iphonemodding.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/iphonemodding.com/_metadata/maintainer b/data/iphonemodding.com/_metadata/maintainer
deleted file mode 100644
index 8d5719d36..000000000
--- a/data/iphonemodding.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-maXimus <maximus@maximus.ws>
diff --git a/data/iphonemodding.com/_metadata/name b/data/iphonemodding.com/_metadata/name
deleted file mode 100644
index 83acf7b0a..000000000
--- a/data/iphonemodding.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iPhoneModding
diff --git a/data/iphonemodding.com/_metadata/role b/data/iphonemodding.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/iphonemodding.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/iphonemodding.com/_metadata/section b/data/iphonemodding.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/iphonemodding.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/iphonemodding.com/_metadata/tags b/data/iphonemodding.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/iphonemodding.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/iphonemodding.com/_metadata/version b/data/iphonemodding.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/iphonemodding.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/iphonemodding.com/iphonemodding.com.list b/data/iphonemodding.com/iphonemodding.com.list
deleted file mode 100644
index bdfaef1cb..000000000
--- a/data/iphonemodding.com/iphonemodding.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://apt.iphonemodding.com/ ./
diff --git a/data/iphonemodding.com/ipm_logo.png b/data/iphonemodding.com/ipm_logo.png
deleted file mode 100644
index 813c7ce96..000000000
--- a/data/iphonemodding.com/ipm_logo.png
+++ /dev/null
Binary files differ
diff --git a/data/iphonemodding.com/make.sh b/data/iphonemodding.com/make.sh
deleted file mode 100644
index 91276a894..000000000
--- a/data/iphonemodding.com/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/iphonemodding.com.list /etc/apt/sources.list.d
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/ipm_logo.png /Applications/Cydia.app/Sources/apt.iphonemoding.com.png
diff --git a/data/iphoneos-sys/_metadata/in.1443.00 b/data/iphoneos-sys/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/iphoneos-sys/_metadata/in.1443.00
diff --git a/data/iphonestuff/_metadata/description b/data/iphonestuff/_metadata/description
deleted file mode 100644
index 206c385f1..000000000
--- a/data/iphonestuff/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-iPhone Stuff's APT repository
diff --git a/data/iphonestuff/_metadata/license b/data/iphonestuff/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/iphonestuff/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/iphonestuff/_metadata/maintainer b/data/iphonestuff/_metadata/maintainer
deleted file mode 100644
index 9ee7bfb00..000000000
--- a/data/iphonestuff/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Nik S Denin <wolf.step@gmail.com>
diff --git a/data/iphonestuff/_metadata/name b/data/iphonestuff/_metadata/name
deleted file mode 100644
index 578e83729..000000000
--- a/data/iphonestuff/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iPhone Stuff's Source
diff --git a/data/iphonestuff/_metadata/role b/data/iphonestuff/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/iphonestuff/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/iphonestuff/_metadata/section b/data/iphonestuff/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/iphonestuff/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/iphonestuff/_metadata/tags b/data/iphonestuff/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/iphonestuff/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/iphonestuff/_metadata/version b/data/iphonestuff/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/iphonestuff/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/iphonestuff/iphonestuff.list b/data/iphonestuff/iphonestuff.list
deleted file mode 100644
index 14a361641..000000000
--- a/data/iphonestuff/iphonestuff.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://iphonestuff.ru/ stable main
diff --git a/data/iphonestuff/make.sh b/data/iphonestuff/make.sh
deleted file mode 100644
index ca6040317..000000000
--- a/data/iphonestuff/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/iphonestuff.list /etc/apt/sources.list.d
diff --git a/data/iphonesurge/_metadata/description b/data/iphonesurge/_metadata/description
deleted file mode 100644
index 757d5b29e..000000000
--- a/data/iphonesurge/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-obsolete, upgrade, but don't install
diff --git a/data/iphonesurge/_metadata/license b/data/iphonesurge/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/iphonesurge/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/iphonesurge/_metadata/maintainer b/data/iphonesurge/_metadata/maintainer
deleted file mode 120000
index d4e1d32ea..000000000
--- a/data/iphonesurge/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-../../../people/francis \ No newline at end of file
diff --git a/data/iphonesurge/_metadata/name b/data/iphonesurge/_metadata/name
deleted file mode 100644
index c1c74b0fa..000000000
--- a/data/iphonesurge/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iPhone Surge's Source
diff --git a/data/iphonesurge/_metadata/role b/data/iphonesurge/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/iphonesurge/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/iphonesurge/_metadata/section b/data/iphonesurge/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/iphonesurge/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/iphonesurge/_metadata/tags b/data/iphonesurge/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/iphonesurge/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/iphonesurge/_metadata/version b/data/iphonesurge/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/iphonesurge/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/iphonesurge/iphonesurge.list b/data/iphonesurge/iphonesurge.list
deleted file mode 100644
index 1577a496f..000000000
--- a/data/iphonesurge/iphonesurge.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://iphonesurge.com/cydia/ stable main
diff --git a/data/iphonesurge/make.sh b/data/iphonesurge/make.sh
deleted file mode 100644
index 00b1f64a5..000000000
--- a/data/iphonesurge/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/iphonesurge.list /etc/apt/sources.list.d
diff --git a/data/ipkg/_metadata/in.1443.00 b/data/ipkg/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ipkg/_metadata/in.1443.00
diff --git a/data/ipkg/_metadata/maintainer b/data/ipkg/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ipkg/_metadata/maintainer
+++ b/data/ipkg/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/irssi/_metadata/in.1443.00 b/data/irssi/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/irssi/_metadata/in.1443.00
diff --git a/data/irssi/_metadata/libssl1.0.dep b/data/irssi/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/irssi/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/irssi/_metadata/maintainer b/data/irssi/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/irssi/_metadata/maintainer
+++ b/data/irssi/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/irssi/_metadata/openssl.dep b/data/irssi/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/irssi/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/irssi/_metadata/version b/data/irssi/_metadata/version
index 7eff8ab95..524cb5524 100644
--- a/data/irssi/_metadata/version
+++ b/data/irssi/_metadata/version
@@ -1 +1 @@
-0.8.12
+1.1.1
diff --git a/data/irssi/irssi-0.8.12.tar.gz b/data/irssi/irssi-0.8.12.tar.gz
deleted file mode 100644
index b1bbc629e..000000000
--- a/data/irssi/irssi-0.8.12.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/irssi/irssi-1.1.1.tar.xz b/data/irssi/irssi-1.1.1.tar.xz
new file mode 100644
index 000000000..5a76161e6
--- /dev/null
+++ b/data/irssi/irssi-1.1.1.tar.xz
Binary files differ
diff --git a/data/irssi/make.sh b/data/irssi/make.sh
index 13355cdca..2248ec7ae 100644
--- a/data/irssi/make.sh
+++ b/data/irssi/make.sh
@@ -1,5 +1,5 @@
pkg:setup
pkg:autoconf
-pkg:configure --enable-static
-make
+pkg:configure --enable-static LD="${PKG_TARG}-ld"
+make -j8
pkg:install
diff --git a/data/irssi/mdns.diff b/data/irssi/mdns.diff
deleted file mode 100644
index 50478e973..000000000
--- a/data/irssi/mdns.diff
+++ /dev/null
@@ -1,50 +0,0 @@
-diff -ru irssi-0.8.12/src/fe-none/irssi.c irssi-0.8.12+iPhone/src/fe-none/irssi.c
---- irssi-0.8.12/src/fe-none/irssi.c 2007-10-06 09:38:20.000000000 +0000
-+++ irssi-0.8.12+iPhone/src/fe-none/irssi.c 2008-01-28 22:40:10.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- irssi.c : irssi
-
-@@ -81,6 +83,15 @@
-
- int main(int argc, char **argv)
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- static struct poptOption options[] = {
- POPT_AUTOHELP
- { "load", 'l', POPT_ARG_STRING, &autoload_module, 0, "Module to load (default = bot)", "MODULE" },
-diff -ru irssi-0.8.12/src/fe-text/irssi.c irssi-0.8.12+iPhone/src/fe-text/irssi.c
---- irssi-0.8.12/src/fe-text/irssi.c 2007-10-06 09:38:20.000000000 +0000
-+++ irssi-0.8.12+iPhone/src/fe-text/irssi.c 2008-01-28 22:40:01.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- irssi.c : irssi
-
-@@ -328,6 +330,15 @@
-
- int main(int argc, char **argv)
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- static int version = 0;
- static struct poptOption options[] = {
- { "dummy", 'd', POPT_ARG_NONE, &dummy, 0, "Use the dummy terminal mode", NULL },
diff --git a/data/jamvm/_metadata/in.1443.00 b/data/jamvm/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/jamvm/_metadata/in.1443.00
diff --git a/data/jamvm/_metadata/maintainer b/data/jamvm/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/jamvm/_metadata/maintainer
+++ b/data/jamvm/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/javasqlite/_metadata/in.1443.00 b/data/javasqlite/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/javasqlite/_metadata/in.1443.00
diff --git a/data/javasqlite/_metadata/maintainer b/data/javasqlite/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/javasqlite/_metadata/maintainer
+++ b/data/javasqlite/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/jikes/_metadata/in.1443.00 b/data/jikes/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/jikes/_metadata/in.1443.00
diff --git a/data/jikes/_metadata/maintainer b/data/jikes/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/jikes/_metadata/maintainer
+++ b/data/jikes/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/jocstrap/_metadata/in.1443.00 b/data/jocstrap/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/jocstrap/_metadata/in.1443.00
diff --git a/data/jocstrap/_metadata/maintainer b/data/jocstrap/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/jocstrap/_metadata/maintainer
+++ b/data/jocstrap/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/kbproto/_metadata/in.1443.00 b/data/kbproto/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/kbproto/_metadata/in.1443.00
diff --git a/data/kbproto/_metadata/maintainer b/data/kbproto/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/kbproto/_metadata/maintainer
+++ b/data/kbproto/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/kext-tools/_metadata/in.1443.00 b/data/kext-tools/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/kext-tools/_metadata/in.1443.00
diff --git a/data/kext-tools/_metadata/maintainer b/data/kext-tools/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/kext-tools/_metadata/maintainer
+++ b/data/kext-tools/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/kismet_/_metadata/in.1443.00 b/data/kismet_/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/kismet_/_metadata/in.1443.00
diff --git a/data/kismet_/_metadata/maintainer b/data/kismet_/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/kismet_/_metadata/maintainer
+++ b/data/kismet_/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/krb5/_metadata/in.1443.00 b/data/krb5/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/krb5/_metadata/in.1443.00
diff --git a/data/krb5/_metadata/maintainer b/data/krb5/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/krb5/_metadata/maintainer
+++ b/data/krb5/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/lame/_metadata/in.1443.00 b/data/lame/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/lame/_metadata/in.1443.00
diff --git a/data/lame/_metadata/maintainer b/data/lame/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/lame/_metadata/maintainer
+++ b/data/lame/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/lame/_metadata/ncurses.dep b/data/lame/_metadata/ncurses.dep
new file mode 120000
index 000000000..a395fad08
--- /dev/null
+++ b/data/lame/_metadata/ncurses.dep
@@ -0,0 +1 @@
+../../ncurses \ No newline at end of file
diff --git a/data/lame/_metadata/version b/data/lame/_metadata/version
index eb52ff7c8..748d07b56 100644
--- a/data/lame/_metadata/version
+++ b/data/lame/_metadata/version
@@ -1 +1 @@
-3.98b8
+3.100
diff --git a/data/lame/lame-3.100.tar.gz b/data/lame/lame-3.100.tar.gz
new file mode 100644
index 000000000..32336a6d3
--- /dev/null
+++ b/data/lame/lame-3.100.tar.gz
Binary files differ
diff --git a/data/lame/lame-3.98b8.tar.gz b/data/lame/lame-3.98b8.tar.gz
deleted file mode 100644
index 8fd700952..000000000
--- a/data/lame/lame-3.98b8.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/lame/lame_init_old.diff b/data/lame/lame_init_old.diff
new file mode 100644
index 000000000..155340bab
--- /dev/null
+++ b/data/lame/lame_init_old.diff
@@ -0,0 +1,9 @@
+diff -ur lame-3.100/include/libmp3lame.sym lame-3.100+iPhone/include/libmp3lame.sym
+--- lame-3.100/include/libmp3lame.sym 2017-09-06 09:33:35.000000000 -1000
++++ lame-3.100+iPhone/include/libmp3lame.sym 2018-07-27 22:59:41.000000000 -1000
+@@ -1,5 +1,4 @@
+ lame_init
+-lame_init_old
+ lame_set_num_samples
+ lame_get_num_samples
+ lame_set_in_samplerate
diff --git a/data/lame/timestamp.diff b/data/lame/timestamp.diff
index d9188f5f5..c828ad740 100644
--- a/data/lame/timestamp.diff
+++ b/data/lame/timestamp.diff
@@ -1,70 +1,19 @@
-diff -ru lame-3.98b8/ACM/main.cpp lame-3.98b8+iPhone/ACM/main.cpp
---- lame-3.98b8/ACM/main.cpp 2006-12-25 21:37:34.000000000 +0000
-+++ lame-3.98b8+iPhone/ACM/main.cpp 2008-06-19 04:41:12.000000000 +0000
-@@ -155,8 +155,8 @@
- // nothing to do
+diff -ur lame-3.100/ACM/main.cpp lame-3.100+iPhone/ACM/main.cpp
+--- lame-3.100/ACM/main.cpp 2006-12-25 11:37:34.000000000 -1000
++++ lame-3.100+iPhone/ACM/main.cpp 2018-07-27 22:55:45.000000000 -1000
+@@ -156,7 +156,7 @@
if (debug != NULL)
{
--// debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD, version %s %s %s", ACM_VERSION, __DATE__, __TIME__);
+ // debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD, version %s %s %s", ACM_VERSION, __DATE__, __TIME__);
- debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD, %s %s", __DATE__, __TIME__);
-+// debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD, version %s", ACM_VERSION);
+ debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD");
}
return 1L;
}
-diff -ru lame-3.98b8/Dll/BladeMP3EncDLL.c lame-3.98b8+iPhone/Dll/BladeMP3EncDLL.c
---- lame-3.98b8/Dll/BladeMP3EncDLL.c 2008-03-09 17:13:23.000000000 +0000
-+++ lame-3.98b8+iPhone/Dll/BladeMP3EncDLL.c 2008-06-19 04:43:31.000000000 +0000
-@@ -621,8 +621,6 @@
- __declspec(dllexport) VOID beVersion(PBE_VERSION pbeVersion)
- {
- // DLL Release date
-- char lpszDate[20] = { '\0', };
-- char lpszTemp[5] = { '\0', };
- lame_version_t lv = { 0, };
-
-
-@@ -646,33 +644,14 @@
-
- memset( pbeVersion->btReserved, 0, sizeof( pbeVersion->btReserved ) );
-
-- // Get compilation date
-- strcpy(lpszDate,__DATE__);
--
- // Get the first three character, which is the month
-- strncpy(lpszTemp,lpszDate,3);
-- lpszTemp[3] = '\0';
-- pbeVersion->byMonth=1;
--
-- // Set month
-- if (strcmp(lpszTemp,"Jan")==0) pbeVersion->byMonth = 1;
-- if (strcmp(lpszTemp,"Feb")==0) pbeVersion->byMonth = 2;
-- if (strcmp(lpszTemp,"Mar")==0) pbeVersion->byMonth = 3;
-- if (strcmp(lpszTemp,"Apr")==0) pbeVersion->byMonth = 4;
-- if (strcmp(lpszTemp,"May")==0) pbeVersion->byMonth = 5;
-- if (strcmp(lpszTemp,"Jun")==0) pbeVersion->byMonth = 6;
-- if (strcmp(lpszTemp,"Jul")==0) pbeVersion->byMonth = 7;
-- if (strcmp(lpszTemp,"Aug")==0) pbeVersion->byMonth = 8;
-- if (strcmp(lpszTemp,"Sep")==0) pbeVersion->byMonth = 9;
-- if (strcmp(lpszTemp,"Oct")==0) pbeVersion->byMonth = 10;
-- if (strcmp(lpszTemp,"Nov")==0) pbeVersion->byMonth = 11;
-- if (strcmp(lpszTemp,"Dec")==0) pbeVersion->byMonth = 12;
-+ pbeVersion->byMonth=0;
-
- // Get day of month string (char [4..5])
-- pbeVersion->byDay=atoi( lpszDate + 4 );
-+ pbeVersion->byDay=0;
-
- // Get year of compilation date (char [7..10])
-- pbeVersion->wYear = atoi( lpszDate + 7 );
-+ pbeVersion->wYear = 0;
-
- memset( pbeVersion->zHomepage, 0x00, BE_MAX_HOMEPAGE );
-
-diff -ru lame-3.98b8/frontend/gtkanal.c lame-3.98b8+iPhone/frontend/gtkanal.c
---- lame-3.98b8/frontend/gtkanal.c 2007-07-24 17:46:09.000000000 +0000
-+++ lame-3.98b8+iPhone/frontend/gtkanal.c 2008-06-19 04:41:53.000000000 +0000
-@@ -1119,11 +1119,11 @@
+diff -ur lame-3.100/frontend/gtkanal.c lame-3.100+iPhone/frontend/gtkanal.c
+--- lame-3.100/frontend/gtkanal.c 2017-09-06 09:33:35.000000000 -1000
++++ lame-3.100+iPhone/frontend/gtkanal.c 2018-07-27 22:56:05.000000000 -1000
+@@ -1128,11 +1128,11 @@
#if MP3X_ALPHA_VERSION > 0
static /*@observer@ */ const char *const str =
XSTR(MP3X_MAJOR_VERSION) "." XSTR(MP3X_MINOR_VERSION)
@@ -78,34 +27,34 @@ diff -ru lame-3.98b8/frontend/gtkanal.c lame-3.98b8+iPhone/frontend/gtkanal.c
#else
static /*@observer@ */ const char *const str =
XSTR(MP3X_MAJOR_VERSION) "." XSTR(MP3X_MINOR_VERSION);
-diff -ru lame-3.98b8/libmp3lame/version.c lame-3.98b8+iPhone/libmp3lame/version.c
---- lame-3.98b8/libmp3lame/version.c 2008-02-22 02:38:46.000000000 +0000
-+++ lame-3.98b8+iPhone/libmp3lame/version.c 2008-06-19 04:42:10.000000000 +0000
-@@ -62,11 +62,11 @@
+diff -ur lame-3.100/libmp3lame/version.c lame-3.100+iPhone/libmp3lame/version.c
+--- lame-3.100/libmp3lame/version.c 2011-11-17 23:51:02.000000000 -1000
++++ lame-3.100+iPhone/libmp3lame/version.c 2018-07-27 22:55:08.000000000 -1000
+@@ -58,11 +58,11 @@
#if LAME_ALPHA_VERSION
static /*@observer@ */ const char *const str =
- XSTR(LAME_MAJOR_VERSION) "." XSTR(LAME_MINOR_VERSION) " "
-- "(alpha " XSTR(LAME_PATCH_VERSION) ", " __DATE__ " " __TIME__ ")";
-+ "(alpha " XSTR(LAME_PATCH_VERSION) ")";
+ STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) " "
+- "(alpha " STR(LAME_PATCH_VERSION) ", " __DATE__ " " __TIME__ ")";
++ "(alpha " STR(LAME_PATCH_VERSION)")";
#elif LAME_BETA_VERSION
static /*@observer@ */ const char *const str =
- XSTR(LAME_MAJOR_VERSION) "." XSTR(LAME_MINOR_VERSION) " "
-- "(beta " XSTR(LAME_PATCH_VERSION) ", " __DATE__ ")";
-+ "(beta " XSTR(LAME_PATCH_VERSION) ")";
+ STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) " "
+- "(beta " STR(LAME_PATCH_VERSION) ", " __DATE__ ")";
++ "(beta " STR(LAME_PATCH_VERSION) ")";
#elif LAME_RELEASE_VERSION && (LAME_PATCH_VERSION > 0)
static /*@observer@ */ const char *const str =
- XSTR(LAME_MAJOR_VERSION) "." XSTR(LAME_MINOR_VERSION) "." XSTR(LAME_PATCH_VERSION);
-@@ -150,11 +150,11 @@
+ STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) "." STR(LAME_PATCH_VERSION);
+@@ -165,11 +165,11 @@
#if PSY_ALPHA_VERSION > 0
static /*@observer@ */ const char *const str =
- XSTR(PSY_MAJOR_VERSION) "." XSTR(PSY_MINOR_VERSION)
-- " (alpha " XSTR(PSY_ALPHA_VERSION) ", " __DATE__ " " __TIME__ ")";
-+ " (alpha " XSTR(PSY_ALPHA_VERSION) ")";
+ STR(PSY_MAJOR_VERSION) "." STR(PSY_MINOR_VERSION)
+- " (alpha " STR(PSY_ALPHA_VERSION) ", " __DATE__ " " __TIME__ ")";
++ " (alpha " STR(PSY_ALPHA_VERSION) ")";
#elif PSY_BETA_VERSION > 0
static /*@observer@ */ const char *const str =
- XSTR(PSY_MAJOR_VERSION) "." XSTR(PSY_MINOR_VERSION)
-- " (beta " XSTR(PSY_BETA_VERSION) ", " __DATE__ ")";
-+ " (beta " XSTR(PSY_BETA_VERSION) ")";
+ STR(PSY_MAJOR_VERSION) "." STR(PSY_MINOR_VERSION)
+- " (beta " STR(PSY_BETA_VERSION) ", " __DATE__ ")";
++ " (beta " STR(PSY_BETA_VERSION) ")";
#else
static /*@observer@ */ const char *const str =
- XSTR(PSY_MAJOR_VERSION) "." XSTR(PSY_MINOR_VERSION);
+ STR(PSY_MAJOR_VERSION) "." STR(PSY_MINOR_VERSION);
diff --git a/data/launchd/_metadata/maintainer b/data/launchd/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/launchd/_metadata/maintainer
+++ b/data/launchd/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/launchd/_metadata/version b/data/launchd/_metadata/version
index bb6d31c0c..6524baf05 100644
--- a/data/launchd/_metadata/version
+++ b/data/launchd/_metadata/version
@@ -1 +1 @@
-258.18
+842.92.1
diff --git a/data/launchd/launchd-258.18.tar.gz b/data/launchd/launchd-258.18.tar.gz
deleted file mode 100644
index b5e4ffc67..000000000
--- a/data/launchd/launchd-258.18.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/launchd/launchd-842.92.1.tar.gz b/data/launchd/launchd-842.92.1.tar.gz
new file mode 100644
index 000000000..afbf09133
--- /dev/null
+++ b/data/launchd/launchd-842.92.1.tar.gz
Binary files differ
diff --git a/data/launchd/make.sh b/data/launchd/make.sh
index cf4270d30..6bb833073 100644
--- a/data/launchd/make.sh
+++ b/data/launchd/make.sh
@@ -1,6 +1,7 @@
-pkg:setup
-cd launchd
-pkg:configure --bindir=/bin --sbindir=/sbin --sysconfdir=/etc
-export SDKROOT=${PKG_ROOT}
-make
-pkg:install
+pkg:extract
+cd *
+pkg:patch
+#${PKG_TARG}-gcc -c liblaunch/liblaunch.c -o liblaunch.o -Isrc -miphoneos-version-min=11.0 -Iliblaunch
+${PKG_TARG}-gcc -DPRIVATE support/launchctl.c -o launchctl -Isrc -miphoneos-version-min=11.0 -Iliblaunch -I"$(PKG_DEST_ readline)/usr/include" -framework CoreFoundation -framework IOKit -lreadline -llaunch
+pkg: mkdir -p /usr/bin
+pkg: cp -a launchctl /usr/bin
diff --git a/data/launchd/port.diff b/data/launchd/port.diff
deleted file mode 100644
index 4bf2ee0af..000000000
--- a/data/launchd/port.diff
+++ /dev/null
@@ -1,107 +0,0 @@
-diff -ru launchd-258.18/launchd/configure launchd-258.18+iPhone/launchd/configure
---- launchd-258.18/launchd/configure 2008-01-28 18:20:19.000000000 +0000
-+++ launchd-258.18+iPhone/launchd/configure 2008-11-24 10:24:21.000000000 +0000
-@@ -7863,13 +7863,8 @@
- LIBS_ONLY_FALSE=
- fi
-
-- if test $(tconf --test TARGET_OS_EMBEDDED) = YES; then
- DO_EMBEDDED_MAGIC_TRUE=
- DO_EMBEDDED_MAGIC_FALSE='#'
--else
-- DO_EMBEDDED_MAGIC_TRUE='#'
-- DO_EMBEDDED_MAGIC_FALSE=
--fi
-
-
-
-diff -ru launchd-258.18/launchd/src/launchctl.c launchd-258.18+iPhone/launchd/src/launchctl.c
---- launchd-258.18/launchd/src/launchctl.c 2008-07-18 21:25:03.000000000 +0000
-+++ launchd-258.18+iPhone/launchd/src/launchctl.c 2008-11-24 10:27:33.000000000 +0000
-@@ -20,6 +20,8 @@
-
- static const char *const __rcs_file_version__ = "$Revision: 23642 $";
-
-+#define PRIVATE
-+
- #include "liblaunch_public.h"
- #include "liblaunch_private.h"
- #include "libbootstrap_public.h"
-@@ -74,6 +76,9 @@
- #include <sysexits.h>
- #include <util.h>
-
-+#include <sys/sockio.h>
-+#include <mach/mach_error.h>
-+#include <sys/ioctl.h>
-
- #define LAUNCH_SECDIR "/tmp/launch-XXXXXX"
-
-diff -ru launchd-258.18/launchd/src/launchd_runtime.c launchd-258.18+iPhone/launchd/src/launchd_runtime.c
---- launchd-258.18/launchd/src/launchd_runtime.c 2008-03-04 17:48:07.000000000 +0000
-+++ launchd-258.18+iPhone/launchd/src/launchd_runtime.c 2008-11-24 10:37:16.000000000 +0000
-@@ -75,6 +75,8 @@
- static mach_port_t launchd_internal_port;
- static int mainkq;
-
-+extern void mach_msg_destroy(mach_msg_header_t *mh);
-+
- #define BULK_KEV_MAX 100
- static struct kevent *bulk_kev;
- static int bulk_kev_i;
-diff -ru launchd-258.18/launchd/src/Makefile.am launchd-258.18+iPhone/launchd/src/Makefile.am
---- launchd-258.18/launchd/src/Makefile.am 2008-01-28 18:20:19.000000000 +0000
-+++ launchd-258.18+iPhone/launchd/src/Makefile.am 2008-11-24 10:32:27.000000000 +0000
-@@ -46,7 +46,7 @@
- sysconf_DATA = hostconfig rc.common rc.netboot
-
- launchctl_CFLAGS = $(AM_CFLAGS) -I$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders
--launchctl_LDFLAGS = $(AM_LDFLAGS) -framework CoreFoundation -framework IOKit $(LIBS_SECURITY) -weak_library /usr/lib/libedit.dylib
-+launchctl_LDFLAGS = $(AM_LDFLAGS) -framework CoreFoundation -framework IOKit $(LIBS_SECURITY) -weak_library $(SDKROOT)/usr/lib/libedit.dylib
-
- if DO_EMBEDDED_MAGIC
- else
-@@ -64,11 +64,11 @@
-
- launchproxy_LDFLAGS = $(AM_LDFLAGS) $(WEAKLIBS_SECURITY)
-
--notifyServer.c notifyServer.h: /usr/include/mach/notify.defs
-- mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader notifyServer.h /usr/include/mach/notify.defs
-+notifyServer.c notifyServer.h: $(SDKROOT)/usr/include/mach/notify.defs
-+ mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader notifyServer.h $(SDKROOT)/usr/include/mach/notify.defs
-
--mach_excServer.c mach_excServer.h: /usr/include/mach/mach_exc.defs
-- mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader mach_excServer.h /usr/include/mach/mach_exc.defs
-+mach_excServer.c mach_excServer.h: $(SDKROOT)/usr/include/mach/mach_exc.defs
-+ mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader mach_excServer.h $(SDKROOT)/usr/include/mach/mach_exc.defs
-
- job_replyUser.c job_reply.h: $(srcdir)/protocol_job_reply.defs
- mig $(MIGFLAGS) -sheader /dev/null -server /dev/null $(srcdir)/protocol_job_reply.defs
-diff -ru launchd-258.18/launchd/src/Makefile.in launchd-258.18+iPhone/launchd/src/Makefile.in
---- launchd-258.18/launchd/src/Makefile.in 2008-01-28 18:20:19.000000000 +0000
-+++ launchd-258.18+iPhone/launchd/src/Makefile.in 2008-11-24 10:32:41.000000000 +0000
-@@ -254,7 +254,7 @@
- @LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c
- @LIBS_ONLY_FALSE@sysconf_DATA = hostconfig rc.common rc.netboot
- @LIBS_ONLY_FALSE@launchctl_CFLAGS = $(AM_CFLAGS) -I$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders
--@LIBS_ONLY_FALSE@launchctl_LDFLAGS = $(AM_LDFLAGS) -framework CoreFoundation -framework IOKit $(LIBS_SECURITY) -weak_library /usr/lib/libedit.dylib
-+@LIBS_ONLY_FALSE@launchctl_LDFLAGS = $(AM_LDFLAGS) -framework CoreFoundation -framework IOKit $(LIBS_SECURITY) -weak_library $(SDKROOT)/usr/lib/libedit.dylib
- @DO_EMBEDDED_MAGIC_FALSE@@LIBS_ONLY_FALSE@SystemStarter_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS)
- @DO_EMBEDDED_MAGIC_FALSE@@LIBS_ONLY_FALSE@SystemStarter_LDFLAGS = $(AM_LDFLAGS) -framework CoreFoundation -framework IOKit
- @DO_EMBEDDED_MAGIC_FALSE@@LIBS_ONLY_FALSE@SystemStarter_SOURCES = StartupItems.c IPC.c SystemStarter.c
-@@ -1174,11 +1174,11 @@
- @LIBS_ONLY_FALSE@launchd_runtime.c:: notifyServer.h launchd_internal.h mach_excServer.h
- @LIBS_ONLY_FALSE@launchd_core_logic.c:: protocol_vproc.h job_reply.h protocol_vprocServer.h
-
--@LIBS_ONLY_FALSE@notifyServer.c notifyServer.h: /usr/include/mach/notify.defs
--@LIBS_ONLY_FALSE@ mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader notifyServer.h /usr/include/mach/notify.defs
-+@LIBS_ONLY_FALSE@notifyServer.c notifyServer.h: $(SDKROOT)/usr/include/mach/notify.defs
-+@LIBS_ONLY_FALSE@ mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader notifyServer.h $(SDKROOT)/usr/include/mach/notify.defs
-
--@LIBS_ONLY_FALSE@mach_excServer.c mach_excServer.h: /usr/include/mach/mach_exc.defs
--@LIBS_ONLY_FALSE@ mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader mach_excServer.h /usr/include/mach/mach_exc.defs
-+@LIBS_ONLY_FALSE@mach_excServer.c mach_excServer.h: $(SDKROOT)/usr/include/mach/mach_exc.defs
-+@LIBS_ONLY_FALSE@ mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader mach_excServer.h $(SDKROOT)/usr/include/mach/mach_exc.defs
-
- @LIBS_ONLY_FALSE@job_replyUser.c job_reply.h: $(srcdir)/protocol_job_reply.defs
- @LIBS_ONLY_FALSE@ mig $(MIGFLAGS) -sheader /dev/null -server /dev/null $(srcdir)/protocol_job_reply.defs
diff --git a/data/launchd/sockio.diff b/data/launchd/sockio.diff
new file mode 100644
index 000000000..d7be39318
--- /dev/null
+++ b/data/launchd/sockio.diff
@@ -0,0 +1,14 @@
+diff -ur launchd-842.92.1/support/launchctl.c launchd-842.92.1+iPhone/support/launchctl.c
+--- launchd-842.92.1/support/launchctl.c 2013-04-01 10:49:56.000000000 -1000
++++ launchd-842.92.1+iPhone/support/launchctl.c 2018-09-03 22:33:20.000000000 -1000
+@@ -39,9 +39,9 @@
+ #include <sys/types.h>
+ #include <sys/sysctl.h>
+ #include <sys/time.h>
+-#include <sys/sysctl.h>
+ #include <sys/stat.h>
+ #include <sys/socket.h>
++#include <sys/sockio.h>
+ #include <sys/un.h>
+ #include <sys/fcntl.h>
+ #include <sys/event.h>
diff --git a/data/ld64/_metadata/conflicts b/data/ld64/_metadata/conflicts
new file mode 100644
index 000000000..e1d0d5375
--- /dev/null
+++ b/data/ld64/_metadata/conflicts
@@ -0,0 +1 @@
+org.coolstar.ld64
diff --git a/data/ld64/_metadata/description b/data/ld64/_metadata/description
new file mode 100644
index 000000000..97fce8bc3
--- /dev/null
+++ b/data/ld64/_metadata/description
@@ -0,0 +1 @@
+64bit iOS linker
diff --git a/data/ld64/_metadata/in.1443.00 b/data/ld64/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ld64/_metadata/in.1443.00
diff --git a/data/ld64/_metadata/ldid.dep b/data/ld64/_metadata/ldid.dep
new file mode 120000
index 000000000..3dd0689cb
--- /dev/null
+++ b/data/ld64/_metadata/ldid.dep
@@ -0,0 +1 @@
+../../ldid \ No newline at end of file
diff --git a/data/ld64/_metadata/libtapi.dep b/data/ld64/_metadata/libtapi.dep
new file mode 120000
index 000000000..5c5ceb1d6
--- /dev/null
+++ b/data/ld64/_metadata/libtapi.dep
@@ -0,0 +1 @@
+../../libtapi \ No newline at end of file
diff --git a/data/ld64/_metadata/license b/data/ld64/_metadata/license
new file mode 120000
index 000000000..9e5e5e89d
--- /dev/null
+++ b/data/ld64/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/apsl-2.0 \ No newline at end of file
diff --git a/data/ld64/_metadata/maintainer b/data/ld64/_metadata/maintainer
new file mode 100644
index 000000000..55521c7d0
--- /dev/null
+++ b/data/ld64/_metadata/maintainer
@@ -0,0 +1 @@
+Sam Bingner <maintainer@sbdhi.com>
diff --git a/data/hvkls.dyndns.org/_metadata/priority b/data/ld64/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/hvkls.dyndns.org/_metadata/priority
+++ b/data/ld64/_metadata/priority
diff --git a/data/ld64/_metadata/provides b/data/ld64/_metadata/provides
new file mode 100644
index 000000000..e1d0d5375
--- /dev/null
+++ b/data/ld64/_metadata/provides
@@ -0,0 +1 @@
+org.coolstar.ld64
diff --git a/data/ld64/_metadata/replaces b/data/ld64/_metadata/replaces
new file mode 100644
index 000000000..e1d0d5375
--- /dev/null
+++ b/data/ld64/_metadata/replaces
@@ -0,0 +1 @@
+org.coolstar.ld64
diff --git a/data/ld64/_metadata/role b/data/ld64/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/ld64/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/ld64/_metadata/section b/data/ld64/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/ld64/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/ld64/_metadata/tags b/data/ld64/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/ld64/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/ld64/_metadata/version b/data/ld64/_metadata/version
new file mode 100644
index 000000000..a159459e8
--- /dev/null
+++ b/data/ld64/_metadata/version
@@ -0,0 +1 @@
+274.2
diff --git a/data/ld64/_metadata/xar.dep b/data/ld64/_metadata/xar.dep
new file mode 120000
index 000000000..7d8571a6b
--- /dev/null
+++ b/data/ld64/_metadata/xar.dep
@@ -0,0 +1 @@
+../../xar \ No newline at end of file
diff --git a/data/ld64/arch.diff b/data/ld64/arch.diff
new file mode 100644
index 000000000..e4cd7ab0f
--- /dev/null
+++ b/data/ld64/arch.diff
@@ -0,0 +1,13 @@
+Only in ld64-274.2+iPhone: InputFiles.o
+diff -ur ld64-274.2/src/ld/InputFiles.cpp ld64-274.2+iPhone/src/ld/InputFiles.cpp
+--- ld64-274.2/src/ld/InputFiles.cpp 2016-07-01 15:46:14.000000000 -1000
++++ ld64-274.2+iPhone/src/ld/InputFiles.cpp 2018-09-05 11:18:34.000000000 -1000
+@@ -881,6 +881,8 @@
+ opts.setArchitecture(CPU_TYPE_X86_64, CPU_SUBTYPE_X86_64_ALL, Options::kPlatformOSX);
+ #elif __arm__
+ opts.setArchitecture(CPU_TYPE_ARM, CPU_SUBTYPE_ARM_V6, Options::kPlatformOSX);
++#elif __arm64__
++ opts.setArchitecture(CPU_TYPE_ARM64, CPU_SUBTYPE_ARM_V8, Options::kPlatformOSX);
+ #else
+ #error unknown default architecture
+ #endif
diff --git a/data/ld64/got32.diff b/data/ld64/got32.diff
new file mode 100644
index 000000000..48f570329
--- /dev/null
+++ b/data/ld64/got32.diff
@@ -0,0 +1,12 @@
+diff -ur ld64-274.2/src/ld/ld.hpp ld64-274.2+iPhone/src/ld/ld.hpp
+--- ld64-274.2/src/ld/ld.hpp 2017-01-20 12:24:09.000000000 -1000
++++ ld64-274.2+iPhone/src/ld/ld.hpp 2018-09-05 12:14:17.000000000 -1000
+@@ -433,7 +433,7 @@
+ kindStoreARM64GOTLeaPage21, kindStoreARM64GOTLeaPageOff12,
+ kindStoreARM64TLVPLoadPage21, kindStoreARM64TLVPLoadPageOff12,
+ kindStoreARM64TLVPLoadNowLeaPage21, kindStoreARM64TLVPLoadNowLeaPageOff12,
+- kindStoreARM64PointerToGOT, kindStoreARM64PCRelToGOT,
++ kindStoreARM64PointerToGOT, kindStoreARM64PCRelToGOT, kindStoreARM64PointerToGOT32,
+ #endif
+ // dtrace probes
+ kindDtraceExtra,
diff --git a/data/ld64/ld64-274.2.tar.gz b/data/ld64/ld64-274.2.tar.gz
new file mode 100644
index 000000000..039b85144
--- /dev/null
+++ b/data/ld64/ld64-274.2.tar.gz
Binary files differ
diff --git a/data/ld64/make.sh b/data/ld64/make.sh
new file mode 100644
index 000000000..35f143104
--- /dev/null
+++ b/data/ld64/make.sh
@@ -0,0 +1,10 @@
+pkg:setup
+pkg:make
+pkg:install
+pkg: mv /usr/bin/ld64 /usr/bin/ld64_
+pkg: ln -s ld64 /usr/bin/ld
+pkg: "${PKG_TARG}-gcc" %/wrapper.c -o /usr/bin/ld64
+if [[ -f "${PKG_BASE}/arch/${PKG_ARCH}/${PKG_CFTARG}/entitlement.xml" ]]; then
+ pkg: mkdir -p /usr/share/ldid
+ cp "${PKG_BASE}/arch/${PKG_ARCH}/${PKG_CFTARG}/entitlement.xml" "${PKG_DEST}/usr/share/ldid/entitlements.xml"
+fi
diff --git a/data/ld64/makefile.diff b/data/ld64/makefile.diff
new file mode 100644
index 000000000..72994fe68
--- /dev/null
+++ b/data/ld64/makefile.diff
@@ -0,0 +1,59 @@
+diff -uNr ld64-274.2/Makefile ld64-274.2+iPhone/Makefile
+--- ld64-274.2/Makefile 1969-12-31 14:00:00.000000000 -1000
++++ ld64-274.2+iPhone/Makefile 2018-09-05 22:32:02.000000000 -1000
+@@ -0,0 +1,55 @@
++SUBDIRS = src
++OTHERS = $(patsubst src/other/%.cpp,%,$(filter-out src/other/PruneTrie.cpp src/other/objcimageinfo.cpp, $(wildcard src/other/*.cpp)))
++BINS = ld64 $(OTHERS)
++LIBS = libprunetrie.a
++DEPS = include/configure.h include/compile_stubs.h
++LD_SOURCES = $(wildcard src/ld/*.cpp src/ld/*.c src/ld/parsers/*.cpp src/ld/passes/*.cpp src/ld/passes/stubs/*.cpp)
++LD_OBJS = $(patsubst %.c,%.c.o,$(patsubst %.cpp,%.cpp.o,$(LD_SOURCES)))
++DERIVED_FILE_DIR = include
++
++.PHONY: all
++
++all: $(LIBS) $(BINS)
++
++include:
++ mkdir include
++
++include/configure.h: include
++ DERIVED_FILE_DIR="$(DERIVED_FILE_DIR)" IPHONEOS_DEPLOYMENT_TARGET="11.0" src/create_configure
++
++include/compile_stubs.h: include
++ echo "static const char *compile_stubs = " > $(DERIVED_FILE_DIR)/compile_stubs.h
++ cat compile_stubs | sed s/\"/\\\\\"/g | sed s/^/\"/ | sed s/\$$/\\\\n\"/ >> $(DERIVED_FILE_DIR)/compile_stubs.h
++ echo ";" >> $(DERIVED_FILE_DIR)/compile_stubs.h
++
++$(LD_OBJS): $(DEPS)
++
++%.cpp.o: %.cpp
++ $(CXX) -std=c++11 -o $@ -c $< -Isrc/abstraction -I$(DERIVED_FILE_DIR) -Isrc/ld/parsers -Isrc/ld -DVERSION=\"274.2\"
++
++%.c.o: %.c
++ $(CC) -o $@ -c $< -Isrc/abstraction -I$(DERIVED_FILE_DIR) -Isrc/ld/parsers -Isrc/ld -DVERSION=\"274.2\"
++
++ld64: $(LD_OBJS)
++ $(CXX) -o $@ $^ -ltapi -lLTO -lxar
++
++libld64.a: $(filter-out src/ld/ld.cpp.o, $(LD_OBJS))
++ ar -r libld64.a $^
++
++$(OTHERS): % : src/other/%.cpp libld64.a
++ $(CXX) -o $@ $^ -ltapi -lLTO -lxar -Isrc/abstraction -I$(DERIVED_FILE_DIR) -Isrc/ld/parsers -Isrc/ld
++
++libprunetrie.a: src/other/PruneTrie.cpp.o
++ ar -r libprunetrie.a $^
++
++install:
++ mkdir -p $(DESTDIR)/usr/{bin,lib,include/mach-o}
++ cp $(BINS) $(DESTDIR)/usr/bin/
++ cp $(LIBS) $(DESTDIR)/usr/lib/
++ cp src/other/prune_trie.h $(DESTDIR)/usr/include/mach-o/
++
++clean:
++ rm -f $(BINS) $(LIBS) $(LD_OBJS) libld64.a src/other/PruneTrie.cpp.o
++
++distclean: clean
++ rm -rf $(DERIVED_FILE_DIR)
diff --git a/data/ld64/searchpaths.diff b/data/ld64/searchpaths.diff
new file mode 100644
index 000000000..c3d9c541b
--- /dev/null
+++ b/data/ld64/searchpaths.diff
@@ -0,0 +1,39 @@
+diff -ur ld64-274.2/src/ld/Options.cpp ld64-274.2+iPhone/src/ld/Options.cpp
+--- ld64-274.2/src/ld/Options.cpp 2017-01-20 12:24:09.000000000 -1000
++++ ld64-274.2+iPhone/src/ld/Options.cpp 2018-09-17 13:33:42.000000000 -1000
+@@ -3992,9 +3992,16 @@
+ libraryPaths.push_back("/usr/lib");
+ libraryPaths.push_back("/usr/local/lib");
+
++ // <rdar://problem/5433882> remove /Network/Library/Frameworks from default search path
++ if ( fSDKPaths.size() == 0 ) {
++ libraryPaths.push_back("/usr/share/SDKs/iPhoneOS.sdk/usr/lib");
++ libraryPaths.push_back("/usr/share/SDKs/iPhoneOS.sdk/usr/local/lib");
++ frameworkPaths.push_back("/usr/share/SDKs/iPhoneOS.sdk/Library/Frameworks/");
++ frameworkPaths.push_back("/usr/share/SDKs/iPhoneOS.sdk/System/Library/Frameworks/");
++ }
++
+ frameworkPaths.push_back("/Library/Frameworks/");
+ frameworkPaths.push_back("/System/Library/Frameworks/");
+- // <rdar://problem/5433882> remove /Network/Library/Frameworks from default search path
+ }
+
+ // <rdar://problem/5829579> Support for configure based hacks
+@@ -4051,7 +4058,7 @@
+ else
+ fLibrarySearchPaths.push_back(libDir);
+ }
+- else if ( !addStandardLibraryDirectories || (strcmp(libDir, "/usr/local/lib") != 0) ) {
++ else if ( !addStandardLibraryDirectories || ( (strcmp(libDir, "/usr/local/lib") != 0) && (strncmp(libDir, "/usr/share/SDKs/iPhoneOS.sdk/", 29) != 0) ) ) {
+ warning("directory not found for option '-L%s'", libDir);
+ }
+ }
+@@ -4105,7 +4112,7 @@
+ else
+ fFrameworkSearchPaths.push_back(frameworkDir);
+ }
+- else if ( !addStandardLibraryDirectories || (strcmp(frameworkDir, "/Library/Frameworks/") != 0) ) {
++ else if ( !addStandardLibraryDirectories || ( (strcmp(frameworkDir, "/Library/Frameworks/") != 0) && (strncmp(frameworkDir, "/usr/share/SDKs/iPhoneOS.sdk/", 29) != 0) ) ) {
+ warning("directory not found for option '-F%s'", frameworkDir);
+ }
+ }
diff --git a/data/ld64/thinlto.diff b/data/ld64/thinlto.diff
new file mode 100644
index 000000000..0466146c2
--- /dev/null
+++ b/data/ld64/thinlto.diff
@@ -0,0 +1,34 @@
+diff -ur ld64-274.2/src/ld/parsers/lto_file.cpp ld64-274.2+iPhone/src/ld/parsers/lto_file.cpp
+--- ld64-274.2/src/ld/parsers/lto_file.cpp 2016-10-21 10:04:17.000000000 -1000
++++ ld64-274.2+iPhone/src/ld/parsers/lto_file.cpp 2018-09-05 11:48:40.000000000 -1000
+@@ -291,12 +291,14 @@
+ std::vector<const ld::Atom*>& newAtoms,
+ std::vector<const char*>& additionalUndefines);
+
++#if LTO_API_VERSION >= 18
+ static thinlto_code_gen_t init_thinlto_codegen(const std::vector<File*>& files,
+ const std::vector<const ld::Atom*>& allAtoms,
+ ld::Internal& state,
+ const OptimizeOptions& options,
+ CStringToAtom& deadllvmAtoms,
+ CStringToAtom& llvmAtoms);
++#endif
+
+ static std::vector<File*> _s_files;
+ static bool _s_llvmOptionsProcessed;
+@@ -1028,6 +1030,7 @@
+ return true;
+ }
+
++#if LTO_API_VERSION >= 18
+ // Create the ThinLTO codegenerator
+ thinlto_code_gen_t Parser::init_thinlto_codegen(const std::vector<File*>& files,
+ const std::vector<const ld::Atom*>& allAtoms,
+@@ -1178,6 +1181,7 @@
+
+ return thingenerator;
+ }
++#endif
+
+ // Full LTO processing
+ bool Parser::optimizeThinLTO(const std::vector<File*>& files,
diff --git a/data/ld64/typos.diff b/data/ld64/typos.diff
new file mode 100644
index 000000000..697745f1c
--- /dev/null
+++ b/data/ld64/typos.diff
@@ -0,0 +1,12 @@
+diff -ur ld64-274.2/src/ld/parsers/textstub_dylib_file.cpp ld64-274.2+iPhone/src/ld/parsers/textstub_dylib_file.cpp
+--- ld64-274.2/src/ld/parsers/textstub_dylib_file.cpp 2016-07-26 11:15:31.000000000 -1000
++++ ld64-274.2+iPhone/src/ld/parsers/textstub_dylib_file.cpp 2018-09-05 12:09:16.000000000 -1000
+@@ -29,7 +29,7 @@
+ #include <vector>
+
+ #include "Architectures.hpp"
+-#include "bitcode.hpp"
++#include "Bitcode.hpp"
+ #include "MachOFileAbstraction.hpp"
+ #include "MachOTrie.hpp"
+ #include "generic_dylib_file.hpp"
diff --git a/data/ld64/version.diff b/data/ld64/version.diff
new file mode 100644
index 000000000..017fe256c
--- /dev/null
+++ b/data/ld64/version.diff
@@ -0,0 +1,28 @@
+diff -ur ld64-274.2/src/ld/Options.cpp ld64-274.2+iPhone/src/ld/Options.cpp
+--- ld64-274.2/src/ld/Options.cpp 2017-01-20 12:24:09.000000000 -1000
++++ ld64-274.2+iPhone/src/ld/Options.cpp 2018-09-05 18:36:45.000000000 -1000
+@@ -45,6 +45,8 @@
+ #include "MachOFileAbstraction.hpp"
+ #include "Snapshot.h"
+
++const char *ldVersionString = "@(#)PROGRAM:ld PROJECT:ld64-" VERSION "\n";
++
+
+ // from FunctionNameDemangle.h
+ extern "C" size_t fnd_get_demangled_name(const char *mangledName, char *outputBuffer, size_t length);
+@@ -3946,7 +3948,6 @@
+ addStandardLibraryDirectories = false;
+ else if ( strcmp(argv[i], "-v") == 0 ) {
+ fVerbose = true;
+- extern const char ldVersionString[];
+ fprintf(stderr, "%s", ldVersionString);
+ fprintf(stderr, "configured to support archs: %s\n", ALL_SUPPORTED_ARCHS);
+ // if only -v specified, exit cleanly
+@@ -5864,7 +5865,6 @@
+ uint8_t version = depLinkerVersion;
+ if ( write(fDependencyFileDescriptor, &version, 1) == -1 )
+ throwf("write() to -dependency_info failed, errno=%d", errno);
+- extern const char ldVersionString[];
+ if ( write(fDependencyFileDescriptor, ldVersionString, strlen(ldVersionString)+1) == -1 )
+ throwf("write() to -dependency_info failed, errno=%d", errno);
+ }
diff --git a/data/ld64/wrapper.c b/data/ld64/wrapper.c
new file mode 100644
index 000000000..4e8dfd563
--- /dev/null
+++ b/data/ld64/wrapper.c
@@ -0,0 +1,64 @@
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#define LDID "/usr/bin/ldid"
+#define ENTS "/usr/share/entitlements/global.xml"
+
+int main (int argc, char **argv) {
+ int argcont;
+ char *output;
+ for (argcont = 0; argcont < argc - 1; argcont++) {
+ if (!strcmp(argv[argcont], "-o")) {
+ output = argv[argcont + 1];
+ }
+ }
+ if (access(output, F_OK) == 0 && remove(output) == -1) {
+ fprintf(stderr, "Unable to remove existing file: %s\n", strerror(errno));
+ exit(-1);
+ }
+ extern char** environ;
+ pid_t parent = getpid();
+ pid_t pid = fork();
+ int status;
+ if (pid > 0) {
+ waitpid(pid, &status, 0);
+ } else if (pid == 0) {
+ execve("/usr/bin/ld64_", argv, environ);
+ } else {
+ fprintf(stderr, "Unable to fork: %s\n", strerror(errno));
+ exit(-1);
+ }
+ if (WEXITSTATUS(status) == 0 && access(output, R_OK|W_OK) == 0) {
+ if (access(LDID, R_OK|X_OK) != 0) {
+ fprintf(stderr, "Unable to execute ldid: %s\n", strerror(errno));
+ return status;
+ }
+ char *entitlements = getenv("ENTITLEMENTS");
+ if (entitlements == (char*)-1 || entitlements == NULL) {
+ entitlements = ENTS;
+ }
+ if (access(entitlements, R_OK) != 0) {
+ fprintf(stderr, "Entitlements at \"%s\" are not accessible: %s\n", entitlements, strerror(errno));
+ return status;
+ }
+ parent = getpid();
+ pid = fork();
+ if (pid > 0) {
+ waitpid(pid, &status, 0);
+ } else if (pid == 0) {
+ char entstr[strlen(entitlements)+3];
+ entstr[0] = '-';
+ entstr[1] = 'S';
+ strcpy(entstr+2, entitlements);
+ execl(LDID, LDID, entstr, output, NULL);
+ } else {
+ fprintf(stderr, "Unable to fork: %s\n", strerror(errno));
+ }
+ } else {
+ fprintf(stderr, "Not signing file\n");
+ }
+ return WEXITSTATUS(status);
+}
diff --git a/data/gnupth/_metadata/maintainer b/data/ldid/_metadata/author
index 0fa66e077..0fa66e077 120000
--- a/data/gnupth/_metadata/maintainer
+++ b/data/ldid/_metadata/author
diff --git a/data/ldid/_metadata/description b/data/ldid/_metadata/description
new file mode 100644
index 000000000..05b2cc8b0
--- /dev/null
+++ b/data/ldid/_metadata/description
@@ -0,0 +1 @@
+pseudo-codesign Mach-O files
diff --git a/data/ldid/_metadata/in.1443.00 b/data/ldid/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ldid/_metadata/in.1443.00
diff --git a/data/ldid/_metadata/libplist.dep b/data/ldid/_metadata/libplist.dep
new file mode 120000
index 000000000..1ef48bb75
--- /dev/null
+++ b/data/ldid/_metadata/libplist.dep
@@ -0,0 +1 @@
+../../libplist \ No newline at end of file
diff --git a/data/ldid/_metadata/libssl1.0.dep b/data/ldid/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/ldid/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/ldid/_metadata/license b/data/ldid/_metadata/license
new file mode 120000
index 000000000..af4224931
--- /dev/null
+++ b/data/ldid/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-3 \ No newline at end of file
diff --git a/data/ldid/_metadata/maintainer b/data/ldid/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/ldid/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ldid/_metadata/name b/data/ldid/_metadata/name
new file mode 100644
index 000000000..90352d009
--- /dev/null
+++ b/data/ldid/_metadata/name
@@ -0,0 +1 @@
+Link Identity Editor
diff --git a/data/iacces.com/_metadata/priority b/data/ldid/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/iacces.com/_metadata/priority
+++ b/data/ldid/_metadata/priority
diff --git a/data/ldid/_metadata/section b/data/ldid/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/ldid/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/ldid/_metadata/tags b/data/ldid/_metadata/tags
new file mode 100644
index 000000000..91c01ad11
--- /dev/null
+++ b/data/ldid/_metadata/tags
@@ -0,0 +1 @@
+purpose::console, role::developer
diff --git a/data/ldid/_metadata/version b/data/ldid/_metadata/version
new file mode 100644
index 000000000..7a86eea98
--- /dev/null
+++ b/data/ldid/_metadata/version
@@ -0,0 +1 @@
+2:2.0.1
diff --git a/data/ldid/ldid-2.0.1.tar.lz b/data/ldid/ldid-2.0.1.tar.lz
new file mode 100644
index 000000000..de579fd4c
--- /dev/null
+++ b/data/ldid/ldid-2.0.1.tar.lz
Binary files differ
diff --git a/data/ldid/make.sh b/data/ldid/make.sh
new file mode 100644
index 000000000..cf76f6d64
--- /dev/null
+++ b/data/ldid/make.sh
@@ -0,0 +1,3 @@
+pkg:setup
+pkg:make CFLAGS=-O2 CXXFLAGS=-O2
+pkg:install
diff --git a/data/less/_metadata/in.1443.00 b/data/less/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/less/_metadata/in.1443.00
diff --git a/data/less/_metadata/maintainer b/data/less/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/less/_metadata/maintainer
+++ b/data/less/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/less/_metadata/version b/data/less/_metadata/version
index 29aae8eec..137b8338f 100644
--- a/data/less/_metadata/version
+++ b/data/less/_metadata/version
@@ -1 +1 @@
-418
+530
diff --git a/data/less/less-418.tar.gz b/data/less/less-418.tar.gz
deleted file mode 100644
index f7ba55cba..000000000
--- a/data/less/less-418.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/less/less-530.tar.gz b/data/less/less-530.tar.gz
new file mode 100644
index 000000000..7005089d3
--- /dev/null
+++ b/data/less/less-530.tar.gz
Binary files differ
diff --git a/data/libapt-pkg-dev/_metadata/description b/data/libapt-pkg-dev/_metadata/description
new file mode 100644
index 000000000..6a395c66f
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/description
@@ -0,0 +1 @@
+the advanced packaging library from Debian
diff --git a/data/libapt-pkg-dev/_metadata/in.1443.00 b/data/libapt-pkg-dev/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/in.1443.00
diff --git a/data/libapt-pkg-dev/_metadata/libapt-pkg5.0.dep b/data/libapt-pkg-dev/_metadata/libapt-pkg5.0.dep
new file mode 120000
index 000000000..616a9ad7f
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/libapt-pkg5.0.dep
@@ -0,0 +1 @@
+../../libapt-pkg5.0 \ No newline at end of file
diff --git a/data/libapt-pkg-dev/_metadata/license b/data/libapt-pkg-dev/_metadata/license
new file mode 120000
index 000000000..4f7d70f3f
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/license
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/license \ No newline at end of file
diff --git a/data/libapt-pkg-dev/_metadata/maintainer b/data/libapt-pkg-dev/_metadata/maintainer
new file mode 120000
index 000000000..52845be09
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/maintainer
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/maintainer \ No newline at end of file
diff --git a/data/libapt-pkg-dev/_metadata/name b/data/libapt-pkg-dev/_metadata/name
new file mode 100644
index 000000000..04633ad5b
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/name
@@ -0,0 +1 @@
+APT 1.4 Strict (libapt-pkg-dev)
diff --git a/data/iclarified.com/_metadata/priority b/data/libapt-pkg-dev/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/iclarified.com/_metadata/priority
+++ b/data/libapt-pkg-dev/_metadata/priority
diff --git a/data/libapt-pkg-dev/_metadata/provides b/data/libapt-pkg-dev/_metadata/provides
new file mode 100644
index 000000000..f4468b354
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/provides
@@ -0,0 +1 @@
+libapt-pkg (=1.4.8)
diff --git a/data/libapt-pkg-dev/_metadata/role b/data/libapt-pkg-dev/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libapt-pkg-dev/_metadata/section b/data/libapt-pkg-dev/_metadata/section
new file mode 100644
index 000000000..702b7b8d3
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/section
@@ -0,0 +1 @@
+Packaging
diff --git a/data/libapt-pkg-dev/_metadata/tags b/data/libapt-pkg-dev/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libapt-pkg-dev/_metadata/version b/data/libapt-pkg-dev/_metadata/version
new file mode 120000
index 000000000..06c5113b0
--- /dev/null
+++ b/data/libapt-pkg-dev/_metadata/version
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/version \ No newline at end of file
diff --git a/data/libapt-pkg-dev/make.sh b/data/libapt-pkg-dev/make.sh
new file mode 100644
index 000000000..1054bd93d
--- /dev/null
+++ b/data/libapt-pkg-dev/make.sh
@@ -0,0 +1,3 @@
+pkg: mkdir -p /usr/lib /usr/include
+cp -a "$(PKG_DEST_ _apt1.4)"/usr/lib/libapt-pkg.dylib "${PKG_DEST}"/usr/lib/
+cp -a "$(PKG_DEST_ _apt1.4)"/usr/include/apt-pkg "${PKG_DEST}"/usr/include
diff --git a/data/libapt-pkg-perl/_metadata/_apt1.4.dep b/data/libapt-pkg-perl/_metadata/_apt1.4.dep
new file mode 120000
index 000000000..902259693
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/_apt1.4.dep
@@ -0,0 +1 @@
+../../_apt1.4 \ No newline at end of file
diff --git a/data/libapt-pkg-perl/_metadata/description b/data/libapt-pkg-perl/_metadata/description
new file mode 100644
index 000000000..fa6d7daad
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/description
@@ -0,0 +1 @@
+Perl interface to libapt-pkg
diff --git a/data/libapt-pkg-perl/_metadata/in.1443.00 b/data/libapt-pkg-perl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/in.1443.00
diff --git a/data/libapt-pkg-perl/_metadata/in.550.58 b/data/libapt-pkg-perl/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/in.550.58
diff --git a/data/libapt-pkg-perl/_metadata/libapt-pkg5.0.dep b/data/libapt-pkg-perl/_metadata/libapt-pkg5.0.dep
new file mode 120000
index 000000000..616a9ad7f
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/libapt-pkg5.0.dep
@@ -0,0 +1 @@
+../../libapt-pkg5.0 \ No newline at end of file
diff --git a/data/libapt-pkg-perl/_metadata/license b/data/libapt-pkg-perl/_metadata/license
new file mode 100644
index 000000000..43cd72c3e
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/license
@@ -0,0 +1,248 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/data/libapt-pkg-perl/_metadata/maintainer b/data/libapt-pkg-perl/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libapt-pkg-perl/_metadata/perl.dep b/data/libapt-pkg-perl/_metadata/perl.dep
new file mode 120000
index 000000000..899dc46ed
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/perl.dep
@@ -0,0 +1 @@
+../../perl \ No newline at end of file
diff --git a/data/ifon1.no/_metadata/priority b/data/libapt-pkg-perl/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/ifon1.no/_metadata/priority
+++ b/data/libapt-pkg-perl/_metadata/priority
diff --git a/data/libapt-pkg-perl/_metadata/role b/data/libapt-pkg-perl/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/libapt-pkg-perl/_metadata/section b/data/libapt-pkg-perl/_metadata/section
new file mode 100644
index 000000000..ddc7f1fd8
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/section
@@ -0,0 +1 @@
+Scripting
diff --git a/data/libapt-pkg-perl/_metadata/tags b/data/libapt-pkg-perl/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/libapt-pkg-perl/_metadata/version b/data/libapt-pkg-perl/_metadata/version
new file mode 100644
index 000000000..9dd179330
--- /dev/null
+++ b/data/libapt-pkg-perl/_metadata/version
@@ -0,0 +1 @@
+0.1.34
diff --git a/data/libapt-pkg-perl/libapt-pkg-perl_0.1.34.tar.xz b/data/libapt-pkg-perl/libapt-pkg-perl_0.1.34.tar.xz
new file mode 100644
index 000000000..7a9b2da60
--- /dev/null
+++ b/data/libapt-pkg-perl/libapt-pkg-perl_0.1.34.tar.xz
Binary files differ
diff --git a/data/libapt-pkg-perl/make.sh b/data/libapt-pkg-perl/make.sh
new file mode 100644
index 000000000..76479bc1a
--- /dev/null
+++ b/data/libapt-pkg-perl/make.sh
@@ -0,0 +1,8 @@
+pkg:setup
+echo 'INCLUDE = .' > config.in
+echo 'LIB = .' >> config.in
+export PERL_SRC="$(PKG_DEST_ perl)"
+$(PKG_WORK_ perl)/perl-5*/miniperl_top Makefile.PL
+env
+pkg:make CC="${PKG_TARG}-g++" CCFLAGS="-std=c++11 -stdlib=libc++" LD="${PKG_TARG}-g++" LDDLFLAGS="-shared -std=c++11 -stdlib=libc++"
+make pure_vendor_install DESTDIR="${PKG_DEST}"
diff --git a/data/libapt-pkg5.0/_metadata/_apt1.4.dep b/data/libapt-pkg5.0/_metadata/_apt1.4.dep
new file mode 120000
index 000000000..902259693
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/_apt1.4.dep
@@ -0,0 +1 @@
+../../_apt1.4 \ No newline at end of file
diff --git a/data/libapt-pkg5.0/_metadata/bzip2.dep b/data/libapt-pkg5.0/_metadata/bzip2.dep
new file mode 120000
index 000000000..15aa44a77
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/bzip2.dep
@@ -0,0 +1 @@
+../../bzip2 \ No newline at end of file
diff --git a/data/libapt-pkg5.0/_metadata/conflicts b/data/libapt-pkg5.0/_metadata/conflicts
new file mode 100644
index 000000000..1bcaecfac
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/conflicts
@@ -0,0 +1 @@
+apt7-lib (<<1:0), com.mc.xz (<<5.2.4-7)
diff --git a/data/libapt-pkg5.0/_metadata/description b/data/libapt-pkg5.0/_metadata/description
new file mode 100644
index 000000000..6a395c66f
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/description
@@ -0,0 +1 @@
+the advanced packaging library from Debian
diff --git a/data/libapt-pkg5.0/_metadata/in.1443.00 b/data/libapt-pkg5.0/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/in.1443.00
diff --git a/data/libapt-pkg5.0/_metadata/in.550.58 b/data/libapt-pkg5.0/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/in.550.58
diff --git a/data/libapt-pkg5.0/_metadata/license b/data/libapt-pkg5.0/_metadata/license
new file mode 120000
index 000000000..4f7d70f3f
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/license
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/license \ No newline at end of file
diff --git a/data/libapt-pkg5.0/_metadata/lz4.dep b/data/libapt-pkg5.0/_metadata/lz4.dep
new file mode 120000
index 000000000..bccb2875c
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/lz4.dep
@@ -0,0 +1 @@
+../../lz4 \ No newline at end of file
diff --git a/data/libapt-pkg5.0/_metadata/lzma.dep b/data/libapt-pkg5.0/_metadata/lzma.dep
new file mode 120000
index 000000000..f84114cb9
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/lzma.dep
@@ -0,0 +1 @@
+../../lzma \ No newline at end of file
diff --git a/data/libapt-pkg5.0/_metadata/maintainer b/data/libapt-pkg5.0/_metadata/maintainer
new file mode 120000
index 000000000..52845be09
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/maintainer
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/maintainer \ No newline at end of file
diff --git a/data/libapt-pkg5.0/_metadata/name b/data/libapt-pkg5.0/_metadata/name
new file mode 100644
index 000000000..285a10452
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/name
@@ -0,0 +1 @@
+APT 1.4 Strict (libapt-pkg)
diff --git a/data/libapt-pkg5.0/_metadata/priority b/data/libapt-pkg5.0/_metadata/priority
new file mode 100644
index 000000000..fad9e164a
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/priority
@@ -0,0 +1 @@
+required
diff --git a/data/libapt-pkg5.0/_metadata/provides b/data/libapt-pkg5.0/_metadata/provides
new file mode 100644
index 000000000..f4468b354
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/provides
@@ -0,0 +1 @@
+libapt-pkg (=1.4.8)
diff --git a/data/libapt-pkg5.0/_metadata/role b/data/libapt-pkg5.0/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libapt-pkg5.0/_metadata/section b/data/libapt-pkg5.0/_metadata/section
new file mode 100644
index 000000000..702b7b8d3
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/section
@@ -0,0 +1 @@
+Packaging
diff --git a/data/libapt-pkg5.0/_metadata/tags b/data/libapt-pkg5.0/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libapt-pkg5.0/_metadata/version b/data/libapt-pkg5.0/_metadata/version
new file mode 120000
index 000000000..06c5113b0
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/version
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/version \ No newline at end of file
diff --git a/data/libapt-pkg5.0/_metadata/xz.dep b/data/libapt-pkg5.0/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/libapt-pkg5.0/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/libapt-pkg5.0/make.sh b/data/libapt-pkg5.0/make.sh
new file mode 100644
index 000000000..97f810f9b
--- /dev/null
+++ b/data/libapt-pkg5.0/make.sh
@@ -0,0 +1,2 @@
+pkg: mkdir -p /usr/lib
+cp -a "$(PKG_DEST_ _apt1.4)"/usr/lib/libapt-pkg.5.0* "${PKG_DEST}"/usr/lib/
diff --git a/data/libapt/_metadata/_apt1.4.dep b/data/libapt/_metadata/_apt1.4.dep
new file mode 120000
index 000000000..902259693
--- /dev/null
+++ b/data/libapt/_metadata/_apt1.4.dep
@@ -0,0 +1 @@
+../../_apt1.4 \ No newline at end of file
diff --git a/data/libapt/_metadata/breaks b/data/libapt/_metadata/breaks
new file mode 100644
index 000000000..425721f70
--- /dev/null
+++ b/data/libapt/_metadata/breaks
@@ -0,0 +1 @@
+cydia (<< 1.1.10), aptitude (<< 0.4.11.11-6), apt7-lib
diff --git a/data/libapt/_metadata/bzip2.dep b/data/libapt/_metadata/bzip2.dep
new file mode 120000
index 000000000..15aa44a77
--- /dev/null
+++ b/data/libapt/_metadata/bzip2.dep
@@ -0,0 +1 @@
+../../bzip2 \ No newline at end of file
diff --git a/data/libapt/_metadata/conflicts b/data/libapt/_metadata/conflicts
new file mode 100644
index 000000000..c3b5d6eb4
--- /dev/null
+++ b/data/libapt/_metadata/conflicts
@@ -0,0 +1 @@
+apt7-lib (<<1:0), apt7 (<<1:0), apt7-key (<<1:0), com.mc.xz
diff --git a/data/libapt/_metadata/depends b/data/libapt/_metadata/depends
new file mode 100644
index 000000000..8313cb552
--- /dev/null
+++ b/data/libapt/_metadata/depends
@@ -0,0 +1 @@
+libapt-pkg (>=%MYVERSION%)
diff --git a/data/libapt/_metadata/description b/data/libapt/_metadata/description
new file mode 100644
index 000000000..6a395c66f
--- /dev/null
+++ b/data/libapt/_metadata/description
@@ -0,0 +1 @@
+the advanced packaging library from Debian
diff --git a/data/libapt/_metadata/dpkg.dep b/data/libapt/_metadata/dpkg.dep
new file mode 120000
index 000000000..3e57eea03
--- /dev/null
+++ b/data/libapt/_metadata/dpkg.dep
@@ -0,0 +1 @@
+../../dpkg \ No newline at end of file
diff --git a/data/libapt/_metadata/dpkg.ver.iphoneos-arm b/data/libapt/_metadata/dpkg.ver.iphoneos-arm
new file mode 100644
index 000000000..930ccbe2c
--- /dev/null
+++ b/data/libapt/_metadata/dpkg.ver.iphoneos-arm
@@ -0,0 +1 @@
+1.14.25-9
diff --git a/data/libapt/_metadata/gnupg.dep b/data/libapt/_metadata/gnupg.dep
new file mode 120000
index 000000000..277e892bf
--- /dev/null
+++ b/data/libapt/_metadata/gnupg.dep
@@ -0,0 +1 @@
+../../gnupg \ No newline at end of file
diff --git a/data/libapt/_metadata/gzip.dep b/data/libapt/_metadata/gzip.dep
new file mode 120000
index 000000000..c6c801e81
--- /dev/null
+++ b/data/libapt/_metadata/gzip.dep
@@ -0,0 +1 @@
+../../gzip \ No newline at end of file
diff --git a/data/libapt/_metadata/in.1443.00 b/data/libapt/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libapt/_metadata/in.1443.00
diff --git a/data/libapt/_metadata/license b/data/libapt/_metadata/license
new file mode 120000
index 000000000..4f7d70f3f
--- /dev/null
+++ b/data/libapt/_metadata/license
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/license \ No newline at end of file
diff --git a/data/libapt/_metadata/lz4.dep b/data/libapt/_metadata/lz4.dep
new file mode 120000
index 000000000..bccb2875c
--- /dev/null
+++ b/data/libapt/_metadata/lz4.dep
@@ -0,0 +1 @@
+../../lz4 \ No newline at end of file
diff --git a/data/libapt/_metadata/lzma.dep b/data/libapt/_metadata/lzma.dep
new file mode 120000
index 000000000..f84114cb9
--- /dev/null
+++ b/data/libapt/_metadata/lzma.dep
@@ -0,0 +1 @@
+../../lzma \ No newline at end of file
diff --git a/data/libapt/_metadata/maintainer b/data/libapt/_metadata/maintainer
new file mode 120000
index 000000000..52845be09
--- /dev/null
+++ b/data/libapt/_metadata/maintainer
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/maintainer \ No newline at end of file
diff --git a/data/libapt/_metadata/name b/data/libapt/_metadata/name
new file mode 100644
index 000000000..4e97daa51
--- /dev/null
+++ b/data/libapt/_metadata/name
@@ -0,0 +1 @@
+APT Strict (lib)
diff --git a/data/libapt/_metadata/priority b/data/libapt/_metadata/priority
new file mode 100644
index 000000000..d0b3ce728
--- /dev/null
+++ b/data/libapt/_metadata/priority
@@ -0,0 +1 @@
++required
diff --git a/data/libapt/_metadata/role b/data/libapt/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libapt/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libapt/_metadata/section b/data/libapt/_metadata/section
new file mode 100644
index 000000000..702b7b8d3
--- /dev/null
+++ b/data/libapt/_metadata/section
@@ -0,0 +1 @@
+Packaging
diff --git a/data/libapt/_metadata/tags b/data/libapt/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libapt/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libapt/_metadata/version b/data/libapt/_metadata/version
new file mode 120000
index 000000000..06c5113b0
--- /dev/null
+++ b/data/libapt/_metadata/version
@@ -0,0 +1 @@
+../../_apt1.4/_metadata/version \ No newline at end of file
diff --git a/data/libapt/_metadata/xz.dep b/data/libapt/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/libapt/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/libapt/libapt b/data/libapt/libapt
new file mode 120000
index 000000000..280bf477b
--- /dev/null
+++ b/data/libapt/libapt
@@ -0,0 +1 @@
+../../libapt \ No newline at end of file
diff --git a/data/libapt/make.sh b/data/libapt/make.sh
new file mode 100644
index 000000000..c9b62a8ea
--- /dev/null
+++ b/data/libapt/make.sh
@@ -0,0 +1,10 @@
+cp -a "$(PKG_DEST_ _apt1.4)"/etc "${PKG_DEST}"
+cp -a "$(PKG_DEST_ _apt1.4)"/var "${PKG_DEST}"
+
+pkg: mkdir -p /usr
+cp -a "$(PKG_DEST_ _apt1.4)"/usr/lib "${PKG_DEST}"/usr
+cp -a "$(PKG_DEST_ _apt1.4)"/usr/libexec "${PKG_DEST}"/usr
+rm -f "${PKG_DEST}"/usr/lib/libapt-pkg.*
+pkg: ln -s ../libexec/apt /usr/lib/apt
+pkg: rm -f /usr/libexec/apt/methods/https
+pkg: ln -s http /usr/libexec/apt/methods/https
diff --git a/data/libarchive/_metadata/in.1443.00 b/data/libarchive/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libarchive/_metadata/in.1443.00
diff --git a/data/libarchive/_metadata/lz4.dep b/data/libarchive/_metadata/lz4.dep
new file mode 120000
index 000000000..bccb2875c
--- /dev/null
+++ b/data/libarchive/_metadata/lz4.dep
@@ -0,0 +1 @@
+../../lz4 \ No newline at end of file
diff --git a/data/libarchive/_metadata/lzma.dep b/data/libarchive/_metadata/lzma.dep
new file mode 120000
index 000000000..f84114cb9
--- /dev/null
+++ b/data/libarchive/_metadata/lzma.dep
@@ -0,0 +1 @@
+../../lzma \ No newline at end of file
diff --git a/data/libarchive/_metadata/maintainer b/data/libarchive/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libarchive/_metadata/maintainer
+++ b/data/libarchive/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libarchive/_metadata/version b/data/libarchive/_metadata/version
index 11e321269..477254331 100644
--- a/data/libarchive/_metadata/version
+++ b/data/libarchive/_metadata/version
@@ -1 +1 @@
-2.4.11
+3.3.2
diff --git a/data/libarchive/libarchive-2.4.11.tar.gz b/data/libarchive/libarchive-2.4.11.tar.gz
deleted file mode 100644
index 73e9fc7fc..000000000
--- a/data/libarchive/libarchive-2.4.11.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/libarchive/libarchive-3.3.2.tar.gz b/data/libarchive/libarchive-3.3.2.tar.gz
new file mode 100644
index 000000000..beb1d2132
--- /dev/null
+++ b/data/libarchive/libarchive-3.3.2.tar.gz
Binary files differ
diff --git a/data/libarchive/make.sh b/data/libarchive/make.sh
index 452a4bfd5..fbc999151 100644
--- a/data/libarchive/make.sh
+++ b/data/libarchive/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/libarmfp/_metadata/in.1443.00 b/data/libarmfp/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libarmfp/_metadata/in.1443.00
diff --git a/data/libarmfp/_metadata/maintainer b/data/libarmfp/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libarmfp/_metadata/maintainer
+++ b/data/libarmfp/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libassuan/_metadata/gnupth.dep b/data/libassuan/_metadata/gnupth.dep
deleted file mode 120000
index cc4ec2bde..000000000
--- a/data/libassuan/_metadata/gnupth.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../gnupth \ No newline at end of file
diff --git a/data/libassuan/_metadata/in.1443.00 b/data/libassuan/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libassuan/_metadata/in.1443.00
diff --git a/data/libassuan/_metadata/libgpg-error.dep b/data/libassuan/_metadata/libgpg-error.dep
new file mode 120000
index 000000000..b2a102581
--- /dev/null
+++ b/data/libassuan/_metadata/libgpg-error.dep
@@ -0,0 +1 @@
+../../libgpg-error \ No newline at end of file
diff --git a/data/libassuan/_metadata/maintainer b/data/libassuan/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libassuan/_metadata/maintainer
+++ b/data/libassuan/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libassuan/_metadata/npth.dep b/data/libassuan/_metadata/npth.dep
new file mode 120000
index 000000000..ba035bc31
--- /dev/null
+++ b/data/libassuan/_metadata/npth.dep
@@ -0,0 +1 @@
+../../npth \ No newline at end of file
diff --git a/data/libassuan/_metadata/version b/data/libassuan/_metadata/version
index 6d7de6e6a..73462a5a1 100644
--- a/data/libassuan/_metadata/version
+++ b/data/libassuan/_metadata/version
@@ -1 +1 @@
-1.0.2
+2.5.1
diff --git a/data/libassuan/libassuan-1.0.4.tar.bz2 b/data/libassuan/libassuan-1.0.4.tar.bz2
deleted file mode 100644
index d4cf2b2e7..000000000
--- a/data/libassuan/libassuan-1.0.4.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/libassuan/libassuan-2.5.1.tar.bz2 b/data/libassuan/libassuan-2.5.1.tar.bz2
new file mode 100644
index 000000000..98c51dfc4
--- /dev/null
+++ b/data/libassuan/libassuan-2.5.1.tar.bz2
Binary files differ
diff --git a/data/libassuan/make.sh b/data/libassuan/make.sh
index d1f03a780..0d98fe79d 100644
--- a/data/libassuan/make.sh
+++ b/data/libassuan/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-autoconf
-pkg:configure --with-pth-prefix="$(PKG_DEST_ gnupth)/usr"
+autoreconf -fi
+pkg:configure --with-pth-prefix="$(PKG_DEST_ npth)/usr" --with-gpg-error-prefix="$(PKG_DEST_ libgpg-error)/usr"
make
pkg:install
diff --git a/data/libcompress-raw-lzma-perl/Compress-Raw-Lzma-2.082.tar.gz b/data/libcompress-raw-lzma-perl/Compress-Raw-Lzma-2.082.tar.gz
new file mode 100644
index 000000000..d5f32b31d
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/Compress-Raw-Lzma-2.082.tar.gz
Binary files differ
diff --git a/data/libcompress-raw-lzma-perl/_metadata/description b/data/libcompress-raw-lzma-perl/_metadata/description
new file mode 100644
index 000000000..2863fab2d
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/description
@@ -0,0 +1 @@
+Compress::Raw::Lzma provides a low-level Perl interface for reading and writing of lzma and xz files/buffers.
diff --git a/data/libcompress-raw-lzma-perl/_metadata/in.1443.00 b/data/libcompress-raw-lzma-perl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/in.1443.00
diff --git a/data/libcompress-raw-lzma-perl/_metadata/in.550.58 b/data/libcompress-raw-lzma-perl/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/in.550.58
diff --git a/data/libcompress-raw-lzma-perl/_metadata/license b/data/libcompress-raw-lzma-perl/_metadata/license
new file mode 100644
index 000000000..43cd72c3e
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/license
@@ -0,0 +1,248 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/data/libcompress-raw-lzma-perl/_metadata/maintainer b/data/libcompress-raw-lzma-perl/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libcompress-raw-lzma-perl/_metadata/perl.dep b/data/libcompress-raw-lzma-perl/_metadata/perl.dep
new file mode 120000
index 000000000..899dc46ed
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/perl.dep
@@ -0,0 +1 @@
+../../perl \ No newline at end of file
diff --git a/data/ifoneguide.nl/_metadata/priority b/data/libcompress-raw-lzma-perl/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/ifoneguide.nl/_metadata/priority
+++ b/data/libcompress-raw-lzma-perl/_metadata/priority
diff --git a/data/libcompress-raw-lzma-perl/_metadata/role b/data/libcompress-raw-lzma-perl/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/libcompress-raw-lzma-perl/_metadata/section b/data/libcompress-raw-lzma-perl/_metadata/section
new file mode 100644
index 000000000..ddc7f1fd8
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/section
@@ -0,0 +1 @@
+Scripting
diff --git a/data/libcompress-raw-lzma-perl/_metadata/tags b/data/libcompress-raw-lzma-perl/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/libcompress-raw-lzma-perl/_metadata/version b/data/libcompress-raw-lzma-perl/_metadata/version
new file mode 100644
index 000000000..23a76fcbb
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/version
@@ -0,0 +1 @@
+2.082
diff --git a/data/libcompress-raw-lzma-perl/_metadata/xz.dep b/data/libcompress-raw-lzma-perl/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/libcompress-raw-lzma-perl/make.sh b/data/libcompress-raw-lzma-perl/make.sh
new file mode 100644
index 000000000..0572d5f18
--- /dev/null
+++ b/data/libcompress-raw-lzma-perl/make.sh
@@ -0,0 +1,7 @@
+pkg:setup
+echo 'INCLUDE = .' > config.in
+echo 'LIB = .' >> config.in
+export PERL_SRC="$(PKG_DEST_ perl)"
+$(PKG_WORK_ perl)/perl-5*/miniperl_top Makefile.PL
+pkg:make
+make pure_vendor_install DESTDIR="${PKG_DEST}"
diff --git a/data/libdict/_metadata/in.1443.00 b/data/libdict/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libdict/_metadata/in.1443.00
diff --git a/data/libdict/_metadata/maintainer b/data/libdict/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libdict/_metadata/maintainer
+++ b/data/libdict/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libevent/_metadata/description b/data/libevent/_metadata/description
new file mode 100644
index 000000000..6e3d49940
--- /dev/null
+++ b/data/libevent/_metadata/description
@@ -0,0 +1 @@
+provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached
diff --git a/data/libevent/_metadata/homepage b/data/libevent/_metadata/homepage
new file mode 100644
index 000000000..c2b656b28
--- /dev/null
+++ b/data/libevent/_metadata/homepage
@@ -0,0 +1 @@
+http://libevent.org/
diff --git a/data/libevent/_metadata/in.1443.00 b/data/libevent/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libevent/_metadata/in.1443.00
diff --git a/data/libevent/_metadata/in.550.58 b/data/libevent/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libevent/_metadata/in.550.58
diff --git a/data/libevent/_metadata/libssl1.0.dep b/data/libevent/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/libevent/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/libevent/_metadata/license b/data/libevent/_metadata/license
new file mode 120000
index 000000000..8a4bc1936
--- /dev/null
+++ b/data/libevent/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/modified-bsd \ No newline at end of file
diff --git a/data/libevent/_metadata/maintainer b/data/libevent/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libevent/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ifonetec.com/_metadata/priority b/data/libevent/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/ifonetec.com/_metadata/priority
+++ b/data/libevent/_metadata/priority
diff --git a/data/libevent/_metadata/role b/data/libevent/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libevent/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libevent/_metadata/section b/data/libevent/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libevent/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libevent/_metadata/tags b/data/libevent/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libevent/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libevent/_metadata/version b/data/libevent/_metadata/version
new file mode 100644
index 000000000..ebf14b469
--- /dev/null
+++ b/data/libevent/_metadata/version
@@ -0,0 +1 @@
+2.1.8
diff --git a/data/libevent/libevent-2.1.8-stable.tar.gz b/data/libevent/libevent-2.1.8-stable.tar.gz
new file mode 100644
index 000000000..2004f8415
--- /dev/null
+++ b/data/libevent/libevent-2.1.8-stable.tar.gz
Binary files differ
diff --git a/data/libevent/make.sh b/data/libevent/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/libevent/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/libfdk-aac/_metadata/description b/data/libfdk-aac/_metadata/description
new file mode 100644
index 000000000..507c31c9b
--- /dev/null
+++ b/data/libfdk-aac/_metadata/description
@@ -0,0 +1 @@
+ standalone library of the Fraunhofer FDK AAC code from Android
diff --git a/data/libfdk-aac/_metadata/in.1443.00 b/data/libfdk-aac/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libfdk-aac/_metadata/in.1443.00
diff --git a/data/libfdk-aac/_metadata/maintainer b/data/libfdk-aac/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libfdk-aac/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libfdk-aac/_metadata/name b/data/libfdk-aac/_metadata/name
new file mode 100644
index 000000000..71809bc54
--- /dev/null
+++ b/data/libfdk-aac/_metadata/name
@@ -0,0 +1 @@
+FDK-AAC
diff --git a/data/iphone-notes.de/_metadata/priority b/data/libfdk-aac/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/iphone-notes.de/_metadata/priority
+++ b/data/libfdk-aac/_metadata/priority
diff --git a/data/libfdk-aac/_metadata/role b/data/libfdk-aac/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libfdk-aac/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libfdk-aac/_metadata/section b/data/libfdk-aac/_metadata/section
new file mode 100644
index 000000000..593877746
--- /dev/null
+++ b/data/libfdk-aac/_metadata/section
@@ -0,0 +1 @@
+Multimedia
diff --git a/data/libfdk-aac/_metadata/tags b/data/libfdk-aac/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libfdk-aac/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libfdk-aac/_metadata/version b/data/libfdk-aac/_metadata/version
new file mode 100644
index 000000000..c946ee616
--- /dev/null
+++ b/data/libfdk-aac/_metadata/version
@@ -0,0 +1 @@
+0.1.6
diff --git a/data/libfdk-aac/make.sh b/data/libfdk-aac/make.sh
new file mode 100644
index 000000000..66a4b2105
--- /dev/null
+++ b/data/libfdk-aac/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+./autogen.sh
+pkg:configure
+make
+pkg:install
diff --git a/data/libfdk-aac/v0.1.6.tar.gz b/data/libfdk-aac/v0.1.6.tar.gz
new file mode 100644
index 000000000..940a888ab
--- /dev/null
+++ b/data/libfdk-aac/v0.1.6.tar.gz
Binary files differ
diff --git a/data/libffi/_metadata/in.1443.00 b/data/libffi/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libffi/_metadata/in.1443.00
diff --git a/data/libffi/_metadata/maintainer b/data/libffi/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libffi/_metadata/maintainer
+++ b/data/libffi/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libffi/_metadata/version b/data/libffi/_metadata/version
index 4c45776d3..08ebb261e 100644
--- a/data/libffi/_metadata/version
+++ b/data/libffi/_metadata/version
@@ -1 +1 @@
-1:3.0.10
+1:3.2.1
diff --git a/data/libffi/assembler.diff b/data/libffi/assembler.diff
index 415a85d56..344d7efc6 100644
--- a/data/libffi/assembler.diff
+++ b/data/libffi/assembler.diff
@@ -1,17 +1,17 @@
-diff -ru libffi-3.0.10/src/arm/sysv.S libffi-3.0.10+iPhone/src/arm/sysv.S
---- libffi-3.0.10/src/arm/sysv.S 2011-08-23 14:27:24.000000000 +0000
-+++ libffi-3.0.10+iPhone/src/arm/sysv.S 2012-03-18 22:32:12.000000000 +0000
-@@ -335,7 +335,9 @@
-
- /* Below are VFP hard-float ABI call and closure implementations.
- Add VFP FPU directive here. */
+diff -ur libffi-3.2.1/src/arm/sysv.S libffi-3.2.1+iPhone/src/arm/sysv.S
+--- libffi-3.2.1/src/arm/sysv.S 2014-11-08 02:47:24.000000000 -1000
++++ libffi-3.2.1+iPhone/src/arm/sysv.S 2019-03-30 22:41:22.000000000 -1000
+@@ -322,7 +322,9 @@
+ Add VFP FPU directive here. This is only compiled into the library
+ under EABI. */
+ #ifdef __ARM_EABI__
+#ifndef __APPLE__
.fpu vfp
+#endif
@ r0: fn
@ r1: &ecif
-@@ -428,7 +430,9 @@
+@@ -416,7 +418,9 @@
.ffi_call_VFP_end:
UNWIND .fnend
@@ -20,14 +20,15 @@ diff -ru libffi-3.0.10/src/arm/sysv.S libffi-3.0.10+iPhone/src/arm/sysv.S
+#endif
- ARM_FUNC_START ffi_closure_VFP
-@@ -490,7 +494,9 @@
+ ARM_FUNC_START(ffi_closure_VFP)
+@@ -478,8 +482,10 @@
.ffi_closure_VFP_end:
UNWIND .fnend
+#ifdef __ELF__
.size CNAME(ffi_closure_VFP),.ffi_closure_VFP_end-CNAME(ffi_closure_VFP)
+ #endif
+#endif
- #if defined __ELF__ && defined __linux__
- .section .note.GNU-stack,"",%progbits
+ ENTRY(ffi_arm_trampoline)
+ stmfd sp!, {r0-r3}
diff --git a/data/libffi/cname.diff b/data/libffi/cname.diff
deleted file mode 100644
index bfa2419b5..000000000
--- a/data/libffi/cname.diff
+++ /dev/null
@@ -1,30 +0,0 @@
-diff -ru libffi-3.0.10/src/arm/sysv.S libffi-3.0.10+iPhone/src/arm/sysv.S
---- libffi-3.0.10/src/arm/sysv.S 2011-08-23 14:27:24.000000000 +0000
-+++ libffi-3.0.10+iPhone/src/arm/sysv.S 2012-03-18 23:31:44.000000000 +0000
-@@ -187,7 +187,7 @@
- @ r1 already set
-
- @ Call ffi_prep_args(stack, &ecif)
-- bl ffi_prep_args
-+ bl CNAME(ffi_prep_args)
-
- @ move first 4 parameters in registers
- ldmia sp, {r0-r3}
-@@ -362,7 +362,7 @@
- sub r2, fp, #64 @ VFP scratch space
-
- @ Call ffi_prep_args(stack, &ecif, vfp_space)
-- bl ffi_prep_args
-+ bl CNAME(ffi_prep_args)
-
- @ Load VFP register args if needed
- cmp r0, #0
-@@ -444,7 +444,7 @@
- sub sp, sp, #72
- str sp, [sp, #64]
- add r1, sp, #64
-- bl ffi_closure_SYSV_inner
-+ bl CNAME(ffi_closure_SYSV_inner)
-
- cmp r0, #FFI_TYPE_INT
- beq .Lretint_vfp
diff --git a/data/libffi/debug.diff b/data/libffi/debug.diff
deleted file mode 100644
index bf33daa01..000000000
--- a/data/libffi/debug.diff
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -ru libffi-3.0.10/Makefile.am libffi-3.0.10+iPhone/Makefile.am
---- libffi-3.0.10/Makefile.am 2011-08-23 14:28:04.000000000 +0000
-+++ libffi-3.0.10+iPhone/Makefile.am 2012-03-19 00:29:07.000000000 +0000
-@@ -178,7 +178,7 @@
- libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
- nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
-
--AM_CFLAGS = -g
-+AM_CFLAGS =
- if FFI_DEBUG
- # Build debug. Define FFI_DEBUG on the commandline so that, when building with
- # MSVC, it can link against the debug CRT.
-diff -ru libffi-3.0.10/Makefile.in libffi-3.0.10+iPhone/Makefile.in
---- libffi-3.0.10/Makefile.in 2011-08-23 14:28:35.000000000 +0000
-+++ libffi-3.0.10+iPhone/Makefile.in 2012-03-19 00:29:18.000000000 +0000
-@@ -501,7 +501,7 @@
- $(am__append_24) $(am__append_25) $(am__append_26)
- libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
- nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
--AM_CFLAGS = -g $(am__append_27)
-+AM_CFLAGS = $(am__append_27)
- libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS)
- AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
- AM_CCASFLAGS = $(AM_CPPFLAGS)
diff --git a/data/libffi/includes.diff b/data/libffi/includes.diff
new file mode 100644
index 000000000..4a3f999b7
--- /dev/null
+++ b/data/libffi/includes.diff
@@ -0,0 +1,22 @@
+diff -ur libffi-3.2.1/include/Makefile.am libffi-3.2.1+Sane/include/Makefile.am
+--- libffi-3.2.1/include/Makefile.am 2014-11-08 02:47:24.000000000 -1000
++++ libffi-3.2.1+Sane/include/Makefile.am 2018-08-14 10:09:46.000000000 -1000
+@@ -5,5 +5,4 @@
+ DISTCLEANFILES=ffitarget.h
+ EXTRA_DIST=ffi.h.in ffi_common.h
+
+-includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
+-nodist_includes_HEADERS = ffi.h ffitarget.h
++nodist_include_HEADERS = ffi.h ffitarget.h
+diff -ur libffi-3.2.1/libffi.pc.in libffi-3.2.1+Sane/libffi.pc.in
+--- libffi-3.2.1/libffi.pc.in 2014-11-08 02:47:24.000000000 -1000
++++ libffi-3.2.1+Sane/libffi.pc.in 2018-08-14 10:10:11.000000000 -1000
+@@ -2,7 +2,7 @@
+ exec_prefix=@exec_prefix@
+ libdir=@libdir@
+ toolexeclibdir=@toolexeclibdir@
+-includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
++includedir=@includedir@
+
+ Name: @PACKAGE_NAME@
+ Description: Library supporting Foreign Function Interfaces
diff --git a/data/libffi/incompetant.diff b/data/libffi/incompetant.diff
index 3245f3077..9f33cc57d 100644
--- a/data/libffi/incompetant.diff
+++ b/data/libffi/incompetant.diff
@@ -1,68 +1,7 @@
-diff -ru libffi-3.0.10/include/ffi.h.in libffi-3.0.10+iPhone/include/ffi.h.in
---- libffi-3.0.10/include/ffi.h.in 2011-08-23 14:28:00.000000000 +0000
-+++ libffi-3.0.10+iPhone/include/ffi.h.in 2012-03-18 23:19:19.000000000 +0000
-@@ -274,7 +274,16 @@
- __declspec(align(8))
- #endif
- typedef struct {
-+union {
-+#if @FFI_EXEC_TRAMPOLINE_TABLE@
-+ struct {
-+ void *trampoline_table;
-+ void *trampoline_table_entry;
-+ };
-+#endif
- char tramp[FFI_TRAMPOLINE_SIZE];
-+};
-+
- ffi_cif *cif;
- void (*fun)(ffi_cif*,void*,void**,void*);
- void *user_data;
-@@ -307,7 +316,15 @@
- # pragma pack 8
- #endif
- typedef struct {
-+union {
-+#if @FFI_EXEC_TRAMPOLINE_TABLE@
-+ struct {
-+ void *trampoline_table;
-+ void *trampoline_table_entry;
-+ };
-+#endif
- char tramp[FFI_TRAMPOLINE_SIZE];
-+};
-
- ffi_cif *cif;
-
-@@ -328,7 +345,15 @@
- } ffi_raw_closure;
-
- typedef struct {
-+union {
-+#if @FFI_EXEC_TRAMPOLINE_TABLE@
-+ struct {
-+ void *trampoline_table;
-+ void *trampoline_table_entry;
-+ };
-+#endif
- char tramp[FFI_TRAMPOLINE_SIZE];
-+};
-
- ffi_cif *cif;
-
-diff -ru libffi-3.0.10/libtool-version libffi-3.0.10+iPhone/libtool-version
---- libffi-3.0.10/libtool-version 2011-08-22 18:38:12.000000000 +0000
-+++ libffi-3.0.10+iPhone/libtool-version 2012-03-18 23:08:29.000000000 +0000
-@@ -26,4 +26,4 @@
- # release, then set age to 0.
- #
- # CURRENT:REVISION:AGE
--5:10:0
-+4:1:0
-diff -ru libffi-3.0.10/src/arm/ffi.c libffi-3.0.10+iPhone/src/arm/ffi.c
---- libffi-3.0.10/src/arm/ffi.c 2011-08-23 14:28:04.000000000 +0000
-+++ libffi-3.0.10+iPhone/src/arm/ffi.c 2012-03-18 23:15:50.000000000 +0000
-@@ -552,7 +552,7 @@
+diff -ur libffi-3.2.1/src/arm/ffi.c libffi-3.2.1+iPhone/src/arm/ffi.c
+--- libffi-3.2.1/src/arm/ffi.c 2014-11-08 02:47:24.000000000 -1000
++++ libffi-3.2.1+iPhone/src/arm/ffi.c 2019-03-30 22:46:09.000000000 -1000
+@@ -749,7 +749,7 @@
free (closure);
}
@@ -71,7 +10,7 @@ diff -ru libffi-3.0.10/src/arm/ffi.c libffi-3.0.10+iPhone/src/arm/ffi.c
#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \
({ unsigned char *__tramp = (unsigned char*)(TRAMP); \
-@@ -570,8 +570,6 @@
+@@ -765,8 +765,6 @@
mapping. */ \
})
@@ -80,9 +19,9 @@ diff -ru libffi-3.0.10/src/arm/ffi.c libffi-3.0.10+iPhone/src/arm/ffi.c
/* the cif must already be prep'ed */
ffi_status
-@@ -591,13 +589,19 @@
+@@ -788,13 +786,19 @@
return FFI_BAD_ABI;
-
+
#if FFI_EXEC_TRAMPOLINE_TABLE
+if (closure != codeloc) {
void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc);
diff --git a/data/libffi/libffi-3.0.10.tar.gz b/data/libffi/libffi-3.0.10.tar.gz
deleted file mode 100644
index 3c44c6609..000000000
--- a/data/libffi/libffi-3.0.10.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/libffi/libffi-3.2.1.tar.gz b/data/libffi/libffi-3.2.1.tar.gz
new file mode 100644
index 000000000..5c21bb012
--- /dev/null
+++ b/data/libffi/libffi-3.2.1.tar.gz
Binary files differ
diff --git a/data/libffi/make.sh b/data/libffi/make.sh
index 39dd00bfc..06a51d34b 100644
--- a/data/libffi/make.sh
+++ b/data/libffi/make.sh
@@ -1,6 +1,6 @@
pkg:setup
+autoreconf -f -i
pkg:configure
pkg:make
pkg:install
-mv "${PKG_DEST}"/usr/lib/libffi-*/include "${PKG_DEST}"/usr
-rmdir "${PKG_DEST}"/usr/lib/libffi-*
+pkg: rm -rvf /usr/share
diff --git a/data/libfftw3/_metadata/description b/data/libfftw3/_metadata/description
new file mode 100644
index 000000000..247b1007b
--- /dev/null
+++ b/data/libfftw3/_metadata/description
@@ -0,0 +1 @@
+a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions,
diff --git a/data/libfftw3/_metadata/in.1443.00 b/data/libfftw3/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libfftw3/_metadata/in.1443.00
diff --git a/data/libfftw3/_metadata/license b/data/libfftw3/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/libfftw3/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/libfftw3/_metadata/maintainer b/data/libfftw3/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libfftw3/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iphoneislam.com/_metadata/priority b/data/libfftw3/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/iphoneislam.com/_metadata/priority
+++ b/data/libfftw3/_metadata/priority
diff --git a/data/libfftw3/_metadata/role b/data/libfftw3/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libfftw3/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libfftw3/_metadata/section b/data/libfftw3/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libfftw3/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libfftw3/_metadata/tags b/data/libfftw3/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libfftw3/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libfftw3/_metadata/version b/data/libfftw3/_metadata/version
new file mode 100644
index 000000000..37d02a6e3
--- /dev/null
+++ b/data/libfftw3/_metadata/version
@@ -0,0 +1 @@
+3.3.8
diff --git a/data/libfftw3/fftw-3.3.8.tar.gz b/data/libfftw3/fftw-3.3.8.tar.gz
new file mode 100644
index 000000000..21eb2b3ca
--- /dev/null
+++ b/data/libfftw3/fftw-3.3.8.tar.gz
Binary files differ
diff --git a/data/libfftw3/make.sh b/data/libfftw3/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/libfftw3/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/libfragmentzip/_metadata/curl.dep b/data/libfragmentzip/_metadata/curl.dep
new file mode 120000
index 000000000..9c4438112
--- /dev/null
+++ b/data/libfragmentzip/_metadata/curl.dep
@@ -0,0 +1 @@
+../../curl \ No newline at end of file
diff --git a/data/libfragmentzip/_metadata/description b/data/libfragmentzip/_metadata/description
new file mode 100644
index 000000000..c89ec2041
--- /dev/null
+++ b/data/libfragmentzip/_metadata/description
@@ -0,0 +1 @@
+A library allowing to download single files from a remote zip archive
diff --git a/data/libfragmentzip/_metadata/in.1443.00 b/data/libfragmentzip/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libfragmentzip/_metadata/in.1443.00
diff --git a/data/libfragmentzip/_metadata/libzip.dep b/data/libfragmentzip/_metadata/libzip.dep
new file mode 120000
index 000000000..319c30a8f
--- /dev/null
+++ b/data/libfragmentzip/_metadata/libzip.dep
@@ -0,0 +1 @@
+../../libzip \ No newline at end of file
diff --git a/data/libfragmentzip/_metadata/license b/data/libfragmentzip/_metadata/license
new file mode 120000
index 000000000..141b2e41b
--- /dev/null
+++ b/data/libfragmentzip/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/lgpl-3 \ No newline at end of file
diff --git a/data/libfragmentzip/_metadata/maintainer b/data/libfragmentzip/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libfragmentzip/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libfragmentzip/_metadata/name b/data/libfragmentzip/_metadata/name
new file mode 100644
index 000000000..9bd94178b
--- /dev/null
+++ b/data/libfragmentzip/_metadata/name
@@ -0,0 +1 @@
+Fragment Zip Library
diff --git a/data/iphonemod.com.br/_metadata/priority b/data/libfragmentzip/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/iphonemod.com.br/_metadata/priority
+++ b/data/libfragmentzip/_metadata/priority
diff --git a/data/libfragmentzip/_metadata/section b/data/libfragmentzip/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libfragmentzip/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libfragmentzip/_metadata/tags b/data/libfragmentzip/_metadata/tags
new file mode 100644
index 000000000..91c01ad11
--- /dev/null
+++ b/data/libfragmentzip/_metadata/tags
@@ -0,0 +1 @@
+purpose::console, role::developer
diff --git a/data/libfragmentzip/_metadata/version b/data/libfragmentzip/_metadata/version
new file mode 100644
index 000000000..9902f1784
--- /dev/null
+++ b/data/libfragmentzip/_metadata/version
@@ -0,0 +1 @@
+28
diff --git a/data/libfragmentzip/libfragmentzip-28.tar.xz b/data/libfragmentzip/libfragmentzip-28.tar.xz
new file mode 100644
index 000000000..eef88ff46
--- /dev/null
+++ b/data/libfragmentzip/libfragmentzip-28.tar.xz
Binary files differ
diff --git a/data/libfragmentzip/make.sh b/data/libfragmentzip/make.sh
new file mode 100644
index 000000000..9507c7cc9
--- /dev/null
+++ b/data/libfragmentzip/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+autoreconf -f -i
+pkg:configure
+pkg:make
+pkg:install
diff --git a/data/libgcc/_metadata/maintainer b/data/libgcc/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libgcc/_metadata/maintainer
+++ b/data/libgcc/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libgdbm/_metadata/description b/data/libgdbm/_metadata/description
new file mode 100644
index 000000000..e637ba32d
--- /dev/null
+++ b/data/libgdbm/_metadata/description
@@ -0,0 +1 @@
+GNU dbm (or GDBM, for short) is a library of database functions that use extensible hashing and work similar to the standard UNIX dbm. These routines are provided to a programmer needing to create and manipulate a hashed database.
diff --git a/data/libgdbm/_metadata/homepage b/data/libgdbm/_metadata/homepage
new file mode 100644
index 000000000..cd7b8041e
--- /dev/null
+++ b/data/libgdbm/_metadata/homepage
@@ -0,0 +1 @@
+http://savannah.nongnu.org/projects/libpipeline
diff --git a/data/libgdbm/_metadata/in.1443.00 b/data/libgdbm/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libgdbm/_metadata/in.1443.00
diff --git a/data/libgdbm/_metadata/license b/data/libgdbm/_metadata/license
new file mode 120000
index 000000000..af4224931
--- /dev/null
+++ b/data/libgdbm/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-3 \ No newline at end of file
diff --git a/data/libgdbm/_metadata/maintainer b/data/libgdbm/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libgdbm/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iphonemodding.com/_metadata/priority b/data/libgdbm/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/iphonemodding.com/_metadata/priority
+++ b/data/libgdbm/_metadata/priority
diff --git a/data/libgdbm/_metadata/role b/data/libgdbm/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libgdbm/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libgdbm/_metadata/section b/data/libgdbm/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libgdbm/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libgdbm/_metadata/tags b/data/libgdbm/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libgdbm/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libgdbm/_metadata/version b/data/libgdbm/_metadata/version
new file mode 100644
index 000000000..ec6d649be
--- /dev/null
+++ b/data/libgdbm/_metadata/version
@@ -0,0 +1 @@
+1.18.1
diff --git a/data/libgdbm/gdbm-1.18.1.tar.gz b/data/libgdbm/gdbm-1.18.1.tar.gz
new file mode 100644
index 000000000..183063516
--- /dev/null
+++ b/data/libgdbm/gdbm-1.18.1.tar.gz
Binary files differ
diff --git a/data/libgdbm/make.sh b/data/libgdbm/make.sh
new file mode 100644
index 000000000..0fec3680d
--- /dev/null
+++ b/data/libgdbm/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure LDFLAGS=-liconv
+pkg:make
+pkg:install
diff --git a/data/libgmp10/_metadata/description b/data/libgmp10/_metadata/description
new file mode 100644
index 000000000..cdb1991c1
--- /dev/null
+++ b/data/libgmp10/_metadata/description
@@ -0,0 +1 @@
+GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on. GMP has a rich set of functions, and the functions have a regular interface.
diff --git a/data/libgmp10/_metadata/homepage b/data/libgmp10/_metadata/homepage
new file mode 100644
index 000000000..c162f8d85
--- /dev/null
+++ b/data/libgmp10/_metadata/homepage
@@ -0,0 +1 @@
+https://gmplib.org/
diff --git a/data/libgmp10/_metadata/in.1443.00 b/data/libgmp10/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libgmp10/_metadata/in.1443.00
diff --git a/data/libgmp10/_metadata/license b/data/libgmp10/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/libgmp10/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/libgmp10/_metadata/maintainer b/data/libgmp10/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libgmp10/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libgmp10/_metadata/name b/data/libgmp10/_metadata/name
new file mode 100644
index 000000000..520d345a1
--- /dev/null
+++ b/data/libgmp10/_metadata/name
@@ -0,0 +1 @@
+GNU Multiple Precision Arithmetic Library
diff --git a/data/iphonestuff/_metadata/priority b/data/libgmp10/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/iphonestuff/_metadata/priority
+++ b/data/libgmp10/_metadata/priority
diff --git a/data/libgmp10/_metadata/role b/data/libgmp10/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libgmp10/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libgmp10/_metadata/section b/data/libgmp10/_metadata/section
new file mode 100644
index 000000000..4b487b7d5
--- /dev/null
+++ b/data/libgmp10/_metadata/section
@@ -0,0 +1 @@
+Security
diff --git a/data/libgmp10/_metadata/tags b/data/libgmp10/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libgmp10/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libgmp10/_metadata/version b/data/libgmp10/_metadata/version
new file mode 100644
index 000000000..5e3254243
--- /dev/null
+++ b/data/libgmp10/_metadata/version
@@ -0,0 +1 @@
+6.1.2
diff --git a/data/libgmp10/gmp-6.1.2.tar.xz b/data/libgmp10/gmp-6.1.2.tar.xz
new file mode 100644
index 000000000..41988ae93
--- /dev/null
+++ b/data/libgmp10/gmp-6.1.2.tar.xz
Binary files differ
diff --git a/data/libgmp10/llvmasm.diff b/data/libgmp10/llvmasm.diff
new file mode 100644
index 000000000..3ad8e5ce9
--- /dev/null
+++ b/data/libgmp10/llvmasm.diff
@@ -0,0 +1,15 @@
+diff -ur gmp-6.1.2/mpn/arm64/invert_limb.asm gmp-6.1.2+iPhone/mpn/arm64/invert_limb.asm
+--- gmp-6.1.2/mpn/arm64/invert_limb.asm 2016-12-16 05:45:27.000000000 -1000
++++ gmp-6.1.2+iPhone/mpn/arm64/invert_limb.asm 2018-08-04 23:39:34.000000000 -1000
+@@ -41,9 +41,9 @@
+ ASM_START()
+ PROLOGUE(mpn_invert_limb)
+ lsr x2, x0, #54
+- adrp x1, approx_tab
++ adrp x1, approx_tab@PAGE
+ and x2, x2, #0x1fe
+- add x1, x1, :lo12:approx_tab
++ add x1, x1, approx_tab@PAGEOFF
+ ldrh w3, [x1,x2]
+ lsr x4, x0, #24
+ add x4, x4, #1
diff --git a/data/libgmp10/make.sh b/data/libgmp10/make.sh
new file mode 100644
index 000000000..3197d5831
--- /dev/null
+++ b/data/libgmp10/make.sh
@@ -0,0 +1,8 @@
+pkg:setup
+if [[ "${PKG_CFTARG}" == "1443.00" ]]; then
+ pkg:configure --with-libgcrypt-prefix="$(PKG_DEST_ gcrypt)/usr"
+else
+ pkg:configure --with-libgcrypt-prefix="$(PKG_DEST_ gcrypt)/usr" --disable-assembly
+fi
+pkg:make -j8
+pkg:install
diff --git a/data/libgpg-error/_metadata/in.1443.00 b/data/libgpg-error/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libgpg-error/_metadata/in.1443.00
diff --git a/data/libgpg-error/_metadata/maintainer b/data/libgpg-error/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libgpg-error/_metadata/maintainer
+++ b/data/libgpg-error/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libgpg-error/_metadata/readline.dep b/data/libgpg-error/_metadata/readline.dep
new file mode 120000
index 000000000..f35c9185b
--- /dev/null
+++ b/data/libgpg-error/_metadata/readline.dep
@@ -0,0 +1 @@
+../../readline \ No newline at end of file
diff --git a/data/libgpg-error/_metadata/version b/data/libgpg-error/_metadata/version
index 810ee4e91..f116d4214 100644
--- a/data/libgpg-error/_metadata/version
+++ b/data/libgpg-error/_metadata/version
@@ -1 +1 @@
-1.6
+1.32
diff --git a/data/libgpg-error/libgpg-error-1.32.tar.bz2 b/data/libgpg-error/libgpg-error-1.32.tar.bz2
new file mode 100644
index 000000000..27e84d6b2
--- /dev/null
+++ b/data/libgpg-error/libgpg-error-1.32.tar.bz2
Binary files differ
diff --git a/data/libgpg-error/libgpg-error-1.6.tar.bz2 b/data/libgpg-error/libgpg-error-1.6.tar.bz2
deleted file mode 100644
index 38d69d68c..000000000
--- a/data/libgpg-error/libgpg-error-1.6.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/libgpg-error/triplet.diff b/data/libgpg-error/triplet.diff
new file mode 100644
index 000000000..42ecb5b9c
--- /dev/null
+++ b/data/libgpg-error/triplet.diff
@@ -0,0 +1,13 @@
+diff -ur libgpg-error-1.32/src/mkheader.c libgpg-error-1.32+iPhone/src/mkheader.c
+--- libgpg-error-1.32/src/mkheader.c 2018-03-13 22:56:20.000000000 -1000
++++ libgpg-error-1.32+iPhone/src/mkheader.c 2018-08-01 15:13:26.000000000 -1000
+@@ -90,6 +90,9 @@
+ {"powerpc-unknown-linux-gnuspe", "powerpc-unknown-linux-gnu" },
+
+ {"arm-unknown-linux-gnueabihf", "arm-unknown-linux-gnueabi" },
++ {"arm-apple-darwin11", "arm-apple-darwin" },
++ {"aarch64-apple-darwin14", "aarch64-apple-darwin" },
++ {"aarch64-apple-darwin17", "aarch64-apple-darwin" },
+ {"armv7-unknown-linux-gnueabihf" },
+ {"armv5-unknown-linux-musleabi" },
+ {"armv6-unknown-linux-musleabihf" },
diff --git a/data/libgpod/_metadata/in.1443.00 b/data/libgpod/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libgpod/_metadata/in.1443.00
diff --git a/data/libgpod/_metadata/maintainer b/data/libgpod/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libgpod/_metadata/maintainer
+++ b/data/libgpod/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libid3tag/_metadata/in.1443.00 b/data/libid3tag/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libid3tag/_metadata/in.1443.00
diff --git a/data/libid3tag/_metadata/maintainer b/data/libid3tag/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libid3tag/_metadata/maintainer
+++ b/data/libid3tag/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libid3tag/make.sh b/data/libid3tag/make.sh
index 452a4bfd5..ce58b7c91 100644
--- a/data/libid3tag/make.sh
+++ b/data/libid3tag/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+cp ${PKG_BASE}/config.sub .
pkg:configure
make
pkg:install
diff --git a/data/libidn2/_metadata/description b/data/libidn2/_metadata/description
new file mode 100644
index 000000000..ad0247f25
--- /dev/null
+++ b/data/libidn2/_metadata/description
@@ -0,0 +1 @@
+Libidn2 is an implementation of the IDNA2008 + TR46 specifications
diff --git a/data/libidn2/_metadata/homepage b/data/libidn2/_metadata/homepage
new file mode 100644
index 000000000..aefc14e03
--- /dev/null
+++ b/data/libidn2/_metadata/homepage
@@ -0,0 +1 @@
+https://www.gnu.org/software/libidn/#libidn2
diff --git a/data/libidn2/_metadata/in.1443.00 b/data/libidn2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libidn2/_metadata/in.1443.00
diff --git a/data/libidn2/_metadata/license b/data/libidn2/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/libidn2/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/libidn2/_metadata/maintainer b/data/libidn2/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libidn2/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/iphonesurge/_metadata/priority b/data/libidn2/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/iphonesurge/_metadata/priority
+++ b/data/libidn2/_metadata/priority
diff --git a/data/libidn2/_metadata/role b/data/libidn2/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libidn2/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libidn2/_metadata/section b/data/libidn2/_metadata/section
new file mode 100644
index 000000000..4b487b7d5
--- /dev/null
+++ b/data/libidn2/_metadata/section
@@ -0,0 +1 @@
+Security
diff --git a/data/libidn2/_metadata/tags b/data/libidn2/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libidn2/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libidn2/_metadata/version b/data/libidn2/_metadata/version
new file mode 100644
index 000000000..5e3254243
--- /dev/null
+++ b/data/libidn2/_metadata/version
@@ -0,0 +1 @@
+6.1.2
diff --git a/data/libidn2/libidn2-2.0.5.tar.gz b/data/libidn2/libidn2-2.0.5.tar.gz
new file mode 100644
index 000000000..06e2a9825
--- /dev/null
+++ b/data/libidn2/libidn2-2.0.5.tar.gz
Binary files differ
diff --git a/data/libidn2/make.sh b/data/libidn2/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/libidn2/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/libio-compress-lzma-perl/IO-Compress-Lzma-2.081.tar.gz b/data/libio-compress-lzma-perl/IO-Compress-Lzma-2.081.tar.gz
new file mode 100644
index 000000000..6d5366499
--- /dev/null
+++ b/data/libio-compress-lzma-perl/IO-Compress-Lzma-2.081.tar.gz
Binary files differ
diff --git a/data/libio-compress-lzma-perl/_metadata/description b/data/libio-compress-lzma-perl/_metadata/description
new file mode 100644
index 000000000..e0f51d42f
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/description
@@ -0,0 +1 @@
+modules for reading and writing lzma/xz files/buffers
diff --git a/data/libio-compress-lzma-perl/_metadata/in.1443.00 b/data/libio-compress-lzma-perl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/in.1443.00
diff --git a/data/libio-compress-lzma-perl/_metadata/in.550.58 b/data/libio-compress-lzma-perl/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/in.550.58
diff --git a/data/libio-compress-lzma-perl/_metadata/libcompress-raw-lzma-perl.dep b/data/libio-compress-lzma-perl/_metadata/libcompress-raw-lzma-perl.dep
new file mode 120000
index 000000000..c9188a559
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/libcompress-raw-lzma-perl.dep
@@ -0,0 +1 @@
+../../libcompress-raw-lzma-perl \ No newline at end of file
diff --git a/data/libio-compress-lzma-perl/_metadata/license b/data/libio-compress-lzma-perl/_metadata/license
new file mode 100644
index 000000000..43cd72c3e
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/license
@@ -0,0 +1,248 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/data/libio-compress-lzma-perl/_metadata/maintainer b/data/libio-compress-lzma-perl/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libio-compress-lzma-perl/_metadata/perl.dep b/data/libio-compress-lzma-perl/_metadata/perl.dep
new file mode 120000
index 000000000..899dc46ed
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/perl.dep
@@ -0,0 +1 @@
+../../perl \ No newline at end of file
diff --git a/data/mspasov.com/_metadata/priority b/data/libio-compress-lzma-perl/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/mspasov.com/_metadata/priority
+++ b/data/libio-compress-lzma-perl/_metadata/priority
diff --git a/data/libio-compress-lzma-perl/_metadata/role b/data/libio-compress-lzma-perl/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/libio-compress-lzma-perl/_metadata/section b/data/libio-compress-lzma-perl/_metadata/section
new file mode 100644
index 000000000..ddc7f1fd8
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/section
@@ -0,0 +1 @@
+Scripting
diff --git a/data/libio-compress-lzma-perl/_metadata/tags b/data/libio-compress-lzma-perl/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/libio-compress-lzma-perl/_metadata/version b/data/libio-compress-lzma-perl/_metadata/version
new file mode 100644
index 000000000..f31cf620f
--- /dev/null
+++ b/data/libio-compress-lzma-perl/_metadata/version
@@ -0,0 +1 @@
+2.081
diff --git a/data/libio-compress-lzma-perl/make.sh b/data/libio-compress-lzma-perl/make.sh
new file mode 100644
index 000000000..0572d5f18
--- /dev/null
+++ b/data/libio-compress-lzma-perl/make.sh
@@ -0,0 +1,7 @@
+pkg:setup
+echo 'INCLUDE = .' > config.in
+echo 'LIB = .' >> config.in
+export PERL_SRC="$(PKG_DEST_ perl)"
+$(PKG_WORK_ perl)/perl-5*/miniperl_top Makefile.PL
+pkg:make
+make pure_vendor_install DESTDIR="${PKG_DEST}"
diff --git a/data/libirecovery/_metadata/description b/data/libirecovery/_metadata/description
new file mode 100644
index 000000000..eb3b13825
--- /dev/null
+++ b/data/libirecovery/_metadata/description
@@ -0,0 +1 @@
+libirecovery is a cross-platform library which implements communication to iBoot/iBSS found on Apple's iOS devices via USB. A command-line utility is also provided.
diff --git a/data/libirecovery/_metadata/in.1443.00 b/data/libirecovery/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libirecovery/_metadata/in.1443.00
diff --git a/data/gnupth/_metadata/license b/data/libirecovery/_metadata/license
index 577aa1598..577aa1598 120000
--- a/data/gnupth/_metadata/license
+++ b/data/libirecovery/_metadata/license
diff --git a/data/libirecovery/_metadata/maintainer b/data/libirecovery/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libirecovery/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/namedfork.net/_metadata/priority b/data/libirecovery/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/namedfork.net/_metadata/priority
+++ b/data/libirecovery/_metadata/priority
diff --git a/data/libirecovery/_metadata/readline.dep b/data/libirecovery/_metadata/readline.dep
new file mode 120000
index 000000000..f35c9185b
--- /dev/null
+++ b/data/libirecovery/_metadata/readline.dep
@@ -0,0 +1 @@
+../../readline \ No newline at end of file
diff --git a/data/libirecovery/_metadata/section b/data/libirecovery/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libirecovery/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libirecovery/_metadata/tags b/data/libirecovery/_metadata/tags
new file mode 100644
index 000000000..91c01ad11
--- /dev/null
+++ b/data/libirecovery/_metadata/tags
@@ -0,0 +1 @@
+purpose::console, role::developer
diff --git a/data/libirecovery/_metadata/version b/data/libirecovery/_metadata/version
new file mode 100644
index 000000000..c7e2339e2
--- /dev/null
+++ b/data/libirecovery/_metadata/version
@@ -0,0 +1 @@
+0.1.1+210
diff --git a/data/libirecovery/libirecovery-0.1.1+210.tar.xz b/data/libirecovery/libirecovery-0.1.1+210.tar.xz
new file mode 100644
index 000000000..b65da59c8
--- /dev/null
+++ b/data/libirecovery/libirecovery-0.1.1+210.tar.xz
Binary files differ
diff --git a/data/libirecovery/make.sh b/data/libirecovery/make.sh
new file mode 100644
index 000000000..0cbf5c328
--- /dev/null
+++ b/data/libirecovery/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+NOCONFIGURE=1 sh autogen.sh
+pkg:configure --disable-largefile ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes
+pkg:make
+pkg:install
diff --git a/data/libjpeg-turbo/_metadata/description b/data/libjpeg-turbo/_metadata/description
new file mode 100644
index 000000000..c1c910d57
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/description
@@ -0,0 +1 @@
+JPEG image codec
diff --git a/data/libjpeg-turbo/_metadata/homepage b/data/libjpeg-turbo/_metadata/homepage
new file mode 100644
index 000000000..70a6eab32
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/homepage
@@ -0,0 +1 @@
+https://sourceforge.net/projects/libjpeg-turbo/
diff --git a/data/libjpeg-turbo/_metadata/in.1443.00 b/data/libjpeg-turbo/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/in.1443.00
diff --git a/data/libjpeg-turbo/_metadata/license b/data/libjpeg-turbo/_metadata/license
new file mode 120000
index 000000000..eea9de8d1
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/bsd \ No newline at end of file
diff --git a/data/libjpeg-turbo/_metadata/maintainer b/data/libjpeg-turbo/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/perl_/_metadata/priority b/data/libjpeg-turbo/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/perl_/_metadata/priority
+++ b/data/libjpeg-turbo/_metadata/priority
diff --git a/data/libjpeg-turbo/_metadata/role b/data/libjpeg-turbo/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libjpeg-turbo/_metadata/section b/data/libjpeg-turbo/_metadata/section
new file mode 100644
index 000000000..593877746
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/section
@@ -0,0 +1 @@
+Multimedia
diff --git a/data/libjpeg-turbo/_metadata/tags b/data/libjpeg-turbo/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libjpeg-turbo/_metadata/version b/data/libjpeg-turbo/_metadata/version
new file mode 100644
index 000000000..227cea215
--- /dev/null
+++ b/data/libjpeg-turbo/_metadata/version
@@ -0,0 +1 @@
+2.0.0
diff --git a/data/libjpeg-turbo/libjpeg-turbo-2.0.0.tar.gz b/data/libjpeg-turbo/libjpeg-turbo-2.0.0.tar.gz
new file mode 100644
index 000000000..89fcfba42
--- /dev/null
+++ b/data/libjpeg-turbo/libjpeg-turbo-2.0.0.tar.gz
Binary files differ
diff --git a/data/libjpeg-turbo/make.sh b/data/libjpeg-turbo/make.sh
new file mode 100644
index 000000000..fe918e72b
--- /dev/null
+++ b/data/libjpeg-turbo/make.sh
@@ -0,0 +1,22 @@
+pkg:setup
+cat >iphoneos_toolchain.cmake <<EOF
+set(CMAKE_SYSTEM_NAME Darwin) # Tell CMake we're cross-compiling
+set(CMAKE_CROSSCOMPILING true)
+#include(CMakeForceCompiler)
+# Prefix detection only works with compiler id "GNU"
+# CMake will look for prefixed g++, cpp, ld, etc. automatically
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(triple ${PKG_TARG})
+set(CMAKE_FIND_ROOT_PATH $(echo ${PKG_PATH} | sed -e s/:/' '/g))
+set(CMAKE_LIBRARY_PATH $(echo ${LIBRARY_PATH} | sed -e s/:/' '/g))
+set(CMAKE_INCLUDE_PATH $(echo ${INCLUDE_PATH} | sed -e s/:/' '/g))
+set(CMAKE_C_COMPILER ${PKG_TARG}-gcc)
+set(CMAKE_CXX_COMPILER ${PKG_TARG}-g++)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+EOF
+
+cmake -j8 -DCMAKE_TOOLCHAIN_FILE=iphoneos_toolchain.cmake -DCMAKE_LOCALSTATEDIR="/private/var" -DCMAKE_INSTALL_NAME_DIR="/usr/lib" -DCMAKE_INSTALL_RPATH="/usr/" -DCMAKE_OSX_SYSROOT="${PKG_ROOT}" -DCMAKE_INSTALL_PREFIX="/usr/" -DCURRENT_VENDOR=debian -DUSE_NLS=0 -DWITH_DOC=0 .
+make -j8
+pkg:install
diff --git a/data/libksba/_metadata/in.1443.00 b/data/libksba/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libksba/_metadata/in.1443.00
diff --git a/data/libksba/_metadata/maintainer b/data/libksba/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libksba/_metadata/maintainer
+++ b/data/libksba/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libksba/_metadata/version b/data/libksba/_metadata/version
index 6d7de6e6a..80e78df68 100644
--- a/data/libksba/_metadata/version
+++ b/data/libksba/_metadata/version
@@ -1 +1 @@
-1.0.2
+1.3.5
diff --git a/data/libksba/libksba-1.0.2.tar.bz2 b/data/libksba/libksba-1.0.2.tar.bz2
deleted file mode 100644
index 4b5229ead..000000000
--- a/data/libksba/libksba-1.0.2.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/libksba/libksba-1.3.5.tar.bz2 b/data/libksba/libksba-1.3.5.tar.bz2
new file mode 100644
index 000000000..7cabcf0f3
--- /dev/null
+++ b/data/libksba/libksba-1.3.5.tar.bz2
Binary files differ
diff --git a/data/libksba/make.sh b/data/libksba/make.sh
index a1589a105..afd22873b 100644
--- a/data/libksba/make.sh
+++ b/data/libksba/make.sh
@@ -1,5 +1,5 @@
pkg:setup
pkg:autoconf
-pkg:configure
-make
+pkg:configure --with-gpg-error-prefix="$(PKG_DEST_ libgpg-error)/usr"
+make -j8
pkg:install
diff --git a/data/libmad/Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff b/data/libmad/Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff
new file mode 100644
index 000000000..46415107d
--- /dev/null
+++ b/data/libmad/Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff
@@ -0,0 +1,34 @@
+From: Dave Martin
+Subject: "rsc" doesnt exist anymore in thumb2
+
+diff --git a/fixed.h b/fixed.h
+index 4b58abf..ba4bc26 100644
+--- a/fixed.h
++++ b/fixed.h
+@@ -275,12 +275,25 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
+ : "+r" (lo), "+r" (hi) \
+ : "%r" (x), "r" (y))
+
++#ifdef __thumb__
++/* In Thumb-2, the RSB-immediate instruction is only allowed with a zero
++ operand. If needed this code can also support Thumb-1
++ (simply append "s" to the end of the second two instructions). */
++# define MAD_F_MLN(hi, lo) \
++ asm ("rsbs %0, %0, #0\n\t" \
++ "sbc %1, %1, %1\n\t" \
++ "sub %1, %1, %2" \
++ : "+&r" (lo), "=&r" (hi) \
++ : "r" (hi) \
++ : "cc")
++#else /* ! __thumb__ */
+ # define MAD_F_MLN(hi, lo) \
+ asm ("rsbs %0, %2, #0\n\t" \
+ "rsc %1, %3, #0" \
+- : "=r" (lo), "=r" (hi) \
++ : "=&r" (lo), "=r" (hi) \
+ : "0" (lo), "1" (hi) \
+ : "cc")
++#endif /* __thumb__ */
+
+ # define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
diff --git a/data/libmad/_metadata/in.1443.00 b/data/libmad/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libmad/_metadata/in.1443.00
diff --git a/data/libmad/_metadata/maintainer b/data/libmad/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libmad/_metadata/maintainer
+++ b/data/libmad/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libmad/_metadata/version b/data/libmad/_metadata/version
index 285885e58..7c2c2b029 100644
--- a/data/libmad/_metadata/version
+++ b/data/libmad/_metadata/version
@@ -1 +1 @@
-0.15.1b
+0.15.1b+deb9u1
diff --git a/data/libmad/amd64-64bit.diff b/data/libmad/amd64-64bit.diff
new file mode 100644
index 000000000..2ef025b6c
--- /dev/null
+++ b/data/libmad/amd64-64bit.diff
@@ -0,0 +1,12 @@
+Index: libmad-0.15.1b/configure.ac
+===================================================================
+--- libmad-0.15.1b.orig/configure.ac 2008-03-07 20:33:05.000000000 +0000
++++ libmad-0.15.1b/configure.ac 2008-03-07 20:33:31.000000000 +0000
+@@ -233,6 +233,7 @@
+ then
+ case "$host" in
+ i?86-*) FPM="INTEL" ;;
++ x86_64*) FPM="64BIT" ;;
+ arm*-*) FPM="ARM" ;;
+ mips*-*) FPM="MIPS" ;;
+ sparc*-*) FPM="SPARC" ;;
diff --git a/data/libmad/length-check.diff b/data/libmad/length-check.diff
new file mode 100644
index 000000000..80e48469e
--- /dev/null
+++ b/data/libmad/length-check.diff
@@ -0,0 +1,817 @@
+From: Kurt Roeckx <kurt@roeckx.be>
+Date: Sun, 28 Jan 2018 19:26:36 +0100
+Subject: Check the size before reading with mad_bit_read
+
+There are various cases where it attemps to read past the end of the buffer
+using mad_bit_read(). Most functions didn't even know the size of the buffer
+they were reading from.
+
+Index: libmad-0.15.1b/bit.c
+===================================================================
+--- libmad-0.15.1b.orig/bit.c
++++ libmad-0.15.1b/bit.c
+@@ -138,6 +138,9 @@ unsigned long mad_bit_read(struct mad_bi
+ {
+ register unsigned long value;
+
++ if (len == 0)
++ return 0;
++
+ if (bitptr->left == CHAR_BIT)
+ bitptr->cache = *bitptr->byte;
+
+Index: libmad-0.15.1b/frame.c
+===================================================================
+--- libmad-0.15.1b.orig/frame.c
++++ libmad-0.15.1b/frame.c
+@@ -120,11 +120,18 @@ static
+ int decode_header(struct mad_header *header, struct mad_stream *stream)
+ {
+ unsigned int index;
++ struct mad_bitptr bufend_ptr;
+
+ header->flags = 0;
+ header->private_bits = 0;
+
++ mad_bit_init(&bufend_ptr, stream->bufend);
++
+ /* header() */
++ if (mad_bit_length(&stream->ptr, &bufend_ptr) < 32) {
++ stream->error = MAD_ERROR_BUFLEN;
++ return -1;
++ }
+
+ /* syncword */
+ mad_bit_skip(&stream->ptr, 11);
+@@ -225,8 +232,13 @@ int decode_header(struct mad_header *hea
+ /* error_check() */
+
+ /* crc_check */
+- if (header->flags & MAD_FLAG_PROTECTION)
++ if (header->flags & MAD_FLAG_PROTECTION) {
++ if (mad_bit_length(&stream->ptr, &bufend_ptr) < 16) {
++ stream->error = MAD_ERROR_BUFLEN;
++ return -1;
++ }
+ header->crc_target = mad_bit_read(&stream->ptr, 16);
++ }
+
+ return 0;
+ }
+@@ -338,7 +350,7 @@ int mad_header_decode(struct mad_header
+ stream->error = MAD_ERROR_BUFLEN;
+ goto fail;
+ }
+- else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
++ else if ((end - ptr >= 2) && !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
+ /* mark point where frame sync word was expected */
+ stream->this_frame = ptr;
+ stream->next_frame = ptr + 1;
+@@ -361,6 +373,8 @@ int mad_header_decode(struct mad_header
+ ptr = mad_bit_nextbyte(&stream->ptr);
+ }
+
++ stream->error = MAD_ERROR_NONE;
++
+ /* begin processing */
+ stream->this_frame = ptr;
+ stream->next_frame = ptr + 1; /* possibly bogus sync word */
+@@ -413,7 +427,7 @@ int mad_header_decode(struct mad_header
+ /* check that a valid frame header follows this frame */
+
+ ptr = stream->next_frame;
+- if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
++ if ((end - ptr >= 2) && !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
+ ptr = stream->next_frame = stream->this_frame + 1;
+ goto sync;
+ }
+Index: libmad-0.15.1b/layer12.c
+===================================================================
+--- libmad-0.15.1b.orig/layer12.c
++++ libmad-0.15.1b/layer12.c
+@@ -72,10 +72,18 @@ mad_fixed_t const linear_table[14] = {
+ * DESCRIPTION: decode one requantized Layer I sample from a bitstream
+ */
+ static
+-mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
++mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb, struct mad_stream *stream)
+ {
+ mad_fixed_t sample;
++ struct mad_bitptr frameend_ptr;
+
++ mad_bit_init(&frameend_ptr, stream->next_frame);
++
++ if (mad_bit_length(ptr, &frameend_ptr) < nb) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return 0;
++ }
+ sample = mad_bit_read(ptr, nb);
+
+ /* invert most significant bit, extend sign, then scale to fixed format */
+@@ -106,6 +114,10 @@ int mad_layer_I(struct mad_stream *strea
+ struct mad_header *header = &frame->header;
+ unsigned int nch, bound, ch, s, sb, nb;
+ unsigned char allocation[2][32], scalefactor[2][32];
++ struct mad_bitptr bufend_ptr, frameend_ptr;
++
++ mad_bit_init(&bufend_ptr, stream->bufend);
++ mad_bit_init(&frameend_ptr, stream->next_frame);
+
+ nch = MAD_NCHANNELS(header);
+
+@@ -118,6 +130,11 @@ int mad_layer_I(struct mad_stream *strea
+ /* check CRC word */
+
+ if (header->flags & MAD_FLAG_PROTECTION) {
++ if (mad_bit_length(&stream->ptr, &bufend_ptr)
++ < 4 * (bound * nch + (32 - bound))) {
++ stream->error = MAD_ERROR_BADCRC;
++ return -1;
++ }
+ header->crc_check =
+ mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
+ header->crc_check);
+@@ -133,6 +150,11 @@ int mad_layer_I(struct mad_stream *strea
+
+ for (sb = 0; sb < bound; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < 4) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ nb = mad_bit_read(&stream->ptr, 4);
+
+ if (nb == 15) {
+@@ -145,6 +167,11 @@ int mad_layer_I(struct mad_stream *strea
+ }
+
+ for (sb = bound; sb < 32; ++sb) {
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < 4) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ nb = mad_bit_read(&stream->ptr, 4);
+
+ if (nb == 15) {
+@@ -161,6 +188,11 @@ int mad_layer_I(struct mad_stream *strea
+ for (sb = 0; sb < 32; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+ if (allocation[ch][sb]) {
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
+
+ # if defined(OPT_STRICT)
+@@ -185,8 +217,10 @@ int mad_layer_I(struct mad_stream *strea
+ for (ch = 0; ch < nch; ++ch) {
+ nb = allocation[ch][sb];
+ frame->sbsample[ch][s][sb] = nb ?
+- mad_f_mul(I_sample(&stream->ptr, nb),
++ mad_f_mul(I_sample(&stream->ptr, nb, stream),
+ sf_table[scalefactor[ch][sb]]) : 0;
++ if (stream->error != 0)
++ return -1;
+ }
+ }
+
+@@ -194,7 +228,14 @@ int mad_layer_I(struct mad_stream *strea
+ if ((nb = allocation[0][sb])) {
+ mad_fixed_t sample;
+
+- sample = I_sample(&stream->ptr, nb);
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < nb) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
++ sample = I_sample(&stream->ptr, nb, stream);
++ if (stream->error != 0)
++ return -1;
+
+ for (ch = 0; ch < nch; ++ch) {
+ frame->sbsample[ch][s][sb] =
+@@ -280,13 +321,21 @@ struct quantclass {
+ static
+ void II_samples(struct mad_bitptr *ptr,
+ struct quantclass const *quantclass,
+- mad_fixed_t output[3])
++ mad_fixed_t output[3], struct mad_stream *stream)
+ {
+ unsigned int nb, s, sample[3];
++ struct mad_bitptr frameend_ptr;
++
++ mad_bit_init(&frameend_ptr, stream->next_frame);
+
+ if ((nb = quantclass->group)) {
+ unsigned int c, nlevels;
+
++ if (mad_bit_length(ptr, &frameend_ptr) < quantclass->bits) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return;
++ }
+ /* degrouping */
+ c = mad_bit_read(ptr, quantclass->bits);
+ nlevels = quantclass->nlevels;
+@@ -299,8 +348,14 @@ void II_samples(struct mad_bitptr *ptr,
+ else {
+ nb = quantclass->bits;
+
+- for (s = 0; s < 3; ++s)
++ for (s = 0; s < 3; ++s) {
++ if (mad_bit_length(ptr, &frameend_ptr) < nb) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return;
++ }
+ sample[s] = mad_bit_read(ptr, nb);
++ }
+ }
+
+ for (s = 0; s < 3; ++s) {
+@@ -336,6 +391,9 @@ int mad_layer_II(struct mad_stream *stre
+ unsigned char const *offsets;
+ unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
+ mad_fixed_t samples[3];
++ struct mad_bitptr frameend_ptr;
++
++ mad_bit_init(&frameend_ptr, stream->next_frame);
+
+ nch = MAD_NCHANNELS(header);
+
+@@ -402,13 +460,24 @@ int mad_layer_II(struct mad_stream *stre
+ for (sb = 0; sb < bound; ++sb) {
+ nbal = bitalloc_table[offsets[sb]].nbal;
+
+- for (ch = 0; ch < nch; ++ch)
++ for (ch = 0; ch < nch; ++ch) {
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < nbal) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
++ }
+ }
+
+ for (sb = bound; sb < sblimit; ++sb) {
+ nbal = bitalloc_table[offsets[sb]].nbal;
+
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < nbal) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ allocation[0][sb] =
+ allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
+ }
+@@ -417,8 +486,14 @@ int mad_layer_II(struct mad_stream *stre
+
+ for (sb = 0; sb < sblimit; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+- if (allocation[ch][sb])
++ if (allocation[ch][sb]) {
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < 2) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
++ }
+ }
+ }
+
+@@ -441,6 +516,11 @@ int mad_layer_II(struct mad_stream *stre
+ for (sb = 0; sb < sblimit; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+ if (allocation[ch][sb]) {
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
+
+ switch (scfsi[ch][sb]) {
+@@ -451,11 +531,21 @@ int mad_layer_II(struct mad_stream *stre
+ break;
+
+ case 0:
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
+ /* fall through */
+
+ case 1:
+ case 3:
++ if (mad_bit_length(&stream->ptr, &frameend_ptr) < 6) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+ scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
+ }
+
+@@ -487,7 +577,9 @@ int mad_layer_II(struct mad_stream *stre
+ if ((index = allocation[ch][sb])) {
+ index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
+
+- II_samples(&stream->ptr, &qc_table[index], samples);
++ II_samples(&stream->ptr, &qc_table[index], samples, stream);
++ if (stream->error != 0)
++ return -1;
+
+ for (s = 0; s < 3; ++s) {
+ frame->sbsample[ch][3 * gr + s][sb] =
+@@ -505,7 +597,9 @@ int mad_layer_II(struct mad_stream *stre
+ if ((index = allocation[0][sb])) {
+ index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
+
+- II_samples(&stream->ptr, &qc_table[index], samples);
++ II_samples(&stream->ptr, &qc_table[index], samples, stream);
++ if (stream->error != 0)
++ return -1;
+
+ for (ch = 0; ch < nch; ++ch) {
+ for (s = 0; s < 3; ++s) {
+Index: libmad-0.15.1b/layer3.c
+===================================================================
+--- libmad-0.15.1b.orig/layer3.c
++++ libmad-0.15.1b/layer3.c
+@@ -598,7 +598,8 @@ enum mad_error III_sideinfo(struct mad_b
+ static
+ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
+ struct channel *channel,
+- struct channel *gr1ch, int mode_extension)
++ struct channel *gr1ch, int mode_extension,
++ unsigned int bits_left, unsigned int *part2_length)
+ {
+ struct mad_bitptr start;
+ unsigned int scalefac_compress, index, slen[4], part, n, i;
+@@ -644,8 +645,12 @@ unsigned int III_scalefactors_lsf(struct
+
+ n = 0;
+ for (part = 0; part < 4; ++part) {
+- for (i = 0; i < nsfb[part]; ++i)
++ for (i = 0; i < nsfb[part]; ++i) {
++ if (bits_left < slen[part])
++ return MAD_ERROR_BADSCFSI;
+ channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
++ bits_left -= slen[part];
++ }
+ }
+
+ while (n < 39)
+@@ -690,7 +695,10 @@ unsigned int III_scalefactors_lsf(struct
+ max = (1 << slen[part]) - 1;
+
+ for (i = 0; i < nsfb[part]; ++i) {
++ if (bits_left < slen[part])
++ return MAD_ERROR_BADSCFSI;
+ is_pos = mad_bit_read(ptr, slen[part]);
++ bits_left -= slen[part];
+
+ channel->scalefac[n] = is_pos;
+ gr1ch->scalefac[n++] = (is_pos == max);
+@@ -703,7 +711,8 @@ unsigned int III_scalefactors_lsf(struct
+ }
+ }
+
+- return mad_bit_length(&start, ptr);
++ *part2_length = mad_bit_length(&start, ptr);
++ return MAD_ERROR_NONE;
+ }
+
+ /*
+@@ -712,7 +721,8 @@ unsigned int III_scalefactors_lsf(struct
+ */
+ static
+ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
+- struct channel const *gr0ch, unsigned int scfsi)
++ struct channel const *gr0ch, unsigned int scfsi,
++ unsigned int bits_left, unsigned int *part2_length)
+ {
+ struct mad_bitptr start;
+ unsigned int slen1, slen2, sfbi;
+@@ -728,12 +738,20 @@ unsigned int III_scalefactors(struct mad
+ sfbi = 0;
+
+ nsfb = (channel->flags & mixed_block_flag) ? 8 + 3 * 3 : 6 * 3;
+- while (nsfb--)
++ while (nsfb--) {
++ if (bits_left < slen1)
++ return MAD_ERROR_BADSCFSI;
+ channel->scalefac[sfbi++] = mad_bit_read(ptr, slen1);
++ bits_left -= slen1;
++ }
+
+ nsfb = 6 * 3;
+- while (nsfb--)
++ while (nsfb--) {
++ if (bits_left < slen2)
++ return MAD_ERROR_BADSCFSI;
+ channel->scalefac[sfbi++] = mad_bit_read(ptr, slen2);
++ bits_left -= slen2;
++ }
+
+ nsfb = 1 * 3;
+ while (nsfb--)
+@@ -745,8 +763,12 @@ unsigned int III_scalefactors(struct mad
+ channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+ }
+ else {
+- for (sfbi = 0; sfbi < 6; ++sfbi)
++ for (sfbi = 0; sfbi < 6; ++sfbi) {
++ if (bits_left < slen1)
++ return MAD_ERROR_BADSCFSI;
+ channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
++ bits_left -= slen1;
++ }
+ }
+
+ if (scfsi & 0x4) {
+@@ -754,8 +776,12 @@ unsigned int III_scalefactors(struct mad
+ channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+ }
+ else {
+- for (sfbi = 6; sfbi < 11; ++sfbi)
++ for (sfbi = 6; sfbi < 11; ++sfbi) {
++ if (bits_left < slen1)
++ return MAD_ERROR_BADSCFSI;
+ channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
++ bits_left -= slen1;
++ }
+ }
+
+ if (scfsi & 0x2) {
+@@ -763,8 +789,12 @@ unsigned int III_scalefactors(struct mad
+ channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+ }
+ else {
+- for (sfbi = 11; sfbi < 16; ++sfbi)
++ for (sfbi = 11; sfbi < 16; ++sfbi) {
++ if (bits_left < slen2)
++ return MAD_ERROR_BADSCFSI;
+ channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
++ bits_left -= slen2;
++ }
+ }
+
+ if (scfsi & 0x1) {
+@@ -772,14 +802,19 @@ unsigned int III_scalefactors(struct mad
+ channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+ }
+ else {
+- for (sfbi = 16; sfbi < 21; ++sfbi)
++ for (sfbi = 16; sfbi < 21; ++sfbi) {
++ if (bits_left < slen2)
++ return MAD_ERROR_BADSCFSI;
+ channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
++ bits_left -= slen2;
++ }
+ }
+
+ channel->scalefac[21] = 0;
+ }
+
+- return mad_bit_length(&start, ptr);
++ *part2_length = mad_bit_length(&start, ptr);
++ return MAD_ERROR_NONE;
+ }
+
+ /*
+@@ -933,19 +968,17 @@ static
+ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
+ struct channel *channel,
+ unsigned char const *sfbwidth,
+- unsigned int part2_length)
++ signed int part3_length)
+ {
+ signed int exponents[39], exp;
+ signed int const *expptr;
+ struct mad_bitptr peek;
+- signed int bits_left, cachesz;
++ signed int bits_left, cachesz, fakebits;
+ register mad_fixed_t *xrptr;
+ mad_fixed_t const *sfbound;
+ register unsigned long bitcache;
+
+- bits_left = (signed) channel->part2_3_length - (signed) part2_length;
+- if (bits_left < 0)
+- return MAD_ERROR_BADPART3LEN;
++ bits_left = part3_length;
+
+ III_exponents(channel, sfbwidth, exponents);
+
+@@ -956,8 +989,12 @@ enum mad_error III_huffdecode(struct mad
+ cachesz = mad_bit_bitsleft(&peek);
+ cachesz += ((32 - 1 - 24) + (24 - cachesz)) & ~7;
+
++ if (bits_left < cachesz) {
++ cachesz = bits_left;
++ }
+ bitcache = mad_bit_read(&peek, cachesz);
+ bits_left -= cachesz;
++ fakebits = 0;
+
+ xrptr = &xr[0];
+
+@@ -986,7 +1023,7 @@ enum mad_error III_huffdecode(struct mad
+
+ big_values = channel->big_values;
+
+- while (big_values-- && cachesz + bits_left > 0) {
++ while (big_values-- && cachesz + bits_left - fakebits > 0) {
+ union huffpair const *pair;
+ unsigned int clumpsz, value;
+ register mad_fixed_t requantized;
+@@ -1023,10 +1060,19 @@ enum mad_error III_huffdecode(struct mad
+ unsigned int bits;
+
+ bits = ((32 - 1 - 21) + (21 - cachesz)) & ~7;
++ if (bits_left < bits) {
++ bits = bits_left;
++ }
+ bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
+ cachesz += bits;
+ bits_left -= bits;
+ }
++ if (cachesz < 21) {
++ unsigned int bits = 21 - cachesz;
++ bitcache <<= bits;
++ cachesz += bits;
++ fakebits += bits;
++ }
+
+ /* hcod (0..19) */
+
+@@ -1041,6 +1087,8 @@ enum mad_error III_huffdecode(struct mad
+ }
+
+ cachesz -= pair->value.hlen;
++ if (cachesz < fakebits)
++ return MAD_ERROR_BADHUFFDATA;
+
+ if (linbits) {
+ /* x (0..14) */
+@@ -1054,10 +1102,15 @@ enum mad_error III_huffdecode(struct mad
+
+ case 15:
+ if (cachesz < linbits + 2) {
+- bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
+- cachesz += 16;
+- bits_left -= 16;
++ unsigned int bits = 16;
++ if (bits_left < 16)
++ bits = bits_left;
++ bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
++ cachesz += bits;
++ bits_left -= bits;
+ }
++ if (cachesz - fakebits < linbits)
++ return MAD_ERROR_BADHUFFDATA;
+
+ value += MASK(bitcache, cachesz, linbits);
+ cachesz -= linbits;
+@@ -1074,6 +1127,8 @@ enum mad_error III_huffdecode(struct mad
+ }
+
+ x_final:
++ if (cachesz - fakebits < 1)
++ return MAD_ERROR_BADHUFFDATA;
+ xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
+ -requantized : requantized;
+ }
+@@ -1089,10 +1144,15 @@ enum mad_error III_huffdecode(struct mad
+
+ case 15:
+ if (cachesz < linbits + 1) {
+- bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
+- cachesz += 16;
+- bits_left -= 16;
++ unsigned int bits = 16;
++ if (bits_left < 16)
++ bits = bits_left;
++ bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
++ cachesz += bits;
++ bits_left -= bits;
+ }
++ if (cachesz - fakebits < linbits)
++ return MAD_ERROR_BADHUFFDATA;
+
+ value += MASK(bitcache, cachesz, linbits);
+ cachesz -= linbits;
+@@ -1109,6 +1169,8 @@ enum mad_error III_huffdecode(struct mad
+ }
+
+ y_final:
++ if (cachesz - fakebits < 1)
++ return MAD_ERROR_BADHUFFDATA;
+ xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
+ -requantized : requantized;
+ }
+@@ -1128,6 +1190,8 @@ enum mad_error III_huffdecode(struct mad
+ requantized = reqcache[value] = III_requantize(value, exp);
+ }
+
++ if (cachesz - fakebits < 1)
++ return MAD_ERROR_BADHUFFDATA;
+ xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
+ -requantized : requantized;
+ }
+@@ -1146,6 +1210,8 @@ enum mad_error III_huffdecode(struct mad
+ requantized = reqcache[value] = III_requantize(value, exp);
+ }
+
++ if (cachesz - fakebits < 1)
++ return MAD_ERROR_BADHUFFDATA;
+ xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
+ -requantized : requantized;
+ }
+@@ -1155,9 +1221,6 @@ enum mad_error III_huffdecode(struct mad
+ }
+ }
+
+- if (cachesz + bits_left < 0)
+- return MAD_ERROR_BADHUFFDATA; /* big_values overrun */
+-
+ /* count1 */
+ {
+ union huffquad const *table;
+@@ -1167,15 +1230,24 @@ enum mad_error III_huffdecode(struct mad
+
+ requantized = III_requantize(1, exp);
+
+- while (cachesz + bits_left > 0 && xrptr <= &xr[572]) {
++ while (cachesz + bits_left - fakebits > 0 && xrptr <= &xr[572]) {
+ union huffquad const *quad;
+
+ /* hcod (1..6) */
+
+ if (cachesz < 10) {
+- bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
+- cachesz += 16;
+- bits_left -= 16;
++ unsigned int bits = 16;
++ if (bits_left < 16)
++ bits = bits_left;
++ bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
++ cachesz += bits;
++ bits_left -= bits;
++ }
++ if (cachesz < 10) {
++ unsigned int bits = 10 - cachesz;
++ bitcache <<= bits;
++ cachesz += bits;
++ fakebits += bits;
+ }
+
+ quad = &table[MASK(bitcache, cachesz, 4)];
+@@ -1188,6 +1260,11 @@ enum mad_error III_huffdecode(struct mad
+ MASK(bitcache, cachesz, quad->ptr.bits)];
+ }
+
++ if (cachesz - fakebits < quad->value.hlen + quad->value.v
++ + quad->value.w + quad->value.x + quad->value.y)
++ /* We don't have enough bits to read one more entry, consider them
++ * stuffing bits. */
++ break;
+ cachesz -= quad->value.hlen;
+
+ if (xrptr == sfbound) {
+@@ -1236,22 +1313,8 @@ enum mad_error III_huffdecode(struct mad
+
+ xrptr += 2;
+ }
+-
+- if (cachesz + bits_left < 0) {
+-# if 0 && defined(DEBUG)
+- fprintf(stderr, "huffman count1 overrun (%d bits)\n",
+- -(cachesz + bits_left));
+-# endif
+-
+- /* technically the bitstream is misformatted, but apparently
+- some encoders are just a bit sloppy with stuffing bits */
+-
+- xrptr -= 4;
+- }
+ }
+
+- assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT);
+-
+ # if 0 && defined(DEBUG)
+ if (bits_left < 0)
+ fprintf(stderr, "read %d bits too many\n", -bits_left);
+@@ -2348,10 +2411,11 @@ void III_freqinver(mad_fixed_t sample[18
+ */
+ static
+ enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
+- struct sideinfo *si, unsigned int nch)
++ struct sideinfo *si, unsigned int nch, unsigned int md_len)
+ {
+ struct mad_header *header = &frame->header;
+ unsigned int sfreqi, ngr, gr;
++ int bits_left = md_len * CHAR_BIT;
+
+ {
+ unsigned int sfreq;
+@@ -2383,6 +2447,7 @@ enum mad_error III_decode(struct mad_bit
+ for (ch = 0; ch < nch; ++ch) {
+ struct channel *channel = &granule->ch[ch];
+ unsigned int part2_length;
++ unsigned int part3_length;
+
+ sfbwidth[ch] = sfbwidth_table[sfreqi].l;
+ if (channel->block_type == 2) {
+@@ -2391,18 +2456,30 @@ enum mad_error III_decode(struct mad_bit
+ }
+
+ if (header->flags & MAD_FLAG_LSF_EXT) {
+- part2_length = III_scalefactors_lsf(ptr, channel,
++ error = III_scalefactors_lsf(ptr, channel,
+ ch == 0 ? 0 : &si->gr[1].ch[1],
+- header->mode_extension);
++ header->mode_extension, bits_left, &part2_length);
+ }
+ else {
+- part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
+- gr == 0 ? 0 : si->scfsi[ch]);
++ error = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
++ gr == 0 ? 0 : si->scfsi[ch], bits_left, &part2_length);
+ }
++ if (error)
++ return error;
++
++ bits_left -= part2_length;
+
+- error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part2_length);
++ if (part2_length > channel->part2_3_length)
++ return MAD_ERROR_BADPART3LEN;
++
++ part3_length = channel->part2_3_length - part2_length;
++ if (part3_length > bits_left)
++ return MAD_ERROR_BADPART3LEN;
++
++ error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part3_length);
+ if (error)
+ return error;
++ bits_left -= part3_length;
+ }
+
+ /* joint stereo processing */
+@@ -2519,11 +2596,13 @@ int mad_layer_III(struct mad_stream *str
+ unsigned int nch, priv_bitlen, next_md_begin = 0;
+ unsigned int si_len, data_bitlen, md_len;
+ unsigned int frame_space, frame_used, frame_free;
+- struct mad_bitptr ptr;
++ struct mad_bitptr ptr, bufend_ptr;
+ struct sideinfo si;
+ enum mad_error error;
+ int result = 0;
+
++ mad_bit_init(&bufend_ptr, stream->bufend);
++
+ /* allocate Layer III dynamic structures */
+
+ if (stream->main_data == 0) {
+@@ -2587,14 +2666,15 @@ int mad_layer_III(struct mad_stream *str
+ unsigned long header;
+
+ mad_bit_init(&peek, stream->next_frame);
++ if (mad_bit_length(&peek, &bufend_ptr) >= 57) {
++ header = mad_bit_read(&peek, 32);
++ if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
++ if (!(header & 0x00010000L)) /* protection_bit */
++ mad_bit_skip(&peek, 16); /* crc_check */
+
+- header = mad_bit_read(&peek, 32);
+- if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
+- if (!(header & 0x00010000L)) /* protection_bit */
+- mad_bit_skip(&peek, 16); /* crc_check */
+-
+- next_md_begin =
+- mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
++ next_md_begin =
++ mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
++ }
+ }
+
+ mad_bit_finish(&peek);
+@@ -2653,7 +2733,7 @@ int mad_layer_III(struct mad_stream *str
+ /* decode main_data */
+
+ if (result == 0) {
+- error = III_decode(&ptr, frame, &si, nch);
++ error = III_decode(&ptr, frame, &si, nch, md_len);
+ if (error) {
+ stream->error = error;
+ result = -1;
diff --git a/data/libmad/libmad.thumb.diff b/data/libmad/libmad.thumb.diff
new file mode 100644
index 000000000..4236fa248
--- /dev/null
+++ b/data/libmad/libmad.thumb.diff
@@ -0,0 +1,14 @@
+From: Konstantinos Margaritis <markos@debian.org>
+Subject: use "adr" instead of "add" to make code ready for thumb2
+
+--- ./imdct_l_arm.S.orig 2010-02-25 13:25:23.000000000 +0100
++++ ./imdct_l_arm.S 2010-02-25 13:27:26.000000000 +0100
+@@ -468,7 +468,7 @@
+
+ @----
+
+- add r2, pc, #(imdct36_long_karray-.-8) @ r2 = base address of Knn array (PIC safe ?)
++ adr r2, imdct36_long_karray
+
+
+ loop:
diff --git a/data/libmad/make.sh b/data/libmad/make.sh
index 98abe07e6..91f1f6d38 100644
--- a/data/libmad/make.sh
+++ b/data/libmad/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+cp "${PKG_BASE}/config.sub" .
pkg:configure --disable-aso
-make
+make -j8
pkg:install
diff --git a/data/libmad/md_size.diff b/data/libmad/md_size.diff
new file mode 100644
index 000000000..657b5ffdb
--- /dev/null
+++ b/data/libmad/md_size.diff
@@ -0,0 +1,58 @@
+From: Kurt Roeckx <kurt@roeckx.be>
+Date: Sun, 28 Jan 2018 15:44:08 +0100
+Subject: Check the size of the main data
+
+The main data to decode a frame can come from the current frame and part of the
+previous frame, the so called bit reservoir. si.main_data_begin is the part of
+the previous frame we need for this frame. frame_space is the amount of main
+data that can be in this frame, and next_md_begin is the part of this frame that
+is going to be used for the next frame.
+
+The maximum amount of data from a previous frame that the format allows is 511
+bytes. The maximum frame size for the defined bitrates is at MPEG 2.5 layer 2
+at 320 kbit/s and 8 kHz sample rate which gives 72 * (320000 / 8000) + 1 = 2881.
+So those defines are not large enough:
+ # define MAD_BUFFER_GUARD 8
+ # define MAD_BUFFER_MDLEN (511 + 2048 + MAD_BUFFER_GUARD)
+
+There is also support for a "free" bitrate which allows you to create any frame
+size, which can be larger than the buffer.
+
+Changing the defines is not an option since it's part of the ABI, so we check
+that the main data fits in the bufer.
+
+The previous frame data is stored in *stream->main_data and contains
+stream->md_len bytes. If stream->md_len is larger than the data we
+need from the previous frame (si.main_data_begin) it still wouldn't fit
+in the buffer, so just keep the data that we need.
+
+Index: libmad-0.15.1b/layer3.c
+===================================================================
+--- libmad-0.15.1b.orig/layer3.c
++++ libmad-0.15.1b/layer3.c
+@@ -2608,6 +2608,11 @@ int mad_layer_III(struct mad_stream *str
+ next_md_begin = 0;
+
+ md_len = si.main_data_begin + frame_space - next_md_begin;
++ if (md_len + MAD_BUFFER_GUARD > MAD_BUFFER_MDLEN) {
++ stream->error = MAD_ERROR_LOSTSYNC;
++ stream->sync = 0;
++ return -1;
++ }
+
+ frame_used = 0;
+
+@@ -2625,8 +2630,11 @@ int mad_layer_III(struct mad_stream *str
+ }
+ }
+ else {
+- mad_bit_init(&ptr,
+- *stream->main_data + stream->md_len - si.main_data_begin);
++ memmove(stream->main_data,
++ *stream->main_data + stream->md_len - si.main_data_begin,
++ si.main_data_begin);
++ stream->md_len = si.main_data_begin;
++ mad_bit_init(&ptr, *stream->main_data);
+
+ if (md_len > si.main_data_begin) {
+ assert(stream->md_len + md_len -
diff --git a/data/libmad/mips-gcc4.4.diff b/data/libmad/mips-gcc4.4.diff
new file mode 100644
index 000000000..a82bea39d
--- /dev/null
+++ b/data/libmad/mips-gcc4.4.diff
@@ -0,0 +1,25 @@
+From: Aurelien Jarno <aurelien@aurel32.net>
+Subject: Different constraints for mips with gcc-4.4
+
+This asm constraints has been removed from gcc 4.4, that's why it was not
+failing before. See http://gcc.gnu.org/gcc-4.4/changes.html for more
+details, including a description of the new way to do it.
+
+--- libmad-0.15.1b.orig/fixed.h
++++ libmad-0.15.1b/fixed.h
+@@ -297,6 +297,14 @@
+
+ /* --- MIPS ---------------------------------------------------------------- */
+
++# elif defined(FPM_MIPS) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
++ typedef unsigned int u64_di_t __attribute__ ((mode (DI)));
++# define MAD_F_MLX(hi, lo, x, y) \
++ do { \
++ u64_di_t __ll = (u64_di_t) (x) * (y); \
++ hi = __ll >> 32; \
++ lo = __ll; \
++ } while (0)
+ # elif defined(FPM_MIPS)
+
+ /*
+
diff --git a/data/libmad/optimize.diff b/data/libmad/optimize.diff
new file mode 100644
index 000000000..1418dc927
--- /dev/null
+++ b/data/libmad/optimize.diff
@@ -0,0 +1,77 @@
+Index: libmad-0.15.1b/configure.ac
+===================================================================
+--- libmad-0.15.1b.orig/configure.ac 2008-03-07 20:31:23.000000000 +0000
++++ libmad-0.15.1b/configure.ac 2008-03-07 20:34:26.000000000 +0000
+@@ -124,71 +124,7 @@
+
+ if test "$GCC" = yes
+ then
+- if test -z "$arch"
+- then
+- case "$host" in
+- i386-*) ;;
+- i?86-*) arch="-march=i486" ;;
+- arm*-empeg-*) arch="-march=armv4 -mtune=strongarm1100" ;;
+- armv4*-*) arch="-march=armv4 -mtune=strongarm" ;;
+- powerpc-*) ;;
+- mips*-agenda-*) arch="-mcpu=vr4100" ;;
+- mips*-luxsonor-*) arch="-mips1 -mcpu=r3000 -Wa,-m4010" ;;
+- esac
+- fi
+-
+- case "$optimize" in
+- -O|"-O "*)
+- optimize="-O"
+- optimize="$optimize -fforce-mem"
+- optimize="$optimize -fforce-addr"
+- : #x optimize="$optimize -finline-functions"
+- : #- optimize="$optimize -fstrength-reduce"
+- optimize="$optimize -fthread-jumps"
+- optimize="$optimize -fcse-follow-jumps"
+- optimize="$optimize -fcse-skip-blocks"
+- : #x optimize="$optimize -frerun-cse-after-loop"
+- : #x optimize="$optimize -frerun-loop-opt"
+- : #x optimize="$optimize -fgcse"
+- optimize="$optimize -fexpensive-optimizations"
+- optimize="$optimize -fregmove"
+- : #* optimize="$optimize -fdelayed-branch"
+- : #x optimize="$optimize -fschedule-insns"
+- optimize="$optimize -fschedule-insns2"
+- : #? optimize="$optimize -ffunction-sections"
+- : #? optimize="$optimize -fcaller-saves"
+- : #> optimize="$optimize -funroll-loops"
+- : #> optimize="$optimize -funroll-all-loops"
+- : #x optimize="$optimize -fmove-all-movables"
+- : #x optimize="$optimize -freduce-all-givs"
+- : #? optimize="$optimize -fstrict-aliasing"
+- : #* optimize="$optimize -fstructure-noalias"
+-
+- case "$host" in
+- arm*-*)
+- optimize="$optimize -fstrength-reduce"
+- ;;
+- mips*-*)
+- optimize="$optimize -fstrength-reduce"
+- optimize="$optimize -finline-functions"
+- ;;
+- i?86-*)
+- optimize="$optimize -fstrength-reduce"
+- ;;
+- powerpc-apple-*)
+- # this triggers an internal compiler error with gcc2
+- : #optimize="$optimize -fstrength-reduce"
+-
+- # this is really only beneficial with gcc3
+- : #optimize="$optimize -finline-functions"
+- ;;
+- *)
+- # this sometimes provokes bugs in gcc 2.95.2
+- : #optimize="$optimize -fstrength-reduce"
+- ;;
+- esac
+- ;;
+- esac
++ optimize="-O2"
+ fi
+
+ case "$host" in
diff --git a/data/libnet/_metadata/in.1443.00 b/data/libnet/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libnet/_metadata/in.1443.00
diff --git a/data/libnet/_metadata/maintainer b/data/libnet/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libnet/_metadata/maintainer
+++ b/data/libnet/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libnghttp2/_metadata/conflicts b/data/libnghttp2/_metadata/conflicts
new file mode 100644
index 000000000..b67b7d0b5
--- /dev/null
+++ b/data/libnghttp2/_metadata/conflicts
@@ -0,0 +1 @@
+nghttp2
diff --git a/data/libnghttp2/_metadata/description b/data/libnghttp2/_metadata/description
new file mode 100644
index 000000000..18ad98d17
--- /dev/null
+++ b/data/libnghttp2/_metadata/description
@@ -0,0 +1 @@
+an implementation of HTTP/2 and its header compression algorithm HPACK in C.
diff --git a/data/libnghttp2/_metadata/homepage b/data/libnghttp2/_metadata/homepage
new file mode 100644
index 000000000..f8840b4b2
--- /dev/null
+++ b/data/libnghttp2/_metadata/homepage
@@ -0,0 +1 @@
+https://nghttp2.org/
diff --git a/data/libnghttp2/_metadata/in.1443.00 b/data/libnghttp2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libnghttp2/_metadata/in.1443.00
diff --git a/data/libnghttp2/_metadata/in.550.58 b/data/libnghttp2/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libnghttp2/_metadata/in.550.58
diff --git a/data/libnghttp2/_metadata/libevent.dep b/data/libnghttp2/_metadata/libevent.dep
new file mode 120000
index 000000000..c79b2082c
--- /dev/null
+++ b/data/libnghttp2/_metadata/libevent.dep
@@ -0,0 +1 @@
+../../libevent \ No newline at end of file
diff --git a/data/libnghttp2/_metadata/libssl1.0.dep b/data/libnghttp2/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/libnghttp2/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/libnghttp2/_metadata/license b/data/libnghttp2/_metadata/license
new file mode 100644
index 000000000..80201792e
--- /dev/null
+++ b/data/libnghttp2/_metadata/license
@@ -0,0 +1,23 @@
+The MIT License
+
+Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa
+Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/data/libnghttp2/_metadata/maintainer b/data/libnghttp2/_metadata/maintainer
new file mode 120000
index 000000000..febca4610
--- /dev/null
+++ b/data/libnghttp2/_metadata/maintainer
@@ -0,0 +1 @@
+../../_libxml2/_metadata/maintainer \ No newline at end of file
diff --git a/data/libnghttp2/_metadata/priority b/data/libnghttp2/_metadata/priority
new file mode 100644
index 000000000..a6a7b9cd7
--- /dev/null
+++ b/data/libnghttp2/_metadata/priority
@@ -0,0 +1 @@
+standard
diff --git a/data/libnghttp2/_metadata/provides b/data/libnghttp2/_metadata/provides
new file mode 100644
index 000000000..b67b7d0b5
--- /dev/null
+++ b/data/libnghttp2/_metadata/provides
@@ -0,0 +1 @@
+nghttp2
diff --git a/data/libnghttp2/_metadata/replaces b/data/libnghttp2/_metadata/replaces
new file mode 100644
index 000000000..b67b7d0b5
--- /dev/null
+++ b/data/libnghttp2/_metadata/replaces
@@ -0,0 +1 @@
+nghttp2
diff --git a/data/libnghttp2/_metadata/role b/data/libnghttp2/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libnghttp2/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libnghttp2/_metadata/section b/data/libnghttp2/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libnghttp2/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libnghttp2/_metadata/tags b/data/libnghttp2/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libnghttp2/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libnghttp2/_metadata/version b/data/libnghttp2/_metadata/version
new file mode 100644
index 000000000..359c41089
--- /dev/null
+++ b/data/libnghttp2/_metadata/version
@@ -0,0 +1 @@
+1.32.0
diff --git a/data/libnghttp2/make.sh b/data/libnghttp2/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/libnghttp2/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/libnghttp2/nghttp2-1.32.0.tar.xz b/data/libnghttp2/nghttp2-1.32.0.tar.xz
new file mode 100644
index 000000000..255ce79e2
--- /dev/null
+++ b/data/libnghttp2/nghttp2-1.32.0.tar.xz
Binary files differ
diff --git a/data/libnids/_metadata/in.1443.00 b/data/libnids/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libnids/_metadata/in.1443.00
diff --git a/data/libnids/_metadata/maintainer b/data/libnids/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libnids/_metadata/maintainer
+++ b/data/libnids/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libpar2/_metadata/in.1443.00 b/data/libpar2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libpar2/_metadata/in.1443.00
diff --git a/data/libpar2/make.sh b/data/libpar2/make.sh
index 452a4bfd5..814ddbb6b 100644
--- a/data/libpar2/make.sh
+++ b/data/libpar2/make.sh
@@ -1,4 +1,5 @@
pkg:setup
-pkg:configure
-make
+autoreconf -f -i
+PKG_CONFIG="$(realpath "${PKG_BASE}/util/pkg-config.sh")" ./configure ac_cv_prog_cc_g=no ac_cv_prog_cxx_g=no --build="$(${PKG_BASE}/util/config.guess)" --host="${PKG_TARG}" --enable-static=no --enable-shared=yes --prefix="$(cat "${PKG_BASE}/arch/${PKG_ARCH}/prefix")" --localstatedir="/var/cache/${PKG_NAME}" CFLAGS="-O2 -fno-common" CXXFLAGS="-O2 -fno-common -std=c++11"
+make -j8
pkg:install
diff --git a/data/libpar2/pkgconfig.diff b/data/libpar2/pkgconfig.diff
new file mode 100644
index 000000000..8ba03b688
--- /dev/null
+++ b/data/libpar2/pkgconfig.diff
@@ -0,0 +1,21 @@
+diff -ur libpar2-0.2/Makefile.am libpar2-0.2+iPhone/Makefile.am
+--- libpar2-0.2/Makefile.am 2006-02-26 11:40:08.000000000 -1000
++++ libpar2-0.2+iPhone/Makefile.am 2018-08-15 22:08:05.000000000 -1000
+@@ -47,8 +47,8 @@
+ verificationhashtable.cpp verificationhashtable.h \
+ verificationpacket.cpp verificationpacket.h
+
+-LDADD = -lstdc++ -lsigc-2.0
+-INCLUDES = `pkg-config sigc++-2.0 --cflags`
++LDADD = $(SIGC_LIBS)
++INCLUDES = $(SIGC_CFLAGS)
+ AM_CXXFLAGS = -Wall
+
+ EXTRA_DIST = PORTING ROADMAP debian/changelog debian/compat debian/control \
+@@ -68,4 +68,4 @@
+ libpar2_configdir = $(libdir)/libpar2/include
+ libpar2_config_DATA = config.h
+
+-libpar2_la_LDFLAGS = -version-info 0:1:0
+\ No newline at end of file
++libpar2_la_LDFLAGS = -version-info 0:1:0
diff --git a/data/libpcap/_metadata/in.1443.00 b/data/libpcap/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libpcap/_metadata/in.1443.00
diff --git a/data/libpcap/_metadata/maintainer b/data/libpcap/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libpcap/_metadata/maintainer
+++ b/data/libpcap/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libpcap/_metadata/version b/data/libpcap/_metadata/version
index 3eefcb9dd..f8e233b27 100644
--- a/data/libpcap/_metadata/version
+++ b/data/libpcap/_metadata/version
@@ -1 +1 @@
-1.0.0
+1.9.0
diff --git a/data/libpcap/libpcap-1.0.0.tar.gz b/data/libpcap/libpcap-1.0.0.tar.gz
deleted file mode 100644
index adb51b546..000000000
--- a/data/libpcap/libpcap-1.0.0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/libpcap/libpcap-1.9.0.tar.gz b/data/libpcap/libpcap-1.9.0.tar.gz
new file mode 100644
index 000000000..32ab5c6a8
--- /dev/null
+++ b/data/libpcap/libpcap-1.9.0.tar.gz
Binary files differ
diff --git a/data/libpcap/make.sh b/data/libpcap/make.sh
index c8f459dfd..b859c4a42 100644
--- a/data/libpcap/make.sh
+++ b/data/libpcap/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-pkg:configure --with-pcap=bpf
+pkg:configure --with-pcap=bpf --disable-universal CFLAGS="-O2 -fno-common -D__APPLE__ -DPRIVATE"
make
mkdir -p "${PKG_DEST}/usr/lib"
pkg: mkdir -p /usr/bin
diff --git a/data/libpipeline/_metadata/description b/data/libpipeline/_metadata/description
new file mode 100644
index 000000000..62d8ae979
--- /dev/null
+++ b/data/libpipeline/_metadata/description
@@ -0,0 +1 @@
+Library for manipulating pipelines of subprocesses
diff --git a/data/libpipeline/_metadata/homepage b/data/libpipeline/_metadata/homepage
new file mode 100644
index 000000000..cd7b8041e
--- /dev/null
+++ b/data/libpipeline/_metadata/homepage
@@ -0,0 +1 @@
+http://savannah.nongnu.org/projects/libpipeline
diff --git a/data/libpipeline/_metadata/in.1443.00 b/data/libpipeline/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libpipeline/_metadata/in.1443.00
diff --git a/data/libpipeline/_metadata/license b/data/libpipeline/_metadata/license
new file mode 120000
index 000000000..af4224931
--- /dev/null
+++ b/data/libpipeline/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-3 \ No newline at end of file
diff --git a/data/libpipeline/_metadata/maintainer b/data/libpipeline/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libpipeline/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pwncenter.com/_metadata/priority b/data/libpipeline/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/pwncenter.com/_metadata/priority
+++ b/data/libpipeline/_metadata/priority
diff --git a/data/libpipeline/_metadata/role b/data/libpipeline/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libpipeline/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libpipeline/_metadata/section b/data/libpipeline/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libpipeline/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libpipeline/_metadata/tags b/data/libpipeline/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libpipeline/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libpipeline/_metadata/version b/data/libpipeline/_metadata/version
new file mode 100644
index 000000000..bc80560fa
--- /dev/null
+++ b/data/libpipeline/_metadata/version
@@ -0,0 +1 @@
+1.5.0
diff --git a/data/libpipeline/libpipeline-1.5.0.tar.gz b/data/libpipeline/libpipeline-1.5.0.tar.gz
new file mode 100644
index 000000000..1c093b60c
--- /dev/null
+++ b/data/libpipeline/libpipeline-1.5.0.tar.gz
Binary files differ
diff --git a/data/libpipeline/make.sh b/data/libpipeline/make.sh
new file mode 100644
index 000000000..b78ddd2d2
--- /dev/null
+++ b/data/libpipeline/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make
+pkg:install
diff --git a/data/libpipeline/program_name.diff b/data/libpipeline/program_name.diff
new file mode 100644
index 000000000..f9d92c542
--- /dev/null
+++ b/data/libpipeline/program_name.diff
@@ -0,0 +1,17 @@
+diff -ur libpipeline-1.5.0/gnulib/lib/error.c libpipeline-1.5.0+iPhone/gnulib/lib/error.c
+--- libpipeline-1.5.0/gnulib/lib/error.c 2014-08-03 03:31:22.000000000 -1000
++++ libpipeline-1.5.0+iPhone/gnulib/lib/error.c 2018-12-14 11:20:28.000000000 -1000
+@@ -110,9 +110,13 @@
+ # endif
+ # endif
+
++#if defined __APPLE__ && defined __MACH__
++#define program_name (((char **)*_NSGetArgv())[0])
++#else
+ /* The calling program should define program_name and set it to the
+ name of the executing program. */
+ extern char *program_name;
++#endif
+
+ # if HAVE_STRERROR_R || defined strerror_r
+ # define __strerror_r strerror_r
diff --git a/data/libplist/_metadata/description b/data/libplist/_metadata/description
new file mode 100644
index 000000000..38110d75c
--- /dev/null
+++ b/data/libplist/_metadata/description
@@ -0,0 +1 @@
+plist library
diff --git a/data/libplist/_metadata/in.1443.00 b/data/libplist/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libplist/_metadata/in.1443.00
diff --git a/data/libplist/_metadata/license b/data/libplist/_metadata/license
new file mode 120000
index 000000000..577aa1598
--- /dev/null
+++ b/data/libplist/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/lgpl-2.1 \ No newline at end of file
diff --git a/data/libplist/_metadata/maintainer b/data/libplist/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libplist/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libplist/_metadata/priority b/data/libplist/_metadata/priority
new file mode 100644
index 000000000..a6a7b9cd7
--- /dev/null
+++ b/data/libplist/_metadata/priority
@@ -0,0 +1 @@
+standard
diff --git a/data/libplist/_metadata/role b/data/libplist/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libplist/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libplist/_metadata/section b/data/libplist/_metadata/section
new file mode 100644
index 000000000..8708e4b54
--- /dev/null
+++ b/data/libplist/_metadata/section
@@ -0,0 +1 @@
+Networking
diff --git a/data/libplist/_metadata/tags b/data/libplist/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libplist/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libplist/_metadata/version b/data/libplist/_metadata/version
new file mode 100644
index 000000000..227cea215
--- /dev/null
+++ b/data/libplist/_metadata/version
@@ -0,0 +1 @@
+2.0.0
diff --git a/data/libplist/libplist-2.0.0.tar.gz b/data/libplist/libplist-2.0.0.tar.gz
new file mode 100644
index 000000000..782c2189f
--- /dev/null
+++ b/data/libplist/libplist-2.0.0.tar.gz
Binary files differ
diff --git a/data/libplist/make.sh b/data/libplist/make.sh
new file mode 100644
index 000000000..730f93f4d
--- /dev/null
+++ b/data/libplist/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+autoreconf -f -i
+pkg:configure --without-cython
+pkg:make
+pkg:install
diff --git a/data/libresolv/_metadata/in.1443.00 b/data/libresolv/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libresolv/_metadata/in.1443.00
diff --git a/data/libresolv/_metadata/maintainer b/data/libresolv/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libresolv/_metadata/maintainer
+++ b/data/libresolv/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libresolv/_metadata/priority b/data/libresolv/_metadata/priority
index 1c96b78c1..134d9bc32 100644
--- a/data/libresolv/_metadata/priority
+++ b/data/libresolv/_metadata/priority
@@ -1 +1 @@
-+important
+optional
diff --git a/data/libresolv/make.sh b/data/libresolv/make.sh
index 26b76422c..497464128 100644
--- a/data/libresolv/make.sh
+++ b/data/libresolv/make.sh
@@ -5,5 +5,4 @@ declare -a flags
flags[${#flags[@]}]=-DNEED_PSELECT
"${PKG_TARG}-gcc" -fno-common !(dns_async).c -o libresolv.9.dylib -dynamiclib -I. -linfo -install_name /usr/lib/libresolv.9.dylib -compatibility_version 1.0.0 "${flags[@]}" -save-temps
pkg: mkdir -p /usr/lib
-pkg: cp -a libresolv.9.dylib /usr/lib
pkg: ln -s libresolv.9.dylib /usr/lib/libresolv.dylib
diff --git a/data/librpmatch/_metadata/description b/data/librpmatch/_metadata/description
new file mode 100644
index 000000000..203e9d0e2
--- /dev/null
+++ b/data/librpmatch/_metadata/description
@@ -0,0 +1 @@
+Xapian is an Open Source Search Engine Library
diff --git a/data/librpmatch/_metadata/in.1443.00 b/data/librpmatch/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/librpmatch/_metadata/in.1443.00
diff --git a/data/librpmatch/_metadata/license b/data/librpmatch/_metadata/license
new file mode 100644
index 000000000..e67cdf4f2
--- /dev/null
+++ b/data/librpmatch/_metadata/license
@@ -0,0 +1,29 @@
+Copyright (c) 2016, Jürgen Buchmüller
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/data/librpmatch/_metadata/maintainer b/data/librpmatch/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/librpmatch/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ranbee.com/_metadata/priority b/data/librpmatch/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/ranbee.com/_metadata/priority
+++ b/data/librpmatch/_metadata/priority
diff --git a/data/librpmatch/_metadata/role b/data/librpmatch/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/librpmatch/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/librpmatch/_metadata/section b/data/librpmatch/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/librpmatch/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/librpmatch/_metadata/tags b/data/librpmatch/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/librpmatch/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/librpmatch/_metadata/version b/data/librpmatch/_metadata/version
new file mode 100644
index 000000000..d3827e75a
--- /dev/null
+++ b/data/librpmatch/_metadata/version
@@ -0,0 +1 @@
+1.0
diff --git a/data/librpmatch/cpp.diff b/data/librpmatch/cpp.diff
new file mode 100644
index 000000000..9f559f45c
--- /dev/null
+++ b/data/librpmatch/cpp.diff
@@ -0,0 +1,22 @@
+diff -ur musl-rpmatch-1.0/rpmatch.h musl-rpmatch-1.0+iPhone/rpmatch.h
+--- musl-rpmatch-1.0/rpmatch.h 2016-07-07 03:31:00.000000000 -1000
++++ musl-rpmatch-1.0+iPhone/rpmatch.h 2018-08-31 15:41:43.000000000 -1000
+@@ -1,6 +1,9 @@
+ #if !defined(_RPMATCH_H_)
+ #define _RPMATCH_H_
+
++#ifdef __cplusplus
++extern "C" {
++#endif
+ /*
+ * Determine whether the string value of RESPONSE matches the affirmation
+ * or negative response expression as specified by the LC_MESSAGES category
+@@ -8,5 +11,8 @@
+ * negative, and -1 if not matching.
+ */
+ extern int rpmatch (const char *response);
++#ifdef __cplusplus
++}
++#endif
+
+ #endif /* !defined(_RPMATCH_H_) */
diff --git a/data/librpmatch/make.sh b/data/librpmatch/make.sh
new file mode 100644
index 000000000..01b1e1557
--- /dev/null
+++ b/data/librpmatch/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+autoreconf -f -i
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/librpmatch/rpmatch-1.0.tar.gz b/data/librpmatch/rpmatch-1.0.tar.gz
new file mode 100644
index 000000000..9c8bd01f5
--- /dev/null
+++ b/data/librpmatch/rpmatch-1.0.tar.gz
Binary files differ
diff --git a/data/libsamplerate/_metadata/in.1443.00 b/data/libsamplerate/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libsamplerate/_metadata/in.1443.00
diff --git a/data/libsamplerate/_metadata/libfftw3.dep b/data/libsamplerate/_metadata/libfftw3.dep
new file mode 120000
index 000000000..8fddea995
--- /dev/null
+++ b/data/libsamplerate/_metadata/libfftw3.dep
@@ -0,0 +1 @@
+../../libfftw3 \ No newline at end of file
diff --git a/data/libsamplerate/_metadata/maintainer b/data/libsamplerate/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libsamplerate/_metadata/maintainer
+++ b/data/libsamplerate/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libsamplerate/make.sh b/data/libsamplerate/make.sh
index 452a4bfd5..baecee47e 100644
--- a/data/libsamplerate/make.sh
+++ b/data/libsamplerate/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+cp "${PKG_BASE}/config.sub" .
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/libserf/_metadata/apr-lib.dep b/data/libserf/_metadata/apr-lib.dep
new file mode 120000
index 000000000..82332fb1d
--- /dev/null
+++ b/data/libserf/_metadata/apr-lib.dep
@@ -0,0 +1 @@
+../../apr-lib \ No newline at end of file
diff --git a/data/libserf/_metadata/apr-util.dep b/data/libserf/_metadata/apr-util.dep
new file mode 120000
index 000000000..a78d94c6b
--- /dev/null
+++ b/data/libserf/_metadata/apr-util.dep
@@ -0,0 +1 @@
+../../apr-util \ No newline at end of file
diff --git a/data/libserf/_metadata/description b/data/libserf/_metadata/description
new file mode 100644
index 000000000..00511c681
--- /dev/null
+++ b/data/libserf/_metadata/description
@@ -0,0 +1 @@
+a high performance C-based HTTP client library built upon the Apache Portable Runtime (APR) library.
diff --git a/data/libserf/_metadata/expat.dep b/data/libserf/_metadata/expat.dep
new file mode 120000
index 000000000..2100fb19e
--- /dev/null
+++ b/data/libserf/_metadata/expat.dep
@@ -0,0 +1 @@
+../../expat \ No newline at end of file
diff --git a/data/libserf/_metadata/homepage b/data/libserf/_metadata/homepage
new file mode 100644
index 000000000..b4a4eedde
--- /dev/null
+++ b/data/libserf/_metadata/homepage
@@ -0,0 +1 @@
+https://serf.apache.org/
diff --git a/data/libserf/_metadata/in.1443.00 b/data/libserf/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libserf/_metadata/in.1443.00
diff --git a/data/libserf/_metadata/libssl1.0.dep b/data/libserf/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/libserf/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/libserf/_metadata/license b/data/libserf/_metadata/license
new file mode 120000
index 000000000..d0b14a610
--- /dev/null
+++ b/data/libserf/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/apache-2.0 \ No newline at end of file
diff --git a/data/libserf/_metadata/maintainer b/data/libserf/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libserf/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libserf/_metadata/priority b/data/libserf/_metadata/priority
new file mode 100644
index 000000000..a6a7b9cd7
--- /dev/null
+++ b/data/libserf/_metadata/priority
@@ -0,0 +1 @@
+standard
diff --git a/data/libserf/_metadata/role b/data/libserf/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libserf/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libserf/_metadata/section b/data/libserf/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libserf/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libserf/_metadata/tags b/data/libserf/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libserf/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libserf/_metadata/version b/data/libserf/_metadata/version
new file mode 100644
index 000000000..d4c4950a3
--- /dev/null
+++ b/data/libserf/_metadata/version
@@ -0,0 +1 @@
+1.3.9
diff --git a/data/libserf/make.sh b/data/libserf/make.sh
new file mode 100644
index 000000000..a01af491e
--- /dev/null
+++ b/data/libserf/make.sh
@@ -0,0 +1,8 @@
+pkg:setup
+export PATH
+SCONS="scons APR=\"$(echo $(PKG_WORK_ _apr)/*/apr-1-config)\" APU=\"$(echo $(PKG_WORK_ apr-util)/*/apu-1-config)\" OPENSSL=\"$(PKG_DEST_ _openssl1.0)/usr\" PREFIX=/usr LIBDIR=/usr/lib CC=\"$(which ${PKG_TARG}-gcc)\" SOURCE_LAYOUT=1 LINKFLAGS=\"-L$(PKG_DEST_ _apr)/usr/lib -L$(PKG_DEST_ apr-util)/usr/lib -L$(PKG_DEST_ expat)/usr/lib\""
+echo ${SCONS}
+eval ${SCONS}
+mkdir -p "$(PKG_DEST_ libserf)"
+scons install --install-sandbox="$(PKG_DEST_ libserf)"
+pkg: rm /usr/lib/libserf-1.a
diff --git a/data/libserf/serf-1.3.9.tar.bz2 b/data/libserf/serf-1.3.9.tar.bz2
new file mode 100644
index 000000000..734f2366a
--- /dev/null
+++ b/data/libserf/serf-1.3.9.tar.bz2
Binary files differ
diff --git a/data/libsigc++/_metadata/in.1443.00 b/data/libsigc++/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libsigc++/_metadata/in.1443.00
diff --git a/data/libsigc++/_metadata/version b/data/libsigc++/_metadata/version
index 585940699..10c2c0c3d 100644
--- a/data/libsigc++/_metadata/version
+++ b/data/libsigc++/_metadata/version
@@ -1 +1 @@
-2.2.3
+2.10.0
diff --git a/data/libsigc++/libsigc++-2.10.0.tar.xz b/data/libsigc++/libsigc++-2.10.0.tar.xz
new file mode 100644
index 000000000..634aadb41
--- /dev/null
+++ b/data/libsigc++/libsigc++-2.10.0.tar.xz
Binary files differ
diff --git a/data/libsigc++/libsigc++-2.2.3.tar.bz2 b/data/libsigc++/libsigc++-2.2.3.tar.bz2
deleted file mode 100644
index 3acedf14e..000000000
--- a/data/libsigc++/libsigc++-2.2.3.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/libsigc++/make.sh b/data/libsigc++/make.sh
index b78ddd2d2..e2c5ac499 100644
--- a/data/libsigc++/make.sh
+++ b/data/libsigc++/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-pkg:make
+make V=1 -j8
pkg:install
diff --git a/data/libsigc++3.0/_metadata/description b/data/libsigc++3.0/_metadata/description
new file mode 100644
index 000000000..8422124b1
--- /dev/null
+++ b/data/libsigc++3.0/_metadata/description
@@ -0,0 +1 @@
+callback framework for C++
diff --git a/data/libsigc++3.0/_metadata/license b/data/libsigc++3.0/_metadata/license
new file mode 120000
index 000000000..577aa1598
--- /dev/null
+++ b/data/libsigc++3.0/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/lgpl-2.1 \ No newline at end of file
diff --git a/data/pam/_metadata/maintainer b/data/libsigc++3.0/_metadata/maintainer
index 0fa66e077..0fa66e077 120000
--- a/data/pam/_metadata/maintainer
+++ b/data/libsigc++3.0/_metadata/maintainer
diff --git a/data/ripdev/_metadata/priority b/data/libsigc++3.0/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/ripdev/_metadata/priority
+++ b/data/libsigc++3.0/_metadata/priority
diff --git a/data/libsigc++3.0/_metadata/role b/data/libsigc++3.0/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libsigc++3.0/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libsigc++3.0/_metadata/section b/data/libsigc++3.0/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libsigc++3.0/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libsigc++3.0/_metadata/tags b/data/libsigc++3.0/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libsigc++3.0/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libsigc++3.0/_metadata/version b/data/libsigc++3.0/_metadata/version
new file mode 100644
index 000000000..e42e9b411
--- /dev/null
+++ b/data/libsigc++3.0/_metadata/version
@@ -0,0 +1 @@
+2.99.11
diff --git a/data/libsigc++3.0/libsigc++-2.99.11.tar.xz b/data/libsigc++3.0/libsigc++-2.99.11.tar.xz
new file mode 100644
index 000000000..73f7ba797
--- /dev/null
+++ b/data/libsigc++3.0/libsigc++-2.99.11.tar.xz
Binary files differ
diff --git a/data/libsigc++3.0/make.sh b/data/libsigc++3.0/make.sh
new file mode 100644
index 000000000..e2c5ac499
--- /dev/null
+++ b/data/libsigc++3.0/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+make V=1 -j8
+pkg:install
diff --git a/data/libssh2/_metadata/description b/data/libssh2/_metadata/description
new file mode 100644
index 000000000..dffe05052
--- /dev/null
+++ b/data/libssh2/_metadata/description
@@ -0,0 +1 @@
+a client-side C library implementing the SSH2 protocol
diff --git a/data/libssh2/_metadata/homepage b/data/libssh2/_metadata/homepage
new file mode 100644
index 000000000..a8d14c261
--- /dev/null
+++ b/data/libssh2/_metadata/homepage
@@ -0,0 +1 @@
+https://www.libssh2.org/
diff --git a/data/libssh2/_metadata/in.1443.00 b/data/libssh2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libssh2/_metadata/in.1443.00
diff --git a/data/libssh2/_metadata/in.550.58 b/data/libssh2/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libssh2/_metadata/in.550.58
diff --git a/data/libssh2/_metadata/libssl1.0.dep b/data/libssh2/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/libssh2/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/libssh2/_metadata/license b/data/libssh2/_metadata/license
new file mode 100644
index 000000000..f8044df30
--- /dev/null
+++ b/data/libssh2/_metadata/license
@@ -0,0 +1,41 @@
+/* Copyright (c) 2004-2007 Sara Golemon <sarag@libssh2.org>
+ * Copyright (c) 2005,2006 Mikhail Gusarov <dottedmag@dottedmag.net>
+ * Copyright (c) 2006-2007 The Written Word, Inc.
+ * Copyright (c) 2007 Eli Fant <elifantu@mail.ru>
+ * Copyright (c) 2009-2014 Daniel Stenberg
+ * Copyright (C) 2008, 2009 Simon Josefsson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the copyright holder nor the names
+ * of any other contributors may be used to endorse or
+ * promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
diff --git a/data/libssh2/_metadata/maintainer b/data/libssh2/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libssh2/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/sosiphone.com/_metadata/priority b/data/libssh2/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/sosiphone.com/_metadata/priority
+++ b/data/libssh2/_metadata/priority
diff --git a/data/libssh2/_metadata/role b/data/libssh2/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libssh2/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libssh2/_metadata/section b/data/libssh2/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libssh2/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libssh2/_metadata/tags b/data/libssh2/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libssh2/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libssh2/_metadata/version b/data/libssh2/_metadata/version
new file mode 100644
index 000000000..27f9cd322
--- /dev/null
+++ b/data/libssh2/_metadata/version
@@ -0,0 +1 @@
+1.8.0
diff --git a/data/libssh2/libssh2-1.8.0.tar.gz b/data/libssh2/libssh2-1.8.0.tar.gz
new file mode 100644
index 000000000..c5f3e9e6c
--- /dev/null
+++ b/data/libssh2/libssh2-1.8.0.tar.gz
Binary files differ
diff --git a/data/libssh2/make.sh b/data/libssh2/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/libssh2/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/libssl-dev/_metadata/_openssl1.0.dep b/data/libssl-dev/_metadata/_openssl1.0.dep
new file mode 120000
index 000000000..7ff94c52c
--- /dev/null
+++ b/data/libssl-dev/_metadata/_openssl1.0.dep
@@ -0,0 +1 @@
+../../_openssl1.0 \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/description b/data/libssl-dev/_metadata/description
new file mode 100644
index 000000000..0f17498f7
--- /dev/null
+++ b/data/libssl-dev/_metadata/description
@@ -0,0 +1 @@
+OpenSSL Libraries for version 1.0
diff --git a/data/libssl-dev/_metadata/in.1443.00 b/data/libssl-dev/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libssl-dev/_metadata/in.1443.00
diff --git a/data/libssl-dev/_metadata/in.550.58 b/data/libssl-dev/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libssl-dev/_metadata/in.550.58
diff --git a/data/libssl-dev/_metadata/libssl1.0.dep b/data/libssl-dev/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/libssl-dev/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/libssl1.0.ver.iphoneos-arm b/data/libssl-dev/_metadata/libssl1.0.ver.iphoneos-arm
new file mode 120000
index 000000000..827dd0dfb
--- /dev/null
+++ b/data/libssl-dev/_metadata/libssl1.0.ver.iphoneos-arm
@@ -0,0 +1 @@
+../../libssl1.0/_metadata/version \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/license b/data/libssl-dev/_metadata/license
new file mode 120000
index 000000000..88ecc67af
--- /dev/null
+++ b/data/libssl-dev/_metadata/license
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/license \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/maintainer b/data/libssl-dev/_metadata/maintainer
new file mode 120000
index 000000000..9feba3530
--- /dev/null
+++ b/data/libssl-dev/_metadata/maintainer
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/maintainer \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/name b/data/libssl-dev/_metadata/name
new file mode 100644
index 000000000..ab59700c1
--- /dev/null
+++ b/data/libssl-dev/_metadata/name
@@ -0,0 +1 @@
+OpenSSL 1.0 Libraries
diff --git a/data/libssl-dev/_metadata/priority b/data/libssl-dev/_metadata/priority
new file mode 120000
index 000000000..7b8c4d01f
--- /dev/null
+++ b/data/libssl-dev/_metadata/priority
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/priority \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/role b/data/libssl-dev/_metadata/role
new file mode 120000
index 000000000..2948edd45
--- /dev/null
+++ b/data/libssl-dev/_metadata/role
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/role \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/section b/data/libssl-dev/_metadata/section
new file mode 120000
index 000000000..4372ae2c4
--- /dev/null
+++ b/data/libssl-dev/_metadata/section
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/section \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/tags b/data/libssl-dev/_metadata/tags
new file mode 120000
index 000000000..575278f73
--- /dev/null
+++ b/data/libssl-dev/_metadata/tags
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/tags \ No newline at end of file
diff --git a/data/libssl-dev/_metadata/version b/data/libssl-dev/_metadata/version
new file mode 120000
index 000000000..7c50f5d10
--- /dev/null
+++ b/data/libssl-dev/_metadata/version
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/version \ No newline at end of file
diff --git a/data/libssl-dev/make.sh b/data/libssl-dev/make.sh
new file mode 100644
index 000000000..8a714aee1
--- /dev/null
+++ b/data/libssl-dev/make.sh
@@ -0,0 +1,3 @@
+pkg: mkdir -p /usr/lib /usr/include
+cp -a "$(PKG_DEST_ _openssl1.0)"/usr/lib/{lib{ssl,crypto}.dylib,pkgconfig} "${PKG_DEST}"/usr/lib
+cp -a "$(PKG_DEST_ _openssl1.0)"/usr/include "${PKG_DEST}"/usr
diff --git a/data/libssl0.9.8/_metadata/_openssl0.9.8.dep b/data/libssl0.9.8/_metadata/_openssl0.9.8.dep
new file mode 120000
index 000000000..ff75a5b25
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/_openssl0.9.8.dep
@@ -0,0 +1 @@
+../../_openssl0.9.8 \ No newline at end of file
diff --git a/data/libssl0.9.8/_metadata/conflicts b/data/libssl0.9.8/_metadata/conflicts
new file mode 100644
index 000000000..3cbc3925d
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/conflicts
@@ -0,0 +1 @@
+openssl (<<1.0)
diff --git a/data/libssl0.9.8/_metadata/description b/data/libssl0.9.8/_metadata/description
new file mode 100644
index 000000000..0f17498f7
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/description
@@ -0,0 +1 @@
+OpenSSL Libraries for version 1.0
diff --git a/data/libssl0.9.8/_metadata/in.1443.00 b/data/libssl0.9.8/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/in.1443.00
diff --git a/data/libssl0.9.8/_metadata/in.550.58 b/data/libssl0.9.8/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/in.550.58
diff --git a/data/libssl0.9.8/_metadata/license b/data/libssl0.9.8/_metadata/license
new file mode 120000
index 000000000..1984d7204
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/license
@@ -0,0 +1 @@
+../../_openssl0.9.8/_metadata/license \ No newline at end of file
diff --git a/data/libssl0.9.8/_metadata/maintainer b/data/libssl0.9.8/_metadata/maintainer
new file mode 120000
index 000000000..906a1a514
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/maintainer
@@ -0,0 +1 @@
+../../_openssl0.9.8/_metadata/maintainer \ No newline at end of file
diff --git a/data/libssl0.9.8/_metadata/name b/data/libssl0.9.8/_metadata/name
new file mode 100644
index 000000000..19b388e20
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/name
@@ -0,0 +1 @@
+OpenSSL 0.9.8 Libraries
diff --git a/data/libssl0.9.8/_metadata/priority b/data/libssl0.9.8/_metadata/priority
new file mode 120000
index 000000000..e6d907f23
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/priority
@@ -0,0 +1 @@
+../../_openssl0.9.8/_metadata/priority \ No newline at end of file
diff --git a/data/libssl0.9.8/_metadata/role b/data/libssl0.9.8/_metadata/role
new file mode 120000
index 000000000..d64edd8a2
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/role
@@ -0,0 +1 @@
+../../_openssl0.9.8/_metadata/role \ No newline at end of file
diff --git a/data/libssl0.9.8/_metadata/section b/data/libssl0.9.8/_metadata/section
new file mode 120000
index 000000000..7508fbffb
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/section
@@ -0,0 +1 @@
+../../_openssl0.9.8/_metadata/section \ No newline at end of file
diff --git a/data/libssl0.9.8/_metadata/tags b/data/libssl0.9.8/_metadata/tags
new file mode 120000
index 000000000..c72fbcd8a
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/tags
@@ -0,0 +1 @@
+../../_openssl0.9.8/_metadata/tags \ No newline at end of file
diff --git a/data/libssl0.9.8/_metadata/version b/data/libssl0.9.8/_metadata/version
new file mode 120000
index 000000000..f847ca867
--- /dev/null
+++ b/data/libssl0.9.8/_metadata/version
@@ -0,0 +1 @@
+../../_openssl0.9.8/_metadata/version \ No newline at end of file
diff --git a/data/libssl0.9.8/make.sh b/data/libssl0.9.8/make.sh
new file mode 100644
index 000000000..498514130
--- /dev/null
+++ b/data/libssl0.9.8/make.sh
@@ -0,0 +1,3 @@
+pkg: mkdir -p /usr/lib
+cp -a "$(PKG_DEST_ _openssl0.9.8)"/usr/lib "${PKG_DEST}"/usr
+pkg: rm -rf /usr/lib/{lib{ssl,crypto}.dylib,ssl,pkgconfig}
diff --git a/data/libssl1.0/_metadata/_openssl1.0.dep b/data/libssl1.0/_metadata/_openssl1.0.dep
new file mode 120000
index 000000000..7ff94c52c
--- /dev/null
+++ b/data/libssl1.0/_metadata/_openssl1.0.dep
@@ -0,0 +1 @@
+../../_openssl1.0 \ No newline at end of file
diff --git a/data/libssl1.0/_metadata/conflicts b/data/libssl1.0/_metadata/conflicts
new file mode 100644
index 000000000..9116e75b4
--- /dev/null
+++ b/data/libssl1.0/_metadata/conflicts
@@ -0,0 +1 @@
+openssl (<<1.0.2q)
diff --git a/data/libssl1.0/_metadata/depends b/data/libssl1.0/_metadata/depends
new file mode 100644
index 000000000..a779e5d04
--- /dev/null
+++ b/data/libssl1.0/_metadata/depends
@@ -0,0 +1 @@
+ca-certificates
diff --git a/data/libssl1.0/_metadata/description b/data/libssl1.0/_metadata/description
new file mode 100644
index 000000000..0f17498f7
--- /dev/null
+++ b/data/libssl1.0/_metadata/description
@@ -0,0 +1 @@
+OpenSSL Libraries for version 1.0
diff --git a/data/libssl1.0/_metadata/in.1443.00 b/data/libssl1.0/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libssl1.0/_metadata/in.1443.00
diff --git a/data/libssl1.0/_metadata/in.550.58 b/data/libssl1.0/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libssl1.0/_metadata/in.550.58
diff --git a/data/libssl1.0/_metadata/license b/data/libssl1.0/_metadata/license
new file mode 120000
index 000000000..88ecc67af
--- /dev/null
+++ b/data/libssl1.0/_metadata/license
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/license \ No newline at end of file
diff --git a/data/libssl1.0/_metadata/maintainer b/data/libssl1.0/_metadata/maintainer
new file mode 120000
index 000000000..9feba3530
--- /dev/null
+++ b/data/libssl1.0/_metadata/maintainer
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/maintainer \ No newline at end of file
diff --git a/data/libssl1.0/_metadata/name b/data/libssl1.0/_metadata/name
new file mode 100644
index 000000000..ab59700c1
--- /dev/null
+++ b/data/libssl1.0/_metadata/name
@@ -0,0 +1 @@
+OpenSSL 1.0 Libraries
diff --git a/data/libssl1.0/_metadata/priority b/data/libssl1.0/_metadata/priority
new file mode 120000
index 000000000..7b8c4d01f
--- /dev/null
+++ b/data/libssl1.0/_metadata/priority
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/priority \ No newline at end of file
diff --git a/data/libssl1.0/_metadata/role b/data/libssl1.0/_metadata/role
new file mode 120000
index 000000000..2948edd45
--- /dev/null
+++ b/data/libssl1.0/_metadata/role
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/role \ No newline at end of file
diff --git a/data/libssl1.0/_metadata/section b/data/libssl1.0/_metadata/section
new file mode 120000
index 000000000..4372ae2c4
--- /dev/null
+++ b/data/libssl1.0/_metadata/section
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/section \ No newline at end of file
diff --git a/data/libssl1.0/_metadata/tags b/data/libssl1.0/_metadata/tags
new file mode 120000
index 000000000..575278f73
--- /dev/null
+++ b/data/libssl1.0/_metadata/tags
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/tags \ No newline at end of file
diff --git a/data/libssl1.0/_metadata/version b/data/libssl1.0/_metadata/version
new file mode 120000
index 000000000..7c50f5d10
--- /dev/null
+++ b/data/libssl1.0/_metadata/version
@@ -0,0 +1 @@
+../../_openssl1.0/_metadata/version \ No newline at end of file
diff --git a/data/libssl1.0/make.sh b/data/libssl1.0/make.sh
new file mode 100644
index 000000000..20fb6b7ba
--- /dev/null
+++ b/data/libssl1.0/make.sh
@@ -0,0 +1,3 @@
+pkg: mkdir -p /usr/lib
+cp -a "$(PKG_DEST_ _openssl1.0)"/usr/lib "${PKG_DEST}"/usr
+pkg: rm -rf /usr/lib/{lib{ssl,crypto}.dylib,ssl,pkgconfig}
diff --git a/data/libstdc++/_metadata/in.1443.00 b/data/libstdc++/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libstdc++/_metadata/in.1443.00
diff --git a/data/libstdc++/_metadata/maintainer b/data/libstdc++/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libstdc++/_metadata/maintainer
+++ b/data/libstdc++/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libtapi/_metadata/description b/data/libtapi/_metadata/description
new file mode 100644
index 000000000..f5e5fb119
--- /dev/null
+++ b/data/libtapi/_metadata/description
@@ -0,0 +1 @@
+a text file format for describing the contents of a shared library file on Apple's MacOS computer operating system
diff --git a/data/libtapi/_metadata/in.1443.00 b/data/libtapi/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libtapi/_metadata/in.1443.00
diff --git a/data/libtapi/_metadata/license b/data/libtapi/_metadata/license
new file mode 120000
index 000000000..eea9de8d1
--- /dev/null
+++ b/data/libtapi/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/bsd \ No newline at end of file
diff --git a/data/libtapi/_metadata/maintainer b/data/libtapi/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libtapi/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/srt10coupe.de/_metadata/priority b/data/libtapi/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/srt10coupe.de/_metadata/priority
+++ b/data/libtapi/_metadata/priority
diff --git a/data/libtapi/_metadata/section b/data/libtapi/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libtapi/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libtapi/_metadata/tags b/data/libtapi/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/libtapi/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/libtapi/_metadata/version b/data/libtapi/_metadata/version
new file mode 100644
index 000000000..227cea215
--- /dev/null
+++ b/data/libtapi/_metadata/version
@@ -0,0 +1 @@
+2.0.0
diff --git a/data/libtapi/apple-libtapi.tar.gz b/data/libtapi/apple-libtapi.tar.gz
new file mode 100644
index 000000000..ab2c0202b
--- /dev/null
+++ b/data/libtapi/apple-libtapi.tar.gz
Binary files differ
diff --git a/data/libtapi/make.sh b/data/libtapi/make.sh
new file mode 100644
index 000000000..644d8f6bf
--- /dev/null
+++ b/data/libtapi/make.sh
@@ -0,0 +1,36 @@
+pkg:setup
+mkdir native
+cd native
+MACOSX_DEPLOYMENT_TARGET="$(sw_vers -productVersion | sed -e 's/\.[0-9]*$//')" CC="$(xcrun -f clang)" CXX="$(xcrun -f clang++)" cmake -j16 -DLLVM_BUILD_LLVM_DYLIB=ON -DCMAKE_BUILD_TYPE=RELEASE -DLLVM_INCLUDE_TESTS=OFF ../src/llvm
+make -j16 llvm-tblgen clang-tblgen
+cd ..
+mkdir build
+cd build
+
+cat >iphoneos_toolchain.cmake <<EOF
+set(CMAKE_SYSTEM_NAME Darwin) # Tell CMake we're cross-compiling
+set(CMAKE_CROSSCOMPILING true)
+#include(CMakeForceCompiler)
+# Prefix detection only works with compiler id "GNU"
+# CMake will look for prefixed g++, cpp, ld, etc. automatically
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(triple ${PKG_TARG})
+set(CMAKE_FIND_ROOT_PATH $(echo ${PKG_PATH} | sed -e s/:/' '/g))
+set(CMAKE_LIBRARY_PATH $(echo ${LIBRARY_PATH} | sed -e s/:/' '/g))
+set(CMAKE_INCLUDE_PATH $(echo ${INCLUDE_PATH} | sed -e s/:/' '/g))
+set(CMAKE_C_COMPILER ${PKG_TARG}-gcc)
+set(CMAKE_CXX_COMPILER ${PKG_TARG}-g++)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+EOF
+
+unset MACOSX_DEPLOYMENT_TARGET
+cmake -j8 -DCMAKE_TOOLCHAIN_FILE=iphoneos_toolchain.cmake -DCMAKE_INSTALL_NAME_DIR="/usr/lib" -DCMAKE_INSTALL_RPATH="/usr/" -DCMAKE_OSX_SYSROOT="${PKG_ROOT}" -DCMAKE_INSTALL_PREFIX="/usr/" -DCMAKE_SHARED_LINKER_FLAGS="-lresolv" -DLLVM_INCLUDE_TESTS=OFF -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_SYSTEM_NAME=Darwin -DLLVM_TABLEGEN="$(pwd)/../native/bin/llvm-tblgen" -DCLANG_TABLEGEN="$(pwd)/../native/bin/clang-tblgen" -DLLVM_DEFAULT_TARGET_TRIPLE="${PKG_TARG}" -DLLVM_TARGETS_TO_BUILD=AArch64 ../src/llvm
+
+make -j16 libtapi
+make install-libtapi DESTDIR="${PKG_DEST}"
+pkg: mkdir -p /usr/include/tapi
+pkg: cp -va ../src/libtapi/include/tapi /usr/include
+pkg: cp -va projects/libtapi/include/tapi/Version.inc /usr/include/tapi
+cd ..
diff --git a/data/libtasn1/_metadata/description b/data/libtasn1/_metadata/description
new file mode 100644
index 000000000..003996f74
--- /dev/null
+++ b/data/libtasn1/_metadata/description
@@ -0,0 +1 @@
+Libtasn1 is the ASN.1 library used by GnuTLS, p11-kit and some other packages
diff --git a/data/libtasn1/_metadata/homepage b/data/libtasn1/_metadata/homepage
new file mode 100644
index 000000000..b97311e7c
--- /dev/null
+++ b/data/libtasn1/_metadata/homepage
@@ -0,0 +1 @@
+https://www.gnu.org/software/libtasn1
diff --git a/data/libtasn1/_metadata/in.1443.00 b/data/libtasn1/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libtasn1/_metadata/in.1443.00
diff --git a/data/libtasn1/_metadata/license b/data/libtasn1/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/libtasn1/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/libtasn1/_metadata/maintainer b/data/libtasn1/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libtasn1/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/touch-mania.com/_metadata/priority b/data/libtasn1/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/touch-mania.com/_metadata/priority
+++ b/data/libtasn1/_metadata/priority
diff --git a/data/libtasn1/_metadata/role b/data/libtasn1/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libtasn1/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libtasn1/_metadata/section b/data/libtasn1/_metadata/section
new file mode 100644
index 000000000..4b487b7d5
--- /dev/null
+++ b/data/libtasn1/_metadata/section
@@ -0,0 +1 @@
+Security
diff --git a/data/libtasn1/_metadata/tags b/data/libtasn1/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libtasn1/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libtasn1/_metadata/version b/data/libtasn1/_metadata/version
new file mode 100644
index 000000000..8c3a0151b
--- /dev/null
+++ b/data/libtasn1/_metadata/version
@@ -0,0 +1 @@
+4.13
diff --git a/data/libtasn1/libtasn1-4.13.tar.gz b/data/libtasn1/libtasn1-4.13.tar.gz
new file mode 100644
index 000000000..dbcfc7f8f
--- /dev/null
+++ b/data/libtasn1/libtasn1-4.13.tar.gz
Binary files differ
diff --git a/data/libtasn1/make.sh b/data/libtasn1/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/libtasn1/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/libterm-readline-perl-perl/Term-ReadLine-Perl-1.0303.tar.gz b/data/libterm-readline-perl-perl/Term-ReadLine-Perl-1.0303.tar.gz
new file mode 100644
index 000000000..1ad76b65d
--- /dev/null
+++ b/data/libterm-readline-perl-perl/Term-ReadLine-Perl-1.0303.tar.gz
Binary files differ
diff --git a/data/libterm-readline-perl-perl/_metadata/description b/data/libterm-readline-perl-perl/_metadata/description
new file mode 100644
index 000000000..8664a6331
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/description
@@ -0,0 +1 @@
+Perl implementation of Readline libraries
diff --git a/data/libterm-readline-perl-perl/_metadata/in.1443.00 b/data/libterm-readline-perl-perl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/in.1443.00
diff --git a/data/libterm-readline-perl-perl/_metadata/in.550.58 b/data/libterm-readline-perl-perl/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/in.550.58
diff --git a/data/libterm-readline-perl-perl/_metadata/license b/data/libterm-readline-perl-perl/_metadata/license
new file mode 100644
index 000000000..43cd72c3e
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/license
@@ -0,0 +1,248 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/data/libterm-readline-perl-perl/_metadata/maintainer b/data/libterm-readline-perl-perl/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libterm-readline-perl-perl/_metadata/perl.dep b/data/libterm-readline-perl-perl/_metadata/perl.dep
new file mode 120000
index 000000000..899dc46ed
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/perl.dep
@@ -0,0 +1 @@
+../../perl \ No newline at end of file
diff --git a/data/urbanfanatics.com/_metadata/priority b/data/libterm-readline-perl-perl/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/urbanfanatics.com/_metadata/priority
+++ b/data/libterm-readline-perl-perl/_metadata/priority
diff --git a/data/libterm-readline-perl-perl/_metadata/role b/data/libterm-readline-perl-perl/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/libterm-readline-perl-perl/_metadata/section b/data/libterm-readline-perl-perl/_metadata/section
new file mode 100644
index 000000000..ddc7f1fd8
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/section
@@ -0,0 +1 @@
+Scripting
diff --git a/data/libterm-readline-perl-perl/_metadata/tags b/data/libterm-readline-perl-perl/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/libterm-readline-perl-perl/_metadata/version b/data/libterm-readline-perl-perl/_metadata/version
new file mode 100644
index 000000000..dd362807d
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/version
@@ -0,0 +1 @@
+1.0303
diff --git a/data/libterm-readline-perl-perl/_metadata/xz.dep b/data/libterm-readline-perl-perl/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/libterm-readline-perl-perl/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/libterm-readline-perl-perl/make.sh b/data/libterm-readline-perl-perl/make.sh
new file mode 100644
index 000000000..0572d5f18
--- /dev/null
+++ b/data/libterm-readline-perl-perl/make.sh
@@ -0,0 +1,7 @@
+pkg:setup
+echo 'INCLUDE = .' > config.in
+echo 'LIB = .' >> config.in
+export PERL_SRC="$(PKG_DEST_ perl)"
+$(PKG_WORK_ perl)/perl-5*/miniperl_top Makefile.PL
+pkg:make
+make pure_vendor_install DESTDIR="${PKG_DEST}"
diff --git a/data/libunistring/_metadata/description b/data/libunistring/_metadata/description
new file mode 100644
index 000000000..6de3a1a3d
--- /dev/null
+++ b/data/libunistring/_metadata/description
@@ -0,0 +1 @@
+Unicode string library for C
diff --git a/data/libunistring/_metadata/homepage b/data/libunistring/_metadata/homepage
new file mode 100644
index 000000000..82ca654f7
--- /dev/null
+++ b/data/libunistring/_metadata/homepage
@@ -0,0 +1 @@
+https://www.gnu.org/software/libunistring/
diff --git a/data/libunistring/_metadata/in.1443.00 b/data/libunistring/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libunistring/_metadata/in.1443.00
diff --git a/data/libunistring/_metadata/license b/data/libunistring/_metadata/license
new file mode 120000
index 000000000..141b2e41b
--- /dev/null
+++ b/data/libunistring/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/lgpl-3 \ No newline at end of file
diff --git a/data/libunistring/_metadata/maintainer b/data/libunistring/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libunistring/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/winterboarder.com/_metadata/priority b/data/libunistring/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/winterboarder.com/_metadata/priority
+++ b/data/libunistring/_metadata/priority
diff --git a/data/libunistring/_metadata/role b/data/libunistring/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libunistring/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libunistring/_metadata/section b/data/libunistring/_metadata/section
new file mode 100644
index 000000000..4b487b7d5
--- /dev/null
+++ b/data/libunistring/_metadata/section
@@ -0,0 +1 @@
+Security
diff --git a/data/libunistring/_metadata/tags b/data/libunistring/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libunistring/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libunistring/_metadata/version b/data/libunistring/_metadata/version
new file mode 100644
index 000000000..56f315114
--- /dev/null
+++ b/data/libunistring/_metadata/version
@@ -0,0 +1 @@
+0.9.10
diff --git a/data/libunistring/libunistring-0.9.10.tar.xz b/data/libunistring/libunistring-0.9.10.tar.xz
new file mode 100644
index 000000000..67b55e18c
--- /dev/null
+++ b/data/libunistring/libunistring-0.9.10.tar.xz
Binary files differ
diff --git a/data/libunistring/make.sh b/data/libunistring/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/libunistring/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/libutf8proc/_metadata/description b/data/libutf8proc/_metadata/description
new file mode 100644
index 000000000..f21e00186
--- /dev/null
+++ b/data/libutf8proc/_metadata/description
@@ -0,0 +1 @@
+a small, clean C library that provides Unicode normalization, case-folding, and other operations for data in the UTF-8 encoding
diff --git a/data/libutf8proc/_metadata/homepage b/data/libutf8proc/_metadata/homepage
new file mode 100644
index 000000000..0e88fc9da
--- /dev/null
+++ b/data/libutf8proc/_metadata/homepage
@@ -0,0 +1 @@
+http://juliastrings.github.io/utf8proc/
diff --git a/data/libutf8proc/_metadata/in.1443.00 b/data/libutf8proc/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libutf8proc/_metadata/in.1443.00
diff --git a/data/libutf8proc/_metadata/license b/data/libutf8proc/_metadata/license
new file mode 120000
index 000000000..8a4bc1936
--- /dev/null
+++ b/data/libutf8proc/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/modified-bsd \ No newline at end of file
diff --git a/data/libutf8proc/_metadata/maintainer b/data/libutf8proc/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libutf8proc/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/zanekills.com/_metadata/priority b/data/libutf8proc/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/zanekills.com/_metadata/priority
+++ b/data/libutf8proc/_metadata/priority
diff --git a/data/libutf8proc/_metadata/role b/data/libutf8proc/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libutf8proc/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libutf8proc/_metadata/section b/data/libutf8proc/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libutf8proc/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libutf8proc/_metadata/tags b/data/libutf8proc/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libutf8proc/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libutf8proc/_metadata/version b/data/libutf8proc/_metadata/version
new file mode 100644
index 000000000..ccbccc3dc
--- /dev/null
+++ b/data/libutf8proc/_metadata/version
@@ -0,0 +1 @@
+2.2.0
diff --git a/data/libutf8proc/make.sh b/data/libutf8proc/make.sh
new file mode 100644
index 000000000..5910adb0a
--- /dev/null
+++ b/data/libutf8proc/make.sh
@@ -0,0 +1,24 @@
+pkg:setup
+mkdir build
+cd build
+cat >iphoneos_toolchain.cmake <<EOF
+set(CMAKE_SYSTEM_NAME Darwin) # Tell CMake we're cross-compiling
+set(CMAKE_CROSSCOMPILING true)
+#include(CMakeForceCompiler)
+# Prefix detection only works with compiler id "GNU"
+# CMake will look for prefixed g++, cpp, ld, etc. automatically
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(triple ${PKG_TARG})
+set(CMAKE_FIND_ROOT_PATH $(echo ${PKG_PATH} | sed -e s/:/' '/g))
+set(CMAKE_LIBRARY_PATH $(echo ${LIBRARY_PATH} | sed -e s/:/' '/g))
+set(CMAKE_INCLUDE_PATH $(echo ${INCLUDE_PATH} | sed -e s/:/' '/g))
+set(CMAKE_C_COMPILER ${PKG_TARG}-gcc)
+set(CMAKE_CXX_COMPILER ${PKG_TARG}-g++)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+EOF
+
+cmake -j8 -DCMAKE_TOOLCHAIN_FILE=iphoneos_toolchain.cmake -DCMAKE_LOCALSTATEDIR="/private/var" -DCMAKE_INSTALL_NAME_DIR="/usr/lib" -DCMAKE_INSTALL_RPATH="/usr/" -DCMAKE_OSX_SYSROOT="${PKG_ROOT}" -DCMAKE_INSTALL_PREFIX="/usr/" -DCURRENT_VENDOR=debian -DUSE_NLS=0 -DWITH_DOC=0 ..
+pkg:make -j8
+pkg:install
diff --git a/data/libutf8proc/utf8proc-2.2.0.tar.gz b/data/libutf8proc/utf8proc-2.2.0.tar.gz
new file mode 100644
index 000000000..39e429383
--- /dev/null
+++ b/data/libutf8proc/utf8proc-2.2.0.tar.gz
Binary files differ
diff --git a/data/libvncserver/LibVNCServer-0.9.11.tar.gz b/data/libvncserver/LibVNCServer-0.9.11.tar.gz
new file mode 100644
index 000000000..c33564ae6
--- /dev/null
+++ b/data/libvncserver/LibVNCServer-0.9.11.tar.gz
Binary files differ
diff --git a/data/libvncserver/LibVNCServer-0.9.8.1.tar.gz b/data/libvncserver/LibVNCServer-0.9.8.1.tar.gz
deleted file mode 100644
index aad3ad8d8..000000000
--- a/data/libvncserver/LibVNCServer-0.9.8.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/libvncserver/_metadata/gnutls.dep b/data/libvncserver/_metadata/gnutls.dep
new file mode 120000
index 000000000..2dbb733a2
--- /dev/null
+++ b/data/libvncserver/_metadata/gnutls.dep
@@ -0,0 +1 @@
+../../gnutls \ No newline at end of file
diff --git a/data/libvncserver/_metadata/in.1443.00 b/data/libvncserver/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libvncserver/_metadata/in.1443.00
diff --git a/data/libvncserver/_metadata/jpeg.dep b/data/libvncserver/_metadata/jpeg.dep
deleted file mode 120000
index 6a539ed63..000000000
--- a/data/libvncserver/_metadata/jpeg.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../jpeg \ No newline at end of file
diff --git a/data/libvncserver/_metadata/libjpeg-turbo.dep b/data/libvncserver/_metadata/libjpeg-turbo.dep
new file mode 120000
index 000000000..b905b9550
--- /dev/null
+++ b/data/libvncserver/_metadata/libjpeg-turbo.dep
@@ -0,0 +1 @@
+../../libjpeg-turbo \ No newline at end of file
diff --git a/data/libvncserver/_metadata/maintainer b/data/libvncserver/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libvncserver/_metadata/maintainer
+++ b/data/libvncserver/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libvncserver/_metadata/p11-kit.dep b/data/libvncserver/_metadata/p11-kit.dep
new file mode 120000
index 000000000..1019ede75
--- /dev/null
+++ b/data/libvncserver/_metadata/p11-kit.dep
@@ -0,0 +1 @@
+../../p11-kit \ No newline at end of file
diff --git a/data/libvncserver/_metadata/png.dep b/data/libvncserver/_metadata/png.dep
new file mode 120000
index 000000000..581f24e2a
--- /dev/null
+++ b/data/libvncserver/_metadata/png.dep
@@ -0,0 +1 @@
+../../png \ No newline at end of file
diff --git a/data/libvncserver/_metadata/version b/data/libvncserver/_metadata/version
index b5343984c..8225a4ba4 100644
--- a/data/libvncserver/_metadata/version
+++ b/data/libvncserver/_metadata/version
@@ -1 +1 @@
-0.9.8.1
+0.9.11
diff --git a/data/libvncserver/clsockrace.diff b/data/libvncserver/clsockrace.diff
index 56b41e38e..9b1f2ad5d 100644
--- a/data/libvncserver/clsockrace.diff
+++ b/data/libvncserver/clsockrace.diff
@@ -1,12 +1,12 @@
-diff -ru LibVNCServer-0.9.8.1/libvncserver/main.c LibVNCServer-0.9.8.1+iPhone/libvncserver/main.c
---- LibVNCServer-0.9.8.1/libvncserver/main.c 2011-10-12 16:52:18.000000000 +0000
-+++ LibVNCServer-0.9.8.1+iPhone/libvncserver/main.c 2011-10-13 04:09:56.000000000 +0000
+diff -ur libvncserver-LibVNCServer-0.9.11/libvncserver/main.c libvncserver-LibVNCServer-0.9.11+iPhone/libvncserver/main.c
+--- libvncserver-LibVNCServer-0.9.11/libvncserver/main.c 2016-12-30 03:01:28.000000000 -1000
++++ libvncserver-LibVNCServer-0.9.11+iPhone/libvncserver/main.c 2018-08-29 11:20:52.000000000 -1000
@@ -517,24 +517,26 @@
struct timeval tv;
int n;
- if (cl->sock == -1) {
-+ int sock = cl->sock;
++ int sock = cl->sock;
+
+ if (sock == -1) {
/* Client has disconnected. */
@@ -43,6 +43,6 @@ diff -ru LibVNCServer-0.9.8.1/libvncserver/main.c LibVNCServer-0.9.8.1+iPhone/li
- if (FD_ISSET(cl->sock, &rfds) || FD_ISSET(cl->sock, &efds))
+ if (FD_ISSET(sock, &rfds) || FD_ISSET(cl->sock, &efds))
- rfbProcessClientMessage(cl);
- }
-
+ {
+ #ifdef LIBVNCSERVER_WITH_WEBSOCKETS
+ do {
diff --git a/data/libvncserver/make.sh b/data/libvncserver/make.sh
index 452a4bfd5..163b0e374 100644
--- a/data/libvncserver/make.sh
+++ b/data/libvncserver/make.sh
@@ -1,4 +1,5 @@
pkg:setup
-pkg:configure
-make
+autoreconf -fiv
+pkg:configure --with-libgcrypt-prefix="$(PKG_DEST_ gcrypt)/usr" --disable-static
+make -j8
pkg:install
diff --git a/data/libvncserver/subdirs.diff b/data/libvncserver/subdirs.diff
index 507e02d45..c2f61075b 100644
--- a/data/libvncserver/subdirs.diff
+++ b/data/libvncserver/subdirs.diff
@@ -1,14 +1,13 @@
-diff -ru LibVNCServer-0.9.8/Makefile.in LibVNCServer-0.9.8+iPhone/Makefile.in
---- LibVNCServer-0.9.8/Makefile.in 2011-03-30 11:34:39.000000000 +0000
-+++ LibVNCServer-0.9.8+iPhone/Makefile.in 2011-08-03 09:17:58.000000000 +0000
-@@ -266,8 +266,8 @@
- top_srcdir = @top_srcdir@
- with_ffmpeg = @with_ffmpeg@
- @WITH_X11VNC_TRUE@X11VNC = x11vnc
--SUBDIRS = libvncserver examples libvncclient vncterm classes client_examples test $(X11VNC)
--DIST_SUBDIRS = libvncserver examples libvncclient vncterm classes client_examples test
-+SUBDIRS = libvncserver libvncclient classes test $(X11VNC)
-+DIST_SUBDIRS = libvncserver libvncclient classes test
- EXTRA_DIST = CMakeLists.txt rfb/rfbint.h.cmake rfb/rfbconfig.h.cmake
+diff -ur libvncserver-LibVNCServer-0.9.11/Makefile.am libvncserver-LibVNCServer-0.9.11+iPhone/Makefile.am
+--- libvncserver-LibVNCServer-0.9.11/Makefile.am 2016-12-30 03:01:28.000000000 -1000
++++ libvncserver-LibVNCServer-0.9.11+iPhone/Makefile.am 2018-08-29 11:17:20.000000000 -1000
+@@ -1,7 +1,7 @@
+ ACLOCAL_AMFLAGS = -I m4
+
+-SUBDIRS=libvncserver examples libvncclient webclients client_examples test
+-DIST_SUBDIRS=libvncserver examples libvncclient webclients client_examples test
++SUBDIRS=libvncserver libvncclient test
++DIST_SUBDIRS=libvncserver libvncclient test
+ EXTRA_DIST = CMakeLists.txt rfb/rfbconfig.h.cmake
+
bin_SCRIPTS = libvncserver-config
- pkgconfigdir = $(libdir)/pkgconfig
diff --git a/data/libxapian/_metadata/description b/data/libxapian/_metadata/description
new file mode 100644
index 000000000..203e9d0e2
--- /dev/null
+++ b/data/libxapian/_metadata/description
@@ -0,0 +1 @@
+Xapian is an Open Source Search Engine Library
diff --git a/data/libxapian/_metadata/in.1443.00 b/data/libxapian/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libxapian/_metadata/in.1443.00
diff --git a/data/libxapian/_metadata/license b/data/libxapian/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/libxapian/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/libxapian/_metadata/maintainer b/data/libxapian/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libxapian/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/zuijlen.eu/_metadata/priority b/data/libxapian/_metadata/priority
index 134d9bc32..134d9bc32 100644
--- a/data/zuijlen.eu/_metadata/priority
+++ b/data/libxapian/_metadata/priority
diff --git a/data/libxapian/_metadata/role b/data/libxapian/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libxapian/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libxapian/_metadata/section b/data/libxapian/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libxapian/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libxapian/_metadata/tags b/data/libxapian/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libxapian/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libxapian/_metadata/version b/data/libxapian/_metadata/version
new file mode 100644
index 000000000..be05bba98
--- /dev/null
+++ b/data/libxapian/_metadata/version
@@ -0,0 +1 @@
+1.4.7
diff --git a/data/libxapian/make.sh b/data/libxapian/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/libxapian/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/libxapian/xapian-core-1.4.7.tar.xz b/data/libxapian/xapian-core-1.4.7.tar.xz
new file mode 100644
index 000000000..33fa471d2
--- /dev/null
+++ b/data/libxapian/xapian-core-1.4.7.tar.xz
Binary files differ
diff --git a/data/libxml2-dylib/_metadata/in.1443.00 b/data/libxml2-dylib/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libxml2-dylib/_metadata/in.1443.00
diff --git a/data/libxml2/_metadata/in.1443.00 b/data/libxml2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libxml2/_metadata/in.1443.00
diff --git a/data/libxml2/_metadata/libxml2-lib.dep b/data/libxml2/_metadata/libxml2-lib.dep
deleted file mode 120000
index 4caf793d4..000000000
--- a/data/libxml2/_metadata/libxml2-lib.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../libxml2-lib \ No newline at end of file
diff --git a/data/libxslt/_metadata/in.1443.00 b/data/libxslt/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libxslt/_metadata/in.1443.00
diff --git a/data/libxslt/_metadata/maintainer b/data/libxslt/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/libxslt/_metadata/maintainer
+++ b/data/libxslt/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libzip/_metadata/description b/data/libzip/_metadata/description
new file mode 100644
index 000000000..325f94816
--- /dev/null
+++ b/data/libzip/_metadata/description
@@ -0,0 +1 @@
+a C library for reading, creating, and modifying zip archives.
diff --git a/data/libzip/_metadata/in.1443.00 b/data/libzip/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/libzip/_metadata/in.1443.00
diff --git a/data/libzip/_metadata/license b/data/libzip/_metadata/license
new file mode 120000
index 000000000..141b2e41b
--- /dev/null
+++ b/data/libzip/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/lgpl-3 \ No newline at end of file
diff --git a/data/libzip/_metadata/maintainer b/data/libzip/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/libzip/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/libzip/_metadata/priority b/data/libzip/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/libzip/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/libzip/_metadata/section b/data/libzip/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/libzip/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/libzip/_metadata/tags b/data/libzip/_metadata/tags
new file mode 100644
index 000000000..91c01ad11
--- /dev/null
+++ b/data/libzip/_metadata/tags
@@ -0,0 +1 @@
+purpose::console, role::developer
diff --git a/data/libzip/_metadata/version b/data/libzip/_metadata/version
new file mode 100644
index 000000000..26ca59460
--- /dev/null
+++ b/data/libzip/_metadata/version
@@ -0,0 +1 @@
+1.5.1
diff --git a/data/libzip/libzip-1.5.1.tar.xz b/data/libzip/libzip-1.5.1.tar.xz
new file mode 100644
index 000000000..e974522c2
--- /dev/null
+++ b/data/libzip/libzip-1.5.1.tar.xz
Binary files differ
diff --git a/data/libzip/make.sh b/data/libzip/make.sh
new file mode 100644
index 000000000..a410fb73a
--- /dev/null
+++ b/data/libzip/make.sh
@@ -0,0 +1,24 @@
+pkg:setup
+mkdir build
+cd build
+cat >iphoneos_toolchain.cmake <<EOF
+set(CMAKE_SYSTEM_NAME Darwin) # Tell CMake we're cross-compiling
+set(CMAKE_CROSSCOMPILING true)
+#include(CMakeForceCompiler)
+# Prefix detection only works with compiler id "GNU"
+# CMake will look for prefixed g++, cpp, ld, etc. automatically
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(triple ${PKG_TARG})
+set(CMAKE_FIND_ROOT_PATH $(echo ${PKG_PATH} | sed -e s/:/' '/g))
+set(CMAKE_LIBRARY_PATH $(echo ${LIBRARY_PATH} | sed -e s/:/' '/g))
+set(CMAKE_INCLUDE_PATH $(echo ${INCLUDE_PATH} | sed -e s/:/' '/g))
+set(CMAKE_C_COMPILER ${PKG_TARG}-gcc)
+set(CMAKE_CXX_COMPILER ${PKG_TARG}-g++)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+EOF
+
+cmake -j8 -DCMAKE_TOOLCHAIN_FILE=iphoneos_toolchain.cmake -DCMAKE_LOCALSTATEDIR="/private/var" -DCMAKE_INSTALL_NAME_DIR="/usr/lib" -DCMAKE_INSTALL_RPATH="/usr/" -DCMAKE_OSX_SYSROOT="${PKG_ROOT}" -DCMAKE_INSTALL_PREFIX="/usr/" -DCURRENT_VENDOR=debian -DUSE_NLS=0 -DWITH_DOC=0 ..
+pkg:make
+pkg:install
diff --git a/data/lighttpd/_metadata/in.1443.00 b/data/lighttpd/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/lighttpd/_metadata/in.1443.00
diff --git a/data/lighttpd/_metadata/libssl1.0.dep b/data/lighttpd/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/lighttpd/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/lighttpd/_metadata/maintainer b/data/lighttpd/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/lighttpd/_metadata/maintainer
+++ b/data/lighttpd/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/lighttpd/_metadata/openssl.dep b/data/lighttpd/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/lighttpd/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/links/_metadata/in.1443.00 b/data/links/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/links/_metadata/in.1443.00
diff --git a/data/links/_metadata/libssl1.0.dep b/data/links/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/links/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/links/_metadata/maintainer b/data/links/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/links/_metadata/maintainer
+++ b/data/links/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/links/_metadata/openssl.dep b/data/links/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/links/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/links/_metadata/version b/data/links/_metadata/version
index 0338f8d1a..f1ad6a77c 100644
--- a/data/links/_metadata/version
+++ b/data/links/_metadata/version
@@ -1 +1 @@
-0.99
+1.03
diff --git a/data/links/links-0.99.tar.gz b/data/links/links-0.99.tar.gz
deleted file mode 100644
index 2d25f73d9..000000000
--- a/data/links/links-0.99.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/links/links-1.03.tar.gz b/data/links/links-1.03.tar.gz
new file mode 100644
index 000000000..70a3cc256
--- /dev/null
+++ b/data/links/links-1.03.tar.gz
Binary files differ
diff --git a/data/links/make.sh b/data/links/make.sh
index 7dac292bc..d98847616 100644
--- a/data/links/make.sh
+++ b/data/links/make.sh
@@ -1,5 +1,5 @@
pkg:setup
autoconf
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/links/mdns.diff b/data/links/mdns.diff
deleted file mode 100644
index c48de5c2f..000000000
--- a/data/links/mdns.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru links-0.99/main.c links-0.99+iPhone/main.c
---- links-0.99/main.c 2002-06-29 18:44:25.000000000 +0000
-+++ links-0.99+iPhone/main.c 2008-03-04 20:43:00.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- #include "links.h"
-
- int retval = RET_OK;
-@@ -330,6 +332,15 @@
-
- int main(int argc, char *argv[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- path_to_exe = argv[0];
- ac = argc;
- av = (unsigned char **)argv;
diff --git a/data/llvm-clang/_metadata/conflicts b/data/llvm-clang/_metadata/conflicts
new file mode 100644
index 000000000..08f4c1128
--- /dev/null
+++ b/data/llvm-clang/_metadata/conflicts
@@ -0,0 +1 @@
+org.coolstar.llvm-clang64, org.coolstar.llvm-clang
diff --git a/data/llvm-clang/_metadata/depends b/data/llvm-clang/_metadata/depends
new file mode 100644
index 000000000..10ba93442
--- /dev/null
+++ b/data/llvm-clang/_metadata/depends
@@ -0,0 +1 @@
+dpkg (>= 1.18.25-9)
diff --git a/data/llvm-clang/_metadata/description b/data/llvm-clang/_metadata/description
new file mode 100644
index 000000000..bc38f718d
--- /dev/null
+++ b/data/llvm-clang/_metadata/description
@@ -0,0 +1 @@
+A toolkit for the construction of highly optimized compilers, optimizers, and runtime environments and a compiler front-end for the C family of languages (C, C++, Objective-C, and Objective-C++) which is built as part of the LLVM compiler infrastructure project.
diff --git a/data/llvm-clang/_metadata/in.1443.00 b/data/llvm-clang/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/llvm-clang/_metadata/in.1443.00
diff --git a/data/llvm-clang/_metadata/license b/data/llvm-clang/_metadata/license
new file mode 120000
index 000000000..eea9de8d1
--- /dev/null
+++ b/data/llvm-clang/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/bsd \ No newline at end of file
diff --git a/data/llvm-clang/_metadata/maintainer b/data/llvm-clang/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/llvm-clang/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/llvm-clang/_metadata/name b/data/llvm-clang/_metadata/name
new file mode 100644
index 000000000..8e28c177c
--- /dev/null
+++ b/data/llvm-clang/_metadata/name
@@ -0,0 +1 @@
+LLVM Clang
diff --git a/data/llvm-clang/_metadata/postinst b/data/llvm-clang/_metadata/postinst
new file mode 100755
index 000000000..bebc210cd
--- /dev/null
+++ b/data/llvm-clang/_metadata/postinst
@@ -0,0 +1,22 @@
+#!/bin/bash
+LLVMPROGS="ar as bcanalyzer cxxdump cxxfilt diff dlltool dsymutil dwarfdump nm objdump pdbutil profdata ranlib readelf readobj size split strings"
+
+case "$1" in
+ configure)
+ for prog in ${LLVMPROGS}; do
+ update-alternatives --quiet --install /usr/bin/${prog} ${prog} /usr/bin/llvm-${prog} 50
+ done
+ update-alternatives --quiet --install /usr/bin/gcc gcc /usr/bin/clang 50
+ update-alternatives --quiet --install /usr/bin/cpp cpp /usr/bin/clang-cpp 50
+ update-alternatives --quiet --install /usr/bin/g++ g++ /usr/bin/clang++ 50
+ ;;
+
+ abort-upgrade|abort-remove|abort-deconfigure)
+
+ ;;
+
+ *)
+ echo "postinst called with unknown argument \`$1'" >&2
+ exit 0
+ ;;
+esac
diff --git a/data/llvm-clang/_metadata/prerm b/data/llvm-clang/_metadata/prerm
new file mode 100755
index 000000000..119c2de8f
--- /dev/null
+++ b/data/llvm-clang/_metadata/prerm
@@ -0,0 +1,20 @@
+#!/bin/bash
+LLVMPROGS="ar as bcanalyzer cxxdump cxxfilt diff dlltool dsymutil dwarfdump nm objdump pdbutil profdata ranlib readelf readobj size split strings"
+case "$1" in
+ remove|deconfigure)
+ for prog in ${LLVMPROGS}; do
+ update-alternatives --quiet --remove ${prog} /usr/bin/llvm-${prog}
+ done
+ update-alternatives --quiet --remove gcc /usr/bin/clang
+ update-alternatives --quiet --remove cpp /usr/bin/clang-cpp
+ update-alternatives --quiet --remove g++ /usr/bin/clang++
+ ;;
+ upgrade)
+ ;;
+ failed-upgrade)
+ ;;
+ *)
+ echo "prerm called with unknown argument \`$1'" >&2
+ exit 0
+ ;;
+esac
diff --git a/data/llvm-clang/_metadata/priority b/data/llvm-clang/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/llvm-clang/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/llvm-clang/_metadata/provides b/data/llvm-clang/_metadata/provides
new file mode 100644
index 000000000..08f4c1128
--- /dev/null
+++ b/data/llvm-clang/_metadata/provides
@@ -0,0 +1 @@
+org.coolstar.llvm-clang64, org.coolstar.llvm-clang
diff --git a/data/llvm-clang/_metadata/replaces b/data/llvm-clang/_metadata/replaces
new file mode 100644
index 000000000..08f4c1128
--- /dev/null
+++ b/data/llvm-clang/_metadata/replaces
@@ -0,0 +1 @@
+org.coolstar.llvm-clang64, org.coolstar.llvm-clang
diff --git a/data/llvm-clang/_metadata/role b/data/llvm-clang/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/llvm-clang/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/llvm-clang/_metadata/section b/data/llvm-clang/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/llvm-clang/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/llvm-clang/_metadata/tags b/data/llvm-clang/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/llvm-clang/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/llvm-clang/_metadata/version b/data/llvm-clang/_metadata/version
new file mode 100644
index 000000000..a1ef0cae1
--- /dev/null
+++ b/data/llvm-clang/_metadata/version
@@ -0,0 +1 @@
+5.0.2
diff --git a/data/llvm-clang/iphonesdkpath.diff b/data/llvm-clang/iphonesdkpath.diff
new file mode 100644
index 000000000..ace9daa10
--- /dev/null
+++ b/data/llvm-clang/iphonesdkpath.diff
@@ -0,0 +1,46 @@
+diff -ur swift-llvm-swift-4.1.3-RELEASE/tools/clang/lib/Frontend/InitHeaderSearch.cpp swift-llvm-swift-4.1.3-RELEASE+iPhone/tools/clang/lib/Frontend/InitHeaderSearch.cpp
+--- swift-llvm-swift-4.1.3-RELEASE/tools/clang/lib/Frontend/InitHeaderSearch.cpp 2018-03-17 03:34:33.000000000 -1000
++++ swift-llvm-swift-4.1.3-RELEASE+iPhone/tools/clang/lib/Frontend/InitHeaderSearch.cpp 2018-09-17 12:26:55.000000000 -1000
+@@ -348,6 +348,9 @@
+ }
+ default:
+ AddPath("/usr/include", ExternCSystem, false);
++ if (!HasSysroot) {
++ AddPath("/usr/share/SDKs/iPhoneOS.sdk/usr/include", ExternCSystem, false);
++ }
+ break;
+ }
+ }
+@@ -385,11 +388,21 @@
+ "arm-apple-darwin10", "v7", "", triple);
+ AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
+ "arm-apple-darwin10", "v6", "", triple);
++ if (!HasSysroot) {
++ AddGnuCPlusPlusIncludePaths("/usr/share/SDKs/iPhoneOS.sdk/usr/include/c++/4.2.1",
++ "arm-apple-darwin10", "v7", "", triple);
++ AddGnuCPlusPlusIncludePaths("/usr/share/SDKs/iPhoneOS.sdk/usr/include/c++/4.2.1",
++ "arm-apple-darwin10", "v6", "", triple);
++ }
+ break;
+
+ case llvm::Triple::aarch64:
+ AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
+ "arm64-apple-darwin10", "", "", triple);
++ if (!HasSysroot) {
++ AddGnuCPlusPlusIncludePaths("/usr/share/SDKs/iPhoneOS.sdk/usr/include/c++/4.2.1",
++ "arm64-apple-darwin10", "", "", triple);
++ }
+ break;
+ }
+ return;
+@@ -483,6 +496,10 @@
+ // Add the default framework include paths on Darwin.
+ if (HSOpts.UseStandardSystemIncludes) {
+ if (triple.isOSDarwin()) {
++ if (!HasSysroot) {
++ AddPath("/usr/share/SDKs/iPhoneOS.sdk/System/Library/Frameworks", System, true);
++ AddPath("/usr/share/SDKs/iPhoneOS.sdk/Library/Frameworks", System, true);
++ }
+ AddPath("/System/Library/Frameworks", System, true);
+ AddPath("/Library/Frameworks", System, true);
+ }
diff --git a/data/llvm-clang/make.sh b/data/llvm-clang/make.sh
new file mode 100644
index 000000000..bb215aef8
--- /dev/null
+++ b/data/llvm-clang/make.sh
@@ -0,0 +1,40 @@
+pkg:extract
+cd swift-llvm-swift*
+mv ../swift-clang-swift* tools/clang
+pkg:patch
+mkdir native
+cd native
+MACOSX_DEPLOYMENT_TARGET="$(sw_vers -productVersion | sed -e 's/\.[0-9]*$//')" CC="$(xcrun -f clang)" CXX="$(xcrun -f clang++)" cmake -j16 -DCMAKE_INSTALL_NAME_DIR="/usr/local/lib" -DCMAKE_INSTALL_LIBDIR="local/lib" -DLLVM_BUILD_LLVM_DYLIB=ON -DCMAKE_BUILD_TYPE=RELEASE -DLLVM_INCLUDE_TESTS=OFF ..
+make -j16 llvm-tblgen clang-tblgen
+cd ..
+mkdir build
+cd build
+
+cat >iphoneos_toolchain.cmake <<EOF
+set(CMAKE_SYSTEM_NAME Darwin) # Tell CMake we're cross-compiling
+set(CMAKE_CROSSCOMPILING true)
+#include(CMakeForceCompiler)
+# Prefix detection only works with compiler id "GNU"
+# CMake will look for prefixed g++, cpp, ld, etc. automatically
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(triple ${PKG_TARG})
+set(CMAKE_FIND_ROOT_PATH $(echo ${PKG_PATH} | sed -e s/:/' '/g))
+set(CMAKE_LIBRARY_PATH $(echo ${LIBRARY_PATH} | sed -e s/:/' '/g))
+set(CMAKE_INCLUDE_PATH $(echo ${INCLUDE_PATH} | sed -e s/:/' '/g))
+set(CMAKE_C_COMPILER ${PKG_TARG}-gcc)
+set(CMAKE_CXX_COMPILER ${PKG_TARG}-g++)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+EOF
+
+unset MACOSX_DEPLOYMENT_TARGET
+cmake -j32 -DCMAKE_TOOLCHAIN_FILE=iphoneos_toolchain.cmake -DCMAKE_INSTALL_NAME_DIR="/usr/local/lib" -DCMAKE_INSTALL_LIBDIR="local/lib" -DCMAKE_INSTALL_RPATH="/usr/" -DCMAKE_OSX_SYSROOT="${PKG_ROOT}" -DCMAKE_INSTALL_PREFIX="/usr/" -DLLVM_INCLUDE_TESTS=OFF -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_SYSTEM_NAME=Darwin -DLLVM_TABLEGEN="$(pwd)/../native/bin/llvm-tblgen" -DCLANG_TABLEGEN="$(pwd)/../native/bin/clang-tblgen" -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_DEFAULT_TARGET_TRIPLE="$(echo ${PKG_TARG} | sed -e s/aarch64/arm64/ -e 's/darwin.*/darwin/')" ..
+
+make -j32
+pkg:install
+pkg: mkdir -p /usr/local/lib
+mv ${PKG_DEST}/usr/lib/*.dylib ${PKG_DEST}/usr/local/lib
+pkg: find /usr/lib -name '*.a' -exec rm {} +
+pkg: mkdir -p /usr/share/SDKs
+cd ..
diff --git a/data/llvm-clang/swift-clang-4.1.3-RELEASE.tar.gz b/data/llvm-clang/swift-clang-4.1.3-RELEASE.tar.gz
new file mode 100644
index 000000000..d4ea5a51f
--- /dev/null
+++ b/data/llvm-clang/swift-clang-4.1.3-RELEASE.tar.gz
Binary files differ
diff --git a/data/llvm-clang/swift-llvm-4.1.3-RELEASE.tar.gz b/data/llvm-clang/swift-llvm-4.1.3-RELEASE.tar.gz
new file mode 100644
index 000000000..795b66ce8
--- /dev/null
+++ b/data/llvm-clang/swift-llvm-4.1.3-RELEASE.tar.gz
Binary files differ
diff --git a/data/lsof/_metadata/in.1443.00 b/data/lsof/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/lsof/_metadata/in.1443.00
diff --git a/data/lsof/_metadata/maintainer b/data/lsof/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/lsof/_metadata/maintainer
+++ b/data/lsof/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/lynx/_metadata/in.1443.00 b/data/lynx/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/lynx/_metadata/in.1443.00
diff --git a/data/lynx/_metadata/libssl1.0.dep b/data/lynx/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/lynx/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/lynx/_metadata/maintainer b/data/lynx/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/lynx/_metadata/maintainer
+++ b/data/lynx/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/lynx/_metadata/openssl.dep b/data/lynx/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/lynx/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/lz4/_metadata/description b/data/lz4/_metadata/description
new file mode 100644
index 000000000..547cd1b2b
--- /dev/null
+++ b/data/lz4/_metadata/description
@@ -0,0 +1 @@
+Extremely Fast Compression algorithm
diff --git a/data/lz4/_metadata/homepage b/data/lz4/_metadata/homepage
new file mode 100644
index 000000000..57f36586c
--- /dev/null
+++ b/data/lz4/_metadata/homepage
@@ -0,0 +1 @@
+http://tukaani.org/lzma/
diff --git a/data/lz4/_metadata/in.1443.00 b/data/lz4/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/lz4/_metadata/in.1443.00
diff --git a/data/lz4/_metadata/in.550.58 b/data/lz4/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/lz4/_metadata/in.550.58
diff --git a/data/lz4/_metadata/license b/data/lz4/_metadata/license
new file mode 120000
index 000000000..af4224931
--- /dev/null
+++ b/data/lz4/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-3 \ No newline at end of file
diff --git a/data/lz4/_metadata/maintainer b/data/lz4/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/lz4/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/lz4/_metadata/name b/data/lz4/_metadata/name
new file mode 100644
index 000000000..fdcbaf78b
--- /dev/null
+++ b/data/lz4/_metadata/name
@@ -0,0 +1 @@
+LZ4
diff --git a/data/lz4/_metadata/priority b/data/lz4/_metadata/priority
new file mode 100644
index 000000000..ea5b3d7ee
--- /dev/null
+++ b/data/lz4/_metadata/priority
@@ -0,0 +1 @@
+important
diff --git a/data/lz4/_metadata/role b/data/lz4/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/lz4/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/lz4/_metadata/section b/data/lz4/_metadata/section
new file mode 100644
index 000000000..888e3e192
--- /dev/null
+++ b/data/lz4/_metadata/section
@@ -0,0 +1 @@
+Archiving
diff --git a/data/lz4/_metadata/tags b/data/lz4/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/lz4/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/lz4/_metadata/version b/data/lz4/_metadata/version
new file mode 100644
index 000000000..6a126f402
--- /dev/null
+++ b/data/lz4/_metadata/version
@@ -0,0 +1 @@
+1.7.5
diff --git a/data/lz4/make.sh b/data/lz4/make.sh
new file mode 100644
index 000000000..654c78332
--- /dev/null
+++ b/data/lz4/make.sh
@@ -0,0 +1,23 @@
+pkg:setup
+cd contrib/cmake_unofficial
+cat >iphoneos_toolchain.cmake <<EOF
+set(CMAKE_SYSTEM_NAME Darwin) # Tell CMake we're cross-compiling
+set(CMAKE_CROSSCOMPILING true)
+#include(CMakeForceCompiler)
+# Prefix detection only works with compiler id "GNU"
+# CMake will look for prefixed g++, cpp, ld, etc. automatically
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+set(triple ${PKG_TARG})
+set(CMAKE_FIND_ROOT_PATH $(echo ${PKG_PATH} | sed -e s/:/' '/g))
+set(CMAKE_LIBRARY_PATH $(echo ${LIBRARY_PATH} | sed -e s/:/' '/g))
+set(CMAKE_INCLUDE_PATH $(echo ${INCLUDE_PATH} | sed -e s/:/' '/g))
+set(CMAKE_C_COMPILER ${PKG_TARG}-gcc)
+set(CMAKE_CXX_COMPILER ${PKG_TARG}-g++)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+EOF
+
+cmake -j8 -DCMAKE_TOOLCHAIN_FILE=iphoneos_toolchain.cmake -DCMAKE_LOCALSTATEDIR="/private/var" -DCMAKE_INSTALL_NAME_DIR="/usr/lib" -DCMAKE_INSTALL_RPATH="/usr/" -DCMAKE_OSX_SYSROOT="${PKG_ROOT}" -DCMAKE_INSTALL_PREFIX="/usr/" -DCURRENT_VENDOR=debian -DUSE_NLS=0 -DWITH_DOC=0 .
+make
+pkg:install
diff --git a/data/lz4/v1.7.5.tar.gz b/data/lz4/v1.7.5.tar.gz
new file mode 100644
index 000000000..4890f714f
--- /dev/null
+++ b/data/lz4/v1.7.5.tar.gz
Binary files differ
diff --git a/data/lzip/_metadata/description b/data/lzip/_metadata/description
new file mode 100644
index 000000000..878f75bd8
--- /dev/null
+++ b/data/lzip/_metadata/description
@@ -0,0 +1 @@
+Lzip is a lossless data compressor with a user interface similar to the one of gzip or bzip2.
diff --git a/data/lzip/_metadata/homepage b/data/lzip/_metadata/homepage
new file mode 100644
index 000000000..b6b8fd6da
--- /dev/null
+++ b/data/lzip/_metadata/homepage
@@ -0,0 +1 @@
+http://savannah.nongnu.org/projects/lzip/
diff --git a/data/lzip/_metadata/in.1443.00 b/data/lzip/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/lzip/_metadata/in.1443.00
diff --git a/data/lzip/_metadata/license b/data/lzip/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/lzip/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/lzip/_metadata/maintainer b/data/lzip/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/lzip/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/lzip/_metadata/priority b/data/lzip/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/lzip/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/lzip/_metadata/role b/data/lzip/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/lzip/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/lzip/_metadata/section b/data/lzip/_metadata/section
new file mode 100644
index 000000000..888e3e192
--- /dev/null
+++ b/data/lzip/_metadata/section
@@ -0,0 +1 @@
+Archiving
diff --git a/data/lzip/_metadata/tags b/data/lzip/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/lzip/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/lzip/_metadata/version b/data/lzip/_metadata/version
new file mode 100644
index 000000000..5fb5a6b4f
--- /dev/null
+++ b/data/lzip/_metadata/version
@@ -0,0 +1 @@
+1.20
diff --git a/data/lzip/lzip-1.20.tar.gz b/data/lzip/lzip-1.20.tar.gz
new file mode 100644
index 000000000..2d7f69146
--- /dev/null
+++ b/data/lzip/lzip-1.20.tar.gz
Binary files differ
diff --git a/data/lzip/make.sh b/data/lzip/make.sh
new file mode 100644
index 000000000..b78ddd2d2
--- /dev/null
+++ b/data/lzip/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make
+pkg:install
diff --git a/data/lzma/_metadata/conflicts b/data/lzma/_metadata/conflicts
new file mode 100644
index 000000000..f1a2f703c
--- /dev/null
+++ b/data/lzma/_metadata/conflicts
@@ -0,0 +1 @@
+com.mc.xz
diff --git a/data/lzma/_metadata/grep.dep b/data/lzma/_metadata/grep.dep
deleted file mode 120000
index a7c23a155..000000000
--- a/data/lzma/_metadata/grep.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../grep \ No newline at end of file
diff --git a/data/lzma/_metadata/in.1443.00 b/data/lzma/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/lzma/_metadata/in.1443.00
diff --git a/data/lzma/_metadata/maintainer b/data/lzma/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/lzma/_metadata/maintainer
+++ b/data/lzma/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/lzma/_metadata/version b/data/lzma/_metadata/version
index 0e3c33916..3376a80f8 100644
--- a/data/lzma/_metadata/version
+++ b/data/lzma/_metadata/version
@@ -1 +1 @@
-4.32.7
+2:4.32.7
diff --git a/data/lzma/make.sh b/data/lzma/make.sh
index 452a4bfd5..dc6b1ecb8 100644
--- a/data/lzma/make.sh
+++ b/data/lzma/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+autoreconf -f -i
pkg:configure
make
pkg:install
diff --git a/data/m4/_metadata/in.1443.00 b/data/m4/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/m4/_metadata/in.1443.00
diff --git a/data/m4/_metadata/maintainer b/data/m4/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/m4/_metadata/maintainer
+++ b/data/m4/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/m4/_metadata/version b/data/m4/_metadata/version
index ac9f79cab..f689e8c1a 100644
--- a/data/m4/_metadata/version
+++ b/data/m4/_metadata/version
@@ -1 +1 @@
-1.4.10
+1.4.18
diff --git a/data/m4/m4-1.4.10.tar.gz b/data/m4/m4-1.4.10.tar.gz
deleted file mode 100644
index 5991916cc..000000000
--- a/data/m4/m4-1.4.10.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/m4/m4-1.4.18.tar.xz b/data/m4/m4-1.4.18.tar.xz
new file mode 100644
index 000000000..18f019e4a
--- /dev/null
+++ b/data/m4/m4-1.4.18.tar.xz
Binary files differ
diff --git a/data/make/_metadata/in.1443.00 b/data/make/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/make/_metadata/in.1443.00
diff --git a/data/make/_metadata/maintainer b/data/make/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/make/_metadata/maintainer
+++ b/data/make/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/make/_metadata/version b/data/make/_metadata/version
index e004c8779..fae6e3d04 100644
--- a/data/make/_metadata/version
+++ b/data/make/_metadata/version
@@ -1 +1 @@
-3.81
+4.2.1
diff --git a/data/make/make-3.81.tar.gz b/data/make/make-3.81.tar.gz
deleted file mode 100644
index 7395e0527..000000000
--- a/data/make/make-3.81.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/make/make-4.2.1.tar.bz2 b/data/make/make-4.2.1.tar.bz2
new file mode 100644
index 000000000..1fa74f8c2
--- /dev/null
+++ b/data/make/make-4.2.1.tar.bz2
Binary files differ
diff --git a/data/mc/_metadata/homepage b/data/mc/_metadata/homepage
index 167cdb530..fb71f5668 100644
--- a/data/mc/_metadata/homepage
+++ b/data/mc/_metadata/homepage
@@ -1 +1 @@
-http://www.ibiblio.org/mc/
+http://midnight-commander.org/
diff --git a/data/mc/_metadata/in.1443.00 b/data/mc/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/mc/_metadata/in.1443.00
diff --git a/data/mc/_metadata/maintainer b/data/mc/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/mc/_metadata/maintainer
+++ b/data/mc/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/mc/_metadata/version b/data/mc/_metadata/version
index 8ac28bf9f..a70a836c5 100644
--- a/data/mc/_metadata/version
+++ b/data/mc/_metadata/version
@@ -1 +1 @@
-4.6.1
+4.8.21
diff --git a/data/mc/make.sh b/data/mc/make.sh
index b784b748c..503448b2f 100644
--- a/data/mc/make.sh
+++ b/data/mc/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure --with-screen=ncurses --without-x
-make
+make -j8
pkg:install
diff --git a/data/mc/mc-4.6.1.tar.gz b/data/mc/mc-4.6.1.tar.gz
deleted file mode 100644
index 15f99119e..000000000
--- a/data/mc/mc-4.6.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/mc/mc-4.8.21.tar.xz b/data/mc/mc-4.8.21.tar.xz
new file mode 100644
index 000000000..f1529af4d
--- /dev/null
+++ b/data/mc/mc-4.8.21.tar.xz
Binary files differ
diff --git a/data/mc/structtime.diff b/data/mc/structtime.diff
new file mode 100644
index 000000000..1f518bdb0
--- /dev/null
+++ b/data/mc/structtime.diff
@@ -0,0 +1,16 @@
+diff -ur mc-4.8.21/lib/global.h mc-4.8.21+iPhone/lib/global.h
+--- mc-4.8.21/lib/global.h 2018-05-27 09:56:21.000000000 -1000
++++ mc-4.8.21+iPhone/lib/global.h 2018-08-14 10:59:08.000000000 -1000
+@@ -24,6 +24,12 @@
+ /* for O_* macros */
+ #include <fcntl.h>
+
++#ifdef __APPLE__
++#define st_atim st_atimespec
++#define st_ctim st_ctimespec
++#define st_mtim st_mtimespec
++#endif
++
+ /* for sig_atomic_t */
+ #include <signal.h>
+
diff --git a/data/mc/subdirs.diff b/data/mc/subdirs.diff
index bf6e410a1..bd2380938 100644
--- a/data/mc/subdirs.diff
+++ b/data/mc/subdirs.diff
@@ -1,12 +1,24 @@
-diff -ru mc-4.6.1/Makefile.in mc-4.6.1+iPhone/Makefile.in
---- mc-4.6.1/Makefile.in 2005-07-23 16:53:13.000000000 +0000
-+++ mc-4.6.1+iPhone/Makefile.in 2008-06-30 21:52:52.000000000 +0000
-@@ -242,7 +242,7 @@
- sysconfdir = @sysconfdir@
- target_alias = @target_alias@
+diff -ur mc-4.8.21/Makefile.am mc-4.8.21+iPhone/Makefile.am
+--- mc-4.8.21/Makefile.am 2017-02-24 10:25:57.000000000 -1000
++++ mc-4.8.21+iPhone/Makefile.am 2018-08-14 10:44:39.000000000 -1000
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to create Makefile.in.
AUTOMAKE_OPTIONS = 1.5
--SUBDIRS = intl po m4 vfs slang edit src lib doc syntax
-+SUBDIRS = intl po m4 vfs slang edit src lib syntax
- EXTRA_DIST = FAQ HACKING INSTALL.FAST MAINTAINERS README.QNX TODO
- noinst_DATA = mc.spec mc.qpg pkginfo prototype
- dist_noinst_SCRIPTS = build-glib1.sh build-glib2.sh
+
+-SUBDIRS = intl po lib src doc contrib misc
++SUBDIRS = intl po lib src contrib misc
+
+ if HAVE_TESTS
+ SUBDIRS += tests
+diff -ur mc-4.8.21/Makefile.in mc-4.8.21+iPhone/Makefile.in
+--- mc-4.8.21/Makefile.in 2018-06-02 22:57:29.000000000 -1000
++++ mc-4.8.21+iPhone/Makefile.in 2018-08-14 10:44:26.000000000 -1000
+@@ -508,7 +508,7 @@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = 1.5
+-SUBDIRS = intl po lib src doc contrib misc $(am__append_1)
++SUBDIRS = intl po lib src contrib misc $(am__append_1)
+ EXTRA_DIST =
+ dist_noinst_SCRIPTS = build-glib2.sh
+ dist_noinst_HEADERS = $(top_srcdir)/version.h
diff --git a/data/mdnsresponder/_metadata/in.1443.00 b/data/mdnsresponder/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/mdnsresponder/_metadata/in.1443.00
diff --git a/data/mdnsresponder/_metadata/maintainer b/data/mdnsresponder/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/mdnsresponder/_metadata/maintainer
+++ b/data/mdnsresponder/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/metasploit3/_metadata/in.1443.00 b/data/metasploit3/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/metasploit3/_metadata/in.1443.00
diff --git a/data/minicom/_metadata/in.1443.00 b/data/minicom/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/minicom/_metadata/in.1443.00
diff --git a/data/minicom/_metadata/maintainer b/data/minicom/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/minicom/_metadata/maintainer
+++ b/data/minicom/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/minicom/_metadata/version b/data/minicom/_metadata/version
index 8bbe6cf74..860487ca1 100644
--- a/data/minicom/_metadata/version
+++ b/data/minicom/_metadata/version
@@ -1 +1 @@
-2.2
+2.7.1
diff --git a/data/minicom/extern.diff b/data/minicom/extern.diff
new file mode 100644
index 000000000..216d56f4e
--- /dev/null
+++ b/data/minicom/extern.diff
@@ -0,0 +1,31 @@
+diff -ur minicom-2.7.1/src/minicom.h minicom-2.7.1+iPhone/src/minicom.h
+--- minicom-2.7.1/src/minicom.h 2013-12-08 00:26:03.000000000 -1000
++++ minicom-2.7.1+iPhone/src/minicom.h 2018-08-18 18:24:02.000000000 -1000
+@@ -109,13 +109,13 @@
+
+ EXTERN char *dial_name; /* System we're conneced to */
+ EXTERN char *dial_number; /* Number we've dialed. */
+-EXTERN char *dial_user; /* Our username there */
+-EXTERN char *dial_pass; /* Our password */
++extern char *dial_user; /* Our username there */
++extern char *dial_pass; /* Our password */
+
+ #ifdef USE_SOCKET
+-EXTERN int portfd_is_socket; /* File descriptor is a unix socket */
+-EXTERN int portfd_is_connected; /* 1 if the socket is connected */
+-EXTERN struct sockaddr_un portfd_sock_addr; /* the unix socket address */
++extern int portfd_is_socket; /* File descriptor is a unix socket */
++extern int portfd_is_connected; /* 1 if the socket is connected */
++extern struct sockaddr_un portfd_sock_addr; /* the unix socket address */
+ #define portfd_connected ((portfd_is_socket && !portfd_is_connected) \
+ ? -1 : portfd)
+ #else
+@@ -141,7 +141,7 @@
+ EXTERN int st_attr; /* Status Bar attributes. */
+
+ /* jl 04.09.97 conversion tables */
+-EXTERN unsigned char vt_outmap[256], vt_inmap[256];
++extern unsigned char vt_outmap[256], vt_inmap[256];
+
+ /* MARK updated 02/17/95 - history buffer */
+ EXTERN int num_hist_lines; /* History buffer size */
diff --git a/data/minicom/make.sh b/data/minicom/make.sh
index 452a4bfd5..fbc999151 100644
--- a/data/minicom/make.sh
+++ b/data/minicom/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/minicom/minicom-2.2.tar.gz b/data/minicom/minicom-2.2.tar.gz
deleted file mode 100644
index 1637a8993..000000000
--- a/data/minicom/minicom-2.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/minicom/minicom-2.7.1.tar.gz b/data/minicom/minicom-2.7.1.tar.gz
new file mode 100644
index 000000000..a4f7b8c2b
--- /dev/null
+++ b/data/minicom/minicom-2.7.1.tar.gz
Binary files differ
diff --git a/data/minicom/timestamp.diff b/data/minicom/timestamp.diff
index 6945ae8f7..15ad9b564 100644
--- a/data/minicom/timestamp.diff
+++ b/data/minicom/timestamp.diff
@@ -1,7 +1,7 @@
-diff -ru minicom-2.2/src/minicom.c minicom-2.2+iPhone/src/minicom.c
---- minicom-2.2/src/minicom.c 2005-10-31 12:13:51.000000000 +0000
-+++ minicom-2.2+iPhone/src/minicom.c 2008-06-18 01:41:33.000000000 +0000
-@@ -1028,9 +1028,6 @@
+diff -ur minicom-2.7.1/src/minicom.c minicom-2.7.1+iPhone/src/minicom.c
+--- minicom-2.7.1/src/minicom.c 2013-12-08 00:34:44.000000000 -1000
++++ minicom-2.7.1+iPhone/src/minicom.c 2018-08-18 11:44:56.000000000 -1000
+@@ -1159,9 +1159,6 @@
switch(c) {
case 'v':
printf(_("%s version %s"), PACKAGE, VERSION);
@@ -11,14 +11,15 @@ diff -ru minicom-2.2/src/minicom.c minicom-2.2+iPhone/src/minicom.c
printf("\n");
printf(_("Copyright (C) Miquel van Smoorenburg.\n\n"));
printf("This program is free software; you can redistribute it and/or\n"
-@@ -1340,9 +1337,7 @@
+@@ -1462,9 +1459,6 @@
- wprintf(us, "\n%s %s\r\n", _("Welcome to minicom"), VERSION);
- wprintf(us, "\n%s: %s\r\n", _("OPTIONS"), option_string);
+ mc_wprintf(us, "\n%s %s\r\n", _("Welcome to minicom"), VERSION);
+ mc_wprintf(us, "\n%s: %s\r\n", _("OPTIONS"), option_string);
-#if defined (__DATE__) && defined (__TIME__)
-- wprintf(us, "%s %s, %s.\r\n",_("Compiled on"), __DATE__,__TIME__);
+- mc_wprintf(us, "%s %s, %s.\r\n",_("Compiled on"), __DATE__,__TIME__);
-#endif
-+
- wprintf(us, "Port %s\n", P_PORT);
- wprintf(us, _("\nPress %sZ for help on special keys%c\n\n"),esc_key(),'\r');
-
+ {
+ struct stat st;
+ char port_date[20] = "";
+Only in minicom-2.7.1+iPhone/src: minicom.c.orig
+Only in minicom-2.7.1+iPhone/src: minicom.c.rej
diff --git a/data/minicom/types.diff b/data/minicom/types.diff
deleted file mode 100644
index 153cf813c..000000000
--- a/data/minicom/types.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru minicom-2.2/src/minicom.h minicom-2.2+iPhone/src/minicom.h
---- minicom-2.2/src/minicom.h 2005-10-31 11:10:57.000000000 +0000
-+++ minicom-2.2+iPhone/src/minicom.h 2008-01-02 00:24:32.000000000 +0000
-@@ -34,6 +34,8 @@
- #include <sys/un.h>
- #endif
-
-+#include <sys/types.h>
-+
- /*
- * kubota@debian.or.jp 08/08/98
- * COLS must be equal to or less than MAXCOLS.
diff --git a/data/minicom/wprintf.diff b/data/minicom/wprintf.diff
deleted file mode 100644
index 01d7b8d06..000000000
--- a/data/minicom/wprintf.diff
+++ /dev/null
@@ -1,1157 +0,0 @@
-diff -ru minicom-2.2/src/config.c minicom-2.2+iPhone/src/config.c
---- minicom-2.2/src/config.c 2006-04-02 09:52:30.000000000 +0000
-+++ minicom-2.2+iPhone/src/config.c 2008-01-02 00:20:52.000000000 +0000
-@@ -253,9 +253,9 @@
- w = wopen(5, 4, 75, 8, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);
-
- wtitle(w, TMID, _("Logging options"));
-- wprintf(w, "%s %s\n", logfnstr, P_LOGFNAME);
-- wprintf(w, "%s %s\n", logconn, _(P_LOGCONN));
-- wprintf(w, "%s %s\n", logxfer, _(P_LOGXFER));
-+ wprintf_(w, "%s %s\n", logfnstr, P_LOGFNAME);
-+ wprintf_(w, "%s %s\n", logconn, _(P_LOGCONN));
-+ wprintf_(w, "%s %s\n", logxfer, _(P_LOGXFER));
- wlocate(w, 4, 4);
- wputs(w, question);
- wredraw(w, 1);
-@@ -274,13 +274,13 @@
- case 'B':
- strcpy(P_LOGCONN, yesno(P_LOGCONN[0] == 'N'));
- wlocate(w, mbslen(logconn) + 1, 1);
-- wprintf(w, "%s ", _(P_LOGCONN));
-+ wprintf_(w, "%s ", _(P_LOGCONN));
- markch(P_LOGCONN);
- break;
- case 'C':
- strcpy(P_LOGXFER, yesno(P_LOGXFER[0] == 'N'));
- wlocate(w, mbslen(logxfer) + 1, 2);
-- wprintf(w, "%s ", _(P_LOGXFER));
-+ wprintf_(w, "%s ", _(P_LOGXFER));
- markch(P_LOGXFER);
- break;
- default:
-@@ -305,13 +305,13 @@
- char *question = _("Change which setting?");
-
- w = wopen(5, 5, 75, 12, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);
-- wprintf(w, "%s %.44s\n", download_directory, P_DOWNDIR);
-- wprintf(w, "%s %.44s\n", upload_directory, P_UPDIR);
-- wprintf(w, "%s %.44s\n", script_directory, P_SCRIPTDIR);
-- wprintf(w, "%s %.44s\n", script_program, P_SCRIPTPROG);
-- wprintf(w, "%s %.44s\n", kermit_program, P_KERMIT);
-+ wprintf_(w, "%s %.44s\n", download_directory, P_DOWNDIR);
-+ wprintf_(w, "%s %.44s\n", upload_directory, P_UPDIR);
-+ wprintf_(w, "%s %.44s\n", script_directory, P_SCRIPTDIR);
-+ wprintf_(w, "%s %.44s\n", script_program, P_SCRIPTPROG);
-+ wprintf_(w, "%s %.44s\n", kermit_program, P_KERMIT);
- #ifdef LOGFILE
-- wprintf(w, "%s\n", log_settings);
-+ wprintf_(w, "%s\n", log_settings);
- #endif
- wlocate(w, 4, 8);
- wputs(w, question);
-@@ -381,7 +381,7 @@
- pgets(w, 15, n+1, P_PPROG(n), 31, 64);
- do {
- wlocate(w, 47, n + 1);
-- wprintf(w, "%c", P_PNN(n));
-+ wprintf_(w, "%c", P_PNN(n));
- c = rwxgetch();
- if (c == 'Y')
- P_PNN(n) = 'Y';
-@@ -390,7 +390,7 @@
- } while (c != '\r' && c != '\n');
- do {
- wlocate(w, 52, n + 1);
-- wprintf(w, "%c", P_PUD(n));
-+ wprintf_(w, "%c", P_PUD(n));
- c = rwxgetch();
- if (c == 'U')
- P_PUD(n) = 'U';
-@@ -399,7 +399,7 @@
- } while (c != '\r' && c != '\n');
- do {
- wlocate(w, 57, n + 1);
-- wprintf(w, "%c", P_PFULL(n));
-+ wprintf_(w, "%c", P_PFULL(n));
- c = rwxgetch();
- if (c == 'Y')
- P_PFULL(n) = 'Y';
-@@ -408,7 +408,7 @@
- } while (c != '\r' && c != '\n');
- do {
- wlocate(w, 65, n + 1);
-- wprintf(w, "%c", P_PIORED(n));
-+ wprintf_(w, "%c", P_PIORED(n));
- c = rwxgetch();
- if (c == 'Y')
- P_PIORED(n) = 'Y';
-@@ -417,7 +417,7 @@
- } while (c != '\r' && c != '\n');
- do {
- wlocate(w, 73, n + 1);
-- wprintf(w, "%c", P_MUL(n));
-+ wprintf_(w, "%c", P_MUL(n));
- c = rwxgetch();
- if (c == 'Y')
- P_MUL(n) = 'Y';
-@@ -449,21 +449,21 @@
- for (f = 0; f < 12; f++) {
- wlocate(w, 1, f + 1);
- if (P_PNAME(f)[0])
-- wprintf(w, "%c %-10.10s %-31.31s %c %c %c %c %c",
-+ wprintf_(w, "%c %-10.10s %-31.31s %c %c %c %c %c",
- 'A' + f,
- P_PNAME(f), P_PPROG(f),
- P_PNN(f), P_PUD(f),
- P_PFULL(f), P_PIORED(f),
- P_MUL(f));
- else
-- wprintf(w, "%c -", 'A' + f);
-+ wprintf_(w, "%c -", 'A' + f);
- }
- wlocate(w, 1, 13);
-- wprintf(w, "%s %c", zmodem_download, P_PAUTO[0]);
-+ wprintf_(w, "%s %c", zmodem_download, P_PAUTO[0]);
- wlocate(w, 1, 14);
-- wprintf(w, "%s %s", use_filename_selection, _(P_FSELW));
-+ wprintf_(w, "%s %s", use_filename_selection, _(P_FSELW));
- wlocate(w, 1, 15);
-- wprintf(w, "%s %s", prompt_downdir, _(P_ASKDNDIR));
-+ wprintf_(w, "%s %s", prompt_downdir, _(P_ASKDNDIR));
-
- wlocate(w, 3, 17);
- wputs(w, question);
-@@ -492,17 +492,17 @@
- }
- else if (c == 'M') {
- wlocate(w, mbslen (zmodem_download) + 2, 13);
-- wprintf(w, " \b");
-+ wprintf_(w, " \b");
- c = rwxgetch();
- if (c >= 'A' && c <= 'L') {
- P_PAUTO[0] = c;
- markch(P_PAUTO);
-- wprintf(w, "%c", c);
-+ wprintf_(w, "%c", c);
- } else if (c == '\n' || c == ' ') {
- P_PAUTO[0] = ' ';
- markch(P_PAUTO);
- } else {
-- wprintf(w, "%c", P_PAUTO[0]);
-+ wprintf_(w, "%c", P_PAUTO[0]);
- }
- c = 0;
- }
-@@ -511,11 +511,11 @@
- if (P_FSELW[0] == 'N') {
- strcpy(P_ASKDNDIR, "No ");
- wlocate(w, mbslen (prompt_downdir) + 2, 15);
-- wprintf(w, "%s ", _(P_ASKDNDIR));
-+ wprintf_(w, "%s ", _(P_ASKDNDIR));
- markch(P_ASKDNDIR);
- }
- wlocate(w, mbslen (use_filename_selection) + 2, 14);
-- wprintf(w, "%s ", _(P_FSELW));
-+ wprintf_(w, "%s ", _(P_FSELW));
- markch(P_FSELW);
- }
- else if (c == 'O') {
-@@ -523,11 +523,11 @@
- if (P_ASKDNDIR[0] == 'Y') {
- strcpy(P_FSELW, "Yes");
- wlocate(w, mbslen (use_filename_selection) + 2, 14);
-- wprintf(w, "%s ", _(P_FSELW));
-+ wprintf_(w, "%s ", _(P_FSELW));
- markch(P_FSELW);
- }
- wlocate(w, mbslen (prompt_downdir) + 2, 15);
-- wprintf(w, "%s ", _(P_ASKDNDIR));
-+ wprintf_(w, "%s ", _(P_ASKDNDIR));
- markch(P_ASKDNDIR);
- }
- } while (c != '\n');
-@@ -547,14 +547,14 @@
- char *question = _("Change which setting?");
-
- w = wopen(5, 4, 75, 12, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);
-- wprintf(w, "%s %.41s\n", serial_device, P_PORT);
-- wprintf(w, "%s %.41s\n", lockfile_location, P_LOCK);
-- wprintf(w, "%s %.41s\n", callin_program, P_CALLIN);
-- wprintf(w, "%s %.41s\n", callout_program, P_CALLOUT);
-- wprintf(w, "%s %s %s%s%s\n",
-+ wprintf_(w, "%s %.41s\n", serial_device, P_PORT);
-+ wprintf_(w, "%s %.41s\n", lockfile_location, P_LOCK);
-+ wprintf_(w, "%s %.41s\n", callin_program, P_CALLIN);
-+ wprintf_(w, "%s %.41s\n", callout_program, P_CALLOUT);
-+ wprintf_(w, "%s %s %s%s%s\n",
- bps_par_bits, P_BAUDRATE, P_BITS, P_PARITY, P_STOPB);
-- wprintf(w, "%s %s\n", hardware_flow_control, _(P_HASRTS));
-- wprintf(w, "%s %s\n", software_flow_control, _(P_HASXON));
-+ wprintf_(w, "%s %s\n", hardware_flow_control, _(P_HASRTS));
-+ wprintf_(w, "%s %s\n", software_flow_control, _(P_HASXON));
- wlocate(w, 4, 8);
- wputs(w, question);
- wredraw(w, 1);
-@@ -582,7 +582,7 @@
- if (portfd >= 0)
- port_init();
- wlocate(w, mbslen (bps_par_bits) + 1, 4);
-- wprintf(w, "%s %s%s%s \n",
-+ wprintf_(w, "%s %s%s%s \n",
- P_BAUDRATE, P_BITS, P_PARITY, P_STOPB);
- if (st)
- mode_status();
-@@ -594,7 +594,7 @@
- case 'F':
- strcpy(P_HASRTS, yesno(P_HASRTS[0] == 'N'));
- wlocate(w, mbslen (hardware_flow_control) + 1, 5);
-- wprintf(w, "%s ", _(P_HASRTS));
-+ wprintf_(w, "%s ", _(P_HASRTS));
- if (portfd >= 0)
- port_init();
- markch(P_HASRTS);
-@@ -602,7 +602,7 @@
- case 'G':
- strcpy(P_HASXON, yesno(P_HASXON[0] == 'N'));
- wlocate(w, mbslen (software_flow_control) + 1, 6);
-- wprintf(w, "%s ", _(P_HASXON));
-+ wprintf_(w, "%s ", _(P_HASXON));
- if (portfd >= 0)
- port_init();
- markch(P_HASXON);
-@@ -652,39 +652,39 @@
-
- dirflush = 0;
- wtitle(w, TMID, _("Modem and dialing parameter setup"));
-- wprintf(w, "\n");
-- wprintf(w, "%s %.48s\n", init_string, P_MINIT);
-- wprintf(w, "%s %.48s\n", reset_string, P_MRESET);
-- wprintf(w, "%s %.48s\n", dialing_prefix_1, P_MDIALPRE);
-- wprintf(w, "%s %.48s\n", dialing_suffix_1, P_MDIALSUF);
-- wprintf(w, "%s %.48s\n", dialing_prefix_2, P_MDIALPRE2);
-- wprintf(w, "%s %.48s\n", dialing_suffix_2, P_MDIALSUF2);
-- wprintf(w, "%s %.48s\n", dialing_prefix_3, P_MDIALPRE3);
-- wprintf(w, "%s %.48s\n", dialing_suffix_3, P_MDIALSUF3);
-- wprintf(w, "%s %.48s\n", connect_string, P_MCONNECT);
-- wprintf(w, "%s %-20.20s %.20s\n", no_connect_strings, P_MNOCON1, P_MNOCON2);
-+ wprintf_(w, "\n");
-+ wprintf_(w, "%s %.48s\n", init_string, P_MINIT);
-+ wprintf_(w, "%s %.48s\n", reset_string, P_MRESET);
-+ wprintf_(w, "%s %.48s\n", dialing_prefix_1, P_MDIALPRE);
-+ wprintf_(w, "%s %.48s\n", dialing_suffix_1, P_MDIALSUF);
-+ wprintf_(w, "%s %.48s\n", dialing_prefix_2, P_MDIALPRE2);
-+ wprintf_(w, "%s %.48s\n", dialing_suffix_2, P_MDIALSUF2);
-+ wprintf_(w, "%s %.48s\n", dialing_prefix_3, P_MDIALPRE3);
-+ wprintf_(w, "%s %.48s\n", dialing_suffix_3, P_MDIALSUF3);
-+ wprintf_(w, "%s %.48s\n", connect_string, P_MCONNECT);
-+ wprintf_(w, "%s %-20.20s %.20s\n", no_connect_strings, P_MNOCON1, P_MNOCON2);
- wlocate(w, mbslen (no_connect_strings) + 1, 11);
-- wprintf(w, "%-20.20s %.20s\n", P_MNOCON3, P_MNOCON4);
-- wprintf(w, "%s %.48s\n", hangup_string, P_MHANGUP);
-- wprintf(w, "%s %.48s\n", dial_cancel_string, P_MDIALCAN);
-- wprintf(w, "\n");
-- wprintf(w, "%s %.3s\n", dial_time, P_MDIALTIME);
-- wprintf(w, "%s %.3s\n", delay_before_redial, P_MRDELAY);
-- wprintf(w, "%s %.3s\n", number_of_tries, P_MRETRIES);
-- wprintf(w, "%s %.3s\n", dtr_drop_time, P_MDROPDTR);
-+ wprintf_(w, "%-20.20s %.20s\n", P_MNOCON3, P_MNOCON4);
-+ wprintf_(w, "%s %.48s\n", hangup_string, P_MHANGUP);
-+ wprintf_(w, "%s %.48s\n", dial_cancel_string, P_MDIALCAN);
-+ wprintf_(w, "\n");
-+ wprintf_(w, "%s %.3s\n", dial_time, P_MDIALTIME);
-+ wprintf_(w, "%s %.3s\n", delay_before_redial, P_MRDELAY);
-+ wprintf_(w, "%s %.3s\n", number_of_tries, P_MRETRIES);
-+ wprintf_(w, "%s %.3s\n", dtr_drop_time, P_MDROPDTR);
- wlocate(w, 34, 15);
-- wprintf(w, "%s %s\n", auto_bps_detect, _(P_MAUTOBAUD));
-+ wprintf_(w, "%s %s\n", auto_bps_detect, _(P_MAUTOBAUD));
- wlocate(w, 34, 16);
-- wprintf(w, "%s %s\n", modem_has_dcd_line, _(P_HASDCD));
-+ wprintf_(w, "%s %s\n", modem_has_dcd_line, _(P_HASDCD));
- wlocate(w, 34, 17);
-- wprintf(w, "%s %s\n", shown_speed, sspd(P_SHOWSPD));
-+ wprintf_(w, "%s %s\n", shown_speed, sspd(P_SHOWSPD));
- wlocate(w, 34, 18); /* Option for multi-node untag */
-- wprintf(w, "%s %s\n", multi_node, _(P_MULTILINE)); /* er 18-Apr-99 */
-+ wprintf_(w, "%s %s\n", multi_node, _(P_MULTILINE)); /* er 18-Apr-99 */
-
- wlocate(w, 1, 20);
-- wprintf(w, "%s ", question);
-+ wprintf_(w, "%s ", question);
- x = w->curx; y = w->cury;
-- wprintf(w, _(" (Return or Esc to exit)"));
-+ wprintf_(w, _(" (Return or Esc to exit)"));
- wredraw(w, 1);
-
- while (1) {
-@@ -826,36 +826,36 @@
-
- wtitle(w, TMID, _("Screen and keyboard"));
-
-- wprintf(w, "\n%s %s\n", command_key, P_ESCAPE);
-- wprintf(w, "%s %s\n", backspace_key, P_BACKSPACE);
-- wprintf(w, "%s %s\n", status_line, _(P_STATLINE));
-- wprintf(w, "%s %s\n", alarm_sound, _(P_SOUND));
-+ wprintf_(w, "\n%s %s\n", command_key, P_ESCAPE);
-+ wprintf_(w, "%s %s\n", backspace_key, P_BACKSPACE);
-+ wprintf_(w, "%s %s\n", status_line, _(P_STATLINE));
-+ wprintf_(w, "%s %s\n", alarm_sound, _(P_SOUND));
- /* fmg - colors support */
-- wprintf(w, "%s %s\n", foreground_color_menu, _(J_col[mfcolor]));
-- wprintf(w, "%s %s\n", background_color_menu, _(J_col[mbcolor]));
-- wprintf(w, "%s %s\n", foreground_color_term, _(J_col[tfcolor]));
-- wprintf(w, "%s %s\n", background_color_term, _(J_col[tbcolor]));
-- wprintf(w, "%s %s\n", foreground_color_stat, _(J_col[sfcolor]));
-- wprintf(w, "%s %s\n", background_color_stat, _(J_col[sbcolor]));
-+ wprintf_(w, "%s %s\n", foreground_color_menu, _(J_col[mfcolor]));
-+ wprintf_(w, "%s %s\n", background_color_menu, _(J_col[mbcolor]));
-+ wprintf_(w, "%s %s\n", foreground_color_term, _(J_col[tfcolor]));
-+ wprintf_(w, "%s %s\n", background_color_term, _(J_col[tbcolor]));
-+ wprintf_(w, "%s %s\n", foreground_color_stat, _(J_col[sfcolor]));
-+ wprintf_(w, "%s %s\n", background_color_stat, _(J_col[sbcolor]));
-
- /* MARK updated 02/17/95 - Configurable history buffer size */
-- wprintf(w, "%s %s\n", history_buffer_size, P_HISTSIZE);
-+ wprintf_(w, "%s %s\n", history_buffer_size, P_HISTSIZE);
-
- /* fmg - macros support */
-- wprintf(w, "%s %s\n", macros_file, P_MACROS);
-- wprintf(w, _(" M - Edit Macros\n"));
-- wprintf(w, "%s %s\n", macros_enabled, _(P_MACENAB));
-- wprintf(w, "%s %s\n", character_conversion, P_CONVF);
-+ wprintf_(w, "%s %s\n", macros_file, P_MACROS);
-+ wprintf_(w, _(" M - Edit Macros\n"));
-+ wprintf_(w, "%s %s\n", macros_enabled, _(P_MACENAB));
-+ wprintf_(w, "%s %s\n", character_conversion, P_CONVF);
-
-- wprintf(w, "%s %s\n", add_linefeed, P_ADDLINEFEED);
-- wprintf(w, "%s %s\n", local_echo, P_LOCALECHO);
-+ wprintf_(w, "%s %s\n", add_linefeed, P_ADDLINEFEED);
-+ wprintf_(w, "%s %s\n", local_echo, P_LOCALECHO);
-
- wredraw(w, 1);
-
- while (1) {
- if (clr) {
- wlocate(w, 2, maxy - miny);
-- wprintf(w, "%s ", question);
-+ wprintf_(w, "%s ", question);
- wclreol(w);
- clr = 0;
- } else
-@@ -961,7 +961,7 @@
- else
- psets(P_BACKSPACE, "DEL");
- wlocate(w, mbslen (backspace_key) + 1, 2);
-- wprintf(w, "%s ", P_BACKSPACE);
-+ wprintf_(w, "%s ", P_BACKSPACE);
- keyboard(KSETBS, P_BACKSPACE[0] == 'B' ? 8 : 127);
- break;
- case 'C':
-@@ -975,12 +975,12 @@
- tempst = 0;
- }
- wlocate(w, mbslen (status_line) + 1, 3);
-- wprintf(w, "%s ", _(P_STATLINE));
-+ wprintf_(w, "%s ", _(P_STATLINE));
- break;
- case 'D':
- psets(P_SOUND, yesno(P_SOUND[0] == 'N'));
- wlocate(w, mbslen (alarm_sound) + 1, 4);
-- wprintf(w, "%s", _(P_SOUND));
-+ wprintf_(w, "%s", _(P_SOUND));
- break;
- case 'E': /* fmg - letters cycle colors */
- if (mfcolor == WHITE)
-@@ -989,7 +989,7 @@
- mfcolor++;
- psets(P_MFG, J_col[mfcolor]);
- wlocate(w, mbslen (foreground_color_menu) + 1, 5);
-- wprintf(w, "%s ", _(J_col[mfcolor]));
-+ wprintf_(w, "%s ", _(J_col[mfcolor]));
- break;
- case 'F': /* fmg - letters cycle colors */
- if (mbcolor == WHITE)
-@@ -998,7 +998,7 @@
- mbcolor++;
- psets(P_MBG, J_col[mbcolor]);
- wlocate(w, mbslen (background_color_menu) + 1, 6);
-- wprintf(w, "%s ", _(J_col[mbcolor]));
-+ wprintf_(w, "%s ", _(J_col[mbcolor]));
- break;
- case 'G': /* fmg - letters cycle colors */
- if (tfcolor == WHITE)
-@@ -1007,7 +1007,7 @@
- tfcolor++;
- psets(P_TFG, J_col[tfcolor]);
- wlocate(w, mbslen (foreground_color_term) + 1, 7);
-- wprintf(w, "%s ", _(J_col[tfcolor]));
-+ wprintf_(w, "%s ", _(J_col[tfcolor]));
- if (us)
- vt_pinit(us, tfcolor, tbcolor);
- break;
-@@ -1018,7 +1018,7 @@
- tbcolor++;
- psets(P_TBG, J_col[tbcolor]);
- wlocate(w, mbslen (background_color_term) + 1, 8);
-- wprintf(w, "%s ", _(J_col[tbcolor]));
-+ wprintf_(w, "%s ", _(J_col[tbcolor]));
- if (us)
- vt_pinit(us, tfcolor, tbcolor);
- break;
-@@ -1039,7 +1039,7 @@
- }
- psets(P_SFG, J_col[sfcolor]);
- wlocate(w, mbslen (foreground_color_stat) + 1, 9);
-- wprintf(w, "%s ", _(J_col[sfcolor]));
-+ wprintf_(w, "%s ", _(J_col[sfcolor]));
- break;
- case 'J': /* fmg - letters cycle colors & redraw stat line */
- if (sbcolor == WHITE)
-@@ -1058,7 +1058,7 @@
- }
- psets(P_SBG, J_col[sbcolor]);
- wlocate(w, mbslen (background_color_stat) + 1, 10);
-- wprintf(w, "%s ", _(J_col[sbcolor]));
-+ wprintf_(w, "%s ", _(J_col[sbcolor]));
- break;
- case 'K': /* MARK updated 02/17/95 - Config history size */
- pgets(w, mbslen (history_buffer_size) + 1, 11,
-@@ -1074,7 +1074,7 @@
- strcpy(P_HISTSIZE,"5000");
-
- wlocate(w, mbslen (history_buffer_size) + 1, 11);
-- wprintf(w, "%s ", P_HISTSIZE);
-+ wprintf_(w, "%s ", P_HISTSIZE);
- break;
- case 'L': /* fmg - get local macros storage file */
- pgets(w, mbslen (macros_file) + 1, 12, P_MACROS, 64, 64);
-@@ -1106,22 +1106,22 @@
- case 'N':
- psets(P_MACENAB, yesno(P_MACENAB[0] == 'N'));
- wlocate(w, mbslen (macros_enabled) + 1, 14);
-- wprintf(w, "%s", _(P_MACENAB));
-+ wprintf_(w, "%s", _(P_MACENAB));
- break;
- case 'O': /* Character conversions - jl / 04.09.97 */
- doconv();
- wlocate(w, mbslen (character_conversion) + 1, 15);
-- wprintf(w, "%-16.16s", _(P_CONVF));
-+ wprintf_(w, "%-16.16s", _(P_CONVF));
- break;
- case 'P':
- psets(P_ADDLINEFEED, yesno(P_ADDLINEFEED[0] == 'N'));
- wlocate(w, strlen (add_linefeed) + 1, 15);
-- wprintf(w, "%s", _(P_ADDLINEFEED));
-+ wprintf_(w, "%s", _(P_ADDLINEFEED));
- break;
- case 'Q':
- psets(P_LOCALECHO, yesno(P_LOCALECHO[0] == 'N'));
- wlocate(w, strlen (local_echo) + 1, 16);
-- wprintf(w, "%s", _(P_LOCALECHO));
-+ wprintf_(w, "%s", _(P_LOCALECHO));
- break;
- }
- }
-@@ -1148,12 +1148,12 @@
-
- w = wopen(15, 7, 64, 15, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);
- wtitle(w, TMID, _("Terminal settings"));
-- wprintf(w, "\n");
-- wprintf(w, "%s %s\n", terminal_emulation, terminal == VT100 ? "VT102" : "ANSI");
-- wprintf(w, "%s %s\n", backspace_key_sends, P_BACKSPACE);
-- wprintf(w, "%s %s\n", status_line, _(P_STATLINE));
-- wprintf(w, "%s %d\n", msg_nl_delay, vt_nl_delay);
-- wprintf(w, "%s %s\n", msg_answerback, P_ANSWERBACK);
-+ wprintf_(w, "\n");
-+ wprintf_(w, "%s %s\n", terminal_emulation, terminal == VT100 ? "VT102" : "ANSI");
-+ wprintf_(w, "%s %s\n", backspace_key_sends, P_BACKSPACE);
-+ wprintf_(w, "%s %s\n", status_line, _(P_STATLINE));
-+ wprintf_(w, "%s %d\n", msg_nl_delay, vt_nl_delay);
-+ wprintf_(w, "%s %s\n", msg_answerback, P_ANSWERBACK);
- wlocate(w, 4, 7);
- wputs(w, question);
-
-@@ -1180,9 +1180,9 @@
- psets(P_BACKSPACE, "DEL");
- }
- wlocate(w, mbslen (terminal_emulation) + 1, 1);
-- wprintf(w, "%s ", new_term == VT100 ? "VT102" : "ANSI");
-+ wprintf_(w, "%s ", new_term == VT100 ? "VT102" : "ANSI");
- wlocate(w, mbslen (backspace_key_sends) + 1, 2);
-- wprintf(w, "%s ", P_BACKSPACE);
-+ wprintf_(w, "%s ", P_BACKSPACE);
- keyboard(KSETBS, P_BACKSPACE[0] == 'B' ? 8 : 127);
- break;
- case 'B':
-@@ -1191,7 +1191,7 @@
- else
- psets(P_BACKSPACE, "DEL");
- wlocate(w, mbslen (backspace_key_sends) + 1, 2);
-- wprintf(w, "%s ", P_BACKSPACE);
-+ wprintf_(w, "%s ", P_BACKSPACE);
- keyboard(KSETBS, P_BACKSPACE[0] == 'B' ? 8 : 127);
- break;
- case 'C':
-@@ -1205,7 +1205,7 @@
- tempst = 0;
- }
- wlocate(w, mbslen (status_line) + 1, 3);
-- wprintf(w, "%s ", _(P_STATLINE));
-+ wprintf_(w, "%s ", _(P_STATLINE));
- break;
- case 'D':
- sprintf(buf, "%d", vt_nl_delay);
-@@ -1213,7 +1213,7 @@
- wgets(w, buf, 4, 4);
- vt_nl_delay = atoi(buf);
- wlocate(w, mbslen(msg_nl_delay) +1, 4);
-- wprintf(w, "%-3d", vt_nl_delay);
-+ wprintf_(w, "%-3d", vt_nl_delay);
- break;
- case 'E':
- pgets(w, strlen(msg_answerback) + 1, 5, P_ANSWERBACK, 50, 50);
-@@ -1423,7 +1423,7 @@
-
- while (1) {
- wlocate(w, 1, 1);
-- wprintf(w, _("Current: %5s %s%s%s "), ba, bi, pa, stopb);
-+ wprintf_(w, _("Current: %5s %s%s%s "), ba, bi, pa, stopb);
- wlocate(w, x, y);
- wflush();
- c = wxgetch();
-@@ -1537,7 +1537,7 @@
- */
- static void out_mac(WIN *w, char *s, char n)
- {
-- wprintf(w, " %c : %.67s\n", n, s ? s : "[none]");
-+ wprintf_(w, " %c : %.67s\n", n, s ? s : "[none]");
- }
-
- /*
-@@ -1553,7 +1553,7 @@
- w = wopen(3, 6, 75, 24, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);
- wtitle(w, TMID, _("F1 to F10 Macros"));
-
-- wprintf(w, "\n");
-+ wprintf_(w, "\n");
- out_mac(w,mmacs[Jm++].value, Jch++);
- out_mac(w,mmacs[Jm++].value, Jch++);
- out_mac(w,mmacs[Jm++].value, Jch++);
-@@ -1579,7 +1579,7 @@
- wputs(w, _(" = 19200 8N1. (See the \"Comm Parameters\" menu for valid values of X.))"));
- if (clr) {
- wlocate(w, 1, 12);
-- wprintf(w, "%s ", question);
-+ wprintf_(w, "%s ", question);
- wclreol(w);
- clr = 0;
- } else
-@@ -1682,34 +1682,34 @@
- while (1) {
- if (redraw) {
- winclr(w);
-- wprintf(w,
-+ wprintf_(w,
- _(" char in out char in out char in out char in out\n"));
- for (i = offs, j = i+h, k = j+h, l = k+h;
- i < offs+h && i < 256;
- i++, j++, k++, l++) {
-- wprintf(w, "%3d (%c) %3d %3d ",
-+ wprintf_(w, "%3d (%c) %3d %3d ",
- i, prch(i), (int) vt_inmap[i], (int) vt_outmap[i]);
- if (j < 256)
-- wprintf(w, "%3d (%c) %3d %3d ",
-+ wprintf_(w, "%3d (%c) %3d %3d ",
- j, prch(j), (int) vt_inmap[j], (int) vt_outmap[j]);
- else
-- wprintf(w, " ");
-+ wprintf_(w, " ");
- if (k < 256)
-- wprintf(w, "%3d (%c) %3d %3d ",
-+ wprintf_(w, "%3d (%c) %3d %3d ",
- k, prch(k), (int) vt_inmap[k], (int) vt_outmap[k]);
- else
-- wprintf(w, " ");
-+ wprintf_(w, " ");
- if (l < 256)
-- wprintf(w, "%3d (%c) %3d %3d\n",
-+ wprintf_(w, "%3d (%c) %3d %3d\n",
- l, prch(l), (int) vt_inmap[l], (int) vt_outmap[l]);
- else
-- wprintf(w, " \n");
-+ wprintf_(w, " \n");
- }
-- wprintf(w, _("\n A - load table\tB - save table"));
-+ wprintf_(w, _("\n A - load table\tB - save table"));
- if (P_CONVF[0])
-- wprintf(w, _("\tfile:%s"),P_CONVF);
-- wprintf(w, _("\n C - edit char\tD - next screen\tE - prev screen\n"));
-- wprintf(w, _(" F - convert capture: %s\n"), _(P_CONVCAP));
-+ wprintf_(w, _("\tfile:%s"),P_CONVF);
-+ wprintf_(w, _("\n C - edit char\tD - next screen\tE - prev screen\n"));
-+ wprintf_(w, _(" F - convert capture: %s\n"), _(P_CONVCAP));
-
- wredraw(w, 1);
- redraw = 0;
-@@ -1725,7 +1725,7 @@
- case 'A':
- strcpy(buf,P_CONVF);
- prompt=_("Load file: %s");
-- wprintf(w, prompt, buf);
-+ wprintf_(w, prompt, buf);
- pgets(w, mbslen(prompt) - 1, ymax - 1, P_CONVF, 64, 64);
- if (loadconv(P_CONVF) == 0) {
- if (strcmp(P_CONVF,buf))
-@@ -1737,7 +1737,7 @@
- case 'B':
- strcpy(buf,P_CONVF);
- prompt=_("Save as file: %s");
-- wprintf(w, prompt, buf);
-+ wprintf_(w, prompt, buf);
- pgets(w, mbslen(prompt) - 1, ymax - 1, P_CONVF, 64, 64);
- if (saveconv(P_CONVF) == 0) {
- if (strcmp(P_CONVF,buf))
-@@ -1748,7 +1748,7 @@
- break;
- case 'C':
- prompt = _("Character to be edited: ");
-- wprintf(w, prompt);
-+ wprintf_(w, prompt);
- buf[0] = 0;
- i = -1;
- wlocate(w, mbslen(prompt), ymax - 1);
-@@ -1762,7 +1762,7 @@
- sprintf(buf, "%u",(unsigned int) vt_inmap[i]);
- wlocate(w, 30, ymax - 1);
- prompt=_("Change input to: %s");
-- wprintf(w, prompt,buf);
-+ wprintf_(w, prompt,buf);
- wlocate(w, mbslen(prompt) + 28, ymax - 1);
- wgets(w, buf, 4, 4);
- sscanf(buf, "%d", &j);
-@@ -1774,7 +1774,7 @@
- sprintf(buf, "%u",(unsigned int) vt_outmap[i]);
- wlocate(w, 54, ymax - 1);
- prompt = _("Change output to: %s");
-- wprintf(w, prompt, buf);
-+ wprintf_(w, prompt, buf);
- wlocate(w, mbslen(prompt) + 52, ymax - 1);
- wgets(w, buf, 4, 4);
- sscanf(buf, "%d", &j);
-diff -ru minicom-2.2/src/dial.c minicom-2.2+iPhone/src/dial.c
---- minicom-2.2/src/dial.c 2005-10-31 12:13:51.000000000 +0000
-+++ minicom-2.2+iPhone/src/dial.c 2008-01-02 00:20:52.000000000 +0000
-@@ -353,14 +353,14 @@
- int ret = 0;
-
- wlocate(dialwin, 1, 5);
-- wprintf(dialwin, _(" No connection: %s. \n"), s);
-+ wprintf_(dialwin, _(" No connection: %s. \n"), s);
- if (rtime < 0) {
-- wprintf(dialwin, _(" Press any key to continue.. "));
-+ wprintf_(dialwin, _(" Press any key to continue.. "));
- if (check_io(-1, 0, 10000, NULL, NULL) & 2)
- keyboard(KGETKEY, 0);
- return 0;
- }
-- wprintf(dialwin, _(" Retry in %2d seconds "), rtime);
-+ wprintf_(dialwin, _(" Retry in %2d seconds "), rtime);
-
- for (f = rtime - 1; f >= 0; f--) {
- x = check_io(-1, 0, 1000, NULL, NULL);
-@@ -372,7 +372,7 @@
- break;
- }
- wlocate(dialwin, 0, 6);
-- wprintf(dialwin, _(" Retry in %2d seconds "), f);
-+ wprintf_(dialwin, _(" Retry in %2d seconds "), f);
- }
- #ifdef HAVE_USLEEP
- /* MARK updated 02/17/94 - Min dial delay set to 0.35 sec instead of 1 sec */
-@@ -383,8 +383,8 @@
- sleep(1);
- #endif
- wlocate(dialwin, 1, 5);
-- wprintf(dialwin, " \n");
-- wprintf(dialwin, " ");
-+ wprintf_(dialwin, " \n");
-+ wprintf_(dialwin, " ");
- return ret;
- }
-
-@@ -417,12 +417,12 @@
- wcursor(dialwin, CNONE);
-
- wputs(dialwin, "\n");
-- wprintf(dialwin, " %s : %s\n", _("Dialing"), d->name);
-- wprintf(dialwin, _(" At : %s"), d->number);
-- wprintf(dialwin, "\n"); /* help translators */
-+ wprintf_(dialwin, " %s : %s\n", _("Dialing"), d->name);
-+ wprintf_(dialwin, _(" At : %s"), d->number);
-+ wprintf_(dialwin, "\n"); /* help translators */
- if (d->lastdate[0] && d->lasttime[0]) /* jl 26.01.98 */
-- wprintf(dialwin, _(" Last on : %s at %s"), d->lastdate, d->lasttime);
-- wprintf(dialwin, "\n");
-+ wprintf_(dialwin, _(" Last on : %s at %s"), d->lastdate, d->lasttime);
-+ wprintf_(dialwin, "\n");
- wredraw(dialwin, 1);
-
- /* Tell keyboard routines we need them. */
-@@ -447,14 +447,14 @@
- d = dialents;
- } while (!(d->flags & FL_TAG));
- wlocate(dialwin, 0, 1);
-- wprintf(dialwin, " %s : %s", _("Dialing"), d->name);
-+ wprintf_(dialwin, " %s : %s", _("Dialing"), d->name);
- wclreol(dialwin);
-- wprintf(dialwin, "\n"); /* helps translators */
-- wprintf(dialwin, _(" At : %s"), d->number);
-+ wprintf_(dialwin, "\n"); /* helps translators */
-+ wprintf_(dialwin, _(" At : %s"), d->number);
- wclreol(dialwin);
- if (d->lastdate[0] && d->lasttime[0]) {
-- wprintf(dialwin, "\n"); /* don't merge with next printf, helps translators */
-- wprintf(dialwin, _(" Last on : %s at %s"),
-+ wprintf_(dialwin, "\n"); /* don't merge with next printf, helps translators */
-+ wprintf_(dialwin, _(" Last on : %s at %s"),
- d->lastdate, d->lasttime);
- wclreol(dialwin);
- }
-@@ -469,9 +469,9 @@
-
- /* Show used time */
- wlocate(dialwin, 0, 4);
-- wprintf(dialwin, _(" Time : %-3d"), dialtime);
-+ wprintf_(dialwin, _(" Time : %-3d"), dialtime);
- if (maxretries > 1)
-- wprintf(dialwin, _(" Attempt #%d"), retries);
-+ wprintf_(dialwin, _(" Attempt #%d"), retries);
- wputs(dialwin, _("\n\n\n Escape to cancel, space to retry."));
-
- /* Start the dial */
-@@ -591,7 +591,7 @@
- keyboard(KSTOP, 0);
- wclose(dialwin, 1);
- /* Print out the connect strings. */
-- wprintf(us, "\r\n%s\r\n", modbuf);
-+ wprintf_(us, "\r\n%s\r\n", modbuf);
- dialwin = NULL;
-
- /* Un-tag this entry. */
-@@ -646,7 +646,7 @@
- if (dialtime < 0)
- dialtime = 0;
- wlocate(dialwin, 11, 4);
-- wprintf(dialwin, "%-3d ", dialtime);
-+ wprintf_(dialwin, "%-3d ", dialtime);
- if (dialtime <= 0) {
- mputs(P_MDIALCAN, 0);
- reason = _("Timeout");
-@@ -1073,23 +1073,23 @@
- *question = _("Change which setting?");
-
- w = wopen(5, 4, 75, 19, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);
-- wprintf(w, "%s %s\n", name, d->name);
-- wprintf(w, "%s %s\n", number, d->number);
-- wprintf(w, "%s %d\n", dial_string, d->dialtype + 1);
-- wprintf(w, "%s %s\n", local_echo, _(yesno(d->flags & FL_ECHO)));
-- wprintf(w, "%s %s\n", script, d->script);
-- wprintf(w, "%s %s\n", username, d->username);
-- wprintf(w, "%s %s\n", password, d->password);
-- wprintf(w, "%s %s\n", terminal_emulation, te[d->term - 1]);
-- wprintf(w, "%s %s\n", backspace_key_sends,
-+ wprintf_(w, "%s %s\n", name, d->name);
-+ wprintf_(w, "%s %s\n", number, d->number);
-+ wprintf_(w, "%s %d\n", dial_string, d->dialtype + 1);
-+ wprintf_(w, "%s %s\n", local_echo, _(yesno(d->flags & FL_ECHO)));
-+ wprintf_(w, "%s %s\n", script, d->script);
-+ wprintf_(w, "%s %s\n", username, d->username);
-+ wprintf_(w, "%s %s\n", password, d->password);
-+ wprintf_(w, "%s %s\n", terminal_emulation, te[d->term - 1]);
-+ wprintf_(w, "%s %s\n", backspace_key_sends,
- d->flags & FL_DEL ? _("Delete") : _("Backspace"));
-- wprintf(w, "%s %s\n", linewrap,
-+ wprintf_(w, "%s %s\n", linewrap,
- d->flags & FL_WRAP ? _("On") : _("Off"));
-- wprintf(w, "%s %s %s%s%s\n", line_settings,
-+ wprintf_(w, "%s %s %s%s%s\n", line_settings,
- d->baud, d->bits, d->parity, d->stopb);
-- wprintf(w, "%s %s\n", conversion_table, d->convfile);
-- wprintf(w, _(" Last dialed : %s %s\n"),d->lastdate,d->lasttime);
-- wprintf(w, _(" Times on : %d"),d->count);
-+ wprintf_(w, "%s %s\n", conversion_table, d->convfile);
-+ wprintf_(w, _(" Last dialed : %s %s\n"),d->lastdate,d->lasttime);
-+ wprintf_(w, _(" Times on : %d"),d->count);
- wlocate(w, 4, 15);
- wputs(w, question);
- wredraw(w, 1);
-@@ -1116,13 +1116,13 @@
- case 'C':
- d->dialtype = (d->dialtype + 1) % 3;
- wlocate(w, mbslen (dial_string) + 1, 2);
-- wprintf(w, "%d", d->dialtype + 1);
-+ wprintf_(w, "%d", d->dialtype + 1);
- wflush();
- break;
- case 'D':
- d->flags ^= FL_ECHO;
- wlocate(w, mbslen (local_echo) + 1, 3);
-- wprintf(w, "%s", _(yesno(d->flags & FL_ECHO)));
-+ wprintf_(w, "%s", _(yesno(d->flags & FL_ECHO)));
- wflush();
- break;
- case 'E':
-@@ -1171,7 +1171,7 @@
- case 'K':
- get_bbp(d->baud, d->bits, d->parity, d->stopb, 1);
- wlocate(w, mbslen (line_settings) + 1, 10);
-- wprintf(w, "%s %s%s%s ",
-+ wprintf_(w, "%s %s%s%s ",
- d->baud, d->bits, d->parity, d->stopb);
- break;
- case 'L': /* jl 21.09.97 */
-@@ -1207,9 +1207,9 @@
- {
- static const char spaces[] = " ";
-
-- wprintf(dsub, "%.*s", what_padding[k][0], spaces);
-- wprintf(dsub, "%.*s", what_lens[k], _(what[k]));
-- wprintf(dsub, "%.*s", what_padding[k][1], spaces);
-+ wprintf_(dsub, "%.*s", what_padding[k][0], spaces);
-+ wprintf_(dsub, "%.*s", what_lens[k], _(what[k]));
-+ wprintf_(dsub, "%.*s", what_padding[k][1], spaces);
- }
-
- /*
-@@ -1256,7 +1256,7 @@
- d = getno(f + top);
- if (d == (struct dialent *)0)
- break;
-- wprintf(dialw, fmt, f+1+top, (d->flags & FL_TAG) ? '>' : ' ',
-+ wprintf_(dialw, fmt, f+1+top, (d->flags & FL_TAG) ? '>' : ' ',
- d->name, d->number, d->lastdate, d->lasttime,
- d->count, d->script);
- }
-@@ -1508,7 +1508,7 @@
-
- prdir(w, top, top);
- wlocate(w, position_dialing_directory, w->ys - 1);
-- wprintf(w, "%*.*s", tagmvlen,tagmvlen, tag_exit);
-+ wprintf_(w, "%*.*s", tagmvlen,tagmvlen, tag_exit);
- dhili(position_dialing_directory, subm);
- dirflush = 1;
- wredraw(dsub, 1);
-@@ -1554,7 +1554,7 @@
- wlocate(w, 4, cur + 1 - top);
- d->flags ^= FL_TAG;
- wsetattr(w, XA_REVERSE | stdattr);
-- wprintf(w, "%c", d->flags & FL_TAG ? '>' : ' ');
-+ wprintf_(w, "%c", d->flags & FL_TAG ? '>' : ' ');
- wsetattr(w, XA_NORMAL | stdattr);
- cur += (cur < nrents - 1);
- break;
-@@ -1713,7 +1713,7 @@
- dedit(d);
- changed++;
- wlocate(w, 0, cur + 1 - top);
-- wprintf(w, fmt, cur+1, (d->flags & FL_TAG) ? 16 : ' ', d->name,
-+ wprintf_(w, fmt, cur+1, (d->flags & FL_TAG) ? 16 : ' ', d->name,
- d->number, d->lastdate, d->lasttime, d->count, d->script);
- }
-
-@@ -1751,13 +1751,13 @@
- /* Move the entry up/down in directory. */
- if (subm == 5) {
- wlocate(w, position_dialing_directory, w->ys - 1);
-- wprintf(w, "%*.*s", tagmvlen,tagmvlen, move_exit);
-+ wprintf_(w, "%*.*s", tagmvlen,tagmvlen, move_exit);
- cur = move_entry (w, d, cur, &top);
- if (cur != ocur)
- changed++;
- ocur = cur;
- wlocate(w, position_dialing_directory, w->ys - 1);
-- wprintf(w, "%*.*s", tagmvlen,tagmvlen, tag_exit);
-+ wprintf_(w, "%*.*s", tagmvlen,tagmvlen, tag_exit);
- }
-
- /* Dial a number manually. */
-diff -ru minicom-2.2/src/file.c minicom-2.2+iPhone/src/file.c
---- minicom-2.2/src/file.c 2005-08-14 20:39:30.000000000 +0000
-+++ minicom-2.2+iPhone/src/file.c 2008-01-02 00:20:52.000000000 +0000
-@@ -89,11 +89,11 @@
- {
- static const char spaces[] = " ";
-
-- wprintf(dsub, "%.*s", what_padding[k][0], spaces);
-+ wprintf_(dsub, "%.*s", what_padding[k][0], spaces);
- wsetattr(dsub, start_attr);
-- wprintf(dsub, "%.*s", what_lens[k], _(what[k]));
-+ wprintf_(dsub, "%.*s", what_lens[k], _(what[k]));
- wsetattr(dsub, end_attr);
-- wprintf(dsub, "%.*s", what_padding[k][1], spaces);
-+ wprintf_(dsub, "%.*s", what_padding[k][1], spaces);
- }
-
- /*
-@@ -163,9 +163,9 @@
- wsetattr(dirw, XA_REVERSE | stdattr);
- if (S_ISDIR(d->mode)) {
- snprintf(t_str, sizeof(t_str), "[%s]", d->fname);
-- wprintf(dirw, f_str, t_str);
-+ wprintf_(dirw, f_str, t_str);
- } else
-- wprintf(dirw, f_str, d->fname);
-+ wprintf_(dirw, f_str, d->fname);
- wsetattr(dirw, XA_NORMAL | stdattr);
- wputc(dirw, '\n');
- }
-@@ -191,9 +191,9 @@
- wsetattr(dirw, XA_REVERSE | stdattr);
- if (S_ISDIR(dirdat->mode)) {
- snprintf(t_str, sizeof(t_str), "[%s]", dirdat->fname);
-- wprintf(dirw, f_str, t_str);
-+ wprintf_(dirw, f_str, t_str);
- } else
-- wprintf(dirw, f_str, dirdat->fname);
-+ wprintf_(dirw, f_str, dirdat->fname);
- wsetattr(dirw, XA_NORMAL | stdattr);
- dirflush = 1;
- wflush();
-diff -ru minicom-2.2/src/help.c minicom-2.2+iPhone/src/help.c
---- minicom-2.2/src/help.c 2005-10-31 10:31:38.000000000 +0000
-+++ minicom-2.2+iPhone/src/help.c 2008-01-02 00:20:52.000000000 +0000
-@@ -38,7 +38,7 @@
- wputs(w, _("Minicom Command Summary"));
- wlocate(w, 10, 2);
-
-- wprintf(w, _("Commands can be called by %s<key>"), esc_key());
-+ wprintf_(w, _("Commands can be called by %s<key>"), esc_key());
-
- wlocate(w, 15, 4);
- wputs(w, _("Main Functions"));
-diff -ru minicom-2.2/src/main.c minicom-2.2+iPhone/src/main.c
---- minicom-2.2/src/main.c 2005-10-31 12:13:51.000000000 +0000
-+++ minicom-2.2+iPhone/src/main.c 2008-01-02 00:20:52.000000000 +0000
-@@ -452,12 +452,12 @@
- if (st) { /* if swich off status line - NOT print !!! (vlk@st.simbirsk.su) */
- wlocate(st, 20, 0);
- if (portfd_is_socket) {
-- wprintf(st, "unix-socket");
-+ wprintf_(st, "unix-socket");
- } else {
- if (P_SHOWSPD[0] == 'l')
-- wprintf(st, "%6ld %s%s%s", linespd, P_BITS, P_PARITY, P_STOPB);
-+ wprintf_(st, "%6ld %s%s%s", linespd, P_BITS, P_PARITY, P_STOPB);
- else
-- wprintf(st, "%6.6s %s%s%s", P_BAUDRATE, P_BITS, P_PARITY, P_STOPB);
-+ wprintf_(st, "%6.6s %s%s%s", P_BAUDRATE, P_BITS, P_PARITY, P_STOPB);
- }
- ret_csr();
- }
-@@ -474,9 +474,9 @@
- return;
- wlocate(st, 63, 0);
- if (online < 0)
-- wprintf(st, " %12.12s ", P_HASDCD[0] == 'Y' ? _("Offline") : _("OFFLINE"));
-+ wprintf_(st, " %12.12s ", P_HASDCD[0] == 'Y' ? _("Offline") : _("OFFLINE"));
- else
-- wprintf(st, " %s %02ld:%02ld", P_HASDCD[0] == 'Y' ? _("Online") : _("ONLINE"),
-+ wprintf_(st, " %s %02ld:%02ld", P_HASDCD[0] == 'Y' ? _("Online") : _("ONLINE"),
- online / 3600, (online / 60) % 60);
-
- ret_csr();
-@@ -488,7 +488,7 @@
- void curs_status(void)
- {
- wlocate(st, 33, 0);
-- wprintf(st, cursormode == NORMAL ? "NOR" : "APP");
-+ wprintf_(st, cursormode == NORMAL ? "NOR" : "APP");
- ret_csr();
- }
-
-@@ -570,7 +570,7 @@
- {
- st->direct = 0;
- wlocate(st, 0, 0);
-- wprintf(st,
-+ wprintf_(st,
- _(" %7.7sZ for help | | | Minicom %-6.6s | | "),
- esc_key(), VERSION);
- mode_status();
-@@ -598,9 +598,9 @@
- return;
- wlocate(st, 39, 0);
- if (*s == 0)
-- wprintf(st, "Minicom %-6.6s", VERSION);
-+ wprintf_(st, "Minicom %-6.6s", VERSION);
- else
-- wprintf(st, "script %-7.7s", s);
-+ wprintf_(st, "script %-7.7s", s);
- ret_csr();
- }
-
-diff -ru minicom-2.2/src/minicom.c minicom-2.2+iPhone/src/minicom.c
---- minicom-2.2/src/minicom.c 2005-10-31 12:13:51.000000000 +0000
-+++ minicom-2.2+iPhone/src/minicom.c 2008-01-02 00:20:52.000000000 +0000
-@@ -261,7 +261,7 @@
- w_new->wrap = 0;
-
- hline = _("SEARCH FOR (ESC=Exit)");
-- wprintf(w_new, "%s(%d):",hline,MAX_SEARCH);
-+ wprintf_(w_new, "%s(%d):",hline,MAX_SEARCH);
- wredraw(w_new, 1);
- wflush();
-
-@@ -461,7 +461,7 @@
- if (b_st->xs < 127)
- hline0[b_st->xs] = 0;
- hline = hline0;
-- wprintf(b_st, hline);
-+ wprintf_(b_st, hline);
- wredraw(b_st, 1);
- wflush();
-
-@@ -514,7 +514,7 @@
- searchhist(b_us, look_for);
- /* must redraw status line... */
- wlocate(b_st, 0, 0); /* move back to column 0! */
-- wprintf(b_st, hline); /* and show the above-defined hline */
-+ wprintf_(b_st, hline); /* and show the above-defined hline */
- wredraw(b_st, 1); /* again... */
- /* highlight any matches */
- if (wcslen(look_for) > 1) {
-@@ -723,7 +723,7 @@
- hline = hline0;
- }
- wlocate(b_st, 0, 0);
-- wprintf(b_st, hline);
-+ wprintf_(b_st, hline);
- wredraw(b_st, 1);
- if (citemode)
- wlocate(b_us, 0, cite_y);
-@@ -743,7 +743,7 @@
- break;
- }
- wlocate(b_st, 0, 0);
-- wprintf(b_st, hline);
-+ wprintf_(b_st, hline);
- wredraw(b_st, 1);
- wdrawelm_inverse(b_us, cite_y, getline(b_us, cite_ystart));
- wlocate(b_us, 0, cite_y);
-@@ -762,7 +762,7 @@
- }
- drawcite_whole(b_us, y, cite_ystart, cite_yend);
- wlocate(b_st, 0, 0);
-- wprintf(b_st, hline);
-+ wprintf_(b_st, hline);
- wredraw(b_st, 1);
- if (citemode)
- wlocate(b_us, 0, cite_y);
-@@ -1335,6 +1335,6 @@
- if (doinit)
- modeminit();
-
-- wprintf(us, "\n%s %s\r\n", _("Welcome to minicom"), VERSION);
-- wprintf(us, "\n%s: %s\r\n", _("OPTIONS"), option_string);
-+ wprintf_(us, "\n%s %s\r\n", _("Welcome to minicom"), VERSION);
-+ wprintf_(us, "\n%s: %s\r\n", _("OPTIONS"), option_string);
-
-@@ -1340,6 +1340,6 @@
-
-- wprintf(us, "Port %s\n", P_PORT);
-- wprintf(us, _("\nPress %sZ for help on special keys%c\n\n"),esc_key(),'\r');
-+ wprintf_(us, "Port %s\n", P_PORT);
-+ wprintf_(us, _("\nPress %sZ for help on special keys%c\n\n"),esc_key(),'\r');
-
- /* Now that all initialization is done, drop our priviliges. */
- drop_privs();
-diff -ru minicom-2.2/src/updown.c minicom-2.2+iPhone/src/updown.c
---- minicom-2.2/src/updown.c 2005-08-14 20:39:30.000000000 +0000
-+++ minicom-2.2+iPhone/src/updown.c 2008-01-02 00:20:52.000000000 +0000
-@@ -355,7 +355,7 @@
- if (win && (status & 0xFF00) == 0) {
- #if VC_MUSIC
- if (P_SOUND[0] == 'Y') {
-- wprintf(win, _("\n READY: press any key to continue..."));
-+ wprintf_(win, _("\n READY: press any key to continue..."));
- music();
- } else
- sleep(1);
-@@ -363,7 +363,7 @@
- /* MARK updated 02/17/94 - If there was no VC_MUSIC capability, */
- /* then at least make some beeps! */
- if (P_SOUND[0] == 'Y')
-- wprintf(win, "\007\007\007");
-+ wprintf_(win, "\007\007\007");
- sleep(1);
- #endif
- }
-@@ -526,9 +526,9 @@
- w = wopen(10, 5, 70, 10, BDOUBLE, stdattr, mfcolor, mbcolor, 0, 0, 1);
- wtitle(w, TMID, _("Run a script"));
- wputs(w, "\n");
-- wprintf(w, "%s %s\n", username, scr_user[0] ? msg : "");
-- wprintf(w, "%s %s\n", password, scr_passwd[0] ? msg : "");
-- wprintf(w, "%s %s\n", name_of_script, scr_name);
-+ wprintf_(w, "%s %s\n", username, scr_user[0] ? msg : "");
-+ wprintf_(w, "%s %s\n", password, scr_passwd[0] ? msg : "");
-+ wprintf_(w, "%s %s\n", name_of_script, scr_name);
- wlocate(w, 4, 5);
- wputs(w, question);
- wredraw(w, 1);
-diff -ru minicom-2.2/src/windiv.c minicom-2.2+iPhone/src/windiv.c
---- minicom-2.2/src/windiv.c 2006-10-11 20:46:21.000000000 +0000
-+++ minicom-2.2+iPhone/src/windiv.c 2008-01-02 00:20:52.000000000 +0000
-@@ -120,7 +120,7 @@
- while (1) {
- wlocate(w, 2 + offs + 10 * cur, 1);
- if (!useattr)
-- wprintf(w, ">%s", _(s[cur]) + 1);
-+ wprintf_(w, ">%s", _(s[cur]) + 1);
- else {
- wsetattr(w, XA_REVERSE | stdattr);
- wputs(w, _(s[cur]));
-@@ -169,7 +169,7 @@
- BDOUBLE, stdattr, mfcolor, mbcolor, 1, 0, 1);
- wputs(w, s);
- wlocate(w, 0, 1);
-- wprintf(w, "> %-38.38s", buf);
-+ wprintf_(w, "> %-38.38s", buf);
- wlocate(w, 2, 1);
- if (wgets(w, buf, 38, 128) < 0)
- buf = NULL;
-diff -ru minicom-2.2/src/window.c minicom-2.2+iPhone/src/window.c
---- minicom-2.2/src/window.c 2005-11-06 19:20:57.000000000 +0000
-+++ minicom-2.2+iPhone/src/window.c 2008-01-02 00:20:52.000000000 +0000
-@@ -1146,7 +1146,7 @@
- * Print a formatted string in a window.
- * Should return stringlength - but who cares.
- */
--int wprintf(WIN *win, const char *fmt, ...)
-+int wprintf_(WIN *win, const char *fmt, ...)
- {
- char buf[160];
- va_list va;
-@@ -1304,7 +1304,7 @@
- wtitle(w, TMID, title);
-
- for (c = 0; c < count; c++)
-- wprintf(w, " %s%s", _(choices[c]), c == count - 1 ? "" : "\n");
-+ wprintf_(w, " %s%s", _(choices[c]), c == count - 1 ? "" : "\n");
-
- wcurbar(w, cur, high_on);
- wredraw(w, 1);
-diff -ru minicom-2.2/src/window.h minicom-2.2+iPhone/src/window.h
---- minicom-2.2/src/window.h 2006-04-02 09:58:52.000000000 +0000
-+++ minicom-2.2+iPhone/src/window.h 2008-01-02 00:20:50.000000000 +0000
-@@ -151,7 +151,7 @@
- void wputc(WIN *win, wchar_t c);
- void wdrawelm(WIN *win, int y, ELM *e);
- void wputs(WIN *win, const char *s);
--int wprintf(WIN *, const char *, ...)
-+int wprintf_(WIN *, const char *, ...)
- __attribute__((format(printf, 2, 3)));
- void wbell(void);
- void wcursor(WIN *win, int type);
diff --git a/data/mobileterminal/_metadata/maintainer b/data/mobileterminal/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/mobileterminal/_metadata/maintainer
+++ b/data/mobileterminal/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/mobileterminal/arch.diff b/data/mobileterminal/arch.diff
new file mode 100644
index 000000000..428d0f95d
--- /dev/null
+++ b/data/mobileterminal/arch.diff
@@ -0,0 +1,11 @@
+diff -ur mobileterminal-364/Makefile mobileterminal-364+iPhone/Makefile
+--- mobileterminal-364/Makefile 2009-02-10 03:39:52.000000000 -1000
++++ mobileterminal-364+iPhone/Makefile 2018-09-02 13:15:08.000000000 -1000
+@@ -1,6 +1,4 @@
+-CC = arm-apple-darwin9-gcc
+-
+-CFLAGS = -Wall -Os -std=gnu99 -march=armv6 -mcpu=arm1176jzf-s
++CFLAGS = -Wall -Os -std=gnu99
+
+ ifdef DEBUG
+ CFLAGS += -g -DDEBUG
diff --git a/data/mobileterminal/gsevent.diff b/data/mobileterminal/gsevent.diff
new file mode 100644
index 000000000..59906ed6c
--- /dev/null
+++ b/data/mobileterminal/gsevent.diff
@@ -0,0 +1,12 @@
+diff -ur mobileterminal-364/Sources/MobileTerminal.h mobileterminal-364+iPhone/Sources/MobileTerminal.h
+--- mobileterminal-364/Sources/MobileTerminal.h 2009-04-11 17:48:49.000000000 -1000
++++ mobileterminal-364+iPhone/Sources/MobileTerminal.h 2018-09-02 13:21:13.000000000 -1000
+@@ -7,6 +7,8 @@
+ #import "Constants.h"
+ #import "Log.h"
+
++typedef struct __GSEvent* GSEventRef;
++
+
+ @class PTYTextView;
+ @class ShellKeyboard;
diff --git a/data/mspasov.com/_metadata/description b/data/mspasov.com/_metadata/description
deleted file mode 100644
index 94041c5fe..000000000
--- a/data/mspasov.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Bulgarian language support packages
diff --git a/data/mspasov.com/_metadata/license b/data/mspasov.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/mspasov.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/mspasov.com/_metadata/maintainer b/data/mspasov.com/_metadata/maintainer
deleted file mode 100644
index 4c9bc061e..000000000
--- a/data/mspasov.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Martin Spasov <mspasov@gmail.com>
diff --git a/data/mspasov.com/_metadata/name b/data/mspasov.com/_metadata/name
deleted file mode 100644
index ee8fbe888..000000000
--- a/data/mspasov.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-iPhone-Patch's Source
diff --git a/data/mspasov.com/_metadata/role b/data/mspasov.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/mspasov.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/mspasov.com/_metadata/section b/data/mspasov.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/mspasov.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/mspasov.com/_metadata/tags b/data/mspasov.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/mspasov.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/mspasov.com/_metadata/version b/data/mspasov.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/mspasov.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/mspasov.com/bgkb-logo-small.png b/data/mspasov.com/bgkb-logo-small.png
deleted file mode 100644
index e0896bbb6..000000000
--- a/data/mspasov.com/bgkb-logo-small.png
+++ /dev/null
Binary files differ
diff --git a/data/mspasov.com/make.sh b/data/mspasov.com/make.sh
deleted file mode 100644
index c4b2d02a6..000000000
--- a/data/mspasov.com/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/mspasov.com.list /etc/apt/sources.list.d
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/bgkb-logo-small.png /Applications/Cydia.app/Sources/mspasov.com.png
diff --git a/data/mspasov.com/mspasov.com.list b/data/mspasov.com/mspasov.com.list
deleted file mode 100644
index ac89c9ab1..000000000
--- a/data/mspasov.com/mspasov.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://mspasov.com/ stable main
diff --git a/data/mterminal/_metadata/author b/data/mterminal/_metadata/author
new file mode 100644
index 000000000..7ba736fc4
--- /dev/null
+++ b/data/mterminal/_metadata/author
@@ -0,0 +1 @@
+lordscotland <admin@officialscheduler.com>
diff --git a/data/mterminal/_metadata/bash.dep b/data/mterminal/_metadata/bash.dep
new file mode 120000
index 000000000..d0c818fb6
--- /dev/null
+++ b/data/mterminal/_metadata/bash.dep
@@ -0,0 +1 @@
+../../bash \ No newline at end of file
diff --git a/data/mterminal/_metadata/coreutils.dep b/data/mterminal/_metadata/coreutils.dep
new file mode 120000
index 000000000..5bd43c1eb
--- /dev/null
+++ b/data/mterminal/_metadata/coreutils.dep
@@ -0,0 +1 @@
+../../coreutils \ No newline at end of file
diff --git a/data/mterminal/_metadata/depiction b/data/mterminal/_metadata/depiction
new file mode 100644
index 000000000..c3058c0e8
--- /dev/null
+++ b/data/mterminal/_metadata/depiction
@@ -0,0 +1 @@
+http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=mterminalDp
diff --git a/data/mterminal/_metadata/description b/data/mterminal/_metadata/description
new file mode 100644
index 000000000..75a213082
--- /dev/null
+++ b/data/mterminal/_metadata/description
@@ -0,0 +1 @@
+A MobileTerminal fork
diff --git a/data/mterminal/_metadata/homepage b/data/mterminal/_metadata/homepage
new file mode 100644
index 000000000..c3058c0e8
--- /dev/null
+++ b/data/mterminal/_metadata/homepage
@@ -0,0 +1 @@
+http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=mterminalDp
diff --git a/data/mterminal/_metadata/in.1443.00 b/data/mterminal/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/mterminal/_metadata/in.1443.00
diff --git a/data/mterminal/_metadata/license b/data/mterminal/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/mterminal/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/mterminal/_metadata/maintainer b/data/mterminal/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/mterminal/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/mterminal/_metadata/name b/data/mterminal/_metadata/name
new file mode 100644
index 000000000..b4ae1d322
--- /dev/null
+++ b/data/mterminal/_metadata/name
@@ -0,0 +1 @@
+MTerminal
diff --git a/data/mterminal/_metadata/ncurses.dep b/data/mterminal/_metadata/ncurses.dep
new file mode 120000
index 000000000..a395fad08
--- /dev/null
+++ b/data/mterminal/_metadata/ncurses.dep
@@ -0,0 +1 @@
+../../ncurses \ No newline at end of file
diff --git a/data/mterminal/_metadata/priority b/data/mterminal/_metadata/priority
new file mode 100644
index 000000000..a6a7b9cd7
--- /dev/null
+++ b/data/mterminal/_metadata/priority
@@ -0,0 +1 @@
+standard
diff --git a/data/easywakeup.net/_metadata/role b/data/mterminal/_metadata/role
index 762113e87..762113e87 100644
--- a/data/easywakeup.net/_metadata/role
+++ b/data/mterminal/_metadata/role
diff --git a/data/mterminal/_metadata/section b/data/mterminal/_metadata/section
new file mode 100644
index 000000000..19814b684
--- /dev/null
+++ b/data/mterminal/_metadata/section
@@ -0,0 +1 @@
+Utilities
diff --git a/data/mterminal/_metadata/system-cmds.dep b/data/mterminal/_metadata/system-cmds.dep
new file mode 120000
index 000000000..8b653a781
--- /dev/null
+++ b/data/mterminal/_metadata/system-cmds.dep
@@ -0,0 +1 @@
+../../system-cmds \ No newline at end of file
diff --git a/data/mterminal/_metadata/tags b/data/mterminal/_metadata/tags
new file mode 100644
index 000000000..3562c84b6
--- /dev/null
+++ b/data/mterminal/_metadata/tags
@@ -0,0 +1 @@
+purpose::uikit
diff --git a/data/mterminal/_metadata/version b/data/mterminal/_metadata/version
new file mode 100644
index 000000000..c068b2447
--- /dev/null
+++ b/data/mterminal/_metadata/version
@@ -0,0 +1 @@
+1.4
diff --git a/data/mterminal/entitlement.xml b/data/mterminal/entitlement.xml
new file mode 100644
index 000000000..d6b15d188
--- /dev/null
+++ b/data/mterminal/entitlement.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>platform-application</key>
+ <true/>
+ <key>com.apple.private.skip-library-validation</key>
+ <true/>
+ <key>com.apple.private.security.no-sandbox</key>
+ <true/>
+</dict>
+</plist>
diff --git a/data/mterminal/make.sh b/data/mterminal/make.sh
new file mode 100644
index 000000000..c6e423486
--- /dev/null
+++ b/data/mterminal/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+pkg: cp %/entitlement.xml .
+ln -s ~/theos-rp theos
+make -j8 stage
+pkg: cp -a .theos/_/. /
diff --git a/data/mterminal/mterminal-283695be6357.zip b/data/mterminal/mterminal-283695be6357.zip
new file mode 100644
index 000000000..56f7110e1
--- /dev/null
+++ b/data/mterminal/mterminal-283695be6357.zip
Binary files differ
diff --git a/data/mterminal/mterminal.diff b/data/mterminal/mterminal.diff
new file mode 100644
index 000000000..f8bbf5c1c
--- /dev/null
+++ b/data/mterminal/mterminal.diff
@@ -0,0 +1,54 @@
+diff -ur lordscotland-mterminal-283695be6357/MTAppDelegate.h lordscotland-mterminal-283695be6357+iPhone/MTAppDelegate.h
+--- lordscotland-mterminal-283695be6357/MTAppDelegate.h 2017-10-01 05:45:08.000000000 -1000
++++ lordscotland-mterminal-283695be6357+iPhone/MTAppDelegate.h 2018-11-11 18:03:27.000000000 -1000
+@@ -1,3 +1,5 @@
++#import <UIKit/UIKit.h>
++
+ @class MTController;
+
+ @interface MTAppDelegate : NSObject <UIApplicationDelegate> {
+diff -ur lordscotland-mterminal-283695be6357/MTKBAvoiding.h lordscotland-mterminal-283695be6357+iPhone/MTKBAvoiding.h
+--- lordscotland-mterminal-283695be6357/MTKBAvoiding.h 2017-10-01 05:45:08.000000000 -1000
++++ lordscotland-mterminal-283695be6357+iPhone/MTKBAvoiding.h 2018-11-11 18:05:53.000000000 -1000
+@@ -1,3 +1,5 @@
++#import <UIKit/UIKit.h>
++
+ @interface MTKBAvoiding : UIViewController {
+ CGFloat kbHeight;
+ BOOL deferAdjust;
+diff -ur lordscotland-mterminal-283695be6357/MTRowView.h lordscotland-mterminal-283695be6357+iPhone/MTRowView.h
+--- lordscotland-mterminal-283695be6357/MTRowView.h 2017-10-01 05:45:08.000000000 -1000
++++ lordscotland-mterminal-283695be6357+iPhone/MTRowView.h 2018-11-11 18:06:13.000000000 -1000
+@@ -1,4 +1,5 @@
+ #import <CoreText/CoreText.h>
++#import <UIKit/UIKit.h>
+
+ #define kMTBackgroundColorAttributeName CFSTR("MTBackgroundColor")
+ #define kMTStrikethroughColorAttributeName CFSTR("MTStrikethroughColor")
+diff -ur lordscotland-mterminal-283695be6357/Makefile lordscotland-mterminal-283695be6357+iPhone/Makefile
+--- lordscotland-mterminal-283695be6357/Makefile 2017-10-01 05:45:08.000000000 -1000
++++ lordscotland-mterminal-283695be6357+iPhone/Makefile 2018-11-11 18:21:23.000000000 -1000
+@@ -1,10 +1,11 @@
+ ARCHS = armv7 arm64
+-TARGET = iphone:latest:4.0
++TARGET = iphone:10.0:4.0
+
+ include theos/makefiles/common.mk
+
+ APPLICATION_NAME = MTerminal
+ MTerminal_FILES = $(wildcard *.m)
+ MTerminal_FRAMEWORKS = AudioToolbox CoreGraphics CoreText UIKit
++MTerminal_CODESIGN_FLAGS = -Sentitlement.xml
+
+ include $(THEOS_MAKE_PATH)/application.mk
+Only in lordscotland-mterminal-283695be6357+iPhone: entitlement.xml
+diff -ur lordscotland-mterminal-283695be6357/main.m lordscotland-mterminal-283695be6357+iPhone/main.m
+--- lordscotland-mterminal-283695be6357/main.m 2017-10-01 05:45:08.000000000 -1000
++++ lordscotland-mterminal-283695be6357+iPhone/main.m 2018-11-11 18:06:48.000000000 -1000
+@@ -1,3 +1,5 @@
++#import <UIKit/UIKit.h>
++
+ int main(int argc,char** argv) {@autoreleasepool {
+ return UIApplicationMain(argc,argv,nil,@"MTAppDelegate");
+ }}
+Only in lordscotland-mterminal-283695be6357+iPhone: theos
diff --git a/data/nail/_metadata/in.1443.00 b/data/nail/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/nail/_metadata/in.1443.00
diff --git a/data/nail/_metadata/libssl0.9.8.dep b/data/nail/_metadata/libssl0.9.8.dep
new file mode 120000
index 000000000..5b4cc423e
--- /dev/null
+++ b/data/nail/_metadata/libssl0.9.8.dep
@@ -0,0 +1 @@
+../../libssl0.9.8 \ No newline at end of file
diff --git a/data/nail/_metadata/maintainer b/data/nail/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/nail/_metadata/maintainer
+++ b/data/nail/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/nail/_metadata/openssl.dep b/data/nail/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/nail/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/namedfork.net/_metadata/description b/data/namedfork.net/_metadata/description
deleted file mode 100644
index 75753dfa8..000000000
--- a/data/namedfork.net/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Mini vMac Master Repository
diff --git a/data/namedfork.net/_metadata/license b/data/namedfork.net/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/namedfork.net/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/namedfork.net/_metadata/maintainer b/data/namedfork.net/_metadata/maintainer
deleted file mode 100644
index d3c3e44c4..000000000
--- a/data/namedfork.net/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Jesús A. Ãlvarez <zydeco@namedfork.net>
diff --git a/data/namedfork.net/_metadata/name b/data/namedfork.net/_metadata/name
deleted file mode 100644
index 6da57f1b7..000000000
--- a/data/namedfork.net/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-namedfork.net
diff --git a/data/namedfork.net/_metadata/postinst b/data/namedfork.net/_metadata/postinst
deleted file mode 100755
index cda781ad0..000000000
--- a/data/namedfork.net/_metadata/postinst
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == configure ]]; then
- /usr/bin/apt-key add /usr/share/keyrings/namedfork.net-keyring.gpg
-fi
diff --git a/data/namedfork.net/_metadata/prerm b/data/namedfork.net/_metadata/prerm
deleted file mode 100755
index ef8284c93..000000000
--- a/data/namedfork.net/_metadata/prerm
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == remove ]]; then
- /usr/bin/apt-key del D2C023E5
-fi
diff --git a/data/namedfork.net/_metadata/role b/data/namedfork.net/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/namedfork.net/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/namedfork.net/_metadata/section b/data/namedfork.net/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/namedfork.net/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/namedfork.net/_metadata/tags b/data/namedfork.net/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/namedfork.net/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/namedfork.net/_metadata/version b/data/namedfork.net/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/namedfork.net/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/namedfork.net/make.sh b/data/namedfork.net/make.sh
deleted file mode 100644
index 7184b46db..000000000
--- a/data/namedfork.net/make.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/namedfork.net.list /etc/apt/sources.list.d
-pkg: mkdir -p /usr/share/keyrings
-pkg: cp -a %/zydeco.gpg /usr/share/keyrings/namedfork.net-keyring.gpg
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/namedfork-Icon.png /Applications/Cydia.app/Sources/apt.namedfork.net.png
diff --git a/data/namedfork.net/namedfork-Icon.png b/data/namedfork.net/namedfork-Icon.png
deleted file mode 100644
index 7400772c9..000000000
--- a/data/namedfork.net/namedfork-Icon.png
+++ /dev/null
Binary files differ
diff --git a/data/namedfork.net/namedfork.net.list b/data/namedfork.net/namedfork.net.list
deleted file mode 100644
index ba47ddb2d..000000000
--- a/data/namedfork.net/namedfork.net.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://apt.namedfork.net/iphone/ ./
diff --git a/data/namedfork.net/zydeco.gpg b/data/namedfork.net/zydeco.gpg
deleted file mode 100644
index 94fde6a18..000000000
--- a/data/namedfork.net/zydeco.gpg
+++ /dev/null
Binary files differ
diff --git a/data/nano/_metadata/conffiles b/data/nano/_metadata/conffiles
deleted file mode 100644
index ecc14ac9c..000000000
--- a/data/nano/_metadata/conffiles
+++ /dev/null
@@ -1 +0,0 @@
-/etc/nanorc
diff --git a/data/nano/_metadata/extrainst_ b/data/nano/_metadata/extrainst_
new file mode 100755
index 000000000..1a73f05c1
--- /dev/null
+++ b/data/nano/_metadata/extrainst_
@@ -0,0 +1,4 @@
+#!/bin/sh
+if [ ! -e /etc/nanorc ]; then
+ cp /usr/share/nano/sample.nanorc /etc/nanorc
+fi
diff --git a/data/nano/_metadata/in.1443.00 b/data/nano/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/nano/_metadata/in.1443.00
diff --git a/data/nano/_metadata/maintainer b/data/nano/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/nano/_metadata/maintainer
+++ b/data/nano/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/nano/_metadata/version b/data/nano/_metadata/version
index bda8fbec1..a3ec5a4bd 100644
--- a/data/nano/_metadata/version
+++ b/data/nano/_metadata/version
@@ -1 +1 @@
-2.2.6
+3.2
diff --git a/data/nano/make.sh b/data/nano/make.sh
index 4c3c40818..e44df4f40 100644
--- a/data/nano/make.sh
+++ b/data/nano/make.sh
@@ -1,7 +1,7 @@
pkg:setup
pkg:configure --enable-all --sysconfdir=/etc
-make
+make -j8
pkg:install
pkg: mkdir -p /etc/profile.d
pkg: cp -a %/nano.sh /etc/profile.d
-pkg: cp -a ./doc/nanorc.sample /etc/nanorc
+pkg: cp -a ./doc/sample.nanorc /usr/share/nano
diff --git a/data/nano/nano-2.2.6.tar.gz b/data/nano/nano-2.2.6.tar.gz
deleted file mode 100644
index 15445f070..000000000
--- a/data/nano/nano-2.2.6.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/nano/nano-3.2.tar.xz b/data/nano/nano-3.2.tar.xz
new file mode 100644
index 000000000..699c26290
--- /dev/null
+++ b/data/nano/nano-3.2.tar.xz
Binary files differ
diff --git a/data/nano/timestamp.diff b/data/nano/timestamp.diff
deleted file mode 100644
index 71e278535..000000000
--- a/data/nano/timestamp.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ru nano-2.2.6/src/nano.c nano-2.2.6+iPhone/src/nano.c
---- nano-2.2.6/src/nano.c 2010-11-12 06:13:08.000000000 +0000
-+++ nano-2.2.6+iPhone/src/nano.c 2013-09-06 23:00:09.000000000 +0000
-@@ -935,8 +935,7 @@
- * it was compiled with. */
- void version(void)
- {
-- printf(_(" GNU nano version %s (compiled %s, %s)\n"), VERSION,
-- __TIME__, __DATE__);
-+ printf(_(" GNU nano version %s\n"), VERSION);
- printf(" (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,\n");
- printf(" 2008, 2009 Free Software Foundation, Inc.\n");
- printf(
diff --git a/data/ncftp/_metadata/in.1443.00 b/data/ncftp/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ncftp/_metadata/in.1443.00
diff --git a/data/ncftp/_metadata/maintainer b/data/ncftp/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ncftp/_metadata/maintainer
+++ b/data/ncftp/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ncftp/_metadata/version b/data/ncftp/_metadata/version
index b347b11ea..34cde5690 100644
--- a/data/ncftp/_metadata/version
+++ b/data/ncftp/_metadata/version
@@ -1 +1 @@
-3.2.3
+3.2.6
diff --git a/data/ncftp/extern.diff b/data/ncftp/extern.diff
new file mode 100644
index 000000000..6aecc460d
--- /dev/null
+++ b/data/ncftp/extern.diff
@@ -0,0 +1,12 @@
+diff -ur ncftp-3.2.6/sh_util/gpshare.c ncftp-3.2.6+iPhone/sh_util/gpshare.c
+--- ncftp-3.2.6/sh_util/gpshare.c 2016-11-12 13:53:39.000000000 -1000
++++ ncftp-3.2.6+iPhone/sh_util/gpshare.c 2018-08-17 12:09:15.000000000 -1000
+@@ -28,7 +28,7 @@
+
+ static int gIsAtty1 = 1, gIsAtty2 = 1;
+ extern int gLoadedBm, gBookmarkMatchMode;
+-Bookmark gBm;
++extern Bookmark gBm;
+
+ double
+ FileSize(double size, const char **uStr0, double *uMult0)
diff --git a/data/ncftp/getdomainname.diff b/data/ncftp/getdomainname.diff
new file mode 100644
index 000000000..42542d638
--- /dev/null
+++ b/data/ncftp/getdomainname.diff
@@ -0,0 +1,12 @@
+diff -ur ncftp-3.2.6/sio/DNSUtil.c ncftp-3.2.6+iPhone/sio/DNSUtil.c
+--- ncftp-3.2.6/sio/DNSUtil.c 2016-11-12 17:03:45.000000000 -1000
++++ ncftp-3.2.6+iPhone/sio/DNSUtil.c 2018-08-17 12:05:05.000000000 -1000
+@@ -12,7 +12,7 @@
+ # define Strncpy(a,b,s) strncpy(a, b, s); a[s - 1] = '\0'
+ #endif
+
+-#if (((defined(MACOSX)) && (MACOSX < 10300)) || (defined(AIX) && (AIX < 430)) || (defined(DIGITAL_UNIX)) || (defined(SOLARIS)) || (defined(SCO)) || (defined(HPUX)))
++#if (((defined(MACOSX)) && (MACOSX < 10300) && (!defined(__arm__)) && (!defined(__arm64__))) || (defined(AIX) && (AIX < 430)) || (defined(DIGITAL_UNIX)) || (defined(SOLARIS)) || (defined(SCO)) || (defined(HPUX)))
+ extern int getdomainname(char *name, gethostname_size_t namelen);
+ #endif
+
diff --git a/data/ncftp/make.sh b/data/ncftp/make.sh
index de71b27aa..521bb3049 100644
--- a/data/ncftp/make.sh
+++ b/data/ncftp/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-RANLIB=$(which "${PKG_TARG}-ranlib") CC=$(which "${PKG_TARG}-gcc") pkg:configure
-make
+CFLAGS="-O2 -fno-common" CXXFLAGS="-O2 -fno-common" RANLIB=$(which "${PKG_TARG}-ranlib") CC=$(which "${PKG_TARG}-gcc") ./configure --build="$(${PKG_BASE}/util/config.guess)" --host="${PKG_TARG}" --enable-static=no --enable-shared=yes --prefix="$(cat "${PKG_BASE}/arch/${PKG_ARCH}/prefix")" --localstatedir="/var/cache/${PKG_NAME}"
+make -j8
mkdir -p "${PKG_DEST}/usr/share"
pkg:install
diff --git a/data/ncftp/mdns.diff b/data/ncftp/mdns.diff
deleted file mode 100644
index 696ab5480..000000000
--- a/data/ncftp/mdns.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru ncftp-3.2.1/ncftp/main.c ncftp-3.2.1+iPhone/ncftp/main.c
---- ncftp-3.2.1/ncftp/main.c 2006-08-05 21:30:44.000000000 +0000
-+++ ncftp-3.2.1+iPhone/ncftp/main.c 2008-03-04 19:56:17.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /* main.c
- *
- * Copyright (c) 1992-2005 by Mike Gleason.
-@@ -401,6 +403,15 @@
- main_void_return_t
- main(int argc, char **const argv)
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- int c;
- int n;
- GetoptInfo opt;
diff --git a/data/ncftp/ncftp-3.2.1-src.tar.gz b/data/ncftp/ncftp-3.2.1-src.tar.gz
deleted file mode 100644
index c92b29a92..000000000
--- a/data/ncftp/ncftp-3.2.1-src.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/ncftp/ncftp-3.2.3-src.tar.bz2 b/data/ncftp/ncftp-3.2.3-src.tar.bz2
deleted file mode 100644
index d5d84cc94..000000000
--- a/data/ncftp/ncftp-3.2.3-src.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/ncftp/ncftp-3.2.6-src.tar.xz b/data/ncftp/ncftp-3.2.6-src.tar.xz
new file mode 100644
index 000000000..0c680f12a
--- /dev/null
+++ b/data/ncftp/ncftp-3.2.6-src.tar.xz
Binary files differ
diff --git a/data/ncurses/_metadata/depends b/data/ncurses/_metadata/depends
new file mode 100644
index 000000000..93e905f96
--- /dev/null
+++ b/data/ncurses/_metadata/depends
@@ -0,0 +1 @@
+ncurses5-libs
diff --git a/data/ncurses/_metadata/in.1443.00 b/data/ncurses/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ncurses/_metadata/in.1443.00
diff --git a/data/ncurses/_metadata/maintainer b/data/ncurses/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ncurses/_metadata/maintainer
+++ b/data/ncurses/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ncurses/_metadata/version b/data/ncurses/_metadata/version
index 760606e1f..a435f5a56 100644
--- a/data/ncurses/_metadata/version
+++ b/data/ncurses/_metadata/version
@@ -1 +1 @@
-5.7
+6.1
diff --git a/data/ncurses/clang.diff b/data/ncurses/clang.diff
new file mode 100644
index 000000000..407410221
--- /dev/null
+++ b/data/ncurses/clang.diff
@@ -0,0 +1,43 @@
+diff -ruNp ncurses-5.8.orig/c++/cursesf.h ncurses-5.8/c++/cursesf.h
+--- ncurses-5.8.orig/c++/cursesf.h 2005-08-13 21:08:24.000000000 +0300
++++ ncurses-5.8/c++/cursesf.h 2011-04-03 18:29:29.000000000 +0300
+@@ -681,7 +681,7 @@ public:
+ const T* p_UserData = STATIC_CAST(T*)(0),
+ bool with_frame=FALSE,
+ bool autoDelete_Fields=FALSE)
+- : NCursesForm (Fields, with_frame, autoDelete_Fields) {
++ : NCursesForm (&Fields, with_frame, autoDelete_Fields) {
+ if (form)
+ set_user (const_cast<void *>(p_UserData));
+ };
+@@ -694,7 +694,7 @@ public:
+ const T* p_UserData = STATIC_CAST(T*)(0),
+ bool with_frame=FALSE,
+ bool autoDelete_Fields=FALSE)
+- : NCursesForm (Fields, nlines, ncols, begin_y, begin_x,
++ : NCursesForm (&Fields, nlines, ncols, begin_y, begin_x,
+ with_frame, autoDelete_Fields) {
+ if (form)
+ set_user (const_cast<void *>(p_UserData));
+diff -ruNp ncurses-5.8.orig/c++/cursesm.h ncurses-5.8/c++/cursesm.h
+--- ncurses-5.8.orig/c++/cursesm.h 2005-08-13 21:10:36.000000000 +0300
++++ ncurses-5.8/c++/cursesm.h 2011-04-03 18:31:42.000000000 +0300
+@@ -639,7 +639,7 @@ public:
+ const T* p_UserData = STATIC_CAST(T*)(0),
+ bool with_frame=FALSE,
+ bool autoDelete_Items=FALSE)
+- : NCursesMenu (Items, with_frame, autoDelete_Items) {
++ : NCursesMenu (&Items, with_frame, autoDelete_Items) {
+ if (menu)
+ set_user (const_cast<void *>(p_UserData));
+ };
+@@ -651,7 +651,7 @@ public:
+ int begin_x = 0,
+ const T* p_UserData = STATIC_CAST(T*)(0),
+ bool with_frame=FALSE)
+- : NCursesMenu (Items, nlines, ncols, begin_y, begin_x, with_frame) {
++ : NCursesMenu (&Items, nlines, ncols, begin_y, begin_x, with_frame) {
+ if (menu)
+ set_user (const_cast<void *>(p_UserData));
+ };
+
diff --git a/data/ncurses/make.sh b/data/ncurses/make.sh
index 1c3d79359..c96ec2565 100644
--- a/data/ncurses/make.sh
+++ b/data/ncurses/make.sh
@@ -4,21 +4,25 @@ cd ..
dir=$(echo *)
mkdir bld-ncurses{,w}
cd bld-ncurses
-flags='--with-shared --without-normal --without-debug --enable-sigwinch --disable-mixed-case --enable-termcap'
+flags="--with-shared --without-normal --without-debug --enable-sigwinch --disable-mixed-case --enable-termcap --enable-pc-files --with-pkg-config-libdir=${PKG_TAPF}/lib/pkgconfig"
PKG_CONF=../${dir}/configure PKG_MCPU=-marm pkg:configure ${flags}
-make
+make -j8
pkg:install
cd ../bld-ncursesw
PKG_CONF=../${dir}/configure PKG_MCPU=-marm pkg:configure ${flags} --disable-overwrite --enable-widec
-make
+make -j8
pkg:install
+# In adv-cmds
+pkg: rm /usr/bin/tabs
pkg: mkdir -p @/usr/lib
pkg: cp -aL /usr/lib/libcurses.dylib @/usr/lib/libcurses.dylib
pkg: cp -aL /usr/lib/libncurses.dylib @/usr/lib/libncurses.dylib
pkg: mkdir -p /usr/lib/_ncurses
pkg: mv /usr/lib/lib{,n}curses.dylib /usr/lib/_ncurses/
+pkg: ln -s libncurses.6.dylib /usr/lib/libncurses6.dylib
+pkg: ln -s libncursesw.6.dylib /usr/lib/libncursesw6.dylib
rm -f "${PKG_DEST}"/usr/lib/*.a
for ti in "${PKG_DEST}"/usr/share/terminfo/*/*; do
diff --git a/data/ncurses/ncurses-5.7.tar.gz b/data/ncurses/ncurses-5.7.tar.gz
deleted file mode 100644
index d6916072d..000000000
--- a/data/ncurses/ncurses-5.7.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/ncurses/ncurses-6.1.tar.gz b/data/ncurses/ncurses-6.1.tar.gz
new file mode 100644
index 000000000..98c01a816
--- /dev/null
+++ b/data/ncurses/ncurses-6.1.tar.gz
Binary files differ
diff --git a/data/ncurses/xopen.diff b/data/ncurses/xopen.diff
index febad3b98..b3188a560 100644
--- a/data/ncurses/xopen.diff
+++ b/data/ncurses/xopen.diff
@@ -1,18 +1,18 @@
-diff -ru ncurses-5.7/ncurses/Makefile.in ncurses-5.7+iPhone/ncurses/Makefile.in
---- ncurses-5.7/ncurses/Makefile.in 2008-10-18 14:11:54.000000000 +0000
-+++ ncurses-5.7+iPhone/ncurses/Makefile.in 2009-04-08 13:08:06.000000000 +0000
-@@ -197,12 +197,12 @@
+diff -ur ncurses-6.1/ncurses/Makefile.in ncurses-6.1+iPhone/ncurses/Makefile.in
+--- ncurses-6.1/ncurses/Makefile.in 2018-01-15 09:28:45.000000000 -1000
++++ ncurses-6.1+iPhone/ncurses/Makefile.in 2018-08-03 13:09:39.000000000 -1000
+@@ -233,12 +233,12 @@
make_keys$(BUILD_EXEEXT) : \
$(tinfo)/make_keys.c \
names.c
-- $(BUILD_CC) -o $@ $(BUILD_CCFLAGS) $(tinfo)/make_keys.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
-+ $(BUILD_CC) -o $@ $(BUILD_CCFLAGS) $(tinfo)/make_keys.c $(BUILD_LDFLAGS) $(BUILD_LIBS) $(CPPFLAGS)
+- $(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(tinfo)/make_keys.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
++ $(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(tinfo)/make_keys.c $(BUILD_LDFLAGS) $(BUILD_LIBS) $(CPPFLAGS)
make_hash$(BUILD_EXEEXT) : \
- $(tinfo)/comp_hash.c \
+ $(tinfo)/make_hash.c \
../include/hashsize.h
-- $(BUILD_CC) -o $@ $(BUILD_CCFLAGS) -DMAIN_PROGRAM $(tinfo)/comp_hash.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
-+ $(BUILD_CC) -o $@ $(BUILD_CCFLAGS) -DMAIN_PROGRAM $(tinfo)/comp_hash.c $(BUILD_LDFLAGS) $(BUILD_LIBS) $(CPPFLAGS)
+- $(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(tinfo)/make_hash.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
++ $(BUILD_CC) -o $@ $(BUILD_CPPFLAGS) $(BUILD_CCFLAGS) $(tinfo)/make_hash.c $(BUILD_LDFLAGS) $(BUILD_LIBS) $(CPPFLAGS)
- ./expanded.c : $(serial)/MKexpanded.sh
- sh -e $(serial)/MKexpanded.sh "$(CPP)" $(CPPFLAGS) > $@
+ report_offsets$(BUILD_EXEEXT) : \
+ $(srcdir)/report_offsets.c
diff --git a/data/ncurses5-libs/_metadata/description b/data/ncurses5-libs/_metadata/description
new file mode 100644
index 000000000..fd39fa09f
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/description
@@ -0,0 +1 @@
+feature-complete terminal library
diff --git a/data/ncurses5-libs/_metadata/in.1443.00 b/data/ncurses5-libs/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/in.1443.00
diff --git a/data/ncurses5-libs/_metadata/license b/data/ncurses5-libs/_metadata/license
new file mode 100644
index 000000000..f68feb873
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/license
@@ -0,0 +1,27 @@
+-------------------------------------------------------------------------------
+-- Copyright (c) 1998-2004,2006 Free Software Foundation, Inc. --
+-- --
+-- Permission is hereby granted, free of charge, to any person obtaining a --
+-- copy of this software and associated documentation files (the --
+-- "Software"), to deal in the Software without restriction, including --
+-- without limitation the rights to use, copy, modify, merge, publish, --
+-- distribute, distribute with modifications, sublicense, and/or sell copies --
+-- of the Software, and to permit persons to whom the Software is furnished --
+-- to do so, subject to the following conditions: --
+-- --
+-- The above copyright notice and this permission notice shall be included --
+-- in all copies or substantial portions of the Software. --
+-- --
+-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --
+-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --
+-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --
+-- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --
+-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --
+-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --
+-- USE OR OTHER DEALINGS IN THE SOFTWARE. --
+-- --
+-- Except as contained in this notice, the name(s) of the above copyright --
+-- holders shall not be used in advertising or otherwise to promote the --
+-- sale, use or other dealings in this Software without prior written --
+-- authorization. --
+-------------------------------------------------------------------------------
diff --git a/data/ncurses5-libs/_metadata/maintainer b/data/ncurses5-libs/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ncurses5-libs/_metadata/name b/data/ncurses5-libs/_metadata/name
new file mode 100644
index 000000000..a605b4508
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/name
@@ -0,0 +1 @@
+New Curses
diff --git a/data/ncurses5-libs/_metadata/priority b/data/ncurses5-libs/_metadata/priority
new file mode 100644
index 000000000..fad9e164a
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/priority
@@ -0,0 +1 @@
+required
diff --git a/data/ncurses5-libs/_metadata/role b/data/ncurses5-libs/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/ncurses5-libs/_metadata/section b/data/ncurses5-libs/_metadata/section
new file mode 100644
index 000000000..00b394251
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/section
@@ -0,0 +1 @@
+System
diff --git a/data/ncurses5-libs/_metadata/tags b/data/ncurses5-libs/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/ncurses5-libs/_metadata/version b/data/ncurses5-libs/_metadata/version
new file mode 100644
index 000000000..95ee81a41
--- /dev/null
+++ b/data/ncurses5-libs/_metadata/version
@@ -0,0 +1 @@
+5.9
diff --git a/data/ncurses5-libs/clang.diff b/data/ncurses5-libs/clang.diff
new file mode 100644
index 000000000..407410221
--- /dev/null
+++ b/data/ncurses5-libs/clang.diff
@@ -0,0 +1,43 @@
+diff -ruNp ncurses-5.8.orig/c++/cursesf.h ncurses-5.8/c++/cursesf.h
+--- ncurses-5.8.orig/c++/cursesf.h 2005-08-13 21:08:24.000000000 +0300
++++ ncurses-5.8/c++/cursesf.h 2011-04-03 18:29:29.000000000 +0300
+@@ -681,7 +681,7 @@ public:
+ const T* p_UserData = STATIC_CAST(T*)(0),
+ bool with_frame=FALSE,
+ bool autoDelete_Fields=FALSE)
+- : NCursesForm (Fields, with_frame, autoDelete_Fields) {
++ : NCursesForm (&Fields, with_frame, autoDelete_Fields) {
+ if (form)
+ set_user (const_cast<void *>(p_UserData));
+ };
+@@ -694,7 +694,7 @@ public:
+ const T* p_UserData = STATIC_CAST(T*)(0),
+ bool with_frame=FALSE,
+ bool autoDelete_Fields=FALSE)
+- : NCursesForm (Fields, nlines, ncols, begin_y, begin_x,
++ : NCursesForm (&Fields, nlines, ncols, begin_y, begin_x,
+ with_frame, autoDelete_Fields) {
+ if (form)
+ set_user (const_cast<void *>(p_UserData));
+diff -ruNp ncurses-5.8.orig/c++/cursesm.h ncurses-5.8/c++/cursesm.h
+--- ncurses-5.8.orig/c++/cursesm.h 2005-08-13 21:10:36.000000000 +0300
++++ ncurses-5.8/c++/cursesm.h 2011-04-03 18:31:42.000000000 +0300
+@@ -639,7 +639,7 @@ public:
+ const T* p_UserData = STATIC_CAST(T*)(0),
+ bool with_frame=FALSE,
+ bool autoDelete_Items=FALSE)
+- : NCursesMenu (Items, with_frame, autoDelete_Items) {
++ : NCursesMenu (&Items, with_frame, autoDelete_Items) {
+ if (menu)
+ set_user (const_cast<void *>(p_UserData));
+ };
+@@ -651,7 +651,7 @@ public:
+ int begin_x = 0,
+ const T* p_UserData = STATIC_CAST(T*)(0),
+ bool with_frame=FALSE)
+- : NCursesMenu (Items, nlines, ncols, begin_y, begin_x, with_frame) {
++ : NCursesMenu (&Items, nlines, ncols, begin_y, begin_x, with_frame) {
+ if (menu)
+ set_user (const_cast<void *>(p_UserData));
+ };
+
diff --git a/data/ncurses5-libs/configsub.diff b/data/ncurses5-libs/configsub.diff
new file mode 100644
index 000000000..f3c03daa3
--- /dev/null
+++ b/data/ncurses5-libs/configsub.diff
@@ -0,0 +1,751 @@
+diff -ur ncurses-5.9/config.sub ncurses-5.9+iPhone/config.sub
+--- ncurses-5.9/config.sub 2010-09-10 12:25:58.000000000 -1000
++++ ncurses-5.9+iPhone/config.sub 2018-08-03 14:40:50.000000000 -1000
+@@ -1,38 +1,31 @@
+ #! /bin/sh
+ # Configuration validation subroutine script.
+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+-# Free Software Foundation, Inc.
+-
+-timestamp='2010-09-11'
+-
+-# This file is (in principle) common to ALL GNU software.
+-# The presence of a machine in this file suggests that SOME GNU software
+-# can handle that machine. It does not imply ALL GNU software can.
+-#
+-# This file is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
++# Copyright 1992-2017 Free Software Foundation, Inc.
++
++timestamp='2017-11-23'
++
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program; if not, see <https://www.gnu.org/licenses/>.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
++# the same distribution terms that you use for the rest of that
++# program. This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+
+
+-# Please send patches to <config-patches@gnu.org>. Submit a context
+-# diff and a properly formatted GNU ChangeLog entry.
++# Please send patches to <config-patches@gnu.org>.
+ #
+ # Configuration subroutine to validate and canonicalize a configuration type.
+ # Supply the specified configuration type as an argument.
+@@ -40,7 +33,7 @@
+ # Otherwise, we print the canonical config type on stdout and succeed.
+
+ # You can get the latest version of this script from:
+-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
++# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
+ # This file is supposed to be the same for all GNU packages
+ # and recognize all the CPU types, system types and aliases
+@@ -60,12 +53,11 @@
+ me=`echo "$0" | sed -e 's,.*/,,'`
+
+ usage="\
+-Usage: $0 [OPTION] CPU-MFR-OPSYS
+- $0 [OPTION] ALIAS
++Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+
+ Canonicalize a configuration name.
+
+-Operation modes:
++Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+@@ -75,9 +67,7 @@
+ version="\
+ GNU config.sub ($timestamp)
+
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+-Software Foundation, Inc.
++Copyright 1992-2017 Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -125,13 +115,17 @@
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+- linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+- knetbsd*-gnu* | netbsd*-gnu* | \
+- kopensolaris*-gnu* | \
++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
++ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
++ kopensolaris*-gnu* | cloudabi*-eabi* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
++ android-linux)
++ os=-linux-android
++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
++ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+@@ -154,7 +148,7 @@
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+- -apple | -axis | -knuth | -cray | -microblaze)
++ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
+@@ -175,10 +169,10 @@
+ os=-chorusos
+ basic_machine=$1
+ ;;
+- -chorusrdb)
+- os=-chorusrdb
++ -chorusrdb)
++ os=-chorusrdb
+ basic_machine=$1
+- ;;
++ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+@@ -223,15 +217,18 @@
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
++ -lynx*178)
++ os=-lynxos178
++ ;;
++ -lynx*5)
++ os=-lynxos5
++ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+- -windowsnt*)
+- os=`echo $os | sed -e 's/windowsnt/winnt/'`
+- ;;
+ -psos*)
+ os=-psos
+ ;;
+@@ -247,20 +244,29 @@
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
++ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
++ | arc | arceb \
++ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
++ | avr | avr32 \
++ | ba \
++ | be32 | be64 \
+ | bfin \
+- | c4x | clipper \
++ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+- | fido | fr30 | frv \
++ | e2k | epiphany \
++ | fido | fr30 | frv | ft32 \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+- | i370 | i860 | i960 | ia64 \
++ | hexagon \
++ | i370 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
++ | k1om \
++ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+- | maxq | mb | microblaze | mcore | mep | metag \
++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+@@ -274,34 +280,40 @@
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
++ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
++ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
++ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+- | nds32 | nds32le | nds32be\
+- | nios | nios2 \
++ | nds32 | nds32le | nds32be \
++ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+- | or32 \
++ | open8 | or1k | or1knd | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
++ | powerpc | powerpc64 | powerpc64le | powerpcle \
++ | pru \
+ | pyramid \
+- | rx \
++ | riscv32 | riscv64 \
++ | rl78 | rx \
+ | score \
+- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
++ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+- | spu | strongarm \
+- | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
++ | spu \
++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+- | v850 | v850e \
+- | we32k \
+- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
++ | visium \
++ | wasm32 \
++ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+@@ -314,8 +326,10 @@
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+- m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+- # Motorola 68HC11/12.
++ leon|leon[3-9])
++ basic_machine=sparc-$basic_machine
++ ;;
++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+@@ -325,12 +339,27 @@
+ basic_machine=mt-unknown
+ ;;
+
++ strongarm | thumb | xscale)
++ basic_machine=arm-unknown
++ ;;
++ xgate)
++ basic_machine=$basic_machine-unknown
++ os=-none
++ ;;
++ xscaleeb)
++ basic_machine=armeb-unknown
++ ;;
++
++ xscaleel)
++ basic_machine=armel-unknown
++ ;;
++
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+- basic_machine=$basic_machine-pc
+- ;;
++ basic_machine=$basic_machine-pc
++ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+@@ -339,25 +368,32 @@
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
++ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
++ | ba-* \
++ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+- | clipper-* | craynv-* | cydra-* \
++ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+- | elxsi-* \
++ | e2k-* | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+- | i*86-* | i860-* | i960-* | ia64-* \
++ | hexagon-* \
++ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
+ | ip2k-* | iq2000-* \
++ | k1om-* \
++ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
++ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+@@ -371,35 +407,45 @@
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
++ | mipsisa32r6-* | mipsisa32r6el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
++ | mipsisa64r6-* | mipsisa64r6el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
++ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+- | nios-* | nios2-* \
++ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
++ | open8-* \
++ | or1k*-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
++ | pru-* \
+ | pyramid-* \
+- | romp-* | rs6000-* | rx-* \
++ | riscv32-* | riscv64-* \
++ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+- | tahoe-* | thumb-* \
++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
++ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+- | tile-* | tilegx-* \
++ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+- | v850-* | v850e-* | vax-* \
++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
++ | vax-* \
++ | visium-* \
++ | wasm32-* \
+ | we32k-* \
+- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
++ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+@@ -474,6 +520,9 @@
+ basic_machine=i386-pc
+ os=-aros
+ ;;
++ asmjs)
++ basic_machine=asmjs-unknown
++ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+@@ -539,7 +588,7 @@
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+- cr16)
++ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+@@ -590,10 +639,18 @@
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+- dpx2* | dpx2*-bull)
++ dpx2*)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
++ e500v[12])
++ basic_machine=powerpc-unknown
++ os=$os"spe"
++ ;;
++ e500v[12]-*)
++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=$os"spe"
++ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+@@ -697,7 +754,6 @@
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+@@ -736,6 +792,9 @@
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
++ leon-*|leon[3-9]-*)
++ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
++ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+@@ -755,11 +814,15 @@
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+- microblaze)
++ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
++ mingw64)
++ basic_machine=x86_64-pc
++ os=-mingw64
++ ;;
+ mingw32)
+- basic_machine=i386-pc
++ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+@@ -787,6 +850,10 @@
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
++ moxiebox)
++ basic_machine=moxie-unknown
++ os=-moxiebox
++ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+@@ -794,10 +861,18 @@
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
++ msys)
++ basic_machine=i686-pc
++ os=-msys
++ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
++ nacl)
++ basic_machine=le32-unknown
++ os=-nacl
++ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+@@ -826,7 +901,7 @@
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+- next | m*-next )
++ next | m*-next)
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+@@ -871,6 +946,9 @@
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
++ nsx-tandem)
++ basic_machine=nsx-tandem
++ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+@@ -950,11 +1028,12 @@
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+- ppc) basic_machine=powerpc-unknown
++ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ppc-* | ppcbe-*)
++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+- ppcle | powerpclittle | ppc-le | powerpc-little)
++ ppcle | powerpclittle)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+@@ -964,7 +1043,7 @@
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
++ ppc64le | powerpc64little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+@@ -977,7 +1056,11 @@
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+- rdos)
++ rdos | rdos64)
++ basic_machine=x86_64-pc
++ os=-rdos
++ ;;
++ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+@@ -1046,6 +1129,9 @@
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
++ strongarm-* | thumb-*)
++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+@@ -1102,13 +1188,8 @@
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+- # This must be matched before tile*.
+- tilegx*)
+- basic_machine=tilegx-unknown
+- os=-linux-gnu
+- ;;
+ tile*)
+- basic_machine=tile-unknown
++ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+@@ -1163,6 +1244,9 @@
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
++ wasm32)
++ basic_machine=wasm32-unknown
++ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+@@ -1171,6 +1255,9 @@
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
++ x64)
++ basic_machine=x86_64-pc
++ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+@@ -1178,6 +1265,9 @@
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
++ xscale-* | xscalee[bl]-*)
++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
++ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+@@ -1275,8 +1365,8 @@
+ if [ x"$os" != x"" ]
+ then
+ case $os in
+- # First match some system type aliases
+- # that might get confused with valid system types.
++ # First match some system type aliases that might get confused
++ # with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+@@ -1296,36 +1386,37 @@
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+- # First accept the basic system types.
++ # Now accept the basic system types.
+ # The portable systems comes first.
+- # Each alternative MUST END IN A *, to match a version number.
++ # Each alternative MUST end in a * to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+- | -sym* | -kopensolaris* \
++ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+- | -aos* | -aros* \
++ | -aos* | -aros* | -cloudabi* | -sortix* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+- | -openbsd* | -solidbsd* \
++ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+- | -chorusos* | -chorusrdb* | -cegcc* \
+- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -linux-android* \
+- | -linux-newlib* | -linux-uclibc* \
+- | -uxpv* | -beos* | -mpeix* | -udk* \
++ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
++ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
++ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+@@ -1400,7 +1491,7 @@
+ -nova*)
+ os=-rtmk-nova
+ ;;
+- -ns2 )
++ -ns2)
+ os=-nextstep2
+ ;;
+ -nsk*)
+@@ -1449,17 +1540,29 @@
+ -aros*)
+ os=-aros
+ ;;
+- -kaos*)
+- os=-kaos
+- ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
++ -pikeos*)
++ # Until real need of OS specific support for
++ # particular features comes up, bare metal
++ # configurations are quite functional.
++ case $basic_machine in
++ arm*)
++ os=-eabi
++ ;;
++ *)
++ os=-elf
++ ;;
++ esac
++ ;;
+ -nacl*)
+ ;;
++ -ios)
++ ;;
+ -none)
+ ;;
+ *)
+@@ -1500,6 +1603,12 @@
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
++ c8051-*)
++ os=-elf
++ ;;
++ hexagon-*)
++ os=-elf
++ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+@@ -1527,9 +1636,6 @@
+ ;;
+ m68000-sun)
+ os=-sunos3
+- # This also exists in the configure program, but was not the
+- # default.
+- # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+@@ -1552,6 +1658,9 @@
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
++ pru-*)
++ os=-elf
++ ;;
+ *-be)
+ os=-beos
+ ;;
+@@ -1597,7 +1706,7 @@
+ m88k-omron*)
+ os=-luna
+ ;;
+- *-next )
++ *-next)
+ os=-nextstep
+ ;;
+ *-sequent)
+@@ -1732,7 +1841,7 @@
+ exit
+
+ # Local variables:
+-# eval: (add-hook 'write-file-hooks 'time-stamp)
++# eval: (add-hook 'write-file-functions 'time-stamp)
+ # time-stamp-start: "timestamp='"
+ # time-stamp-format: "%:y-%02m-%02d"
+ # time-stamp-end: "'"
diff --git a/data/ncurses5-libs/make.sh b/data/ncurses5-libs/make.sh
new file mode 100644
index 000000000..f34b37b05
--- /dev/null
+++ b/data/ncurses5-libs/make.sh
@@ -0,0 +1,25 @@
+shopt -s extglob
+pkg:setup
+cd ..
+dir=$(echo *)
+mkdir bld-ncurses{,w}
+cd bld-ncurses
+flags='--with-shared --without-normal --without-debug --enable-sigwinch --disable-mixed-case --enable-termcap'
+PKG_CONF=../${dir}/configure PKG_MCPU=-marm pkg:configure ${flags}
+make -j8
+pkg: mkdir -p /usr/lib
+cd lib
+for lib in *.5.dylib; do
+ pkg: cp ${lib} /usr/lib/
+ pkg: ln -s ${lib} /usr/lib/$(basename ${lib} .5.dylib)5.dylib
+done
+cd ..
+cd ../bld-ncursesw
+PKG_CONF=../${dir}/configure PKG_MCPU=-marm pkg:configure ${flags} --disable-overwrite --enable-widec
+make -j8
+cd lib
+for lib in *.5.dylib; do
+ pkg: cp ${lib} /usr/lib
+ pkg: ln -s ${lib} /usr/lib/$(basename ${lib} .5.dylib)5.dylib
+done
+cd ..
diff --git a/data/ncurses5-libs/ncurses-5.9.tar.gz b/data/ncurses5-libs/ncurses-5.9.tar.gz
new file mode 100644
index 000000000..653fab08f
--- /dev/null
+++ b/data/ncurses5-libs/ncurses-5.9.tar.gz
Binary files differ
diff --git a/data/ncurses5-libs/xopen.diff b/data/ncurses5-libs/xopen.diff
new file mode 100644
index 000000000..3973389da
--- /dev/null
+++ b/data/ncurses5-libs/xopen.diff
@@ -0,0 +1,18 @@
+diff -ur ncurses-5.9/ncurses/Makefile.in ncurses-5.9+iPhone/ncurses/Makefile.in
+--- ncurses-5.9/ncurses/Makefile.in 2018-08-03 14:30:24.000000000 -1000
++++ ncurses-5.9+iPhone/ncurses/Makefile.in 2010-11-27 11:45:27.000000000 -1000
+@@ -219,12 +219,12 @@
+ make_keys$(BUILD_EXEEXT) : \
+ $(tinfo)/make_keys.c \
+ names.c
+- $(BUILD_CC) -o $@ $(BUILD_CCFLAGS) $(tinfo)/make_keys.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
++ $(BUILD_CC) -o $@ $(BUILD_CCFLAGS) $(tinfo)/make_keys.c $(BUILD_LDFLAGS) $(BUILD_LIBS) $(CPPFLAGS)
+
+ make_hash$(BUILD_EXEEXT) : \
+ $(tinfo)/make_hash.c \
+ ../include/hashsize.h
+- $(BUILD_CC) -o $@ $(BUILD_CCFLAGS) $(tinfo)/make_hash.c $(BUILD_LDFLAGS) $(BUILD_LIBS)
++ $(BUILD_CC) -o $@ $(BUILD_CCFLAGS) $(tinfo)/make_hash.c $(BUILD_LDFLAGS) $(BUILD_LIBS) $(CPPFLAGS)
+
+ ./expanded.c : $(srcdir)/curses.priv.h $(serial)/MKexpanded.sh
+ sh -e $(serial)/MKexpanded.sh "$(CPP)" $(CPPFLAGS) > $@
diff --git a/data/neon/_metadata/in.1443.00 b/data/neon/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/neon/_metadata/in.1443.00
diff --git a/data/neon/_metadata/libssl1.0.dep b/data/neon/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/neon/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/neon/_metadata/maintainer b/data/neon/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/neon/_metadata/maintainer
+++ b/data/neon/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/neon/_metadata/openssl.dep b/data/neon/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/neon/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/neon/make.sh b/data/neon/make.sh
index 1e712d5af..9bf19df48 100644
--- a/data/neon/make.sh
+++ b/data/neon/make.sh
@@ -2,5 +2,5 @@ pkg:setup
autoconf
pkg:configure --with-ssl
#--with-expat="${PKG_ROOT}/usr/lib/libexpat.la"
-make
+make -j8
pkg:install
diff --git a/data/neon/neon-0.26.4.tar.gz b/data/neon/neon-0.26.4.tar.gz
deleted file mode 100644
index ca34b96a1..000000000
--- a/data/neon/neon-0.26.4.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/neon/neon-0.30.2.tar.gz b/data/neon/neon-0.30.2.tar.gz
new file mode 100644
index 000000000..ea6307423
--- /dev/null
+++ b/data/neon/neon-0.30.2.tar.gz
Binary files differ
diff --git a/data/neon/nmedit.diff b/data/neon/nmedit.diff
deleted file mode 100644
index 599393ba5..000000000
--- a/data/neon/nmedit.diff
+++ /dev/null
@@ -1,51 +0,0 @@
-diff -ru neon-0.26.4/aclocal.m4 neon-0.26.4+iPhone/aclocal.m4
---- neon-0.26.4/aclocal.m4 2007-07-14 20:45:34.000000000 +0000
-+++ neon-0.26.4+iPhone/aclocal.m4 2007-12-28 12:48:28.000000000 +0000
-@@ -3087,11 +3087,11 @@
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- fi
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
-@@ -3099,8 +3099,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
-@@ -5855,8 +5855,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
-@@ -5864,8 +5864,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
diff --git a/data/netatalk/_metadata/in.1443.00 b/data/netatalk/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/netatalk/_metadata/in.1443.00
diff --git a/data/netatalk/_metadata/libssl1.0.dep b/data/netatalk/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/netatalk/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/netatalk/_metadata/maintainer b/data/netatalk/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/netatalk/_metadata/maintainer
+++ b/data/netatalk/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/netatalk/_metadata/openssl.dep b/data/netatalk/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/netatalk/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/netcat/_metadata/in.1443.00 b/data/netcat/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/netcat/_metadata/in.1443.00
diff --git a/data/netcat/_metadata/maintainer b/data/netcat/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/netcat/_metadata/maintainer
+++ b/data/netcat/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/netcat/make.sh b/data/netcat/make.sh
index 00bf96237..fe4770710 100644
--- a/data/netcat/make.sh
+++ b/data/netcat/make.sh
@@ -1,5 +1,6 @@
pkg:setup
+autoreconf -f -i
pkg:configure
-make
+make -j8
pkg:install
pkg:bin
diff --git a/data/netcat/mdns.diff b/data/netcat/mdns.diff
deleted file mode 100644
index 89cc0e2ed..000000000
--- a/data/netcat/mdns.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru netcat-0.7.1/src/netcat.c netcat-0.7.1+iPhone/src/netcat.c
---- netcat-0.7.1/src/netcat.c 2003-08-28 17:20:25.000000000 +0000
-+++ netcat-0.7.1+iPhone/src/netcat.c 2008-04-10 10:02:32.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * netcat.c -- main project file
- * Part of the GNU netcat project
-@@ -137,6 +139,15 @@
-
- int main(int argc, char *argv[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- int c, glob_ret = EXIT_FAILURE;
- int total_ports, left_ports, accept_ret = -1, connect_ret = -1;
- struct sigaction sv;
diff --git a/data/nettle/_metadata/description b/data/nettle/_metadata/description
new file mode 100644
index 000000000..4c847212e
--- /dev/null
+++ b/data/nettle/_metadata/description
@@ -0,0 +1 @@
+Nettle is a cryptographic library
diff --git a/data/nettle/_metadata/homepage b/data/nettle/_metadata/homepage
new file mode 100644
index 000000000..c162f8d85
--- /dev/null
+++ b/data/nettle/_metadata/homepage
@@ -0,0 +1 @@
+https://gmplib.org/
diff --git a/data/nettle/_metadata/in.1443.00 b/data/nettle/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/nettle/_metadata/in.1443.00
diff --git a/data/nettle/_metadata/libgmp10.dep b/data/nettle/_metadata/libgmp10.dep
new file mode 120000
index 000000000..524659b66
--- /dev/null
+++ b/data/nettle/_metadata/libgmp10.dep
@@ -0,0 +1 @@
+../../libgmp10 \ No newline at end of file
diff --git a/data/nettle/_metadata/license b/data/nettle/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/nettle/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/nettle/_metadata/maintainer b/data/nettle/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/nettle/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/nettle/_metadata/name b/data/nettle/_metadata/name
new file mode 100644
index 000000000..ccc61749c
--- /dev/null
+++ b/data/nettle/_metadata/name
@@ -0,0 +1 @@
+Nettle
diff --git a/data/nettle/_metadata/priority b/data/nettle/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/nettle/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/nettle/_metadata/role b/data/nettle/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/nettle/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/nettle/_metadata/section b/data/nettle/_metadata/section
new file mode 100644
index 000000000..4b487b7d5
--- /dev/null
+++ b/data/nettle/_metadata/section
@@ -0,0 +1 @@
+Security
diff --git a/data/nettle/_metadata/tags b/data/nettle/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/nettle/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/nettle/_metadata/version b/data/nettle/_metadata/version
new file mode 100644
index 000000000..2f4b60750
--- /dev/null
+++ b/data/nettle/_metadata/version
@@ -0,0 +1 @@
+3.4
diff --git a/data/nettle/make.sh b/data/nettle/make.sh
new file mode 100644
index 000000000..8780dfc63
--- /dev/null
+++ b/data/nettle/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+pkg:make -j8
+pkg:install
diff --git a/data/nettle/nettle-3.4.tar.xz b/data/nettle/nettle-3.4.tar.xz
new file mode 100644
index 000000000..c13647f25
--- /dev/null
+++ b/data/nettle/nettle-3.4.tar.xz
Binary files differ
diff --git a/data/network-cmds/_metadata/_network-cmds.dep b/data/network-cmds/_metadata/_network-cmds.dep
new file mode 120000
index 000000000..79d453e3b
--- /dev/null
+++ b/data/network-cmds/_metadata/_network-cmds.dep
@@ -0,0 +1 @@
+../../_network-cmds \ No newline at end of file
diff --git a/data/network-cmds/_metadata/in.1443.00 b/data/network-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/network-cmds/_metadata/in.1443.00
diff --git a/data/ngrep/_metadata/in.1443.00 b/data/ngrep/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ngrep/_metadata/in.1443.00
diff --git a/data/ngrep/_metadata/maintainer b/data/ngrep/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ngrep/_metadata/maintainer
+++ b/data/ngrep/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/nmap/_metadata/maintainer b/data/nmap/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/nmap/_metadata/maintainer
+++ b/data/nmap/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/nmap/_metadata/openssl.dep b/data/nmap/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/nmap/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/nmap/_metadata/version b/data/nmap/_metadata/version
index 7d712142e..8b67de382 100644
--- a/data/nmap/_metadata/version
+++ b/data/nmap/_metadata/version
@@ -1 +1 @@
-5.00
+7.70
diff --git a/data/nmap/bsd.diff b/data/nmap/bsd.diff
deleted file mode 100644
index 23ab29271..000000000
--- a/data/nmap/bsd.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru nmap-4.50/libdnet-stripped/configure.in nmap-4.50+iPhone/libdnet-stripped/configure.in
---- nmap-4.50/libdnet-stripped/configure.in 2007-11-27 06:22:46.000000000 +0000
-+++ nmap-4.50+iPhone/libdnet-stripped/configure.in 2007-12-24 19:50:24.000000000 +0000
-@@ -226,7 +226,7 @@
- elif test "$ac_cv_dnet_bsd_bpf" = yes ; then
- AC_LIBOBJ([eth-bsd])
- elif test "$ac_cv_dnet_linux_pf_packet" = yes ; then
-- AC_LIBOBJ([eth-linux])
-+ AC_LIBOBJ([eth-bsd])
- elif test "$ac_cv_header_net_raw_h" = yes ; then
- AC_LIBOBJ([eth-snoop])
- elif test "$ac_cv_header_sys_ndd_var_h" = yes ; then
diff --git a/data/nmap/exit.diff b/data/nmap/exit.diff
deleted file mode 100644
index 41a490bce..000000000
--- a/data/nmap/exit.diff
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -ru nmap-4.50/nmap.cc nmap-4.50+iPhone/nmap.cc
---- nmap-4.50/nmap.cc 2007-11-03 01:31:02.000000000 +0000
-+++ nmap-4.50+iPhone/nmap.cc 2007-12-24 21:19:34.000000000 +0000
-@@ -1826,6 +1826,7 @@
-
- nmap_free_mem();
- }
-+ _exit(0);
- return 0;
- }
-
diff --git a/data/nmap/include.diff b/data/nmap/include.diff
deleted file mode 100644
index 1adc88203..000000000
--- a/data/nmap/include.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ru nmap-4.76/nmap_dns.h nmap-4.76+iPhone/nmap_dns.h
---- nmap-4.76/nmap_dns.h 2008-08-21 09:24:35.000000000 +0000
-+++ nmap-4.76+iPhone/nmap_dns.h 2008-10-09 08:45:26.000000000 +0000
-@@ -95,6 +95,9 @@
- * *
- ***************************************************************************/
-
-+#include <list>
-+#include <string>
-+
- class Target;
-
- void nmap_mass_rdns(Target ** targets, int num_targets);
diff --git a/data/nmap/libpcap.diff b/data/nmap/libpcap.diff
deleted file mode 100644
index 0e8e09aca..000000000
--- a/data/nmap/libpcap.diff
+++ /dev/null
@@ -1,6712 +0,0 @@
-diff -r -u nmap-4.50/configure.ac nmap-4.50+iPhone/configure.ac
---- nmap-4.50/configure.ac 2007-11-27 22:18:59.000000000 +0000
-+++ nmap-4.50+iPhone/configure.ac 2007-12-28 08:46:40.000000000 +0000
-@@ -306,22 +306,7 @@
- LIBS_OLD="$LIBS"
- LIBS="$LIBS -lpcap"
- AC_MSG_CHECKING(if libpcap version is recent enough)
-- AC_TRY_RUN([
--#include <stdio.h>
--extern char pcap_version[];
--int main() {
-- int major, minor1, minor2;
-- sscanf(pcap_version,"%d.%d.%d", &major, &minor1, &minor2);
-- if (major > 0)
-- exit(0);
-- if (minor1 < 9)
-- exit(1);
-- if (minor2 < 4)
-- exit(1);
-- exit(0);
--}],
--[AC_MSG_RESULT(yes); have_libpcap=yes],
--[AC_MSG_RESULT(no); have_libpcap=no])
-+AC_MSG_RESULT(yes); have_libpcap=yes
- LIBS="$LIBS_OLD"
- fi
-
-Only in nmap-5.00+iPhone/ncat: autom4te.cache
-diff -ru nmap-5.00/ncat/configure nmap-5.00+iPhone/ncat/configure
---- nmap-5.00/ncat/configure 2009-06-11 06:15:24.000000000 +0000
-+++ nmap-5.00+iPhone/ncat/configure 2009-07-30 21:10:58.000000000 +0000
-@@ -1,9 +1,9 @@
- #! /bin/sh
- # Guess values for system-dependent variables and create Makefiles.
--# Generated by GNU Autoconf 2.63.
-+# Generated by GNU Autoconf 2.61.
- #
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
--# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
- # This configure script is free software; the Free Software Foundation
- # gives unlimited permission to copy, distribute and modify it.
- ## --------------------- ##
-@@ -15,7 +15,7 @@
- if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
-- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-@@ -37,45 +37,17 @@
- as_cr_digits='0123456789'
- as_cr_alnum=$as_cr_Letters$as_cr_digits
-
--as_nl='
--'
--export as_nl
--# Printing a long string crashes Solaris 7 /usr/bin/printf.
--as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
--as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
--as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
--if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-- as_echo='printf %s\n'
-- as_echo_n='printf %s'
--else
-- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-- as_echo_n='/usr/ucb/echo -n'
-- else
-- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-- as_echo_n_body='eval
-- arg=$1;
-- case $arg in
-- *"$as_nl"*)
-- expr "X$arg" : "X\\(.*\\)$as_nl";
-- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-- esac;
-- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-- '
-- export as_echo_n_body
-- as_echo_n='sh -c $as_echo_n_body as_echo'
-- fi
-- export as_echo_body
-- as_echo='sh -c $as_echo_body as_echo'
--fi
--
- # The user is always right.
- if test "${PATH_SEPARATOR+set}" != set; then
-- PATH_SEPARATOR=:
-- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-- PATH_SEPARATOR=';'
-- }
-+ echo "#! /bin/sh" >conf$$.sh
-+ echo "exit 0" >>conf$$.sh
-+ chmod +x conf$$.sh
-+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-+ PATH_SEPARATOR=';'
-+ else
-+ PATH_SEPARATOR=:
-+ fi
-+ rm -f conf$$.sh
- fi
-
- # Support unset when possible.
-@@ -91,6 +63,8 @@
- # there to prevent editors from complaining about space-tab.
- # (If _AS_PATH_WALK were called with IFS unset, it would disable word
- # splitting by setting IFS to empty value.)
-+as_nl='
-+'
- IFS=" "" $as_nl"
-
- # Find who we are. Look in the path if we contain no directory separator.
-@@ -113,7 +87,7 @@
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
-- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
- fi
-
-@@ -126,10 +100,17 @@
- PS4='+ '
-
- # NLS nuisances.
--LC_ALL=C
--export LC_ALL
--LANGUAGE=C
--export LANGUAGE
-+for as_var in \
-+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-+ LC_TELEPHONE LC_TIME
-+do
-+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-+ eval $as_var=C; export $as_var
-+ else
-+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-+ fi
-+done
-
- # Required to use basename.
- if expr a : '\(a\)' >/dev/null 2>&1 &&
-@@ -151,7 +132,7 @@
- $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
--$as_echo X/"$0" |
-+echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
-@@ -177,7 +158,7 @@
- as_have_required=no
- fi
-
-- if test $as_have_required = yes && (eval ":
-+ if test $as_have_required = yes && (eval ":
- (as_func_return () {
- (exit \$1)
- }
-@@ -259,7 +240,7 @@
- if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
-- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-@@ -280,7 +261,7 @@
- if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
-- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-@@ -360,10 +341,10 @@
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
-- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-- done
-- export CONFIG_SHELL
-- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-+ done
-+ export CONFIG_SHELL
-+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
- fi
-
-
-@@ -432,10 +413,9 @@
-
- test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
-- echo Please tell bug-autoconf@gnu.org about your system,
-- echo including any error possibly output before this message.
-- echo This can help us improve future autoconf versions.
-- echo Configuration will now proceed without shell functions.
-+ echo Please tell autoconf@gnu.org about your system,
-+ echo including any error possibly output before this
-+ echo message
- }
-
-
-@@ -471,7 +451,7 @@
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
-- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
-@@ -499,6 +479,7 @@
- *)
- ECHO_N='-n';;
- esac
-+
- if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-@@ -511,22 +492,19 @@
- rm -f conf$$.dir/conf$$.file
- else
- rm -f conf$$.dir
-- mkdir conf$$.dir 2>/dev/null
-+ mkdir conf$$.dir
- fi
--if (echo >conf$$.file) 2>/dev/null; then
-- if ln -s conf$$.file conf$$ 2>/dev/null; then
-- as_ln_s='ln -s'
-- # ... but there are two gotchas:
-- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-- # In both cases, we have to default to `cp -p'.
-- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-- as_ln_s='cp -p'
-- elif ln conf$$.file conf$$ 2>/dev/null; then
-- as_ln_s=ln
-- else
-+echo >conf$$.file
-+if ln -s conf$$.file conf$$ 2>/dev/null; then
-+ as_ln_s='ln -s'
-+ # ... but there are two gotchas:
-+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-+ # In both cases, we have to default to `cp -p'.
-+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
-- fi
-+elif ln conf$$.file conf$$ 2>/dev/null; then
-+ as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-@@ -551,10 +529,10 @@
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
-- test -d "$1/.";
-+ test -d "$1/.";
- else
- case $1 in
-- -*)set "./$1";;
-+ -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
-@@ -635,79 +613,74 @@
- # include <unistd.h>
- #endif"
-
--ac_subst_vars='LTLIBOBJS
--PCAP_LIBS
--PCAP_DIST_CLEAN
--PCAP_CLEAN
--PCAP_BUILD
--PCAP_DEPENDS
--libpcapdir
--OPENSSL_LIBS
--LIBOBJS
--EGREP
--GREP
--CPP
--INSTALL_DATA
--INSTALL_SCRIPT
--INSTALL_PROGRAM
--OBJEXT
--EXEEXT
--ac_ct_CC
--CPPFLAGS
--LDFLAGS
--CFLAGS
--CC
--host_os
--host_vendor
--host_cpu
--host
--build_os
--build_vendor
--build_cpu
--build
--target_alias
--host_alias
--build_alias
--LIBS
--ECHO_T
--ECHO_N
--ECHO_C
--DEFS
--mandir
--localedir
--libdir
--psdir
--pdfdir
--dvidir
--htmldir
--infodir
--docdir
--oldincludedir
--includedir
--localstatedir
--sharedstatedir
--sysconfdir
--datadir
--datarootdir
--libexecdir
--sbindir
--bindir
--program_transform_name
--prefix
--exec_prefix
--PACKAGE_BUGREPORT
--PACKAGE_STRING
--PACKAGE_VERSION
--PACKAGE_TARNAME
--PACKAGE_NAME
-+ac_subst_vars='SHELL
- PATH_SEPARATOR
--SHELL'
-+PACKAGE_NAME
-+PACKAGE_TARNAME
-+PACKAGE_VERSION
-+PACKAGE_STRING
-+PACKAGE_BUGREPORT
-+exec_prefix
-+prefix
-+program_transform_name
-+bindir
-+sbindir
-+libexecdir
-+datarootdir
-+datadir
-+sysconfdir
-+sharedstatedir
-+localstatedir
-+includedir
-+oldincludedir
-+docdir
-+infodir
-+htmldir
-+dvidir
-+pdfdir
-+psdir
-+libdir
-+localedir
-+mandir
-+DEFS
-+ECHO_C
-+ECHO_N
-+ECHO_T
-+LIBS
-+build_alias
-+host_alias
-+target_alias
-+build
-+build_cpu
-+build_vendor
-+build_os
-+host
-+host_cpu
-+host_vendor
-+host_os
-+CC
-+CFLAGS
-+LDFLAGS
-+CPPFLAGS
-+ac_ct_CC
-+EXEEXT
-+OBJEXT
-+INSTALL_PROGRAM
-+INSTALL_SCRIPT
-+INSTALL_DATA
-+CPP
-+GREP
-+EGREP
-+LIBOBJS
-+OPENSSL_LIBS
-+libpcapdir
-+PCAP_DEPENDS
-+PCAP_BUILD
-+PCAP_CLEAN
-+PCAP_DIST_CLEAN
-+PCAP_LIBS
-+LTLIBOBJS'
- ac_subst_files=''
--ac_user_opts='
--enable_option_checking
--with_openssl
--with_libpcap
--'
- ac_precious_vars='build_alias
- host_alias
- target_alias
-@@ -722,8 +695,6 @@
- # Initialize some variables set by options.
- ac_init_help=
- ac_init_version=false
--ac_unrecognized_opts=
--ac_unrecognized_sep=
- # The variables have the same names as the options, with
- # dashes changed to underlines.
- cache_file=/dev/null
-@@ -822,21 +793,13 @@
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
-- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
-- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
-+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
-- ac_useropt_orig=$ac_useropt
-- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-- case $ac_user_opts in
-- *"
--"enable_$ac_useropt"
--"*) ;;
-- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-- ac_unrecognized_sep=', ';;
-- esac
-- eval enable_$ac_useropt=no ;;
-+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-+ eval enable_$ac_feature=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
-@@ -849,21 +812,13 @@
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
-- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
-- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-- { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
-+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
-- ac_useropt_orig=$ac_useropt
-- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-- case $ac_user_opts in
-- *"
--"enable_$ac_useropt"
--"*) ;;
-- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-- ac_unrecognized_sep=', ';;
-- esac
-- eval enable_$ac_useropt=\$ac_optarg ;;
-+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-+ eval enable_$ac_feature=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-@@ -1054,38 +1009,22 @@
- ac_init_version=: ;;
-
- -with-* | --with-*)
-- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
-- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
-+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
-- ac_useropt_orig=$ac_useropt
-- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-- case $ac_user_opts in
-- *"
--"with_$ac_useropt"
--"*) ;;
-- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-- ac_unrecognized_sep=', ';;
-- esac
-- eval with_$ac_useropt=\$ac_optarg ;;
-+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-+ eval with_$ac_package=\$ac_optarg ;;
-
- -without-* | --without-*)
-- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
-- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-- { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
-+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
-- ac_useropt_orig=$ac_useropt
-- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-- case $ac_user_opts in
-- *"
--"with_$ac_useropt"
--"*) ;;
-- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-- ac_unrecognized_sep=', ';;
-- esac
-- eval with_$ac_useropt=no ;;
-+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-+ eval with_$ac_package=no ;;
-
- --x)
- # Obsolete; use --with-x.
-@@ -1105,7 +1044,7 @@
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
-- -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-+ -*) { echo "$as_me: error: unrecognized option: $ac_option
- Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-@@ -1114,16 +1053,16 @@
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-- { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
-- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
-@@ -1132,38 +1071,22 @@
-
- if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-- { $as_echo "$as_me: error: missing argument to $ac_option" >&2
-+ { echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
- fi
-
--if test -n "$ac_unrecognized_opts"; then
-- case $enable_option_checking in
-- no) ;;
-- fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
-- { (exit 1); exit 1; }; } ;;
-- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-- esac
--fi
--
--# Check all directory arguments for consistency.
-+# Be sure to have absolute directory names.
- for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
- do
- eval ac_val=\$$ac_var
-- # Remove trailing slashes.
-- case $ac_val in
-- */ )
-- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-- eval $ac_var=\$ac_val;;
-- esac
-- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
-- { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-+ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
- done
-
-@@ -1178,7 +1101,7 @@
- if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
-- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
-@@ -1194,10 +1117,10 @@
- ac_pwd=`pwd` && test -n "$ac_pwd" &&
- ac_ls_di=`ls -di .` &&
- ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-- { $as_echo "$as_me: error: working directory cannot be determined" >&2
-+ { echo "$as_me: error: Working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
- test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-- { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
-+ { echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-
-@@ -1205,12 +1128,12 @@
- if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
-- ac_confdir=`$as_dirname -- "$as_myself" ||
--$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-- X"$as_myself" : 'X\(//\)[^/]' \| \
-- X"$as_myself" : 'X\(//\)$' \| \
-- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
--$as_echo X"$as_myself" |
-+ ac_confdir=`$as_dirname -- "$0" ||
-+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$0" : 'X\(//\)[^/]' \| \
-+ X"$0" : 'X\(//\)$' \| \
-+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-+echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
-@@ -1237,12 +1160,12 @@
- fi
- if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-- { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
- fi
- ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
- ac_abs_confdir=`(
-- cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
-+ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
- pwd)`
- # When building in place, set srcdir=.
-@@ -1291,9 +1214,9 @@
-
- Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
-- [$ac_default_prefix]
-+ [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
-- [PREFIX]
-+ [PREFIX]
-
- By default, \`make install' will install all the files in
- \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-@@ -1303,25 +1226,25 @@
- For better control, use the options below.
-
- Fine tuning of the installation directories:
-- --bindir=DIR user executables [EPREFIX/bin]
-- --sbindir=DIR system admin executables [EPREFIX/sbin]
-- --libexecdir=DIR program executables [EPREFIX/libexec]
-- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
-- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
-- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
-- --libdir=DIR object code libraries [EPREFIX/lib]
-- --includedir=DIR C header files [PREFIX/include]
-- --oldincludedir=DIR C header files for non-gcc [/usr/include]
-- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
-- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
-- --infodir=DIR info documentation [DATAROOTDIR/info]
-- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
-- --mandir=DIR man documentation [DATAROOTDIR/man]
-- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
-- --htmldir=DIR html documentation [DOCDIR]
-- --dvidir=DIR dvi documentation [DOCDIR]
-- --pdfdir=DIR pdf documentation [DOCDIR]
-- --psdir=DIR ps documentation [DOCDIR]
-+ --bindir=DIR user executables [EPREFIX/bin]
-+ --sbindir=DIR system admin executables [EPREFIX/sbin]
-+ --libexecdir=DIR program executables [EPREFIX/libexec]
-+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
-+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
-+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
-+ --libdir=DIR object code libraries [EPREFIX/lib]
-+ --includedir=DIR C header files [PREFIX/include]
-+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
-+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
-+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
-+ --infodir=DIR info documentation [DATAROOTDIR/info]
-+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
-+ --mandir=DIR man documentation [DATAROOTDIR/man]
-+ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
-+ --htmldir=DIR html documentation [DOCDIR]
-+ --dvidir=DIR dvi documentation [DOCDIR]
-+ --pdfdir=DIR pdf documentation [DOCDIR]
-+ --psdir=DIR ps documentation [DOCDIR]
- _ACEOF
-
- cat <<\_ACEOF
-@@ -1363,17 +1286,15 @@
- if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-- test -d "$ac_dir" ||
-- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-- continue
-+ test -d "$ac_dir" || continue
- ac_builddir=.
-
- case "$ac_dir" in
- .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *)
-- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A ".." for each directory in $ac_dir_suffix.
-- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-@@ -1409,7 +1330,7 @@
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
-- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-@@ -1419,10 +1340,10 @@
- if $ac_init_version; then
- cat <<\_ACEOF
- configure
--generated by GNU Autoconf 2.63
-+generated by GNU Autoconf 2.61
-
- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
--2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
- This configure script is free software; the Free Software Foundation
- gives unlimited permission to copy, distribute and modify it.
- _ACEOF
-@@ -1433,7 +1354,7 @@
- running configure, to aid debugging if configure makes a mistake.
-
- It was created by $as_me, which was
--generated by GNU Autoconf 2.63. Invocation command line was
-+generated by GNU Autoconf 2.61. Invocation command line was
-
- $ $0 $@
-
-@@ -1469,7 +1390,7 @@
- do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
-- $as_echo "PATH: $as_dir"
-+ echo "PATH: $as_dir"
- done
- IFS=$as_save_IFS
-
-@@ -1504,7 +1425,7 @@
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
-- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-@@ -1556,12 +1477,11 @@
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
-- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
--$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
-- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
-@@ -1591,9 +1511,9 @@
- do
- eval ac_val=\$$ac_var
- case $ac_val in
-- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
-- $as_echo "$ac_var='\''$ac_val'\''"
-+ echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
-@@ -1608,9 +1528,9 @@
- do
- eval ac_val=\$$ac_var
- case $ac_val in
-- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
-- $as_echo "$ac_var='\''$ac_val'\''"
-+ echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-@@ -1626,8 +1546,8 @@
- echo
- fi
- test "$ac_signal" != 0 &&
-- $as_echo "$as_me: caught signal $ac_signal"
-- $as_echo "$as_me: exit $exit_status"
-+ echo "$as_me: caught signal $ac_signal"
-+ echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-@@ -1669,24 +1589,21 @@
-
-
- # Let the site file select an alternate cache file if it wants to.
--# Prefer an explicitly selected file to automatically selected ones.
--ac_site_file1=NONE
--ac_site_file2=NONE
-+# Prefer explicitly selected file to automatically selected ones.
- if test -n "$CONFIG_SITE"; then
-- ac_site_file1=$CONFIG_SITE
-+ set x "$CONFIG_SITE"
- elif test "x$prefix" != xNONE; then
-- ac_site_file1=$prefix/share/config.site
-- ac_site_file2=$prefix/etc/config.site
-+ set x "$prefix/share/config.site" "$prefix/etc/config.site"
- else
-- ac_site_file1=$ac_default_prefix/share/config.site
-- ac_site_file2=$ac_default_prefix/etc/config.site
-+ set x "$ac_default_prefix/share/config.site" \
-+ "$ac_default_prefix/etc/config.site"
- fi
--for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-+shift
-+for ac_site_file
- do
-- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
-- { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
--$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-+echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-@@ -1696,16 +1613,16 @@
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
-- { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
--$as_echo "$as_me: loading cache $cache_file" >&6;}
-+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-+echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
- else
-- { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
--$as_echo "$as_me: creating cache $cache_file" >&6;}
-+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-+echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
- fi
-
-@@ -1719,38 +1636,29 @@
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
-- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
--$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
-- { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
--$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
-- # differences in whitespace do not lead to failure.
-- ac_old_val_w=`echo x $ac_old_val`
-- ac_new_val_w=`echo x $ac_new_val`
-- if test "$ac_old_val_w" != "$ac_new_val_w"; then
-- { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
--$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-- ac_cache_corrupted=:
-- else
-- { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
--$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-- eval $ac_var=\$ac_old_val
-- fi
-- { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
--$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
-- { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
--$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
-+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-+echo "$as_me: former value: $ac_old_val" >&2;}
-+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-+echo "$as_me: current value: $ac_new_val" >&2;}
-+ ac_cache_corrupted=:
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
-- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-+ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
-@@ -1760,12 +1668,10 @@
- fi
- done
- if $ac_cache_corrupted; then
-- { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
--$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-- { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
--$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-- { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
--$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
- fi
-
-@@ -1813,8 +1719,8 @@
- fi
- done
- if test -z "$ac_aux_dir"; then
-- { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
--$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
-+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
- { (exit 1); exit 1; }; }
- fi
-
-@@ -1829,34 +1735,34 @@
-
- # Make sure we can run config.sub.
- $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-- { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
--$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
-+ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
- { (exit 1); exit 1; }; }
-
--{ $as_echo "$as_me:$LINENO: checking build system type" >&5
--$as_echo_n "checking build system type... " >&6; }
-+{ echo "$as_me:$LINENO: checking build system type" >&5
-+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
- if test "${ac_cv_build+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_build_alias=$build_alias
- test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
- test "x$ac_build_alias" = x &&
-- { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
--$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
- ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
--$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
-+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
--$as_echo "$ac_cv_build" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-+echo "${ECHO_T}$ac_cv_build" >&6; }
- case $ac_cv_build in
- *-*-*) ;;
--*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
--$as_echo "$as_me: error: invalid value of canonical build" >&2;}
-+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-+echo "$as_me: error: invalid value of canonical build" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- build=$ac_cv_build
-@@ -1873,27 +1779,27 @@
- case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
--{ $as_echo "$as_me:$LINENO: checking host system type" >&5
--$as_echo_n "checking host system type... " >&6; }
-+{ echo "$as_me:$LINENO: checking host system type" >&5
-+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
- if test "${ac_cv_host+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
- else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-- { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
--$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
-+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
- fi
-
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
--$as_echo "$ac_cv_host" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-+echo "${ECHO_T}$ac_cv_host" >&6; }
- case $ac_cv_host in
- *-*-*) ;;
--*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
--$as_echo "$as_me: error: invalid value of canonical host" >&2;}
-+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-+echo "$as_me: error: invalid value of canonical host" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- host=$ac_cv_host
-@@ -1941,10 +1847,10 @@
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
- set dummy ${ac_tool_prefix}gcc; ac_word=$2
--{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
--$as_echo_n "checking for $ac_word... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
- if test "${ac_cv_prog_CC+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-@@ -1957,7 +1863,7 @@
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
-- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
- done
-@@ -1968,11 +1874,11 @@
- fi
- CC=$ac_cv_prog_CC
- if test -n "$CC"; then
-- { $as_echo "$as_me:$LINENO: result: $CC" >&5
--$as_echo "$CC" >&6; }
-+ { echo "$as_me:$LINENO: result: $CC" >&5
-+echo "${ECHO_T}$CC" >&6; }
- else
-- { $as_echo "$as_me:$LINENO: result: no" >&5
--$as_echo "no" >&6; }
-+ { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
- fi
-
-
-@@ -1981,10 +1887,10 @@
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
- set dummy gcc; ac_word=$2
--{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
--$as_echo_n "checking for $ac_word... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
- if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-@@ -1997,7 +1903,7 @@
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
-- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
- done
-@@ -2008,11 +1914,11 @@
- fi
- ac_ct_CC=$ac_cv_prog_ac_ct_CC
- if test -n "$ac_ct_CC"; then
-- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
--$as_echo "$ac_ct_CC" >&6; }
-+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-+echo "${ECHO_T}$ac_ct_CC" >&6; }
- else
-- { $as_echo "$as_me:$LINENO: result: no" >&5
--$as_echo "no" >&6; }
-+ { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
- fi
-
- if test "x$ac_ct_CC" = x; then
-@@ -2020,8 +1926,12 @@
- else
- case $cross_compiling:$ac_tool_warned in
- yes:)
--{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
--$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-+whose name does not start with the host triplet. If you think this
-+configuration is useful to you, please write to autoconf@gnu.org." >&5
-+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-+whose name does not start with the host triplet. If you think this
-+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- ac_tool_warned=yes ;;
- esac
- CC=$ac_ct_CC
-@@ -2034,10 +1944,10 @@
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
- set dummy ${ac_tool_prefix}cc; ac_word=$2
--{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
--$as_echo_n "checking for $ac_word... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
- if test "${ac_cv_prog_CC+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-@@ -2050,7 +1960,7 @@
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
-- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
- done
-@@ -2061,11 +1971,11 @@
- fi
- CC=$ac_cv_prog_CC
- if test -n "$CC"; then
-- { $as_echo "$as_me:$LINENO: result: $CC" >&5
--$as_echo "$CC" >&6; }
-+ { echo "$as_me:$LINENO: result: $CC" >&5
-+echo "${ECHO_T}$CC" >&6; }
- else
-- { $as_echo "$as_me:$LINENO: result: no" >&5
--$as_echo "no" >&6; }
-+ { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
- fi
-
-
-@@ -2074,10 +1984,10 @@
- if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
- set dummy cc; ac_word=$2
--{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
--$as_echo_n "checking for $ac_word... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
- if test "${ac_cv_prog_CC+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-@@ -2095,7 +2005,7 @@
- continue
- fi
- ac_cv_prog_CC="cc"
-- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
- done
-@@ -2118,11 +2028,11 @@
- fi
- CC=$ac_cv_prog_CC
- if test -n "$CC"; then
-- { $as_echo "$as_me:$LINENO: result: $CC" >&5
--$as_echo "$CC" >&6; }
-+ { echo "$as_me:$LINENO: result: $CC" >&5
-+echo "${ECHO_T}$CC" >&6; }
- else
-- { $as_echo "$as_me:$LINENO: result: no" >&5
--$as_echo "no" >&6; }
-+ { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
- fi
-
-
-@@ -2133,10 +2043,10 @@
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
- set dummy $ac_tool_prefix$ac_prog; ac_word=$2
--{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
--$as_echo_n "checking for $ac_word... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
- if test "${ac_cv_prog_CC+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-@@ -2149,7 +2059,7 @@
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
- done
-@@ -2160,11 +2070,11 @@
- fi
- CC=$ac_cv_prog_CC
- if test -n "$CC"; then
-- { $as_echo "$as_me:$LINENO: result: $CC" >&5
--$as_echo "$CC" >&6; }
-+ { echo "$as_me:$LINENO: result: $CC" >&5
-+echo "${ECHO_T}$CC" >&6; }
- else
-- { $as_echo "$as_me:$LINENO: result: no" >&5
--$as_echo "no" >&6; }
-+ { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
- fi
-
-
-@@ -2177,10 +2087,10 @@
- do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
--{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
--$as_echo_n "checking for $ac_word... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
- if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-@@ -2193,7 +2103,7 @@
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
-- $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
- done
-@@ -2204,11 +2114,11 @@
- fi
- ac_ct_CC=$ac_cv_prog_ac_ct_CC
- if test -n "$ac_ct_CC"; then
-- { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
--$as_echo "$ac_ct_CC" >&6; }
-+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-+echo "${ECHO_T}$ac_ct_CC" >&6; }
- else
-- { $as_echo "$as_me:$LINENO: result: no" >&5
--$as_echo "no" >&6; }
-+ { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
- fi
-
-
-@@ -2220,8 +2130,12 @@
- else
- case $cross_compiling:$ac_tool_warned in
- yes:)
--{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
--$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-+whose name does not start with the host triplet. If you think this
-+configuration is useful to you, please write to autoconf@gnu.org." >&5
-+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-+whose name does not start with the host triplet. If you think this
-+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
- ac_tool_warned=yes ;;
- esac
- CC=$ac_ct_CC
-@@ -2231,50 +2145,44 @@
- fi
-
-
--test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
--$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
--{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
- See \`config.log' for more details." >&5
--$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-+echo "$as_me: error: no acceptable C compiler found in \$PATH
- See \`config.log' for more details." >&2;}
-- { (exit 1); exit 1; }; }; }
-+ { (exit 1); exit 1; }; }
-
- # Provide some information about the compiler.
--$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
--set X $ac_compile
--ac_compiler=$2
-+echo "$as_me:$LINENO: checking for C compiler version" >&5
-+ac_compiler=`set X $ac_compile; echo $2`
- { (ac_try="$ac_compiler --version >&5"
- case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- { (ac_try="$ac_compiler -v >&5"
- case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
- { (ac_try="$ac_compiler -V >&5"
- case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
- cat >conftest.$ac_ext <<_ACEOF
-@@ -2293,22 +2201,27 @@
- }
- _ACEOF
- ac_clean_files_save=$ac_clean_files
--ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-+ac_clean_files="$ac_clean_files a.out a.exe b.out"
- # Try to create an executable without -o first, disregard a.out.
- # It will help us diagnose broken compilers, and finding out an intuition
- # of exeext.
--{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
--$as_echo_n "checking for C compiler default output file name... " >&6; }
--ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
--
--# The possible output files:
--ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
--
-+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
-+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-+#
-+# List of possible output files, starting from the most likely.
-+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-+# only as a last resort. b.out is created by i960 compilers.
-+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-+#
-+# The IRIX 6 linker writes into existing files which may not be
-+# executable, retaining their permissions. Remove them first so a
-+# subsequent execution test works.
- ac_rmfiles=
- for ac_file in $ac_files
- do
- case $ac_file in
-- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
- done
-@@ -2319,11 +2232,10 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
- # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-@@ -2334,7 +2246,7 @@
- do
- test -f "$ac_file" || continue
- case $ac_file in
-- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
-@@ -2361,27 +2273,25 @@
- ac_file=''
- fi
-
--{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
--$as_echo "$ac_file" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_file" >&5
-+echo "${ECHO_T}$ac_file" >&6; }
- if test -z "$ac_file"; then
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
--{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
--$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
--{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
-+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
- See \`config.log' for more details." >&5
--$as_echo "$as_me: error: C compiler cannot create executables
-+echo "$as_me: error: C compiler cannot create executables
- See \`config.log' for more details." >&2;}
-- { (exit 77); exit 77; }; }; }
-+ { (exit 77); exit 77; }; }
- fi
-
- ac_exeext=$ac_cv_exeext
-
- # Check that the compiler produces executables we can run. If not, either
- # the compiler is broken, or we cross compile.
--{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
--$as_echo_n "checking whether the C compiler works... " >&6; }
-+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
- # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
- # If not cross compiling, check that we can run a simple program.
- if test "$cross_compiling" != yes; then
-@@ -2390,53 +2300,49 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
-- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
--$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
--{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
-+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
- If you meant to cross compile, use \`--host'.
- See \`config.log' for more details." >&5
--$as_echo "$as_me: error: cannot run C compiled programs.
-+echo "$as_me: error: cannot run C compiled programs.
- If you meant to cross compile, use \`--host'.
- See \`config.log' for more details." >&2;}
-- { (exit 1); exit 1; }; }; }
-+ { (exit 1); exit 1; }; }
- fi
- fi
- fi
--{ $as_echo "$as_me:$LINENO: result: yes" >&5
--$as_echo "yes" >&6; }
-+{ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6; }
-
--rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-+rm -f a.out a.exe conftest$ac_cv_exeext b.out
- ac_clean_files=$ac_clean_files_save
- # Check that the compiler produces executables we can run. If not, either
- # the compiler is broken, or we cross compile.
--{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
--$as_echo_n "checking whether we are cross compiling... " >&6; }
--{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
--$as_echo "$cross_compiling" >&6; }
-+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
-+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
-+echo "${ECHO_T}$cross_compiling" >&6; }
-
--{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
--$as_echo_n "checking for suffix of executables... " >&6; }
-+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
-+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
- if { (ac_try="$ac_link"
- case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
- # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-@@ -2445,33 +2351,31 @@
- for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
-- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
- done
- else
-- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
--$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
--{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
- See \`config.log' for more details." >&5
--$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
- See \`config.log' for more details." >&2;}
-- { (exit 1); exit 1; }; }; }
-+ { (exit 1); exit 1; }; }
- fi
-
- rm -f conftest$ac_cv_exeext
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
--$as_echo "$ac_cv_exeext" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-+echo "${ECHO_T}$ac_cv_exeext" >&6; }
-
- rm -f conftest.$ac_ext
- EXEEXT=$ac_cv_exeext
- ac_exeext=$EXEEXT
--{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
--$as_echo_n "checking for suffix of object files... " >&6; }
-+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
-+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
- if test "${ac_cv_objext+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -2494,43 +2398,40 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
-- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
- done
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
--{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
--$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
--{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
- See \`config.log' for more details." >&5
--$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
-+echo "$as_me: error: cannot compute suffix of object files: cannot compile
- See \`config.log' for more details." >&2;}
-- { (exit 1); exit 1; }; }; }
-+ { (exit 1); exit 1; }; }
- fi
-
- rm -f conftest.$ac_cv_objext conftest.$ac_ext
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
--$as_echo "$ac_cv_objext" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-+echo "${ECHO_T}$ac_cv_objext" >&6; }
- OBJEXT=$ac_cv_objext
- ac_objext=$OBJEXT
--{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
--$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
- if test "${ac_cv_c_compiler_gnu+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -2556,21 +2457,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-@@ -2580,19 +2480,15 @@
- ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
--$as_echo "$ac_cv_c_compiler_gnu" >&6; }
--if test $ac_compiler_gnu = yes; then
-- GCC=yes
--else
-- GCC=
--fi
-+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
-+GCC=`test $ac_compiler_gnu = yes && echo yes`
- ac_test_CFLAGS=${CFLAGS+set}
- ac_save_CFLAGS=$CFLAGS
--{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
--$as_echo_n "checking whether $CC accepts -g... " >&6; }
-+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
- if test "${ac_cv_prog_cc_g+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
-@@ -2619,21 +2515,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
-@@ -2658,21 +2553,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
-@@ -2698,21 +2592,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
-
-@@ -2727,8 +2620,8 @@
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
--$as_echo "$ac_cv_prog_cc_g" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
- elif test $ac_cv_prog_cc_g = yes; then
-@@ -2744,10 +2637,10 @@
- CFLAGS=
- fi
- fi
--{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
--$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
- if test "${ac_cv_prog_cc_c89+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_cv_prog_cc_c89=no
- ac_save_CC=$CC
-@@ -2818,21 +2711,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
-
-@@ -2848,15 +2740,15 @@
- # AC_CACHE_VAL
- case "x$ac_cv_prog_cc_c89" in
- x)
-- { $as_echo "$as_me:$LINENO: result: none needed" >&5
--$as_echo "none needed" >&6; } ;;
-+ { echo "$as_me:$LINENO: result: none needed" >&5
-+echo "${ECHO_T}none needed" >&6; } ;;
- xno)
-- { $as_echo "$as_me:$LINENO: result: unsupported" >&5
--$as_echo "unsupported" >&6; } ;;
-+ { echo "$as_me:$LINENO: result: unsupported" >&5
-+echo "${ECHO_T}unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
-- { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
--$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
- esac
-
-
-@@ -2879,12 +2771,11 @@
- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
- # OS/2's system install, which has a completely different semantic
- # ./install, which can be erroneously created by make from ./install.sh.
--# Reject install programs that cannot install multiple files.
--{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
--$as_echo_n "checking for a BSD-compatible install... " >&6; }
-+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
- if test -z "$INSTALL"; then
- if test "${ac_cv_path_install+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
- for as_dir in $PATH
-@@ -2913,29 +2804,17 @@
- # program-specific install script used by HP pwplus--don't use.
- :
- else
-- rm -rf conftest.one conftest.two conftest.dir
-- echo one > conftest.one
-- echo two > conftest.two
-- mkdir conftest.dir
-- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-- test -s conftest.one && test -s conftest.two &&
-- test -s conftest.dir/conftest.one &&
-- test -s conftest.dir/conftest.two
-- then
-- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-- break 3
-- fi
-+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-+ break 3
- fi
- fi
- done
- done
- ;;
- esac
--
- done
- IFS=$as_save_IFS
-
--rm -rf conftest.one conftest.two conftest.dir
-
- fi
- if test "${ac_cv_path_install+set}" = set; then
-@@ -2948,8 +2827,8 @@
- INSTALL=$ac_install_sh
- fi
- fi
--{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
--$as_echo "$INSTALL" >&6; }
-+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
-+echo "${ECHO_T}$INSTALL" >&6; }
-
- # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
- # It thinks the first close brace ends the variable substitution.
-@@ -2967,15 +2846,15 @@
- ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
- ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
- ac_compiler_gnu=$ac_cv_c_compiler_gnu
--{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
--$as_echo_n "checking how to run the C preprocessor... " >&6; }
-+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
- # On Suns, sometimes $CPP names a directory.
- if test -n "$CPP" && test -d "$CPP"; then
- CPP=
- fi
- if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-@@ -3007,21 +2886,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-@@ -3045,14 +2923,13 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
-@@ -3060,7 +2937,7 @@
- # Broken: success on invalid input.
- continue
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-@@ -3085,8 +2962,8 @@
- else
- ac_cv_prog_CPP=$CPP
- fi
--{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
--$as_echo "$CPP" >&6; }
-+{ echo "$as_me:$LINENO: result: $CPP" >&5
-+echo "${ECHO_T}$CPP" >&6; }
- ac_preproc_ok=false
- for ac_c_preproc_warn_flag in '' yes
- do
-@@ -3114,21 +2991,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-@@ -3152,14 +3028,13 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
-@@ -3167,7 +3042,7 @@
- # Broken: success on invalid input.
- continue
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-@@ -3183,13 +3058,11 @@
- if $ac_preproc_ok; then
- :
- else
-- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
--$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
--{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
- See \`config.log' for more details." >&5
--$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
- See \`config.log' for more details." >&2;}
-- { (exit 1); exit 1; }; }; }
-+ { (exit 1); exit 1; }; }
- fi
-
- ac_ext=c
-@@ -3199,37 +3072,42 @@
- ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
--{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
--$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
-+if test "${ac_cv_path_GREP+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ # Extract the first word of "grep ggrep" to use in msg output
-+if test -z "$GREP"; then
-+set dummy grep ggrep; ac_prog_name=$2
- if test "${ac_cv_path_GREP+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
-- if test -z "$GREP"; then
- ac_path_GREP_found=false
-- # Loop through the user's path and test for each of PROGNAME-LIST
-- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+# Loop through the user's path and test for each of PROGNAME-LIST
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
- for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
- do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
-- for ac_exec_ext in '' $ac_executable_extensions; do
-- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
--# Check for GNU ac_path_GREP and select it if it is found.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-+ # Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
- case `"$ac_path_GREP" --version 2>&1` in
- *GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
- *)
- ac_count=0
-- $as_echo_n 0123456789 >"conftest.in"
-+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
-- $as_echo 'GREP' >> "conftest.nl"
-+ echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
-@@ -3244,60 +3122,74 @@
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
- esac
-
-- $ac_path_GREP_found && break 3
-- done
-+
-+ $ac_path_GREP_found && break 3
- done
- done
-+
-+done
- IFS=$as_save_IFS
-- if test -z "$ac_cv_path_GREP"; then
-- { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
--$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-+
-+
-+fi
-+
-+GREP="$ac_cv_path_GREP"
-+if test -z "$GREP"; then
-+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-- fi
-+fi
-+
- else
- ac_cv_path_GREP=$GREP
- fi
-
-+
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
--$as_echo "$ac_cv_path_GREP" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
--{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
--$as_echo_n "checking for egrep... " >&6; }
-+{ echo "$as_me:$LINENO: checking for egrep" >&5
-+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
- if test "${ac_cv_path_EGREP+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
-- if test -z "$EGREP"; then
-+ # Extract the first word of "egrep" to use in msg output
-+if test -z "$EGREP"; then
-+set dummy egrep; ac_prog_name=$2
-+if test "${ac_cv_path_EGREP+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
- ac_path_EGREP_found=false
-- # Loop through the user's path and test for each of PROGNAME-LIST
-- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+# Loop through the user's path and test for each of PROGNAME-LIST
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
- for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
- do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
-- for ac_exec_ext in '' $ac_executable_extensions; do
-- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
--# Check for GNU ac_path_EGREP and select it if it is found.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-+ # Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
- case `"$ac_path_EGREP" --version 2>&1` in
- *GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
- *)
- ac_count=0
-- $as_echo_n 0123456789 >"conftest.in"
-+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
-- $as_echo 'EGREP' >> "conftest.nl"
-+ echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
-@@ -3312,31 +3204,40 @@
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
- esac
-
-- $ac_path_EGREP_found && break 3
-- done
-+
-+ $ac_path_EGREP_found && break 3
- done
- done
-+
-+done
- IFS=$as_save_IFS
-- if test -z "$ac_cv_path_EGREP"; then
-- { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
--$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-+
-+
-+fi
-+
-+EGREP="$ac_cv_path_EGREP"
-+if test -z "$EGREP"; then
-+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-- fi
-+fi
-+
- else
- ac_cv_path_EGREP=$EGREP
- fi
-
-+
- fi
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
--$as_echo "$ac_cv_path_EGREP" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
--{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
--$as_echo_n "checking for ANSI C header files... " >&6; }
-+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
- if test "${ac_cv_header_stdc+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -3363,21 +3264,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stdc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stdc=no
-@@ -3469,40 +3369,37 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
- else
-- $as_echo "$as_me: program exited with status $ac_status" >&5
--$as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ( exit $ac_status )
- ac_cv_header_stdc=no
- fi
--rm -rf conftest.dSYM
- rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
- fi
-
-
- fi
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
--$as_echo "$ac_cv_header_stdc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
- if test $ac_cv_header_stdc = yes; then
-
- cat >>confdefs.h <<\_ACEOF
-@@ -3511,10 +3408,10 @@
-
- fi
-
--{ $as_echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
--$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
-+{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
-+echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; }
- if test "${ac_cv_header_sys_wait_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -3547,21 +3444,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_sys_wait_h=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_sys_wait_h=no
-@@ -3569,8 +3465,8 @@
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
--$as_echo "$ac_cv_header_sys_wait_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
-+echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; }
- if test $ac_cv_header_sys_wait_h = yes; then
-
- cat >>confdefs.h <<\_ACEOF
-@@ -3592,11 +3488,11 @@
- for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
- do
--as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
--{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -3614,21 +3510,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
-@@ -3636,15 +3531,12 @@
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
--as_val=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-
- fi
-@@ -3667,21 +3559,20 @@
-
- for ac_header in arpa/inet.h fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h strings.h sys/param.h sys/socket.h sys/time.h sys/timeb.h unistd.h
- do
--as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
--$as_echo_n "checking $ac_header usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -3697,33 +3588,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
--$as_echo_n "checking $ac_header presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -3737,73 +3627,69 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- eval "$as_ac_Header=\$ac_header_preproc"
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-
- fi
--as_val=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-
- fi
-@@ -3812,10 +3698,10 @@
-
-
- # Checks for typedefs, structures, and compiler characteristics.
--{ $as_echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
--$as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
-+{ echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
-+echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6; }
- if test "${ac_cv_header_stat_broken+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -3849,21 +3735,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stat_broken=no
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stat_broken=yes
-@@ -3871,8 +3756,8 @@
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
--$as_echo "$ac_cv_header_stat_broken" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
-+echo "${ECHO_T}$ac_cv_header_stat_broken" >&6; }
- if test $ac_cv_header_stat_broken = yes; then
-
- cat >>confdefs.h <<\_ACEOF
-@@ -3881,10 +3766,10 @@
-
- fi
-
--{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
--$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-+{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
- if test "${ac_cv_c_const+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -3956,21 +3841,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_c_const=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_c_const=no
-@@ -3978,20 +3862,20 @@
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
--$as_echo "$ac_cv_c_const" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-+echo "${ECHO_T}$ac_cv_c_const" >&6; }
- if test $ac_cv_c_const = no; then
-
- cat >>confdefs.h <<\_ACEOF
--#define const /**/
-+#define const
- _ACEOF
-
- fi
-
--{ $as_echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
--$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-+{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
-+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
- if test "${ac_cv_header_time+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -4018,21 +3902,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_time=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_time=no
-@@ -4040,8 +3923,8 @@
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
--$as_echo "$ac_cv_header_time" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
-+echo "${ECHO_T}$ac_cv_header_time" >&6; }
- if test $ac_cv_header_time = yes; then
-
- cat >>confdefs.h <<\_ACEOF
-@@ -4052,46 +3935,11 @@
-
-
- # Checks for library functions.
--{ $as_echo "$as_me:$LINENO: checking for pid_t" >&5
--$as_echo_n "checking for pid_t... " >&6; }
-+{ echo "$as_me:$LINENO: checking for pid_t" >&5
-+echo $ECHO_N "checking for pid_t... $ECHO_C" >&6; }
- if test "${ac_cv_type_pid_t+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
-- ac_cv_type_pid_t=no
--cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h. */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h. */
--$ac_includes_default
--int
--main ()
--{
--if (sizeof (pid_t))
-- return 0;
-- ;
-- return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext
--if { (ac_try="$ac_compile"
--case "(($ac_try" in
-- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-- *) ac_try_echo=$ac_try;;
--esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-- (eval "$ac_compile") 2>conftest.er1
-- ac_status=$?
-- grep -v '^ *+' conftest.er1 >conftest.err
-- rm -f conftest.er1
-- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-- (exit $ac_status); } && {
-- test -z "$ac_c_werror_flag" ||
-- test ! -s conftest.err
-- } && test -s conftest.$ac_objext; then
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -4099,11 +3947,14 @@
- cat >>conftest.$ac_ext <<_ACEOF
- /* end confdefs.h. */
- $ac_includes_default
-+typedef pid_t ac__type_new_;
- int
- main ()
- {
--if (sizeof ((pid_t)))
-- return 0;
-+if ((ac__type_new_ *) 0)
-+ return 0;
-+if (sizeof (ac__type_new_))
-+ return 0;
- ;
- return 0;
- }
-@@ -4114,39 +3965,30 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
-- :
--else
-- $as_echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
-- ac_cv_type_pid_t=yes
--fi
--
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+ ac_cv_type_pid_t=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
--
-+ ac_cv_type_pid_t=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
--$as_echo "$ac_cv_type_pid_t" >&6; }
--if test "x$ac_cv_type_pid_t" = x""yes; then
-+{ echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
-+echo "${ECHO_T}$ac_cv_type_pid_t" >&6; }
-+if test $ac_cv_type_pid_t = yes; then
- :
- else
-
-@@ -4159,21 +4001,20 @@
-
- for ac_header in vfork.h
- do
--as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
--$as_echo_n "checking $ac_header usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -4189,33 +4030,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
--$as_echo_n "checking $ac_header presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -4229,73 +4069,69 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- eval "$as_ac_Header=\$ac_header_preproc"
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-
- fi
--as_val=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-
- fi
-@@ -4306,11 +4142,11 @@
-
- for ac_func in fork vfork
- do
--as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
--{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
--$as_echo_n "checking for $ac_func... " >&6; }
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
- if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -4363,52 +4199,45 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- fi
--ac_res=`eval 'as_val=${'$as_ac_var'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
--as_val=`eval 'as_val=${'$as_ac_var'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+ac_res=`eval echo '${'$as_ac_var'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
- _ACEOF
-
- fi
- done
-
- if test "x$ac_cv_func_fork" = xyes; then
-- { $as_echo "$as_me:$LINENO: checking for working fork" >&5
--$as_echo_n "checking for working fork... " >&6; }
-+ { echo "$as_me:$LINENO: checking for working fork" >&5
-+echo $ECHO_N "checking for working fork... $ECHO_C" >&6; }
- if test "${ac_cv_func_fork_works+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test "$cross_compiling" = yes; then
- ac_cv_func_fork_works=cross
-@@ -4437,39 +4266,36 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_fork_works=yes
- else
-- $as_echo "$as_me: program exited with status $ac_status" >&5
--$as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ( exit $ac_status )
- ac_cv_func_fork_works=no
- fi
--rm -rf conftest.dSYM
- rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
- fi
-
-
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5
--$as_echo "$ac_cv_func_fork_works" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5
-+echo "${ECHO_T}$ac_cv_func_fork_works" >&6; }
-
- else
- ac_cv_func_fork_works=$ac_cv_func_fork
-@@ -4484,15 +4310,15 @@
- ac_cv_func_fork_works=yes
- ;;
- esac
-- { $as_echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
--$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
-+echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
- fi
- ac_cv_func_vfork_works=$ac_cv_func_vfork
- if test "x$ac_cv_func_vfork" = xyes; then
-- { $as_echo "$as_me:$LINENO: checking for working vfork" >&5
--$as_echo_n "checking for working vfork... " >&6; }
-+ { echo "$as_me:$LINENO: checking for working vfork" >&5
-+echo $ECHO_N "checking for working vfork... $ECHO_C" >&6; }
- if test "${ac_cv_func_vfork_works+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test "$cross_compiling" = yes; then
- ac_cv_func_vfork_works=cross
-@@ -4599,45 +4425,42 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_vfork_works=yes
- else
-- $as_echo "$as_me: program exited with status $ac_status" >&5
--$as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ( exit $ac_status )
- ac_cv_func_vfork_works=no
- fi
--rm -rf conftest.dSYM
- rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
- fi
-
-
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5
--$as_echo "$ac_cv_func_vfork_works" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5
-+echo "${ECHO_T}$ac_cv_func_vfork_works" >&6; }
-
- fi;
- if test "x$ac_cv_func_fork_works" = xcross; then
- ac_cv_func_vfork_works=$ac_cv_func_vfork
-- { $as_echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
--$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
-+echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
- fi
-
- if test "x$ac_cv_func_vfork_works" = xyes; then
-@@ -4664,21 +4487,20 @@
-
- for ac_header in stdlib.h
- do
--as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
--$as_echo_n "checking $ac_header usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -4694,33 +4516,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
--$as_echo_n "checking $ac_header presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -4734,83 +4555,79 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- eval "$as_ac_Header=\$ac_header_preproc"
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-
- fi
--as_val=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-
- fi
-
- done
-
--{ $as_echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
--$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
-+{ echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
-+echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6; }
- if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test "$cross_compiling" = yes; then
- ac_cv_func_malloc_0_nonnull=no
-@@ -4841,39 +4658,36 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_malloc_0_nonnull=yes
- else
-- $as_echo "$as_me: program exited with status $ac_status" >&5
--$as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ( exit $ac_status )
- ac_cv_func_malloc_0_nonnull=no
- fi
--rm -rf conftest.dSYM
- rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
- fi
-
-
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
--$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
-+echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6; }
- if test $ac_cv_func_malloc_0_nonnull = yes; then
-
- cat >>confdefs.h <<\_ACEOF
-@@ -4903,21 +4717,20 @@
-
- for ac_header in stdlib.h
- do
--as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
--$as_echo_n "checking $ac_header usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -4933,33 +4746,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
--$as_echo_n "checking $ac_header presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -4973,83 +4785,79 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- eval "$as_ac_Header=\$ac_header_preproc"
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-
- fi
--as_val=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-
- fi
-
- done
-
--{ $as_echo "$as_me:$LINENO: checking for GNU libc compatible realloc" >&5
--$as_echo_n "checking for GNU libc compatible realloc... " >&6; }
-+{ echo "$as_me:$LINENO: checking for GNU libc compatible realloc" >&5
-+echo $ECHO_N "checking for GNU libc compatible realloc... $ECHO_C" >&6; }
- if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- if test "$cross_compiling" = yes; then
- ac_cv_func_realloc_0_nonnull=no
-@@ -5080,39 +4888,36 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_realloc_0_nonnull=yes
- else
-- $as_echo "$as_me: program exited with status $ac_status" >&5
--$as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ( exit $ac_status )
- ac_cv_func_realloc_0_nonnull=no
- fi
--rm -rf conftest.dSYM
- rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
- fi
-
-
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_realloc_0_nonnull" >&5
--$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_func_realloc_0_nonnull" >&5
-+echo "${ECHO_T}$ac_cv_func_realloc_0_nonnull" >&6; }
- if test $ac_cv_func_realloc_0_nonnull = yes; then
-
- cat >>confdefs.h <<\_ACEOF
-@@ -5143,21 +4948,20 @@
-
- for ac_header in sys/select.h sys/socket.h
- do
--as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+ { echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
--$as_echo_n "checking $ac_header usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -5173,33 +4977,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
--$as_echo_n "checking $ac_header presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -5213,83 +5016,79 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
--$as_echo_n "checking for $ac_header... " >&6; }
-+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
- if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- eval "$as_ac_Header=\$ac_header_preproc"
- fi
--ac_res=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-+ac_res=`eval echo '${'$as_ac_Header'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-
- fi
--as_val=`eval 'as_val=${'$as_ac_Header'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
- _ACEOF
-
- fi
-
- done
-
--{ $as_echo "$as_me:$LINENO: checking types of arguments for select" >&5
--$as_echo_n "checking types of arguments for select... " >&6; }
-+{ echo "$as_me:$LINENO: checking types of arguments for select" >&5
-+echo $ECHO_N "checking types of arguments for select... $ECHO_C" >&6; }
- if test "${ac_cv_func_select_args+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- for ac_arg234 in 'fd_set *' 'int *' 'void *'; do
- for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do
-@@ -5324,21 +5123,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
-
-@@ -5352,8 +5150,8 @@
- : ${ac_cv_func_select_args='int,int *,struct timeval *'}
-
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_select_args" >&5
--$as_echo "$ac_cv_func_select_args" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_func_select_args" >&5
-+echo "${ECHO_T}$ac_cv_func_select_args" >&6; }
- ac_save_IFS=$IFS; IFS=','
- set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'`
- IFS=$ac_save_IFS
-@@ -5375,10 +5173,10 @@
-
- rm -f conftest*
-
--{ $as_echo "$as_me:$LINENO: checking return type of signal handlers" >&5
--$as_echo_n "checking return type of signal handlers... " >&6; }
-+{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5
-+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; }
- if test "${ac_cv_type_signal+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -5403,21 +5201,20 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_signal=int
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_signal=void
-@@ -5425,8 +5222,8 @@
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
--$as_echo "$ac_cv_type_signal" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
-+echo "${ECHO_T}$ac_cv_type_signal" >&6; }
-
- cat >>confdefs.h <<_ACEOF
- #define RETSIGTYPE $ac_cv_type_signal
-@@ -5436,11 +5233,11 @@
-
- for ac_func in vprintf
- do
--as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
--{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
--$as_echo_n "checking for $ac_func... " >&6; }
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
- if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -5493,48 +5290,41 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- fi
--ac_res=`eval 'as_val=${'$as_ac_var'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
--as_val=`eval 'as_val=${'$as_ac_var'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+ac_res=`eval echo '${'$as_ac_var'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
- _ACEOF
-
--{ $as_echo "$as_me:$LINENO: checking for _doprnt" >&5
--$as_echo_n "checking for _doprnt... " >&6; }
-+{ echo "$as_me:$LINENO: checking for _doprnt" >&5
-+echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; }
- if test "${ac_cv_func__doprnt+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -5587,36 +5377,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- ac_cv_func__doprnt=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func__doprnt=no
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
--$as_echo "$ac_cv_func__doprnt" >&6; }
--if test "x$ac_cv_func__doprnt" = x""yes; then
-+{ echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
-+echo "${ECHO_T}$ac_cv_func__doprnt" >&6; }
-+if test $ac_cv_func__doprnt = yes; then
-
- cat >>confdefs.h <<\_ACEOF
- #define HAVE_DOPRNT 1
-@@ -5642,11 +5428,11 @@
-
- for ac_func in dup2 gettimeofday inet_ntoa memset select socket strcasecmp strchr strdup strerror strncasecmp strtol
- do
--as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
--{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
--$as_echo_n "checking for $ac_func... " >&6; }
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
- if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
-@@ -5699,51 +5485,44 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- fi
--ac_res=`eval 'as_val=${'$as_ac_var'}
-- $as_echo "$as_val"'`
-- { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
--as_val=`eval 'as_val=${'$as_ac_var'}
-- $as_echo "$as_val"'`
-- if test "x$as_val" = x""yes; then
-+ac_res=`eval echo '${'$as_ac_var'}'`
-+ { echo "$as_me:$LINENO: result: $ac_res" >&5
-+echo "${ECHO_T}$ac_res" >&6; }
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
--#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
- _ACEOF
-
- fi
- done
-
--{ $as_echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
--$as_echo_n "checking for library containing setsockopt... " >&6; }
-+{ echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
-+echo $ECHO_N "checking for library containing setsockopt... $ECHO_C" >&6; }
- if test "${ac_cv_search_setsockopt+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_func_search_save_LIBS=$LIBS
- cat >conftest.$ac_ext <<_ACEOF
-@@ -5781,30 +5560,26 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- ac_cv_search_setsockopt=$ac_res
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
-
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_setsockopt+set}" = set; then
-@@ -5819,18 +5594,18 @@
- rm conftest.$ac_ext
- LIBS=$ac_func_search_save_LIBS
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
--$as_echo "$ac_cv_search_setsockopt" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
-+echo "${ECHO_T}$ac_cv_search_setsockopt" >&6; }
- ac_res=$ac_cv_search_setsockopt
- if test "$ac_res" != no; then
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
- fi
-
--{ $as_echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5
--$as_echo_n "checking for library containing gethostbyname... " >&6; }
-+{ echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5
-+echo $ECHO_N "checking for library containing gethostbyname... $ECHO_C" >&6; }
- if test "${ac_cv_search_gethostbyname+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_func_search_save_LIBS=$LIBS
- cat >conftest.$ac_ext <<_ACEOF
-@@ -5868,30 +5643,26 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- ac_cv_search_gethostbyname=$ac_res
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
-
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_gethostbyname+set}" = set; then
-@@ -5906,8 +5677,8 @@
- rm conftest.$ac_ext
- LIBS=$ac_func_search_save_LIBS
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyname" >&5
--$as_echo "$ac_cv_search_gethostbyname" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyname" >&5
-+echo "${ECHO_T}$ac_cv_search_gethostbyname" >&6; }
- ac_res=$ac_cv_search_gethostbyname
- if test "$ac_res" != no; then
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-@@ -5915,10 +5686,10 @@
- fi
-
- # OpenSSL requires dlopen on some platforms
--{ $as_echo "$as_me:$LINENO: checking for library containing dlopen" >&5
--$as_echo_n "checking for library containing dlopen... " >&6; }
-+{ echo "$as_me:$LINENO: checking for library containing dlopen" >&5
-+echo $ECHO_N "checking for library containing dlopen... $ECHO_C" >&6; }
- if test "${ac_cv_search_dlopen+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_func_search_save_LIBS=$LIBS
- cat >conftest.$ac_ext <<_ACEOF
-@@ -5956,30 +5727,26 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- ac_cv_search_dlopen=$ac_res
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
-
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_dlopen+set}" = set; then
-@@ -5994,8 +5761,8 @@
- rm conftest.$ac_ext
- LIBS=$ac_func_search_save_LIBS
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_dlopen" >&5
--$as_echo "$ac_cv_search_dlopen" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_search_dlopen" >&5
-+echo "${ECHO_T}$ac_cv_search_dlopen" >&6; }
- ac_res=$ac_cv_search_dlopen
- if test "$ac_res" != no; then
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-@@ -6006,17 +5773,17 @@
- # If they didn't specify it, we try to find it
- if test "$use_openssl" = "yes" -a -z "$specialssldir" ; then
- if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
-- { $as_echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5
--$as_echo_n "checking for openssl/ssl.h... " >&6; }
-+ { echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5
-+echo $ECHO_N "checking for openssl/ssl.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5
--$as_echo "$ac_cv_header_openssl_ssl_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5
-+echo "${ECHO_T}$ac_cv_header_openssl_ssl_h" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking openssl/ssl.h usability" >&5
--$as_echo_n "checking openssl/ssl.h usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking openssl/ssl.h usability" >&5
-+echo $ECHO_N "checking openssl/ssl.h usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6032,33 +5799,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking openssl/ssl.h presence" >&5
--$as_echo_n "checking openssl/ssl.h presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking openssl/ssl.h presence" >&5
-+echo $ECHO_N "checking openssl/ssl.h presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6072,73 +5838,72 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: openssl/ssl.h: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: openssl/ssl.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/ssl.h: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: openssl/ssl.h: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/ssl.h: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: openssl/ssl.h: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/ssl.h: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: openssl/ssl.h: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/ssl.h: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: openssl/ssl.h: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/ssl.h: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: openssl/ssl.h: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: openssl/ssl.h: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: openssl/ssl.h: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: openssl/ssl.h: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: openssl/ssl.h: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: openssl/ssl.h: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5
--$as_echo_n "checking for openssl/ssl.h... " >&6; }
-+{ echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5
-+echo $ECHO_N "checking for openssl/ssl.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_cv_header_openssl_ssl_h=$ac_header_preproc
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5
--$as_echo "$ac_cv_header_openssl_ssl_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5
-+echo "${ECHO_T}$ac_cv_header_openssl_ssl_h" >&6; }
-
- fi
--if test "x$ac_cv_header_openssl_ssl_h" = x""yes; then
-+if test $ac_cv_header_openssl_ssl_h = yes; then
- :
- else
- use_openssl="no"
-- { $as_echo "$as_me:$LINENO: WARNING: Failed to find openssl/ssl.h so OpenSSL will not be used.
-+ { echo "$as_me:$LINENO: WARNING: Failed to find openssl/ssl.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&5
--$as_echo "$as_me: WARNING: Failed to find openssl/ssl.h so OpenSSL will not be used.
-+echo "$as_me: WARNING: Failed to find openssl/ssl.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&2;}
- fi
-
-@@ -6146,17 +5911,17 @@
-
- if test "$use_openssl" = "yes"; then
- if test "${ac_cv_header_openssl_err_h+set}" = set; then
-- { $as_echo "$as_me:$LINENO: checking for openssl/err.h" >&5
--$as_echo_n "checking for openssl/err.h... " >&6; }
-+ { echo "$as_me:$LINENO: checking for openssl/err.h" >&5
-+echo $ECHO_N "checking for openssl/err.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_openssl_err_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_openssl_err_h" >&5
--$as_echo "$ac_cv_header_openssl_err_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_err_h" >&5
-+echo "${ECHO_T}$ac_cv_header_openssl_err_h" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking openssl/err.h usability" >&5
--$as_echo_n "checking openssl/err.h usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking openssl/err.h usability" >&5
-+echo $ECHO_N "checking openssl/err.h usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6172,33 +5937,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking openssl/err.h presence" >&5
--$as_echo_n "checking openssl/err.h presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking openssl/err.h presence" >&5
-+echo $ECHO_N "checking openssl/err.h presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6212,73 +5976,72 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/err.h: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: openssl/err.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/err.h: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: openssl/err.h: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/err.h: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: openssl/err.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/err.h: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: openssl/err.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/err.h: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: openssl/err.h: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/err.h: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: openssl/err.h: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/err.h: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: openssl/err.h: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/err.h: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: openssl/err.h: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/err.h: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: openssl/err.h: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/err.h: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: openssl/err.h: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/err.h: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: openssl/err.h: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/err.h: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: openssl/err.h: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/err.h: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: openssl/err.h: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/err.h: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: openssl/err.h: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/err.h: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: openssl/err.h: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/err.h: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: openssl/err.h: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for openssl/err.h" >&5
--$as_echo_n "checking for openssl/err.h... " >&6; }
-+{ echo "$as_me:$LINENO: checking for openssl/err.h" >&5
-+echo $ECHO_N "checking for openssl/err.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_openssl_err_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_cv_header_openssl_err_h=$ac_header_preproc
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_openssl_err_h" >&5
--$as_echo "$ac_cv_header_openssl_err_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_err_h" >&5
-+echo "${ECHO_T}$ac_cv_header_openssl_err_h" >&6; }
-
- fi
--if test "x$ac_cv_header_openssl_err_h" = x""yes; then
-+if test $ac_cv_header_openssl_err_h = yes; then
- :
- else
- use_openssl="no"
-- { $as_echo "$as_me:$LINENO: WARNING: Failed to find openssl/err.h so OpenSSL will not be used.
-+ { echo "$as_me:$LINENO: WARNING: Failed to find openssl/err.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&5
--$as_echo "$as_me: WARNING: Failed to find openssl/err.h so OpenSSL will not be used.
-+echo "$as_me: WARNING: Failed to find openssl/err.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&2;}
- fi
-
-@@ -6287,17 +6050,17 @@
-
- if test "$use_openssl" = "yes"; then
- if test "${ac_cv_header_openssl_rand_h+set}" = set; then
-- { $as_echo "$as_me:$LINENO: checking for openssl/rand.h" >&5
--$as_echo_n "checking for openssl/rand.h... " >&6; }
-+ { echo "$as_me:$LINENO: checking for openssl/rand.h" >&5
-+echo $ECHO_N "checking for openssl/rand.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_openssl_rand_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_openssl_rand_h" >&5
--$as_echo "$ac_cv_header_openssl_rand_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_rand_h" >&5
-+echo "${ECHO_T}$ac_cv_header_openssl_rand_h" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking openssl/rand.h usability" >&5
--$as_echo_n "checking openssl/rand.h usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking openssl/rand.h usability" >&5
-+echo $ECHO_N "checking openssl/rand.h usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6313,33 +6076,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking openssl/rand.h presence" >&5
--$as_echo_n "checking openssl/rand.h presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking openssl/rand.h presence" >&5
-+echo $ECHO_N "checking openssl/rand.h presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6353,73 +6115,72 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/rand.h: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: openssl/rand.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/rand.h: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: openssl/rand.h: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/rand.h: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: openssl/rand.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/rand.h: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: openssl/rand.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/rand.h: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: openssl/rand.h: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/rand.h: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: openssl/rand.h: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/rand.h: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: openssl/rand.h: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/rand.h: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: openssl/rand.h: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/rand.h: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: openssl/rand.h: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: openssl/rand.h: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: openssl/rand.h: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/rand.h: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: openssl/rand.h: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/rand.h: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: openssl/rand.h: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/rand.h: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: openssl/rand.h: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/rand.h: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: openssl/rand.h: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/rand.h: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: openssl/rand.h: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: openssl/rand.h: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: openssl/rand.h: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for openssl/rand.h" >&5
--$as_echo_n "checking for openssl/rand.h... " >&6; }
-+{ echo "$as_me:$LINENO: checking for openssl/rand.h" >&5
-+echo $ECHO_N "checking for openssl/rand.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_openssl_rand_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_cv_header_openssl_rand_h=$ac_header_preproc
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_openssl_rand_h" >&5
--$as_echo "$ac_cv_header_openssl_rand_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_rand_h" >&5
-+echo "${ECHO_T}$ac_cv_header_openssl_rand_h" >&6; }
-
- fi
--if test "x$ac_cv_header_openssl_rand_h" = x""yes; then
-+if test $ac_cv_header_openssl_rand_h = yes; then
- :
- else
- use_openssl="no"
-- { $as_echo "$as_me:$LINENO: WARNING: Failed to find openssl/rand.h so OpenSSL will not be used.
-+ { echo "$as_me:$LINENO: WARNING: Failed to find openssl/rand.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&5
--$as_echo "$as_me: WARNING: Failed to find openssl/rand.h so OpenSSL will not be used.
-+echo "$as_me: WARNING: Failed to find openssl/rand.h so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&2;}
- fi
-
-@@ -6428,10 +6189,10 @@
-
- if test "$use_openssl" = "yes"; then
-
--{ $as_echo "$as_me:$LINENO: checking for BIO_int_ctrl in -lcrypto" >&5
--$as_echo_n "checking for BIO_int_ctrl in -lcrypto... " >&6; }
-+{ echo "$as_me:$LINENO: checking for BIO_int_ctrl in -lcrypto" >&5
-+echo $ECHO_N "checking for BIO_int_ctrl in -lcrypto... $ECHO_C" >&6; }
- if test "${ac_cv_lib_crypto_BIO_int_ctrl+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_check_lib_save_LIBS=$LIBS
- LIBS="-lcrypto $LIBS"
-@@ -6463,37 +6224,33 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- ac_cv_lib_crypto_BIO_int_ctrl=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_crypto_BIO_int_ctrl=no
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$ac_check_lib_save_LIBS
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_BIO_int_ctrl" >&5
--$as_echo "$ac_cv_lib_crypto_BIO_int_ctrl" >&6; }
--if test "x$ac_cv_lib_crypto_BIO_int_ctrl" = x""yes; then
-+{ echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_BIO_int_ctrl" >&5
-+echo "${ECHO_T}$ac_cv_lib_crypto_BIO_int_ctrl" >&6; }
-+if test $ac_cv_lib_crypto_BIO_int_ctrl = yes; then
- cat >>confdefs.h <<_ACEOF
- #define HAVE_LIBCRYPTO 1
- _ACEOF
-@@ -6502,9 +6259,9 @@
-
- else
- use_openssl="no"
-- { $as_echo "$as_me:$LINENO: WARNING: Failed to find libcrypto so OpenSSL will not be used.
-+ { echo "$as_me:$LINENO: WARNING: Failed to find libcrypto so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&5
--$as_echo "$as_me: WARNING: Failed to find libcrypto so OpenSSL will not be used.
-+echo "$as_me: WARNING: Failed to find libcrypto so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&2;}
- fi
-
-@@ -6512,10 +6269,10 @@
-
- if test "$use_openssl" = "yes"; then
-
--{ $as_echo "$as_me:$LINENO: checking for SSL_new in -lssl" >&5
--$as_echo_n "checking for SSL_new in -lssl... " >&6; }
-+{ echo "$as_me:$LINENO: checking for SSL_new in -lssl" >&5
-+echo $ECHO_N "checking for SSL_new in -lssl... $ECHO_C" >&6; }
- if test "${ac_cv_lib_ssl_SSL_new+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_check_lib_save_LIBS=$LIBS
- LIBS="-lssl $LIBS"
-@@ -6547,37 +6304,33 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- ac_cv_lib_ssl_SSL_new=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_ssl_SSL_new=no
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$ac_check_lib_save_LIBS
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_new" >&5
--$as_echo "$ac_cv_lib_ssl_SSL_new" >&6; }
--if test "x$ac_cv_lib_ssl_SSL_new" = x""yes; then
-+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_new" >&5
-+echo "${ECHO_T}$ac_cv_lib_ssl_SSL_new" >&6; }
-+if test $ac_cv_lib_ssl_SSL_new = yes; then
- cat >>confdefs.h <<_ACEOF
- #define HAVE_LIBSSL 1
- _ACEOF
-@@ -6586,9 +6339,9 @@
-
- else
- use_openssl="no"
-- { $as_echo "$as_me:$LINENO: WARNING: Failed to find libssl so OpenSSL will not be used.
-+ { echo "$as_me:$LINENO: WARNING: Failed to find libssl so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&5
--$as_echo "$as_me: WARNING: Failed to find libssl so OpenSSL will not be used.
-+echo "$as_me: WARNING: Failed to find libssl so OpenSSL will not be used.
- If it is installed you can try the --with-openssl=DIR argument" >&2;}
- fi
-
-@@ -6621,17 +6374,17 @@
- withval=$with_libpcap; case "$with_libpcap" in
- yes)
- if test "${ac_cv_header_pcap_h+set}" = set; then
-- { $as_echo "$as_me:$LINENO: checking for pcap.h" >&5
--$as_echo_n "checking for pcap.h... " >&6; }
-+ { echo "$as_me:$LINENO: checking for pcap.h" >&5
-+echo $ECHO_N "checking for pcap.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_pcap_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_pcap_h" >&5
--$as_echo "$ac_cv_header_pcap_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_pcap_h" >&5
-+echo "${ECHO_T}$ac_cv_header_pcap_h" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking pcap.h usability" >&5
--$as_echo_n "checking pcap.h usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking pcap.h usability" >&5
-+echo $ECHO_N "checking pcap.h usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6647,33 +6400,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking pcap.h presence" >&5
--$as_echo_n "checking pcap.h presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking pcap.h presence" >&5
-+echo $ECHO_N "checking pcap.h presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6687,72 +6439,71 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: pcap.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: pcap.h: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: pcap.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: pcap.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: pcap.h: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: pcap.h: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: pcap.h: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: pcap.h: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: pcap.h: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: pcap.h: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: pcap.h: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: pcap.h: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: pcap.h: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: pcap.h: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: pcap.h: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: pcap.h: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for pcap.h" >&5
--$as_echo_n "checking for pcap.h... " >&6; }
-+{ echo "$as_me:$LINENO: checking for pcap.h" >&5
-+echo $ECHO_N "checking for pcap.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_pcap_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_cv_header_pcap_h=$ac_header_preproc
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_pcap_h" >&5
--$as_echo "$ac_cv_header_pcap_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_pcap_h" >&5
-+echo "${ECHO_T}$ac_cv_header_pcap_h" >&6; }
-
- fi
--if test "x$ac_cv_header_pcap_h" = x""yes; then
-+if test $ac_cv_header_pcap_h = yes; then
-
-- { $as_echo "$as_me:$LINENO: checking for pcap_datalink in -lpcap" >&5
--$as_echo_n "checking for pcap_datalink in -lpcap... " >&6; }
-+ { echo "$as_me:$LINENO: checking for pcap_datalink in -lpcap" >&5
-+echo $ECHO_N "checking for pcap_datalink in -lpcap... $ECHO_C" >&6; }
- if test "${ac_cv_lib_pcap_pcap_datalink+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_check_lib_save_LIBS=$LIBS
- LIBS="-lpcap $LIBS"
-@@ -6784,37 +6535,33 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- ac_cv_lib_pcap_pcap_datalink=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_pcap_pcap_datalink=no
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$ac_check_lib_save_LIBS
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pcap_pcap_datalink" >&5
--$as_echo "$ac_cv_lib_pcap_pcap_datalink" >&6; }
--if test "x$ac_cv_lib_pcap_pcap_datalink" = x""yes; then
-+{ echo "$as_me:$LINENO: result: $ac_cv_lib_pcap_pcap_datalink" >&5
-+echo "${ECHO_T}$ac_cv_lib_pcap_pcap_datalink" >&6; }
-+if test $ac_cv_lib_pcap_pcap_datalink = yes; then
- have_libpcap=yes
- fi
-
-@@ -6833,17 +6580,17 @@
- LDFLAGS="-L$with_libpcap/lib $LDFLAGS"
-
- if test "${ac_cv_header_pcap_h+set}" = set; then
-- { $as_echo "$as_me:$LINENO: checking for pcap.h" >&5
--$as_echo_n "checking for pcap.h... " >&6; }
-+ { echo "$as_me:$LINENO: checking for pcap.h" >&5
-+echo $ECHO_N "checking for pcap.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_pcap_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_pcap_h" >&5
--$as_echo "$ac_cv_header_pcap_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_pcap_h" >&5
-+echo "${ECHO_T}$ac_cv_header_pcap_h" >&6; }
- else
- # Is the header compilable?
--{ $as_echo "$as_me:$LINENO: checking pcap.h usability" >&5
--$as_echo_n "checking pcap.h usability... " >&6; }
-+{ echo "$as_me:$LINENO: checking pcap.h usability" >&5
-+echo $ECHO_N "checking pcap.h usability... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6859,33 +6606,32 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
- fi
-
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--$as_echo "$ac_header_compiler" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6; }
-
- # Is the header present?
--{ $as_echo "$as_me:$LINENO: checking pcap.h presence" >&5
--$as_echo_n "checking pcap.h presence... " >&6; }
-+{ echo "$as_me:$LINENO: checking pcap.h presence" >&5
-+echo $ECHO_N "checking pcap.h presence... $ECHO_C" >&6; }
- cat >conftest.$ac_ext <<_ACEOF
- /* confdefs.h. */
- _ACEOF
-@@ -6899,72 +6645,71 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
- fi
-
- rm -f conftest.err conftest.$ac_ext
--{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--$as_echo "$ac_header_preproc" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6; }
-
- # So? What about this header?
- case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: accepted by the compiler, rejected by the preprocessor!" >&5
--$as_echo "$as_me: WARNING: pcap.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: proceeding with the compiler's result" >&5
--$as_echo "$as_me: WARNING: pcap.h: proceeding with the compiler's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: pcap.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: pcap.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: present but cannot be compiled" >&5
--$as_echo "$as_me: WARNING: pcap.h: present but cannot be compiled" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: check for missing prerequisite headers?" >&5
--$as_echo "$as_me: WARNING: pcap.h: check for missing prerequisite headers?" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: see the Autoconf documentation" >&5
--$as_echo "$as_me: WARNING: pcap.h: see the Autoconf documentation" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: section \"Present But Cannot Be Compiled\"" >&5
--$as_echo "$as_me: WARNING: pcap.h: section \"Present But Cannot Be Compiled\"" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: proceeding with the preprocessor's result" >&5
--$as_echo "$as_me: WARNING: pcap.h: proceeding with the preprocessor's result" >&2;}
-- { $as_echo "$as_me:$LINENO: WARNING: pcap.h: in the future, the compiler will take precedence" >&5
--$as_echo "$as_me: WARNING: pcap.h: in the future, the compiler will take precedence" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: pcap.h: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: pcap.h: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: pcap.h: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: pcap.h: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: pcap.h: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: pcap.h: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: pcap.h: in the future, the compiler will take precedence" >&2;}
-
- ;;
- esac
--{ $as_echo "$as_me:$LINENO: checking for pcap.h" >&5
--$as_echo_n "checking for pcap.h... " >&6; }
-+{ echo "$as_me:$LINENO: checking for pcap.h" >&5
-+echo $ECHO_N "checking for pcap.h... $ECHO_C" >&6; }
- if test "${ac_cv_header_pcap_h+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_cv_header_pcap_h=$ac_header_preproc
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_pcap_h" >&5
--$as_echo "$ac_cv_header_pcap_h" >&6; }
-+{ echo "$as_me:$LINENO: result: $ac_cv_header_pcap_h" >&5
-+echo "${ECHO_T}$ac_cv_header_pcap_h" >&6; }
-
- fi
--if test "x$ac_cv_header_pcap_h" = x""yes; then
-+if test $ac_cv_header_pcap_h = yes; then
-
-- { $as_echo "$as_me:$LINENO: checking for pcap_datalink in -lpcap" >&5
--$as_echo_n "checking for pcap_datalink in -lpcap... " >&6; }
-+ { echo "$as_me:$LINENO: checking for pcap_datalink in -lpcap" >&5
-+echo $ECHO_N "checking for pcap_datalink in -lpcap... $ECHO_C" >&6; }
- if test "${ac_cv_lib_pcap_pcap_datalink+set}" = set; then
-- $as_echo_n "(cached) " >&6
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
- else
- ac_check_lib_save_LIBS=$LIBS
- LIBS="-lpcap $LIBS"
-@@ -6996,37 +6741,33 @@
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
- esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
-- } && test -s conftest$ac_exeext && {
-- test "$cross_compiling" = yes ||
-- $as_test_x conftest$ac_exeext
-- }; then
-+ } && test -s conftest$ac_exeext &&
-+ $as_test_x conftest$ac_exeext; then
- ac_cv_lib_pcap_pcap_datalink=yes
- else
-- $as_echo "$as_me: failed program was:" >&5
-+ echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_pcap_pcap_datalink=no
- fi
-
--rm -rf conftest.dSYM
- rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$ac_check_lib_save_LIBS
- fi
--{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pcap_pcap_datalink" >&5
--$as_echo "$ac_cv_lib_pcap_pcap_datalink" >&6; }
--if test "x$ac_cv_lib_pcap_pcap_datalink" = x""yes; then
-+{ echo "$as_me:$LINENO: result: $ac_cv_lib_pcap_pcap_datalink" >&5
-+echo "${ECHO_T}$ac_cv_lib_pcap_pcap_datalink" >&6; }
-+if test $ac_cv_lib_pcap_pcap_datalink = yes; then
- have_libpcap=yes
- LIBPCAP_INC=$with_libpcap/include
- LIBPCAP_LIB=$with_libpcap/lib
-@@ -7056,76 +6797,10 @@
- # link with -lpcap for the purposes of this test
- LIBS_OLD="$LIBS"
- LIBS="$LIBS -lpcap"
-- { $as_echo "$as_me:$LINENO: checking if libpcap version is recent enough" >&5
--$as_echo_n "checking if libpcap version is recent enough... " >&6; }
-- if test "$cross_compiling" = yes; then
-- { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
--$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
--{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
--See \`config.log' for more details." >&5
--$as_echo "$as_me: error: cannot run test program while cross compiling
--See \`config.log' for more details." >&2;}
-- { (exit 1); exit 1; }; }; }
--else
-- cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h. */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h. */
--
--#include <stdio.h>
--extern char pcap_version[];
--int main() {
-- int major, minor1, minor2;
-- sscanf(pcap_version,"%d.%d.%d", &major, &minor1, &minor2);
-- if (major > 0)
-- exit(0);
-- if (minor1 < 9)
-- exit(1);
-- if (minor2 < 4)
-- exit(1);
-- exit(0);
--}
--_ACEOF
--rm -f conftest$ac_exeext
--if { (ac_try="$ac_link"
--case "(($ac_try" in
-- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-- *) ac_try_echo=$ac_try;;
--esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-- (eval "$ac_link") 2>&5
-- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-- { (case "(($ac_try" in
-- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-- *) ac_try_echo=$ac_try;;
--esac
--eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
--$as_echo "$ac_try_echo") >&5
-- (eval "$ac_try") 2>&5
-- ac_status=$?
-- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-- (exit $ac_status); }; }; then
-- { $as_echo "$as_me:$LINENO: result: yes" >&5
--$as_echo "yes" >&6; }; have_libpcap=yes
--else
-- $as_echo "$as_me: program exited with status $ac_status" >&5
--$as_echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--( exit $ac_status )
--{ $as_echo "$as_me:$LINENO: result: no" >&5
--$as_echo "no" >&6; }; have_libpcap=no
--fi
--rm -rf conftest.dSYM
--rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
--fi
--
--
-+ { echo "$as_me:$LINENO: checking if libpcap version is recent enough" >&5
-+echo $ECHO_N "checking if libpcap version is recent enough... $ECHO_C" >&6; }
-+{ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6; }; have_libpcap=yes
- LIBS="$LIBS_OLD"
- fi
-
-@@ -7188,12 +6863,11 @@
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
-- *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
--$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
-- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
-@@ -7226,12 +6900,12 @@
- if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
-- { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
--$as_echo "$as_me: updating cache $cache_file" >&6;}
-+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5
-+echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
-- { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
--$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
- fi
- rm -f confcache
-@@ -7247,7 +6921,7 @@
- for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-+ ac_i=`echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-@@ -7260,12 +6934,11 @@
-
-
- : ${CONFIG_STATUS=./config.status}
--ac_write_fail=0
- ac_clean_files_save=$ac_clean_files
- ac_clean_files="$ac_clean_files $CONFIG_STATUS"
--{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
--$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
--cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-+echo "$as_me: creating $CONFIG_STATUS" >&6;}
-+cat >$CONFIG_STATUS <<_ACEOF
- #! $SHELL
- # Generated by $as_me.
- # Run this file to recreate the current configuration.
-@@ -7278,7 +6951,7 @@
- SHELL=\${CONFIG_SHELL-$SHELL}
- _ACEOF
-
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<\_ACEOF
- ## --------------------- ##
- ## M4sh Initialization. ##
- ## --------------------- ##
-@@ -7288,7 +6961,7 @@
- if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
-- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-@@ -7310,45 +6983,17 @@
- as_cr_digits='0123456789'
- as_cr_alnum=$as_cr_Letters$as_cr_digits
-
--as_nl='
--'
--export as_nl
--# Printing a long string crashes Solaris 7 /usr/bin/printf.
--as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
--as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
--as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
--if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-- as_echo='printf %s\n'
-- as_echo_n='printf %s'
--else
-- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-- as_echo_n='/usr/ucb/echo -n'
-- else
-- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-- as_echo_n_body='eval
-- arg=$1;
-- case $arg in
-- *"$as_nl"*)
-- expr "X$arg" : "X\\(.*\\)$as_nl";
-- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-- esac;
-- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-- '
-- export as_echo_n_body
-- as_echo_n='sh -c $as_echo_n_body as_echo'
-- fi
-- export as_echo_body
-- as_echo='sh -c $as_echo_body as_echo'
--fi
--
- # The user is always right.
- if test "${PATH_SEPARATOR+set}" != set; then
-- PATH_SEPARATOR=:
-- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-- PATH_SEPARATOR=';'
-- }
-+ echo "#! /bin/sh" >conf$$.sh
-+ echo "exit 0" >>conf$$.sh
-+ chmod +x conf$$.sh
-+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-+ PATH_SEPARATOR=';'
-+ else
-+ PATH_SEPARATOR=:
-+ fi
-+ rm -f conf$$.sh
- fi
-
- # Support unset when possible.
-@@ -7364,6 +7009,8 @@
- # there to prevent editors from complaining about space-tab.
- # (If _AS_PATH_WALK were called with IFS unset, it would disable word
- # splitting by setting IFS to empty value.)
-+as_nl='
-+'
- IFS=" "" $as_nl"
-
- # Find who we are. Look in the path if we contain no directory separator.
-@@ -7386,7 +7033,7 @@
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
-- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
- fi
-
-@@ -7399,10 +7046,17 @@
- PS4='+ '
-
- # NLS nuisances.
--LC_ALL=C
--export LC_ALL
--LANGUAGE=C
--export LANGUAGE
-+for as_var in \
-+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-+ LC_TELEPHONE LC_TIME
-+do
-+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-+ eval $as_var=C; export $as_var
-+ else
-+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-+ fi
-+done
-
- # Required to use basename.
- if expr a : '\(a\)' >/dev/null 2>&1 &&
-@@ -7424,7 +7078,7 @@
- $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
--$as_echo X/"$0" |
-+echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
-@@ -7475,7 +7129,7 @@
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
-- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
-@@ -7503,6 +7157,7 @@
- *)
- ECHO_N='-n';;
- esac
-+
- if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-@@ -7515,22 +7170,19 @@
- rm -f conf$$.dir/conf$$.file
- else
- rm -f conf$$.dir
-- mkdir conf$$.dir 2>/dev/null
-+ mkdir conf$$.dir
- fi
--if (echo >conf$$.file) 2>/dev/null; then
-- if ln -s conf$$.file conf$$ 2>/dev/null; then
-- as_ln_s='ln -s'
-- # ... but there are two gotchas:
-- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-- # In both cases, we have to default to `cp -p'.
-- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-- as_ln_s='cp -p'
-- elif ln conf$$.file conf$$ 2>/dev/null; then
-- as_ln_s=ln
-- else
-+echo >conf$$.file
-+if ln -s conf$$.file conf$$ 2>/dev/null; then
-+ as_ln_s='ln -s'
-+ # ... but there are two gotchas:
-+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-+ # In both cases, we have to default to `cp -p'.
-+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
-- fi
-+elif ln conf$$.file conf$$ 2>/dev/null; then
-+ as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-@@ -7555,10 +7207,10 @@
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
-- test -d "$1/.";
-+ test -d "$1/.";
- else
- case $1 in
-- -*)set "./$1";;
-+ -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
-@@ -7581,7 +7233,7 @@
- # values after options handling.
- ac_log="
- This file was extended by $as_me, which was
--generated by GNU Autoconf 2.63. Invocation command line was
-+generated by GNU Autoconf 2.61. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
-@@ -7594,39 +7246,29 @@
-
- _ACEOF
-
--case $ac_config_files in *"
--"*) set x $ac_config_files; shift; ac_config_files=$*;;
--esac
--
--case $ac_config_headers in *"
--"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
--esac
--
--
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<_ACEOF
- # Files that config.status was made for.
- config_files="$ac_config_files"
- config_headers="$ac_config_headers"
-
- _ACEOF
-
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<\_ACEOF
- ac_cs_usage="\
- \`$as_me' instantiates files from templates according to the
- current configuration.
-
--Usage: $0 [OPTION]... [FILE]...
-+Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
-- -q, --quiet, --silent
-- do not print progress messages
-+ -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
-- --file=FILE[:TEMPLATE]
-- instantiate the configuration file FILE
-- --header=FILE[:TEMPLATE]
-- instantiate the configuration header FILE
-+ --file=FILE[:TEMPLATE]
-+ instantiate the configuration file FILE
-+ --header=FILE[:TEMPLATE]
-+ instantiate the configuration header FILE
-
- Configuration files:
- $config_files
-@@ -7637,24 +7279,24 @@
- Report bugs to <bug-autoconf@gnu.org>."
-
- _ACEOF
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<_ACEOF
- ac_cs_version="\\
- config.status
--configured by $0, generated by GNU Autoconf 2.63,
-- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-+configured by $0, generated by GNU Autoconf 2.61,
-+ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
--Copyright (C) 2008 Free Software Foundation, Inc.
-+Copyright (C) 2006 Free Software Foundation, Inc.
- This config.status script is free software; the Free Software Foundation
- gives unlimited permission to copy, distribute and modify it."
-
- ac_pwd='$ac_pwd'
- srcdir='$srcdir'
- INSTALL='$INSTALL'
--test -n "\$AWK" || AWK=awk
- _ACEOF
-
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
--# The default lists apply if the user does not specify any file.
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+# If no file are specified by the user, then we need to provide default
-+# value. By we need to know if files were specified by the user.
- ac_need_defaults=:
- while test $# != 0
- do
-@@ -7676,36 +7318,30 @@
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-- $as_echo "$ac_cs_version"; exit ;;
-+ echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
-- case $ac_optarg in
-- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-- esac
-- CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
-+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
-- case $ac_optarg in
-- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-- esac
-- CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
-+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
-- { $as_echo "$as_me: error: ambiguous option: $1
-+ { echo "$as_me: error: ambiguous option: $1
- Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
-- $as_echo "$ac_cs_usage"; exit ;;
-+ echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
-- -*) { $as_echo "$as_me: error: unrecognized option: $1
-+ -*) { echo "$as_me: error: unrecognized option: $1
- Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
-
-@@ -7724,32 +7360,30 @@
- fi
-
- _ACEOF
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<_ACEOF
- if \$ac_cs_recheck; then
-- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-- shift
-- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-- CONFIG_SHELL='$SHELL'
-+ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-+ CONFIG_SHELL=$SHELL
- export CONFIG_SHELL
-- exec "\$@"
-+ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- fi
-
- _ACEOF
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<\_ACEOF
- exec 5>>config.log
- {
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
- ## Running $as_me. ##
- _ASBOX
-- $as_echo "$ac_log"
-+ echo "$ac_log"
- } >&5
-
- _ACEOF
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<_ACEOF
- _ACEOF
-
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<\_ACEOF
-
- # Handling of arguments.
- for ac_config_target in $ac_config_targets
-@@ -7758,8 +7392,8 @@
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
-- *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
--$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- done
-@@ -7799,143 +7433,131 @@
- (umask 077 && mkdir "$tmp")
- } ||
- {
-- $as_echo "$as_me: cannot create a temporary directory in ." >&2
-+ echo "$me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
- }
-
--# Set up the scripts for CONFIG_FILES section.
--# No need to generate them if there are no CONFIG_FILES.
--# This happens for instance with `./config.status config.h'.
--if test -n "$CONFIG_FILES"; then
--
-+#
-+# Set up the sed scripts for CONFIG_FILES section.
-+#
-
--ac_cr=' '
--ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
--if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-- ac_cs_awk_cr='\\r'
--else
-- ac_cs_awk_cr=$ac_cr
--fi
-+# No need to generate the scripts if there are no CONFIG_FILES.
-+# This happens for instance when ./config.status config.h
-+if test -n "$CONFIG_FILES"; then
-
--echo 'BEGIN {' >"$tmp/subs1.awk" &&
- _ACEOF
-
-
--{
-- echo "cat >conf$$subs.awk <<_ACEOF" &&
-- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-- echo "_ACEOF"
--} >conf$$subs.sh ||
-- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
--$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-- { (exit 1); exit 1; }; }
--ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-+
- ac_delim='%!_!# '
- for ac_last_try in false false false false false :; do
-- . ./conf$$subs.sh ||
-- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
--$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-- { (exit 1); exit 1; }; }
-+ cat >conf$$subs.sed <<_ACEOF
-+SHELL!$SHELL$ac_delim
-+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-+exec_prefix!$exec_prefix$ac_delim
-+prefix!$prefix$ac_delim
-+program_transform_name!$program_transform_name$ac_delim
-+bindir!$bindir$ac_delim
-+sbindir!$sbindir$ac_delim
-+libexecdir!$libexecdir$ac_delim
-+datarootdir!$datarootdir$ac_delim
-+datadir!$datadir$ac_delim
-+sysconfdir!$sysconfdir$ac_delim
-+sharedstatedir!$sharedstatedir$ac_delim
-+localstatedir!$localstatedir$ac_delim
-+includedir!$includedir$ac_delim
-+oldincludedir!$oldincludedir$ac_delim
-+docdir!$docdir$ac_delim
-+infodir!$infodir$ac_delim
-+htmldir!$htmldir$ac_delim
-+dvidir!$dvidir$ac_delim
-+pdfdir!$pdfdir$ac_delim
-+psdir!$psdir$ac_delim
-+libdir!$libdir$ac_delim
-+localedir!$localedir$ac_delim
-+mandir!$mandir$ac_delim
-+DEFS!$DEFS$ac_delim
-+ECHO_C!$ECHO_C$ac_delim
-+ECHO_N!$ECHO_N$ac_delim
-+ECHO_T!$ECHO_T$ac_delim
-+LIBS!$LIBS$ac_delim
-+build_alias!$build_alias$ac_delim
-+host_alias!$host_alias$ac_delim
-+target_alias!$target_alias$ac_delim
-+build!$build$ac_delim
-+build_cpu!$build_cpu$ac_delim
-+build_vendor!$build_vendor$ac_delim
-+build_os!$build_os$ac_delim
-+host!$host$ac_delim
-+host_cpu!$host_cpu$ac_delim
-+host_vendor!$host_vendor$ac_delim
-+host_os!$host_os$ac_delim
-+CC!$CC$ac_delim
-+CFLAGS!$CFLAGS$ac_delim
-+LDFLAGS!$LDFLAGS$ac_delim
-+CPPFLAGS!$CPPFLAGS$ac_delim
-+ac_ct_CC!$ac_ct_CC$ac_delim
-+EXEEXT!$EXEEXT$ac_delim
-+OBJEXT!$OBJEXT$ac_delim
-+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
-+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
-+INSTALL_DATA!$INSTALL_DATA$ac_delim
-+CPP!$CPP$ac_delim
-+GREP!$GREP$ac_delim
-+EGREP!$EGREP$ac_delim
-+LIBOBJS!$LIBOBJS$ac_delim
-+OPENSSL_LIBS!$OPENSSL_LIBS$ac_delim
-+libpcapdir!$libpcapdir$ac_delim
-+PCAP_DEPENDS!$PCAP_DEPENDS$ac_delim
-+PCAP_BUILD!$PCAP_BUILD$ac_delim
-+PCAP_CLEAN!$PCAP_CLEAN$ac_delim
-+PCAP_DIST_CLEAN!$PCAP_DIST_CLEAN$ac_delim
-+PCAP_LIBS!$PCAP_LIBS$ac_delim
-+LTLIBOBJS!$LTLIBOBJS$ac_delim
-+_ACEOF
-
-- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-- if test $ac_delim_n = $ac_delim_num; then
-+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 67; then
- break
- elif $ac_last_try; then
-- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
--$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
- done
--rm -f conf$$subs.sh
-
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
--cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-+if test -n "$ac_eof"; then
-+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-+ ac_eof=`expr $ac_eof + 1`
-+fi
-+
-+cat >>$CONFIG_STATUS <<_ACEOF
-+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
-+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
-+_ACEOF
-+sed '
-+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-+s/^/s,@/; s/!/@,|#_!!_#|/
-+:n
-+t n
-+s/'"$ac_delim"'$/,g/; t
-+s/$/\\/; p
-+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-+' >>$CONFIG_STATUS <conf$$subs.sed
-+rm -f conf$$subs.sed
-+cat >>$CONFIG_STATUS <<_ACEOF
-+:end
-+s/|#_!!_#|//g
-+CEOF$ac_eof
- _ACEOF
--sed -n '
--h
--s/^/S["/; s/!.*/"]=/
--p
--g
--s/^[^!]*!//
--:repl
--t repl
--s/'"$ac_delim"'$//
--t delim
--:nl
--h
--s/\(.\{148\}\).*/\1/
--t more1
--s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
--p
--n
--b repl
--:more1
--s/["\\]/\\&/g; s/^/"/; s/$/"\\/
--p
--g
--s/.\{148\}//
--t nl
--:delim
--h
--s/\(.\{148\}\).*/\1/
--t more2
--s/["\\]/\\&/g; s/^/"/; s/$/"/
--p
--b
--:more2
--s/["\\]/\\&/g; s/^/"/; s/$/"\\/
--p
--g
--s/.\{148\}//
--t delim
--' <conf$$subs.awk | sed '
--/^[^""]/{
-- N
-- s/\n//
--}
--' >>$CONFIG_STATUS || ac_write_fail=1
--rm -f conf$$subs.awk
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
--_ACAWK
--cat >>"\$tmp/subs1.awk" <<_ACAWK &&
-- for (key in S) S_is_set[key] = 1
-- FS = ""
--
--}
--{
-- line = $ 0
-- nfields = split(line, field, "@")
-- substed = 0
-- len = length(field[1])
-- for (i = 2; i < nfields; i++) {
-- key = field[i]
-- keylen = length(key)
-- if (S_is_set[key]) {
-- value = S[key]
-- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-- len += length(value) + length(field[++i])
-- substed = 1
-- } else
-- len += 1 + keylen
-- }
-
-- print line
--}
--
--_ACAWK
--_ACEOF
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
--if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
--else
-- cat
--fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-- || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
--$as_echo "$as_me: error: could not setup config files machinery" >&2;}
-- { (exit 1); exit 1; }; }
--_ACEOF
-
- # VPATH may cause trouble with some makes, so we remove $(srcdir),
- # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-@@ -7952,133 +7574,19 @@
- }'
- fi
-
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<\_ACEOF
- fi # test -n "$CONFIG_FILES"
-
--# Set up the scripts for CONFIG_HEADERS section.
--# No need to generate them if there are no CONFIG_HEADERS.
--# This happens for instance with `./config.status Makefile'.
--if test -n "$CONFIG_HEADERS"; then
--cat >"$tmp/defines.awk" <<\_ACAWK ||
--BEGIN {
--_ACEOF
--
--# Transform confdefs.h into an awk script `defines.awk', embedded as
--# here-document in config.status, that substitutes the proper values into
--# config.h.in to produce config.h.
-
--# Create a delimiter string that does not exist in confdefs.h, to ease
--# handling of long lines.
--ac_delim='%!_!# '
--for ac_last_try in false false :; do
-- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-- if test -z "$ac_t"; then
-- break
-- elif $ac_last_try; then
-- { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
--$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
-- { (exit 1); exit 1; }; }
-- else
-- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-- fi
--done
--
--# For the awk script, D is an array of macro values keyed by name,
--# likewise P contains macro parameters if any. Preserve backslash
--# newline sequences.
--
--ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
--sed -n '
--s/.\{148\}/&'"$ac_delim"'/g
--t rset
--:rset
--s/^[ ]*#[ ]*define[ ][ ]*/ /
--t def
--d
--:def
--s/\\$//
--t bsnl
--s/["\\]/\\&/g
--s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
--D["\1"]=" \3"/p
--s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
--d
--:bsnl
--s/["\\]/\\&/g
--s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
--D["\1"]=" \3\\\\\\n"\\/p
--t cont
--s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
--t cont
--d
--:cont
--n
--s/.\{148\}/&'"$ac_delim"'/g
--t clear
--:clear
--s/\\$//
--t bsnlc
--s/["\\]/\\&/g; s/^/"/; s/$/"/p
--d
--:bsnlc
--s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
--b cont
--' <confdefs.h | sed '
--s/'"$ac_delim"'/"\\\
--"/g' >>$CONFIG_STATUS || ac_write_fail=1
--
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-- for (key in D) D_is_set[key] = 1
-- FS = ""
--}
--/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-- line = \$ 0
-- split(line, arg, " ")
-- if (arg[1] == "#") {
-- defundef = arg[2]
-- mac1 = arg[3]
-- } else {
-- defundef = substr(arg[1], 2)
-- mac1 = arg[2]
-- }
-- split(mac1, mac2, "(") #)
-- macro = mac2[1]
-- prefix = substr(line, 1, index(line, defundef) - 1)
-- if (D_is_set[macro]) {
-- # Preserve the white space surrounding the "#".
-- print prefix "define", macro P[macro] D[macro]
-- next
-- } else {
-- # Replace #undef with comments. This is necessary, for example,
-- # in the case of _POSIX_SOURCE, which is predefined and required
-- # on some systems where configure will not decide to define it.
-- if (defundef == "undef") {
-- print "/*", prefix defundef, macro, "*/"
-- next
-- }
-- }
--}
--{ print }
--_ACAWK
--_ACEOF
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-- { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
--$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
-- { (exit 1); exit 1; }; }
--fi # test -n "$CONFIG_HEADERS"
--
--
--eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
--shift
--for ac_tag
-+for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS
- do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
-- :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
--$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
-+ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-@@ -8107,38 +7615,26 @@
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
-- { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
--$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
-+ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-- ac_file_inputs="$ac_file_inputs '$ac_f'"
-+ ac_file_inputs="$ac_file_inputs $ac_f"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
-- configure_input='Generated from '`
-- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-- `' by configure.'
-+ configure_input="Generated from "`IFS=:
-+ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
-- { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
--$as_echo "$as_me: creating $ac_file" >&6;}
-+ { echo "$as_me:$LINENO: creating $ac_file" >&5
-+echo "$as_me: creating $ac_file" >&6;}
- fi
-- # Neutralize special characters interpreted by sed in replacement strings.
-- case $configure_input in #(
-- *\&* | *\|* | *\\* )
-- ac_sed_conf_input=`$as_echo "$configure_input" |
-- sed 's/[\\\\&|]/\\\\&/g'`;; #(
-- *) ac_sed_conf_input=$configure_input;;
-- esac
-
- case $ac_tag in
-- *:-:* | *:-) cat >"$tmp/stdin" \
-- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
--$as_echo "$as_me: error: could not create $ac_file" >&2;}
-- { (exit 1); exit 1; }; } ;;
-+ *:-:* | *:-) cat >"$tmp/stdin";;
- esac
- ;;
- esac
-@@ -8148,7 +7644,7 @@
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
--$as_echo X"$ac_file" |
-+echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
-@@ -8174,7 +7670,7 @@
- as_dirs=
- while :; do
- case $as_dir in #(
-- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
-@@ -8183,7 +7679,7 @@
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
--$as_echo X"$as_dir" |
-+echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
-@@ -8204,17 +7700,17 @@
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
-- } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
--$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
-+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-+echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
- ac_builddir=.
-
- case "$ac_dir" in
- .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *)
-- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A ".." for each directory in $ac_dir_suffix.
-- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-@@ -8254,13 +7750,12 @@
- esac
- _ACEOF
-
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<\_ACEOF
- # If the template does not know about datarootdir, expand it.
- # FIXME: This hack should be removed a few years after 2.60.
- ac_datarootdir_hack=; ac_datarootdir_seen=
-
--ac_sed_dataroot='
--/datarootdir/ {
-+case `sed -n '/datarootdir/ {
- p
- q
- }
-@@ -8269,14 +7764,13 @@
- /@infodir@/p
- /@localedir@/p
- /@mandir@/p
--'
--case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-+' $ac_file_inputs` in
- *datarootdir*) ac_datarootdir_seen=yes;;
- *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
--$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
- _ACEOF
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<_ACEOF
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
-@@ -8290,16 +7784,15 @@
- # Neutralize VPATH when `$srcdir' = `.'.
- # Shell code in configure.ac might set extrasub.
- # FIXME: do we really want to maintain this feature?
--cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
--ac_sed_extra="$ac_vpsub
-+cat >>$CONFIG_STATUS <<_ACEOF
-+ sed "$ac_vpsub
- $extrasub
- _ACEOF
--cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-+cat >>$CONFIG_STATUS <<\_ACEOF
- :t
- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
--s|@configure_input@|$ac_sed_conf_input|;t t
-+s&@configure_input@&$configure_input&;t t
- s&@top_builddir@&$ac_top_builddir_sub&;t t
--s&@top_build_prefix@&$ac_top_build_prefix&;t t
- s&@srcdir@&$ac_srcdir&;t t
- s&@abs_srcdir@&$ac_abs_srcdir&;t t
- s&@top_srcdir@&$ac_top_srcdir&;t t
-@@ -8309,58 +7802,119 @@
- s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
- s&@INSTALL@&$ac_INSTALL&;t t
- $ac_datarootdir_hack
--"
--eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
--$as_echo "$as_me: error: could not create $ac_file" >&2;}
-- { (exit 1); exit 1; }; }
-+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
-
- test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
-- { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-+ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
- which seems to be undefined. Please make sure it is defined." >&5
--$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
- which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
-- -) cat "$tmp/out" && rm -f "$tmp/out";;
-- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
-- esac \
-- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
--$as_echo "$as_me: error: could not create $ac_file" >&2;}
-- { (exit 1); exit 1; }; }
-+ -) cat "$tmp/out"; rm -f "$tmp/out";;
-+ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
-+ esac
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
-+_ACEOF
-+
-+# Transform confdefs.h into a sed script `conftest.defines', that
-+# substitutes the proper values into config.h.in to produce config.h.
-+rm -f conftest.defines conftest.tail
-+# First, append a space to every undef/define line, to ease matching.
-+echo 's/$/ /' >conftest.defines
-+# Then, protect against being on the right side of a sed subst, or in
-+# an unquoted here document, in config.status. If some macros were
-+# called several times there might be several #defines for the same
-+# symbol, which is useless. But do not sort them, since the last
-+# AC_DEFINE must be honored.
-+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
-+# NAME is the cpp macro being defined, VALUE is the value it is being given.
-+# PARAMS is the parameter list in the macro definition--in most cases, it's
-+# just an empty string.
-+ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*'
-+ac_dB='\\)[ (].*,\\1define\\2'
-+ac_dC=' '
-+ac_dD=' ,'
-+
-+uniq confdefs.h |
-+ sed -n '
-+ t rset
-+ :rset
-+ s/^[ ]*#[ ]*define[ ][ ]*//
-+ t ok
-+ d
-+ :ok
-+ s/[\\&,]/\\&/g
-+ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
-+ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
-+ ' >>conftest.defines
-+
-+# Remove the space that was appended to ease matching.
-+# Then replace #undef with comments. This is necessary, for
-+# example, in the case of _POSIX_SOURCE, which is predefined and required
-+# on some systems where configure will not decide to define it.
-+# (The regexp can be short, since the line contains either #define or #undef.)
-+echo 's/ $//
-+s,^[ #]*u.*,/* & */,' >>conftest.defines
-+
-+# Break up conftest.defines:
-+ac_max_sed_lines=50
-+
-+# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1"
-+# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2"
-+# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1"
-+# et cetera.
-+ac_in='$ac_file_inputs'
-+ac_out='"$tmp/out1"'
-+ac_nxt='"$tmp/out2"'
-+
-+while :
-+do
-+ # Write a here document:
-+ cat >>$CONFIG_STATUS <<_ACEOF
-+ # First, check the format of the line:
-+ cat >"\$tmp/defines.sed" <<\\CEOF
-+/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def
-+/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def
-+b
-+:def
-+_ACEOF
-+ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
-+ echo 'CEOF
-+ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
-+ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
-+ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
-+ grep . conftest.tail >/dev/null || break
-+ rm -f conftest.defines
-+ mv conftest.tail conftest.defines
-+done
-+rm -f conftest.defines conftest.tail
-+
-+echo "ac_result=$ac_in" >>$CONFIG_STATUS
-+cat >>$CONFIG_STATUS <<\_ACEOF
- if test x"$ac_file" != x-; then
-- {
-- $as_echo "/* $configure_input */" \
-- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-- } >"$tmp/config.h" \
-- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
--$as_echo "$as_me: error: could not create $ac_file" >&2;}
-- { (exit 1); exit 1; }; }
-- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
-- { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
--$as_echo "$as_me: $ac_file is unchanged" >&6;}
-+ echo "/* $configure_input */" >"$tmp/config.h"
-+ cat "$ac_result" >>"$tmp/config.h"
-+ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
-+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-+echo "$as_me: $ac_file is unchanged" >&6;}
- else
-- rm -f "$ac_file"
-- mv "$tmp/config.h" "$ac_file" \
-- || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
--$as_echo "$as_me: error: could not create $ac_file" >&2;}
-- { (exit 1); exit 1; }; }
-+ rm -f $ac_file
-+ mv "$tmp/config.h" $ac_file
- fi
- else
-- $as_echo "/* $configure_input */" \
-- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-- || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
--$as_echo "$as_me: error: could not create -" >&2;}
-- { (exit 1); exit 1; }; }
-+ echo "/* $configure_input */"
-+ cat "$ac_result"
- fi
-+ rm -f "$tmp/out12"
- ;;
-
-
-@@ -8374,11 +7928,6 @@
- chmod +x $CONFIG_STATUS
- ac_clean_files=$ac_clean_files_save
-
--test $ac_write_fail = 0 ||
-- { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
--$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
-- { (exit 1); exit 1; }; }
--
-
- # configure is writing to config.log, and then calls config.status.
- # config.status does its own redirection, appending to config.log.
-@@ -8400,8 +7949,4 @@
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
- fi
--if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-- { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
--$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
--fi
-
-diff -ru nmap-5.00/ncat/configure.ac nmap-5.00+iPhone/ncat/configure.ac
---- nmap-5.00/ncat/configure.ac 2009-06-11 06:15:24.000000000 +0000
-+++ nmap-5.00+iPhone/ncat/configure.ac 2009-07-30 21:10:53.000000000 +0000
-@@ -151,22 +151,7 @@
- LIBS_OLD="$LIBS"
- LIBS="$LIBS -lpcap"
- AC_MSG_CHECKING(if libpcap version is recent enough)
-- AC_TRY_RUN([
--#include <stdio.h>
--extern char pcap_version[];
--int main() {
-- int major, minor1, minor2;
-- sscanf(pcap_version,"%d.%d.%d", &major, &minor1, &minor2);
-- if (major > 0)
-- exit(0);
-- if (minor1 < 9)
-- exit(1);
-- if (minor2 < 4)
-- exit(1);
-- exit(0);
--}],
--[AC_MSG_RESULT(yes); have_libpcap=yes],
--[AC_MSG_RESULT(no); have_libpcap=no])
-+AC_MSG_RESULT(yes); have_libpcap=yes
- LIBS="$LIBS_OLD"
- fi
-
diff --git a/data/nmap/make.sh b/data/nmap/make.sh
index b60542064..482d0bad7 100644
--- a/data/nmap/make.sh
+++ b/data/nmap/make.sh
@@ -1,10 +1,8 @@
pkg:setup
+pushd libdnet-stripped
autoconf
-cd libdnet-stripped
-autoconf
-cd ../ncat
-autoconf
-cd ..
-pkg:configure --without-liblua --without-python --without-zenmap --enable-static=yes --with-liblua=no
-make AR="${PKG_TARG}-ar"
+popd
+pkg:configure --without-liblua --without-python --without-zenmap --enable-static=yes --without-openssl --without-pcre
+#make -j8 AR="${PKG_TARG}-ar"
+pkg:make
pkg:install
diff --git a/data/nmap/nmap-5.00.tar.bz2 b/data/nmap/nmap-5.00.tar.bz2
deleted file mode 100644
index c12990614..000000000
--- a/data/nmap/nmap-5.00.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/nmap/strip.diff b/data/nmap/strip.diff
deleted file mode 100644
index 57368466a..000000000
--- a/data/nmap/strip.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru nmap-5.00/ncat/Makefile.in nmap-5.00+iPhone/ncat/Makefile.in
---- nmap-5.00/ncat/Makefile.in 2009-04-29 04:14:04.000000000 +0000
-+++ nmap-5.00+iPhone/ncat/Makefile.in 2009-07-30 21:40:06.000000000 +0000
-@@ -126,7 +126,7 @@
- install: $(TARGET)
- @echo Installing Ncat;
- $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(pkgdatadir) $(DESTDIR)$(mandir)/man1
-- $(INSTALL) -c -m 755 -s ncat $(DESTDIR)$(bindir)/ncat
-+ $(INSTALL) -c -m 755 ncat $(DESTDIR)$(bindir)/ncat
- $(INSTALL) -c -m 644 $(DATAFILES) $(DESTDIR)$(pkgdatadir)/
- $(INSTALL) -c -m 644 docs/$(TARGET).1 $(DESTDIR)$(mandir)/man1/$(TARGET).1
-
diff --git a/data/npth/_metadata/conflicts b/data/npth/_metadata/conflicts
new file mode 100644
index 000000000..9ecb0abd4
--- /dev/null
+++ b/data/npth/_metadata/conflicts
@@ -0,0 +1 @@
+gnupth
diff --git a/data/gnupth/_metadata/description b/data/npth/_metadata/description
index 0bdafc880..0bdafc880 100644
--- a/data/gnupth/_metadata/description
+++ b/data/npth/_metadata/description
diff --git a/data/npth/_metadata/in.1443.00 b/data/npth/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/npth/_metadata/in.1443.00
diff --git a/data/npth/_metadata/license b/data/npth/_metadata/license
new file mode 120000
index 000000000..577aa1598
--- /dev/null
+++ b/data/npth/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/lgpl-2.1 \ No newline at end of file
diff --git a/data/npth/_metadata/maintainer b/data/npth/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/npth/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/npth/_metadata/name b/data/npth/_metadata/name
new file mode 100644
index 000000000..0f1f71825
--- /dev/null
+++ b/data/npth/_metadata/name
@@ -0,0 +1 @@
+New GNU Portable Threads
diff --git a/data/npth/_metadata/priority b/data/npth/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/npth/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/npth/_metadata/role b/data/npth/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/npth/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/npth/_metadata/section b/data/npth/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/npth/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/npth/_metadata/tags b/data/npth/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/npth/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/npth/_metadata/version b/data/npth/_metadata/version
new file mode 100644
index 000000000..810ee4e91
--- /dev/null
+++ b/data/npth/_metadata/version
@@ -0,0 +1 @@
+1.6
diff --git a/data/npth/make.sh b/data/npth/make.sh
new file mode 100644
index 000000000..fbc999151
--- /dev/null
+++ b/data/npth/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+make -j8
+pkg:install
diff --git a/data/npth/npth-1.6.tar.bz2 b/data/npth/npth-1.6.tar.bz2
new file mode 100644
index 000000000..3fbe48b63
--- /dev/null
+++ b/data/npth/npth-1.6.tar.bz2
Binary files differ
diff --git a/data/nvi/_metadata/in.1443.00 b/data/nvi/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/nvi/_metadata/in.1443.00
diff --git a/data/nvi/_metadata/maintainer b/data/nvi/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/nvi/_metadata/maintainer
+++ b/data/nvi/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/odcctools/_metadata/in.1443.00 b/data/odcctools/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/odcctools/_metadata/in.1443.00
diff --git a/data/odcctools/_metadata/ld64.dep b/data/odcctools/_metadata/ld64.dep
new file mode 120000
index 000000000..1d5307075
--- /dev/null
+++ b/data/odcctools/_metadata/ld64.dep
@@ -0,0 +1 @@
+../../ld64 \ No newline at end of file
diff --git a/data/odcctools/_metadata/libssl1.0.dep b/data/odcctools/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/odcctools/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/odcctools/_metadata/llvm-clang.dep b/data/odcctools/_metadata/llvm-clang.dep
new file mode 120000
index 000000000..e86cbdeb0
--- /dev/null
+++ b/data/odcctools/_metadata/llvm-clang.dep
@@ -0,0 +1 @@
+../../llvm-clang/ \ No newline at end of file
diff --git a/data/odcctools/_metadata/maintainer b/data/odcctools/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/odcctools/_metadata/maintainer
+++ b/data/odcctools/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/odcctools/_metadata/openssl.dep b/data/odcctools/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/odcctools/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/odcctools/_metadata/version b/data/odcctools/_metadata/version
index c20f65747..208931296 100644
--- a/data/odcctools/_metadata/version
+++ b/data/odcctools/_metadata/version
@@ -1 +1 @@
-286
+895
diff --git a/data/odcctools/cctools-895.tar.gz b/data/odcctools/cctools-895.tar.gz
new file mode 100644
index 000000000..8f6e66a82
--- /dev/null
+++ b/data/odcctools/cctools-895.tar.gz
Binary files differ
diff --git a/data/odcctools/fixes.diff b/data/odcctools/fixes.diff
new file mode 100644
index 000000000..82a861957
--- /dev/null
+++ b/data/odcctools/fixes.diff
@@ -0,0 +1,24 @@
+diff -ur cctools-895/libmacho/Makefile cctools-895+iPhone/libmacho/Makefile
+--- cctools-895/libmacho/Makefile 2016-12-09 08:02:59.000000000 -1000
++++ cctools-895+iPhone/libmacho/Makefile 2018-09-05 10:18:21.000000000 -1000
+@@ -16,9 +16,7 @@
+ LIBSYSCALL=-lsystem_kernel
+ endif
+
+-DEPENDENT_LIBS = -nodefaultlibs -umbrella System -L/usr/lib/system \
+- -ldyld -lsystem_malloc -lsystem_c $(LIBSYSCALL) \
+- -lcompiler_rt
++DEPENDENT_LIBS = -nodefaultlibs -umbrella System -L"${SDKROOT}/usr/lib/system" -lSystem
+
+ ifneq "" "$(SDKROOT)"
+ SDK = -isysroot $(SDKROOT)
+@@ -324,7 +322,7 @@
+ install -c -m 555 dtmp_obj/libmacho.dylib \
+ $(DSTROOT)$(DYLIBDIR)/libmacho.dylib; \
+ $(STRIP) -S $(DSTROOT)$(DYLIBDIR)/libmacho.dylib; \
+- install -c -m 555 dtmp_obj/libmacho_profile.dylib \
++ install -c -m 555 ptmp_obj/libmacho_profile.dylib \
+ $(DSTROOT)$(DYLIBDIR)/libmacho_profile.dylib; \
+ $(STRIP) -S $(DSTROOT)$(DYLIBDIR)/libmacho_profile.dylib; \
+ install -c -m 555 dtmp_obj/libmacho_debug.dylib \
+Only in cctools-895+iPhone/libmacho: Makefile.orig
diff --git a/data/odcctools/make.sh b/data/odcctools/make.sh
index 9a1f484dc..c62939346 100644
--- a/data/odcctools/make.sh
+++ b/data/odcctools/make.sh
@@ -1,9 +1,12 @@
pkg:setup
-rm -f include/libkern/OSByteOrder.h
-rm -f include/mach/{task,thread_act,thread_status}.h
-rm -f include/mach/machine/{boolean,exception,kern_return,processor_info,rpc,thread_state,thread_status,vm_param,vm_types}.h
-pkg:configure --enable-ld64 ac_cv_header_objc_objc_runtime_h=no
-make
-pkg:install
-pkg: mv /usr/bin/ld{,_classic}
-pkg: ln -s ld64 /usr/bin/ld
+pkg: export RC_ProjectSourceVersion="$(cat ${PKG_DATA}/_metadata/version)"
+pkg:make DSTROOT="${PKG_DEST}" SDKROOT="${PKG_ROOT}"
+pkg:install DSTROOT="${PKG_DEST}" SDKROOT="${PKG_ROOT}"
+pkg: rm -f /usr/lib/system/libmacho.dylib /usr/bin/{nm,otool,size}
+pkg: mv -f /usr/bin/ar{,-classic}
+pkg: ln -s llvm-ar /usr/bin/ar
+pkg: mv -f /usr/bin/ranlib{,-classic}
+pkg: ln -s llvm-ranlib /usr/bin/ranlib
+pkg: mv -f /usr/bin/nm{-classic,}
+pkg: mv -f /usr/bin/otool{-classic,}
+pkg: mv -f /usr/bin/size{-classic,}
diff --git a/data/odcctools/odcctools-286.tgz b/data/odcctools/odcctools-286.tgz
deleted file mode 100644
index e8096aa3d..000000000
--- a/data/odcctools/odcctools-286.tgz
+++ /dev/null
Binary files differ
diff --git a/data/odcctools/otool.diff b/data/odcctools/otool.diff
deleted file mode 100644
index 3d5f28543..000000000
--- a/data/odcctools/otool.diff
+++ /dev/null
@@ -1,76 +0,0 @@
-diff -ru odcctools-277/include/foreign/objc/objc-api.h odcctools-277+iPhone/include/foreign/objc/objc-api.h
---- odcctools-277/include/foreign/objc/objc-api.h 2008-08-29 23:05:06.000000000 +0000
-+++ odcctools-277+iPhone/include/foreign/objc/objc-api.h 2008-08-30 00:26:47.000000000 +0000
-@@ -45,7 +45,7 @@
- /* OBJC2_UNAVAILABLE: unavailable in objc 2.0, deprecated in Leopard */
- #if !defined(OBJC2_UNAVAILABLE)
- # if __OBJC2__
--# define OBJC2_UNAVAILABLE UNAVAILABLE_ATTRIBUTE
-+# define OBJC2_UNAVAILABLE //UNAVAILABLE_ATTRIBUTE
- # else
- # define OBJC2_UNAVAILABLE DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER
- # endif
-diff -ru odcctools-277/include/foreign/objc/runtime.h odcctools-277+iPhone/include/foreign/objc/runtime.h
---- odcctools-277/include/foreign/objc/runtime.h 2008-08-29 23:05:06.000000000 +0000
-+++ odcctools-277+iPhone/include/foreign/objc/runtime.h 2008-08-30 00:25:34.000000000 +0000
-@@ -43,7 +43,7 @@
- struct objc_class {
- Class isa;
-
--#if !__OBJC2__
-+#if 1//!__OBJC2__
- Class super_class OBJC2_UNAVAILABLE;
- const char *name OBJC2_UNAVAILABLE;
- long version OBJC2_UNAVAILABLE;
-@@ -303,7 +303,7 @@
-
- /* Obsolete types */
-
--#if !__OBJC2__
-+#if 1//!__OBJC2__
-
- #define CLS_GETINFO(cls,infomask) ((cls)->info & (infomask))
- #define CLS_SETINFO(cls,infomask) ((cls)->info |= (infomask))
-diff -ru odcctools-277/otool/Makefile.in odcctools-277+iPhone/otool/Makefile.in
---- odcctools-277/otool/Makefile.in 2008-08-29 22:38:32.000000000 +0000
-+++ odcctools-277+iPhone/otool/Makefile.in 2008-08-30 00:18:48.000000000 +0000
-@@ -24,8 +24,10 @@
- INCPRIVEXT = -include $(top_srcdir)/include/extern.h
- endif
-
-+FOREIGN = -I$(top_srcdir)/include/foreign
-+
- ifeq ($(HAVE_FOREIGN_HEADERS),YES)
--FORHDRS = -I$(top_srcdir)/include/foreign
-+FORHDRS = $(FOREIGN)
- endif
-
- INSTALL = @INSTALL@
-@@ -77,9 +79,9 @@
- $(CC) -DOTOOL $(MYCOMPILEFLAGS) -DARCH64 -c -o $@ $<
-
- $(MOBJS): %.o: %.c
-- $(CC) $(OBJC) $(MYCOMPILEFLAGS) -c -o $@ $<
-+ $(CC) $(OBJC) $(MYCOMPILEFLAGS) $(FOREIGN) -c -o $@ $<
- $(MOBJS64): %.64o: %.c
-- $(CC) $(OBJC) $(MYCOMPILEFLAGS) -DARCH64 -c -o $@ $<
-+ $(CC) $(OBJC) $(MYCOMPILEFLAGS) $(FOREIGN) -DARCH64 -c -o $@ $<
-
- install: otool otool64
- mkdir -p $(DESTDIR)$(bindir)
-diff -ru odcctools-277/otool/print_objc.c odcctools-277+iPhone/otool/print_objc.c
---- odcctools-277/otool/print_objc.c 2008-08-29 22:38:32.000000000 +0000
-+++ odcctools-277+iPhone/otool/print_objc.c 2008-08-30 00:18:48.000000000 +0000
-@@ -39,7 +39,11 @@
-
- struct objc_protocol
- {
-- @defs(Protocol)
-+ Class isa;
-+ char *protocol_name OBJC2_UNAVAILABLE;
-+ struct objc_protocol_list *protocol_list OBJC2_UNAVAILABLE;
-+ struct objc_method_description_list *instance_methods OBJC2_UNAVAILABLE;
-+ struct objc_method_description_list *class_methods OBJC2_UNAVAILABLE;
- };
-
- /*
diff --git a/data/odcctools/usrbin.diff b/data/odcctools/usrbin.diff
deleted file mode 100644
index e5629d873..000000000
--- a/data/odcctools/usrbin.diff
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -ru odcctools-286/as/driver.c odcctools-286+iPhone/as/driver.c
---- odcctools-286/as/driver.c 2008-07-24 19:20:04.000000000 +0000
-+++ odcctools-286+iPhone/as/driver.c 2009-06-30 03:46:53.000000000 +0000
-@@ -31,16 +31,16 @@
- const char *LIB =
- #if defined(__OPENSTEP__) || defined(__HERA__) || \
- defined(__GONZO_BUNSEN_BEAKER__) || defined(__KODIAK__)
-- "../libexec/";
-+ "libexec/";
- #else
-- "../libexec/gcc/darwin/";
-+ "libexec/gcc/darwin/";
- #endif
- const char *LOCALLIB =
- #if defined(__OPENSTEP__) || defined(__HERA__) || \
- defined(__GONZO_BUNSEN_BEAKER__) || defined(__KODIAK__)
-- "../local/libexec/";
-+ "local/libexec/";
- #else
-- "../local/libexec/gcc/darwin/";
-+ "local/libexec/gcc/darwin/";
- #endif
- const char *AS = "/as";
-
-@@ -73,6 +73,7 @@
- p = rindex(prefix, '/');
- if(p != NULL)
- p[1] = '\0';
-+ prefix = "/usr/";
- /*
- * Process the assembler flags exactly like the assembler would (except
- * let the assembler complain about multiple flags, bad combinations of
diff --git a/data/odcctools/x86.diff b/data/odcctools/x86.diff
deleted file mode 100644
index 1f383f646..000000000
--- a/data/odcctools/x86.diff
+++ /dev/null
@@ -1,65 +0,0 @@
-diff -ru odcctools-253/libstuff/bytesex.c odcctools-253+iPhone/libstuff/bytesex.c
---- odcctools-253/libstuff/bytesex.c 2008-07-21 18:58:48.000000000 +0000
-+++ odcctools-253+iPhone/libstuff/bytesex.c 2008-07-21 19:15:06.000000000 +0000
-@@ -1408,7 +1408,7 @@
- #endif /* x86_THREAD_STATE64 */
-
- /* current i386 thread states */
--#if i386_THREAD_STATE == 1
-+#if i386_THREAD_STATE == 1 && 0
- __private_extern__
- void
- swap_i386_float_state(
-diff -ru odcctools-253/libstuff/swap_headers.c odcctools-253+iPhone/libstuff/swap_headers.c
---- odcctools-253/libstuff/swap_headers.c 2008-07-21 18:58:48.000000000 +0000
-+++ odcctools-253+iPhone/libstuff/swap_headers.c 2008-07-21 19:07:38.000000000 +0000
-@@ -635,13 +635,13 @@
- || cputype == CPU_TYPE_X86_64
- #endif /* x86_THREAD_STATE64 */
- ){
-- i386_thread_state_t *cpu;
-+ x86_thread_state_t *cpu;
- #ifdef x86_THREAD_STATE64
- x86_thread_state64_t *cpu64;
- #endif /* x86_THREAD_STATE64 */
- /* current i386 thread states */
- #if i386_THREAD_STATE == 1
-- struct i386_float_state *fpu;
-+ struct x86_float_state *fpu;
- i386_exception_state_t *exc;
- #endif /* i386_THREAD_STATE == 1 */
-
-@@ -679,8 +679,8 @@
- "LC_THREAD", i);
- return(FALSE);
- }
-- cpu = (i386_thread_state_t *)state;
-- state += sizeof(i386_thread_state_t);
-+ cpu = (x86_thread_state_t *)state;
-+ state += sizeof(x86_thread_state_t);
- break;
- /* current i386 thread states */
- #if i386_THREAD_STATE == 1
-@@ -695,8 +695,8 @@
- "LC_THREAD", i);
- return(FALSE);
- }
-- fpu = (struct i386_float_state *)state;
-- state += sizeof(struct i386_float_state);
-+ fpu = (struct x86_float_state *)state;
-+ state += sizeof(struct x86_float_state);
- break;
- case i386_EXCEPTION_STATE:
- if(count != I386_EXCEPTION_STATE_COUNT){
-@@ -1350,9 +1350,9 @@
- /* current i386 thread states */
- #if i386_THREAD_STATE == 1
- case i386_FLOAT_STATE:
-- fpu = (struct i386_float_state *)state;
-+ fpu = (struct x86_float_state *)state;
- swap_i386_float_state(fpu, target_byte_sex);
-- state += sizeof(struct i386_float_state);
-+ state += sizeof(struct x86_float_state);
- break;
- case i386_EXCEPTION_STATE:
- exc = (i386_exception_state_t *)state;
diff --git a/data/ogg/_metadata/in.1443.00 b/data/ogg/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ogg/_metadata/in.1443.00
diff --git a/data/ogg/_metadata/maintainer b/data/ogg/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ogg/_metadata/maintainer
+++ b/data/ogg/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ogg/_metadata/version b/data/ogg/_metadata/version
index 781dcb07c..31e5c8434 100644
--- a/data/ogg/_metadata/version
+++ b/data/ogg/_metadata/version
@@ -1 +1 @@
-1.1.3
+1.3.3
diff --git a/data/ogg/libogg-1.1.3.tar.gz b/data/ogg/libogg-1.1.3.tar.gz
deleted file mode 100644
index 2f059687d..000000000
--- a/data/ogg/libogg-1.1.3.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/ogg/libogg-1.3.3.tar.gz b/data/ogg/libogg-1.3.3.tar.gz
new file mode 100644
index 000000000..b39fdfe49
--- /dev/null
+++ b/data/ogg/libogg-1.3.3.tar.gz
Binary files differ
diff --git a/data/openntpd/_metadata/in.1443.00 b/data/openntpd/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/openntpd/_metadata/in.1443.00
diff --git a/data/openntpd/_metadata/maintainer b/data/openntpd/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/openntpd/_metadata/maintainer
+++ b/data/openntpd/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/openpam/OpenPAM-22.tar.gz b/data/openpam/OpenPAM-22.tar.gz
new file mode 100644
index 000000000..7aeb00d13
--- /dev/null
+++ b/data/openpam/OpenPAM-22.tar.gz
Binary files differ
diff --git a/data/openpam/_metadata/conflicts b/data/openpam/_metadata/conflicts
new file mode 100644
index 000000000..dc83ed24f
--- /dev/null
+++ b/data/openpam/_metadata/conflicts
@@ -0,0 +1 @@
+pam
diff --git a/data/pam/_metadata/depends b/data/openpam/_metadata/depends
index 2659dae3c..2659dae3c 100644
--- a/data/pam/_metadata/depends
+++ b/data/openpam/_metadata/depends
diff --git a/data/pam/_metadata/description b/data/openpam/_metadata/description
index dc932a230..dc932a230 100644
--- a/data/pam/_metadata/description
+++ b/data/openpam/_metadata/description
diff --git a/data/pam/_metadata/license b/data/openpam/_metadata/license
index 2f27a2ee0..2f27a2ee0 100644
--- a/data/pam/_metadata/license
+++ b/data/openpam/_metadata/license
diff --git a/data/openpam/_metadata/maintainer b/data/openpam/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/openpam/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/openpam/_metadata/name b/data/openpam/_metadata/name
new file mode 100644
index 000000000..160c62122
--- /dev/null
+++ b/data/openpam/_metadata/name
@@ -0,0 +1 @@
+OpenPAM (Apple)
diff --git a/data/pam/_metadata/preinst b/data/openpam/_metadata/preinst
index 498792bf9..498792bf9 100755
--- a/data/pam/_metadata/preinst
+++ b/data/openpam/_metadata/preinst
diff --git a/data/openpam/_metadata/priority b/data/openpam/_metadata/priority
new file mode 100644
index 000000000..a6a7b9cd7
--- /dev/null
+++ b/data/openpam/_metadata/priority
@@ -0,0 +1 @@
+standard
diff --git a/data/openpam/_metadata/replaces b/data/openpam/_metadata/replaces
new file mode 100644
index 000000000..dc83ed24f
--- /dev/null
+++ b/data/openpam/_metadata/replaces
@@ -0,0 +1 @@
+pam
diff --git a/data/openpam/_metadata/role b/data/openpam/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/openpam/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/openpam/_metadata/section b/data/openpam/_metadata/section
new file mode 100644
index 000000000..eb7a34ddd
--- /dev/null
+++ b/data/openpam/_metadata/section
@@ -0,0 +1 @@
+Administration
diff --git a/data/openpam/_metadata/tags b/data/openpam/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/openpam/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/openpam/_metadata/version b/data/openpam/_metadata/version
new file mode 100644
index 000000000..2bd5a0a98
--- /dev/null
+++ b/data/openpam/_metadata/version
@@ -0,0 +1 @@
+22
diff --git a/data/openpam/make.sh b/data/openpam/make.sh
new file mode 100644
index 000000000..edbfaeac3
--- /dev/null
+++ b/data/openpam/make.sh
@@ -0,0 +1,17 @@
+pkg:setup
+
+pkg: mkdir -p /etc/pam.d
+for pam in pam.d/!(*.serverinstall); do
+ echo ${pam}
+ # XXX: fix pam_launchd
+ sed -re '/^#|.*pam_(deny|nologin|permit|rootok|securetty|unix|uwtmp|wheel).so/ ! s/^/#/; ' "${pam}" >"${PKG_DEST}/etc/${pam}"
+done
+
+cd openpam
+touch NEWS AUTHORS ChangeLog
+autoreconf -f -i
+pkg:configure --enable-fakeroot="${PKG_DEST}" --enable-read-both-confs --enable-sconfigdir=/etc/pam --enable-securedir=/usr/lib/pam --enable-giant-libpam --disable-libcrack ac_cv_c_bigendian=no
+
+CPATH=$(pwd):$CPATH
+make CC="${PKG_TARG}-gcc" AR="${PKG_TARG}-ar" LD="${PKG_TARG}-ld" RANLIB="${PKG_TARG}-ranlib"
+pkg:install
diff --git a/data/openssh/_metadata/extrainst_ b/data/openssh/_metadata/extrainst_
index afdc6d157..007af8999 100755
--- a/data/openssh/_metadata/extrainst_
+++ b/data/openssh/_metadata/extrainst_
@@ -2,10 +2,11 @@
if [[ $1 == upgrade ]]; then
/bin/launchctl unload /Library/LaunchDaemons/com.openssh.sshd.plist
+ /bin/launchctl load /Library/LaunchDaemons/com.openssh.sshd.plist
fi
-if [[ $1 == install || $1 == upgrade ]]; then
- /bin/launchctl load /Library/LaunchDaemons/com.openssh.sshd.plist
+if [[ $1 == install ]]; then
+ /bin/launchctl load -w /Library/LaunchDaemons/com.openssh.sshd.plist
fi
exit 0
diff --git a/data/openssh/_metadata/in.1443.00 b/data/openssh/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/openssh/_metadata/in.1443.00
diff --git a/data/openssh/_metadata/libssl1.0.dep b/data/openssh/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/openssh/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/openssh/_metadata/maintainer b/data/openssh/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/openssh/_metadata/maintainer
+++ b/data/openssh/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/openssh/_metadata/openssl.dep b/data/openssh/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/openssh/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/openssh/_metadata/version b/data/openssh/_metadata/version
index 2ce383e8c..11ec65529 100644
--- a/data/openssh/_metadata/version
+++ b/data/openssh/_metadata/version
@@ -1 +1 @@
-6.7p1
+7.9p1
diff --git a/data/openssh/com.openssh.sshd.plist b/data/openssh/com.openssh.sshd.plist
index d9c86d972..eabe1b675 100644
--- a/data/openssh/com.openssh.sshd.plist
+++ b/data/openssh/com.openssh.sshd.plist
@@ -7,11 +7,12 @@
<string>com.openssh.sshd</string>
<key>Program</key>
- <string>/usr/libexec/sshd-keygen-wrapper</string>
+ <string>/bin/sh</string>
<key>ProgramArguments</key>
<array>
- <string>/usr/sbin/sshd</string>
+ <string>/bin/sh</string>
+ <string>/usr/libexec/sshd-keygen-wrapper</string>
<string>-i</string>
</array>
@@ -20,7 +21,7 @@
<key>Sockets</key>
<dict>
- <key>Listeners</key>
+ <key>SSHListener</key>
<dict>
<key>SockServiceName</key>
<string>ssh</string>
diff --git a/data/openssh/duplicate.diff b/data/openssh/duplicate.diff
index 6482334ac..108caf046 100644
--- a/data/openssh/duplicate.diff
+++ b/data/openssh/duplicate.diff
@@ -1,24 +1,12 @@
-diff -ru openssh-6.7p1/ge25519.h openssh-6.7p1+iPhone/ge25519.h
---- openssh-6.7p1/ge25519.h 2013-12-18 06:48:11.000000000 +0000
-+++ openssh-6.7p1+iPhone/ge25519.h 2014-12-03 07:58:12.000000000 +0000
-@@ -28,7 +28,7 @@
- fe25519 t;
- } ge25519;
+diff -ur openssh-7.7p1/session.c openssh-7.7p1+iPhone/session.c
+--- openssh-7.7p1/session.c 2018-04-01 19:38:28.000000000 -1000
++++ openssh-7.7p1+iPhone/session.c 2018-07-24 12:09:29.000000000 -1000
+@@ -141,7 +141,7 @@
+ extern void destroy_sensitive_data(void);
+ extern Buffer loginmsg;
+ extern struct sshauthopt *auth_opts;
+-char *tun_fwd_ifnames; /* serverloop.c */
++extern char *tun_fwd_ifnames; /* serverloop.c */
--const ge25519 ge25519_base;
-+extern const ge25519 ge25519_base;
-
- int ge25519_unpackneg_vartime(ge25519 *r, const unsigned char p[32]);
-
-diff -ru openssh-6.7p1/umac.c openssh-6.7p1+iPhone/umac.c
---- openssh-6.7p1/umac.c 2014-07-22 23:43:42.000000000 +0000
-+++ openssh-6.7p1+iPhone/umac.c 2014-12-02 23:50:38.000000000 +0000
-@@ -1175,7 +1175,7 @@
- * time. The all-at-once is more optimaized than the sequential version and
- * should be preferred when the sequential interface is not required.
- */
--struct umac_ctx {
-+typedef struct umac_ctx {
- uhash_ctx hash; /* Hash function for message compression */
- pdf_ctx pdf; /* PDF for hashed output */
- void *free_ptr; /* Address to free this struct via */
+ /* original command from peer. */
+ const char *original_command = NULL;
diff --git a/data/openssh/make.sh b/data/openssh/make.sh
index 8b4fe0272..4896d9037 100644
--- a/data/openssh/make.sh
+++ b/data/openssh/make.sh
@@ -1,6 +1,6 @@
pkg:setup
autoconf
-pkg:configure --disable-strip --sysconfdir=/etc/ssh --disable-libutil --disable-utmp --disable-wtmp ac_cv_path_AR=arm-apple-darwin9-ar --
+pkg:configure --disable-strip --sysconfdir=/etc/ssh --disable-libutil --disable-utmp --disable-wtmp
pkg:make
pkg:install INSTALL_SSH_RAND_HELPER=yes
pkg: cp -a %/sshd-keygen-wrapper /usr/libexec
diff --git a/data/openssh/openssh-6.7p1.tar.gz b/data/openssh/openssh-6.7p1.tar.gz
deleted file mode 100644
index b23e9969a..000000000
--- a/data/openssh/openssh-6.7p1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/openssh/openssh-7.9p1.tar.gz b/data/openssh/openssh-7.9p1.tar.gz
new file mode 100644
index 000000000..38f492774
--- /dev/null
+++ b/data/openssh/openssh-7.9p1.tar.gz
Binary files differ
diff --git a/data/openssh/privsep.diff b/data/openssh/privsep.diff
new file mode 100644
index 000000000..3f2b4d28b
--- /dev/null
+++ b/data/openssh/privsep.diff
@@ -0,0 +1,224 @@
+diff -ur openssh-7.9p1/contrib/cygwin/ssh-host-config openssh-7.9p1+iPhone/contrib/cygwin/ssh-host-config
+--- openssh-7.9p1/contrib/cygwin/ssh-host-config 2018-10-16 14:01:20.000000000 -1000
++++ openssh-7.9p1+iPhone/contrib/cygwin/ssh-host-config 2018-12-10 10:14:07.000000000 -1000
+@@ -63,6 +63,7 @@
+ port_number=22
+ service_name=sshd
+ strictmodes=yes
++privsep_used=yes
+ cygwin_value=""
+ user_account=
+ password_value=
+@@ -139,21 +140,33 @@
+
+ # ======================================================================
+ # Routine: sshd_privsep
+-# Try to create ssshd user account
++# MODIFIES: privsep_used
+ # ======================================================================
+ sshd_privsep() {
+ local ret=0
+
+ if [ "${sshd_config_configured}" != "yes" ]
+ then
+- if ! csih_create_unprivileged_user sshd
+- then
+- csih_error_recoverable "Could not create user 'sshd'!"
+- csih_error_recoverable "You will not be able to run an sshd service"
+- csih_error_recoverable "under a privileged account successfully."
+- csih_error_recoverable "Make sure to create a non-privileged user 'sshd'"
+- csih_error_recoverable "manually before trying to run the service!"
+- let ++ret
++ echo
++ csih_inform "Privilege separation is set to 'sandbox' by default since"
++ csih_inform "OpenSSH 6.1. This is unsupported by Cygwin and has to be set"
++ csih_inform "to 'yes' or 'no'."
++ csih_inform "However, using privilege separation requires a non-privileged account"
++ csih_inform "called 'sshd'."
++ csih_inform "For more info on privilege separation read /usr/share/doc/openssh/README.privsep."
++ if csih_request "Should privilege separation be used?"
++ then
++ privsep_used=yes
++ if ! csih_create_unprivileged_user sshd
++ then
++ csih_error_recoverable "Couldn't create user 'sshd'!"
++ csih_error_recoverable "Privilege separation set to 'no' again!"
++ csih_error_recoverable "Check your ${SYSCONFDIR}/sshd_config file!"
++ let ++ret
++ privsep_used=no
++ fi
++ else
++ privsep_used=no
+ fi
+ fi
+ return $ret
+@@ -189,6 +202,18 @@
+ let ++ret
+ fi
+ fi
++ if [ "${sshd_config_configured}" != "yes" ]
++ then
++ /usr/bin/sed -i -e "
++ s/^#\?UsePrivilegeSeparation .*/UsePrivilegeSeparation ${privsep_used}/" \
++ ${SYSCONFDIR}/sshd_config
++ if [ $? -ne 0 ]
++ then
++ csih_warning "Setting privilege separation failed!"
++ csih_warning "Check your ${SYSCONFDIR}/sshd_config file!"
++ let ++ret
++ fi
++ fi
+ return $ret
+ } # --- End of sshd_config_tweak --- #
+
+@@ -668,7 +693,7 @@
+ fi
+ fi
+
+-# handle sshd_config
++# handle sshd_config (and privsep)
+ csih_install_config "${SYSCONFDIR}/sshd_config" "${SYSCONFDIR}/defaults" || let ++warning_cnt
+ if ! /usr/bin/cmp "${SYSCONFDIR}/sshd_config" "${SYSCONFDIR}/defaults/${SYSCONFDIR}/sshd_config" >/dev/null 2>&1
+ then
+diff -ur openssh-7.9p1/servconf.c openssh-7.9p1+iPhone/servconf.c
+--- openssh-7.9p1/servconf.c 2018-10-16 14:01:20.000000000 -1000
++++ openssh-7.9p1+iPhone/servconf.c 2018-12-10 10:14:07.000000000 -1000
+@@ -614,7 +614,7 @@
+ { "clientalivecountmax", sClientAliveCountMax, SSHCFG_ALL },
+ { "authorizedkeysfile", sAuthorizedKeysFile, SSHCFG_ALL },
+ { "authorizedkeysfile2", sDeprecated, SSHCFG_ALL },
+- { "useprivilegeseparation", sDeprecated, SSHCFG_GLOBAL},
++ { "useprivilegeseparation", sUsePrivilegeSeparation, SSHCFG_GLOBAL},
+ { "acceptenv", sAcceptEnv, SSHCFG_ALL },
+ { "setenv", sSetEnv, SSHCFG_ALL },
+ { "permittunnel", sPermitTunnel, SSHCFG_ALL },
+@@ -1187,6 +1187,13 @@
+ { "no", 0 },
+ { NULL, -1 }
+ };
++static const struct multistate multistate_privsep[] = {
++ { "yes", PRIVSEP_NOSANDBOX },
++ { "sandbox", PRIVSEP_ON },
++ { "nosandbox", PRIVSEP_NOSANDBOX },
++ { "no", PRIVSEP_OFF },
++ { NULL, -1 }
++};
+ static const struct multistate multistate_tcpfwd[] = {
+ { "yes", FORWARD_ALLOW },
+ { "all", FORWARD_ALLOW },
+@@ -1646,6 +1653,11 @@
+ intptr = &options->disable_forwarding;
+ goto parse_flag;
+
++ case sUsePrivilegeSeparation:
++ intptr = &use_privsep;
++ multistate_ptr = multistate_privsep;
++ goto parse_multistate;
++
+ case sAllowUsers:
+ while ((arg = strdelim(&cp)) && *arg != '\0') {
+ if (match_user(NULL, NULL, NULL, arg) == -1)
+@@ -2407,6 +2419,8 @@
+ return fmt_multistate_int(val, multistate_gatewayports);
+ case sCompression:
+ return fmt_multistate_int(val, multistate_compression);
++ case sUsePrivilegeSeparation:
++ return fmt_multistate_int(val, multistate_privsep);
+ case sAllowTcpForwarding:
+ return fmt_multistate_int(val, multistate_tcpfwd);
+ case sAllowStreamLocalForwarding:
+@@ -2586,6 +2600,7 @@
+ dump_cfg_fmtint(sDisableForwarding, o->disable_forwarding);
+ dump_cfg_fmtint(sAllowStreamLocalForwarding, o->allow_streamlocal_forwarding);
+ dump_cfg_fmtint(sStreamLocalBindUnlink, o->fwd_opts.streamlocal_bind_unlink);
++ dump_cfg_fmtint(sUsePrivilegeSeparation, use_privsep);
+ dump_cfg_fmtint(sFingerprintHash, o->fingerprint_hash);
+ dump_cfg_fmtint(sExposeAuthInfo, o->expose_userauth_info);
+
+Only in openssh-7.9p1+iPhone: servconf.c.orig
+diff -ur openssh-7.9p1/sshd.c openssh-7.9p1+iPhone/sshd.c
+--- openssh-7.9p1/sshd.c 2018-10-16 14:01:20.000000000 -1000
++++ openssh-7.9p1+iPhone/sshd.c 2018-12-10 10:14:07.000000000 -1000
+@@ -228,7 +228,6 @@
+ int use_privsep = -1;
+ struct monitor *pmonitor = NULL;
+ int privsep_is_preauth = 1;
+-static int privsep_chroot = 1;
+
+ /* global authentication context */
+ Authctxt *the_authctxt = NULL;
+@@ -545,7 +544,7 @@
+ demote_sensitive_data();
+
+ /* Demote the child */
+- if (privsep_chroot) {
++ if (getuid() == 0 || geteuid() == 0) {
+ /* Change our root directory */
+ if (chroot(_PATH_PRIVSEP_CHROOT_DIR) == -1)
+ fatal("chroot(\"%s\"): %s", _PATH_PRIVSEP_CHROOT_DIR,
+@@ -1730,9 +1729,8 @@
+ );
+
+ /* Store privilege separation user for later use if required. */
+- privsep_chroot = use_privsep && (getuid() == 0 || geteuid() == 0);
+ if ((privsep_pw = getpwnam(SSH_PRIVSEP_USER)) == NULL) {
+- if (privsep_chroot || options.kerberos_authentication)
++ if (use_privsep || options.kerberos_authentication)
+ fatal("Privilege separation user %s does not exist",
+ SSH_PRIVSEP_USER);
+ } else {
+@@ -1858,7 +1856,7 @@
+ sshkey_type(key));
+ }
+
+- if (privsep_chroot) {
++ if (use_privsep) {
+ struct stat st;
+
+ if ((stat(_PATH_PRIVSEP_CHROOT_DIR, &st) == -1) ||
+Only in openssh-7.9p1+iPhone: sshd.c.orig
+diff -ur openssh-7.9p1/sshd_config openssh-7.9p1+iPhone/sshd_config
+--- openssh-7.9p1/sshd_config 2018-10-16 14:01:20.000000000 -1000
++++ openssh-7.9p1+iPhone/sshd_config 2018-12-10 10:14:59.000000000 -1000
+@@ -90,6 +90,7 @@
+ #PermitTTY yes
+ #PrintMotd yes
+ #PrintLastLog yes
++#UsePrivilegeSeparation sandbox
+ #TCPKeepAlive yes
+ #PermitUserEnvironment no
+ #Compression delayed
+diff -ur openssh-7.9p1/sshd_config.5 openssh-7.9p1+iPhone/sshd_config.5
+--- openssh-7.9p1/sshd_config.5 2018-10-16 14:01:20.000000000 -1000
++++ openssh-7.9p1+iPhone/sshd_config.5 2018-12-10 10:14:07.000000000 -1000
+@@ -1624,6 +1624,28 @@
+ as a non-root user.
+ The default is
+ .Cm no .
++.It Cm UsePrivilegeSeparation
++Specifies whether
++.Xr sshd 8
++separates privileges by creating an unprivileged child process
++to deal with incoming network traffic.
++After successful authentication, another process will be created that has
++the privilege of the authenticated user.
++The goal of privilege separation is to prevent privilege
++escalation by containing any corruption within the unprivileged processes.
++The argument must be
++.Cm yes ,
++.Cm no ,
++or
++.Cm sandbox .
++If
++.Cm UsePrivilegeSeparation
++is set to
++.Cm sandbox
++then the pre-authentication unprivileged process is subject to additional
++restrictions.
++The default is
++.Cm sandbox .
+ .It Cm VersionAddendum
+ Optionally specifies additional text to append to the SSH protocol banner
+ sent by the server upon connection.
+Only in openssh-7.9p1+iPhone: sshd_config.5.orig
+Only in openssh-7.9p1+iPhone: sshd_config.orig
diff --git a/data/openssh/sshd_config b/data/openssh/sshd_config
index 41edb7d47..7276adf09 100644
--- a/data/openssh/sshd_config
+++ b/data/openssh/sshd_config
@@ -21,7 +21,7 @@
Protocol 2
# HostKey for protocol version 1
-HostKey /etc/ssh/ssh_host_key
+# HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
@@ -38,7 +38,7 @@ HostKey /etc/ssh/ssh_host_dsa_key
# Authentication:
#LoginGraceTime 2m
-#PermitRootLogin yes
+PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
diff --git a/data/openssl/_metadata/depends b/data/openssl/_metadata/depends
new file mode 100644
index 000000000..fd4988ec3
--- /dev/null
+++ b/data/openssl/_metadata/depends
@@ -0,0 +1 @@
+firmware (>=11.0) | libssl0.9.8
diff --git a/data/openssl/_metadata/description b/data/openssl/_metadata/description
index 3750ad4db..9f645abb8 100644
--- a/data/openssl/_metadata/description
+++ b/data/openssl/_metadata/description
@@ -1 +1 @@
-SSL library and cryptographic tools
+OpenSSL tools
diff --git a/data/openssl/_metadata/in.1443.00 b/data/openssl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/openssl/_metadata/in.1443.00
diff --git a/data/openssl/_metadata/in.550.58 b/data/openssl/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/openssl/_metadata/in.550.58
diff --git a/data/openssl/_metadata/libssl1.0.dep b/data/openssl/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/openssl/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/openssl/_metadata/libssl1.0.ver.iphoneos-arm b/data/openssl/_metadata/libssl1.0.ver.iphoneos-arm
new file mode 120000
index 000000000..827dd0dfb
--- /dev/null
+++ b/data/openssl/_metadata/libssl1.0.ver.iphoneos-arm
@@ -0,0 +1 @@
+../../libssl1.0/_metadata/version \ No newline at end of file
diff --git a/data/openssl/_metadata/license b/data/openssl/_metadata/license
index ff99d9724..88ecc67af 100644..120000
--- a/data/openssl/_metadata/license
+++ b/data/openssl/_metadata/license
@@ -1,127 +1 @@
-
- LICENSE ISSUES
- ==============
-
- The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
- the OpenSSL License and the original SSLeay license apply to the toolkit.
- See below for the actual license texts. Actually both licenses are BSD-style
- Open Source licenses. In case of any license issues related to OpenSSL
- please contact openssl-core@openssl.org.
-
- OpenSSL License
- ---------------
-
-/* ====================================================================
- * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- * software must display the following acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission. For written permission, please contact
- * openssl-core@openssl.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- * nor may "OpenSSL" appear in their names without prior written
- * permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com). This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
-
- Original SSLeay License
- -----------------------
-
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to. The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code. The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * "This product includes cryptographic software written by
- * Eric Young (eay@cryptsoft.com)"
- * The word 'cryptographic' can be left out if the rouines from the library
- * being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- * the apps directory (application code) you must include an acknowledgement:
- * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed. i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
+../../_openssl1.0/_metadata/license \ No newline at end of file
diff --git a/data/openssl/_metadata/maintainer b/data/openssl/_metadata/maintainer
index 0fa66e077..9feba3530 120000
--- a/data/openssl/_metadata/maintainer
+++ b/data/openssl/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../_openssl1.0/_metadata/maintainer \ No newline at end of file
diff --git a/data/openssl/_metadata/priority b/data/openssl/_metadata/priority
index a6a7b9cd7..7b8c4d01f 100644..120000
--- a/data/openssl/_metadata/priority
+++ b/data/openssl/_metadata/priority
@@ -1 +1 @@
-standard
+../../_openssl1.0/_metadata/priority \ No newline at end of file
diff --git a/data/openssl/_metadata/role b/data/openssl/_metadata/role
index 8d0320866..2948edd45 100644..120000
--- a/data/openssl/_metadata/role
+++ b/data/openssl/_metadata/role
@@ -1 +1 @@
-developer
+../../_openssl1.0/_metadata/role \ No newline at end of file
diff --git a/data/openssl/_metadata/section b/data/openssl/_metadata/section
index 4b487b7d5..4372ae2c4 100644..120000
--- a/data/openssl/_metadata/section
+++ b/data/openssl/_metadata/section
@@ -1 +1 @@
-Security
+../../_openssl1.0/_metadata/section \ No newline at end of file
diff --git a/data/openssl/_metadata/tags b/data/openssl/_metadata/tags
index a8928cec8..575278f73 100644..120000
--- a/data/openssl/_metadata/tags
+++ b/data/openssl/_metadata/tags
@@ -1 +1 @@
-purpose::library
+../../_openssl1.0/_metadata/tags \ No newline at end of file
diff --git a/data/openssl/_metadata/version b/data/openssl/_metadata/version
index ef2fbf0bc..7c50f5d10 100644..120000
--- a/data/openssl/_metadata/version
+++ b/data/openssl/_metadata/version
@@ -1 +1 @@
-0.9.8zc
+../../_openssl1.0/_metadata/version \ No newline at end of file
diff --git a/data/openssl/iphoneos.diff b/data/openssl/iphoneos.diff
deleted file mode 100644
index 2b027d18a..000000000
--- a/data/openssl/iphoneos.diff
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -ru openssl-0.9.8h/Configure openssl-0.9.8h+iPhone/Configure
---- openssl-0.9.8h/Configure 2008-05-01 23:11:30.000000000 +0000
-+++ openssl-0.9.8h+iPhone/Configure 2008-09-13 07:14:52.000000000 +0000
-@@ -515,6 +515,11 @@
- "darwin64-x86_64-cc","cc:-arch x86_64 -O3 -fomit-frame-pointer -DL_ENDIAN -DMD32_REG_T=int -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
- "debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-
-+##### iPhoneOS
-+"darwin-arm-gcc","arm-apple-darwin-gcc:-arch arm -O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch arm -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib:arm-apple-darwin-ranlib",
-+"darwin8-arm-gcc","arm-apple-darwin8-gcc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch arm -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib:arm-apple-darwin8-ranlib",
-+"darwin9-arm-gcc","arm-apple-darwin9-gcc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-arch arm -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib:arm-apple-darwin9-ranlib",
-+
- ##### A/UX
- "aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
-
diff --git a/data/openssl/make.sh b/data/openssl/make.sh
index 750726236..3f7c2dc0b 100644
--- a/data/openssl/make.sh
+++ b/data/openssl/make.sh
@@ -1,9 +1,4 @@
-pkg:setup
-./Configure -D__DARWIN_UNIX03 "$(echo "${PKG_TARG}" | sed -e 's/\(.*\)-\(.*\)-\(.*\)/\3-\1/')-gcc" --prefix=/usr --openssldir=/usr/lib/ssl shared
-make AR="${PKG_TARG}-ar -r"
-make install INSTALL_PREFIX="${PKG_DEST}"
-pkg: rm -rf /usr/lib/man /usr/lib/ssl/man
-pkg: mkdir -p /etc/ssl
-mv "${PKG_DEST}"/usr/lib/ssl/{certs,openssl.cnf,private} "${PKG_DEST}"/etc/ssl
-ln -s /etc/ssl/{certs,openssl.cnf,private} "${PKG_DEST}"/usr/lib/ssl
-rm -rf "${PKG_DEST}"/usr/lib/*.a
+pkg: mkdir -p /usr/lib
+cp -a "$(PKG_DEST_ _openssl1.0)"/etc "${PKG_DEST}"/
+cp -a "$(PKG_DEST_ _openssl1.0)"/usr/bin "${PKG_DEST}"/usr
+cp -a "$(PKG_DEST_ _openssl1.0)"/usr/lib/ssl "${PKG_DEST}"/usr/lib
diff --git a/data/openssl/openssl-0.9.8zc.tar.gz b/data/openssl/openssl-0.9.8zc.tar.gz
deleted file mode 100644
index adfc84d34..000000000
--- a/data/openssl/openssl-0.9.8zc.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/p11-kit/_metadata/description b/data/p11-kit/_metadata/description
new file mode 100644
index 000000000..9f53a723a
--- /dev/null
+++ b/data/p11-kit/_metadata/description
@@ -0,0 +1 @@
+p11-glue utilities
diff --git a/data/p11-kit/_metadata/homepage b/data/p11-kit/_metadata/homepage
new file mode 100644
index 000000000..bbf66942a
--- /dev/null
+++ b/data/p11-kit/_metadata/homepage
@@ -0,0 +1 @@
+https://p11-glue.github.io/p11-glue/p11-kit.html
diff --git a/data/p11-kit/_metadata/in.1443.00 b/data/p11-kit/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/p11-kit/_metadata/in.1443.00
diff --git a/data/p11-kit/_metadata/libtasn1.dep b/data/p11-kit/_metadata/libtasn1.dep
new file mode 120000
index 000000000..af0321a2e
--- /dev/null
+++ b/data/p11-kit/_metadata/libtasn1.dep
@@ -0,0 +1 @@
+../../libtasn1 \ No newline at end of file
diff --git a/data/p11-kit/_metadata/license b/data/p11-kit/_metadata/license
new file mode 120000
index 000000000..eea9de8d1
--- /dev/null
+++ b/data/p11-kit/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/bsd \ No newline at end of file
diff --git a/data/p11-kit/_metadata/maintainer b/data/p11-kit/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/p11-kit/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/p11-kit/_metadata/priority b/data/p11-kit/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/p11-kit/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/p11-kit/_metadata/role b/data/p11-kit/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/p11-kit/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/p11-kit/_metadata/section b/data/p11-kit/_metadata/section
new file mode 100644
index 000000000..4b487b7d5
--- /dev/null
+++ b/data/p11-kit/_metadata/section
@@ -0,0 +1 @@
+Security
diff --git a/data/p11-kit/_metadata/tags b/data/p11-kit/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/p11-kit/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/p11-kit/_metadata/version b/data/p11-kit/_metadata/version
new file mode 100644
index 000000000..03f8d5f86
--- /dev/null
+++ b/data/p11-kit/_metadata/version
@@ -0,0 +1 @@
+0.23.12
diff --git a/data/p11-kit/make.sh b/data/p11-kit/make.sh
new file mode 100644
index 000000000..cb25ef558
--- /dev/null
+++ b/data/p11-kit/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure ac_cv_func_issetugid=no --without-trust-paths --without-libffi
+pkg:make -j8
+pkg:install
diff --git a/data/p11-kit/p11-kit-0.23.12.tar.xz b/data/p11-kit/p11-kit-0.23.12.tar.xz
new file mode 100644
index 000000000..d6b067f02
--- /dev/null
+++ b/data/p11-kit/p11-kit-0.23.12.tar.xz
Binary files differ
diff --git a/data/p7zip/_metadata/in.1443.00 b/data/p7zip/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/p7zip/_metadata/in.1443.00
diff --git a/data/p7zip/_metadata/maintainer b/data/p7zip/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/p7zip/_metadata/maintainer
+++ b/data/p7zip/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/p7zip/_metadata/version b/data/p7zip/_metadata/version
index 8c2a27e8c..43c4e9120 100644
--- a/data/p7zip/_metadata/version
+++ b/data/p7zip/_metadata/version
@@ -1 +1 @@
-4.57
+16.02
diff --git a/data/p7zip/make.sh b/data/p7zip/make.sh
index 08f0c9867..1c39d6147 100644
--- a/data/p7zip/make.sh
+++ b/data/p7zip/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-mv -f makefile.macosx makefile.machine
+mv -f makefile.macosx_gcc_64bits makefile.machine
make all2
make install DEST_DIR="${PKG_DEST}" DEST_HOME="/usr"
diff --git a/data/p7zip/p7zip_16.02_src_all.tar.xz b/data/p7zip/p7zip_16.02_src_all.tar.xz
new file mode 100644
index 000000000..534cf0ef7
--- /dev/null
+++ b/data/p7zip/p7zip_16.02_src_all.tar.xz
Binary files differ
diff --git a/data/p7zip/p7zip_4.57_src_all.tar.bz2 b/data/p7zip/p7zip_4.57_src_all.tar.bz2
deleted file mode 100644
index bf4981b26..000000000
--- a/data/p7zip/p7zip_4.57_src_all.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/p7zip/tools.diff b/data/p7zip/tools.diff
index eb1655b39..2aba1dea4 100644
--- a/data/p7zip/tools.diff
+++ b/data/p7zip/tools.diff
@@ -1,14 +1,13 @@
-diff -ru p7zip_4.57/makefile.macosx p7zip_4.57+iPhone/makefile.macosx
---- p7zip_4.57/makefile.macosx 2007-05-27 09:57:49.000000000 +0000
-+++ p7zip_4.57+iPhone/makefile.macosx 2008-01-23 08:09:43.000000000 +0000
-@@ -7,8 +7,8 @@
- -DNDEBUG -D_REENTRANT -DENV_UNIX \
+--- p7zip_16.02/makefile.macosx_gcc_64bits 2015-01-11 06:34:26.000000000 -1000
++++ p7zip_16.02+iPhone/makefile.macosx_gcc_64bits 2018-08-03 21:29:16.000000000 -1000
+@@ -9,8 +9,8 @@
+ -D_REENTRANT -DENV_UNIX \
$(LOCAL_FLAGS)
--CXX=c++ $(ALLFLAGS)
--CC=cc $(ALLFLAGS)
-+CXX=$${PKG_TARG}-g++ $(ALLFLAGS)
-+CC=$${PKG_TARG}-gcc $(ALLFLAGS)
+-CXX=c++
+-CC=cc
++CXX=$${PKG_TARG}-g++
++CC=$${PKG_TARG}-gcc
LINK_SHARED=-bundle
- LOCAL_LIBS=
+ LOCAL_LIBS=-framework CoreFoundation
diff --git a/data/pam-modules/_metadata/maintainer b/data/pam-modules/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/pam-modules/_metadata/maintainer
+++ b/data/pam-modules/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pam-modules/_metadata/openpam.dep b/data/pam-modules/_metadata/openpam.dep
new file mode 120000
index 000000000..cdea282ac
--- /dev/null
+++ b/data/pam-modules/_metadata/openpam.dep
@@ -0,0 +1 @@
+../../openpam \ No newline at end of file
diff --git a/data/pam-modules/_metadata/pam.dep b/data/pam-modules/_metadata/pam.dep
deleted file mode 120000
index d21087a2d..000000000
--- a/data/pam-modules/_metadata/pam.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../pam \ No newline at end of file
diff --git a/data/pam-modules/pam_modules-173.1.1.tar.gz b/data/pam-modules/pam_modules-173.1.1.tar.gz
new file mode 100644
index 000000000..22588cbc0
--- /dev/null
+++ b/data/pam-modules/pam_modules-173.1.1.tar.gz
Binary files differ
diff --git a/data/pam-modules/pam_modules-36.1.tar.gz b/data/pam-modules/pam_modules-36.1.tar.gz
deleted file mode 100644
index c7816a223..000000000
--- a/data/pam-modules/pam_modules-36.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/pam-modules/pw_util.h b/data/pam-modules/pw_util.h
deleted file mode 100644
index b5811b0a2..000000000
--- a/data/pam-modules/pw_util.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
- * Reserved. This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.0 (the 'License'). You may not use this file
- * except in compliance with the License. Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License."
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-/*-
- * Copyright (c) 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)pw_util.h 8.2 (Berkeley) 4/1/94
- */
-
-void pw_edit __P((int));
-void pw_error __P((char *, int, int));
-void pw_init __P((void));
-int pw_lock __P((void));
-int pw_mkdb __P((void));
-void pw_prompt __P((void));
-int pw_tmp __P((void));
diff --git a/data/pam-modules/tempname.diff b/data/pam-modules/tempname.diff
deleted file mode 100644
index a8d06558c..000000000
--- a/data/pam-modules/tempname.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru pam_modules-36.1/pam_unix/pw_util.c pam_modules-36.1+iPhone/pam_unix/pw_util.c
---- pam_modules-36.1/pam_unix/pw_util.c 2007-01-16 05:28:31.000000000 +0000
-+++ pam_modules-36.1+iPhone/pam_unix/pw_util.c 2009-04-08 09:26:20.000000000 +0000
-@@ -82,7 +82,7 @@
-
- #include "pw_util.h"
-
--extern char *tempname;
-+char *tempname;
- static pid_t editpid = -1;
- static int lockfd;
-
diff --git a/data/pam-modules/vproc_priv.h b/data/pam-modules/vproc_priv.h
deleted file mode 100644
index 991ceb0bc..000000000
--- a/data/pam-modules/vproc_priv.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef _VPROC_PRIVATE_H_
-#define _VPROC_PRIVATE_H_
-/*
- * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-#include <sys/types.h>
-#include <sys/cdefs.h>
-#include <sys/syslog.h>
-#include <sys/time.h>
-#include <stdbool.h>
-#include <launch.h>
-
-__BEGIN_DECLS
-
-#pragma GCC visibility push(default)
-
-/* DO NOT use this. This is a hack for launchctl */
-#define VPROC_MAGIC_UNLOAD_SIGNAL 0x4141504C
-
-typedef enum {
- VPROC_GSK_LAST_EXIT_STATUS = 1,
- VPROC_GSK_GLOBAL_ON_DEMAND,
- VPROC_GSK_MGR_UID,
- VPROC_GSK_MGR_PID,
- VPROC_GSK_IS_MANAGED,
- VPROC_GSK_BASIC_KEEPALIVE,
- VPROC_GSK_START_INTERVAL,
- VPROC_GSK_IDLE_TIMEOUT,
- VPROC_GSK_EXIT_TIMEOUT,
- VPROC_GSK_ENVIRONMENT,
- VPROC_GSK_ALLJOBS,
- VPROC_GSK_GLOBAL_LOG_MASK,
- VPROC_GSK_GLOBAL_UMASK,
-} vproc_gsk_t;
-
-vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval);
-vproc_err_t vproc_swap_complex(vproc_t vp, vproc_gsk_t key, launch_data_t inval, launch_data_t *outval);
-
-vproc_err_t _vproc_get_last_exit_status(int *wstatus);
-vproc_err_t _vproc_set_global_on_demand(bool val);
-
-typedef void (*_vprocmgr_log_drain_callback_t)(struct timeval *when, pid_t from_pid, pid_t about_pid, uid_t sender_uid, gid_t sender_gid, int priority, const char *from_name, const char *about_name, const char *session_name, const char *msg);
-
-vproc_err_t _vprocmgr_log_drain(vproc_t vp, pthread_mutex_t *optional_mutex_around_callback, _vprocmgr_log_drain_callback_t func);
-
-vproc_err_t _vproc_send_signal_by_label(const char *label, int sig);
-vproc_err_t _vproc_kickstart_by_label(const char *label, pid_t *out_pid, mach_port_t *out_port_name);
-vproc_err_t _vproc_wait_by_label(const char *label, int *out_wstatus);
-
-void _vproc_log(int pri, const char *msg, ...) __attribute__((format(printf, 2, 3)));
-void _vproc_log_error(int pri, const char *msg, ...) __attribute__((format(printf, 2, 3)));
-
-#define VPROCMGR_SESSION_LOGINWINDOW "LoginWindow"
-#define VPROCMGR_SESSION_BACKGROUND "Background"
-#define VPROCMGR_SESSION_AQUA "Aqua"
-#define VPROCMGR_SESSION_STANDARDIO "StandardIO"
-#define VPROCMGR_SESSION_SYSTEM "System"
-
-vproc_err_t _vprocmgr_move_subset_to_user(uid_t target_user, const char *session_type);
-
-#pragma GCC visibility pop
-
-__END_DECLS
-
-#endif
diff --git a/data/pam/_metadata/name b/data/pam/_metadata/name
deleted file mode 100644
index c21911ef1..000000000
--- a/data/pam/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-PAM (Apple)
diff --git a/data/pam/_metadata/version b/data/pam/_metadata/version
deleted file mode 100644
index 3e5ca5321..000000000
--- a/data/pam/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-32.1
diff --git a/data/pam/ar.diff b/data/pam/ar.diff
deleted file mode 100644
index 67d901ff4..000000000
--- a/data/pam/ar.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru pam-32.1/pam/modules/pammodutil/Makefile pam-32.1+iPhone/pam/modules/pammodutil/Makefile
---- pam-32.1/pam/modules/pammodutil/Makefile 2009-04-08 08:45:37.000000000 +0000
-+++ pam-32.1+iPhone/pam/modules/pammodutil/Makefile 2009-04-08 08:45:52.000000000 +0000
-@@ -37,7 +37,7 @@
- $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@
-
- $(LIBSTATIC): $(SLIBOBJECTS)
-- ar cr $@ $(SLIBOBJECTS)
-+ $(AR) cr $@ $(SLIBOBJECTS)
- $(RANLIB) $@
-
- install:
diff --git a/data/pam/cc.diff b/data/pam/cc.diff
deleted file mode 100644
index df873933a..000000000
--- a/data/pam/cc.diff
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -ru pam-32.1/pam/configure.in pam-32.1+iPhone/pam/configure.in
---- pam-32.1/pam/configure.in 2006-07-11 03:24:07.000000000 +0000
-+++ pam-32.1+iPhone/pam/configure.in 2009-04-08 08:23:07.000000000 +0000
-@@ -356,8 +356,8 @@
- OS_CFLAGS="-no-cpp-precomp"
- DYNTYPE=dylib
- LD=ld
-- LD_D='cc -bundle $(CFLAGS)'
-- LD_L='cc -dynamiclib -compatibility_version $(MAJOR_REL).$(MINOR_REL) -current_version $(MAJOR_REL).$(MINOR_REL) $(CFLAGS) -all_load'
-+ LD_D='$(CC) -bundle $(CFLAGS)'
-+ LD_L='$(CC) -dynamiclib -compatibility_version $(MAJOR_REL).$(MINOR_REL) -current_version $(MAJOR_REL).$(MINOR_REL) $(CFLAGS) -all_load'
- RANLIB=ranlib
- STRIP=strip
- CC_STATIC="-Xlinker -export-dynamic"
diff --git a/data/pam/lipo.diff b/data/pam/lipo.diff
deleted file mode 100644
index 770ff50e9..000000000
--- a/data/pam/lipo.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -ru pam-32.1/ar.sh pam-32.1+iPhone/ar.sh
---- pam-32.1/ar.sh 2005-08-18 18:02:08.000000000 +0000
-+++ pam-32.1+iPhone/ar.sh 2009-04-08 08:33:50.000000000 +0000
-@@ -47,7 +47,7 @@
- local archdir="${dir}/${arch}";
- mkdir -p "${archdir}";
-
-- lipo -thin "${arch}" "${archive}" -o "${archdir}/${name}";
-+ "${PKG_TARG}-lipo" -thin "${arch}" "${archive}" -o "${archdir}/${name}";
-
- ( cd "${archdir}" && ar -xo "./${name}"; );
-
-@@ -62,7 +62,7 @@
-
- local ofile;
- for ofile in ${ofiles}; do
-- lipo -create $(find "${dir}" -name "${ofile}" -print) -o "${dir}/${ofile}";
-+ "${PKG_TARG}-lipo" -create $(find "${dir}" -name "${ofile}" -print) -o "${dir}/${ofile}";
- done
-
- ( cd "${dir}" && ar -cr "${name}" ${ofiles}; );
diff --git a/data/pam/make.diff b/data/pam/make.diff
deleted file mode 100644
index e8bec575c..000000000
--- a/data/pam/make.diff
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -ru pam-32.1/pam/modules/Makefile pam-32.1+iPhone/pam/modules/Makefile
---- pam-32.1/pam/modules/Makefile 2002-03-28 08:43:24.000000000 +0000
-+++ pam-32.1+iPhone/pam/modules/Makefile 2009-04-08 08:37:42.000000000 +0000
-@@ -13,7 +13,7 @@
-
- all:
- @echo building the static modutil library
-- make -C pammodutil all
-+ $(MAKE) -C pammodutil all
- @echo modules sources available are:
- @ls -d $(MODDIRS) 2>/dev/null ; echo :--------
- @echo
-@@ -56,4 +56,4 @@
- $(MAKE) -C $$i clean ; \
- } fi ; \
- done
-- make -C pammodutil clean
-+ $(MAKE) -C pammodutil clean
diff --git a/data/pam/make.sh b/data/pam/make.sh
deleted file mode 100644
index 419822b8d..000000000
--- a/data/pam/make.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-pkg:setup
-
-pkg: mkdir -p /etc/pam.d
-for pam in pam.d/!(*.serverinstall); do
- echo ${pam}
- # XXX: fix pam_launchd
- sed -re '/^#|.*pam_(deny|nologin|permit|rootok|securetty|unix|uwtmp|wheel).so/ ! s/^/#/; ' "${pam}" >"${PKG_DEST}/etc/${pam}"
-done
-
-cd pam
-autoconf
-pkg:configure --enable-fakeroot="${PKG_DEST}" --enable-read-both-confs --enable-sconfigdir=/etc/pam --enable-securedir=/usr/lib/pam --enable-giant-libpam --disable-libcrack ac_cv_c_bigendian=no
-
-CPATH=$(pwd):$CPATH
-make CC="${PKG_TARG}-gcc" AR="${PKG_TARG}-ar" LD="${PKG_TARG}-ld" RANLIB="${PKG_TARG}-ranlib"
-pkg:install
-
-pkg: mv /usr/lib/libpam.1.0.dylib /usr/lib/libpam.1.dylib
-pkg: ln -s libpam.1.dylib /usr/lib/libpam.1.0.dylib
-pkg: ln -s libpam.1.dylib /usr/lib/libpam.dylib
-
-pkg: ln -s libpam.1.dylib /usr/lib/libpam_misc.dylib
-pkg: ln -s libpam.1.dylib /usr/lib/libpam_misc.1.dylib
-
-pkg: ln -s libpam.1.dylib /usr/lib/libpamc.dylib
-pkg: ln -s libpam.1.dylib /usr/lib/libpamc.1.dylib
-
-pkg: cp -a libpam/include/pam/pam_modules.h /usr/include/pam
diff --git a/data/pam/pam-32.1.tar.gz b/data/pam/pam-32.1.tar.gz
deleted file mode 100644
index ff5a68acc..000000000
--- a/data/pam/pam-32.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/pam/uname.diff b/data/pam/uname.diff
deleted file mode 100644
index 0b7482bb5..000000000
--- a/data/pam/uname.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru pam-32.1/pam/configure.in pam-32.1+iPhone/pam/configure.in
---- pam-32.1/pam/configure.in 2006-07-11 03:24:07.000000000 +0000
-+++ pam-32.1+iPhone/pam/configure.in 2009-04-08 08:28:52.000000000 +0000
-@@ -28,7 +28,7 @@
- dnl Useful info (believed to be portable)
- dnl
- LOCALSRCDIR=`/bin/pwd` ; AC_SUBST(LOCALSRCDIR)
--OS=`uname|sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
-+OS=darwin
- AC_SUBST(OS)
-
- dnl
diff --git a/data/patch/_metadata/in.1443.00 b/data/patch/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/patch/_metadata/in.1443.00
diff --git a/data/patch/_metadata/maintainer b/data/patch/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/patch/_metadata/maintainer
+++ b/data/patch/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/patch/_metadata/version b/data/patch/_metadata/version
index fe16b348d..49cdd668e 100644
--- a/data/patch/_metadata/version
+++ b/data/patch/_metadata/version
@@ -1 +1 @@
-2.5.4
+2.7.6
diff --git a/data/patch/make.sh b/data/patch/make.sh
index fb3d34590..f7cd5f21e 100644
--- a/data/patch/make.sh
+++ b/data/patch/make.sh
@@ -1,13 +1,4 @@
pkg:setup
-mv config.sub config.sub_
-cp -af /usr/share/misc/config.sub .
-touch -r config.sub_ config.sub
-rm -f m4/largefile.m4
-touch m4/largefile.m4
-rpl AM_C_ jm_C_ * -R
-rpl jm_AC_ jm_ * -R
-cat m4/* >aclocal.m4
-autoconf
pkg:configure ac_cv_func_setmode=no
make
make install prefix="${PKG_DEST}/usr"
diff --git a/data/patch/patch-2.5.4.tar.gz b/data/patch/patch-2.5.4.tar.gz
deleted file mode 100644
index 07847ebaf..000000000
--- a/data/patch/patch-2.5.4.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/patch/patch-2.7.6.tar.xz b/data/patch/patch-2.7.6.tar.xz
new file mode 100644
index 000000000..ae89c9f72
--- /dev/null
+++ b/data/patch/patch-2.7.6.tar.xz
Binary files differ
diff --git a/data/pcre/_metadata/in.1443.00 b/data/pcre/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/pcre/_metadata/in.1443.00
diff --git a/data/pcre/_metadata/maintainer b/data/pcre/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/pcre/_metadata/maintainer
+++ b/data/pcre/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pcre/_metadata/version b/data/pcre/_metadata/version
index b0aabe1d7..956fa67e3 100644
--- a/data/pcre/_metadata/version
+++ b/data/pcre/_metadata/version
@@ -1 +1 @@
-8.30
+8.42
diff --git a/data/pcre/pcre-8.30.tar.bz2 b/data/pcre/pcre-8.30.tar.bz2
deleted file mode 100644
index 3887a1b9a..000000000
--- a/data/pcre/pcre-8.30.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/pcre/pcre-8.42.tar.bz2 b/data/pcre/pcre-8.42.tar.bz2
new file mode 100644
index 000000000..61bfa3897
--- /dev/null
+++ b/data/pcre/pcre-8.42.tar.bz2
Binary files differ
diff --git a/data/pcre2/_metadata/description b/data/pcre2/_metadata/description
new file mode 100644
index 000000000..a9ba55fae
--- /dev/null
+++ b/data/pcre2/_metadata/description
@@ -0,0 +1 @@
+Perl-compatible regular expressions
diff --git a/data/pcre2/_metadata/in.1443.00 b/data/pcre2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/pcre2/_metadata/in.1443.00
diff --git a/data/pcre2/_metadata/license b/data/pcre2/_metadata/license
new file mode 100644
index 000000000..4baa7d83a
--- /dev/null
+++ b/data/pcre2/_metadata/license
@@ -0,0 +1,68 @@
+PCRE LICENCE
+------------
+
+PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+Release 7 of PCRE is distributed under the terms of the "BSD" licence, as
+specified below. The documentation for PCRE, supplied in the "doc"
+directory, is distributed under the same terms as the software itself.
+
+The basic library functions are written in C and are freestanding. Also
+included in the distribution is a set of C++ wrapper functions.
+
+
+THE BASIC LIBRARY FUNCTIONS
+---------------------------
+
+Written by: Philip Hazel
+Email local part: ph10
+Email domain: cam.ac.uk
+
+University of Cambridge Computing Service,
+Cambridge, England.
+
+Copyright (c) 1997-2007 University of Cambridge
+All rights reserved.
+
+
+THE C++ WRAPPER FUNCTIONS
+-------------------------
+
+Contributed by: Google Inc.
+
+Copyright (c) 2007, Google Inc.
+All rights reserved.
+
+
+THE "BSD" LICENCE
+-----------------
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the name of the University of Cambridge nor the name of Google
+ Inc. nor the names of their contributors may be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+End
diff --git a/data/pcre2/_metadata/maintainer b/data/pcre2/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/pcre2/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pcre2/_metadata/priority b/data/pcre2/_metadata/priority
new file mode 100644
index 000000000..fad9e164a
--- /dev/null
+++ b/data/pcre2/_metadata/priority
@@ -0,0 +1 @@
+required
diff --git a/data/pcre2/_metadata/role b/data/pcre2/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/pcre2/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/pcre2/_metadata/section b/data/pcre2/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/pcre2/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/pcre2/_metadata/tags b/data/pcre2/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/pcre2/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/pcre2/_metadata/version b/data/pcre2/_metadata/version
new file mode 100644
index 000000000..07b5618fa
--- /dev/null
+++ b/data/pcre2/_metadata/version
@@ -0,0 +1 @@
+10.31
diff --git a/data/pcre2/make.sh b/data/pcre2/make.sh
new file mode 100644
index 000000000..fdd2a5cf2
--- /dev/null
+++ b/data/pcre2/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+pkg:configure --enable-jit --enable-utf
+make
+pkg:install
+pkg: ln -s libpcre.1.dylib /usr/lib/libpcre.0.dylib
diff --git a/data/pcre2/pcre2-10.31.tar.bz2 b/data/pcre2/pcre2-10.31.tar.bz2
new file mode 100644
index 000000000..3b4e9aae2
--- /dev/null
+++ b/data/pcre2/pcre2-10.31.tar.bz2
Binary files differ
diff --git a/data/perl/IO.diff b/data/perl/IO.diff
new file mode 100644
index 000000000..55ba21167
--- /dev/null
+++ b/data/perl/IO.diff
@@ -0,0 +1,19 @@
+diff -ur perl-5.28.0/dist/IO/poll.h perl-5.28.0+iPhone/dist/IO/poll.h
+--- perl-5.28.0/dist/IO/poll.h 2018-05-20 22:41:35.000000000 -1000
++++ perl-5.28.0+iPhone/dist/IO/poll.h 2018-08-16 22:30:35.000000000 -1000
+@@ -10,6 +10,8 @@
+ #ifndef POLL_H
+ # define POLL_H
+
++#include <sys/poll.h>
++#if 0
+ #if (defined(HAS_POLL) && defined(I_POLL)) || defined(POLLWRBAND)
+ # include <poll.h>
+ #elif (defined(HAS_POLL) && defined(I_SYS_POLL))
+@@ -58,5 +60,5 @@
+
+ #endif /* I_POLL */
+
++#endif /* 0 */
+ #endif /* POLL_H */
+-
diff --git a/data/perl_/_metadata/description b/data/perl/_metadata/description
index 9852c2138..9852c2138 100644
--- a/data/perl_/_metadata/description
+++ b/data/perl/_metadata/description
diff --git a/data/perl/_metadata/in.1443.00 b/data/perl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/perl/_metadata/in.1443.00
diff --git a/data/perl/_metadata/in.550.58 b/data/perl/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/perl/_metadata/in.550.58
diff --git a/data/perl/_metadata/license b/data/perl/_metadata/license
new file mode 100644
index 000000000..43cd72c3e
--- /dev/null
+++ b/data/perl/_metadata/license
@@ -0,0 +1,248 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/data/perl/_metadata/maintainer b/data/perl/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/perl/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/perl_/_metadata/name b/data/perl/_metadata/name
index 04da5320c..04da5320c 100644
--- a/data/perl_/_metadata/name
+++ b/data/perl/_metadata/name
diff --git a/data/perl/_metadata/priority b/data/perl/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/perl/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/perl/_metadata/role b/data/perl/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/perl/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/perl/_metadata/section b/data/perl/_metadata/section
new file mode 100644
index 000000000..ddc7f1fd8
--- /dev/null
+++ b/data/perl/_metadata/section
@@ -0,0 +1 @@
+Scripting
diff --git a/data/perl/_metadata/tags b/data/perl/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/perl/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/perl/_metadata/version b/data/perl/_metadata/version
new file mode 100644
index 000000000..e8902c36f
--- /dev/null
+++ b/data/perl/_metadata/version
@@ -0,0 +1 @@
+5.28.0
diff --git a/data/perl/locale.diff b/data/perl/locale.diff
new file mode 100644
index 000000000..ea8a41d8f
--- /dev/null
+++ b/data/perl/locale.diff
@@ -0,0 +1,411 @@
+From d36adde059ed1c4f7af210b4f9fc3a7bd2d7d343 Mon Sep 17 00:00:00 2001
+From: Karl Williamson <khw@cpan.org>
+Date: Wed, 23 May 2018 15:32:47 -0600
+Subject: [PATCH] Fix to compile under -DNO_LOCALE
+
+Several problems with this compile option were not caught before 5.28
+was frozen.
+---
+ embed.fnc | 2 ++
+ embed.h | 6 ++---
+ locale.c | 73 ++++++++++++++++++++++++++++++++++++--------------
+ makedef.pl | 6 +++++
+ perl.h | 3 +++
+ proto.h | 6 ++---
+ sv.c | 5 ++++
+ t/lib/warnings/regexec | 20 ++++++++------
+ 8 files changed, 87 insertions(+), 34 deletions(-)
+
+diff --git a/embed.fnc b/embed.fnc
+index 0f06e38024..36f9f974f5 100644
+--- a/embed.fnc
++++ b/embed.fnc
+@@ -2765,9 +2765,11 @@ s |bool |isa_lookup |NN HV *stash|NN const char * const name \
+ #endif
+
+ #if defined(PERL_IN_LOCALE_C)
++# ifdef USE_LOCALE
+ sn |const char*|category_name |const int category
+ s |const char*|switch_category_locale_to_template|const int switch_category|const int template_category|NULLOK const char * template_locale
+ s |void |restore_switched_locale|const int category|NULLOK const char * const original_locale
++# endif
+ # ifdef HAS_NL_LANGINFO
+ sn |const char*|my_nl_langinfo|const nl_item item|bool toggle
+ # else
+diff --git a/embed.h b/embed.h
+index cf3ad9e154..fb66c260b7 100644
+--- a/embed.h
++++ b/embed.h
+@@ -1724,16 +1724,16 @@
+ #define unshare_hek_or_pvn(a,b,c,d) S_unshare_hek_or_pvn(aTHX_ a,b,c,d)
+ # endif
+ # if defined(PERL_IN_LOCALE_C)
+-#define category_name S_category_name
+-#define restore_switched_locale(a,b) S_restore_switched_locale(aTHX_ a,b)
+ #define save_to_buffer S_save_to_buffer
+-#define switch_category_locale_to_template(a,b,c) S_switch_category_locale_to_template(aTHX_ a,b,c)
+ # if defined(USE_LOCALE)
++#define category_name S_category_name
+ #define new_collate(a) S_new_collate(aTHX_ a)
+ #define new_ctype(a) S_new_ctype(aTHX_ a)
+ #define new_numeric(a) S_new_numeric(aTHX_ a)
++#define restore_switched_locale(a,b) S_restore_switched_locale(aTHX_ a,b)
+ #define set_numeric_radix(a) S_set_numeric_radix(aTHX_ a)
+ #define stdize_locale(a) S_stdize_locale(aTHX_ a)
++#define switch_category_locale_to_template(a,b,c) S_switch_category_locale_to_template(aTHX_ a,b,c)
+ # if defined(USE_POSIX_2008_LOCALE)
+ #define emulate_setlocale S_emulate_setlocale
+ # endif
+diff --git a/locale.c b/locale.c
+index 7653340477..f8f77fb3d0 100644
+--- a/locale.c
++++ b/locale.c
+@@ -1264,6 +1264,7 @@ S_locking_setlocale(pTHX_
+ }
+
+ #endif
++#ifdef USE_LOCALE
+
+ STATIC void
+ S_set_numeric_radix(pTHX_ const bool use_locale)
+@@ -1299,6 +1300,10 @@ S_set_numeric_radix(pTHX_ const bool use_locale)
+ }
+
+ # endif
++#else
++
++ PERL_UNUSED_ARG(use_locale);
++
+ #endif /* USE_LOCALE_NUMERIC and can find the radix char */
+
+ }
+@@ -1481,7 +1486,6 @@ S_new_ctype(pTHX_ const char *newctype)
+
+ #ifndef USE_LOCALE_CTYPE
+
+- PERL_ARGS_ASSERT_NEW_CTYPE;
+ PERL_UNUSED_ARG(newctype);
+ PERL_UNUSED_CONTEXT;
+
+@@ -1994,6 +1998,8 @@ S_new_collate(pTHX_ const char *newcoll)
+
+ }
+
++#endif
++
+ #ifdef WIN32
+
+ STATIC char *
+@@ -2139,11 +2145,20 @@ Perl_setlocale(const int category, const char * locale)
+ {
+ /* This wraps POSIX::setlocale() */
+
++#ifdef NO_LOCALE
++
++ PERL_UNUSED_ARG(category);
++ PERL_UNUSED_ARG(locale);
++
++ return "C";
++
++#else
++
+ const char * retval;
+ const char * newlocale;
+ dSAVEDERRNO;
+- DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
+ dTHX;
++ DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
+
+ #ifdef USE_LOCALE_NUMERIC
+
+@@ -2262,6 +2277,8 @@ Perl_setlocale(const int category, const char * locale)
+
+ return retval;
+
++#endif
++
+ }
+
+ PERL_STATIC_INLINE const char *
+@@ -2414,13 +2431,16 @@ S_my_nl_langinfo(const int item, bool toggle)
+ dTHX;
+ const char * retval;
+
++#ifdef USE_LOCALE_NUMERIC
++
+ /* We only need to toggle into the underlying LC_NUMERIC locale for these
+ * two items, and only if not already there */
+ if (toggle && (( item != RADIXCHAR && item != THOUSEP)
+ || PL_numeric_underlying))
+- {
++
++#endif /* No toggling needed if not using LC_NUMERIC */
++
+ toggle = FALSE;
+- }
+
+ #if defined(HAS_NL_LANGINFO) /* nl_langinfo() is available. */
+ # if ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L) \
+@@ -2468,6 +2488,8 @@ S_my_nl_langinfo(const int item, bool toggle)
+ do_free = TRUE;
+ }
+
++# ifdef USE_LOCALE_NUMERIC
++
+ if (toggle) {
+ if (PL_underlying_numeric_obj) {
+ cur = PL_underlying_numeric_obj;
+@@ -2478,6 +2500,8 @@ S_my_nl_langinfo(const int item, bool toggle)
+ }
+ }
+
++# endif
++
+ /* We have to save it to a buffer, because the freelocale() just below
+ * can invalidate the internal one */
+ retval = save_to_buffer(nl_langinfo_l(item, cur),
+@@ -5169,9 +5193,7 @@ Perl_my_strerror(pTHX_ const int errnum)
+ LOCALE_UNLOCK;
+
+ # endif /* End of doesn't have strerror_l */
+-#endif /* End of does have locale messages */
+-
+-#ifdef DEBUGGING
++# ifdef DEBUGGING
+
+ if (DEBUG_Lv_TEST) {
+ PerlIO_printf(Perl_debug_log, "Strerror returned; saving a copy: '");
+@@ -5179,7 +5201,8 @@ Perl_my_strerror(pTHX_ const int errnum)
+ PerlIO_printf(Perl_debug_log, "'\n");
+ }
+
+-#endif
++# endif
++#endif /* End of does have locale messages */
+
+ SAVEFREEPV(errstr);
+ return errstr;
+@@ -5301,10 +5324,17 @@ L<C<Perl_switch_to_global_locale>|perlapi/switch_to_global_locale>.
+ bool
+ Perl_sync_locale()
+ {
++
++#ifndef USE_LOCALE
++
++ return TRUE;
++
++#else
++
+ const char * newlocale;
+ dTHX;
+
+-#ifdef USE_POSIX_2008_LOCALE
++# ifdef USE_POSIX_2008_LOCALE
+
+ bool was_in_global_locale = FALSE;
+ locale_t cur_obj = uselocale((locale_t) 0);
+@@ -5316,11 +5346,11 @@ Perl_sync_locale()
+ * will affect the */
+ if (cur_obj == LC_GLOBAL_LOCALE) {
+
+-# ifdef HAS_QUERY_LOCALE
++# ifdef HAS_QUERY_LOCALE
+
+ do_setlocale_c(LC_ALL, setlocale(LC_ALL, NULL));
+
+-# else
++# else
+
+ unsigned int i;
+
+@@ -5330,17 +5360,17 @@ Perl_sync_locale()
+ do_setlocale_r(categories[i], setlocale(categories[i], NULL));
+ }
+
+-# endif
++# endif
+
+ was_in_global_locale = TRUE;
+ }
+
+-#else
++# else
+
+ bool was_in_global_locale = TRUE;
+
+-#endif
+-#ifdef USE_LOCALE_CTYPE
++# endif
++# ifdef USE_LOCALE_CTYPE
+
+ newlocale = savepv(do_setlocale_c(LC_CTYPE, NULL));
+ DEBUG_Lv(PerlIO_printf(Perl_debug_log,
+@@ -5349,8 +5379,8 @@ Perl_sync_locale()
+ new_ctype(newlocale);
+ Safefree(newlocale);
+
+-#endif /* USE_LOCALE_CTYPE */
+-#ifdef USE_LOCALE_COLLATE
++# endif /* USE_LOCALE_CTYPE */
++# ifdef USE_LOCALE_COLLATE
+
+ newlocale = savepv(do_setlocale_c(LC_COLLATE, NULL));
+ DEBUG_Lv(PerlIO_printf(Perl_debug_log,
+@@ -5359,8 +5389,8 @@ Perl_sync_locale()
+ new_collate(newlocale);
+ Safefree(newlocale);
+
+-#endif
+-#ifdef USE_LOCALE_NUMERIC
++# endif
++# ifdef USE_LOCALE_NUMERIC
+
+ newlocale = savepv(do_setlocale_c(LC_NUMERIC, NULL));
+ DEBUG_Lv(PerlIO_printf(Perl_debug_log,
+@@ -5369,9 +5399,12 @@ Perl_sync_locale()
+ new_numeric(newlocale);
+ Safefree(newlocale);
+
+-#endif /* USE_LOCALE_NUMERIC */
++# endif /* USE_LOCALE_NUMERIC */
+
+ return was_in_global_locale;
++
++#endif
++
+ }
+
+ #if defined(DEBUGGING) && defined(USE_LOCALE)
+diff --git a/makedef.pl b/makedef.pl
+index dbd756d713..661b71de7e 100644
+--- a/makedef.pl
++++ b/makedef.pl
+@@ -574,6 +574,9 @@ unless ($define{USE_LOCALE_COLLATE}) {
+ PL_collxfrm_mult
+ Perl_sv_collxfrm
+ Perl_sv_collxfrm_flags
++ PL_strxfrm_NUL_replacement
++ PL_strxfrm_is_behaved
++ PL_strxfrm_max_cp
+ );
+ }
+
+@@ -583,6 +586,9 @@ unless ($define{USE_LOCALE_NUMERIC}) {
+ PL_numeric_name
+ PL_numeric_radix_sv
+ PL_numeric_standard
++ PL_numeric_underlying
++ PL_numeric_underlying_is_standard
++ PL_underlying_numeric_obj
+ );
+ }
+
+diff --git a/perl.h b/perl.h
+index 3e1f6cd571..d457776f9c 100644
+--- a/perl.h
++++ b/perl.h
+@@ -5657,6 +5657,9 @@ typedef struct am_table_short AMTS;
+ # define IN_LC_COMPILETIME(category) 0
+ # define IN_LC_RUNTIME(category) 0
+ # define IN_LC(category) 0
++# define _CHECK_AND_WARN_PROBLEMATIC_LOCALE
++# define _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(s, send)
++# define _CHECK_AND_OUTPUT_WIDE_LOCALE_CP_MSG(c)
+ #endif
+
+
+diff --git a/proto.h b/proto.h
+index 3e027ab2db..558c33aca6 100644
+--- a/proto.h
++++ b/proto.h
+@@ -4669,8 +4669,6 @@ PERL_CALLCONV SV* Perl_hfree_next_entry(pTHX_ HV *hv, STRLEN *indexp);
+ assert(hv); assert(indexp)
+ #endif
+ #if defined(PERL_IN_LOCALE_C)
+-STATIC const char* S_category_name(const int category);
+-STATIC void S_restore_switched_locale(pTHX_ const int category, const char * const original_locale);
+ #ifndef PERL_NO_INLINE_FUNCTIONS
+ PERL_STATIC_INLINE const char * S_save_to_buffer(const char * string, char **buf, Size_t *buf_size, const Size_t offset)
+ __attribute__warn_unused_result__;
+@@ -4678,17 +4676,19 @@ PERL_STATIC_INLINE const char * S_save_to_buffer(const char * string, char **buf
+ assert(buf_size)
+ #endif
+
+-STATIC const char* S_switch_category_locale_to_template(pTHX_ const int switch_category, const int template_category, const char * template_locale);
+ # if defined(USE_LOCALE)
++STATIC const char* S_category_name(const int category);
+ STATIC void S_new_collate(pTHX_ const char* newcoll);
+ STATIC void S_new_ctype(pTHX_ const char* newctype);
+ #define PERL_ARGS_ASSERT_NEW_CTYPE \
+ assert(newctype)
+ STATIC void S_new_numeric(pTHX_ const char* newnum);
++STATIC void S_restore_switched_locale(pTHX_ const int category, const char * const original_locale);
+ STATIC void S_set_numeric_radix(pTHX_ const bool use_locale);
+ STATIC char* S_stdize_locale(pTHX_ char* locs);
+ #define PERL_ARGS_ASSERT_STDIZE_LOCALE \
+ assert(locs)
++STATIC const char* S_switch_category_locale_to_template(pTHX_ const int switch_category, const int template_category, const char * template_locale);
+ # if defined(USE_POSIX_2008_LOCALE)
+ STATIC const char* S_emulate_setlocale(const int category, const char* locale, unsigned int index, const bool is_index_valid);
+ # endif
+diff --git a/sv.c b/sv.c
+index 07865bb2c1..81223ca30c 100644
+--- a/sv.c
++++ b/sv.c
+@@ -13330,10 +13330,15 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
+
+ SvTAINT(sv);
+
++#ifdef USE_LOCALE_NUMERIC
++
+ if (lc_numeric_set) {
+ RESTORE_LC_NUMERIC(); /* Done outside loop, so don't have to
+ save/restore each iteration. */
+ }
++
++#endif
++
+ }
+
+ /* =========================================================================
+diff --git a/t/lib/warnings/regexec b/t/lib/warnings/regexec
+index 900dd6ee7f..b9e53c9808 100644
+--- a/t/lib/warnings/regexec
++++ b/t/lib/warnings/regexec
+@@ -215,6 +215,10 @@ Use of \b{} or \B{} for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at -
+ Use of \b{} or \B{} for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 17.
+ ########
+ # NAME (?[ ]) in non-UTF-8 locale
++require '../loc_tools.pl';
++unless (locales_enabled()) {
++ print("SKIPPED\n# locales not available\n"),exit;
++}
+ eval { require POSIX; POSIX->import("locale_h") };
+ if ($@) {
+ print("SKIPPED\n# no POSIX\n"),exit;
+@@ -229,14 +233,14 @@ setlocale(&POSIX::LC_CTYPE, "C");
+ ":" =~ /(?[ \: ])/;
+ no warnings 'locale';
+ EXPECT
+-Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 9.
+-Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 9.
+-Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 10.
+-Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 10.
+-Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 11.
+-Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 11.
+-Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 12.
+-Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 12.
++Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 13.
++Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 13.
++Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 14.
++Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 14.
++Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 15.
++Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 15.
++Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 16.
++Use of (?[ ]) for non-UTF-8 locale is wrong. Assuming a UTF-8 locale at - line 16.
+ ########
+ # NAME (?[ ]) in UTF-8 locale
+ require '../loc_tools.pl';
+--
+2.15.1-424-g9478a660812
+
diff --git a/data/perl/make.sh b/data/perl/make.sh
new file mode 100644
index 000000000..53655708e
--- /dev/null
+++ b/data/perl/make.sh
@@ -0,0 +1,10 @@
+pkg:extract
+VERSION="$(cat "${PKG_DATA}/_metadata/version")"
+cp -af perl-cross*/. perl-5*/
+cd perl-5*/
+pkg:patch
+PREFIX="$(cat "${PKG_BASE}/arch/${PKG_ARCH}/${PKG_CFTARG}/prefix")"
+CFLAGS='-DPERL_DARWIN' ./configure --build="$(${PKG_BASE}/util/config.guess)" --target="${PKG_TARG}" --prefix="${PREFIX}" -Duseshrplib -Dusevendorprefix --vendorprefix="${PREFIX}" -Dusethreads \
+ -Dvendorlib="${PREFIX}/share/perl5" -Dvendorarch="${PREFIX}/lib/perl5/${VERSION}"
+make -j16
+make install.perl DESTDIR="${PKG_DEST}"
diff --git a/data/perl/perl-5.28.0.tar.gz b/data/perl/perl-5.28.0.tar.gz
new file mode 100644
index 000000000..0ecbe3d54
--- /dev/null
+++ b/data/perl/perl-5.28.0.tar.gz
Binary files differ
diff --git a/data/perl/perl-cross-1.2.tar.gz b/data/perl/perl-cross-1.2.tar.gz
new file mode 100644
index 000000000..d1a0ebedd
--- /dev/null
+++ b/data/perl/perl-cross-1.2.tar.gz
Binary files differ
diff --git a/data/perl/perl-cross.diff b/data/perl/perl-cross.diff
new file mode 100644
index 000000000..a1a9d57e5
--- /dev/null
+++ b/data/perl/perl-cross.diff
@@ -0,0 +1,324 @@
+diff -uNr perl-cross-1.2/Makefile perl-cross-1.2+iPhone/Makefile
+--- perl-cross-1.2/Makefile 2018-04-16 21:22:36.000000000 -1000
++++ perl-cross-1.2+iPhone/Makefile 2018-08-16 22:14:41.000000000 -1000
+@@ -135,7 +135,7 @@
+ perl$x: LDFLAGS += -Wl,-rpath,$(archlib)/CORE
+ endif
+ endif # or should it be "else"?
+-perl$x: LDFLAGS += -Wl,-E
++#perl$x: LDFLAGS += -Wl,-E
+
+ perl$x: perlmain$o $(LIBPERL) $(static_tgt) static.list ext.libs
+ $(eval extlibs=$(shell cat ext.libs))
+@@ -180,7 +180,7 @@
+
+ ifeq ($(useshrplib),true)
+ $(LIBPERL):
+- $(CC) $(LDDLFLAGS) -o $@ $(filter %$o,$^) $(LIBS)
++ $(CC) $(LDDLFLAGS) -install_name $(archlib)/CORE/$@ -o $@ $(filter %$o,$^) $(LIBS)
+ else
+ $(LIBPERL):
+ $(AR) cru $@ $(filter %$o,$^)
+@@ -211,7 +211,7 @@
+ # The rules below replace make_ext script used in the original
+ # perl build chain. Some host-specific functionality is lost.
+ # Check miniperl_top to see how it works.
+-$(nonxs_tgt) $(disabled_nonxs_tgt): %/pm_to_blib: | %/Makefile
++$(nonxs_tgt) $(disabled_nonxs_tgt): %/pm_to_blib: | %/Makefile dynaloader
+ $(MAKE) -C $(dir $@) all PERL_CORE=1 LIBPERL=$(LIBPERL)
+
+ DynaLoader$o: | ext/DynaLoader/pm_to_blib
+@@ -226,7 +226,7 @@
+ $(static_tgt): %/pm_to_blib: | %/Makefile $(nonxs_tgt)
+ $(MAKE) -C $(dir $@) all PERL_CORE=1 LIBPERL=$(LIBPERL) LINKTYPE=static static
+
+-$(dynamic_tgt) $(disabled_dynamic_tgt): %/pm_to_blib: | %/Makefile
++$(dynamic_tgt) $(disabled_dynamic_tgt): %/pm_to_blib: | %/Makefile dynaloader
+ $(MAKE) -C $(dir $@) all PERL_CORE=1 LIBPERL=$(LIBPERL) LINKTYPE=dynamic
+
+ lib/re.pm: ext/re/re.pm
+@@ -282,7 +282,7 @@
+
+ # mktables does not touch the files unless they need to be rebuilt,
+ # which confuses make.
+-lib/unicore/CombiningClass.pl pod/perluniprops.pod: $(CONFIGPM)
++lib/unicore/CombiningClass.pl pod/perluniprops.pod: $(CONFIGPM) utilities
+ ./miniperl_top lib/unicore/mktables -w -C lib/unicore -P pod -maketest -makelist -p
+
+ # The following rules ensure that modules listed in mkppport.lst get
+diff -uNr perl-cross-1.2/Makefile.config.SH perl-cross-1.2+iPhone/Makefile.config.SH
+--- perl-cross-1.2/Makefile.config.SH 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/Makefile.config.SH 2018-08-16 20:31:19.000000000 -1000
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/bin/bash
+
+ if [ ! -f config.sh ]; then
+ echo "config.sh not found" >&2
+diff -uNr perl-cross-1.2/cnf/config.guess perl-cross-1.2+iPhone/cnf/config.guess
+--- perl-cross-1.2/cnf/config.guess 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/config.guess 2018-08-16 20:31:19.000000000 -1000
+@@ -1,4 +1,4 @@
+-#! /bin/sh
++#! /bin/bash
+ # Attempt to guess a canonical system name.
+ # Copyright 1992-2016 Free Software Foundation, Inc.
+
+@@ -925,7 +925,7 @@
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+- objdump --private-headers /bin/sh | grep -q ld.so.1
++ objdump --private-headers /bin/bash | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+diff -uNr perl-cross-1.2/cnf/config.sub perl-cross-1.2+iPhone/cnf/config.sub
+--- perl-cross-1.2/cnf/config.sub 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/config.sub 2018-08-16 20:31:19.000000000 -1000
+@@ -1,4 +1,4 @@
+-#! /bin/sh
++#! /bin/bash
+ # Configuration validation subroutine script.
+ # Copyright 1992-2016 Free Software Foundation, Inc.
+
+@@ -1407,7 +1407,7 @@
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+- | -onefs* | -tirtos* | -phoenix*)
++ | -onefs* | -tirtos* | -phoenix* | -iphoneos*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+diff -uNr perl-cross-1.2/cnf/configure perl-cross-1.2+iPhone/cnf/configure
+--- perl-cross-1.2/cnf/configure 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/configure 2018-08-16 20:31:19.000000000 -1000
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/bin/bash
+
+ base=${0%/*}; test -z "$base" && base=.
+
+@@ -8,7 +8,7 @@
+ appendlog() { cat "$cfglog" >> "$1"; rm -f "$cfglog"; cfglog="$1"; }
+
+ config="config.sh.$$"
+-echo "#!/bin/sh" > $config
++echo "#!/bin/bash" > $config
+ echo "" >> $config
+ setconfig() { mv "$config" "$1"; config="$1"; }
+ delconfig() { rm "$config"; }
+diff -uNr perl-cross-1.2/cnf/configure__f.sh perl-cross-1.2+iPhone/cnf/configure__f.sh
+--- perl-cross-1.2/cnf/configure__f.sh 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/configure__f.sh 2018-08-16 20:31:19.000000000 -1000
+@@ -254,10 +254,10 @@
+ try_link_libs $libs $*
+ }
+
+-try_readelf() {
+- require 'readelf'
++try_nm() {
++ require 'nm'
+ require '_o'
+- run $readelf $* try$_o
++ run $nm $* try$_o
+ }
+
+ try_objdump() {
+diff -uNr perl-cross-1.2/cnf/configure_func.sh perl-cross-1.2+iPhone/cnf/configure_func.sh
+--- perl-cross-1.2/cnf/configure_func.sh 2018-04-21 11:28:00.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/configure_func.sh 2018-08-16 20:31:19.000000000 -1000
+@@ -7,7 +7,7 @@
+ try_start
+ funcincludes "$3" "$4" "$includes"
+ try_add "int main(void) { $2($3); return 0; }"
+- try_link -O0 -fno-builtin
++ try_link -O0 -fno-builtin -Wno-error=implicit-function-declaration
+ resdef $1 'found' 'missing'
+ fi
+ }
+diff -uNr perl-cross-1.2/cnf/configure_misc.sh perl-cross-1.2+iPhone/cnf/configure_misc.sh
+--- perl-cross-1.2/cnf/configure_misc.sh 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/configure_misc.sh 2018-08-16 20:31:19.000000000 -1000
+@@ -92,7 +92,7 @@
+ define extras ''
+
+ # These are important but we don't test them
+-define startsh '#!/bin/sh'
++define startsh '#!/bin/bash'
+ define spitshell 'cat'
+ define d_Gconvert 'sprintf((b),"%.*g",(n),(x))'
+ define d_modfl_pow32_bug 'undef'
+@@ -287,7 +287,7 @@
+ define runnm false # unused
+ define sed sed # unused
+ define sendmail
+-define sh /bin/sh
++define sh /bin/bash
+ define shar # unused
+ define sleep # unused
+ define smail # unused
+@@ -335,7 +335,7 @@
+ define mallocobj
+ define mallocsrc
+ define mistrustnm
+-define n '-n'
++#define n '-n'
+ define orderlib
+ define perl
+ define perl5
+diff -uNr perl-cross-1.2/cnf/configure_path.sh perl-cross-1.2+iPhone/cnf/configure_path.sh
+--- perl-cross-1.2/cnf/configure_path.sh 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/configure_path.sh 2018-08-16 20:31:19.000000000 -1000
+@@ -108,7 +108,7 @@
+ define privlibexp "$privlib"
+ define binexp "$bin"
+
+-define libpth "/lib /usr/lib /usr/local/lib"
++define libpth ""
+ define glibpth "$libpth"
+ define plibpth
+
+diff -uNr perl-cross-1.2/cnf/configure_tool.sh perl-cross-1.2+iPhone/cnf/configure_tool.sh
+--- perl-cross-1.2/cnf/configure_tool.sh 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/configure_tool.sh 2018-08-16 20:31:19.000000000 -1000
+@@ -2,7 +2,16 @@
+
+ tryprog() {
+ log "trying $1=$2"
+- if command -v "$2" 1>/dev/null 2>/dev/null; then
++ if echo $2 | grep -q xcrun; then
++ if $2 -f $3 1>/dev/null 2>/dev/null; then
++ define "$1" "$2$3"
++ result "$2$3"
++ return 0
++ else
++ return 1
++ fi
++ fi
++ if command -v $2 1>/dev/null 2>/dev/null; then
+ define "$1" "$2"
+ result "$2"
+ return 0
+@@ -75,7 +84,12 @@
+ fi
+
+ # Finally, try $target-gcc
+- test -n "$toolsprefix" && tryprog $1 "$toolsprefix$3" && return 0
++ mstart "trying $toolsprefix$3"
++ if echo $toolsprefix | grep -q xcrun; then
++ test -n "$toolsprefix" && tryprog $1 "$toolsprefix" $3 && return 0
++ else
++ test -n "$toolsprefix" && tryprog $1 "$toolsprefix$3" && return 0
++ fi
+ test -n "$target" && tryprog $1 "$target-$3" && return 0
+ test -n "$targetarch" && tryprog $1 "$targetarch-$3" && return 0
+
+@@ -86,9 +100,8 @@
+ whichprog cc CC gcc || whichprog cc CC cc || die "No C compiler found"
+ #whichprog ld LD ld # while correct, this breaks MM library test
+ whichprog ar AR ar || die "Cannot find ar"
+-whichprog nm NM nm
++whichprog nm NM nm || die "Cannot find nm"
+ whichprog ranlib RANLIB ranlib
+-whichprog readelf READELF readelf || die "Cannot find readelf"
+ whichprog objdump OBJDUMP objdump || die "Cannot find objdump"
+
+ # XXX: this looks wrong, but the usemmldlt code depends on $ld being able
+@@ -154,7 +167,7 @@
+
+ # Used only for modules
+ define cccdlflags '-fPIC -Wno-unused-function'
+-define ccdlflags '-Wl,-E'
++#define ccdlflags '-Wl,-E'
+
+ # Misc flags setup
+ predef lddlflags "-shared" # modules
+@@ -262,6 +275,14 @@
+ define osname "linux"
+ result "Linux"
+ ;;
++ *-darwin*)
++ define osname "darwin"
++ result "Darwin"
++ ;;
++ *-iphoneos*)
++ define osname "iphoneos"
++ result "iPhoneOS"
++ ;;
+ *-bsd*)
+ define osname "bsd"
+ result "BSD"
+diff -uNr perl-cross-1.2/cnf/configure_type.sh perl-cross-1.2+iPhone/cnf/configure_type.sh
+--- perl-cross-1.2/cnf/configure_type.sh 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/configure_type.sh 2018-08-16 20:31:19.000000000 -1000
+@@ -38,13 +38,13 @@
+ return
+ fi
+
+- if not try_readelf -s > try.out 2>>$cfglog; then
++ if not try_nm -g > try.out 2>>$cfglog; then
+ result 'unknown'
+ die "Cannot determine sizeof($2), use -D${1}size="
+ return
+ fi
+
+- result=`grep foo try.out | sed -r -e 's/.*: [0-9]+ +//' -e 's/ .*//'`
++ result=`grep foo try.out | sed -e s/' .*'// -e s/^0*//`
+ if [ -z "$result" -o "$result" -le 0 ]; then
+ result "unknown"
+ die "Cannot determine sizeof($2)"
+diff -uNr perl-cross-1.2/cnf/configure_type_sel.sh perl-cross-1.2+iPhone/cnf/configure_type_sel.sh
+--- perl-cross-1.2/cnf/configure_type_sel.sh 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/configure_type_sel.sh 2018-08-16 20:31:19.000000000 -1000
+@@ -114,7 +114,7 @@
+ fi
+
+ # Most targets use .data but PowerPC has .sdata instead
+- if try_compile && try_objdump -j .data -j .sdata -s; then
++ if try_compile && try_objdump -s ; then
+ bo=`grep '11' try.out | grep '44' | sed -e 's/ .*//' -e 's/[^1-8]//g' -e 's/\([1-8]\)\1/\1/g'`
+ else
+ bo=''
+diff -uNr perl-cross-1.2/cnf/diffs/dedup.px perl-cross-1.2+iPhone/cnf/diffs/dedup.px
+--- perl-cross-1.2/cnf/diffs/dedup.px 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/diffs/dedup.px 2018-08-16 20:31:19.000000000 -1000
+@@ -2,7 +2,7 @@
+
+ @files = (ls("perl*/*.patch"), ls("cperl*/*.patch"));
+
+-print "#!/bin/sh\n\n";
++print "#!/bin/bash\n\n";
+
+ %map = ( );
+
+diff -uNr perl-cross-1.2/cnf/hints/darwin perl-cross-1.2+iPhone/cnf/hints/darwin
+--- perl-cross-1.2/cnf/hints/darwin 1969-12-31 14:00:00.000000000 -1000
++++ perl-cross-1.2+iPhone/cnf/hints/darwin 2018-08-16 20:33:20.000000000 -1000
+@@ -0,0 +1,7 @@
++# Linux syscalls
++d_voidsig='undef'
++d_nanosleep='define'
++d_clock_gettime='define'
++d_clock_getres='define'
++d_clock_nanosleep='undef'
++d_clock='define'
+diff -uNr perl-cross-1.2/configure perl-cross-1.2+iPhone/configure
+--- perl-cross-1.2/configure 2018-04-15 20:40:22.000000000 -1000
++++ perl-cross-1.2+iPhone/configure 2018-08-16 20:31:19.000000000 -1000
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/bin/bash
+
+ earlydie() { echo "$@" >&2; exit 1; }
+
+diff -uNr perl-cross-1.2/miniperl_top perl-cross-1.2+iPhone/miniperl_top
+--- perl-cross-1.2/miniperl_top 2018-04-17 06:07:31.000000000 -1000
++++ perl-cross-1.2+iPhone/miniperl_top 2018-08-16 20:31:19.000000000 -1000
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/bin/bash
+
+ # This script can be used to run Makefile.PL
+ # Note that is relies on $0 to tell where lib/ is; typically
diff --git a/data/perl/perl5.diff b/data/perl/perl5.diff
new file mode 100644
index 000000000..952126d8a
--- /dev/null
+++ b/data/perl/perl5.diff
@@ -0,0 +1,66 @@
+diff --git a/Configure b/Configure
+index bdcfaf17ef..d7d16e9332 100755
+--- a/Configure
++++ b/Configure
+@@ -1,4 +1,4 @@
+-#! /bin/sh
++#! /bin/bash
+ #
+ # If these # comments don't work, trim them. Don't worry about any other
+ # shell scripts, Configure will trim # comments from them for you.
+diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
+index 66a24d7838..7fa2983c20 100644
+--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
++++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
+@@ -32,6 +32,7 @@ BEGIN {
+ $Is{Interix} = $^O eq 'interix';
+ $Is{SunOS4} = $^O eq 'sunos';
+ $Is{Solaris} = $^O eq 'solaris';
++ $Is{Darwin} = $^O eq 'darwin';
+ $Is{SunOS} = $Is{SunOS4} || $Is{Solaris};
+ $Is{BSD} = ($^O =~ /^(?:free|net|open)bsd$/ or
+ grep( $^O eq $_, qw(bsdos interix dragonfly) )
+@@ -1022,7 +1023,7 @@ sub xs_make_dynamic_lib {
+ push(@m," \$(RM_F) \$\@\n");
+
+ my $libs = '$(LDLOADLIBS)';
+- if (($Is{NetBSD} || $Is{Interix} || $Is{Android}) && $Config{'useshrplib'} eq 'true') {
++ if (($Is{NetBSD} || $Is{Interix} || $Is{Android} || $Is{Darwin} || $Is{iPhoneOS}) && $Config{'useshrplib'} eq 'true') {
+ # Use nothing on static perl platforms, and to the flags needed
+ # to link against the shared libperl library on shared perl
+ # platforms. We peek at lddlflags to see if we need -Wl,-R
+@@ -1031,8 +1032,8 @@ sub xs_make_dynamic_lib {
+ $libs .= ' "-L$(PERL_INC)" "-Wl,-R$(INSTALLARCHLIB)/CORE" "-Wl,-R$(PERL_ARCHLIB)/CORE" -lperl';
+ } elsif ($Config{'lddlflags'} =~ /-R/) {
+ $libs .= ' "-L$(PERL_INC)" "-R$(INSTALLARCHLIB)/CORE" "-R$(PERL_ARCHLIB)/CORE" -lperl';
+- } elsif ( $Is{Android} ) {
+- # The Android linker will not recognize symbols from
++ } elsif ( $Is{Android} || $Is{Darwin} || $Is{iPhoneOS} ) {
++ # The Android and darwin linker will not recognize symbols from
+ # libperl unless the module explicitly depends on it.
+ $libs .= ' "-L$(PERL_INC)" -lperl';
+ }
+diff --git a/dist/PathTools/Cwd.xs b/dist/PathTools/Cwd.xs
+index c6c600b6ae..027f266152 100644
+--- a/dist/PathTools/Cwd.xs
++++ b/dist/PathTools/Cwd.xs
+@@ -9,7 +9,6 @@
+ #include "XSUB.h"
+ #define NEED_my_strlcpy
+ #define NEED_my_strlcat
+-#include "ppport.h"
+
+ #ifdef I_UNISTD
+ # include <unistd.h>
+diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL
+index d345e98042..85b9da7ded 100644
+--- a/ext/Errno/Errno_pm.PL
++++ b/ext/Errno/Errno_pm.PL
+@@ -105,6 +105,7 @@ sub default_cpp {
+ and -f $upup_cppstdin
+ and -x $upup_cppstdin);
+ $cppstdin = $upup_cppstdin if $cppstdin_is_wrapper;
++ $cppstdin =~ s/-P//;
+ }
+ return "$cppstdin $Config{cppflags} $Config{cppminus}";
+ }
diff --git a/data/perl_/Policy.sh b/data/perl_/Policy.sh
deleted file mode 100644
index 10a7919a1..000000000
--- a/data/perl_/Policy.sh
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Policy_sh.SH script, which
-# gets its values from config.sh, which is generally produced by
-# running Configure.
-#
-# The idea here is to distill in one place the common site-wide
-# "policy" answers (such as installation directories) that are
-# to be "sticky". If you keep the file Policy.sh around in
-# the same directory as you are building Perl, then Configure will
-# (by default) load up the Policy.sh file just before the
-# platform-specific hints file and rewrite it at the end.
-#
-# The sequence of events is as follows:
-# A: If you are NOT re-using an old config.sh:
-# 1. At start-up, Configure loads up the defaults from the
-# os-specific hints/osname_osvers.sh file and any previous
-# Policy.sh file.
-# 2. At the end, Configure runs Policy_sh.SH, which creates
-# Policy.sh, overwriting a previous Policy.sh if necessary.
-#
-# B: If you are re-using an old config.sh:
-# 1. At start-up, Configure loads up the defaults from config.sh,
-# ignoring any previous Policy.sh file.
-# 2. At the end, Configure runs Policy_sh.SH, which creates
-# Policy.sh, overwriting a previous Policy.sh if necessary.
-#
-# Thus the Policy.sh file gets overwritten each time
-# Configure is run. Any variables you add to Policy.sh will be lost
-# unless you copy Policy.sh somewhere else before running Configure.
-#
-# Allow Configure command-line overrides; usually these won't be
-# needed, but something like -Dprefix=/test/location can be quite
-# useful for testing out new versions.
-
-#Site-specific values:
-
-case "$perladmin" in
-'') perladmin='saurik@carrier.saurik.com' ;;
-esac
-
-# Installation prefixes. Allow a Configure -D override. You
-# may wish to reinstall perl under a different prefix, perhaps
-# in order to test a different configuration.
-# For an explanation of the installation directories, see the
-# INSTALL file section on "Installation Directories".
-case "$prefix" in
-'') prefix='/usr' ;;
-esac
-
-# By default, the next three are the same as $prefix.
-# If the user changes $prefix, and previously $siteprefix was the
-# same as $prefix, then change $siteprefix as well.
-# Use similar logic for $vendorprefix and $installprefix.
-
-case "$siteprefix" in
-'') if test "/usr/local" = "/usr"; then
- siteprefix="$prefix"
- else
- siteprefix='/usr/local'
- fi
- ;;
-esac
-case "$vendorprefix" in
-'') if test "" = "/usr"; then
- vendorprefix="$prefix"
- else
- vendorprefix=''
- fi
- ;;
-esac
-
-# Where installperl puts things.
-case "$installprefix" in
-'') if test "/usr" = "/usr"; then
- installprefix="$prefix"
- else
- installprefix='/usr'
- fi
- ;;
-esac
-
-# Installation directives. Note that each one comes in three flavors.
-# For example, we have privlib, privlibexp, and installprivlib.
-# privlib is for private (to perl) library files.
-# privlibexp is the same, except any '~' the user gave to Configure
-# is expanded to the user's home directory. This is figured
-# out automatically by Configure, so you don't have to include it here.
-# installprivlib is for systems (such as those running AFS) that
-# need to distinguish between the place where things
-# get installed and where they finally will reside. As of 5.005_6x,
-# this too is handled automatically by Configure based on
-# /usr, so it isn't included here either.
-#
-# Note also that there are three broad hierarchies of installation
-# directories, as discussed in the INSTALL file under
-# "Installation Directories":
-#
-# =item Directories for the perl distribution
-#
-# =item Directories for site-specific add-on files
-#
-# =item Directories for vendor-supplied add-on files
-#
-# See Porting/Glossary for the definitions of these names, and see the
-# INSTALL file for further explanation and some examples.
-#
-# In each case, if your previous value was the default, leave it commented
-# out. That way, if you override prefix, all of these will be
-# automatically adjusted.
-#
-# WARNING: Be especially careful about architecture-dependent and
-# version-dependent names, particularly if you reuse this file for
-# different versions of perl.
-
-# bin='/usr/bin'
-# scriptdir='/usr/bin'
-# privlib='/usr/lib/perl5/5.10.0'
-# archlib='/usr/lib/perl5/5.10.0/apple-darwin8'
-# Preserving custom man1dir
-man1dir='/usr/share/man/man1'
-# Preserving custom man3dir
-man3dir='/usr/share/man/man3'
-# Preserving custom html1dir
-html1dir=' '
-# Preserving custom html3dir
-html3dir=' '
-# sitebin='/usr/local/bin'
-# sitescript='/usr/local/bin'
-# Preserving custom sitelib
-sitelib='/usr/local/lib/perl5/site_perl/5.10.0'
-# sitearch='/usr/local/lib/perl5/site_perl/5.10.0/apple-darwin8'
-# Preserving custom siteman1dir
-siteman1dir='/usr/local/share/man/man1'
-# Preserving custom siteman3dir
-siteman3dir='/usr/local/share/man/man3'
-# Preserving custom sitehtml1dir
-sitehtml1dir=''
-# Preserving custom sitehtml3dir
-sitehtml3dir=''
-# vendorbin=''
-# vendorscript=''
-# vendorlib=''
-# vendorarch=''
-# Preserving custom vendorman1dir
-vendorman1dir=' '
-# Preserving custom vendorman3dir
-vendorman3dir=' '
-# Preserving custom vendorhtml1dir
-vendorhtml1dir=' '
-# Preserving custom vendorhtml3dir
-vendorhtml3dir=' '
-
-# Lastly, you may add additional items here. For example, to set the
-# pager to your local favorite value, uncomment the following line in
-# the original Policy_sh.SH file and re-run sh Policy_sh.SH.
-#
-# pager='/usr/bin/less'
-#
-# A full Glossary of all the config.sh variables is in the file
-# Porting/Glossary.
-
diff --git a/data/perl_/_metadata/maintainer b/data/perl_/_metadata/maintainer
deleted file mode 120000
index 0fa66e077..000000000
--- a/data/perl_/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-../../../people/saurik \ No newline at end of file
diff --git a/data/perl_/_metadata/version b/data/perl_/_metadata/version
deleted file mode 100644
index 509b0b618..000000000
--- a/data/perl_/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-5.10.0
diff --git a/data/perl_/config.sh b/data/perl_/config.sh
deleted file mode 100644
index 69051f18d..000000000
--- a/data/perl_/config.sh
+++ /dev/null
@@ -1,1068 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Thu Jul 24 21:34:58 BST 2008
-# Configured by : root
-# Target system : darwin unknown 9.3.1 darwin kernel version 9.3.1: sun jun 15 21:37:01 pdt 2008; root:xnu-1228.6.76~45release_arm_s5l8900x ipod1,1 arm n45ap darwin
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-afsroot='/afs'
-alignbytes='8'
-ansi2knr=''
-aphostname='/bin/hostname'
-api_revision='5'
-api_subversion='0'
-api_version='10'
-api_versionstring='5.10.0'
-ar='ar'
-archlib='/usr/local/lib/perl5/5.10.0/darwin-2level'
-archlibexp='/usr/local/lib/perl5/5.10.0/darwin-2level'
-archname64=''
-archname='darwin-2level'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/usr/local/bin'
-binexp='/usr/local/bin'
-bison='bison'
-byacc='byacc'
-byteorder='ffff'
-c=''
-castflags='1'
-cat='cat'
-cc='gcc'
-cccdlflags=' '
-ccdlflags=' '
-ccflags='-fno-strict-aliasing -pipe -I/usr/local/include'
-ccflags_uselargefiles=''
-ccname='gcc'
-ccsymbols='__DYNAMIC__=1'
-ccversion=''
-cf_by='root'
-cf_email='root@unknown.nonet'
-cf_time='Thu Jul 24 21:34:58 BST 2008'
-chgrp=''
-chmod='chmod'
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols=''
-cppflags='-no-cpp-precomp -fno-strict-aliasing -pipe -I/usr/local/include'
-cpplast='-'
-cppminus='-'
-cpprun='gcc -E'
-cppstdin='gcc -E'
-cppsymbols='__GNUC__=4 __GNUC_MINOR__=2 __LITTLE_ENDIAN__=1 __MACH__=1 __PIC__=2 __STDC__=1 __pic__=2'
-crypt_r_proto='0'
-cryptlib=''
-csh='csh'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='define'
-d_access='define'
-d_accessx='undef'
-d_aintl='undef'
-d_alarm='define'
-d_archlib='define'
-d_asctime_r='undef'
-d_atolf='undef'
-d_atoll='define'
-d_attribute_format='define'
-d_attribute_malloc='define'
-d_attribute_nonnull='define'
-d_attribute_noreturn='define'
-d_attribute_pure='define'
-d_attribute_unused='define'
-d_attribute_warn_unused_result='define'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='define'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_choose_expr='define'
-d_builtin_expect='undef'
-d_bzero='define'
-d_c99_variadic_macros='define'
-d_casti32='define'
-d_castneg='undef'
-d_charvspr='undef'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='define'
-d_cmsghdr_s='define'
-d_const='define'
-d_copysignl='define'
-d_cplusplus='undef'
-d_crypt='define'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='define'
-d_ctermid_r='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime='define'
-d_dir_dd_fd='undef'
-d_dirfd='define'
-d_dirnamlen='define'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48_r='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endgrent_r='undef'
-d_endhent='define'
-d_endhostent_r='undef'
-d_endnent='define'
-d_endnetent_r='undef'
-d_endpent='define'
-d_endprotoent_r='undef'
-d_endpwent='define'
-d_endpwent_r='undef'
-d_endsent='define'
-d_endservent_r='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_faststdio='define'
-d_fchdir='define'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_finite='undef'
-d_finitel='undef'
-d_flexfnam='define'
-d_flock='define'
-d_flockproto='define'
-d_fork='define'
-d_fp_class='undef'
-d_fpathconf='define'
-d_fpclass='undef'
-d_fpclassify='define'
-d_fpclassl='undef'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='define'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='define'
-d_ftime='undef'
-d_futimes='define'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='define'
-d_getgrent='define'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='define'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='define'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='define'
-d_hasmntopt='undef'
-d_htonl='define'
-d_ilogbl='define'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='define'
-d_isascii='define'
-d_isfinite='undef'
-d_isinf='define'
-d_isnan='define'
-d_isnanl='undef'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_libm_lib_version='undef'
-d_link='define'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_malloc_good_size='define'
-d_malloc_size='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='define'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='define'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_modfl_pow32_bug='undef'
-d_modflproto='define'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='undef'
-d_msgctl='define'
-d_msgget='define'
-d_msghdr_s='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nl_langinfo='define'
-d_nv_preserves_uv='define'
-d_nv_zero_is_allbits_zero='define'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_printf_format_null='define'
-d_procselfexe='undef'
-d_pseudofork='undef'
-d_pthread_atfork='define'
-d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='define'
-d_pwclass='define'
-d_pwcomment='undef'
-d_pwexpire='define'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='define'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='define'
-d_readv='define'
-d_recvmsg='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='undef'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_scalbnl='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='define'
-d_semop='define'
-d_sendmsg='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrent_r='undef'
-d_setgrps='define'
-d_sethent='define'
-d_sethostent_r='undef'
-d_setitimer='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setlocale_r='undef'
-d_setnent='define'
-d_setnetent_r='undef'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='define'
-d_setpwent_r='undef'
-d_setregid='define'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='define'
-d_setrgid='define'
-d_setruid='define'
-d_setsent='define'
-d_setservent_r='undef'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_signbit='define'
-d_sigprocmask='define'
-d_sigsetjmp='define'
-d_sitearch='define'
-d_snprintf='define'
-d_sockatmark='define'
-d_sockatmarkproto='define'
-d_socket='define'
-d_socklen_t='define'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sprintf_returns_strlen='define'
-d_sqrtl='define'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_statblks='define'
-d_statfs_f_flags='define'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='define'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='define'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strerror_r='undef'
-d_strftime='define'
-d_strlcat='define'
-d_strlcpy='define'
-d_strtod='define'
-d_strtol='define'
-d_strtold='define'
-d_strtoll='define'
-d_strtoq='define'
-d_strtoul='define'
-d_strtoull='define'
-d_strtouq='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_syscallproto='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_tm_tm_gmtoff='define'
-d_tm_tm_zone='define'
-d_tmpnam_r='undef'
-d_truncate='define'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='define'
-d_ualarm='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='define'
-d_unordered='undef'
-d_unsetenv='define'
-d_usleep='define'
-d_usleepproto='define'
-d_ustat='undef'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vendorscript='undef'
-d_vfork='define'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_vsnprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_writev='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-db_version_major='1'
-db_version_minor='0'
-db_version_patch='0'
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='bundle'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-drand48_r_proto='0'
-dynamic_ext='B Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call Hash/Util I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Hash/Util/FieldHash'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call Hash/Util I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Hash/Util/FieldHash Compress/Zlib Errno IO_Compress_Base IO_Compress_Zlib'
-extras=''
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='GNUmakefile'
-flex=''
-fpossize='8'
-fpostype='fpos_t'
-freetype='void'
-from=':'
-full_ar='/usr/bin/ar'
-full_csh='csh'
-full_sed='/bin/sed'
-gccansipedantic=''
-gccosandvers=''
-gccversion='4.2.1 (Based on Apple Inc. build 5555)'
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"lu"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
-gmake='gmake'
-gmtime_r_proto='0'
-gnulibc_version=''
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-html1dir=' '
-html1direxp=''
-html3dir=' '
-html3direxp=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='long long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='define'
-i_dbm='undef'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_grp='define'
-i_ieeefp='undef'
-i_inttypes='define'
-i_langinfo='define'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='undef'
-i_math='define'
-i_memory='undef'
-i_mntent='undef'
-i_ndbm='define'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='undef'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='define'
-i_sysfilio='define'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='undef'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='undef'
-i_sysselct='define'
-i_syssockio='define'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='undef'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='undef'
-i_unistd='define'
-i_ustat='undef'
-i_utime='define'
-i_values='undef'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs=''
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-initialinstalllocation='/usr/local/bin'
-installarchlib='/usr/local/lib/perl5/5.10.0/darwin-2level'
-installbin='/usr/local/bin'
-installhtml1dir=''
-installhtml3dir=''
-installman1dir=''
-installman3dir=''
-installprefix='/usr/local'
-installprefixexp='/usr/local'
-installprivlib='/usr/local/lib/perl5/5.10.0'
-installscript='/usr/local/bin'
-installsitearch='/usr/local/lib/perl5/site_perl/5.10.0/darwin-2level'
-installsitebin='/usr/local/bin'
-installsitehtml1dir=''
-installsitehtml3dir=''
-installsitelib='/usr/local/lib/perl5/site_perl/5.10.0'
-installsiteman1dir=''
-installsiteman3dir=''
-installsitescript='/usr/local/bin'
-installstyle='lib/perl5'
-installusrbinperl='define'
-installvendorarch=''
-installvendorbin=''
-installvendorhtml1dir=''
-installvendorhtml3dir=''
-installvendorlib=''
-installvendorman1dir=''
-installvendorman3dir=''
-installvendorscript=''
-intsize='4'
-issymlink='test -h'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='B Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize Win32 Win32API/File Win32CORE XS/APItest XS/Typemap attrs re threads threads/shared Hash/Util/FieldHash'
-ksh=''
-ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc'
-lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib'
-ldflags=' -L/usr/local/lib'
-ldflags_uselargefiles=''
-ldlibpthname='DYLD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/usr/lib/libc.dylib'
-libperl='libperl.a'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-ldbm -ldb -ldl -lm -lutil -lc'
-libsdirs=' /usr/lib'
-libsfiles=' libdbm.dylib libdb.dylib libdl.dylib libm.dylib libutil.dylib libc.dylib'
-libsfound=' /usr/lib/libdbm.dylib /usr/lib/libdb.dylib /usr/lib/libdl.dylib /usr/lib/libm.dylib /usr/lib/libutil.dylib /usr/lib/libc.dylib'
-libspath=' /usr/local/lib /lib /usr/lib'
-libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb bsd BSD'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/bin/ln -s'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mad='undef'
-madlyh=''
-madlyobj=''
-madlysrc=''
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir=' '
-man1direxp=''
-man1ext='0'
-man3dir=' '
-man3direxp=''
-man3ext='0'
-mips_type=''
-mistrustnm=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='define'
-mv=''
-myarchname='iPod1,1-darwin'
-mydomain='.nonet'
-myhostname='unknown'
-myuname='darwin unknown 9.3.1 darwin kernel version 9.3.1: sun jun 15 21:37:01 pdt 2008; root:xnu-1228.6.76~45release_arm_s5l8900x ipod1,1 arm n45ap darwin '
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='size_t'
-netdb_host_type='char *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-nm='nm'
-nm_opt='-p'
-nm_so_opt=''
-nonxs_ext='Compress/Zlib Errno IO_Compress_Base IO_Compress_Zlib'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O3'
-orderlib='false'
-osname='darwin'
-osvers='9.3.1'
-otherlibdirs=' '
-package='perl5'
-pager='/usr/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='10'
-path_sep=':'
-perl5=''
-perl=''
-perl_patchlevel=''
-perladmin='root@unknown.nonet'
-perllibs='-ldl -lm -lutil -lc'
-perlpath='/usr/local/bin/perl'
-pg='pg'
-phostname='hostname'
-pidtype='pid_t'
-plibpth=''
-pmake=''
-pr=''
-prefix='/usr/local'
-prefixexp='/usr/local'
-privlib='/usr/local/lib/perl5/5.10.0'
-privlibexp='/usr/local/lib/perl5/5.10.0'
-procselfexe=''
-prototype='define'
-ptrsize='4'
-quadkind='3'
-quadtype='long long'
-randbits='48'
-randfunc='drand48'
-random_r_proto='0'
-randseedtype='long'
-ranlib='ranlib'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='rm'
-rm_try='/bin/rm -f try try a.out .out try.[cho] try..o core core.try* try.core*'
-rmail=''
-run=''
-runnm='true'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"llX"'
-sPRId64='"lld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"lli"'
-sPRIo64='"llo"'
-sPRIu64='"llu"'
-sPRIx64='"llx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/usr/local/bin'
-scriptdirexp='/usr/local/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='32'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2 IOT '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "URG", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "IO", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "INFO", "USR1", "USR2", "IOT", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 6 '
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 6, 0'
-sig_size='33'
-signal_t='void'
-sitearch='/usr/local/lib/perl5/site_perl/5.10.0/darwin-2level'
-sitearchexp='/usr/local/lib/perl5/site_perl/5.10.0/darwin-2level'
-sitebin='/usr/local/bin'
-sitebinexp='/usr/local/bin'
-sitehtml1dir=''
-sitehtml1direxp=''
-sitehtml3dir=''
-sitehtml3direxp=''
-sitelib='/usr/local/lib/perl5/site_perl/5.10.0'
-sitelib_stem='/usr/local/lib/perl5/site_perl'
-sitelibexp='/usr/local/lib/perl5/site_perl/5.10.0'
-siteman1dir=''
-siteman1direxp=''
-siteman3dir=''
-siteman3direxp=''
-siteprefix='/usr/local'
-siteprefixexp='/usr/local'
-sitescript='/usr/local/bin'
-sitescriptexp='/usr/local/bin'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-so='dylib'
-sockethdr=''
-socketlib=''
-socksizetype='socklen_t'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-srand48_r_proto='0'
-srandom_r_proto='0'
-src='.'
-ssizetype='ssize_t'
-startperl='#!/usr/local/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='char'
-stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)'
-stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)'
-stdio_cnt='((fp)->_r)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_p)'
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='0'
-sysman='/usr/man/man1'
-tail=''
-tar=''
-targetarch=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-to=':'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned long long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"lu"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long long'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecrosscompile='undef'
-usedl='define'
-usefaststdio='undef'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='true'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usereentrant='undef'
-userelocatableinc='undef'
-usesfio='false'
-useshrplib='false'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='true'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorhtml1dir=' '
-vendorhtml1direxp=''
-vendorhtml3dir=' '
-vendorhtml3direxp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorman1dir=' '
-vendorman1direxp=''
-vendorman3dir=' '
-vendorman3direxp=''
-vendorprefix=''
-vendorprefixexp=''
-vendorscript=''
-vendorscriptexp=''
-version='5.10.0'
-version_patchlevel_string='version 10 subversion 0'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-yacc='yacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='Configure'
-config_args=''
-config_argc=0
-PERL_REVISION=5
-PERL_VERSION=10
-PERL_SUBVERSION=0
-PERL_API_REVISION=5
-PERL_API_VERSION=10
-PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=
-PERL_CONFIG_SH=true
-# Variables propagated from previous config.sh file.
-LANG='C'
-LC_ALL='C'
-malloc_cflags='ccflags="-DUSE_PERL_SBRK -DPERL_SBRK_VIA_MALLOC $ccflags"'
-perl_revision='5'
-perl_subversion='0'
-perl_version='10'
diff --git a/data/perl_/make.sh b/data/perl_/make.sh
deleted file mode 100644
index d8eeda9b6..000000000
--- a/data/perl_/make.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-pkg:setup
-env $(env | grep '^[^=]*:[^=]*=' | cut -d '=' -f 1 | while read -r line; do echo "--unset=${line}"; done) \
-#sh ./Configure -des -Dusecrosscompile -Dtargethost=network.saurik.com -Dcc="${PKG_TARG}-gcc" -Dprefix=/usr
-cp -a "${PKG_DATA}"/config.sh .
-sh ./Configure -der -Dcc="${PKG_TARG}-gcc" -Dprefix=/usr
-make
-pkg:install
diff --git a/data/perl_/perl-5.10.0.tar.gz b/data/perl_/perl-5.10.0.tar.gz
deleted file mode 100644
index 697c596a1..000000000
--- a/data/perl_/perl-5.10.0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/php/_metadata/in.1443.00 b/data/php/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/php/_metadata/in.1443.00
diff --git a/data/php/_metadata/maintainer b/data/php/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/php/_metadata/maintainer
+++ b/data/php/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pkg-config/_metadata/in.1443.00 b/data/pkg-config/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/pkg-config/_metadata/in.1443.00
diff --git a/data/pkg-config/_metadata/maintainer b/data/pkg-config/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/pkg-config/_metadata/maintainer
+++ b/data/pkg-config/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pkg-config/_metadata/version b/data/pkg-config/_metadata/version
index 39010d220..20f068700 100644
--- a/data/pkg-config/_metadata/version
+++ b/data/pkg-config/_metadata/version
@@ -1 +1 @@
-0.23
+0.29.2
diff --git a/data/pkg-config/make.sh b/data/pkg-config/make.sh
index 592c2643d..c28385bfa 100644
--- a/data/pkg-config/make.sh
+++ b/data/pkg-config/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure --with-installed-glib
-make
+make -j8
pkg:install
diff --git a/data/pkg-config/pkg-config-0.23.tar.gz b/data/pkg-config/pkg-config-0.23.tar.gz
deleted file mode 100644
index cd68cb25b..000000000
--- a/data/pkg-config/pkg-config-0.23.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/pkg-config/pkg-config-0.29.2.tar.gz b/data/pkg-config/pkg-config-0.29.2.tar.gz
new file mode 100644
index 000000000..a82b28f5f
--- /dev/null
+++ b/data/pkg-config/pkg-config-0.29.2.tar.gz
Binary files differ
diff --git a/data/png/_metadata/in.1443.00 b/data/png/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/png/_metadata/in.1443.00
diff --git a/data/png/_metadata/maintainer b/data/png/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/png/_metadata/maintainer
+++ b/data/png/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/png/_metadata/version b/data/png/_metadata/version
index 95a7a34ac..e7b04189b 100644
--- a/data/png/_metadata/version
+++ b/data/png/_metadata/version
@@ -1 +1 @@
-1.2.24
+1.6.35
diff --git a/data/png/libpng-1.2.24.tar.bz2 b/data/png/libpng-1.2.24.tar.bz2
deleted file mode 100644
index 1753e879f..000000000
--- a/data/png/libpng-1.2.24.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/png/libpng-1.6.35.tar.xz b/data/png/libpng-1.6.35.tar.xz
new file mode 100644
index 000000000..3769e9b99
--- /dev/null
+++ b/data/png/libpng-1.6.35.tar.xz
Binary files differ
diff --git a/data/png/make.sh b/data/png/make.sh
index 7dac292bc..d98847616 100644
--- a/data/png/make.sh
+++ b/data/png/make.sh
@@ -1,5 +1,5 @@
pkg:setup
autoconf
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/png/nmedit.diff b/data/png/nmedit.diff
deleted file mode 100644
index 319bbcf93..000000000
--- a/data/png/nmedit.diff
+++ /dev/null
@@ -1,51 +0,0 @@
-diff -r -u libpng-1.2.24/aclocal.m4 libpng-1.2.24+iPhone/aclocal.m4
---- libpng-1.2.24/aclocal.m4 2007-12-14 16:22:58.000000000 +0000
-+++ libpng-1.2.24+iPhone/aclocal.m4 2008-01-12 10:09:51.000000000 +0000
-@@ -3070,11 +3070,11 @@
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- fi
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
-@@ -3082,8 +3082,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
-@@ -5835,8 +5835,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
-@@ -5844,8 +5844,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~${PKG_TARG}-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
diff --git a/data/pngcrush/_metadata/in.1443.00 b/data/pngcrush/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/pngcrush/_metadata/in.1443.00
diff --git a/data/pngcrush/_metadata/maintainer b/data/pngcrush/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/pngcrush/_metadata/maintainer
+++ b/data/pngcrush/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pngcrush/_metadata/version b/data/pngcrush/_metadata/version
index a412349ef..59009bc57 100644
--- a/data/pngcrush/_metadata/version
+++ b/data/pngcrush/_metadata/version
@@ -1 +1 @@
-1.7.10
+1.8.13
diff --git a/data/pngcrush/make.sh b/data/pngcrush/make.sh
index b2d27234d..ed983010a 100644
--- a/data/pngcrush/make.sh
+++ b/data/pngcrush/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-make CC=arm-apple-darwin9-gcc LD=arm-apple-darwin9-gcc
+make CC="${PKG_TARG}-gcc" LD="${PKG_TARG}-gcc" -j8
pkg: mkdir -p /usr/bin
pkg: cp -a pngcrush /usr/bin
diff --git a/data/pngcrush/pngcrush-1.7.10-nolib.tar.bz2 b/data/pngcrush/pngcrush-1.7.10-nolib.tar.bz2
deleted file mode 100644
index 84bf87795..000000000
--- a/data/pngcrush/pngcrush-1.7.10-nolib.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/pngcrush/pngcrush-1.8.13-nolib.tar.xz b/data/pngcrush/pngcrush-1.8.13-nolib.tar.xz
new file mode 100644
index 000000000..b7cc6abb3
--- /dev/null
+++ b/data/pngcrush/pngcrush-1.8.13-nolib.tar.xz
Binary files differ
diff --git a/data/powermanagement/_metadata/in.1443.00 b/data/powermanagement/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/powermanagement/_metadata/in.1443.00
diff --git a/data/powermanagement/_metadata/maintainer b/data/powermanagement/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/powermanagement/_metadata/maintainer
+++ b/data/powermanagement/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/profile.d/_metadata/in.1443.00 b/data/profile.d/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/profile.d/_metadata/in.1443.00
diff --git a/data/profile.d/_metadata/maintainer b/data/profile.d/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/profile.d/_metadata/maintainer
+++ b/data/profile.d/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/profile.d/terminal.sh b/data/profile.d/terminal.sh
index df0ca9546..df0ca9546 100644..100755
--- a/data/profile.d/terminal.sh
+++ b/data/profile.d/terminal.sh
diff --git a/data/psmisc_/_metadata/in.1443.00 b/data/psmisc_/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/psmisc_/_metadata/in.1443.00
diff --git a/data/psmisc_/_metadata/maintainer b/data/psmisc_/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/psmisc_/_metadata/maintainer
+++ b/data/psmisc_/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pstree/_metadata/in.1443.00 b/data/pstree/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/pstree/_metadata/in.1443.00
diff --git a/data/pstree/_metadata/maintainer b/data/pstree/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/pstree/_metadata/maintainer
+++ b/data/pstree/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pthread-stubs/_metadata/in.1443.00 b/data/pthread-stubs/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/pthread-stubs/_metadata/in.1443.00
diff --git a/data/pthread-stubs/_metadata/maintainer b/data/pthread-stubs/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/pthread-stubs/_metadata/maintainer
+++ b/data/pthread-stubs/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pthread-stubs/make.sh b/data/pthread-stubs/make.sh
index 452a4bfd5..ce58b7c91 100644
--- a/data/pthread-stubs/make.sh
+++ b/data/pthread-stubs/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+cp ${PKG_BASE}/config.sub .
pkg:configure
make
pkg:install
diff --git a/data/pwncenter.com/_metadata/description b/data/pwncenter.com/_metadata/description
deleted file mode 100644
index 015adbd30..000000000
--- a/data/pwncenter.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-customer managed, administrator approved
diff --git a/data/pwncenter.com/_metadata/license b/data/pwncenter.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/pwncenter.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/pwncenter.com/_metadata/maintainer b/data/pwncenter.com/_metadata/maintainer
deleted file mode 100644
index 4637168ad..000000000
--- a/data/pwncenter.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Nick Frey <nickfrey123@gmail.com>
diff --git a/data/pwncenter.com/_metadata/name b/data/pwncenter.com/_metadata/name
deleted file mode 100644
index ecbd88550..000000000
--- a/data/pwncenter.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-PwnCenter
diff --git a/data/pwncenter.com/_metadata/replaces b/data/pwncenter.com/_metadata/replaces
deleted file mode 100644
index 83e45cd51..000000000
--- a/data/pwncenter.com/_metadata/replaces
+++ /dev/null
@@ -1 +0,0 @@
-zanekills.com, steffwiz.webs.com
diff --git a/data/pwncenter.com/_metadata/role b/data/pwncenter.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/pwncenter.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/pwncenter.com/_metadata/section b/data/pwncenter.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/pwncenter.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/pwncenter.com/_metadata/tags b/data/pwncenter.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/pwncenter.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/pwncenter.com/_metadata/version b/data/pwncenter.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/pwncenter.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/pwncenter.com/apt.pwncenter.com.png b/data/pwncenter.com/apt.pwncenter.com.png
deleted file mode 100644
index 96ca04296..000000000
--- a/data/pwncenter.com/apt.pwncenter.com.png
+++ /dev/null
Binary files differ
diff --git a/data/pwncenter.com/make.sh b/data/pwncenter.com/make.sh
deleted file mode 100644
index b5b1003e4..000000000
--- a/data/pwncenter.com/make.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/pwncenter.com.list /etc/apt/sources.list.d
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/apt.pwncenter.com.png /Applications/Cydia.app/Sources/apt.pwncenter.com.png
-pkg: touch /etc/apt/sources.list.d/steffwiz.com.list
diff --git a/data/pwncenter.com/pwncenter.com.list b/data/pwncenter.com/pwncenter.com.list
deleted file mode 100644
index ec89ab81f..000000000
--- a/data/pwncenter.com/pwncenter.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://apt.pwncenter.com/ ./
diff --git a/data/pyobjc/_metadata/maintainer b/data/pyobjc/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/pyobjc/_metadata/maintainer
+++ b/data/pyobjc/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pyobjc/make.sh b/data/pyobjc/make.sh
index 9ccc2f182..e5c86705c 100644
--- a/data/pyobjc/make.sh
+++ b/data/pyobjc/make.sh
@@ -3,16 +3,15 @@ shopt -s extglob
pkg:setup
cd pyobjc-core
-$("${PKG_TARG}-gcc" -print-prog-name=cc1obj) -print-objc-runtime-info <(echo) >Modules/objc/objc-runtime-info.h
-
find Modules/objc/!(test) -name '*.m' -print0 | while read -d $'\0' -r m; do
o=${m%.m}.o
mi=${m%.m}.mi
- ${PKG_TARG}-gcc -O2 -I"$(PKG_DEST_ libxml2)"/usr/include/libxml2 -I"$(PKG_DEST_ python)"/usr/include/python2.5 -ObjC -c -o "$o" "$m" -IModules/objc -fno-common || exit 1
+ echo ${PKG_TARG}-gcc -framework Foundation -O2 -I"$(PKG_DEST_ libxml2)"/usr/include/libxml2 -I"$(PKG_DEST_ python)"/usr/include/python2.7 -ObjC -c -o "$o" "$m" -IModules/objc -fno-common || exit 1
+ ${PKG_TARG}-gcc -framework Foundation -O2 -I"$(PKG_DEST_ libxml2)"/usr/include/libxml2 -I"$(PKG_DEST_ python)"/usr/include/python2.7 -ObjC -c -o "$o" "$m" -IModules/objc -fno-common || exit 1
done || exit 1
-${PKG_TARG}-gcc -O2 -dynamiclib -lpython2.5 -o _objc.dylib Modules/objc/*.o -lobjc -lffi -lxml2 -framework CoreFoundation -framework Foundation
+${PKG_TARG}-gcc -O2 -dynamiclib -lpython2.7 -o _objc.dylib Modules/objc/*.o -lobjc -lffi -lxml2 -framework CoreFoundation -framework Foundation
-pkg: mkdir -p /usr/lib/python2.5/lib-dynload
-pkg: cp -a _objc.dylib /usr/lib/python2.5/lib-dynload
-pkg: cp -a Lib/objc /usr/lib/python2.5
+pkg: mkdir -p /usr/lib/python2.7/lib-dynload
+pkg: cp -a _objc.dylib /usr/lib/python2.7/lib-dynload
+pkg: cp -a Lib/objc /usr/lib/python2.7
diff --git a/data/pyobjc/mprotect.diff b/data/pyobjc/mprotect.diff
deleted file mode 100644
index a5d78785d..000000000
--- a/data/pyobjc/mprotect.diff
+++ /dev/null
@@ -1,177 +0,0 @@
-diff -ru pyobjc-1946/pyobjc-core/Modules/objc/closure_pool.m pyobjc-1946+iPhone/pyobjc-core/Modules/objc/closure_pool.m
---- pyobjc-1946/pyobjc-core/Modules/objc/closure_pool.m 2007-11-25 10:33:57.000000000 +0000
-+++ pyobjc-1946+iPhone/pyobjc-core/Modules/objc/closure_pool.m 2008-07-24 00:32:15.000000000 +0000
-@@ -1,62 +1,22 @@
--/*
-- * A simple allocator for closure. This assumes that most closures are kept
-- * alive forever and we therefore don't have to return storage to the OS.
-- */
- #include "pyobjc.h"
--
- #include <sys/mman.h>
-+#include <mach/vm_param.h>
-
--typedef struct freelist {
-- struct freelist* next;
--} freelist;
--
--static freelist* closure_freelist = NULL;
--
--
--static freelist* allocate_block(void)
--{
--
-- /* Allocate ffi_closure in groups of 10 VM pages */
--#define BLOCKSIZE ((PAGE_SIZE*10)/sizeof(ffi_closure*))
--
-- freelist* newblock = mmap(NULL, BLOCKSIZE * sizeof(ffi_closure),
-- PROT_READ|PROT_WRITE|PROT_EXEC,
-- MAP_PRIVATE|MAP_ANON, -1, 0);
-- size_t i;
--
-- if (newblock == (void*)-1) {
-- PyErr_NoMemory();
-- return NULL;
-- }
-- for (i = 0; i < BLOCKSIZE-1; i++) {
-- ((freelist*)(((ffi_closure*)newblock)+i))->next =
-- (freelist*)(((ffi_closure*)newblock)+(i+1));
-- }
--
-- ((freelist*)(((ffi_closure*)newblock)+(BLOCKSIZE-1)))->next = NULL;
-- return newblock;
--}
--
--
-+ffi_closure *PyObjC_malloc_closure(void) {
-+ ffi_closure *closure = (ffi_closure *) mmap(
-+ NULL, sizeof(ffi_closure),
-+ PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE,
-+ -1, 0
-+ );
-+
-+ if (closure == MAP_FAILED) {
-+ PyErr_NoMemory();
-+ return NULL;
-+ }
-
--ffi_closure*
--PyObjC_malloc_closure(void)
--{
-- if (closure_freelist == NULL) {
-- closure_freelist = allocate_block();
-- if (closure_freelist == NULL) {
-- return NULL;
-- }
-- }
-- ffi_closure* result = (ffi_closure*)closure_freelist;
-- closure_freelist = closure_freelist->next;
-- return result;
-+ return closure;
- }
-
--int
--PyObjC_free_closure(ffi_closure* cl)
--{
-- ((freelist*)cl)->next = closure_freelist;
-- closure_freelist = (freelist*)cl;
-- return 0;
-+int PyObjC_free_closure(ffi_closure *closure) {
-+ return munmap(closure, sizeof(ffi_closure));
- }
-diff -ru pyobjc-1946/pyobjc-core/Modules/objc/libffi_support.m pyobjc-1946+iPhone/pyobjc-core/Modules/objc/libffi_support.m
---- pyobjc-1946/pyobjc-core/Modules/objc/libffi_support.m 2008-07-24 00:37:30.000000000 +0000
-+++ pyobjc-1946+iPhone/pyobjc-core/Modules/objc/libffi_support.m 2008-07-24 00:37:09.000000000 +0000
-@@ -17,6 +17,7 @@
-
- #import <Foundation/NSHost.h>
- #import <CoreFoundation/CoreFoundation.h>
-+#include <sys/mman.h>
-
- #ifdef __ppc64__
- extern bool ffi64_stret_needs_ptr(const ffi_type* inType,
-@@ -3724,11 +3725,20 @@
- rv = ffi_prep_closure(cl, cif, func, userdata);
- if (rv != FFI_OK) {
- PyObjCFFI_FreeCIF(cif);
-+ PyObjC_free_closure(cl);
- PyErr_Format(PyExc_RuntimeError,
- "Cannot create FFI closure: %d", rv);
- return NULL;
- }
-
-+ if (mprotect(cl, sizeof(*cl), PROT_READ | PROT_EXEC) == -1) {
-+ PyObjCFFI_FreeCIF(cif);
-+ PyObjC_free_closure(cl);
-+ PyErr_Format(PyExc_RuntimeError,
-+ "Cannot create FFI closure: %d", errno);
-+ return NULL;
-+ }
-+
- return (IMP)cl;
- }
-
-diff -ru pyobjc-1946/pyobjc-core/Modules/objc/opaque-pointer.m pyobjc-1946+iPhone/pyobjc-core/Modules/objc/opaque-pointer.m
---- pyobjc-1946/pyobjc-core/Modules/objc/opaque-pointer.m 2007-11-23 13:29:54.000000000 +0000
-+++ pyobjc-1946+iPhone/pyobjc-core/Modules/objc/opaque-pointer.m 2008-07-24 00:35:43.000000000 +0000
-@@ -2,6 +2,7 @@
- * Generic support for opaque pointer types, such as NSZone*
- */
- #include "pyobjc.h"
-+#include <sys/mman.h>
-
- typedef struct {
- PyObject_HEAD
-@@ -247,6 +248,13 @@
- "Cannot create FFI closure: %d", rv);
- goto error_cleanup;
- }
-+
-+ if (mprotect(cl, sizeof(*cl), PROT_READ | PROT_EXEC) == -1) {
-+ PyErr_Format(PyExc_RuntimeError,
-+ "Cannot create FFI closure: %d", errno);
-+ goto error_cleanup;
-+ }
-+
- to_c = (PyObjCPointerWrapper_FromPythonFunc)cl;
- cl = NULL;
-
-@@ -261,6 +271,13 @@
- "Cannot create FFI closure: %d", rv);
- goto error_cleanup;
- }
-+
-+ if (mprotect(cl, sizeof(*cl), PROT_READ | PROT_EXEC) == -1) {
-+ PyErr_Format(PyExc_RuntimeError,
-+ "Cannot create FFI closure: %d", errno);
-+ goto error_cleanup;
-+ }
-+
- from_c = (PyObjCPointerWrapper_ToPythonFunc)cl;
- cl = NULL;
-
-diff -ru pyobjc-1946/pyobjc-core/Modules/objc/struct-wrapper.m pyobjc-1946+iPhone/pyobjc-core/Modules/objc/struct-wrapper.m
---- pyobjc-1946/pyobjc-core/Modules/objc/struct-wrapper.m 2007-11-23 13:29:54.000000000 +0000
-+++ pyobjc-1946+iPhone/pyobjc-core/Modules/objc/struct-wrapper.m 2008-07-24 00:35:46.000000000 +0000
-@@ -12,6 +12,7 @@
- * is only usefull for PyObjC.
- */
- #include "pyobjc.h"
-+#include <sys/mman.h>
-
- /*
- * First some helpers: easy access to the actual fields
-@@ -603,6 +604,13 @@
- return NULL;
- }
-
-+ if (mprotect(cl, sizeof(*cl), PROT_READ | PROT_EXEC) == -1) {
-+ PyObjC_free_closure(cl);
-+ PyErr_Format(PyExc_RuntimeError,
-+ "Cannot create FFI closure: %d", errno);
-+ return NULL;
-+ }
-+
- return (initproc)cl;
- }
-
diff --git a/data/pyobjc/pyobjc-1946.tgz b/data/pyobjc/pyobjc-1946.tgz
deleted file mode 100644
index 428bd92fd..000000000
--- a/data/pyobjc/pyobjc-1946.tgz
+++ /dev/null
Binary files differ
diff --git a/data/python/Python-2.5.1.tgz b/data/python/Python-2.5.1.tgz
deleted file mode 100644
index 2ce439a2e..000000000
--- a/data/python/Python-2.5.1.tgz
+++ /dev/null
Binary files differ
diff --git a/data/python/Python-2.7.15.tar.xz b/data/python/Python-2.7.15.tar.xz
new file mode 100644
index 000000000..cf32934b7
--- /dev/null
+++ b/data/python/Python-2.7.15.tar.xz
Binary files differ
diff --git a/data/python/_metadata/in.1443.00 b/data/python/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/python/_metadata/in.1443.00
diff --git a/data/python/_metadata/libssl1.0.dep b/data/python/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/python/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/python/_metadata/maintainer b/data/python/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/python/_metadata/maintainer
+++ b/data/python/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/python/_metadata/ncurses.dep b/data/python/_metadata/ncurses.dep
new file mode 120000
index 000000000..a395fad08
--- /dev/null
+++ b/data/python/_metadata/ncurses.dep
@@ -0,0 +1 @@
+../../ncurses \ No newline at end of file
diff --git a/data/python/_metadata/openssl.dep b/data/python/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/python/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/python/_metadata/version b/data/python/_metadata/version
index 73462a5a1..f24054fd3 100644
--- a/data/python/_metadata/version
+++ b/data/python/_metadata/version
@@ -1 +1 @@
-2.5.1
+2.7.15
diff --git a/data/python/bundle.diff b/data/python/bundle.diff
deleted file mode 100644
index c7f38b986..000000000
--- a/data/python/bundle.diff
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -r -u Python-2.5.1/configure.in Python-2.5.1+iPhone/configure.in
---- Python-2.5.1/configure.in 2007-03-12 10:50:51.000000000 +0000
-+++ Python-2.5.1+iPhone/configure.in 2008-01-09 11:45:20.000000000 +0000
-@@ -1484,7 +1484,12 @@
- if test "${enable_universalsdk}"; then
- LDFLAGS="-arch i386 -arch ppc -isysroot ${UNIVERSALSDK} ${LDFLAGS}"
- fi
-- LDSHARED='$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup'
-+ LDSHARED='$(CC) $(LDFLAGS) -undefined dynamic_lookup'
-+ if test "$enable_framework" ; then
-+ LDSHARED="$LDSHARED -bundle"
-+ else
-+ LDSHARED="$LDSHARED -dynamiclib"
-+ fi
- BLDSHARED="$LDSHARED"
- else
- LDSHARED='$(CC) $(LDFLAGS) -bundle'
-diff -r -u Python-2.5.1/Makefile.pre.in Python-2.5.1+iPhone/Makefile.pre.in
---- Python-2.5.1/Makefile.pre.in 2006-12-08 20:46:13.000000000 +0000
-+++ Python-2.5.1+iPhone/Makefile.pre.in 2008-01-09 12:00:36.000000000 +0000
-@@ -362,9 +362,9 @@
- $(AR) cr $@ $(MODOBJS)
- $(RANLIB) $@
-
--libpython$(VERSION).so: $(LIBRARY_OBJS)
-+libpython$(VERSION).dylib: $(LIBRARY_OBJS)
- if test $(INSTSONAME) != $(LDLIBRARY); then \
-- $(LDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \
-+ $(LDSHARED) -Wl,-dylib_install_name,$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \
- $(LN) -f $(INSTSONAME) $@; \
- else\
- $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \
diff --git a/data/python/clean.diff b/data/python/clean.diff
deleted file mode 100644
index 36d5ba186..000000000
--- a/data/python/clean.diff
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -ru BuildPython-2.5.1/Makefile.pre.in Python-2.5.1/Makefile.pre.in
---- BuildPython-2.5.1/Makefile.pre.in 2006-12-08 20:46:13.000000000 +0000
-+++ Python-2.5.1/Makefile.pre.in 2008-01-09 07:58:21.000000000 +0000
-@@ -1015,7 +1015,6 @@
-
- clean: pycremoval
- find . -name '*.o' -exec rm -f {} ';'
-- find . -name '*.s[ol]' -exec rm -f {} ';'
- find $(srcdir)/build -name 'fficonfig.h' -exec rm -f {} ';' || true
- find $(srcdir)/build -name 'fficonfig.py' -exec rm -f {} ';' || true
-
diff --git a/data/python/common.diff b/data/python/common.diff
deleted file mode 100644
index 64f9eb4f2..000000000
--- a/data/python/common.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -r -u Python-2.5.1/configure.in Python-2.5.1+iPhone/configure.in
---- Python-2.5.1/configure.in 2007-03-12 10:50:51.000000000 +0000
-+++ Python-2.5.1+iPhone/configure.in 2008-01-09 12:10:16.000000000 +0000
-@@ -814,7 +816,7 @@
- ;;
- # is there any other compiler on Darwin besides gcc?
- Darwin*)
-- BASECFLAGS="$BASECFLAGS -Wno-long-double -no-cpp-precomp -mno-fused-madd"
-+ BASECFLAGS="$BASECFLAGS -no-cpp-precomp -fno-common"
- if test "${enable_universalsdk}"; then
- BASECFLAGS="-arch ppc -arch i386 -isysroot ${UNIVERSALSDK} ${BASECFLAGS}"
- fi
diff --git a/data/python/cross.diff b/data/python/cross.diff
deleted file mode 100644
index 68c84d061..000000000
--- a/data/python/cross.diff
+++ /dev/null
@@ -1,443 +0,0 @@
-diff -ru Python-2.5.1/configure.in Python-2.5.1+iPhone/configure.in
---- Python-2.5.1/configure.in 2007-03-12 10:50:51.000000000 +0000
-+++ Python-2.5.1+iPhone/configure.in 2008-04-29 10:53:21.000000000 +0000
-@@ -165,7 +165,7 @@
- AC_MSG_CHECKING(MACHDEP)
- if test -z "$MACHDEP"
- then
-- ac_sys_system=`uname -s`
-+ ac_sys_system=Darwin
- if test "$ac_sys_system" = "AIX" -o "$ac_sys_system" = "Monterey64" \
- -o "$ac_sys_system" = "UnixWare" -o "$ac_sys_system" = "OpenUNIX"; then
- ac_sys_release=`uname -v`
-@@ -247,6 +247,8 @@
-
- esac
-
-+define_xopen_source=no
-+
- if test $define_xopen_source = yes
- then
- # On Solaris w/ g++ it appears that _XOPEN_SOURCE has to be
-@@ -1420,7 +1422,6 @@
- echo '+ Continuing in 10 seconds to let you to ponder. +'
- echo '+ +'
- echo '====================================================================='
-- sleep 10
- fi
- AC_MSG_RESULT($SO)
- AC_DEFINE_UNQUOTED(SHLIB_EXT, "$SO", [Define this to be extension of shared libraries (including the dot!).])
-@@ -1473,12 +1474,11 @@
- Darwin/*)
- # Use -undefined dynamic_lookup whenever possible (10.3 and later).
- # This allows an extension to be used in any Python
-- cur_target=`sw_vers -productVersion | sed 's/\(10\.[[0-9]]*\).*/\1/'`
-+ cur_target=10.5
- if test ${cur_target} '>' 10.2; then
- cur_target=10.3
- fi
- CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
-- EXPORT_MACOSX_DEPLOYMENT_TARGET=''
- if test ${MACOSX_DEPLOYMENT_TARGET-${cur_target}} '>' 10.2
- then
- if test "${enable_universalsdk}"; then
-@@ -3367,41 +3368,6 @@
- AC_MSG_RESULT(no)
- fi
-
--AC_MSG_CHECKING(for %zd printf() format support)
--AC_TRY_RUN([#include <stdio.h>
--#include <stddef.h>
--#include <string.h>
--
--int main()
--{
-- char buffer[256];
--
--#ifdef HAVE_SSIZE_T
--typedef ssize_t Py_ssize_t;
--#elif SIZEOF_VOID_P == SIZEOF_LONG
--typedef long Py_ssize_t;
--#else
--typedef int Py_ssize_t;
--#endif
--
-- if(sprintf(buffer, "%zd", (size_t)123) < 0)
-- return 1;
--
-- if (strcmp(buffer, "123"))
-- return 1;
--
-- if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0)
-- return 1;
--
-- if (strcmp(buffer, "-123"))
-- return 1;
--
-- return 0;
--}],
--[AC_MSG_RESULT(yes)
-- AC_DEFINE(PY_FORMAT_SIZE_T, "z", [Define to printf format modifier for Py_ssize_t])],
-- AC_MSG_RESULT(no))
--
- AC_CHECK_TYPE(socklen_t,,
- AC_DEFINE(socklen_t,int,
- Define to `int' if <sys/socket.h> does not define.),[
-diff -ru Python-2.5.1/Include/pyport.h Python-2.5.1+iPhone/Include/pyport.h
---- Python-2.5.1/Include/pyport.h 2006-10-02 15:24:01.000000000 +0000
-+++ Python-2.5.1+iPhone/Include/pyport.h 2008-04-29 10:53:21.000000000 +0000
-@@ -731,7 +731,7 @@
- * rather than waiting for integer multiplication to trigger bogus
- * overflows.
- */
--#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
-+//#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
- #endif
-
- #ifdef __cplusplus
-diff -ru Python-2.5.1/Modules/_ctypes/cfield.c Python-2.5.1+iPhone/Modules/_ctypes/cfield.c
---- Python-2.5.1/Modules/_ctypes/cfield.c 2007-03-22 19:43:37.000000000 +0000
-+++ Python-2.5.1+iPhone/Modules/_ctypes/cfield.c 2008-04-29 10:53:21.000000000 +0000
-@@ -1642,7 +1642,7 @@
- struct _ffi_type **elements;
- } ffi_type;
- */
--
-+#if 0
- /* align and size are bogus for void, but they must not be zero */
- ffi_type ffi_type_void = { 1, 1, FFI_TYPE_VOID };
-
-@@ -1664,5 +1664,5 @@
- /* ffi_type ffi_type_longdouble */
-
- ffi_type ffi_type_pointer = { sizeof(void *), VOID_P_ALIGN, FFI_TYPE_POINTER };
--
-+#endif
- /*---------------- EOF ----------------*/
-diff -ru Python-2.5.1/Modules/getaddrinfo.c Python-2.5.1+iPhone/Modules/getaddrinfo.c
---- Python-2.5.1/Modules/getaddrinfo.c 2003-08-17 21:28:39.000000000 +0000
-+++ Python-2.5.1+iPhone/Modules/getaddrinfo.c 2008-04-29 10:53:21.000000000 +0000
-@@ -38,7 +38,7 @@
- * - PF_UNSPEC case would be handled in getipnodebyname() with the AI_ALL flag.
- */
-
--#if 0
-+#if 1
- #include <sys/types.h>
- #include <sys/param.h>
- #include <sys/sysctl.h>
-diff -ru Python-2.5.1/Modules/mmapmodule.c Python-2.5.1+iPhone/Modules/mmapmodule.c
---- Python-2.5.1/Modules/mmapmodule.c 2006-08-22 13:57:07.000000000 +0000
-+++ Python-2.5.1+iPhone/Modules/mmapmodule.c 2008-04-29 10:53:21.000000000 +0000
-@@ -36,6 +36,7 @@
- #ifdef UNIX
- #include <sys/mman.h>
- #include <sys/stat.h>
-+#include <sys/fcntl.h>
-
- #if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE)
- static int
-diff -ru Python-2.5.1/setup.py Python-2.5.1+iPhone/setup.py
---- Python-2.5.1/setup.py 2007-02-14 12:53:41.000000000 +0000
-+++ Python-2.5.1+iPhone/setup.py 2008-04-29 11:05:35.000000000 +0000
-@@ -206,46 +206,16 @@
- ext_filename = os.path.join(
- self.build_lib,
- self.get_ext_filename(self.get_ext_fullname(ext.name)))
-- try:
-- imp.load_dynamic(ext.name, ext_filename)
-- except ImportError, why:
-- self.announce('*** WARNING: renaming "%s" since importing it'
-- ' failed: %s' % (ext.name, why), level=3)
-- assert not self.inplace
-- basename, tail = os.path.splitext(ext_filename)
-- newname = basename + "_failed" + tail
-- if os.path.exists(newname):
-- os.remove(newname)
-- os.rename(ext_filename, newname)
--
-- # XXX -- This relies on a Vile HACK in
-- # distutils.command.build_ext.build_extension(). The
-- # _built_objects attribute is stored there strictly for
-- # use here.
-- # If there is a failure, _built_objects may not be there,
-- # so catch the AttributeError and move on.
-- try:
-- for filename in self._built_objects:
-- os.remove(filename)
-- except AttributeError:
-- self.announce('unable to remove files (ignored)')
-- except:
-- exc_type, why, tb = sys.exc_info()
-- self.announce('*** WARNING: importing extension "%s" '
-- 'failed with %s: %s' % (ext.name, exc_type, why),
-- level=3)
-
- def get_platform(self):
-- # Get value of sys.platform
-- for platform in ['cygwin', 'beos', 'darwin', 'atheos', 'osf1']:
-- if sys.platform.startswith(platform):
-- return platform
-- return sys.platform
-+ return 'darwin'
-
- def detect_modules(self):
-+ sysroot = os.getenv('PKG_ROOT')
-+
- # Ensure that /usr/local is always used
-- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
-- add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
-+ add_dir_to_list(self.compiler.library_dirs, sysroot + '/usr/local/lib')
-+ add_dir_to_list(self.compiler.include_dirs, sysroot + '/usr/local/include')
-
- # Add paths specified in the environment variables LDFLAGS and
- # CPPFLAGS for header and library files.
-@@ -294,10 +264,10 @@
- # if a file is found in one of those directories, it can
- # be assumed that no additional -I,-L directives are needed.
- lib_dirs = self.compiler.library_dirs + [
-- '/lib64', '/usr/lib64',
-- '/lib', '/usr/lib',
-+ sysroot + '/lib64', sysroot + '/usr/lib64',
-+ sysroot + '/lib', sysroot + '/usr/lib',
- ]
-- inc_dirs = self.compiler.include_dirs + ['/usr/include']
-+ inc_dirs = self.compiler.include_dirs + [sysroot + '/usr/include']
- exts = []
-
- config_h = sysconfig.get_config_h_filename()
-@@ -309,9 +279,11 @@
- # Check for AtheOS which has libraries in non-standard locations
- if platform == 'atheos':
- lib_dirs += ['/system/libs', '/atheos/autolnk/lib']
-- lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep)
- inc_dirs += ['/system/include', '/atheos/autolnk/include']
-- inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep)
-+
-+ lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep)
-+ inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep)
-+ inc_dirs += os.getenv('CPATH', '').split(os.pathsep)
-
- # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb)
- if platform in ['osf1', 'unixware7', 'openunix8']:
-@@ -476,7 +447,7 @@
- if find_file('readline/rlconf.h', inc_dirs, []) is None:
- do_readline = False
- if do_readline:
-- if sys.platform == 'darwin':
-+ if self.get_platform() == 'darwin':
- # In every directory on the search path search for a dynamic
- # library and then a static library, instead of first looking
- # for dynamic libraries on the entiry path.
-@@ -496,11 +467,11 @@
- elif self.compiler.find_library_file(lib_dirs, 'curses'):
- readline_libs.append('curses')
- elif self.compiler.find_library_file(lib_dirs +
-- ['/usr/lib/termcap'],
-+ [sysroot + '/usr/lib/termcap'],
- 'termcap'):
- readline_libs.append('termcap')
- exts.append( Extension('readline', ['readline.c'],
-- library_dirs=['/usr/lib/termcap'],
-+ library_dirs=[sysroot + '/usr/lib/termcap'],
- extra_link_args=readline_extra_link_args,
- libraries=readline_libs) )
- if platform not in ['mac']:
-@@ -520,20 +491,20 @@
- depends = ['socketmodule.h']) )
- # Detect SSL support for the socket module (via _ssl)
- search_for_ssl_incs_in = [
-- '/usr/local/ssl/include',
-- '/usr/contrib/ssl/include/'
-+ sysroot + '/usr/local/ssl/include',
-+ sysroot + '/usr/contrib/ssl/include/'
- ]
- ssl_incs = find_file('openssl/ssl.h', inc_dirs,
- search_for_ssl_incs_in
- )
- if ssl_incs is not None:
- krb5_h = find_file('krb5.h', inc_dirs,
-- ['/usr/kerberos/include'])
-+ [sysroot + '/usr/kerberos/include'])
- if krb5_h:
- ssl_incs += krb5_h
- ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
-- ['/usr/local/ssl/lib',
-- '/usr/contrib/ssl/lib/'
-+ [sysroot + '/usr/local/ssl/lib',
-+ sysroot + '/usr/contrib/ssl/lib/'
- ] )
-
- if (ssl_incs is not None and
-@@ -612,31 +583,25 @@
-
- # construct a list of paths to look for the header file in on
- # top of the normal inc_dirs.
-- db_inc_paths = [
-- '/usr/include/db4',
-- '/usr/local/include/db4',
-- '/opt/sfw/include/db4',
-- '/sw/include/db4',
-- '/usr/include/db3',
-- '/usr/local/include/db3',
-- '/opt/sfw/include/db3',
-- '/sw/include/db3',
-- ]
-+ db_inc_paths = []
-+ # major number specific paths
-+ for x in (3,4):
-+ db_inc_paths += map(lambda i: i + '/db%d' % x, inc_dirs)
- # 4.x minor number specific paths
- for x in (0,1,2,3,4,5):
-- db_inc_paths.append('/usr/include/db4%d' % x)
-- db_inc_paths.append('/usr/include/db4.%d' % x)
-- db_inc_paths.append('/usr/local/BerkeleyDB.4.%d/include' % x)
-- db_inc_paths.append('/usr/local/include/db4%d' % x)
-- db_inc_paths.append('/pkg/db-4.%d/include' % x)
-- db_inc_paths.append('/opt/db-4.%d/include' % x)
-+ db_inc_paths += map(lambda i: i + '/db%d' % x, inc_dirs)
-+ db_inc_paths += map(lambda i: i + '/db.%d' % x, inc_dirs)
-+ db_inc_paths.append(sysroot + '/usr/local/BerkeleyDB.4.%d/include' % x)
-+ db_inc_paths.append(sysroot + '/usr/local/include/db4%d' % x)
-+ db_inc_paths.append(sysroot + '/pkg/db-4.%d/include' % x)
-+ db_inc_paths.append(sysroot + '/opt/db-4.%d/include' % x)
- # 3.x minor number specific paths
- for x in (3,):
-- db_inc_paths.append('/usr/include/db3%d' % x)
-- db_inc_paths.append('/usr/local/BerkeleyDB.3.%d/include' % x)
-- db_inc_paths.append('/usr/local/include/db3%d' % x)
-- db_inc_paths.append('/pkg/db-3.%d/include' % x)
-- db_inc_paths.append('/opt/db-3.%d/include' % x)
-+ db_inc_paths += map(lambda i: i + '/db3%d' % x, inc_dirs)
-+ db_inc_paths.append(sysroot + '/usr/local/BerkeleyDB.3.%d/include' % x)
-+ db_inc_paths.append(sysroot + '/usr/local/include/db3%d' % x)
-+ db_inc_paths.append(sysroot + '/pkg/db-3.%d/include' % x)
-+ db_inc_paths.append(sysroot + '/opt/db-3.%d/include' % x)
-
- # Add some common subdirectories for Sleepycat DB to the list,
- # based on the standard include directories. This way DB3/4 gets
-@@ -746,13 +711,9 @@
- # We hunt for #define SQLITE_VERSION "n.n.n"
- # We need to find >= sqlite version 3.0.8
- sqlite_incdir = sqlite_libdir = None
-- sqlite_inc_paths = [ '/usr/include',
-- '/usr/include/sqlite',
-- '/usr/include/sqlite3',
-- '/usr/local/include',
-- '/usr/local/include/sqlite',
-- '/usr/local/include/sqlite3',
-- ]
-+ sqlite_inc_paths = inc_dirs
-+ sqlite_inc_paths += map(lambda i: i + '/sqlite', inc_dirs)
-+ sqlite_inc_paths += map(lambda i: i + '/sqlite3', inc_dirs)
- MIN_SQLITE_VERSION_NUMBER = (3, 0, 8)
- MIN_SQLITE_VERSION = ".".join([str(x)
- for x in MIN_SQLITE_VERSION_NUMBER])
-@@ -806,13 +767,13 @@
- '_sqlite/util.c', ]
-
- sqlite_defines = []
-- if sys.platform != "win32":
-+ if self.get_platform() != "win32":
- sqlite_defines.append(('MODULE_NAME', '"sqlite3"'))
- else:
- sqlite_defines.append(('MODULE_NAME', '\\"sqlite3\\"'))
-
-
-- if sys.platform == 'darwin':
-+ if self.get_platform() == 'darwin':
- # In every directory on the search path search for a dynamic
- # library and then a static library, instead of first looking
- # for dynamic libraries on the entiry path.
-@@ -837,7 +798,7 @@
- # accidentally building this module with a later version of the
- # underlying db library. May BSD-ish Unixes incorporate db 1.85
- # symbols into libc and place the include file in /usr/include.
-- f = "/usr/include/db.h"
-+ f = sysroot + "/usr/include/db.h"
- if os.path.exists(f):
- data = open(f).read()
- m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data)
-@@ -962,7 +923,7 @@
- break
- if version >= version_req:
- if (self.compiler.find_library_file(lib_dirs, 'z')):
-- if sys.platform == "darwin":
-+ if self.get_platform() == "darwin":
- zlib_extra_link_args = ('-Wl,-search_paths_first',)
- else:
- zlib_extra_link_args = ()
-@@ -972,7 +933,7 @@
-
- # Gustavo Niemeyer's bz2 module.
- if (self.compiler.find_library_file(lib_dirs, 'bz2')):
-- if sys.platform == "darwin":
-+ if self.get_platform() == "darwin":
- bz2_extra_link_args = ('-Wl,-search_paths_first',)
- else:
- bz2_extra_link_args = ()
-@@ -1175,7 +1136,7 @@
- # For 8.4a2, the X11 headers are not included. Rather than include a
- # complicated search, this is a hard-coded path. It could bail out
- # if X11 libs are not found...
-- include_dirs.append('/usr/X11R6/include')
-+ include_dirs.append(sysroot + '/usr/X11R6/include')
- frameworks = ['-framework', 'Tcl', '-framework', 'Tk']
-
- ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
-@@ -1217,7 +1178,7 @@
- # Check for the include files on Debian and {Free,Open}BSD, where
- # they're put in /usr/include/{tcl,tk}X.Y
- dotversion = version
-- if '.' not in dotversion and "bsd" in sys.platform.lower():
-+ if '.' not in dotversion and "bsd" in self.get_platform().lower():
- # OpenBSD and FreeBSD use Tcl/Tk library names like libtcl83.a,
- # but the include subdirs are named like .../include/tcl8.3.
- dotversion = dotversion[:-1] + '.' + dotversion[-1]
-@@ -1244,19 +1205,19 @@
-
- # Check for various platform-specific directories
- if platform == 'sunos5':
-- include_dirs.append('/usr/openwin/include')
-- added_lib_dirs.append('/usr/openwin/lib')
-- elif os.path.exists('/usr/X11R6/include'):
-- include_dirs.append('/usr/X11R6/include')
-- added_lib_dirs.append('/usr/X11R6/lib64')
-- added_lib_dirs.append('/usr/X11R6/lib')
-- elif os.path.exists('/usr/X11R5/include'):
-- include_dirs.append('/usr/X11R5/include')
-- added_lib_dirs.append('/usr/X11R5/lib')
-+ include_dirs.append(sysroot + '/usr/openwin/include')
-+ added_lib_dirs.append(sysroot + '/usr/openwin/lib')
-+ elif os.path.exists(sysroot + '/usr/X11R6/include'):
-+ include_dirs.append(sysroot + '/usr/X11R6/include')
-+ added_lib_dirs.append(sysroot + '/usr/X11R6/lib64')
-+ added_lib_dirs.append(sysroot + '/usr/X11R6/lib')
-+ elif os.path.exists(sysroot + '/usr/X11R5/include'):
-+ include_dirs.append(sysroot + '/usr/X11R5/include')
-+ added_lib_dirs.append(sysroot + '/usr/X11R5/lib')
- else:
- # Assume default location for X11
-- include_dirs.append('/usr/X11/include')
-- added_lib_dirs.append('/usr/X11/lib')
-+ include_dirs.append(sysroot + '/usr/X11/include')
-+ added_lib_dirs.append(sysroot + '/usr/X11/lib')
-
- # If Cygwin, then verify that X is installed before proceeding
- if platform == 'cygwin':
-@@ -1363,13 +1324,13 @@
- '_ctypes/malloc_closure.c']
- depends = ['_ctypes/ctypes.h']
-
-- if sys.platform == 'darwin':
-+ if self.get_platform() == 'darwin':
- sources.append('_ctypes/darwin/dlfcn_simple.c')
- include_dirs.append('_ctypes/darwin')
- # XXX Is this still needed?
- ## extra_link_args.extend(['-read_only_relocs', 'warning'])
-
-- elif sys.platform == 'sunos5':
-+ elif self.get_platform() == 'sunos5':
- # XXX This shouldn't be necessary; it appears that some
- # of the assembler code is non-PIC (i.e. it has relocations
- # when it shouldn't. The proper fix would be to rewrite
diff --git a/data/python/distutils.diff b/data/python/distutils.diff
deleted file mode 100644
index dacfdee33..000000000
--- a/data/python/distutils.diff
+++ /dev/null
@@ -1,115 +0,0 @@
-diff -ru BuildPython-2.5.1/Lib/distutils/util.py Python-2.5.1/Lib/distutils/util.py
---- BuildPython-2.5.1/Lib/distutils/util.py 2006-05-23 21:54:23.000000000 +0000
-+++ Python-2.5.1/Lib/distutils/util.py 2008-01-09 07:47:28.000000000 +0000
-@@ -13,110 +13,7 @@
- from distutils import log
-
- def get_platform ():
-- """Return a string that identifies the current platform. This is used
-- mainly to distinguish platform-specific build directories and
-- platform-specific built distributions. Typically includes the OS name
-- and version and the architecture (as supplied by 'os.uname()'),
-- although the exact information included depends on the OS; eg. for IRIX
-- the architecture isn't particularly important (IRIX only runs on SGI
-- hardware), but for Linux the kernel version isn't particularly
-- important.
--
-- Examples of returned values:
-- linux-i586
-- linux-alpha (?)
-- solaris-2.6-sun4u
-- irix-5.3
-- irix64-6.2
--
-- For non-POSIX platforms, currently just returns 'sys.platform'.
-- """
-- if os.name != "posix" or not hasattr(os, 'uname'):
-- # XXX what about the architecture? NT is Intel or Alpha,
-- # Mac OS is M68k or PPC, etc.
-- return sys.platform
--
-- # Try to distinguish various flavours of Unix
--
-- (osname, host, release, version, machine) = os.uname()
--
-- # Convert the OS name to lowercase, remove '/' characters
-- # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh")
-- osname = string.lower(osname)
-- osname = string.replace(osname, '/', '')
-- machine = string.replace(machine, ' ', '_')
-- machine = string.replace(machine, '/', '-')
--
-- if osname[:5] == "linux":
-- # At least on Linux/Intel, 'machine' is the processor --
-- # i386, etc.
-- # XXX what about Alpha, SPARC, etc?
-- return "%s-%s" % (osname, machine)
-- elif osname[:5] == "sunos":
-- if release[0] >= "5": # SunOS 5 == Solaris 2
-- osname = "solaris"
-- release = "%d.%s" % (int(release[0]) - 3, release[2:])
-- # fall through to standard osname-release-machine representation
-- elif osname[:4] == "irix": # could be "irix64"!
-- return "%s-%s" % (osname, release)
-- elif osname[:3] == "aix":
-- return "%s-%s.%s" % (osname, version, release)
-- elif osname[:6] == "cygwin":
-- osname = "cygwin"
-- rel_re = re.compile (r'[\d.]+')
-- m = rel_re.match(release)
-- if m:
-- release = m.group()
-- elif osname[:6] == "darwin":
-- #
-- # For our purposes, we'll assume that the system version from
-- # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set
-- # to. This makes the compatibility story a bit more sane because the
-- # machine is going to compile and link as if it were
-- # MACOSX_DEPLOYMENT_TARGET.
-- from distutils.sysconfig import get_config_vars
-- cfgvars = get_config_vars()
--
-- macver = os.environ.get('MACOSX_DEPLOYMENT_TARGET')
-- if not macver:
-- macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET')
--
-- if not macver:
-- # Get the system version. Reading this plist is a documented
-- # way to get the system version (see the documentation for
-- # the Gestalt Manager)
-- try:
-- f = open('/System/Library/CoreServices/SystemVersion.plist')
-- except IOError:
-- # We're on a plain darwin box, fall back to the default
-- # behaviour.
-- pass
-- else:
-- m = re.search(
-- r'<key>ProductUserVisibleVersion</key>\s*' +
-- r'<string>(.*?)</string>', f.read())
-- f.close()
-- if m is not None:
-- macver = '.'.join(m.group(1).split('.')[:2])
-- # else: fall back to the default behaviour
--
-- if macver:
-- from distutils.sysconfig import get_config_vars
-- release = macver
-- osname = "macosx"
--
--
-- if (release + '.') < '10.4.' and \
-- get_config_vars().get('UNIVERSALSDK', '').strip():
-- # The universal build will build fat binaries, but not on
-- # systems before 10.4
-- machine = 'fat'
--
-- elif machine in ('PowerPC', 'Power_Macintosh'):
-- # Pick a sane name for the PPC architecture.
-- machine = 'ppc'
--
-- return "%s-%s-%s" % (osname, release, machine)
-+ return 'darwin-10.5-arm'
-
- # get_platform ()
-
diff --git a/data/python/dylib.diff b/data/python/dylib.diff
deleted file mode 100644
index 979925d4a..000000000
--- a/data/python/dylib.diff
+++ /dev/null
@@ -1,33 +0,0 @@
-diff -ru Python-2.5.1/Python/dynload_shlib.c Python-2.5.1+iPhone/Python/dynload_shlib.c
---- Python-2.5.1/Python/dynload_shlib.c 2006-01-04 01:30:17.000000000 +0000
-+++ Python-2.5.1+iPhone/Python/dynload_shlib.c 2008-01-09 10:04:49.000000000 +0000
-@@ -40,11 +40,14 @@
- {".pyd", "rb", C_EXTENSION},
- {".dll", "rb", C_EXTENSION},
- #else
--#ifdef __VMS
-+#if defined(__VMS)
- {".exe", "rb", C_EXTENSION},
- {".EXE", "rb", C_EXTENSION},
- {"module.exe", "rb", C_EXTENSION},
- {"MODULE.EXE", "rb", C_EXTENSION},
-+#elif defined(__APPLE__)
-+ {".dylib", "rb", C_EXTENSION},
-+ {"module.dylib", "rb", C_EXTENSION},
- #else
- {".so", "rb", C_EXTENSION},
- {"module.so", "rb", C_EXTENSION},
-diff -ru Python-2.5.1/configure.in Python-2.5.1+iPhone/configure.in
---- Python-2.5.1/configure.in 2007-03-12 10:50:51.000000000 +0000
-+++ Python-2.5.1+iPhone/configure.in 2008-01-09 10:27:52.000000000 +0000
-@@ -636,8 +638,8 @@
- RUNSHARED=LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}
- INSTSONAME="$LDLIBRARY".$SOVERSION
- ;;
-- Linux*|GNU*|NetBSD*|FreeBSD*|DragonFly*)
-- LDLIBRARY='libpython$(VERSION).so'
-+ Linux*|GNU*|NetBSD*|FreeBSD*|DragonFly*|Darwin*)
-+ LDLIBRARY='libpython$(VERSION)'"${SO-so}"
- BLDLIBRARY='-L. -lpython$(VERSION)'
- RUNSHARED=LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}
- case $ac_sys_system in
diff --git a/data/python/environ.diff b/data/python/environ.diff
deleted file mode 100644
index 9e011b5dc..000000000
--- a/data/python/environ.diff
+++ /dev/null
@@ -1,35 +0,0 @@
-diff -ru Python-2.5.1/Misc/setuid-prog.c Python-2.5.1+iPhone/Misc/setuid-prog.c
---- Python-2.5.1/Misc/setuid-prog.c 1998-09-10 20:18:09.000000000 +0000
-+++ Python-2.5.1+iPhone/Misc/setuid-prog.c 2008-04-13 02:50:37.000000000 +0000
-@@ -102,9 +102,8 @@
- clean_environ(void)
- {
- char **p;
-- extern char **environ;
-
-- for (p = environ; *p; p++) {
-+ for (p = _NSGetEnviron(); *p; p++) {
- if (strncmp(*p, "LD_", 3) == 0)
- **p = 'X';
- else if (strncmp(*p, "_RLD", 4) == 0)
-diff -ru Python-2.5.1/Modules/posixmodule.c Python-2.5.1+iPhone/Modules/posixmodule.c
---- Python-2.5.1/Modules/posixmodule.c 2007-04-04 18:30:56.000000000 +0000
-+++ Python-2.5.1+iPhone/Modules/posixmodule.c 2008-04-29 10:50:27.000000000 +0000
-@@ -339,7 +339,7 @@
- #endif
-
- /* Return a dictionary corresponding to the POSIX environment table */
--#ifdef WITH_NEXT_FRAMEWORK
-+#if 1
- /* On Darwin/MacOSX a shared library or framework has no access to
- ** environ directly, we must obtain it with _NSGetEnviron().
- */
-@@ -357,7 +357,7 @@
- d = PyDict_New();
- if (d == NULL)
- return NULL;
--#ifdef WITH_NEXT_FRAMEWORK
-+#if 1
- if (environ == NULL)
- environ = *_NSGetEnviron();
- #endif
diff --git a/data/python/framework.diff b/data/python/framework.diff
deleted file mode 100644
index 2593a590c..000000000
--- a/data/python/framework.diff
+++ /dev/null
@@ -1,28 +0,0 @@
-diff -r -u Python-2.5.1/Mac/Makefile.in Python-2.5.1+iPhone/Mac/Makefile.in
---- Python-2.5.1/Mac/Makefile.in 2006-06-11 20:23:29.000000000 +0000
-+++ Python-2.5.1+iPhone/Mac/Makefile.in 2008-01-09 11:32:54.000000000 +0000
-@@ -223,7 +223,6 @@
- done
-
-
-- $(RUNSHARED) $(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST)
- $(RUNSHARED) $(BUILDPYTHON) -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
- $(RUNSHARED) $(BUILDPYTHON) -O -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
-
-diff -r -u Python-2.5.1/Makefile.pre.in Python-2.5.1+iPhone/Makefile.pre.in
---- Python-2.5.1/Makefile.pre.in 2006-12-08 20:46:13.000000000 +0000
-+++ Python-2.5.1+iPhone/Makefile.pre.in 2008-01-09 11:34:00.000000000 +0000
-@@ -391,8 +391,11 @@
- -compatibility_version $(VERSION) \
- -current_version $(VERSION); \
- else \
-- libtool -o $(LDLIBRARY) -dynamic $(OTHER_LIBTOOL_OPT) $(LIBRARY) \
-- @LIBTOOL_CRUFT@ ;\
-+ $(CC) -o $(LDLIBRARY) -arch_only arm -dynamiclib \
-+ -all_load $(LIBRARY) -Wl,-single_module \
-+ -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK) \
-+ -compatibility_version $(VERSION) \
-+ -current_version $(VERSION); \
- fi
- $(INSTALL) -d -m $(DIRMODE) \
- $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/English.lproj
diff --git a/data/python/gestalt.diff b/data/python/gestalt.diff
deleted file mode 100644
index febf9c32b..000000000
--- a/data/python/gestalt.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru Python-2.5.1/Lib/ctypes/__init__.py Python-2.5.1+iPhone/Lib/ctypes/__init__.py
---- Python-2.5.1/Lib/ctypes/__init__.py 2007-03-09 20:21:16.000000000 +0000
-+++ Python-2.5.1+iPhone/Lib/ctypes/__init__.py 2008-03-08 20:35:54.000000000 +0000
-@@ -24,19 +24,13 @@
-
- DEFAULT_MODE = RTLD_LOCAL
- if _os.name == "posix" and _sys.platform == "darwin":
-- import gestalt
-+ import platform
-
-- # gestalt.gestalt("sysv") returns the version number of the
-- # currently active system file as BCD.
-- # On OS X 10.4.6 -> 0x1046
-- # On OS X 10.2.8 -> 0x1028
-- # See also http://www.rgaros.nl/gestalt/
-- #
- # On OS X 10.3, we use RTLD_GLOBAL as default mode
- # because RTLD_LOCAL does not work at least on some
- # libraries.
-
-- if gestalt.gestalt("sysv") < 0x1040:
-+ if int(platform.release().split('.')[0]) < 8:
- DEFAULT_MODE = RTLD_GLOBAL
-
- from _ctypes import FUNCFLAG_CDECL as _FUNCFLAG_CDECL, \
diff --git a/data/python/longlong.diff b/data/python/longlong.diff
deleted file mode 100644
index 82e339059..000000000
--- a/data/python/longlong.diff
+++ /dev/null
@@ -1,28 +0,0 @@
-diff -ru Python-2.5.1/Modules/_ctypes/cfield.c Python-2.5.1+iPhone/Modules/_ctypes/cfield.c
---- Python-2.5.1/Modules/_ctypes/cfield.c 2007-03-22 19:43:37.000000000 +0000
-+++ Python-2.5.1+iPhone/Modules/_ctypes/cfield.c 2008-03-08 21:04:51.000000000 +0000
-@@ -1538,20 +1538,13 @@
- { 'H', H_set, H_get, &ffi_type_ushort, H_set_sw, H_get_sw},
- { 'i', i_set, i_get, &ffi_type_sint, i_set_sw, i_get_sw},
- { 'I', I_set, I_get, &ffi_type_uint, I_set_sw, I_get_sw},
--/* XXX Hm, sizeof(int) == sizeof(long) doesn't hold on every platform */
--/* As soon as we can get rid of the type codes, this is no longer a problem */
--#if SIZEOF_LONG == 4
-- { 'l', l_set, l_get, &ffi_type_sint, l_set_sw, l_get_sw},
-- { 'L', L_set, L_get, &ffi_type_uint, L_set_sw, L_get_sw},
--#elif SIZEOF_LONG == 8
- { 'l', l_set, l_get, &ffi_type_slong, l_set_sw, l_get_sw},
- { 'L', L_set, L_get, &ffi_type_ulong, L_set_sw, L_get_sw},
--#else
--# error
--#endif
-+/* XXX Hm, sizeof(long) == sizeof(int64_t) doesn't hold on every platform */
-+/* As soon as we can get rid of the type codes, this is no longer a problem */
- #ifdef HAVE_LONG_LONG
-- { 'q', q_set, q_get, &ffi_type_slong, q_set_sw, q_get_sw},
-- { 'Q', Q_set, Q_get, &ffi_type_ulong, Q_set_sw, Q_get_sw},
-+ { 'q', q_set, q_get, &ffi_type_sint64, q_set_sw, q_get_sw},
-+ { 'Q', Q_set, Q_get, &ffi_type_uint64, Q_set_sw, Q_get_sw},
- #endif
- { 'P', P_set, P_get, &ffi_type_pointer},
- { 'z', z_set, z_get, &ffi_type_pointer},
diff --git a/data/python/make.sh b/data/python/make.sh
index 059937971..e4ba3d1d9 100644
--- a/data/python/make.sh
+++ b/data/python/make.sh
@@ -1,23 +1,8 @@
pkg:extract
cd *
-./configure --prefix=/usr
-make
-cp -a Parser/pgen{,_}
-cp -a python{,_}
-sleep 10
+./configure
+make -j8
pkg:patch
-autoconf
-SO=.dylib CXX=${PKG_TARG}-g++ pkg:configure --enable-shared --with-system-ffi --with-signal-module --disable-toolbox-glue
-make clean
-rm libpython2.5.a
-#make Include/graminit.h Python/graminit.c CC=gcc BASECFLAGS=
-#cp -a Parser/pgen pgen-host
-#make clean
-make python AR=${PKG_TARG}-ar
-sleep 2
-touch python_
-make BUILDPYTHON=python_
-pkg:install BUILDPYTHON=python_
-pkg: rm -f /usr/bin/python{,2.5}
-pkg: cp -fa python /usr/bin/python2.5
-pkg: ln -s python2.5 /usr/bin/python
+CFLAGS='-Wno-format' pkg:configure --disable-ipv6 ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no ac_cv_have_long_long_format=yes --disable-toolbox-glue
+make -j8
+pkg:install
diff --git a/data/python/modules.diff b/data/python/modules.diff
deleted file mode 100644
index f5b9985b6..000000000
--- a/data/python/modules.diff
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -ru Python-2.5.1/setup.py Python-2.5.1+iPhone/setup.py
---- Python-2.5.1/setup.py 2007-02-14 12:53:41.000000000 +0000
-+++ Python-2.5.1+iPhone/setup.py 2008-01-09 12:43:58.000000000 +0000
-@@ -460,8 +430,7 @@
- # 64-bit platforms.
- exts.append( Extension('audioop', ['audioop.c']) )
-
-- # Disabled on 64-bit platforms
-- if sys.maxint != 9223372036854775807L:
-+ if True:
- # Operations on images
- exts.append( Extension('imageop', ['imageop.c']) )
- # Read SGI RGB image files (but coded portably)
-@@ -606,7 +577,7 @@
- # a release. Most open source OSes come with one or more
- # versions of BerkeleyDB already installed.
-
-- max_db_ver = (4, 5)
-+ max_db_ver = (4, 6)
- min_db_ver = (3, 3)
- db_setup_debug = False # verbose debug prints from this script?
-
-@@ -1025,8 +996,7 @@
- exts.append(Extension('_codecs_' + loc,
- ['cjkcodecs/_codecs_%s.c' % loc]))
-
-- # Dynamic loading module
-- if sys.maxint == 0x7fffffff:
-+ if True:
- # This requires sizeof(int) == sizeof(long) == sizeof(char*)
- dl_inc = find_file('dlfcn.h', [], inc_dirs)
- if (dl_inc is not None) and (platform not in ['atheos']):
diff --git a/data/python/starpython.diff b/data/python/starpython.diff
new file mode 100644
index 000000000..8750b00e7
--- /dev/null
+++ b/data/python/starpython.diff
@@ -0,0 +1,152 @@
+Only in Python-2.7.15+iPhone/Lib: _scproxy.py
+diff -ur Python-2.7.15/Makefile.pre.in Python-2.7.15+iPhone/Makefile.pre.in
+--- Python-2.7.15/Makefile.pre.in 2018-04-29 12:47:33.000000000 -1000
++++ Python-2.7.15+iPhone/Makefile.pre.in 2018-09-04 18:39:57.000000000 -1000
+@@ -1131,28 +1131,30 @@
+ $(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \
+ $(DESTDIR)$(LIBDEST)/distutils/tests ; \
+ fi
+- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+- $(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
+- -d $(LIBDEST) -f \
+- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+- $(DESTDIR)$(LIBDEST)
+- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+- $(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
+- -d $(LIBDEST) -f \
+- -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+- $(DESTDIR)$(LIBDEST)
+- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+- $(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
+- -d $(LIBDEST)/site-packages -f \
+- -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+- $(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
+- -d $(LIBDEST)/site-packages -f \
+- -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+- $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
+- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+- $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
++# compile use host python, which may not be 2.7.9, which lead to fail.
++# So, we not compile, by srplab
++# PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
++# $(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
++# -d $(LIBDEST) -f \
++# -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
++# $(DESTDIR)$(LIBDEST)
++# PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
++# $(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
++# -d $(LIBDEST) -f \
++# -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
++# $(DESTDIR)$(LIBDEST)
++# -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
++# $(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
++# -d $(LIBDEST)/site-packages -f \
++# -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
++# -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
++# $(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
++# -d $(LIBDEST)/site-packages -f \
++# -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
++# -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
++# $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
++# -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
++# $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
+
+ # Create the PLATDIR source directory, if one wasn't distributed..
+ $(srcdir)/Lib/$(PLATDIR):
+Only in Python-2.7.15+iPhone: Makefile.pre.in.orig
+diff -ur Python-2.7.15/Python/dynload_shlib.c Python-2.7.15+iPhone/Python/dynload_shlib.c
+--- Python-2.7.15/Python/dynload_shlib.c 2018-04-29 12:47:33.000000000 -1000
++++ Python-2.7.15+iPhone/Python/dynload_shlib.c 2018-09-04 18:39:57.000000000 -1000
+@@ -84,6 +84,14 @@
+ PyOS_snprintf(funcname, sizeof(funcname),
+ LEAD_UNDERSCORE "init%.200s", shortname);
+
++ /* On IOS, dlopen crash as soon as we try to open one of our library.
++ * Instead, we have done a redirection of linking to convert our .so into a
++ * .a. Then the main executable is linked with theses symbol. So, instead
++ * of trying to dlopen, directly do the dlsym.
++ * -- Mathieu
++ */
++ return (dl_funcptr) dlsym(RTLD_DEFAULT, funcname);
++#if 0
+ if (fp != NULL) {
+ int i;
+ struct stat statb;
+@@ -140,4 +148,5 @@
+ handles[nhandles++].handle = handle;
+ p = (dl_funcptr) dlsym(handle, funcname);
+ return p;
++#endif
+ }
+diff -ur Python-2.7.15/Python/pythonrun.c Python-2.7.15+iPhone/Python/pythonrun.c
+--- Python-2.7.15/Python/pythonrun.c 2018-04-29 12:47:33.000000000 -1000
++++ Python-2.7.15+iPhone/Python/pythonrun.c 2018-09-04 18:39:57.000000000 -1000
+@@ -287,8 +287,10 @@
+ _PyGILState_Init(interp, tstate);
+ #endif /* WITH_THREAD */
+
++#if 0
+ if (!Py_NoSiteFlag)
+ initsite(); /* Module site */
++#endif
+
+ if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') {
+ p = icodeset = codeset = strdup(p);
+Only in Python-2.7.15+iPhone/Python: pythonrun.c.orig
+Only in Python-2.7.15+iPhone: config.site
+diff -ur Python-2.7.15/configure Python-2.7.15+iPhone/configure
+--- Python-2.7.15/configure 2018-04-29 12:47:33.000000000 -1000
++++ Python-2.7.15+iPhone/configure 2018-09-04 18:39:57.000000000 -1000
+@@ -3287,6 +3287,9 @@
+ *-*-cygwin*)
+ ac_sys_system=Cygwin
+ ;;
++ *-*-darwin*)
++ ac_sys_system=Darwin
++ ;;
+ *)
+ # for now, limit cross builds to known configurations
+ MACHDEP="unknown"
+@@ -3333,6 +3336,15 @@
+ *-*-cygwin*)
+ _host_cpu=
+ ;;
++ *-*-darwin*)
++ case "$host_cpu" in
++ arm*)
++ _host_cpu=arm
++ ;;
++ *)
++ _host_cpu=$host_cpu
++ esac
++ ;;
+ *)
+ # for now, limit cross builds to known configurations
+ MACHDEP="unknown"
+Only in Python-2.7.15+iPhone: configure.orig
+diff -ur Python-2.7.15/setup.py Python-2.7.15+iPhone/setup.py
+--- Python-2.7.15/setup.py 2018-04-29 12:47:33.000000000 -1000
++++ Python-2.7.15+iPhone/setup.py 2018-09-04 18:40:07.000000000 -1000
+@@ -188,7 +188,7 @@
+ ext_map = dict((ext.name, i) for i, ext in enumerate(extensions))
+ if "_ctypes" in ext_map:
+ ctypes = extensions.pop(ext_map["_ctypes"])
+- extensions.append(ctypes)
++ # extensions.append(ctypes) # not build ctypes, by srplab
+ self.extensions = extensions
+
+ # Fix up the autodetected modules, prefixing all the source files
+@@ -1433,8 +1433,8 @@
+ missing.append('zlib')
+ else:
+ missing.append('zlib')
+- else:
+- missing.append('zlib')
++ #else:
++ # missing.append('zlib')
+
+ # Helper module for various ascii-encoders. Uses zlib for an optimized
+ # crc32 if we have it. Otherwise binascii uses its own.
+Only in Python-2.7.15+iPhone: setup.py.orig
diff --git a/data/python/test.diff b/data/python/test.diff
deleted file mode 100644
index e2258207b..000000000
--- a/data/python/test.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -ru Python-2.5.1/Makefile.pre.in Python-2.5.1+iPhone/Makefile.pre.in
---- Python-2.5.1/Makefile.pre.in 2006-12-08 20:46:13.000000000 +0000
-+++ Python-2.5.1+iPhone/Makefile.pre.in 2008-01-09 08:21:39.000000000 +0000
-@@ -775,11 +775,11 @@
- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST) -f \
-- -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
-+ -x 'bad_coding|badsyntax|site-packages|test' $(DESTDIR)$(LIBDEST)
- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST) -f \
-- -x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
-+ -x 'bad_coding|badsyntax|site-packages|test' $(DESTDIR)$(LIBDEST)
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
- ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
- -d $(LIBDEST)/site-packages -f \
diff --git a/data/python/timestamp.diff b/data/python/timestamp.diff
index 76642259f..cebeb8131 100644
--- a/data/python/timestamp.diff
+++ b/data/python/timestamp.diff
@@ -1,6 +1,6 @@
-diff -ru Python-2.5.1/Modules/getbuildinfo.c Python-2.5.1+iPhone/Modules/getbuildinfo.c
---- Python-2.5.1/Modules/getbuildinfo.c 2006-01-18 09:13:51.000000000 +0000
-+++ Python-2.5.1+iPhone/Modules/getbuildinfo.c 2008-06-19 08:00:45.000000000 +0000
+diff -ur Python-2.7.15/Modules/getbuildinfo.c Python-2.7.15+iPhone/Modules/getbuildinfo.c
+--- Python-2.7.15/Modules/getbuildinfo.c 2018-04-29 12:47:33.000000000 -1000
++++ Python-2.7.15+iPhone/Modules/getbuildinfo.c 2018-09-04 16:04:45.000000000 -1000
@@ -5,20 +5,12 @@
#endif
@@ -20,5 +20,5 @@ diff -ru Python-2.5.1/Modules/getbuildinfo.c Python-2.5.1+iPhone/Modules/getbuil
#endif
-#endif
- #ifdef SUBWCREV
- #define SVNVERSION "$WCRANGE$$WCMODS?M:$"
+ /* XXX Only unix build process has been tested */
+ #ifndef GITVERSION
diff --git a/data/python/zz-setup.diff b/data/python/zz-setup.diff
new file mode 100644
index 000000000..6116ff998
--- /dev/null
+++ b/data/python/zz-setup.diff
@@ -0,0 +1,175 @@
+diff -ur Python-2.7.15/setup.py Python-2.7.15+iPhone/setup.py
+--- Python-2.7.15/setup.py 2018-04-29 12:47:33.000000000 -1000
++++ Python-2.7.15+iPhone/setup.py 2018-09-04 21:49:58.000000000 -1000
+@@ -18,6 +18,7 @@
+ from distutils.spawn import find_executable
+
+ cross_compiling = "_PYTHON_HOST_PLATFORM" in os.environ
++sysroot = os.environ['PKG_ROOT']
+
+ def get_platform():
+ # cross build
+@@ -49,9 +50,7 @@
+ """
+ cflags = sysconfig.get_config_var('CFLAGS')
+ m = re.search(r'-isysroot\s+(\S+)', cflags)
+- if m is None:
+- sysroot = '/'
+- else:
++ if m is not None:
+ sysroot = m.group(1)
+ return sysroot
+
+@@ -80,6 +79,8 @@
+ # system, but with only header files and libraries.
+ sysroot = macosx_sdk_root()
+
++ sysroot = os.environ['PKG_ROOT']
++
+ # Check the standard locations
+ for dir in std_dirs:
+ f = os.path.join(dir, filename)
+@@ -110,6 +111,8 @@
+ if host_platform == 'darwin':
+ sysroot = macosx_sdk_root()
+
++ sysroot = os.environ['PKG_ROOT']
++
+ # Check whether the found file is in one of the standard directories
+ dirname = os.path.dirname(result)
+ for p in std_dirs:
+@@ -461,6 +464,7 @@
+ if cross_compiling:
+ self.add_gcc_paths()
+ self.add_multiarch_paths()
++ sysroot = os.environ['PKG_ROOT']
+
+ # Add paths specified in the environment variables LDFLAGS and
+ # CPPFLAGS for header and library files.
+@@ -497,7 +501,8 @@
+ add_dir_to_list(dir_list, directory)
+
+ if os.path.normpath(sys.prefix) != '/usr' \
+- and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
++ and not sysconfig.get_config_var('PYTHONFRAMEWORK') \
++ and not cross_compiling:
+ # OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework
+ # (PYTHONFRAMEWORK is set) to avoid # linking problems when
+ # building a framework with different architectures than
+@@ -519,12 +524,12 @@
+ lib_dirs = self.compiler.library_dirs[:]
+ if not cross_compiling:
+ for d in (
+- '/usr/include',
++ sysroot + '/usr/include',
+ ):
+ add_dir_to_list(inc_dirs, d)
+ for d in (
+- '/lib64', '/usr/lib64',
+- '/lib', '/usr/lib',
++ sysroot + '/lib64', sysroot + '/usr/lib64',
++ sysroot + '/lib', sysroot + '/usr/lib',
+ ):
+ add_dir_to_list(lib_dirs, d)
+ exts = []
+@@ -808,21 +813,22 @@
+ depends=['socketmodule.h'],
+ libraries=math_libs) )
+ # Detect SSL support for the socket module (via _ssl)
++ sysroot = os.environ['PKG_ROOT']
+ search_for_ssl_incs_in = [
+- '/usr/local/ssl/include',
+- '/usr/contrib/ssl/include/'
++ sysroot + '/usr/local/ssl/include',
++ sysroot + '/usr/contrib/ssl/include/'
+ ]
+ ssl_incs = find_file('openssl/ssl.h', inc_dirs,
+ search_for_ssl_incs_in
+ )
+ if ssl_incs is not None:
+ krb5_h = find_file('krb5.h', inc_dirs,
+- ['/usr/kerberos/include'])
++ [sysroot + '/usr/kerberos/include'])
+ if krb5_h:
+ ssl_incs += krb5_h
+ ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
+- ['/usr/local/ssl/lib',
+- '/usr/contrib/ssl/lib/'
++ [sysroot + '/usr/local/ssl/lib',
++ sysroot + '/usr/contrib/ssl/lib/'
+ ] )
+
+ if (ssl_incs is not None and
+@@ -944,16 +950,17 @@
+
+ # construct a list of paths to look for the header file in on
+ # top of the normal inc_dirs.
++ sysroot = os.environ['PKG_ROOT']
+ db_inc_paths = [
+- '/usr/include/db4',
+- '/usr/local/include/db4',
+- '/opt/sfw/include/db4',
+- '/usr/include/db3',
+- '/usr/local/include/db3',
+- '/opt/sfw/include/db3',
++ sysroot + '/usr/include/db4',
++ sysroot + '/usr/local/include/db4',
++ sysroot + '/opt/sfw/include/db4',
++ sysroot + '/usr/include/db3',
++ sysroot + '/usr/local/include/db3',
++ sysroot + '/opt/sfw/include/db3',
+ # Fink defaults (http://fink.sourceforge.net/)
+- '/sw/include/db4',
+- '/sw/include/db3',
++ sysroot + '/sw/include/db4',
++ sysroot + '/sw/include/db3',
+ ]
+ # 4.x minor number specific paths
+ for x in gen_db_minor_ver_nums(4):
+@@ -1133,8 +1140,7 @@
+ # Scan the default include directories before the SQLite specific
+ # ones. This allows one to override the copy of sqlite on OSX,
+ # where /usr/include contains an old version of sqlite.
+- if host_platform == 'darwin':
+- sysroot = macosx_sdk_root()
++ sysroot = os.environ['PKG_ROOT']
+
+ for d_ in inc_dirs + sqlite_inc_paths:
+ d = d_
+@@ -1231,7 +1237,6 @@
+
+ if host_platform == 'darwin':
+ if is_macosx_sdk_path(f):
+- sysroot = macosx_sdk_root()
+ f = os.path.join(sysroot, f[1:])
+
+ if os.path.exists(f) and not db_incs:
+@@ -1797,7 +1802,6 @@
+ join(os.getenv('HOME'), '/Library/Frameworks')
+ ]
+
+- sysroot = macosx_sdk_root()
+
+ # Find the directory that contains the Tcl.framework and Tk.framework
+ # bundles.
+@@ -1843,6 +1847,7 @@
+ cflags = sysconfig.get_config_vars('CFLAGS')[0]
+ archs = re.findall('-arch\s+(\w+)', cflags)
+
++ sysroot = os.environ['PKG_ROOT']
+ if is_macosx_sdk_path(F):
+ fp = os.popen("file %s/Tk.framework/Tk | grep 'for architecture'"%(os.path.join(sysroot, F[1:]),))
+ else:
+@@ -2117,10 +2122,11 @@
+ if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"):
+ return
+
++ sysroot = os.environ['PKG_ROOT']
+ if host_platform == 'darwin':
+ # OS X 10.5 comes with libffi.dylib; the include files are
+ # in /usr/include/ffi
+- inc_dirs.append('/usr/include/ffi')
++ inc_dirs.append(sysroot + '/usr/include/ffi')
+
+ ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
+ if not ffi_inc or ffi_inc[0] == '':
diff --git a/data/pzb/_metadata/description b/data/pzb/_metadata/description
new file mode 100644
index 000000000..f94f28860
--- /dev/null
+++ b/data/pzb/_metadata/description
@@ -0,0 +1 @@
+partialZipBrowser is a commandline tool for browsing and downloading files from zip files on remote webserver
diff --git a/data/pzb/_metadata/in.1443.00 b/data/pzb/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/pzb/_metadata/in.1443.00
diff --git a/data/pzb/_metadata/libfragmentzip.dep b/data/pzb/_metadata/libfragmentzip.dep
new file mode 120000
index 000000000..a0d56c2ea
--- /dev/null
+++ b/data/pzb/_metadata/libfragmentzip.dep
@@ -0,0 +1 @@
+../../libfragmentzip \ No newline at end of file
diff --git a/data/pzb/_metadata/license b/data/pzb/_metadata/license
new file mode 100644
index 000000000..be2972aa9
--- /dev/null
+++ b/data/pzb/_metadata/license
@@ -0,0 +1,55 @@
+This is version 2005-Feb-10 of the Info-ZIP license.
+The definitive version of this document should be available at
+ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely.
+
+
+Copyright (c) 1990-2006 Info-ZIP. All rights reserved.
+
+For the purposes of this copyright and license, "Info-ZIP" is defined as
+the following set of individuals:
+
+ Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
+ Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth,
+ Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
+ David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
+ Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
+ Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda,
+ Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren,
+ Rich Wales, Mike White
+
+This software is provided "as is," without warranty of any kind, express
+or implied. In no event shall Info-ZIP or its contributors be held liable
+for any direct, indirect, incidental, special or consequential damages
+arising out of the use of or inability to use this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ definition, disclaimer, and this list of conditions.
+
+ 2. Redistributions in binary form (compiled executables) must reproduce
+ the above copyright notice, definition, disclaimer, and this list of
+ conditions in documentation and/or other materials provided with the
+ distribution. The sole exception to this condition is redistribution
+ of a standard UnZipSFX binary (including SFXWiz) as part of a
+ self-extracting archive; that is permitted without inclusion of this
+ license, as long as the normal SFX banner has not been removed from
+ the binary or disabled.
+
+ 3. Altered versions--including, but not limited to, ports to new operating
+ systems, existing ports with new graphical interfaces, and dynamic,
+ shared, or static library versions--must be plainly marked as such
+ and must not be misrepresented as being the original source. Such
+ altered versions also must not be misrepresented as being Info-ZIP
+ releases--including, but not limited to, labeling of the altered
+ versions with the names "Info-ZIP" (or any variation thereof, including,
+ but not limited to, different capitalizations), "Pocket UnZip," "WiZ"
+ or "MacZip" without the explicit permission of Info-ZIP. Such altered
+ versions are further prohibited from misrepresentative use of the
+ Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s).
+
+ 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip,"
+ "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its
+ own source and binary releases.
diff --git a/data/pzb/_metadata/maintainer b/data/pzb/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/pzb/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/pzb/_metadata/name b/data/pzb/_metadata/name
new file mode 100644
index 000000000..4e7f480f3
--- /dev/null
+++ b/data/pzb/_metadata/name
@@ -0,0 +1 @@
+partialZipBrowser
diff --git a/data/pzb/_metadata/priority b/data/pzb/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/pzb/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/pzb/_metadata/role b/data/pzb/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/pzb/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/pzb/_metadata/section b/data/pzb/_metadata/section
new file mode 100644
index 000000000..888e3e192
--- /dev/null
+++ b/data/pzb/_metadata/section
@@ -0,0 +1 @@
+Archiving
diff --git a/data/pzb/_metadata/tags b/data/pzb/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/pzb/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/pzb/_metadata/version b/data/pzb/_metadata/version
new file mode 100644
index 000000000..7dea76edb
--- /dev/null
+++ b/data/pzb/_metadata/version
@@ -0,0 +1 @@
+1.0.1
diff --git a/data/pzb/make.sh b/data/pzb/make.sh
new file mode 100644
index 000000000..9507c7cc9
--- /dev/null
+++ b/data/pzb/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+autoreconf -f -i
+pkg:configure
+pkg:make
+pkg:install
diff --git a/data/pzb/pzb-1.0.1.tar.xz b/data/pzb/pzb-1.0.1.tar.xz
new file mode 100644
index 000000000..5e27cb7cc
--- /dev/null
+++ b/data/pzb/pzb-1.0.1.tar.xz
Binary files differ
diff --git a/data/radare2/_metadata/description b/data/radare2/_metadata/description
new file mode 100644
index 000000000..123883cb7
--- /dev/null
+++ b/data/radare2/_metadata/description
@@ -0,0 +1 @@
+free and advanced command line hexadecimal editor. The project aims to create a complete, portable, multi-architecture, unix-like toolchain for reverse engineering.
diff --git a/data/radare2/_metadata/homepage b/data/radare2/_metadata/homepage
new file mode 100644
index 000000000..1c1f2b053
--- /dev/null
+++ b/data/radare2/_metadata/homepage
@@ -0,0 +1 @@
+http://www.radare.org/
diff --git a/data/radare2/_metadata/in.1443.00 b/data/radare2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/radare2/_metadata/in.1443.00
diff --git a/data/radare2/_metadata/license b/data/radare2/_metadata/license
new file mode 120000
index 000000000..141b2e41b
--- /dev/null
+++ b/data/radare2/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/lgpl-3 \ No newline at end of file
diff --git a/data/radare2/_metadata/maintainer b/data/radare2/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/radare2/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/radare2/_metadata/name b/data/radare2/_metadata/name
new file mode 100644
index 000000000..8058d1550
--- /dev/null
+++ b/data/radare2/_metadata/name
@@ -0,0 +1 @@
+Radare
diff --git a/data/radare2/_metadata/priority b/data/radare2/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/radare2/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/radare2/_metadata/role b/data/radare2/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/radare2/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/radare2/_metadata/section b/data/radare2/_metadata/section
new file mode 100644
index 000000000..19814b684
--- /dev/null
+++ b/data/radare2/_metadata/section
@@ -0,0 +1 @@
+Utilities
diff --git a/data/radare2/_metadata/tags b/data/radare2/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/radare2/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/radare2/_metadata/version b/data/radare2/_metadata/version
new file mode 100644
index 000000000..24ba9a38d
--- /dev/null
+++ b/data/radare2/_metadata/version
@@ -0,0 +1 @@
+2.7.0
diff --git a/data/radare2/make.sh b/data/radare2/make.sh
new file mode 100644
index 000000000..368f5014f
--- /dev/null
+++ b/data/radare2/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+git init
+pkg:configure
+pkg:make
+pkg:install
diff --git a/data/radare2/radare2-2.7.0.tar.gz b/data/radare2/radare2-2.7.0.tar.gz
new file mode 100644
index 000000000..e405e03e3
--- /dev/null
+++ b/data/radare2/radare2-2.7.0.tar.gz
Binary files differ
diff --git a/data/ranbee.com/Icon.png b/data/ranbee.com/Icon.png
deleted file mode 100644
index a5dc54d35..000000000
--- a/data/ranbee.com/Icon.png
+++ /dev/null
Binary files differ
diff --git a/data/ranbee.com/_metadata/description b/data/ranbee.com/_metadata/description
deleted file mode 100644
index 32a5f4be9..000000000
--- a/data/ranbee.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-digital content for iPhone and iPod Touch
diff --git a/data/ranbee.com/_metadata/license b/data/ranbee.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/ranbee.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/ranbee.com/_metadata/maintainer b/data/ranbee.com/_metadata/maintainer
deleted file mode 100644
index 619c29eb0..000000000
--- a/data/ranbee.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Eran Berkovitz <apps@ranbee.com>
diff --git a/data/ranbee.com/_metadata/name b/data/ranbee.com/_metadata/name
deleted file mode 100644
index b2539d71f..000000000
--- a/data/ranbee.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-Ranbee
diff --git a/data/ranbee.com/_metadata/postinst b/data/ranbee.com/_metadata/postinst
deleted file mode 100755
index 955d7ef4d..000000000
--- a/data/ranbee.com/_metadata/postinst
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == configure ]]; then
- /usr/bin/apt-key add /usr/share/keyrings/ranbee.com-keyring.gpg
-fi
diff --git a/data/ranbee.com/_metadata/prerm b/data/ranbee.com/_metadata/prerm
deleted file mode 100755
index 7d1f3cdc9..000000000
--- a/data/ranbee.com/_metadata/prerm
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == remove ]]; then
- /usr/bin/apt-key del 44B0EBA9
-fi
diff --git a/data/ranbee.com/_metadata/role b/data/ranbee.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/ranbee.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/ranbee.com/_metadata/section b/data/ranbee.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/ranbee.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/ranbee.com/_metadata/tags b/data/ranbee.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/ranbee.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/ranbee.com/_metadata/version b/data/ranbee.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/ranbee.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/ranbee.com/make.sh b/data/ranbee.com/make.sh
deleted file mode 100644
index 8b646e2e7..000000000
--- a/data/ranbee.com/make.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/ranbee.com.list /etc/apt/sources.list.d
-pkg: mkdir -p /usr/share/keyrings
-pkg: cp -a %/ranbee.key /usr/share/keyrings/ranbee.com-keyring.gpg
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/Icon.png /Applications/Cydia.app/Sources/ranbee.com.png
diff --git a/data/ranbee.com/ranbee.com.list b/data/ranbee.com/ranbee.com.list
deleted file mode 100644
index ced76b992..000000000
--- a/data/ranbee.com/ranbee.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://ranbee.com/repo/ ./
diff --git a/data/ranbee.com/ranbee.key b/data/ranbee.com/ranbee.key
deleted file mode 100755
index 0bd79a9c9..000000000
--- a/data/ranbee.com/ranbee.key
+++ /dev/null
@@ -1,17 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.9 (GNU/Linux)
-
-mQGiBElj7/MRBADzpuN1qSNpydBzICpdHVZV12BwqLO2z+FN9orO0Mdg/O1MIUNB
-DJ+VdHuplFS3ej6jHqwKf1rOUxBuxsCLs1wFal+mOHQsYO2D6xANX9iTqzn65d4D
-MeVzw/DDUJJWPwRsJiTRQazQiA8+ubHDAdpd8Aw22FTA642PKKLf6FUEewCg/ncA
-WKTbtqCSMsyE7fm5bCJFx5sD/1KyFTW7+aOF+UGZka0KjRIZcrDYk9RvW6uRzlEJ
-2Astblsp3/oP48hqq6t+jBdqpnRuY5OBm3z1Or4C+RtdnG28HVIQ7x56F5/T5X+8
-x2SqeqbuArSB+cJwiqw3nSdQ+7Y8Kw5SfoRAYxJ58DcnNL7z9Bz8IYR6qDCTCPF3
-nVDCBADbNxfn7B5zzdTidt9qZN23vPzaORtVsKedIYnls9V8aVndRA2zTyacpHfD
-PJ/fP+qJ0+2FTEEu0pVNzWZBf70igkp5G7pONFwP2RIWV6B0SLZPP3nXdq87BTHC
-8PtICPa/TUOkkalge9zB7fFpTUxpXVFBMj3od1MRzwZnDV9Ew7QqRXJhbiBCZXJr
-b3ZpdHogKGVyYW5iZXQpIDxlcmFuQHJhbmJlZS5jb20+iGAEExECACAFAklj7/MC
-GwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBvvzsCRLDrqQY6AKC0vzUpbshZ
-BexlJiq50qP+1AVMBgCdF0bkIQyVCVC5aNO0BWZ9dsM3llM=
-=ykum
------END PGP PUBLIC KEY BLOCK-----
diff --git a/data/raop-play/_metadata/in.1443.00 b/data/raop-play/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/raop-play/_metadata/in.1443.00
diff --git a/data/raop-play/_metadata/libssl1.0.dep b/data/raop-play/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/raop-play/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/raop-play/_metadata/maintainer b/data/raop-play/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/raop-play/_metadata/maintainer
+++ b/data/raop-play/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/raop-play/_metadata/openssl.dep b/data/raop-play/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/raop-play/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/rdesktop/_metadata/in.1443.00 b/data/rdesktop/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/rdesktop/_metadata/in.1443.00
diff --git a/data/rdesktop/_metadata/libssl1.0.dep b/data/rdesktop/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/rdesktop/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/rdesktop/_metadata/maintainer b/data/rdesktop/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/rdesktop/_metadata/maintainer
+++ b/data/rdesktop/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/rdesktop/_metadata/openssl.dep b/data/rdesktop/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/rdesktop/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/rdesktop/make.sh b/data/rdesktop/make.sh
index 4bb8c7f34..bddf845fa 100644
--- a/data/rdesktop/make.sh
+++ b/data/rdesktop/make.sh
@@ -1,4 +1,5 @@
pkg:setup
-pkg:configure --with-openssl="$(PKG_DEST_ openssl)/usr" --with-sound=no
-make
+cp ${PKG_BASE}/config.sub .
+pkg:configure --with-openssl="$(PKG_DEST_ _openssl1.0)/usr" --with-sound=no
+make -j8
pkg:install
diff --git a/data/readline/_metadata/in.1443.00 b/data/readline/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/readline/_metadata/in.1443.00
diff --git a/data/readline/_metadata/maintainer b/data/readline/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/readline/_metadata/maintainer
+++ b/data/readline/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/readline/_metadata/version b/data/readline/_metadata/version
index e0ea36fee..cc40bca69 100644
--- a/data/readline/_metadata/version
+++ b/data/readline/_metadata/version
@@ -1 +1 @@
-6.0
+8.0
diff --git a/data/readline/archarm.diff b/data/readline/archarm.diff
index 39c4ccb01..214d302a5 100644
--- a/data/readline/archarm.diff
+++ b/data/readline/archarm.diff
@@ -1,14 +1,12 @@
-diff -ru readline-6.0/support/shobj-conf readline-6.0+iPhone/support/shobj-conf
---- readline-6.0/support/shobj-conf 2009-01-04 19:32:42.000000000 +0000
-+++ readline-6.0+iPhone/support/shobj-conf 2009-04-09 02:24:20.000000000 +0000
-@@ -157,8 +157,8 @@
- SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)'
- SHLIB_LIBSUFF='dylib'
-
-- SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`'
-- SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
-+ SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only arm'
-+ SHLIB_XLDFLAGS='-dynamiclib -arch_only arm -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
-
- SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1
- ;;
+diff -ur readline-6.3/support/shobj-conf readline-6.3+iPhone/support/shobj-conf
+--- readline-6.3/support/shobj-conf 2014-02-23 16:06:29.000000000 -1000
++++ readline-6.3+iPhone/support/shobj-conf 2018-07-25 14:53:48.000000000 -1000
+@@ -195,7 +195,7 @@
+ *)
+ case "${host_os}" in
+ darwin[89]*|darwin1[012]*)
+- SHOBJ_ARCHFLAGS='-arch_only `/usr/bin/arch`'
++ SHOBJ_ARCHFLAGS=''
+ ;;
+ *) # Mac OS X 10.9 (Mavericks) and later
+ SHOBJ_ARCHFLAGS=
diff --git a/data/readline/cflags.diff b/data/readline/cflags.diff
index ffbfbba1b..fb57024b2 100644
--- a/data/readline/cflags.diff
+++ b/data/readline/cflags.diff
@@ -1,7 +1,6 @@
-diff -ru readline-6.0/configure.in readline-6.0+iPhone/configure.in
---- readline-6.0/configure.in 2009-01-23 15:53:47.000000000 +0000
-+++ readline-6.0+iPhone/configure.in 2009-04-10 17:13:20.000000000 +0000
-@@ -101,17 +101,11 @@
+--- readline-6.3/configure.ac 2014-02-11 12:12:39.000000000 -1000
++++ readline-6.3+iPhone/configure.ac 2018-07-25 14:56:59.000000000 -1000
+@@ -102,17 +102,11 @@
echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}"
echo ""
@@ -18,4 +17,4 @@ diff -ru readline-6.0/configure.in readline-6.0+iPhone/configure.in
-
AC_PROG_GCC_TRADITIONAL
AC_PROG_INSTALL
- AC_CHECK_PROG(AR, ar, , ar)
+ AC_CHECK_TOOL(AR, ar)
diff --git a/data/readline/lendiff.diff b/data/readline/lendiff.diff
deleted file mode 100644
index a7c485461..000000000
--- a/data/readline/lendiff.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru readline-6.0/display.c readline-6.0+iPhone/display.c
---- readline-6.0/display.c 2009-01-04 19:32:32.000000000 +0000
-+++ readline-6.0+iPhone/display.c 2009-04-10 22:28:49.000000000 +0000
-@@ -1764,7 +1764,7 @@
- else
- col_lendiff = lendiff;
-
--#if 0
-+#if 1
- if (col_lendiff)
- #else
- /* If we've already printed over the entire width of the screen,
diff --git a/data/readline/make.sh b/data/readline/make.sh
index 563dfea62..303c3741a 100644
--- a/data/readline/make.sh
+++ b/data/readline/make.sh
@@ -1,9 +1,22 @@
-pkg:setup
+pkg:extract
+cd *
+
+for ((x = 1; x != 1; ++x)); do
+ patch -p0 <"${PKG_DATA}/readline80-$(printf '%.3u\n' "$x")"
+done
+
+pkg:patch
autoconf
pkg:configure ac_cv_func_strcoll_works=yes bash_cv_func_sigsetjmp=present bash_cv_func_ctype_nonascii=no bash_cv_must_reinstall_sighandlers=no bash_cv_func_strcoll_broken=yes
-make CFLAGS='-O2 -mthumb'
+make CFLAGS='-O2'
pkg:install
pkg: ln -s libreadline.5.2.dylib /usr/lib/libreadline.5.dylib
pkg: ln -s libreadline.6.0.dylib /usr/lib/libreadline.5.2.dylib
+pkg: ln -s libreadline.7.0.dylib /usr/lib/libreadline.6.0.dylib
+pkg: ln -s libreadline.7.0.dylib /usr/lib/libreadline.7.dylib
+pkg: ln -s libreadline.8.0.dylib /usr/lib/libreadline.7.0.dylib
pkg: ln -s libhistory.5.2.dylib /usr/lib/libhistory.5.dylib
pkg: ln -s libhistory.6.0.dylib /usr/lib/libhistory.5.2.dylib
+pkg: ln -s libhistory.7.0.dylib /usr/lib/libhistory.6.0.dylib
+pkg: ln -s libhistory.7.0.dylib /usr/lib/libhistory.7.dylib
+pkg: ln -s libhistory.8.0.dylib /usr/lib/libhistory.7.0.dylib
diff --git a/data/readline/readline-6.0.tar.gz b/data/readline/readline-6.0.tar.gz
deleted file mode 100644
index 3d3f6bded..000000000
--- a/data/readline/readline-6.0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/readline/readline-8.0.tar.gz b/data/readline/readline-8.0.tar.gz
new file mode 100644
index 000000000..a7447a3c8
--- /dev/null
+++ b/data/readline/readline-8.0.tar.gz
Binary files differ
diff --git a/data/rhino/_metadata/in.1443.00 b/data/rhino/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/rhino/_metadata/in.1443.00
diff --git a/data/rhino/_metadata/maintainer b/data/rhino/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/rhino/_metadata/maintainer
+++ b/data/rhino/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ripdev/_metadata/description b/data/ripdev/_metadata/description
deleted file mode 100644
index d62acfca6..000000000
--- a/data/ripdev/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Russian iPhone Development (Icy)
diff --git a/data/ripdev/_metadata/license b/data/ripdev/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/ripdev/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/ripdev/_metadata/maintainer b/data/ripdev/_metadata/maintainer
deleted file mode 100644
index 64ea589bc..000000000
--- a/data/ripdev/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-RiPDev <support@ripdev.com>
diff --git a/data/ripdev/_metadata/name b/data/ripdev/_metadata/name
deleted file mode 100644
index 5636cc584..000000000
--- a/data/ripdev/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-RiPDev
diff --git a/data/ripdev/_metadata/role b/data/ripdev/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/ripdev/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/ripdev/_metadata/section b/data/ripdev/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/ripdev/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/ripdev/_metadata/tags b/data/ripdev/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/ripdev/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/ripdev/_metadata/version b/data/ripdev/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/ripdev/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/ripdev/make.sh b/data/ripdev/make.sh
deleted file mode 100644
index aa0ca1bd7..000000000
--- a/data/ripdev/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/ripdev.list /etc/apt/sources.list.d
diff --git a/data/ripdev/ripdev.list b/data/ripdev/ripdev.list
deleted file mode 100644
index 278ab123e..000000000
--- a/data/ripdev/ripdev.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://apt.ripdev.com/ ./
diff --git a/data/rlwrap/_metadata/in.1443.00 b/data/rlwrap/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/rlwrap/_metadata/in.1443.00
diff --git a/data/rlwrap/_metadata/maintainer b/data/rlwrap/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/rlwrap/_metadata/maintainer
+++ b/data/rlwrap/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/rpl/_metadata/in.1443.00 b/data/rpl/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/rpl/_metadata/in.1443.00
diff --git a/data/rpl/_metadata/maintainer b/data/rpl/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/rpl/_metadata/maintainer
+++ b/data/rpl/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/rsync/_metadata/in.1443.00 b/data/rsync/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/rsync/_metadata/in.1443.00
diff --git a/data/rsync/_metadata/maintainer b/data/rsync/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/rsync/_metadata/maintainer
+++ b/data/rsync/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/rsync/_metadata/version b/data/rsync/_metadata/version
index eca690e73..ff365e06b 100644
--- a/data/rsync/_metadata/version
+++ b/data/rsync/_metadata/version
@@ -1 +1 @@
-3.0.5
+3.1.3
diff --git a/data/rsync/rsync-3.0.5.tar.gz b/data/rsync/rsync-3.0.5.tar.gz
deleted file mode 100644
index 67ce63c27..000000000
--- a/data/rsync/rsync-3.0.5.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/rsync/rsync-3.1.3.tar.gz b/data/rsync/rsync-3.1.3.tar.gz
new file mode 100644
index 000000000..4e5cc3d9d
--- /dev/null
+++ b/data/rsync/rsync-3.1.3.tar.gz
Binary files differ
diff --git a/data/ruby/_metadata/in.1443.00 b/data/ruby/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/ruby/_metadata/in.1443.00
diff --git a/data/ruby/_metadata/libssl1.0.dep b/data/ruby/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/ruby/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/ruby/_metadata/maintainer b/data/ruby/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/ruby/_metadata/maintainer
+++ b/data/ruby/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/ruby/_metadata/openssl.dep b/data/ruby/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/ruby/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/ruby/_metadata/predepends b/data/ruby/_metadata/predepends
new file mode 100644
index 000000000..d5613ee95
--- /dev/null
+++ b/data/ruby/_metadata/predepends
@@ -0,0 +1 @@
+dpkg (>= 1.18.25-4)
diff --git a/data/ruby/_metadata/version b/data/ruby/_metadata/version
index 811a2f484..aedc15bb0 100644
--- a/data/ruby/_metadata/version
+++ b/data/ruby/_metadata/version
@@ -1 +1 @@
-1.9.2-p0
+2.5.3
diff --git a/data/ruby/arm.diff b/data/ruby/arm.diff
deleted file mode 100644
index 3519cad58..000000000
--- a/data/ruby/arm.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ru ruby-1.9.2-rc2/configure.in ruby-1.9.2-rc2+iPhone/configure.in
---- ruby-1.9.2-rc2/configure.in 2010-07-10 04:06:05.000000000 +0000
-+++ ruby-1.9.2-rc2+iPhone/configure.in 2010-08-08 00:05:23.000000000 +0000
-@@ -185,6 +185,9 @@
- AC_MSG_CHECKING([for real target cpu])
- target=`echo $target | sed "s/^$target_cpu-/-/"`
- target_cpu=`$CC -E - 2>/dev/null <<EOF |
-+#ifdef __arm__
-+"processor-name=arm"
-+#endif
- #ifdef __x86_64__
- "processor-name=x86_64"
- #endif
diff --git a/data/ruby/getaddrinfo.diff b/data/ruby/getaddrinfo.diff
new file mode 100644
index 000000000..9b03ca667
--- /dev/null
+++ b/data/ruby/getaddrinfo.diff
@@ -0,0 +1,36 @@
+diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c
+index dcabb2022eb1..41db6960ade8 100644
+--- a/ext/socket/raddrinfo.c
++++ b/ext/socket/raddrinfo.c
+@@ -145,15 +145,6 @@ ruby_getaddrinfo__darwin(const char *nodename, const char *servname,
+ #define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo__darwin((node),(serv),(hints),(res))
+ #endif
+
+-#ifndef GETADDRINFO_EMU
+-struct getaddrinfo_arg
+-{
+- const char *node;
+- const char *service;
+- const struct addrinfo *hints;
+- struct addrinfo **res;
+-};
+-
+ #ifdef HAVE_INET_PTON
+ static int
+ parse_numeric_port(const char *service, int *portp)
+@@ -182,6 +173,15 @@ parse_numeric_port(const char *service, int *portp)
+ }
+ #endif
+
++#ifndef GETADDRINFO_EMU
++struct getaddrinfo_arg
++{
++ const char *node;
++ const char *service;
++ const struct addrinfo *hints;
++ struct addrinfo **res;
++};
++
+ static void *
+ nogvl_getaddrinfo(void *arg)
+ {
diff --git a/data/ruby/libtool.diff b/data/ruby/libtool.diff
new file mode 100644
index 000000000..e694d0853
--- /dev/null
+++ b/data/ruby/libtool.diff
@@ -0,0 +1,17 @@
+diff -ur ruby-2.5.3/configure.ac ruby-2.5.3+iPhone/configure.ac
+--- ruby-2.5.3/configure.ac 2018-01-03 08:12:16.000000000 -1000
++++ ruby-2.5.3+iPhone/configure.ac 2018-11-14 00:02:11.000000000 -1000
+@@ -465,13 +465,6 @@
+ CFLAGS="$save_CFLAGS"
+ ])])
+
+-AS_CASE(["$target_os"], [darwin*], [
+-if libtool 2>&1 | grep no_warning_for_no_symbols > /dev/null; then
+- ac_cv_prog_ac_ct_RANLIB=:
+- ac_cv_prog_ac_ct_AR='libtool -static'
+- rb_cv_arflags='-no_warning_for_no_symbols -o'
+-fi
+-])
+ AC_CHECK_TOOL(RANLIB, ranlib, :)
+ AC_CHECK_TOOL(AR, ar)
+ AS_IF([test -z "$AR"], [
diff --git a/data/ruby/make.sh b/data/ruby/make.sh
index 607ccdc54..86329954a 100644
--- a/data/ruby/make.sh
+++ b/data/ruby/make.sh
@@ -1,12 +1,12 @@
pkg:setup
autoconf
-pkg:configure ac_cv_func_setpgrp_void=yes rb_cv_binary_elf=no rb_cv_stack_grow_dir=-1 rb_cv_bsd_signal=yes ac_cv_type_getgroups=gid_t ac_cv_c_stack_direction=-1 ac_cv_func_memcmp_working=yes --enable-wide-getaddrinfo
-make
-cd ext/iconv
-touch iconv.c
-make LOCAL_LIBS=-liconv
-cd ../..
+mkdir x86
+cd x86
+env -i ../configure --disable-install-rdoc --disable-install-doc --prefix="$(pwd)/../x86rb"
+env -i make -j16
+mkdir ../x86rb
+make install
+cd ..
+pkg:configure ac_cv_func_setpgrp_void=yes rb_cv_binary_elf=no rb_cv_stack_grow_dir=-1 rb_cv_bsd_signal=yes ac_cv_type_getgroups=gid_t ac_cv_c_stack_direction=-1 ac_cv_func_memcmp_working=yes --enable-wide-getaddrinfo ac_cv_func_finite=yes --disable-install-doc --disable-install-rdoc --with-baseruby="$(pwd)/x86rb/bin/ruby"
+pkg:make
pkg:install
-pkg: rm -rf /usr/share/ri
-pkg: rm -f /usr/lib/libruby-static.a
-pkg: rm -f /usr/lib/libruby.1.9.1-static.a
diff --git a/data/ruby/rdoc.diff b/data/ruby/rdoc.diff
deleted file mode 100644
index 7bda89a18..000000000
--- a/data/ruby/rdoc.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -ru ruby-1.9.2-rc2/common.mk ruby-1.9.2-rc2+iPhone/common.mk
---- ruby-1.9.2-rc2/common.mk 2010-07-01 04:00:56.000000000 +0000
-+++ ruby-1.9.2-rc2+iPhone/common.mk 2010-08-08 00:16:06.000000000 +0000
-@@ -354,7 +354,7 @@
-
- rdoc: PHONY main
- @echo Generating RDoc documentation
-- $(XRUBY) "$(srcdir)/bin/rdoc" --no-force-update --all --ri --op "$(RDOCOUT)" $(RDOCFLAGS) "$(srcdir)"
-+ $(XRUBY) "$(srcdir)/bin/rdoc" --all --ri --op "$(RDOCOUT)" $(RDOCFLAGS) "$(srcdir)"
- nodoc: PHONY
-
- what-where-doc: no-install-doc
-diff -ru ruby-1.9.2-rc2/doc/re.rdoc ruby-1.9.2-rc2+iPhone/doc/re.rdoc
---- ruby-1.9.2-rc2/doc/re.rdoc 2010-04-10 06:36:13.000000000 +0000
-+++ ruby-1.9.2-rc2+iPhone/doc/re.rdoc 2010-08-08 00:32:03.000000000 +0000
-@@ -1,5 +1,3 @@
--# -*- mode: rdoc; coding: utf-8; fill-column: 74; -*-
--
- Regular expressions (<i>regexp</i>s) are patterns which describe the
- contents of a string. They're used for testing whether a string contains a
- given pattern, or extracting the portions that match. They are created
diff --git a/data/ruby/ruby-1.9.2-p0.tar.gz b/data/ruby/ruby-1.9.2-p0.tar.gz
deleted file mode 100644
index 5fdbeeda8..000000000
--- a/data/ruby/ruby-1.9.2-p0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/ruby/ruby-2.5.3.tar.xz b/data/ruby/ruby-2.5.3.tar.xz
new file mode 100644
index 000000000..09c20176d
--- /dev/null
+++ b/data/ruby/ruby-2.5.3.tar.xz
Binary files differ
diff --git a/data/ruby/strip.diff b/data/ruby/strip.diff
deleted file mode 100644
index 6ba8d49d8..000000000
--- a/data/ruby/strip.diff
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -ru ruby-1.9.2-rc2/configure.in ruby-1.9.2-rc2+iPhone/configure.in
---- ruby-1.9.2-rc2/configure.in 2010-07-10 04:06:05.000000000 +0000
-+++ ruby-1.9.2-rc2+iPhone/configure.in 2010-08-07 23:48:29.000000000 +0000
-@@ -1967,9 +1967,9 @@
-
- AS_CASE(["$target_os"],
- [linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu], [
-- STRIP='strip -S -x'],
-+ STRIP=${STRIP}' -S -x'],
- [nextstep* | openstep* | rhapsody* | darwin*], [
-- STRIP='strip -A -n'])
-+ STRIP=${STRIP}' -A -n'])
-
- AC_ARG_WITH(ext,
- AC_HELP_STRING([--with-ext=EXTS],
diff --git a/data/rubyobjc_/_metadata/in.1443.00 b/data/rubyobjc_/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/rubyobjc_/_metadata/in.1443.00
diff --git a/data/rubyobjc_/_metadata/maintainer b/data/rubyobjc_/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/rubyobjc_/_metadata/maintainer
+++ b/data/rubyobjc_/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/rzip/_metadata/in.1443.00 b/data/rzip/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/rzip/_metadata/in.1443.00
diff --git a/data/rzip/_metadata/maintainer b/data/rzip/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/rzip/_metadata/maintainer
+++ b/data/rzip/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/samba/_metadata/in.1443.00 b/data/samba/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/samba/_metadata/in.1443.00
diff --git a/data/samba/_metadata/maintainer b/data/samba/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/samba/_metadata/maintainer
+++ b/data/samba/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/screen/_metadata/in.1443.00 b/data/screen/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/screen/_metadata/in.1443.00
diff --git a/data/screen/_metadata/maintainer b/data/screen/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/screen/_metadata/maintainer
+++ b/data/screen/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/sed/_metadata/in.1443.00 b/data/sed/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/sed/_metadata/in.1443.00
diff --git a/data/sed/_metadata/maintainer b/data/sed/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/sed/_metadata/maintainer
+++ b/data/sed/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/sed/_metadata/version b/data/sed/_metadata/version
index b1cbc1fcd..4caecc733 100644
--- a/data/sed/_metadata/version
+++ b/data/sed/_metadata/version
@@ -1 +1 @@
-4.1.5
+4.5
diff --git a/data/sed/make.sh b/data/sed/make.sh
index 38c45b684..6d2fe09a6 100644
--- a/data/sed/make.sh
+++ b/data/sed/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-pkg:configure
+pkg:configure am_cv_func_working_getline=yes
make
pkg:install
pkg:bin sed
diff --git a/data/sed/obstack.diff b/data/sed/obstack.diff
deleted file mode 100644
index d3576f0fb..000000000
--- a/data/sed/obstack.diff
+++ /dev/null
@@ -1,83 +0,0 @@
-Only in sed-4.1.5+iPhone/: config.h
-Only in sed-4.1.5+iPhone/: config.log
-Only in sed-4.1.5+iPhone/: config.status
-Only in sed-4.1.5+iPhone/doc: Makefile
-Only in sed-4.1.5+iPhone/intl: bindtextdom.o
-Only in sed-4.1.5+iPhone/intl: charset.alias
-Only in sed-4.1.5+iPhone/intl: dcgettext.o
-Only in sed-4.1.5+iPhone/intl: dcigettext.o
-Only in sed-4.1.5+iPhone/intl: dcngettext.o
-Only in sed-4.1.5+iPhone/intl: dgettext.o
-Only in sed-4.1.5+iPhone/intl: dngettext.o
-Only in sed-4.1.5+iPhone/intl: explodename.o
-Only in sed-4.1.5+iPhone/intl: finddomain.o
-Only in sed-4.1.5+iPhone/intl: gettext.o
-Only in sed-4.1.5+iPhone/intl: intl-compat.o
-Only in sed-4.1.5+iPhone/intl: l10nflist.o
-Only in sed-4.1.5+iPhone/intl: libintl.a
-Only in sed-4.1.5+iPhone/intl: libintl.h
-Only in sed-4.1.5+iPhone/intl: loadmsgcat.o
-Only in sed-4.1.5+iPhone/intl: localcharset.o
-Only in sed-4.1.5+iPhone/intl: localealias.o
-Only in sed-4.1.5+iPhone/intl: localename.o
-Only in sed-4.1.5+iPhone/intl: Makefile
-Only in sed-4.1.5+iPhone/intl: ngettext.o
-Only in sed-4.1.5+iPhone/intl: osdep.o
-Only in sed-4.1.5+iPhone/intl: plural-exp.o
-Only in sed-4.1.5+iPhone/intl: plural.o
-Only in sed-4.1.5+iPhone/intl: ref-add.sed
-Only in sed-4.1.5+iPhone/intl: ref-del.sed
-Only in sed-4.1.5+iPhone/intl: textdomain.o
-Only in sed-4.1.5+iPhone/lib: .deps
-Only in sed-4.1.5+iPhone/lib: getline.o
-Only in sed-4.1.5+iPhone/lib: getopt1.o
-Only in sed-4.1.5+iPhone/lib: getopt.o
-Only in sed-4.1.5+iPhone/lib: libsed.a
-Only in sed-4.1.5+iPhone/lib: Makefile
-diff -r -u sed-4.1.5/lib/Makefile.in sed-4.1.5+iPhone/lib/Makefile.in
---- sed-4.1.5/lib/Makefile.in 2006-02-03 09:24:34.000000000 +0000
-+++ sed-4.1.5+iPhone/lib/Makefile.in 2007-12-27 00:16:29.000000000 +0000
-@@ -125,11 +125,11 @@
- LDFLAGS = @LDFLAGS@
- LIBICONV = @LIBICONV@
- LIBINTL = @LIBINTL@
--LIBOBJS = @LIBOBJS@
-+LIBOBJS = @LIBOBJS@ obstack.o
- LIBS = @LIBS@
- LTLIBICONV = @LTLIBICONV@
- LTLIBINTL = @LTLIBINTL@
--LTLIBOBJS = @LTLIBOBJS@
-+LTLIBOBJS = @LTLIBOBJS@ obstack.o
- MAKEINFO = @MAKEINFO@
- MAKEINFO_HTML_FALSE = @MAKEINFO_HTML_FALSE@
- MAKEINFO_HTML_TRUE = @MAKEINFO_HTML_TRUE@
-@@ -206,7 +206,7 @@
- AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/intl -I$(top_srcdir) \
- -I$(top_builddir)/lib -I$(top_builddir)/intl
-
--libsed_a_LIBADD = @LIBOBJS@ @ALLOCA@
-+libsed_a_LIBADD = @LIBOBJS@ @ALLOCA@ obstack.o
- libsed_a_DEPENDENCIES = $(libsed_a_LIBADD)
- DISTCLEANFILES = regex.h stdbool.h
- all: all-am
-Only in sed-4.1.5+iPhone/lib: obstack.o
-Only in sed-4.1.5+iPhone/lib: regex.h
-Only in sed-4.1.5+iPhone/lib: regex.o
-Only in sed-4.1.5+iPhone/lib: strverscmp.o
-Only in sed-4.1.5+iPhone/lib: utils.o
-Only in sed-4.1.5+iPhone/: Makefile
-Only in sed-4.1.5+iPhone/po: Makefile
-Only in sed-4.1.5+iPhone/po: Makefile.in
-Only in sed-4.1.5+iPhone/po: POTFILES
-Only in sed-4.1.5+iPhone/sed: compile.o
-Only in sed-4.1.5+iPhone/sed: .deps
-Only in sed-4.1.5+iPhone/sed: execute.o
-Only in sed-4.1.5+iPhone/sed: fmt.o
-Only in sed-4.1.5+iPhone/sed: Makefile
-Only in sed-4.1.5+iPhone/sed: mbcs.o
-Only in sed-4.1.5+iPhone/sed: regexp.o
-Only in sed-4.1.5+iPhone/sed: sed
-Only in sed-4.1.5+iPhone/sed: sed.o
-Only in sed-4.1.5+iPhone/: stamp-h1
-Only in sed-4.1.5+iPhone/testsuite: .deps
-Only in sed-4.1.5+iPhone/testsuite: Makefile
diff --git a/data/sed/sed-4.1.5.tar.gz b/data/sed/sed-4.1.5.tar.gz
deleted file mode 100644
index 7273f1537..000000000
--- a/data/sed/sed-4.1.5.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/sed/sed-4.5.tar.xz b/data/sed/sed-4.5.tar.xz
new file mode 100644
index 000000000..5487913a5
--- /dev/null
+++ b/data/sed/sed-4.5.tar.xz
Binary files differ
diff --git a/data/setuptools/_metadata/in.1443.00 b/data/setuptools/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/setuptools/_metadata/in.1443.00
diff --git a/data/setuptools/_metadata/maintainer b/data/setuptools/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/setuptools/_metadata/maintainer
+++ b/data/setuptools/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/sgrep/_metadata/in.1443.00 b/data/sgrep/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/sgrep/_metadata/in.1443.00
diff --git a/data/sgrep/_metadata/maintainer b/data/sgrep/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/sgrep/_metadata/maintainer
+++ b/data/sgrep/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/sgrep/_metadata/version b/data/sgrep/_metadata/version
index 9bc255994..ab42c0361 100644
--- a/data/sgrep/_metadata/version
+++ b/data/sgrep/_metadata/version
@@ -1 +1 @@
-1.92a
+1.94a
diff --git a/data/sgrep/make.sh b/data/sgrep/make.sh
index e1d044138..f0a4e2711 100644
--- a/data/sgrep/make.sh
+++ b/data/sgrep/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+autoreconf -f -i
pkg:configure
-make CC="${PKG_TARG}"-gcc
+make CC="${PKG_TARG}"-gcc -j8
pkg:install
diff --git a/data/sgrep/sgrep-1.92a.tar.gz b/data/sgrep/sgrep-1.92a.tar.gz
deleted file mode 100644
index a0f7edf4b..000000000
--- a/data/sgrep/sgrep-1.92a.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/sgrep/sgrep-1.94a.tar.gz b/data/sgrep/sgrep-1.94a.tar.gz
new file mode 100644
index 000000000..56c5987c1
--- /dev/null
+++ b/data/sgrep/sgrep-1.94a.tar.gz
Binary files differ
diff --git a/data/sgrep/timestamp.diff b/data/sgrep/timestamp.diff
index 8b2d2ceab..8b0368a87 100644
--- a/data/sgrep/timestamp.diff
+++ b/data/sgrep/timestamp.diff
@@ -1,6 +1,6 @@
diff -ru sgrep-1.92a/index.c sgrep-1.92a+iPhone/index.c
---- sgrep-1.92a/index.c 1998-12-21 23:43:02.000000000 +0000
-+++ sgrep-1.92a+iPhone/index.c 2008-06-18 02:08:31.000000000 +0000
+--- sgrep-1.92a/index_main.c 1998-12-21 23:43:02.000000000 +0000
++++ sgrep-1.92a+iPhone/index_main.c 2008-06-18 02:08:31.000000000 +0000
@@ -1988,8 +1988,8 @@
if (!o->input_stop_word_file) return SGREP_ERROR;
break;
diff --git a/data/shell-cmds/_metadata/in.1443.00 b/data/shell-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/shell-cmds/_metadata/in.1443.00
diff --git a/data/shell-cmds/_metadata/maintainer b/data/shell-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/shell-cmds/_metadata/maintainer
+++ b/data/shell-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/shell-cmds/make.sh b/data/shell-cmds/make.sh
index f8a59e1c8..76177e4ec 100644
--- a/data/shell-cmds/make.sh
+++ b/data/shell-cmds/make.sh
@@ -1,6 +1,6 @@
pkg:setup
mkdir -p "${PKG_DEST}/usr/bin"
-for bin in killall renice script time which; do
- ${PKG_TARG}-gcc -O2 -mthumb -o "${bin}/${bin}" "${bin}"/*.c -D'__FBSDID(x)=' -save-temps
+for bin in killall renice script time which getopt; do
+ ${PKG_TARG}-gcc -O2 -o "${bin}/${bin}" "${bin}"/*.c -D'__FBSDID(x)=' -save-temps
cp -a "${bin}/${bin}" "${PKG_DEST}/usr/bin"
done
diff --git a/data/slirp/_metadata/in.1443.00 b/data/slirp/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/slirp/_metadata/in.1443.00
diff --git a/data/slirp/_metadata/maintainer b/data/slirp/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/slirp/_metadata/maintainer
+++ b/data/slirp/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/sm/_metadata/in.1443.00 b/data/sm/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/sm/_metadata/in.1443.00
diff --git a/data/sm/_metadata/maintainer b/data/sm/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/sm/_metadata/maintainer
+++ b/data/sm/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/sm/_metadata/uuid.dep b/data/sm/_metadata/uuid.dep
new file mode 120000
index 000000000..7b224b803
--- /dev/null
+++ b/data/sm/_metadata/uuid.dep
@@ -0,0 +1 @@
+../../uuid \ No newline at end of file
diff --git a/data/sm/_metadata/version b/data/sm/_metadata/version
index 21e8796a0..23aa83906 100644
--- a/data/sm/_metadata/version
+++ b/data/sm/_metadata/version
@@ -1 +1 @@
-1.0.3
+1.2.2
diff --git a/data/sm/libSM-1.0.3.tar.gz b/data/sm/libSM-1.0.3.tar.gz
deleted file mode 100644
index 4d3f5ae49..000000000
--- a/data/sm/libSM-1.0.3.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/sm/libSM-1.2.2.tar.bz2 b/data/sm/libSM-1.2.2.tar.bz2
new file mode 100644
index 000000000..ed7395820
--- /dev/null
+++ b/data/sm/libSM-1.2.2.tar.bz2
Binary files differ
diff --git a/data/sm/make.sh b/data/sm/make.sh
index 452a4bfd5..fbc999151 100644
--- a/data/sm/make.sh
+++ b/data/sm/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/sniffit/_metadata/in.1443.00 b/data/sniffit/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/sniffit/_metadata/in.1443.00
diff --git a/data/sniffit/_metadata/maintainer b/data/sniffit/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/sniffit/_metadata/maintainer
+++ b/data/sniffit/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/socat/_metadata/in.1443.00 b/data/socat/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/socat/_metadata/in.1443.00
diff --git a/data/socat/_metadata/libssl1.0.dep b/data/socat/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/socat/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/socat/_metadata/maintainer b/data/socat/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/socat/_metadata/maintainer
+++ b/data/socat/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/socat/_metadata/openssl.dep b/data/socat/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/socat/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/socat/_metadata/version b/data/socat/_metadata/version
index 7a29665aa..eff1933a1 100644
--- a/data/socat/_metadata/version
+++ b/data/socat/_metadata/version
@@ -1 +1 @@
-1.7.1.1
+1.7.3.2
diff --git a/data/socat/make.sh b/data/socat/make.sh
index 2593b140f..0293e1444 100644
--- a/data/socat/make.sh
+++ b/data/socat/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure --disable-tun ac_cv_ispeed_offset=9 sc_cv_sys_crdly_shift=12 sc_cv_sys_tabdly_shift=-1 sc_cv_sys_csize_shift=8 ac_cv_header_libutil_h=no
-make
+make CFLAGS="-O2 -D__APPLE_USE_RFC_3542"
pkg:install
diff --git a/data/socat/socat-1.7.1.1.tar.bz2 b/data/socat/socat-1.7.1.1.tar.bz2
deleted file mode 100644
index b9275701a..000000000
--- a/data/socat/socat-1.7.1.1.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/socat/socat-1.7.3.2.tar.bz2 b/data/socat/socat-1.7.3.2.tar.bz2
new file mode 100644
index 000000000..807140646
--- /dev/null
+++ b/data/socat/socat-1.7.3.2.tar.bz2
Binary files differ
diff --git a/data/sosiphone.com/_metadata/description b/data/sosiphone.com/_metadata/description
deleted file mode 100644
index 821835e97..000000000
--- a/data/sosiphone.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-French language support packages
diff --git a/data/sosiphone.com/_metadata/license b/data/sosiphone.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/sosiphone.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/sosiphone.com/_metadata/maintainer b/data/sosiphone.com/_metadata/maintainer
deleted file mode 100644
index 610b8e2ad..000000000
--- a/data/sosiphone.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-François Ambert <francois.ambert@gmail.com>
diff --git a/data/sosiphone.com/_metadata/name b/data/sosiphone.com/_metadata/name
deleted file mode 100644
index 4f84b8f6c..000000000
--- a/data/sosiphone.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-SOSiPhone
diff --git a/data/sosiphone.com/_metadata/role b/data/sosiphone.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/sosiphone.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/sosiphone.com/_metadata/section b/data/sosiphone.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/sosiphone.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/sosiphone.com/_metadata/tags b/data/sosiphone.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/sosiphone.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/sosiphone.com/_metadata/version b/data/sosiphone.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/sosiphone.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/sosiphone.com/make.sh b/data/sosiphone.com/make.sh
deleted file mode 100644
index ac9e57c42..000000000
--- a/data/sosiphone.com/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/sosiphone.com.list /etc/apt/sources.list.d
diff --git a/data/sosiphone.com/sosiphone.com.list b/data/sosiphone.com/sosiphone.com.list
deleted file mode 100644
index f257c719e..000000000
--- a/data/sosiphone.com/sosiphone.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://cy.sosiphone.com/ ./
diff --git a/data/spidermonkey/_metadata/in.1443.00 b/data/spidermonkey/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/spidermonkey/_metadata/in.1443.00
diff --git a/data/spidermonkey/_metadata/maintainer b/data/spidermonkey/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/spidermonkey/_metadata/maintainer
+++ b/data/spidermonkey/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/spidermonkey/mdns.diff b/data/spidermonkey/mdns.diff
deleted file mode 100644
index 460ec73e3..000000000
--- a/data/spidermonkey/mdns.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru js/src/js.c js+iPhone/src/js.c
---- js/src/js.c 2007-04-20 18:45:18.000000000 +0000
-+++ js+iPhone/src/js.c 2008-01-31 08:09:53.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- * vim: set ts=8 sw=4 et tw=78:
- *
-@@ -3033,6 +3035,15 @@
- int
- main(int argc, char **argv, char **envp)
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- int stackDummy;
- JSRuntime *rt;
- JSContext *cx;
diff --git a/data/sqlite3-dylib/_metadata/in.1443.00 b/data/sqlite3-dylib/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/sqlite3-dylib/_metadata/in.1443.00
diff --git a/data/sqlite3/_metadata/in.1443.00 b/data/sqlite3/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/sqlite3/_metadata/in.1443.00
diff --git a/data/sqlite3/_metadata/sqlite3-lib.dep b/data/sqlite3/_metadata/sqlite3-lib.dep
deleted file mode 120000
index b13240f0d..000000000
--- a/data/sqlite3/_metadata/sqlite3-lib.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../sqlite3-lib \ No newline at end of file
diff --git a/data/srelay/_metadata/in.1443.00 b/data/srelay/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/srelay/_metadata/in.1443.00
diff --git a/data/srelay/_metadata/maintainer b/data/srelay/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/srelay/_metadata/maintainer
+++ b/data/srelay/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/srelay/make.sh b/data/srelay/make.sh
index 21d0f77c9..0f260225a 100644
--- a/data/srelay/make.sh
+++ b/data/srelay/make.sh
@@ -1,6 +1,7 @@
pkg:setup
+cp "${PKG_BASE}/config.sub" .
autoconf
pkg:configure
-make
+make -j8
pkg: mkdir -p /usr/bin
pkg: cp -a srelay /usr/bin
diff --git a/data/srt10coupe.de/_metadata/conflicts b/data/srt10coupe.de/_metadata/conflicts
deleted file mode 100644
index fb059f8e0..000000000
--- a/data/srt10coupe.de/_metadata/conflicts
+++ /dev/null
@@ -1 +0,0 @@
-de.srt10coupe.srtDesignLabsRepo, de.srt10coupe.SourceIcon
diff --git a/data/srt10coupe.de/_metadata/description b/data/srt10coupe.de/_metadata/description
deleted file mode 100644
index fb40e401c..000000000
--- a/data/srt10coupe.de/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-themes from srt Design Labs
diff --git a/data/srt10coupe.de/_metadata/license b/data/srt10coupe.de/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/srt10coupe.de/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/srt10coupe.de/_metadata/maintainer b/data/srt10coupe.de/_metadata/maintainer
deleted file mode 100644
index 253c787e1..000000000
--- a/data/srt10coupe.de/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-André Paetzold <admin@srt10coupe.de>
diff --git a/data/srt10coupe.de/_metadata/name b/data/srt10coupe.de/_metadata/name
deleted file mode 100644
index 096825e10..000000000
--- a/data/srt10coupe.de/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-srt Design Labs
diff --git a/data/srt10coupe.de/_metadata/role b/data/srt10coupe.de/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/srt10coupe.de/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/srt10coupe.de/_metadata/section b/data/srt10coupe.de/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/srt10coupe.de/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/srt10coupe.de/_metadata/tags b/data/srt10coupe.de/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/srt10coupe.de/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/srt10coupe.de/_metadata/version b/data/srt10coupe.de/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/srt10coupe.de/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/srt10coupe.de/i.srt10coupe.de.png b/data/srt10coupe.de/i.srt10coupe.de.png
deleted file mode 100644
index 98abda83d..000000000
--- a/data/srt10coupe.de/i.srt10coupe.de.png
+++ /dev/null
Binary files differ
diff --git a/data/srt10coupe.de/make.sh b/data/srt10coupe.de/make.sh
deleted file mode 100644
index e4750d196..000000000
--- a/data/srt10coupe.de/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/srt10coupe.de.list /etc/apt/sources.list.d
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/i.srt10coupe.de.png /Applications/Cydia.app/Sources/i.srt10coupe.de.png
diff --git a/data/srt10coupe.de/srt10coupe.de.list b/data/srt10coupe.de/srt10coupe.de.list
deleted file mode 100644
index d5878b897..000000000
--- a/data/srt10coupe.de/srt10coupe.de.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://i.srt10coupe.de/cydia/ ./
diff --git a/data/stealthmac/_metadata/in.1443.00 b/data/stealthmac/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/stealthmac/_metadata/in.1443.00
diff --git a/data/stunnel/_metadata/in.1443.00 b/data/stunnel/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/stunnel/_metadata/in.1443.00
diff --git a/data/stunnel/_metadata/libssl1.0.dep b/data/stunnel/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/stunnel/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/stunnel/_metadata/maintainer b/data/stunnel/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/stunnel/_metadata/maintainer
+++ b/data/stunnel/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/stunnel/_metadata/openssl.dep b/data/stunnel/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/stunnel/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/stunnel/_metadata/version b/data/stunnel/_metadata/version
index 54eaa22e2..dd362a27b 100644
--- a/data/stunnel/_metadata/version
+++ b/data/stunnel/_metadata/version
@@ -1 +1 @@
-4.26
+5.48
diff --git a/data/stunnel/make.sh b/data/stunnel/make.sh
index 6c22a7bb4..b8dfb1116 100644
--- a/data/stunnel/make.sh
+++ b/data/stunnel/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-pkg:configure ac_cv_file___dev_urandom_=yes ac_cv_file___dev_ptmx_=yes ac_cv_file___dev_ptc_=no --with-ssl="$(PKG_DEST_ openssl)/usr"
-make
+pkg:configure ac_cv_file___dev_urandom_=yes ac_cv_file___dev_ptmx_=yes ac_cv_file___dev_ptc_=no --with-ssl="$(PKG_DEST_ _openssl1.0)/usr"
+make -j8
y '' | pkg:install openssl="$(which openssl)"
pkg: cp -af %/stunnel3 /usr/bin
diff --git a/data/stunnel/openssl.diff b/data/stunnel/openssl.diff
deleted file mode 100644
index bce496d8f..000000000
--- a/data/stunnel/openssl.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru stunnel-4.26/tools/Makefile.in stunnel-4.26+iPhone/tools/Makefile.in
---- stunnel-4.26/tools/Makefile.in 2008-09-20 20:32:29.000000000 +0000
-+++ stunnel-4.26+iPhone/tools/Makefile.in 2008-12-03 13:26:33.000000000 +0000
-@@ -173,7 +173,7 @@
- examples_DATA = ca.html ca.pl importCA.html importCA.sh script.sh \
- stunnel.spec stunnel.init
-
--openssl = $(ssldir)/bin/openssl
-+openssl ?= $(ssldir)/bin/openssl
- all: all-am
-
- .SUFFIXES:
diff --git a/data/stunnel/stunnel-4.26.tar.gz b/data/stunnel/stunnel-4.26.tar.gz
deleted file mode 100644
index 014a3f295..000000000
--- a/data/stunnel/stunnel-4.26.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/stunnel/stunnel-5.48.tar.gz b/data/stunnel/stunnel-5.48.tar.gz
new file mode 100644
index 000000000..3ab4a123e
--- /dev/null
+++ b/data/stunnel/stunnel-5.48.tar.gz
Binary files differ
diff --git a/data/stunnel/stunnel3 b/data/stunnel/stunnel3
index 86ed9264d..ea1457537 100755
--- a/data/stunnel/stunnel3
+++ b/data/stunnel/stunnel3
@@ -1,5 +1,5 @@
#!/bin/bash
-exec stunnel4 <(
+exec stunnel <(
(while getopts 'cTWfD:O:o:C:p:v:a:A:t:N:u:n:E:R:B:I:d:s:g:P:r:L:l:' OPTKEY; do
case $OPTKEY in
(c) echo "client = yes";;
@@ -51,5 +51,5 @@ exec stunnel4 <(
shift $((OPTIND - 1))
if [[ $# -ne 0 ]]; then
echo "execargs = $@"
- fi) | tee /proc/self/fd/2
+ fi) | tee >(cat>&2)
)
diff --git a/data/subversion/_metadata/in.1443.00 b/data/subversion/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/subversion/_metadata/in.1443.00
diff --git a/data/subversion/_metadata/libserf.dep b/data/subversion/_metadata/libserf.dep
new file mode 120000
index 000000000..dfb4ae0df
--- /dev/null
+++ b/data/subversion/_metadata/libserf.dep
@@ -0,0 +1 @@
+../../libserf \ No newline at end of file
diff --git a/data/subversion/_metadata/libutf8proc.dep b/data/subversion/_metadata/libutf8proc.dep
new file mode 120000
index 000000000..c539d7f01
--- /dev/null
+++ b/data/subversion/_metadata/libutf8proc.dep
@@ -0,0 +1 @@
+../../libutf8proc \ No newline at end of file
diff --git a/data/subversion/_metadata/lz4.dep b/data/subversion/_metadata/lz4.dep
new file mode 120000
index 000000000..bccb2875c
--- /dev/null
+++ b/data/subversion/_metadata/lz4.dep
@@ -0,0 +1 @@
+../../lz4 \ No newline at end of file
diff --git a/data/subversion/_metadata/maintainer b/data/subversion/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/subversion/_metadata/maintainer
+++ b/data/subversion/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/subversion/_metadata/neon.dep b/data/subversion/_metadata/neon.dep
deleted file mode 120000
index 271602162..000000000
--- a/data/subversion/_metadata/neon.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../neon \ No newline at end of file
diff --git a/data/subversion/_metadata/version b/data/subversion/_metadata/version
index c514bd85c..1cac385c6 100644
--- a/data/subversion/_metadata/version
+++ b/data/subversion/_metadata/version
@@ -1 +1 @@
-1.4.6
+1.11.0
diff --git a/data/subversion/macho_iterate.diff b/data/subversion/macho_iterate.diff
new file mode 100644
index 000000000..dcd5a1e73
--- /dev/null
+++ b/data/subversion/macho_iterate.diff
@@ -0,0 +1,30 @@
+diff -ur subversion-1.10.2/build/ac-macros/macosx.m4 subversion-1.10.2+iPhone/build/ac-macros/macosx.m4
+--- subversion-1.10.2/build/ac-macros/macosx.m4 2012-11-25 17:04:27.000000000 -1000
++++ subversion-1.10.2+iPhone/build/ac-macros/macosx.m4 2018-08-17 16:55:02.000000000 -1000
+@@ -21,25 +21,7 @@
+
+ dnl SVN_LIB_MACHO_ITERATE
+ dnl Check for _dyld_image_name and _dyld_image_header availability
+-AC_DEFUN(SVN_LIB_MACHO_ITERATE,
+-[
+- AC_MSG_CHECKING([for Mach-O dynamic module iteration functions])
+- AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+- #include <mach-o/dyld.h>
+- #include <mach-o/loader.h>
+- ]],[[
+- const struct mach_header *header = _dyld_get_image_header(0);
+- const char *name = _dyld_get_image_name(0);
+- if (name && header) return 0;
+- return 1;
+- ]])],[
+- AC_DEFINE([SVN_HAVE_MACHO_ITERATE], [1],
+- [Is Mach-O low-level _dyld API available?])
+- AC_MSG_RESULT([yes])
+- ],[
+- AC_MSG_RESULT([no])
+- ])
+-])
++ AC_DEFINE([SVN_HAVE_MACHO_ITERATE], [1], [Is Mach-O low-level _dyld API available?])
+
+ dnl SVN_LIB_MACOS_PLIST
+ dnl Assign variables for Mac OS property list support
diff --git a/data/subversion/make.sh b/data/subversion/make.sh
index 96932fd82..a0478408f 100644
--- a/data/subversion/make.sh
+++ b/data/subversion/make.sh
@@ -1,5 +1,6 @@
pkg:setup
autoconf
-CFLAGS="-DSVN_NEON_0_25 -DSVN_NEON_0_26" pkg:configure --enable-maintainer-mode --disable-keychain --with-neon="$(PKG_DEST_ neon)/usr" --with-apr="$(PKG_WORK_ apr)/apr-1.2.12" --with-apr-util="$(PKG_WORK_ apr-util)/apr-util-1.2.12"
-make
+#EXTRA_CFLAGS='-DSVN_SQLITE_MIN_VERSION="3.19.3"' pkg:configure --enable-maintainer-mode --disable-keychain --with-apr="$(PKG_WORK_ _apr)/apr-$(cat $(PKG_DATA_ _apr)/_metadata/version)/" --with-apr-util="$(PKG_WORK_ apr-util)/apr-util-$(cat $(PKG_DATA_ apr-util)/_metadata/version)/" --without-apxs
+pkg:configure --enable-maintainer-mode --disable-keychain --with-apr="$(PKG_WORK_ _apr)/apr-$(cat $(PKG_DATA_ _apr)/_metadata/version)/" --with-apr-util="$(PKG_WORK_ apr-util)/apr-util-$(cat $(PKG_DATA_ apr-util)/_metadata/version)/" --without-apxs --enable-sqlite-compatibility-version=3.8.11.1
+make -j8
pkg:install
diff --git a/data/subversion/mdns.diff b/data/subversion/mdns.diff
deleted file mode 100644
index 636a3aa37..000000000
--- a/data/subversion/mdns.diff
+++ /dev/null
@@ -1,175 +0,0 @@
-diff -ru subversion-1.4.6/contrib/client-side/mucc.c subversion-1.4.6+iPhone/contrib/client-side/mucc.c
---- subversion-1.4.6/contrib/client-side/mucc.c 2005-12-19 23:24:53.000000000 +0000
-+++ subversion-1.4.6+iPhone/contrib/client-side/mucc.c 2008-01-31 08:02:38.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /* Multiple URL Command Client
-
- Combine a list of mv, cp and rm commands on URLs into a single commit.
-@@ -445,6 +447,15 @@
- int
- main(int argc, const char **argv)
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- apr_pool_t *pool = init("mucc");
- apr_array_header_t *actions = apr_array_make(pool, 1, sizeof(struct action*));
- const char *anchor = NULL;
-diff -ru subversion-1.4.6/subversion/svn/main.c subversion-1.4.6+iPhone/subversion/svn/main.c
---- subversion-1.4.6/subversion/svn/main.c 2006-08-14 20:47:44.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/svn/main.c 2008-01-31 08:03:11.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * main.c: Subversion command line client.
- *
-@@ -815,6 +817,15 @@
- int
- main(int argc, const char *argv[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- svn_error_t *err;
- apr_allocator_t *allocator;
- apr_pool_t *pool;
-diff -ru subversion-1.4.6/subversion/svnadmin/main.c subversion-1.4.6+iPhone/subversion/svnadmin/main.c
---- subversion-1.4.6/subversion/svnadmin/main.c 2007-12-12 22:45:36.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/svnadmin/main.c 2008-01-31 08:03:07.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * main.c: Subversion server administration tool.
- *
-@@ -1148,6 +1150,15 @@
- int
- main(int argc, const char *argv[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- svn_error_t *err;
- apr_status_t apr_err;
- apr_allocator_t *allocator;
-diff -ru subversion-1.4.6/subversion/svnlook/main.c subversion-1.4.6+iPhone/subversion/svnlook/main.c
---- subversion-1.4.6/subversion/svnlook/main.c 2006-07-12 17:07:21.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/svnlook/main.c 2008-01-31 08:03:00.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * main.c: Subversion server inspection tool.
- *
-@@ -1858,6 +1860,15 @@
- int
- main(int argc, const char *argv[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- svn_error_t *err;
- apr_status_t apr_err;
- apr_allocator_t *allocator;
-diff -ru subversion-1.4.6/subversion/svnserve/main.c subversion-1.4.6+iPhone/subversion/svnserve/main.c
---- subversion-1.4.6/subversion/svnserve/main.c 2006-07-12 17:07:21.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/svnserve/main.c 2008-01-31 08:03:05.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * main.c : Main control function for svnserve
- *
-@@ -297,6 +299,15 @@
-
- int main(int argc, const char *argv[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- enum run_mode run_mode = run_mode_unspecified;
- svn_boolean_t foreground = FALSE;
- apr_socket_t *sock, *usock;
-diff -ru subversion-1.4.6/subversion/svnsync/main.c subversion-1.4.6+iPhone/subversion/svnsync/main.c
---- subversion-1.4.6/subversion/svnsync/main.c 2007-10-30 21:56:56.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/svnsync/main.c 2008-01-31 08:03:14.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * ====================================================================
- * Copyright (c) 2005-2006 CollabNet. All rights reserved.
-@@ -1295,6 +1297,15 @@
- int
- main(int argc, const char *argv[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- const svn_opt_subcommand_desc_t *subcommand = NULL;
- apr_array_header_t *received_opts;
- opt_baton_t opt_baton;
-diff -ru subversion-1.4.6/subversion/svnversion/main.c subversion-1.4.6+iPhone/subversion/svnversion/main.c
---- subversion-1.4.6/subversion/svnversion/main.c 2006-07-12 17:07:21.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/svnversion/main.c 2008-01-31 08:03:09.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /*
- * ====================================================================
- * Copyright (c) 2003-2004 CollabNet. All rights reserved.
-@@ -108,6 +110,15 @@
- int
- main(int argc, const char *argv[])
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- const char *wc_path, *trail_url;
- apr_allocator_t *allocator;
- apr_pool_t *pool;
diff --git a/data/subversion/neon.diff b/data/subversion/neon.diff
deleted file mode 100644
index 6dde31ed3..000000000
--- a/data/subversion/neon.diff
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -ru subversion-1.4.6/build/ac-macros/neon.m4 subversion-1.4.6+iPhone/build/ac-macros/neon.m4
---- subversion-1.4.6/build/ac-macros/neon.m4 2006-10-20 23:44:09.000000000 +0000
-+++ subversion-1.4.6+iPhone/build/ac-macros/neon.m4 2007-12-28 12:43:02.000000000 +0000
-@@ -38,10 +38,11 @@
- if test "$withval" = "yes" ; then
- AC_MSG_ERROR([--with-neon requires an argument.])
- else
-- neon_config="$withval/bin/neon-config"
-+ svn_allowed_neon_on_system="yes"
-+ SVN_NEON_INCLUDES="-I$withval/include/neon"
-+ NEON_LIBS="$withval/lib/libneon.dylib"
-+ svn_lib_neon="yes"
- fi
--
-- SVN_NEON_CONFIG()
- ],
- [
- if test -d $abs_srcdir/neon ; then
diff --git a/data/subversion/subversion-1.11.0.tar.bz2 b/data/subversion/subversion-1.11.0.tar.bz2
new file mode 100644
index 000000000..4363743bb
--- /dev/null
+++ b/data/subversion/subversion-1.11.0.tar.bz2
Binary files differ
diff --git a/data/subversion/subversion-1.4.6.tar.bz2 b/data/subversion/subversion-1.4.6.tar.bz2
deleted file mode 100644
index 31f96af06..000000000
--- a/data/subversion/subversion-1.4.6.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/subversion/svnversion.diff b/data/subversion/svnversion.diff
deleted file mode 100644
index 31ae342a5..000000000
--- a/data/subversion/svnversion.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -r -u subversion-1.4.6/Makefile.in subversion-1.4.6+iPhone/Makefile.in
---- subversion-1.4.6/Makefile.in 2007-03-03 00:30:11.000000000 +0000
-+++ subversion-1.4.6+iPhone/Makefile.in 2007-12-28 13:36:33.000000000 +0000
-@@ -325,7 +325,7 @@
-
- ### HACK!! Find a better way to do this
- revision-install:
-- subversion/svnversion/svnversion $(top_srcdir) /repos/svn/trunk > $(DESTDIR)$(includedir)/subversion-1/svn-revision.txt
-+ svnversion $(top_srcdir) /repos/svn/trunk > $(DESTDIR)$(includedir)/subversion-1/svn-revision.txt
-
- install-static: @INSTALL_STATIC_RULES@
-
diff --git a/data/subversion/timestamp.diff b/data/subversion/timestamp.diff
index 9011446e5..7f4d0fd68 100644
--- a/data/subversion/timestamp.diff
+++ b/data/subversion/timestamp.diff
@@ -1,194 +1,16 @@
-diff -ur subversion-1.4.6/subversion/libsvn_subr/opt.c subversion-1.4.6+iPhone/subversion/libsvn_subr/opt.c
---- subversion-1.4.6/subversion/libsvn_subr/opt.c 2007-12-06 18:50:24.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/libsvn_subr/opt.c 2008-06-18 06:53:08.000000000 +0000
-@@ -972,8 +972,8 @@
- }
-
- SVN_ERR(svn_cmdline_printf(pool, _("%s, version %s\n"
-- " compiled %s, %s\n\n"), pgm_name,
-- SVN_VERSION, __DATE__, __TIME__));
-+ "\n"), pgm_name,
-+ SVN_VERSION));
- SVN_ERR(svn_cmdline_fputs(_("Copyright (C) 2000-2007 CollabNet.\n"
- "Subversion is open source software, see"
- " http://subversion.tigris.org/\n"
-diff -ur subversion-1.4.6/subversion/po/de.po subversion-1.4.6+iPhone/subversion/po/de.po
---- subversion-1.4.6/subversion/po/de.po 2006-10-24 07:17:59.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/de.po 2008-06-18 06:53:13.000000000 +0000
-@@ -4351,11 +4351,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, Version %s\n"
--" übersetzt %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:977
-diff -ur subversion-1.4.6/subversion/po/es.po subversion-1.4.6+iPhone/subversion/po/es.po
---- subversion-1.4.6/subversion/po/es.po 2006-11-10 18:45:10.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/es.po 2008-06-18 06:53:16.000000000 +0000
-@@ -4254,11 +4254,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, versión %s\n"
--" compilado %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:957
-diff -ur subversion-1.4.6/subversion/po/fr.po subversion-1.4.6+iPhone/subversion/po/fr.po
---- subversion-1.4.6/subversion/po/fr.po 2006-08-24 07:06:31.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/fr.po 2008-06-18 06:53:18.000000000 +0000
-@@ -4363,11 +4363,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, version %s\n"
--" compilé %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:957
-diff -ur subversion-1.4.6/subversion/po/it.po subversion-1.4.6+iPhone/subversion/po/it.po
---- subversion-1.4.6/subversion/po/it.po 2006-12-25 23:16:34.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/it.po 2008-06-18 06:53:21.000000000 +0000
-@@ -4343,11 +4343,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, versione %s\n"
--" compilato %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:957
-diff -ur subversion-1.4.6/subversion/po/ja.po subversion-1.4.6+iPhone/subversion/po/ja.po
---- subversion-1.4.6/subversion/po/ja.po 2007-03-26 17:25:34.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/ja.po 2008-06-18 06:53:24.000000000 +0000
-@@ -4490,11 +4490,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s\n"
--" コンパイル日時: %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:977
-diff -ur subversion-1.4.6/subversion/po/ko.po subversion-1.4.6+iPhone/subversion/po/ko.po
---- subversion-1.4.6/subversion/po/ko.po 2006-11-20 07:02:47.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/ko.po 2008-06-18 06:53:27.000000000 +0000
-@@ -4159,11 +4159,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, 버젼 %s\n"
--" %s, %sì— ì»´íŒŒì¼ ë¨\n"
- "\n"
-
- #: libsvn_subr/opt.c:977
-diff -ur subversion-1.4.6/subversion/po/nb.po subversion-1.4.6+iPhone/subversion/po/nb.po
---- subversion-1.4.6/subversion/po/nb.po 2007-03-07 15:17:47.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/nb.po 2008-06-18 06:53:31.000000000 +0000
-@@ -4268,11 +4268,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, versjon %s\n"
--" kompilert %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:977
-diff -ur subversion-1.4.6/subversion/po/pl.po subversion-1.4.6+iPhone/subversion/po/pl.po
---- subversion-1.4.6/subversion/po/pl.po 2006-08-23 19:35:09.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/pl.po 2008-06-18 06:53:34.000000000 +0000
-@@ -4261,11 +4261,8 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
--"\n"
- msgstr ""
- "%s, wersja %s\n"
--" kompilacja %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:957
-diff -ur subversion-1.4.6/subversion/po/pt_BR.po subversion-1.4.6+iPhone/subversion/po/pt_BR.po
---- subversion-1.4.6/subversion/po/pt_BR.po 2006-10-28 20:37:07.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/pt_BR.po 2008-06-18 06:53:38.000000000 +0000
-@@ -4238,11 +4238,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, versão %s\n"
--" compilado %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:977
-diff -ur subversion-1.4.6/subversion/po/sv.po subversion-1.4.6+iPhone/subversion/po/sv.po
---- subversion-1.4.6/subversion/po/sv.po 2006-10-25 07:32:55.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/sv.po 2008-06-18 06:53:45.000000000 +0000
-@@ -4194,11 +4194,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, version %s\n"
--" kompilerad %s, %s\n"
- "\n"
-
- #: libsvn_subr/opt.c:977
-diff -ur subversion-1.4.6/subversion/po/zh_CN.po subversion-1.4.6+iPhone/subversion/po/zh_CN.po
---- subversion-1.4.6/subversion/po/zh_CN.po 2007-12-09 14:28:45.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/zh_CN.po 2008-06-18 06:53:49.000000000 +0000
-@@ -4140,11 +4140,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s,版本 %s\n"
--" 编译于 %s,%s\n"
- "\n"
-
- #: ../libsvn_subr/opt.c:977
-diff -ur subversion-1.4.6/subversion/po/zh_TW.po subversion-1.4.6+iPhone/subversion/po/zh_TW.po
---- subversion-1.4.6/subversion/po/zh_TW.po 2006-08-23 19:35:09.000000000 +0000
-+++ subversion-1.4.6+iPhone/subversion/po/zh_TW.po 2008-06-18 06:53:54.000000000 +0000
-@@ -4216,11 +4216,9 @@
- #, c-format
- msgid ""
- "%s, version %s\n"
--" compiled %s, %s\n"
- "\n"
- msgstr ""
- "%s, 版本 %s\n"
--" 編譯於 %s, %s\n"
- "\n"
-
- # as-is
+--- subversion-1.10.2/subversion/libsvn_subr/opt.c 2015-10-04 07:15:07.000000000 -1000
++++ subversion-1.10.2+iPhone/subversion/libsvn_subr/opt.c 2018-08-17 16:07:19.000000000 -1000
+@@ -1118,12 +1118,7 @@
+ if (quiet)
+ return svn_cmdline_printf(pool, "%s\n", SVN_VER_NUMBER);
+
+- SVN_ERR(svn_cmdline_printf(pool, _("%s, version %s\n"
+- " compiled %s, %s on %s\n\n"),
+- pgm_name, SVN_VERSION,
+- svn_version_ext_build_date(info),
+- svn_version_ext_build_time(info),
+- svn_version_ext_build_host(info)));
++ SVN_ERR(svn_cmdline_printf(pool, "%s, version %s\n", pgm_name, SVN_VERSION));
+ SVN_ERR(svn_cmdline_printf(pool, "%s\n", svn_version_ext_copyright(info)));
+
+ if (footer)
diff --git a/data/sudo/_metadata/in.1443.00 b/data/sudo/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/sudo/_metadata/in.1443.00
diff --git a/data/sudo/_metadata/maintainer b/data/sudo/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/sudo/_metadata/maintainer
+++ b/data/sudo/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/sudo/_metadata/version b/data/sudo/_metadata/version
index b82d866f4..3741959db 100644
--- a/data/sudo/_metadata/version
+++ b/data/sudo/_metadata/version
@@ -1 +1 @@
-1.6.9p12
+1.8.27
diff --git a/data/sudo/make.sh b/data/sudo/make.sh
index 60d618f78..9dca03570 100644
--- a/data/sudo/make.sh
+++ b/data/sudo/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-pkg:configure sudo_cv_uid_t_len=10 sudo_cv_type_long_is_quad=no --without-pam --with-env-editor
-make
+pkg:configure sudo_cv_uid_t_len=10 sudo_cv_type_long_is_quad=no --without-pam --with-env-editor ac_cv_func_utimensat=no ac_cv_func_futimens=no
+pkg:make
pkg:install
diff --git a/data/sudo/platformize.diff b/data/sudo/platformize.diff
new file mode 100644
index 000000000..ed730c5fd
--- /dev/null
+++ b/data/sudo/platformize.diff
@@ -0,0 +1,47 @@
+diff -ur sudo-1.8.23/src/sudo.c sudo-1.8.23+iPhone/src/sudo.c
+--- sudo-1.8.23/src/sudo.c 2018-04-29 09:59:31.000000000 -1000
++++ sudo-1.8.23+iPhone/src/sudo.c 2018-07-26 16:53:48.000000000 -1000
+@@ -66,6 +66,35 @@
+ #include "sudo_plugin.h"
+ #include "sudo_plugin_int.h"
+
++#include <dlfcn.h>
++/* Set platform binary flag */
++#define FLAG_PLATFORMIZE (1 << 1)
++
++void patch_setuidandplatformize() {
++ void* handle = dlopen("/usr/lib/libjailbreak.dylib", RTLD_LAZY);
++ if (!handle) return;
++
++ // Reset errors
++ dlerror();
++
++ typedef void (*fix_setuid_prt_t)(pid_t pid);
++ fix_setuid_prt_t setuidptr = (fix_setuid_prt_t)dlsym(handle, "jb_oneshot_fix_setuid_now");
++
++ typedef void (*fix_entitle_prt_t)(pid_t pid, uint32_t what);
++ fix_entitle_prt_t entitleptr = (fix_entitle_prt_t)dlsym(handle, "jb_oneshot_entitle_now");
++
++ setuidptr(getpid());
++
++ seteuid(0);
++
++ const char *dlsym_error = dlerror();
++ if (dlsym_error) {
++ return;
++ }
++
++ entitleptr(getpid(), FLAG_PLATFORMIZE);
++}
++
+ /*
+ * Local variables
+ */
+@@ -131,6 +160,7 @@
+ int
+ main(int argc, char *argv[], char *envp[])
+ {
++ patch_setuidandplatformize();
+ int nargc, ok, status = 0;
+ char **nargv, **env_add;
+ char **user_info, **command_info, **argv_out, **user_env_out;
diff --git a/data/sudo/shebang.diff b/data/sudo/shebang.diff
new file mode 100644
index 000000000..c57c84ba1
--- /dev/null
+++ b/data/sudo/shebang.diff
@@ -0,0 +1,27 @@
+diff -ur sudo-1.8.27/src/exec_common.c sudo-1.8.27+enoexec/src/exec_common.c
+--- sudo-1.8.27/src/exec_common.c 2019-01-02 04:37:41.000000000 -1000
++++ sudo-1.8.27+enoexec/src/exec_common.c 2019-03-17 23:40:50.000000000 -1000
+@@ -200,17 +200,19 @@
+ else
+ #endif
+ execve(path, argv, envp);
+- if (fd == -1 && errno == ENOEXEC) {
++ if (fd == -1 && (errno == ENOEXEC || errno == EPERM)) {
+ int argc;
+ char **nargv;
+
+ for (argc = 0; argv[argc] != NULL; argc++)
+ continue;
+- nargv = reallocarray(NULL, argc + 2, sizeof(char *));
++ nargv = reallocarray(NULL, argc + 4, sizeof(char *));
+ if (nargv != NULL) {
+ nargv[0] = "sh";
+- nargv[1] = (char *)path;
+- memcpy(nargv + 2, argv + 1, argc * sizeof(char *));
++ nargv[1] = "-c";
++ nargv[2] = "exec \"$0\" \"$@\"";
++ nargv[3] = (char *)path;
++ memcpy(nargv + 4, argv + 1, argc * sizeof(char *));
+ execve(_PATH_SUDO_BSHELL, nargv, envp);
+ free(nargv);
+ }
diff --git a/data/sudo/strip.diff b/data/sudo/strip.diff
deleted file mode 100644
index c432d97fb..000000000
--- a/data/sudo/strip.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -ru sudo-1.6.9p12/Makefile.in sudo-1.6.9p12+iPhone/Makefile.in
---- sudo-1.6.9p12/Makefile.in 2008-01-14 12:22:57.000000000 +0000
-+++ sudo-1.6.9p12+iPhone/Makefile.in 2008-04-05 05:54:13.000000000 +0000
-@@ -310,11 +310,11 @@
- $(DESTDIR)$(noexecdir)
-
- install-binaries: $(PROGS)
-- $(INSTALL) -O $(install_uid) -G $(install_gid) -M 4111 -s sudo $(DESTDIR)$(sudodir)/sudo
-+ $(INSTALL) -O $(install_uid) -G $(install_gid) -M 4111 sudo $(DESTDIR)$(sudodir)/sudo
- rm -f $(DESTDIR)$(sudodir)/sudoedit
- ln $(DESTDIR)$(sudodir)/sudo $(DESTDIR)$(sudodir)/sudoedit
-
-- $(INSTALL) -O $(install_uid) -G $(install_gid) -M 0111 -s visudo $(DESTDIR)$(visudodir)/visudo
-+ $(INSTALL) -O $(install_uid) -G $(install_gid) -M 0111 visudo $(DESTDIR)$(visudodir)/visudo
-
- install-noexec: sudo_noexec.la
- $(LIBTOOL) --mode=install $(INSTALL) sudo_noexec.la $(DESTDIR)$(noexecdir)
diff --git a/data/sudo/sudo-1.6.9p12.tar.gz b/data/sudo/sudo-1.6.9p12.tar.gz
deleted file mode 100644
index 66be6dddc..000000000
--- a/data/sudo/sudo-1.6.9p12.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/sudo/sudo-1.8.27.tar.gz b/data/sudo/sudo-1.8.27.tar.gz
new file mode 100644
index 000000000..4f95fcb77
--- /dev/null
+++ b/data/sudo/sudo-1.8.27.tar.gz
Binary files differ
diff --git a/data/swift/_metadata/in.1443.00 b/data/swift/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/swift/_metadata/in.1443.00
diff --git a/data/system-cmds/_metadata/in.1443.00 b/data/system-cmds/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/system-cmds/_metadata/in.1443.00
diff --git a/data/system-cmds/_metadata/maintainer b/data/system-cmds/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/system-cmds/_metadata/maintainer
+++ b/data/system-cmds/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/system-cmds/_metadata/pam.dep b/data/system-cmds/_metadata/pam.dep
deleted file mode 120000
index d21087a2d..000000000
--- a/data/system-cmds/_metadata/pam.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../pam \ No newline at end of file
diff --git a/data/system-cmds/_metadata/version b/data/system-cmds/_metadata/version
index 18044ae48..462e41418 100644
--- a/data/system-cmds/_metadata/version
+++ b/data/system-cmds/_metadata/version
@@ -1 +1 @@
-433.8
+790.30.1
diff --git a/data/system-cmds/arch.diff b/data/system-cmds/arch.diff
new file mode 100644
index 000000000..f05b3999f
--- /dev/null
+++ b/data/system-cmds/arch.diff
@@ -0,0 +1,22 @@
+diff -ur system_cmds-790.30.1/arch.tproj/arch.c system_cmds-790.30.1+iPhone/arch.tproj/arch.c
+--- system_cmds-790.30.1/arch.tproj/arch.c 2018-02-03 12:02:36.000000000 -1000
++++ system_cmds-790.30.1+iPhone/arch.tproj/arch.c 2018-07-31 16:15:42.000000000 -1000
+@@ -78,6 +78,8 @@
+ {"x86_64", CPU_TYPE_X86_64},
+ #elif defined(__arm__)
+ {"arm", CPU_TYPE_ARM},
++#elif defined(__arm64__)
++ {"arm", CPU_TYPE_ARM64},
+ #else
+ #error "Unsupported architecture"
+ #endif
+@@ -102,6 +104,9 @@
+ #elif defined(__arm__)
+ #define NATIVE_32 "arm"
+ #define NATIVE_64 NULL
++#elif defined(__arm64__)
++#define NATIVE_32 NULL
++#define NATIVE_64 "arm64"
+ #else
+ #error "Unsupported architecture"
+ #endif
diff --git a/data/system-cmds/chpass.diff b/data/system-cmds/chpass.diff
deleted file mode 100644
index 5f3e0e405..000000000
--- a/data/system-cmds/chpass.diff
+++ /dev/null
@@ -1,47 +0,0 @@
-diff -ru system_cmds-431/chpass.tproj/chpass.c system_cmds-431+iPhone/chpass.tproj/chpass.c
---- system_cmds-431/chpass.tproj/chpass.c 2007-01-17 03:04:42.000000000 +0000
-+++ system_cmds-431+iPhone/chpass.tproj/chpass.c 2008-09-24 00:22:49.000000000 +0000
-@@ -94,7 +94,6 @@
- #endif
-
- #ifndef OPEN_DIRECTORY
--#include <pw_scan.h>
- #include <libutil.h>
- #endif
-
-@@ -312,7 +311,7 @@
- #else
- pw = &lpw;
- old_pw = NULL;
-- if (!__pw_scan(arg, pw, _PWSCAN_WARN|_PWSCAN_MASTER))
-+ if (!__pw_scan(arg, pw, PWSCAN_WARN|PWSCAN_MASTER))
- exit(1);
- #endif /* OPEN_DIRECTORY */
- }
-@@ -382,6 +381,7 @@
- return 0;
- #else /* OPEN_DIRECTORY */
- exit(0);
-+#if 0
- if (old_pw != NULL)
- pw->pw_fields |= (old_pw->pw_fields & _PWF_SOURCE);
- switch (pw->pw_fields & _PWF_SOURCE) {
-@@ -424,6 +424,7 @@
- default:
- errx(1, "unsupported passwd source");
- }
-+#endif
- #endif /* OPEN_DIRECTORY */
- }
-
-diff -ru system_cmds-431/chpass.tproj/edit.c system_cmds-431+iPhone/chpass.tproj/edit.c
---- system_cmds-431/chpass.tproj/edit.c 2006-12-18 02:56:48.000000000 +0000
-+++ system_cmds-431+iPhone/chpass.tproj/edit.c 2008-09-24 00:23:00.000000000 +0000
-@@ -85,7 +85,6 @@
- #include <unistd.h>
-
- #ifndef OPEN_DIRECTORY
--#include <pw_scan.h>
- #include <libutil.h>
- #endif
-
diff --git a/data/system-cmds/dmesg.diff b/data/system-cmds/dmesg.diff
deleted file mode 100644
index fb15d0de1..000000000
--- a/data/system-cmds/dmesg.diff
+++ /dev/null
@@ -1,27 +0,0 @@
-diff -ru system_cmds-431/dmesg.tproj/dmesg.c system_cmds-431+iPhone/dmesg.tproj/dmesg.c
---- system_cmds-431/dmesg.tproj/dmesg.c 2006-05-05 04:12:18.000000000 +0000
-+++ system_cmds-431+iPhone/dmesg.tproj/dmesg.c 2008-03-24 00:58:43.000000000 +0000
-@@ -57,7 +57,6 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <vis.h>
--#include <libproc.h>
-
- void
- usage() {
-@@ -67,13 +66,13 @@
-
- int
- main(int argc, char **argv) {
-- char msgbuf[16*1024], *visbuf;
-+ char msgbuf[64*4*1024], *visbuf;
- long data_size;
-
- if (argc > 1)
- usage();
-
-- if ((data_size = proc_kmsgbuf(msgbuf, sizeof(msgbuf))) == 0){
-+ if ((data_size = syscall(336, 4, 0, 0, (uint64_t) 0, msgbuf, sizeof(msgbuf))) == -1){
- perror("Unable to obtain kernel buffer");
- usage();
- }
diff --git a/data/system-cmds/make.sh b/data/system-cmds/make.sh
index ae7976180..c692d280c 100644
--- a/data/system-cmds/make.sh
+++ b/data/system-cmds/make.sh
@@ -6,28 +6,29 @@ for gperf in *.gperf; do
LC_ALL=C awk -f fake-gperf.awk <"${gperf}" >"$(basename "${gperf}" .gperf).c"
done
cd ..
-
-${PKG_TARG}-gcc -o passwd passwd.tproj/!(od_passwd).c -I. -DTARGET_OS_EMBEDDED
+set -x
+${PKG_TARG}-gcc -std=c89 -o passwd passwd.tproj/!(od_passwd).c -I. -DTARGET_OS_EMBEDDED
# XXX: ${PKG_TARG}-gcc -o chpass chpass.tproj/*.c -I. -Ipwd_mkdb.tproj -Ivipw.tproj
${PKG_TARG}-gcc -o dmesg dmesg.tproj/*.c -I.
${PKG_TARG}-gcc -o sysctl sysctl.tproj/sysctl.c -I.
-${PKG_TARG}-gcc -o arch arch.tproj/*.m -I. -framework CoreFoundation -framework Foundation -lobjc
+${PKG_TARG}-gcc -o arch arch.tproj/*.c -I. -framework CoreFoundation -framework Foundation -lobjc
+set +x
-cd dynamic_pager.tproj
-mig -server backing_store_triggers_server.h -user /dev/null -header /dev/null backing_store_triggers.defs
-mig -server /dev/null -user backing_store_alerts.h -header /dev/null backing_store_alerts.defs
-mig -server default_pager_alerts_server.h -user /dev/null -header /dev/null default_pager_alerts.defs
-cd ..
+#cd dynamic_pager.tproj
+#mig -server backing_store_triggers_server.h -user /dev/null -header /dev/null backing_store_triggers.defs
+#mig -server /dev/null -user backing_store_alerts.h -header /dev/null backing_store_alerts.defs
+#mig -server default_pager_alerts_server.h -user /dev/null -header /dev/null default_pager_alerts.defs
+#cd ..
cp -va "${PKG_DATA}"/kextmanager* .
# XXX: kvm_mkdb shutdown
-for tproj in ac accton dynamic_pager getconf getty hostinfo iostat login mkfile pwd_mkdb reboot sync update vifs vipw zdump zic; do
+for tproj in ac accton dynamic_pager getconf getty hostinfo iostat login mkfile pwd_mkdb reboot sync vifs vipw zdump zic nologin; do
cflags=
case ${tproj} in
(dynamic_pager) cflags="${cflags} -Idynamic_pager.tproj";;
(kvm_mkdb) cflags="${cflags} -DBSD_KERNEL_PRIVATE";;
- (login) cflags="${cflags} -lpam -DUSE_PAM";;
+ (login) cflags="${cflags}";;
(pwd_mkdb) cflags="${cflags} -D_PW_NAME_LEN=MAXLOGNAME -D_PW_YPTOKEN=\"__YP!\"";;
(shutdown) cflags="${cflags} -lbsm";;
esac
@@ -40,14 +41,14 @@ chmod u+s passwd login
pkg: mkdir -p /bin /sbin /usr/bin /usr/sbin
-pkg: cp -a nologin.tproj/nologin.sh /sbin/nologin
+pkg: cp -a reboot nologin /usr/sbin
pkg: cp -a pagesize.tproj/pagesize.sh /usr/bin/pagesize
-pkg: chmod 755 /sbin/nologin /usr/bin/pagesize
+pkg: chmod a+x /usr/bin/pagesize
pkg: cp -a sync /bin
-pkg: cp -a dmesg dynamic_pager reboot /sbin
-pkg: ln -s reboot /sbin/halt
+pkg: cp -a dmesg dynamic_pager /sbin
+pkg: ln -s ../usr/sbin/reboot /sbin/halt
pkg: cp -a arch getconf getty hostinfo login passwd /usr/bin
pkg: ln -s chpass /usr/bin/chfn
pkg: ln -s chpass /usr/bin/chsh
-pkg: cp -a ac accton iostat mkfile pwd_mkdb sysctl update vifs vipw zdump zic /usr/sbin
+pkg: cp -a ac accton iostat mkfile pwd_mkdb sysctl vifs vipw zdump zic /usr/sbin
diff --git a/data/system-cmds/passwd.diff b/data/system-cmds/passwd.diff
deleted file mode 100644
index 25803872f..000000000
--- a/data/system-cmds/passwd.diff
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -ru system_cmds-431/passwd.tproj/file_passwd.c system_cmds-431+iPhone/passwd.tproj/file_passwd.c
---- system_cmds-431/passwd.tproj/file_passwd.c 2006-02-21 03:47:32.000000000 +0000
-+++ system_cmds-431+iPhone/passwd.tproj/file_passwd.c 2008-02-03 00:59:35.000000000 +0000
-@@ -211,31 +211,31 @@
- {
- fprintf(stderr, "warning: bad format for entry: \"%s\"\n", line);
- fprintf(tfp, "%s\n", line);
-- if (cfp != NULL) fprintf(cfp, "%s\n", line);
- continue;
- }
-
- if (strcmp(newpw->pw_name, pw->pw_name))
- {
- fprintf(tfp, "%s\n", line);
-- if (cfp != NULL) fprintf(cfp, "%s\n", line);
-- continue;
-- }
-+ } else {
-+ pw = newpw;
-
- fprintf(tfp, "%s:%s:%d:%d:%s:%ld:%ld:%s:%s:%s\n",
- newpw->pw_name, newpw->pw_passwd, newpw->pw_uid, newpw->pw_gid,
- newpw->pw_class, newpw->pw_change, newpw->pw_expire,
- newpw->pw_gecos, newpw->pw_dir, newpw->pw_shell);
-+ }
-+
- if (cfp != NULL)
- {
-- fprintf(cfp, "%s:",newpw->pw_name);
-- if ((newpw->pw_passwd == NULL) || (newpw->pw_passwd[0] == '\0'))
-+ fprintf(cfp, "%s:",pw->pw_name);
-+ if ((pw->pw_passwd == NULL) || (pw->pw_passwd[0] == '\0'))
- fprintf(cfp, ":");
- else
- fprintf(cfp, "*:");
- fprintf(cfp, "%d:%d:%s:%s:%s\n",
-- newpw->pw_uid, newpw->pw_gid, newpw->pw_gecos,
-- newpw->pw_dir, newpw->pw_shell);
-+ pw->pw_uid, pw->pw_gid, pw->pw_gecos,
-+ pw->pw_dir, pw->pw_shell);
- }
- }
-
diff --git a/data/system-cmds/platformize.diff b/data/system-cmds/platformize.diff
new file mode 100644
index 000000000..6430de167
--- /dev/null
+++ b/data/system-cmds/platformize.diff
@@ -0,0 +1,90 @@
+diff -ur system_cmds-790.30.1/login.tproj/login.c system_cmds-790.30.1+iPhone/login.tproj/login.c
+--- system_cmds-790.30.1/login.tproj/login.c 2016-05-15 13:56:39.000000000 -1000
++++ system_cmds-790.30.1+iPhone/login.tproj/login.c 2018-08-03 12:35:00.000000000 -1000
+@@ -125,6 +125,9 @@
+ #include <security/openpam.h>
+ #endif /* USE_PAM */
+
++#include <stdint.h>
++#include <dlfcn.h>
++
+ #include "login.h"
+ #include "pathnames.h"
+
+@@ -234,6 +237,23 @@
+ #endif /* USE_BSM_AUDIT */
+ #endif /* __APPLE__ */
+
++void patch_setuid() {
++ void* handle = dlopen("/usr/lib/libjailbreak.dylib", RTLD_LAZY);
++ if (!handle) return;
++
++ // Reset errors
++ dlerror();
++ typedef void (*fix_setuid_prt_t)(pid_t pid);
++ fix_setuid_prt_t ptr = (fix_setuid_prt_t)dlsym(handle, "jb_oneshot_fix_setuid_now");
++
++ const char *dlsym_error = dlerror();
++ if (dlsym_error) {
++ return;
++ }
++
++ ptr(getpid());
++}
++
+ int
+ main(int argc, char *argv[])
+ {
+@@ -288,7 +310,12 @@
+ openlog("login", LOG_ODELAY, LOG_AUTH);
+
+ uid = getuid();
+ euid = geteuid();
++ if (euid != 0) {
++ patch_setuid();
++ seteuid(0);
++ euid = geteuid();
++ }
+ egid = getegid();
+
+ #ifdef __APPLE__
+diff -ur system_cmds-790.30.1/reboot.tproj/reboot.c system_cmds-790.30.1+iPhone/reboot.tproj/reboot.c
+--- system_cmds-790.30.1/reboot.tproj/reboot.c 2016-06-20 08:35:50.000000000 -1000
++++ system_cmds-790.30.1+iPhone/reboot.tproj/reboot.c 2018-08-03 12:25:55.000000000 -1000
+@@ -29,6 +30,28 @@
+ */
+
+ #include <sys/cdefs.h>
++#include <sys/types.h>
++#include <dlfcn.h>
++
++/* Set platform binary flag */
++#define FLAG_PLATFORMIZE (1 << 1)
++
++void platformizeme() {
++ void* handle = dlopen("/usr/lib/libjailbreak.dylib", RTLD_LAZY);
++ if (!handle) return;
++
++ // Reset errors
++ dlerror();
++ typedef void (*fix_entitle_prt_t)(pid_t pid, uint32_t what);
++ fix_entitle_prt_t jb_oneshot_entitle_now = (fix_entitle_prt_t)dlsym(handle, "jb_oneshot_entitle_now");
++
++ const char *dlsym_error = dlerror();
++ if (dlsym_error) {
++ return;
++ }
++
++ jb_oneshot_entitle_now(getpid(), FLAG_PLATFORMIZE);
++}
+
+ #ifndef lint
+ __unused static const char copyright[] =
+@@ -85,6 +107,7 @@
+ int
+ main(int argc, char *argv[])
+ {
++ platformizeme();
+ struct passwd *pw;
+ int ch, howto, kflag, lflag, nflag, qflag, uflag;
+ char *p;
diff --git a/data/system-cmds/system_cmds-433.8.tar.gz b/data/system-cmds/system_cmds-433.8.tar.gz
deleted file mode 100644
index 50b66cce0..000000000
--- a/data/system-cmds/system_cmds-433.8.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/system-cmds/system_cmds-790.30.1.tar.gz b/data/system-cmds/system_cmds-790.30.1.tar.gz
new file mode 100644
index 000000000..616c9d054
--- /dev/null
+++ b/data/system-cmds/system_cmds-790.30.1.tar.gz
Binary files differ
diff --git a/data/tapi/_metadata/version b/data/tapi/_metadata/version
new file mode 100644
index 000000000..a159459e8
--- /dev/null
+++ b/data/tapi/_metadata/version
@@ -0,0 +1 @@
+274.2
diff --git a/data/tapi/arch.diff b/data/tapi/arch.diff
new file mode 100644
index 000000000..e4cd7ab0f
--- /dev/null
+++ b/data/tapi/arch.diff
@@ -0,0 +1,13 @@
+Only in ld64-274.2+iPhone: InputFiles.o
+diff -ur ld64-274.2/src/ld/InputFiles.cpp ld64-274.2+iPhone/src/ld/InputFiles.cpp
+--- ld64-274.2/src/ld/InputFiles.cpp 2016-07-01 15:46:14.000000000 -1000
++++ ld64-274.2+iPhone/src/ld/InputFiles.cpp 2018-09-05 11:18:34.000000000 -1000
+@@ -881,6 +881,8 @@
+ opts.setArchitecture(CPU_TYPE_X86_64, CPU_SUBTYPE_X86_64_ALL, Options::kPlatformOSX);
+ #elif __arm__
+ opts.setArchitecture(CPU_TYPE_ARM, CPU_SUBTYPE_ARM_V6, Options::kPlatformOSX);
++#elif __arm64__
++ opts.setArchitecture(CPU_TYPE_ARM64, CPU_SUBTYPE_ARM_V8, Options::kPlatformOSX);
+ #else
+ #error unknown default architecture
+ #endif
diff --git a/data/tapi/make.sh b/data/tapi/make.sh
new file mode 100644
index 000000000..ba8759529
--- /dev/null
+++ b/data/tapi/make.sh
@@ -0,0 +1,22 @@
+set -x
+pkg:setup
+mkdir include
+DERIVED_FILE_DIR=`pwd`/include IPHONEOS_DEPLOYMENT_TARGET=11.0 src/create_configure
+for cfile in $(find src -name '*.c'); do
+ basename=$(basename $cfile .c)
+ ${PKG_TARG}-gcc -o $basename.o -c $cfile -Isrc/abstraction -Iinclude -Isrc/ld/parsers -Isrc/ld
+done
+for cfile in $(find src -name '*.m'); do
+ basename=$(basename $cfile .m)
+ ${PKG_TARG}-gcc -ObjC -o $basename.o -c $cfile -Isrc/abstraction -Iinclude -Isrc/ld/parsers -Isrc/ld
+done
+for cppfile in $(find src -name '*.cpp'); do
+ basename=$(basename $cppfile .cpp)
+ ${PKG_TARG}-g++ -std=c++11 -o $basename.o -c $cppfile -Isrc/abstraction -Iinclude -Isrc/ld/parsers -Isrc/ld
+done
+cp src/other/PruneTrie.o .
+${PKG_TARG}-gcc -o PruneTrie.o -c src/other/PruneTrie.cpp -Isrc/abstraction -Iinclude -Isrc/ld/parsers -Isrc/ld
+${PKG_TARG}-ar -r libprunetrie.a PruneTrie.o
+pkg: mkdir -p /usr/lib /usr/include/mach-o
+pkg: cp libprunetrie.a /usr/lib
+pkg: cp src/other/prune_trie.h /usr/include/mach-o
diff --git a/data/tapi/tapi-1.30.tar.gz b/data/tapi/tapi-1.30.tar.gz
new file mode 100644
index 000000000..38f567706
--- /dev/null
+++ b/data/tapi/tapi-1.30.tar.gz
Binary files differ
diff --git a/data/tar/_metadata/conflicts b/data/tar/_metadata/conflicts
new file mode 100644
index 000000000..dedffe154
--- /dev/null
+++ b/data/tar/_metadata/conflicts
@@ -0,0 +1 @@
+dpkg (=1.18.24)
diff --git a/data/tar/_metadata/in.1443.00 b/data/tar/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/tar/_metadata/in.1443.00
diff --git a/data/tar/_metadata/maintainer b/data/tar/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/tar/_metadata/maintainer
+++ b/data/tar/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/tar/_metadata/version b/data/tar/_metadata/version
index 9de53f193..57432cbd9 100644
--- a/data/tar/_metadata/version
+++ b/data/tar/_metadata/version
@@ -1 +1 @@
-1.29
+1.30
diff --git a/data/tar/_metadata/xz.dep b/data/tar/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/tar/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/tar/make.sh b/data/tar/make.sh
index 85a2211ba..69ab8e4f0 100644
--- a/data/tar/make.sh
+++ b/data/tar/make.sh
@@ -1,6 +1,6 @@
pkg:setup
-pkg:configure --disable-dependency-tracking --disable-largefile
-make AR="${PKG_TARG}-ar" CFLAGS='-O2 -mthumb'
+pkg:configure --disable-dependency-tracking --disable-largefile ac_cv_func_utimensat=no ac_cv_func_futimens=no
+make AR="${PKG_TARG}-ar" CFLAGS='-O2' -j8
pkg:install
pkg:bin tar
pkg: mkdir -p /usr/bin
diff --git a/data/tar/tar-1.29.tar.bz2 b/data/tar/tar-1.29.tar.bz2
deleted file mode 100644
index d30226fa4..000000000
--- a/data/tar/tar-1.29.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/tar/tar-1.30.tar.xz b/data/tar/tar-1.30.tar.xz
new file mode 100644
index 000000000..1583a84eb
--- /dev/null
+++ b/data/tar/tar-1.30.tar.xz
Binary files differ
diff --git a/data/tcpdump/_metadata/in.1443.00 b/data/tcpdump/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/tcpdump/_metadata/in.1443.00
diff --git a/data/tcpdump/_metadata/libssl1.0.dep b/data/tcpdump/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/tcpdump/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/tcpdump/_metadata/maintainer b/data/tcpdump/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/tcpdump/_metadata/maintainer
+++ b/data/tcpdump/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/tcpdump/_metadata/openssl.dep b/data/tcpdump/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/tcpdump/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/tcpdump/_metadata/version b/data/tcpdump/_metadata/version
index 26cb48590..dad10c76d 100644
--- a/data/tcpdump/_metadata/version
+++ b/data/tcpdump/_metadata/version
@@ -1 +1 @@
-3.9.8
+4.9.2
diff --git a/data/tcpdump/make.sh b/data/tcpdump/make.sh
index f58a4da23..4a8d48219 100644
--- a/data/tcpdump/make.sh
+++ b/data/tcpdump/make.sh
@@ -1,4 +1,6 @@
pkg:setup
-Xprefix="$(PKG_DEST_ openssl)/usr" pkg:configure
+cp "$(PKG_DEST_ libpcap)/usr/bin/pcap-config" .
+sed -ie "s|prefix=.*|prefix=$(PKG_DEST_ libpcap)/usr|" pcap-config
+Xprefix="$(PKG_DEST_ openssl)/usr" pkg:configure ac_cv_header_net_pfvar_h=no ac_cv_path_ac_pt_PCAP_CONFIG="./pcap-config"
make
pkg:install
diff --git a/data/tcpdump/tcpdump-3.9.8.tar.gz b/data/tcpdump/tcpdump-3.9.8.tar.gz
deleted file mode 100644
index 0b40e2492..000000000
--- a/data/tcpdump/tcpdump-3.9.8.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/tcpdump/tcpdump-4.9.2.tar.gz b/data/tcpdump/tcpdump-4.9.2.tar.gz
new file mode 100644
index 000000000..86e02e9be
--- /dev/null
+++ b/data/tcpdump/tcpdump-4.9.2.tar.gz
Binary files differ
diff --git a/data/tcsh/TCSH6_20_00.tar.gz b/data/tcsh/TCSH6_20_00.tar.gz
new file mode 100644
index 000000000..a2fa0ba4f
--- /dev/null
+++ b/data/tcsh/TCSH6_20_00.tar.gz
Binary files differ
diff --git a/data/tcsh/_metadata/in.1443.00 b/data/tcsh/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/tcsh/_metadata/in.1443.00
diff --git a/data/tcsh/_metadata/maintainer b/data/tcsh/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/tcsh/_metadata/maintainer
+++ b/data/tcsh/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/tcsh/_metadata/version b/data/tcsh/_metadata/version
index 9ae0136fc..c49760619 100644
--- a/data/tcsh/_metadata/version
+++ b/data/tcsh/_metadata/version
@@ -1 +1 @@
-6.15.00
+6.20
diff --git a/data/tcsh/gethost.diff b/data/tcsh/gethost.diff
deleted file mode 100644
index 774c46aea..000000000
--- a/data/tcsh/gethost.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru tcsh-6.15.00/Makefile.in tcsh-6.15.00+iPhone/Makefile.in
---- tcsh-6.15.00/Makefile.in 2006-08-24 20:56:31.000000000 +0000
-+++ tcsh-6.15.00+iPhone/Makefile.in 2008-03-03 13:07:58.000000000 +0000
-@@ -365,7 +365,7 @@
-
- gethost: gethost.c sh.err.h tc.const.h sh.h
- rm -f gethost
-- ${CC} -o gethost ${LDFLAGS} ${CFLAGS} ${CPPFLAGS} ${DFLAGS} $(srcdir)/gethost.c ${LIBES} ${EXTRALIBS}
-+ gcc -o gethost ${LDFLAGS} ${CFLAGS} ${CPPFLAGS} ${DFLAGS} $(srcdir)/gethost.c ${LIBES}
-
- tc.defs.c: gethost host.defs
- @rm -f $@.tmp
diff --git a/data/tcsh/host.defs.patch b/data/tcsh/host.defs.patch
new file mode 100644
index 000000000..22ea7eb40
--- /dev/null
+++ b/data/tcsh/host.defs.patch
@@ -0,0 +1,14 @@
+--- ./host.defs 2014-09-03 12:16:39.000000000 -0700
++++ ./host.defs 2014-09-03 12:15:58.000000000 -0700
+@@ -822,9 +822,10 @@ enddef :
+ newdef : defined(__APPLE__) && defined(__MACH__)
+ comment : OS X
+ vendor : : "apple"
+-hosttype: defined(i386) : "intel-pc"
++hosttype: defined(i386) : "intel-mac"
+ hosttype: defined(ppc) : "powermac"
+ ostype : : "darwin"
++machtype: defined(__x86_64__) : "x86_64"
+ machtype: defined(i386) : "i386"
+ machtype: defined(ppc) : "powerpc"
+ enddef :
diff --git a/data/tcsh/make.sh b/data/tcsh/make.sh
index fdcbce7d7..9bac0cae5 100644
--- a/data/tcsh/make.sh
+++ b/data/tcsh/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-pkg:configure ac_cv_func_setpgrp_void=yes
-make
+pkg:configure ac_cv_func_setpgrp_void=yes --bindir=/bin
+make -j8
pkg:install
diff --git a/data/tcsh/shebang.diff b/data/tcsh/shebang.diff
new file mode 100644
index 000000000..4b5cb66e3
--- /dev/null
+++ b/data/tcsh/shebang.diff
@@ -0,0 +1,21 @@
+diff -ur tcsh-TCSH6_20_00/config/mach tcsh-TCSH6_20_00+iPhone/config/mach
+--- tcsh-TCSH6_20_00/config/bsd4.4 2016-11-24 05:26:18.000000000 -1000
++++ tcsh-TCSH6_20_00+iPhone/config/bsd4.4 2019-03-29 18:15:08.000000000 -1000
+@@ -95,4 +95,6 @@
+ # define _TERMIOS_H_
+ #endif /* __NeXT31__ && !POSIX */
+
++#define HASHBANG
++
+ #endif /* _h_config */
+diff -ur tcsh-TCSH6_20_00/sh.exec.c tcsh-TCSH6_20_00+iPhone/sh.exec.c
+--- tcsh-TCSH6_20_00/sh.exec.c 2016-11-24 05:26:18.000000000 -1000
++++ tcsh-TCSH6_20_00+iPhone/sh.exec.c 2019-03-29 18:14:16.000000000 -1000
+@@ -401,6 +401,7 @@
+ switch (errno) {
+
+ case ENOEXEC:
++ case EPERM:
+ #ifdef WINNT_NATIVE
+ nt_feed_to_cmd(f,t);
+ #endif /* WINNT_NATIVE */
diff --git a/data/tcsh/tcsh-6.15.00.tar.gz b/data/tcsh/tcsh-6.15.00.tar.gz
deleted file mode 100644
index a2eb514a2..000000000
--- a/data/tcsh/tcsh-6.15.00.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/tiff/_metadata/in.1443.00 b/data/tiff/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/tiff/_metadata/in.1443.00
diff --git a/data/tiff/_metadata/libjpeg-turbo.dep b/data/tiff/_metadata/libjpeg-turbo.dep
new file mode 120000
index 000000000..b905b9550
--- /dev/null
+++ b/data/tiff/_metadata/libjpeg-turbo.dep
@@ -0,0 +1 @@
+../../libjpeg-turbo \ No newline at end of file
diff --git a/data/tiff/_metadata/maintainer b/data/tiff/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/tiff/_metadata/maintainer
+++ b/data/tiff/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/tiff/_metadata/version b/data/tiff/_metadata/version
index a08ffae0c..7919852fe 100644
--- a/data/tiff/_metadata/version
+++ b/data/tiff/_metadata/version
@@ -1 +1 @@
-3.8.2
+4.0.9
diff --git a/data/tiff/_metadata/xz.dep b/data/tiff/_metadata/xz.dep
new file mode 120000
index 000000000..d5eb7ae54
--- /dev/null
+++ b/data/tiff/_metadata/xz.dep
@@ -0,0 +1 @@
+../../xz \ No newline at end of file
diff --git a/data/tiff/make.sh b/data/tiff/make.sh
index 7dac292bc..25060591c 100644
--- a/data/tiff/make.sh
+++ b/data/tiff/make.sh
@@ -1,5 +1,5 @@
pkg:setup
-autoconf
+cp ${PKG_BASE}/config.sub config/
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/tiff/nmedit.diff b/data/tiff/nmedit.diff
deleted file mode 100644
index 80a5bbec7..000000000
--- a/data/tiff/nmedit.diff
+++ /dev/null
@@ -1,51 +0,0 @@
-diff -r -u tiff-3.8.2/aclocal.m4 tiff-3.8.2+iPhone/aclocal.m4
---- tiff-3.8.2/aclocal.m4 2006-03-23 14:44:38.000000000 +0000
-+++ tiff-3.8.2+iPhone/aclocal.m4 2008-01-12 10:12:57.000000000 +0000
-@@ -3058,11 +3058,11 @@
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
- if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- fi
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
-@@ -3070,8 +3070,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
-@@ -5827,8 +5827,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- else
- case $cc_basename in
- xlc*)
-@@ -5836,8 +5836,8 @@
- _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
- _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-- _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~arm-apple-darwin-nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
- ;;
- *)
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
diff --git a/data/tiff/tiff-3.8.2.tar.gz b/data/tiff/tiff-3.8.2.tar.gz
deleted file mode 100644
index 9320dbf9e..000000000
--- a/data/tiff/tiff-3.8.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/tiff/tiff-4.0.9.tar.gz b/data/tiff/tiff-4.0.9.tar.gz
new file mode 100644
index 000000000..b0996702a
--- /dev/null
+++ b/data/tiff/tiff-4.0.9.tar.gz
Binary files differ
diff --git a/data/tmux/_metadata/description b/data/tmux/_metadata/description
new file mode 100644
index 000000000..9b1d2fa40
--- /dev/null
+++ b/data/tmux/_metadata/description
@@ -0,0 +1 @@
+multiplexes a terminal into many
diff --git a/data/tmux/_metadata/in.1443.00 b/data/tmux/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/tmux/_metadata/in.1443.00
diff --git a/data/tmux/_metadata/libevent.dep b/data/tmux/_metadata/libevent.dep
new file mode 120000
index 000000000..c79b2082c
--- /dev/null
+++ b/data/tmux/_metadata/libevent.dep
@@ -0,0 +1 @@
+../../libevent \ No newline at end of file
diff --git a/data/tmux/_metadata/license b/data/tmux/_metadata/license
new file mode 120000
index 000000000..9c13a9a0f
--- /dev/null
+++ b/data/tmux/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-2 \ No newline at end of file
diff --git a/data/tmux/_metadata/maintainer b/data/tmux/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/tmux/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/tmux/_metadata/ncurses.dep b/data/tmux/_metadata/ncurses.dep
new file mode 120000
index 000000000..a395fad08
--- /dev/null
+++ b/data/tmux/_metadata/ncurses.dep
@@ -0,0 +1 @@
+../../ncurses \ No newline at end of file
diff --git a/data/tmux/_metadata/priority b/data/tmux/_metadata/priority
new file mode 100644
index 000000000..ea5b3d7ee
--- /dev/null
+++ b/data/tmux/_metadata/priority
@@ -0,0 +1 @@
+important
diff --git a/data/tmux/_metadata/role b/data/tmux/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/tmux/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/tmux/_metadata/section b/data/tmux/_metadata/section
new file mode 100644
index 000000000..1ddf05d5d
--- /dev/null
+++ b/data/tmux/_metadata/section
@@ -0,0 +1 @@
+Terminal_Support
diff --git a/data/tmux/_metadata/tags b/data/tmux/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/tmux/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/tmux/_metadata/version b/data/tmux/_metadata/version
new file mode 100644
index 000000000..1effb0034
--- /dev/null
+++ b/data/tmux/_metadata/version
@@ -0,0 +1 @@
+2.7
diff --git a/data/tmux/make.sh b/data/tmux/make.sh
new file mode 100644
index 000000000..fbc999151
--- /dev/null
+++ b/data/tmux/make.sh
@@ -0,0 +1,4 @@
+pkg:setup
+pkg:configure
+make -j8
+pkg:install
diff --git a/data/tmux/tmux-2.7.tar.gz b/data/tmux/tmux-2.7.tar.gz
new file mode 100644
index 000000000..2086ccf21
--- /dev/null
+++ b/data/tmux/tmux-2.7.tar.gz
Binary files differ
diff --git a/data/top/_metadata/in.1443.00 b/data/top/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/top/_metadata/in.1443.00
diff --git a/data/top/chown.diff b/data/top/chown.diff
new file mode 100644
index 000000000..e3b813fc9
--- /dev/null
+++ b/data/top/chown.diff
@@ -0,0 +1,9 @@
+diff -ur top-39/Makefile top-39+iPhone/Makefile
+--- top-39/Makefile 2008-02-04 11:55:01.000000000 -1000
++++ top-39+iPhone/Makefile 2018-08-14 18:28:17.000000000 -1000
+@@ -103,5 +103,3 @@
+
+ $(SYMROOT)/$(BIN) : $(patsubst %.c,$(OBJROOT)/%.o,$(BIN_SRCS)) $(SYMROOT)/$(LIB)
+ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
+- chown root $@
+- chmod 4755 $@
diff --git a/data/touch-mania.com/_metadata/description b/data/touch-mania.com/_metadata/description
deleted file mode 100644
index 9d0bf5456..000000000
--- a/data/touch-mania.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-packages from Germany and stuff
diff --git a/data/touch-mania.com/_metadata/license b/data/touch-mania.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/touch-mania.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/touch-mania.com/_metadata/maintainer b/data/touch-mania.com/_metadata/maintainer
deleted file mode 100644
index f94e4bf3e..000000000
--- a/data/touch-mania.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Charel <source@touch-mania.com>
diff --git a/data/touch-mania.com/_metadata/name b/data/touch-mania.com/_metadata/name
deleted file mode 100644
index 1e9e4b251..000000000
--- a/data/touch-mania.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-Touch-Mania
diff --git a/data/touch-mania.com/_metadata/role b/data/touch-mania.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/touch-mania.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/touch-mania.com/_metadata/section b/data/touch-mania.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/touch-mania.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/touch-mania.com/_metadata/tags b/data/touch-mania.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/touch-mania.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/touch-mania.com/_metadata/version b/data/touch-mania.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/touch-mania.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/touch-mania.com/make.sh b/data/touch-mania.com/make.sh
deleted file mode 100644
index f7947d526..000000000
--- a/data/touch-mania.com/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/touch-mania.com.list /etc/apt/sources.list.d
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/touch-mania_logo_60x60.png /Applications/Cydia.app/Sources/cydia.touch-mania.com.png
diff --git a/data/touch-mania.com/touch-mania.com.list b/data/touch-mania.com/touch-mania.com.list
deleted file mode 100644
index a81041b2b..000000000
--- a/data/touch-mania.com/touch-mania.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://cydia.touch-mania.com/ ./
diff --git a/data/touch-mania.com/touch-mania_logo_60x60.png b/data/touch-mania.com/touch-mania_logo_60x60.png
deleted file mode 100644
index cacb27002..000000000
--- a/data/touch-mania.com/touch-mania_logo_60x60.png
+++ /dev/null
Binary files differ
diff --git a/data/tsschecker/_metadata/curl.dep b/data/tsschecker/_metadata/curl.dep
new file mode 120000
index 000000000..9c4438112
--- /dev/null
+++ b/data/tsschecker/_metadata/curl.dep
@@ -0,0 +1 @@
+../../curl \ No newline at end of file
diff --git a/data/tsschecker/_metadata/description b/data/tsschecker/_metadata/description
new file mode 100644
index 000000000..3c56e9bcb
--- /dev/null
+++ b/data/tsschecker/_metadata/description
@@ -0,0 +1 @@
+tsschecker is a powerful tool to check tss signing status of various devices and iOS versions.
diff --git a/data/tsschecker/_metadata/in.1443.00 b/data/tsschecker/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/tsschecker/_metadata/in.1443.00
diff --git a/data/tsschecker/_metadata/libfragmentzip.dep b/data/tsschecker/_metadata/libfragmentzip.dep
new file mode 120000
index 000000000..a0d56c2ea
--- /dev/null
+++ b/data/tsschecker/_metadata/libfragmentzip.dep
@@ -0,0 +1 @@
+../../libfragmentzip \ No newline at end of file
diff --git a/data/tsschecker/_metadata/libirecovery.dep b/data/tsschecker/_metadata/libirecovery.dep
new file mode 120000
index 000000000..4f1a5455c
--- /dev/null
+++ b/data/tsschecker/_metadata/libirecovery.dep
@@ -0,0 +1 @@
+../../libirecovery \ No newline at end of file
diff --git a/data/tsschecker/_metadata/libplist.dep b/data/tsschecker/_metadata/libplist.dep
new file mode 120000
index 000000000..1ef48bb75
--- /dev/null
+++ b/data/tsschecker/_metadata/libplist.dep
@@ -0,0 +1 @@
+../../libplist \ No newline at end of file
diff --git a/data/tsschecker/_metadata/license b/data/tsschecker/_metadata/license
new file mode 120000
index 000000000..141b2e41b
--- /dev/null
+++ b/data/tsschecker/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/lgpl-3 \ No newline at end of file
diff --git a/data/tsschecker/_metadata/maintainer b/data/tsschecker/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/tsschecker/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/tsschecker/_metadata/name b/data/tsschecker/_metadata/name
new file mode 100644
index 000000000..0c7737266
--- /dev/null
+++ b/data/tsschecker/_metadata/name
@@ -0,0 +1 @@
+TSS Checker
diff --git a/data/tsschecker/_metadata/priority b/data/tsschecker/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/tsschecker/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/tsschecker/_metadata/section b/data/tsschecker/_metadata/section
new file mode 100644
index 000000000..e0eb96881
--- /dev/null
+++ b/data/tsschecker/_metadata/section
@@ -0,0 +1 @@
+Development
diff --git a/data/tsschecker/_metadata/tags b/data/tsschecker/_metadata/tags
new file mode 100644
index 000000000..91c01ad11
--- /dev/null
+++ b/data/tsschecker/_metadata/tags
@@ -0,0 +1 @@
+purpose::console, role::developer
diff --git a/data/tsschecker/_metadata/version b/data/tsschecker/_metadata/version
new file mode 100644
index 000000000..175b6c5df
--- /dev/null
+++ b/data/tsschecker/_metadata/version
@@ -0,0 +1 @@
+263
diff --git a/data/tsschecker/make.sh b/data/tsschecker/make.sh
new file mode 100644
index 000000000..36e0bc61c
--- /dev/null
+++ b/data/tsschecker/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+./autogen.sh NOCONFIGURE=1
+pkg:configure ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes
+pkg:make
+pkg:install
diff --git a/data/tsschecker/tsschecker-263.tar.lz b/data/tsschecker/tsschecker-263.tar.lz
new file mode 100644
index 000000000..88296ba11
--- /dev/null
+++ b/data/tsschecker/tsschecker-263.tar.lz
Binary files differ
diff --git a/data/uicaboodle.py/_metadata/maintainer b/data/uicaboodle.py/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/uicaboodle.py/_metadata/maintainer
+++ b/data/uicaboodle.py/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/uicaboodle.py/make.sh b/data/uicaboodle.py/make.sh
index 2a0f85dd1..79b11607b 100644
--- a/data/uicaboodle.py/make.sh
+++ b/data/uicaboodle.py/make.sh
@@ -1,3 +1,3 @@
-${PKG_TARG}-gcc -o _uicaboodle.dylib "${PKG_DATA}/uicaboodle.m" -I"$(PKG_DEST_ python)"/usr/include/python2.5 -I "$(PKG_WORK_ pyobjc)"/*/pyobjc-core/Modules/objc -lpython2.5 -framework UIKit -dynamiclib -framework Foundation -lobjc -framework CoreFoundation
-pkg: mkdir -p /usr/lib/python2.5/lib-dynload
-pkg: cp -a _uicaboodle.dylib /usr/lib/python2.5/lib-dynload
+${PKG_TARG}-gcc -o _uicaboodle.dylib "${PKG_DATA}/uicaboodle.m" -I"$(PKG_DEST_ python)"/usr/include/python2.7 -I "$(PKG_WORK_ pyobjc)"/*/pyobjc-core/Modules/objc -lpython2.7 -framework UIKit -dynamiclib -framework Foundation -lobjc -framework CoreFoundation
+pkg: mkdir -p /usr/lib/python2.7/lib-dynload
+pkg: cp -a _uicaboodle.dylib /usr/lib/python2.7/lib-dynload
diff --git a/data/uicaboodle/_metadata/in.1443.00 b/data/uicaboodle/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/uicaboodle/_metadata/in.1443.00
diff --git a/data/uicaboodle/_metadata/maintainer b/data/uicaboodle/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/uicaboodle/_metadata/maintainer
+++ b/data/uicaboodle/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/uikittools/_metadata/coreutils-bin.dep b/data/uikittools/_metadata/coreutils-bin.dep
new file mode 120000
index 000000000..c8195236d
--- /dev/null
+++ b/data/uikittools/_metadata/coreutils-bin.dep
@@ -0,0 +1 @@
+../../coreutils-bin \ No newline at end of file
diff --git a/data/uikittools/_metadata/depiction b/data/uikittools/_metadata/depiction
new file mode 100644
index 000000000..d174e9a8e
--- /dev/null
+++ b/data/uikittools/_metadata/depiction
@@ -0,0 +1 @@
+http://cydia.saurik.com/info/uikittools/
diff --git a/data/uikittools/_metadata/description b/data/uikittools/_metadata/description
new file mode 100644
index 000000000..e9a5ce307
--- /dev/null
+++ b/data/uikittools/_metadata/description
@@ -0,0 +1 @@
+UIKit/GraphicsServices command line access
diff --git a/data/uikittools/_metadata/homepage b/data/uikittools/_metadata/homepage
new file mode 100644
index 000000000..57f36586c
--- /dev/null
+++ b/data/uikittools/_metadata/homepage
@@ -0,0 +1 @@
+http://tukaani.org/lzma/
diff --git a/data/uikittools/_metadata/in.1443.00 b/data/uikittools/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/uikittools/_metadata/in.1443.00
diff --git a/data/uikittools/_metadata/license b/data/uikittools/_metadata/license
new file mode 120000
index 000000000..af4224931
--- /dev/null
+++ b/data/uikittools/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-3 \ No newline at end of file
diff --git a/data/uikittools/_metadata/maintainer b/data/uikittools/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/uikittools/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/uikittools/_metadata/name b/data/uikittools/_metadata/name
new file mode 100644
index 000000000..f3aed2b0c
--- /dev/null
+++ b/data/uikittools/_metadata/name
@@ -0,0 +1 @@
+UIKit Tools
diff --git a/data/uikittools/_metadata/priority b/data/uikittools/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/uikittools/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/uikittools/_metadata/role b/data/uikittools/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/uikittools/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/uikittools/_metadata/section b/data/uikittools/_metadata/section
new file mode 100644
index 000000000..19814b684
--- /dev/null
+++ b/data/uikittools/_metadata/section
@@ -0,0 +1 @@
+Utilities
diff --git a/data/uikittools/_metadata/tags b/data/uikittools/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/uikittools/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/uikittools/_metadata/version b/data/uikittools/_metadata/version
new file mode 100644
index 000000000..9ea63dbcc
--- /dev/null
+++ b/data/uikittools/_metadata/version
@@ -0,0 +1 @@
+1.1.13
diff --git a/data/ifoneguide.nl/_metadata/zlib b/data/uikittools/_metadata/zlib
index 7a4571271..7a4571271 100644
--- a/data/ifoneguide.nl/_metadata/zlib
+++ b/data/uikittools/_metadata/zlib
diff --git a/data/uikittools/ldrestart-jbd.diff b/data/uikittools/ldrestart-jbd.diff
new file mode 100644
index 000000000..49b86d4b8
--- /dev/null
+++ b/data/uikittools/ldrestart-jbd.diff
@@ -0,0 +1,157 @@
+diff --git a/ldrestart.cpp b/ldrestart.cpp
+index a6d6cb6..c9a3b33 100644
+--- a/ldrestart.cpp
++++ b/ldrestart.cpp
+@@ -34,6 +34,28 @@
+ #define FLAG_PLATFORMIZE (1 << 1)
+ #include <dlfcn.h>
+
++#include <os/log.h>
++
++const char *first[] = {
++ NULL
++};
++
++const char *last[] = {
++ "com.apple.assertiond",
++ "com.apple.backboardd",
++ NULL
++};
++
++const char *skip[] = {
++ "jailbreakd",
++ "com.apple.MobileFileIntegrity",
++ "com.openssh.sshd.",
++ "com.apple.SpringBoard",
++ // "com.apple.logd",
++ "com.apple.diagnosticd",
++ NULL
++};
++
+ void platformizeme() {
+ void* handle = dlopen("/usr/lib/libjailbreak.dylib", RTLD_LAZY);
+ if (!handle) return;
+@@ -51,6 +72,70 @@ void platformizeme() {
+ ptr(getpid(), FLAG_PLATFORMIZE);
+ }
+
++bool launch_stop(const char * job)
++{
++ launch_data_t resp;
++ launch_data_t msg;
++
++ msg = launch_data_alloc(LAUNCH_DATA_DICTIONARY);
++ if (msg == NULL) {
++ fprintf(stderr, "out of memory");
++ exit(-1);
++ }
++
++ launch_data_dict_insert(msg, launch_data_new_string(job),
++ LAUNCH_KEY_STOPJOB);
++
++ resp = launch_msg(msg);
++ launch_data_free(msg);
++
++ if (resp == NULL) {
++ return false;
++ }
++
++ switch (launch_data_get_type(resp)) {
++ case LAUNCH_DATA_ERRNO:
++ errno = launch_data_get_errno(resp);
++ launch_data_free(resp);
++ if (errno != 0) {
++ return false;
++ }
++
++ return true;
++
++ default:
++ launch_data_free(resp);
++ return false;
++ }
++}
++
++long long launch_pid(const char * job)
++{
++ launch_data_t msg = launch_data_alloc(LAUNCH_DATA_DICTIONARY);
++ if (msg == NULL) {
++ fprintf(stderr, "out of memory");
++ exit(-1);
++ }
++ launch_data_dict_insert(msg, launch_data_new_string(job), LAUNCH_KEY_GETJOB);
++
++ launch_data_t resp = launch_msg(msg);
++ launch_data_free(msg);
++
++ if (resp == NULL) {
++ return 0;
++ }
++ auto integer(launch_data_dict_lookup(resp, LAUNCH_JOBKEY_PID));
++ if (integer == NULL)
++ return 0;
++ if (launch_data_get_type(integer) != LAUNCH_DATA_INTEGER) {
++ launch_data_free(resp);
++ return 0;
++ }
++ long long pid = launch_data_get_integer(integer);
++ launch_data_free(resp);
++ return pid;
++}
++
+ void process(launch_data_t value, const char *name, void *baton) {
+ if (launch_data_get_type(value) != LAUNCH_DATA_DICTIONARY)
+ return;
+@@ -68,6 +153,19 @@ void process(launch_data_t value, const char *name, void *baton) {
+ return;
+ auto label(launch_data_get_string(string));
+
++ for (const char **skipped = first; *skipped != NULL; skipped++) {
++ if (strcmp(label, *skipped) == 0)
++ return;
++ }
++ for (const char **skipped = skip; *skipped != NULL; skipped++) {
++ if (strncmp(label, *skipped, strlen(*skipped)) == 0)
++ return;
++ }
++ for (const char **skipped = last; *skipped != NULL; skipped++) {
++ if (strcmp(label, *skipped) == 0)
++ return;
++ }
++
+ auto stop(launch_data_alloc(LAUNCH_DATA_DICTIONARY));
+ launch_data_dict_insert(stop, string, LAUNCH_KEY_STOPJOB);
+
+@@ -86,6 +184,23 @@ void process(launch_data_t value, const char *name, void *baton) {
+
+ int main(int argc, char *argv[]) {
+ platformizeme();
++ for (const char **service = first; *service != NULL; service++) {
++ launch_stop(*service);
++ }
++ // long long origPid = launch_pid("com.apple.logd");
++ // if (origPid > 0) {
++ // launch_stop("com.apple.logd");
++ // for (int tries=0; tries<10; tries++) {
++ // long long newPid=launch_pid("com.apple.logd");
++ // if (newPid > 0 && newPid != origPid)
++ // break;
++ // sleep(1);
++ // }
++ // // Ensure logd has finished restarting
++ // os_log(OS_LOG_DEFAULT, "ldrestart: waiting for logd to be ready to process messages");
++ // } else {
++ // fprintf(stderr, "no logd running??\n");
++ // }
+ auto request(launch_data_new_string(LAUNCH_KEY_GETJOBS));
+ auto response(launch_msg(request));
+ launch_data_free(request);
+@@ -96,5 +212,8 @@ int main(int argc, char *argv[]) {
+ return EX_SOFTWARE;
+
+ launch_data_dict_iterate(response, &process, NULL);
++ for (const char **service = last; *service != NULL; service++) {
++ launch_stop(*service);
++ }
+ return EX_OK;
+ }
diff --git a/data/uikittools/make.sh b/data/uikittools/make.sh
new file mode 100644
index 000000000..5055e3798
--- /dev/null
+++ b/data/uikittools/make.sh
@@ -0,0 +1,3 @@
+pkg:setup
+pkg:make
+pkg:install
diff --git a/data/uikittools/telesphoreo.diff b/data/uikittools/telesphoreo.diff
new file mode 100644
index 000000000..73beb99dc
--- /dev/null
+++ b/data/uikittools/telesphoreo.diff
@@ -0,0 +1,76 @@
+diff --git a/makefile b/makefile
+index 6764f73..055bbf8 100644
+--- a/makefile
++++ b/makefile
+@@ -1,4 +1,6 @@
+ uikittools = uiduid uicache uiopen gssc sbdidlaunch sbreload cfversion iomfsetgamma ldrestart ecidecid
++CC = $(PKG_TARG)-gcc
++CPP = $(PKG_TARG)-g++
+
+ all: $(uikittools)
+
+@@ -9,11 +11,9 @@ clean:
+
+ private := -F/System/Library/PrivateFrameworks
+
+-flags := -Os -Werror
++flags := -Os -Werror -Wno-deprecated-declarations
+ flags += -framework CoreFoundation
+ flags += -framework Foundation
+-flags += -miphoneos-version-min=2.0
+-flags += -arch armv6
+
+ ldrestart := -std=c++11
+ gssc := -lobjc
+@@ -28,31 +28,29 @@ uicache: csstore.cpp
+ extrainst_: csstore.cpp
+
+ %: %.m
+- cycc -- -o $@ -x c $^ $(flags) $($@)
++ $(CC) -o $@ $^ $(flags) $($@)
+- ldid -S$(wildcard $@.xml) $@
++ @if [ ! -z "$(wildcard $@.xml)" ]; then \
++ ldid -S$(wildcard $@.xml) $@; \
++ fi
+
+ %: %.mm
+- cycc -- -o $@ $^ $(flags) $($@)
+- ldid -S$(wildcard $@.xml) $@
++ $(CPP) -o $@ $^ $(flags) $($@)
++ @if [ ! -z "$(wildcard $@.xml)" ]; then \
++ ldid -S$(wildcard $@.xml) $@; \
++ fi
+
+ %: %.cpp
+- cycc -- -o $@ $^ $(flags) $($@)
+- ldid -S$(wildcard $@.xml) $@
++ $(CPP) -o $@ $^ $(flags) $($@)
++ @if [ ! -z "$(wildcard $@.xml)" ]; then \
++ ldid -S$(wildcard $@.xml) $@; \
++ fi
+
+ %: %.c
+- cycc -- -o $@ -x c $^ $(flags) $($@)
+- ldid -S$(wildcard $@.xml) $@
+-
+-package: all extrainst_
+- sudo rm -rf _
+- mkdir -p _/usr/bin
+- cp -a $(filter-out %.dylib,$(uikittools)) _/usr/bin
+- mkdir -p _/DEBIAN
+- ./control.sh _ >_/DEBIAN/control
+- cp -a extrainst_ _/DEBIAN/
+- mkdir -p debs
+- ln -sf debs/uikittools_$$(./version.sh)_iphoneos-arm.deb uikittools.deb
+- sudo chown -R 0 _
+- sudo chgrp -R 0 _
+- dpkg-deb -b _ uikittools.deb
+- readlink uikittools.deb
++ $(CC) -o $@ -x c $^ $(flags) $($@)
++ @if [ ! -z "$(wildcard $@.xml)" ]; then \
++ ldid -S$(wildcard $@.xml) $@; \
++ fi
++
++install: all
++ mkdir -p $(DESTDIR)/usr/bin
++ cp -a $(filter-out %.dylib,$(uikittools)) $(DESTDIR)/usr/bin
diff --git a/data/uikittools/uikittools-1.1.13.tgz b/data/uikittools/uikittools-1.1.13.tgz
new file mode 100644
index 000000000..5674a5996
--- /dev/null
+++ b/data/uikittools/uikittools-1.1.13.tgz
Binary files differ
diff --git a/data/unrar/_metadata/in.1443.00 b/data/unrar/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/unrar/_metadata/in.1443.00
diff --git a/data/unrar/_metadata/maintainer b/data/unrar/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/unrar/_metadata/maintainer
+++ b/data/unrar/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/unrar/_metadata/version b/data/unrar/_metadata/version
index 424e1794d..1f8428b5f 100644
--- a/data/unrar/_metadata/version
+++ b/data/unrar/_metadata/version
@@ -1 +1 @@
-3.6.8
+5.6.4
diff --git a/data/unrar/cross.diff b/data/unrar/cross.diff
new file mode 100644
index 000000000..ae1970710
--- /dev/null
+++ b/data/unrar/cross.diff
@@ -0,0 +1,18 @@
+diff -ur unrar/makefile unrar+iPhone/makefile
+--- unrar/makefile 2017-11-21 20:53:39.000000000 -1000
++++ unrar+iPhone/makefile 2018-08-06 11:47:39.000000000 -1000
+@@ -2,12 +2,12 @@
+ # Makefile for UNIX - unrar
+
+ # Linux using GCC
+-CXX=c++
++CXX?=c++
+ CXXFLAGS=-O2 -Wno-logical-op-parentheses -Wno-switch -Wno-dangling-else
+ LIBFLAGS=-fPIC
+ DEFINES=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DRAR_SMP
+ STRIP=strip
+-AR=ar
++AR?=ar
+ LDFLAGS=-pthread
+ DESTDIR=/usr
+
diff --git a/data/unrar/exceptions.diff b/data/unrar/exceptions.diff
deleted file mode 100644
index 94062e15c..000000000
--- a/data/unrar/exceptions.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-diff -ru unrar/errhnd.cpp unrar+iPhone/errhnd.cpp
---- unrar/errhnd.cpp 2006-08-04 18:32:40.000000000 +0000
-+++ unrar+iPhone/errhnd.cpp 2007-12-28 03:44:02.000000000 +0000
-@@ -321,7 +321,7 @@
- throw Code;
- #else
- File::RemoveCreated();
-- exit(Code);
-+ _exit(Code);
- #endif
- }
-
-diff -ru unrar/errhnd.hpp unrar+iPhone/errhnd.hpp
---- unrar/errhnd.hpp 2006-08-04 18:32:40.000000000 +0000
-+++ unrar+iPhone/errhnd.hpp 2007-12-28 03:43:39.000000000 +0000
-@@ -1,11 +1,6 @@
- #ifndef _RAR_ERRHANDLER_
- #define _RAR_ERRHANDLER_
-
--#if (defined(GUI) || !defined(_WIN_32)) && !defined(SFX_MODULE) && !defined(_WIN_CE) || defined(RARDLL)
--#define ALLOW_EXCEPTIONS
--#endif
--
--
-
- #define rarmalloc malloc
- #define rarcalloc calloc
-diff -ru unrar/rar.cpp unrar+iPhone/rar.cpp
---- unrar/rar.cpp 2006-08-04 18:32:40.000000000 +0000
-+++ unrar+iPhone/rar.cpp 2007-12-28 03:41:09.000000000 +0000
-@@ -127,7 +127,7 @@
- #if defined(_EMX) && !defined(_DJGPP)
- uni_done();
- #endif
-- return(ErrHandler.GetErrorCode());
-+ _exit(ErrHandler.GetErrorCode());
- }
- #endif
-
diff --git a/data/unrar/make.sh b/data/unrar/make.sh
index d4a5d1755..8bf01bce8 100644
--- a/data/unrar/make.sh
+++ b/data/unrar/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-make -f makefile.unix CXX="${PKG_TARG}-g++" all
+make CXX="${PKG_TARG}-g++" all
pkg: mkdir -p /usr/bin
pkg: cp -a unrar /usr/bin
diff --git a/data/unrar/strip.diff b/data/unrar/strip.diff
index 7773b0374..d71a404ea 100644
--- a/data/unrar/strip.diff
+++ b/data/unrar/strip.diff
@@ -1,17 +1,17 @@
-diff -ru unrar/makefile.unix unrar+iPhone/makefile.unix
---- unrar/makefile.unix 2005-04-30 07:00:12.000000000 +0000
-+++ unrar+iPhone/makefile.unix 2008-04-04 20:59:42.000000000 +0000
-@@ -105,13 +105,11 @@
- unrar: $(OBJECTS) $(UNRAR_OBJ)
+diff -ur unrar/makefile unrar+iPhone/makefile
+--- unrar/makefile 2017-11-21 20:53:39.000000000 -1000
++++ unrar+iPhone/makefile 2018-08-06 11:47:39.000000000 -1000
+@@ -143,13 +143,11 @@
+ unrar: clean $(OBJECTS) $(UNRAR_OBJ)
@rm -f unrar
$(LINK) -o unrar $(LDFLAGS) $(OBJECTS) $(UNRAR_OBJ) $(LIBS)
- $(STRIP) unrar
sfx: WHAT=SFX_MODULE
- sfx: $(OBJECTS)
+ sfx: clean $(OBJECTS)
@rm -f default.sfx
$(LINK) -o default.sfx $(LDFLAGS) $(OBJECTS)
- $(STRIP) default.sfx
lib: WHAT=RARDLL
- lib: $(OBJECTS) $(LIB_OBJ)
+ lib: CXXFLAGS+=$(LIBFLAGS)
diff --git a/data/unrar/unrarsrc-3.6.8.tar.gz b/data/unrar/unrarsrc-3.6.8.tar.gz
deleted file mode 100644
index bcc96b124..000000000
--- a/data/unrar/unrarsrc-3.6.8.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/unrar/unrarsrc-5.6.4.tar.gz b/data/unrar/unrarsrc-5.6.4.tar.gz
new file mode 100644
index 000000000..7f555dbac
--- /dev/null
+++ b/data/unrar/unrarsrc-5.6.4.tar.gz
Binary files differ
diff --git a/data/unzip/_metadata/in.1443.00 b/data/unzip/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/unzip/_metadata/in.1443.00
diff --git a/data/unzip/_metadata/maintainer b/data/unzip/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/unzip/_metadata/maintainer
+++ b/data/unzip/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/unzip/_metadata/version b/data/unzip/_metadata/version
index bb2d831e7..e0ea36fee 100644
--- a/data/unzip/_metadata/version
+++ b/data/unzip/_metadata/version
@@ -1 +1 @@
-5.52
+6.0
diff --git a/data/unzip/timestamp.diff b/data/unzip/timestamp.diff
index 92d4f7e44..f67747fc2 100644
--- a/data/unzip/timestamp.diff
+++ b/data/unzip/timestamp.diff
@@ -1,6 +1,6 @@
-diff -ru unzip-5.52/consts.h unzip-5.52+iPhone/consts.h
---- unzip-5.52/consts.h 2002-03-23 15:52:48.000000000 +0000
-+++ unzip-5.52+iPhone/consts.h 2008-06-18 15:43:47.000000000 +0000
+diff -ur unzip60/consts.h unzip60+iPhone/consts.h
+--- unzip60/consts.h 2002-03-23 05:52:48.000000000 -1000
++++ unzip60+iPhone/consts.h 2018-08-06 11:35:37.000000000 -1000
@@ -50,5 +50,5 @@
#ifndef SFX
@@ -8,10 +8,10 @@ diff -ru unzip-5.52/consts.h unzip-5.52+iPhone/consts.h
- ZCONST char Far CompiledWith[] = "Compiled with %s%s for %s%s%s%s.\n\n";
+ ZCONST char Far CompiledWith[] = "Compiled with %s%s for %s%s.\n\n";
#endif
-diff -ru unzip-5.52/unix/unix.c unzip-5.52+iPhone/unix/unix.c
---- unzip-5.52/unix/unix.c 2005-02-26 19:43:42.000000000 +0000
-+++ unzip-5.52+iPhone/unix/unix.c 2008-06-18 15:43:35.000000000 +0000
-@@ -1323,147 +1323,147 @@
+diff -ur unzip60/unix/unix.c unzip60+iPhone/unix/unix.c
+--- unzip60/unix/unix.c 2009-01-23 13:31:26.000000000 -1000
++++ unzip60+iPhone/unix/unix.c 2018-08-06 11:43:37.000000000 -1000
+@@ -1517,162 +1517,170 @@
IZ_OS_NAME,
#if defined(sgi) || defined(__sgi)
@@ -43,8 +43,8 @@ diff -ru unzip-5.52/unix/unix.c unzip-5.52+iPhone/unix/unix.c
# endif
#else
#ifdef __hpux
-- " (HP/UX)",
-+ " (HP/UX)"
+- " (HP-UX)",
++ " (HP-UX)"
#else
#ifdef __osf__
- " (DEC OSF/1)",
@@ -197,13 +197,40 @@ diff -ru unzip-5.52/unix/unix.c unzip-5.52+iPhone/unix/unix.c
- " (LynxOS)",
+ " (LynxOS)"
#else
+ #ifdef __APPLE__
+ # ifdef __i386__
+- " Mac OS X Intel i32",
++ " Mac OS X Intel i32"
+ # else
+ # ifdef __ppc__
+- " Mac OS X PowerPC",
++ " Mac OS X PowerPC"
+ # else
+ # ifdef __ppc64__
+- " Mac OS X PowerPC64",
++ " Mac OS X PowerPC64"
+ # else
+- " Mac OS X",
++# ifdef __arm__
++ " iPhoneOS ARM"
++# else
++# ifdef __arm64__
++ " iPhoneOS ARM64"
++# else
++ " Mac OS X"
++# endif /* __arm64__ */
++# endif /* __arm__ */
+ # endif /* __ppc64__ */
+ # endif /* __ppc__ */
+ # endif /* __i386__ */
+ #else
- "",
+ ""
+ #endif /* Apple */
#endif /* Lynx */
#endif /* QNX Neutrino */
- #endif /* QNX 4 */
-@@ -1494,12 +1494,6 @@
- #endif /* HP/UX */
+@@ -1704,12 +1712,6 @@
+ #endif /* HP-UX */
#endif /* Sun */
#endif /* SGI */
-
@@ -215,3 +242,5 @@ diff -ru unzip-5.52/unix/unix.c unzip-5.52+iPhone/unix/unix.c
);
(*G.message)((zvoid *)&G, slide, (ulg)strlen((char *)slide), 0);
+Only in unzip60+iPhone/unix: unix.c.orig
+Only in unzip60+iPhone/unix: unix.c.rej
diff --git a/data/unzip/unzip552.tar.gz b/data/unzip/unzip552.tar.gz
deleted file mode 100644
index ef39c84a5..000000000
--- a/data/unzip/unzip552.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/unzip/unzip60.tar.gz b/data/unzip/unzip60.tar.gz
new file mode 100644
index 000000000..ed145ca58
--- /dev/null
+++ b/data/unzip/unzip60.tar.gz
Binary files differ
diff --git a/data/urbanfanatics.com/_metadata/description b/data/urbanfanatics.com/_metadata/description
deleted file mode 100644
index f53a28297..000000000
--- a/data/urbanfanatics.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-ScummVM Master Repository
diff --git a/data/urbanfanatics.com/_metadata/license b/data/urbanfanatics.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/urbanfanatics.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/urbanfanatics.com/_metadata/maintainer b/data/urbanfanatics.com/_metadata/maintainer
deleted file mode 120000
index 0fa66e077..000000000
--- a/data/urbanfanatics.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-../../../people/saurik \ No newline at end of file
diff --git a/data/urbanfanatics.com/_metadata/name b/data/urbanfanatics.com/_metadata/name
deleted file mode 100644
index 63e9eab24..000000000
--- a/data/urbanfanatics.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-Urban Fanatics' Source
diff --git a/data/urbanfanatics.com/_metadata/role b/data/urbanfanatics.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/urbanfanatics.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/urbanfanatics.com/_metadata/section b/data/urbanfanatics.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/urbanfanatics.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/urbanfanatics.com/_metadata/tags b/data/urbanfanatics.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/urbanfanatics.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/urbanfanatics.com/_metadata/version b/data/urbanfanatics.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/urbanfanatics.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/urbanfanatics.com/make.sh b/data/urbanfanatics.com/make.sh
deleted file mode 100644
index bbad62748..000000000
--- a/data/urbanfanatics.com/make.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/urbanfanatics.com.list /etc/apt/sources.list.d
diff --git a/data/urbanfanatics.com/urbanfanatics.com.list b/data/urbanfanatics.com/urbanfanatics.com.list
deleted file mode 100644
index 5af55fb12..000000000
--- a/data/urbanfanatics.com/urbanfanatics.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://urbanfanatics.com/cydia/ ./
diff --git a/data/uuid/_metadata/in.1443.00 b/data/uuid/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/uuid/_metadata/in.1443.00
diff --git a/data/uuid/_metadata/maintainer b/data/uuid/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/uuid/_metadata/maintainer
+++ b/data/uuid/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/uuid/_metadata/version b/data/uuid/_metadata/version
index dc1e644a1..fdd3be6df 100644
--- a/data/uuid/_metadata/version
+++ b/data/uuid/_metadata/version
@@ -1 +1 @@
-1.6.0
+1.6.2
diff --git a/data/uuid/make.sh b/data/uuid/make.sh
index 17b01d5cb..020bc8266 100644
--- a/data/uuid/make.sh
+++ b/data/uuid/make.sh
@@ -1,4 +1,6 @@
pkg:setup
+cp ${PKG_BASE}/config.sub .
pkg:configure ac_cv_va_copy=yes
-make
+make -j8
pkg:install
+pkg: find /usr/lib -name '*.la' | xargs rm
diff --git a/data/uuid/uuid-1.6.0.tar.gz b/data/uuid/uuid-1.6.0.tar.gz
deleted file mode 100644
index c913952c9..000000000
--- a/data/uuid/uuid-1.6.0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/uuid/uuid-1.6.2.tar.gz b/data/uuid/uuid-1.6.2.tar.gz
new file mode 100644
index 000000000..fde88d4b8
--- /dev/null
+++ b/data/uuid/uuid-1.6.2.tar.gz
Binary files differ
diff --git a/data/vbindiff/_metadata/in.1443.00 b/data/vbindiff/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/vbindiff/_metadata/in.1443.00
diff --git a/data/vbindiff/_metadata/maintainer b/data/vbindiff/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/vbindiff/_metadata/maintainer
+++ b/data/vbindiff/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/vfdecrypt/_metadata/in.1443.00 b/data/vfdecrypt/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/vfdecrypt/_metadata/in.1443.00
diff --git a/data/vfdecrypt/_metadata/libssl1.0.dep b/data/vfdecrypt/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/vfdecrypt/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/vfdecrypt/_metadata/maintainer b/data/vfdecrypt/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/vfdecrypt/_metadata/maintainer
+++ b/data/vfdecrypt/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/vfdecrypt/_metadata/openssl.dep b/data/vfdecrypt/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/vfdecrypt/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/vim/_metadata/in.1443.00 b/data/vim/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/vim/_metadata/in.1443.00
diff --git a/data/vim/_metadata/maintainer b/data/vim/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/vim/_metadata/maintainer
+++ b/data/vim/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/vim/_metadata/version b/data/vim/_metadata/version
index 0f0fefae5..dd3e59bfe 100644
--- a/data/vim/_metadata/version
+++ b/data/vim/_metadata/version
@@ -1 +1 @@
-7.1
+8.1.590
diff --git a/data/vim/cross.diff b/data/vim/cross.diff
deleted file mode 100644
index 455e7bc9a..000000000
--- a/data/vim/cross.diff
+++ /dev/null
@@ -1,328 +0,0 @@
-diff -ur vim71/src/configure.in vim71+ip/src/configure.in
---- vim71/src/configure.in 2007-05-12 09:19:27.000000000 +0000
-+++ vim71+ip/src/configure.in 2007-11-30 06:21:58.000000000 +0000
-@@ -47,13 +47,6 @@
- fi
- fi
-
--dnl If configure thinks we are cross compiling, there is probably something
--dnl wrong with the CC or CFLAGS settings, give an understandable error message
--if test "$cross_compiling" = yes; then
-- AC_MSG_ERROR([cannot compile a simple program, check CC and CFLAGS
-- (cross compiling doesn't work)])
--fi
--
- dnl gcc-cpp has the wonderful -MM option to produce nicer dependencies.
- dnl But gcc 3.1 changed the meaning! See near the end.
- test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
-@@ -1986,11 +1979,24 @@
-
- dnl Checks for libraries and include files.
-
--AC_MSG_CHECKING(quality of toupper)
--AC_TRY_RUN([#include <ctype.h>
--main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }],
-- AC_DEFINE(BROKEN_TOUPPER) AC_MSG_RESULT(bad),
-- AC_MSG_RESULT(good), AC_MSG_ERROR(failed to compile test program))
-+AC_CACHE_CHECK([toupper is broken],[vim_cv_toupper_broken],
-+ [
-+ AC_RUN_IFELSE([
-+#include <ctype.h>
-+main() { exit(toupper('A') == 'A' && tolower('z') == 'z'); }
-+ ],[
-+ vim_cv_toupper_broken=yes
-+ AC_MSG_RESULT(yes)
-+ ],[
-+ vim_cv_toupper_broken=no
-+ AC_MSG_RESULT(no)
-+ ],[
-+ AC_MSG_ERROR(cross-compiling: please set 'vim_cv_toupper_broken')
-+ ])])
-+
-+if test "x$vim_cv_toupper_broken" = "xyes" ; then
-+ AC_DEFINE(BROKEN_TOUPPER)
-+fi
-
- AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
- AC_TRY_COMPILE(, [printf("(" __DATE__ " " __TIME__ ")");],
-@@ -2202,28 +2208,52 @@
- Or specify the name of the library with --with-tlib.]))
- fi
-
--AC_MSG_CHECKING(whether we talk terminfo)
--AC_TRY_RUN([
-+AC_CACHE_CHECK([whether we talk terminfo], [vim_cv_terminfo],
-+ [
-+ AC_RUN_IFELSE([
- #ifdef HAVE_TERMCAP_H
- # include <termcap.h>
- #endif
- main()
--{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }],
-- AC_MSG_RESULT([no -- we are in termcap land]),
-- AC_MSG_RESULT([yes -- terminfo spoken here]); AC_DEFINE(TERMINFO),
-- AC_MSG_ERROR(failed to compile test program.))
-+{char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(!strcmp(s==0 ? "" : s, "1")); }
-+ ],[
-+ vim_cv_terminfo=no
-+ AC_MSG_RESULT([no -- we are in termcap land])
-+ ],[
-+ vim_cv_terminfo=yes
-+ AC_MSG_RESULT([yes -- terminfo spoken here])
-+ ],[
-+ AC_MSG_ERROR(cross-compiling: please set 'vim_cv_terminfo')
-+ ])
-+ ])
-+
-+if test "x$vim_cv_terminfo" = "xyes" ; then
-+ AC_DEFINE(TERMINFO)
-+fi
-
- if test "x$olibs" != "x$LIBS"; then
-- AC_MSG_CHECKING(what tgetent() returns for an unknown terminal)
-- AC_TRY_RUN([
-+ AC_CACHE_CHECK([what tgetent() returns for an unknown terminal], [vim_cv_tgent],
-+ [
-+ AC_RUN_IFELSE([
- #ifdef HAVE_TERMCAP_H
- # include <termcap.h>
- #endif
- main()
--{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }],
-- AC_MSG_RESULT(zero); AC_DEFINE(TGETENT_ZERO_ERR, 0),
-- AC_MSG_RESULT(non-zero),
-- AC_MSG_ERROR(failed to compile test program.))
-+{char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist"); exit(res != 0); }
-+ ],[
-+ vim_cv_tgent=zero
-+ AC_MSG_RESULT(zero)
-+ ],[
-+ vim_cv_tgent=non-zero
-+ AC_MSG_RESULT(non-zero)
-+ ],[
-+ AC_MSG_ERROR(failed to compile test program.)
-+ ])
-+ ])
-+
-+ if test "x$vim_cv_tgent" = "xzero" ; then
-+ AC_DEFINE(TGETENT_ZERO_ERR, 0)
-+ fi
- fi
-
- AC_MSG_CHECKING(whether termcap.h contains ospeed)
-@@ -2333,9 +2363,10 @@
- dnl **** pty mode/group handling ****
- dnl
- dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
--AC_MSG_CHECKING(default tty permissions/group)
- rm -f conftest_grp
--AC_TRY_RUN([
-+ AC_CACHE_CHECK([default tty permissions/group], [vim_cv_tty_group],
-+ [
-+ AC_RUN_IFELSE([
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <stdio.h>
-@@ -2363,20 +2394,35 @@
- fclose(fp);
- exit(0);
- }
--],[
-- if test -f conftest_grp; then
-- ptygrp=`cat conftest_grp`
-- AC_MSG_RESULT([pty mode: 0620, group: $ptygrp])
-- AC_DEFINE(PTYMODE, 0620)
-- AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
-- else
-+ ],[
-+ if test -f conftest_grp; then
-+ vim_cv_tty_group=`cat conftest_grp`
-+ if test "x$vim_cv_tty_mode" = "x" ; then
-+ vim_cv_tty_mode=0620
-+ fi
-+ AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group])
-+ else
-+ vim_cv_tty_group=world
- AC_MSG_RESULT([ptys are world accessable])
-- fi
--],
-- AC_MSG_RESULT([can't determine - assume ptys are world accessable]),
-- AC_MSG_ERROR(failed to compile test program))
-+ fi
-+ ],[
-+ vim_cv_tty_group=world
-+ AC_MSG_RESULT([can't determine - assume ptys are world accessable])
-+ ],[
-+ AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode')
-+ ])
-+ ])
- rm -f conftest_grp
-
-+if test "x$vim_cv_tty_group" != "xworld" ; then
-+ AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
-+ if test "x$vim_cv_tty_mode" = "x" ; then
-+ AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (propably 0620)])
-+ else
-+ AC_DEFINE(PTYMODE, 0620)
-+ fi
-+fi
-+
- dnl Checks for library functions. ===================================
-
- AC_TYPE_SIGNAL
-@@ -2404,8 +2450,9 @@
-
- dnl tricky stuff: try to find out if getcwd() is implemented with
- dnl system("sh -c pwd")
--AC_MSG_CHECKING(getcwd implementation)
--AC_TRY_RUN([
-+AC_CACHE_CHECK([getcwd implementation is broken], [vim_cv_getcwd_broken],
-+ [
-+ AC_RUN_IFELSE([
- char *dagger[] = { "IFS=pwd", 0 };
- main()
- {
-@@ -2413,11 +2460,21 @@
- extern char **environ;
- environ = dagger;
- return getcwd(buffer, 500) ? 0 : 1;
--}],
-- AC_MSG_RESULT(it is usable),
-- AC_MSG_RESULT(it stinks)
-- AC_DEFINE(BAD_GETCWD),
-- AC_MSG_ERROR(failed to compile test program))
-+}
-+ ],[
-+ vim_cv_getcwd_broken=no
-+ AC_MSG_RESULT(no)
-+ ],[
-+ vim_cv_getcwd_broken=yes
-+ AC_MSG_RESULT(yes)
-+ ],[
-+ AC_MSG_ERROR(cross-compiling: please set 'vim_cv_getcwd_broken')
-+ ])
-+ ])
-+
-+if test "x$vim_cv_getcwd_broken" = "xyes" ; then
-+ AC_DEFINE(BAD_GETCWD)
-+fi
-
- dnl Check for functions in one big call, to reduce the size of configure
- AC_CHECK_FUNCS(bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \
-@@ -2441,14 +2498,27 @@
- AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
- AC_MSG_RESULT(no))
-
--AC_MSG_CHECKING(whether stat() ignores a trailing slash)
--AC_TRY_RUN(
-+AC_CACHE_CHECK([whether stat() ignores a trailing slash], [vim_cv_stat_ignores_slash],
-+ [
-+ AC_RUN_IFELSE(
- [#include <sys/types.h>
- #include <sys/stat.h>
--main() {struct stat st; exit(stat("configure/", &st) != 0); }],
-- AC_MSG_RESULT(yes); AC_DEFINE(STAT_IGNORES_SLASH),
-- AC_MSG_RESULT(no), AC_MSG_ERROR(failed to compile test program))
-+main() {struct stat st; exit(stat("configure/", &st) != 0); }
-+ ],[
-+ vim_cv_stat_ignores_slash=yes
-+ AC_MSG_RESULT(yes)
-+ ],[
-+ vim_cv_stat_ignores_slash=no
-+ AC_MSG_RESULT(no)
-+ ],[
-+ AC_MSG_ERROR(cross-compiling: please set 'vim_cv_stat_ignores_slash')
-+ ])
-+ ])
-
-+if test "x$vim_cv_stat_ignores_slash" = "xyes" ; then
-+ AC_DEFINE(STAT_IGNORES_SLASH)
-+fi
-+
- dnl Link with iconv for charset translation, if not found without library.
- dnl check for iconv() requires including iconv.h
- dnl Add "-liconv" when possible; Solaris has iconv but use GNU iconv when it
-@@ -2641,7 +2711,10 @@
- AC_MSG_RESULT($ac_cv_sizeof_int)
- AC_DEFINE_UNQUOTED(SIZEOF_INT, $ac_cv_sizeof_int)
-
--AC_MSG_CHECKING(whether memmove/bcopy/memcpy handle overlaps)
-+
-+dnl Check for memmove() before bcopy(), makes memmove() be used when both are
-+dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
-+
- [bcopy_test_prog='
- main() {
- char buf[10];
-@@ -2656,18 +2729,60 @@
- exit(0); /* libc version works properly. */
- }']
-
--dnl Check for memmove() before bcopy(), makes memmove() be used when both are
--dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
-+AC_CACHE_CHECK([whether memmove handles overlaps],[vim_cv_memmove_handles_overlap],
-+ [
-+ AC_RUN_IFELSE([#define mch_memmove(s,d,l) memmove(d,s,l) $bcopy_test_prog],
-+ [
-+ vim_cv_memmove_handles_overlap=yes
-+ AC_MSG_RESULT(yes)
-+ ],[
-+ vim_cv_memmove_handles_overlap=no
-+ AC_MSG_RESULT(no)
-+ ],[
-+ AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memmove_handles_overlap')
-+ ])
-+ ])
-+
-+if test "x$vim_cv_memmove_handles_overlap" = "xyes" ; then
-+ AC_DEFINE(USEMEMMOVE)
-+else
-+ AC_CACHE_CHECK([whether bcopy handles overlaps],[vim_cv_bcopy_handles_overlap],
-+ [
-+ AC_RUN_IFELSE([#define mch_bcopy(s,d,l) bcopy(d,s,l) $bcopy_test_prog],
-+ [
-+ vim_cv_bcopy_handles_overlap=yes
-+ AC_MSG_RESULT(yes)
-+ ],[
-+ vim_cv_bcopy_handles_overlap=no
-+ AC_MSG_RESULT(no)
-+ ],[
-+ AC_MSG_ERROR(cross-compiling: please set 'vim_cv_bcopy_handles_overlap')
-+ ])
-+ ])
-+
-+ if test "x$vim_cv_bcopy_handles_overlap" = "xyes" ; then
-+ AC_DEFINE(USEBCOPY)
-+ else
-+ AC_CACHE_CHECK([whether memcpy handles overlaps],[vim_cv_memcpy_handles_overlap],
-+ [
-+ AC_RUN_IFELSE([#define mch_memcpy(s,d,l) memcpy(d,s,l) $bcopy_test_prog],
-+ [
-+ vim_cv_memcpy_handles_overlap=yes
-+ AC_MSG_RESULT(yes)
-+ ],[
-+ vim_cv_memcpy_handles_overlap=no
-+ AC_MSG_RESULT(no)
-+ ],[
-+ AC_MSG_ERROR(cross-compiling: please set 'vim_cv_memcpy_handles_overlap')
-+ ])
-+ ])
-+
-+ if test "x$vim_cv_memcpy_handles_overlap" = "xyes" ; then
-+ AC_DEFINE(USEMEMCPY)
-+ fi
-+ fi
-+fi
-
--AC_TRY_RUN([#define mch_memmove(s,d,l) memmove(d,s,l) $bcopy_test_prog],
-- AC_DEFINE(USEMEMMOVE) AC_MSG_RESULT(memmove does),
-- AC_TRY_RUN([#define mch_memmove(s,d,l) bcopy(d,s,l) $bcopy_test_prog],
-- AC_DEFINE(USEBCOPY) AC_MSG_RESULT(bcopy does),
-- AC_TRY_RUN([#define mch_memmove(s,d,l) memcpy(d,s,l) $bcopy_test_prog],
-- AC_DEFINE(USEMEMCPY) AC_MSG_RESULT(memcpy does), AC_MSG_RESULT(no),
-- AC_MSG_ERROR(failed to compile test program)),
-- AC_MSG_ERROR(failed to compile test program)),
-- AC_MSG_ERROR(failed to compile test program))
-
- dnl Check for multibyte locale functions
- dnl Find out if _Xsetlocale() is supported by libX11.
diff --git a/data/vim/make.sh b/data/vim/make.sh
index 2b1f703be..5a68d377e 100644
--- a/data/vim/make.sh
+++ b/data/vim/make.sh
@@ -1,14 +1,18 @@
-pkg:setup
+pkg:extract
+cd *
-for ((x = 1; x != 23; ++x)); do
- patch -p0 <"${PKG_DATA}/patches/7.2.$(printf '%.3u\n' "$x")"
+for patch in "${PKG_DATA}/patches/8.1."*; do
+ echo Applying patch $(basename "${patch}")
+ patch -p0 <"${patch}"
done
+pkg:patch
cd src
autoconf
cd ..
-pkg:configure --enable-gui=no --without-x vim_cv_toupper_broken=no --with-tlib=ncurses vim_cv_terminfo=yes vim_cv_tty_group=4 vim_cv_tty_mode=0620 vim_cv_getcwd_broken=no vim_cv_stat_ignores_slash=no ac_cv_sizeof_int=4 vim_cv_memmove_handles_overlap=yes
+pkg:configure --enable-gui=no --without-x vim_cv_toupper_broken=no --with-tlib=ncurses vim_cv_terminfo=yes vim_cv_tty_group=4 vim_cv_tty_mode=0620 vim_cv_getcwd_broken=no vim_cv_stat_ignores_slash=no ac_cv_sizeof_int=4 vim_cv_memmove_handles_overlap=yes vim_cv_tgetent=zero --disable-darwin
make
pkg:install
pkg: mkdir -p /etc/profile.d
pkg: cp -a %/vim.sh /etc/profile.d
+pkg: ln -s vim /usr/bin/vi
diff --git a/data/vim/patches/7.2.001 b/data/vim/patches/7.2.001
deleted file mode 100644
index 3bcb7d090..000000000
--- a/data/vim/patches/7.2.001
+++ /dev/null
@@ -1,61 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.001
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.001
-Problem: Mac: pseudo-ttys don't work properly on Leopard, resulting in the
- shell not to have a prompt, CTRL-C not working, etc.
-Solution: Don't use SVR4 compatible ptys, even though they are detected.
- (Ben Schmidt)
-Files: src/pty.c
-
-
-*** ../vim-7.2.000/src/pty.c Wed Aug 6 19:04:29 2008
---- src/pty.c Fri Aug 15 04:00:34 2008
-***************
-*** 270,278 ****
- }
- #endif
-
-! #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux)
-
-! /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work! */
- #define PTY_DONE
- int
- OpenPTY(ttyn)
---- 270,279 ----
- }
- #endif
-
-! #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) && !defined(MACOS_X)
-
-! /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work!
-! * Same for Mac OS X Leopard. */
- #define PTY_DONE
- int
- OpenPTY(ttyn)
-*** ../vim-7.2.000/src/version.c Sat Aug 9 19:37:37 2008
---- src/version.c Sun Aug 17 22:56:25 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 1,
- /**/
-
---
-ARTHUR: Now stand aside worthy adversary.
-BLACK KNIGHT: (Glancing at his shoulder) 'Tis but a scratch.
-ARTHUR: A scratch? Your arm's off.
- "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.002 b/data/vim/patches/7.2.002
deleted file mode 100644
index e1ee32cd5..000000000
--- a/data/vim/patches/7.2.002
+++ /dev/null
@@ -1,47 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.002
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.002
-Problem: Leaking memory when displaying menus.
-Solution: Free allocated memory. (Dominique Pelle)
-Files: src/menu.c
-
-
-*** ../vim-7.2.001/src/menu.c Wed Jun 25 00:19:17 2008
---- src/menu.c Sat Aug 16 05:38:45 2008
-***************
-*** 1120,1125 ****
---- 1120,1126 ----
- parent = menu;
- menu = menu->children;
- }
-+ vim_free(path_name);
-
- /* Now we have found the matching menu, and we list the mappings */
- /* Highlight title */
-*** ../vim-7.2.001/src/version.c Sun Aug 17 23:01:21 2008
---- src/version.c Sun Aug 17 23:42:53 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 2,
- /**/
-
---
-ARTHUR: You are indeed brave Sir knight, but the fight is mine.
-BLACK KNIGHT: Had enough?
-ARTHUR: You stupid bastard. You havn't got any arms left.
- "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.003 b/data/vim/patches/7.2.003
deleted file mode 100644
index 626d81e5a..000000000
--- a/data/vim/patches/7.2.003
+++ /dev/null
@@ -1,107 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.003
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.003
-Problem: Typo in translated message. Message not translated.
-Solution: Correct spelling. Add _(). (Dominique Pelle)
-Files: src/spell.c, src/version.c
-
-
-*** ../vim-7.2.002/src/spell.c Tue Jun 24 22:21:31 2008
---- src/spell.c Sun Aug 10 12:51:38 2008
-***************
-*** 77,83 ****
-
- /*
- * Do the opposite: based on a maximum end score and a known sound score,
-! * compute the the maximum word score that can be used.
- */
- #define MAXSCORE(word_score, sound_score) ((4 * word_score - sound_score) / 3)
-
---- 77,83 ----
-
- /*
- * Do the opposite: based on a maximum end score and a known sound score,
-! * compute the maximum word score that can be used.
- */
- #define MAXSCORE(word_score, sound_score) ((4 * word_score - sound_score) / 3)
-
-***************
-*** 625,631 ****
- /* TRUE if a word appears in the list of banned words. */
- #define WAS_BANNED(su, word) (!HASHITEM_EMPTY(hash_find(&su->su_banned, word)))
-
-! /* Number of suggestions kept when cleaning up. we need to keep more than
- * what is displayed, because when rescore_suggestions() is called the score
- * may change and wrong suggestions may be removed later. */
- #define SUG_CLEAN_COUNT(su) ((su)->su_maxcount < 130 ? 150 : (su)->su_maxcount + 20)
---- 625,631 ----
- /* TRUE if a word appears in the list of banned words. */
- #define WAS_BANNED(su, word) (!HASHITEM_EMPTY(hash_find(&su->su_banned, word)))
-
-! /* Number of suggestions kept when cleaning up. We need to keep more than
- * what is displayed, because when rescore_suggestions() is called the score
- * may change and wrong suggestions may be removed later. */
- #define SUG_CLEAN_COUNT(su) ((su)->su_maxcount < 130 ? 150 : (su)->su_maxcount + 20)
-***************
-*** 5980,5986 ****
- else if (spin->si_newprefID == 0 || spin->si_newprefID == 127)
- MSG(_("Too many compound flags"));
- else
-! MSG(_("Too many posponed prefixes and/or compound flags"));
- }
-
- if (syllable != NULL)
---- 5980,5986 ----
- else if (spin->si_newprefID == 0 || spin->si_newprefID == 127)
- MSG(_("Too many compound flags"));
- else
-! MSG(_("Too many postponed prefixes and/or compound flags"));
- }
-
- if (syllable != NULL)
-*** ../vim-7.2.002/src/version.c Sun Aug 17 23:43:53 2008
---- src/version.c Mon Aug 25 04:06:52 2008
-***************
-*** 790,796 ****
- MSG_PUTS(_("\nRISC OS version"));
- #endif
- #ifdef VMS
-! MSG_PUTS("\nOpenVMS version");
- # ifdef HAVE_PATHDEF
- if (*compiled_arch != NUL)
- {
---- 792,798 ----
- MSG_PUTS(_("\nRISC OS version"));
- #endif
- #ifdef VMS
-! MSG_PUTS(_("\nOpenVMS version"));
- # ifdef HAVE_PATHDEF
- if (*compiled_arch != NUL)
- {
-*** ../vim-7.2.002/src/version.c Sun Aug 17 23:43:53 2008
---- src/version.c Mon Aug 25 04:06:52 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 3,
- /**/
-
---
-I learned the customs and mannerisms of engineers by observing them, much the
-way Jane Goodall learned about the great apes, but without the hassle of
-grooming.
- (Scott Adams - The Dilbert principle)
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.004 b/data/vim/patches/7.2.004
deleted file mode 100644
index 8e7ed3e9d..000000000
--- a/data/vim/patches/7.2.004
+++ /dev/null
@@ -1,103 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.004
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.004
-Problem: Cscope help message is not translated.
-Solution: Put it in _(). (Dominique Pelle)
-Files: src/if_cscope.c, src/if_cscope.h
-
-
-*** ../vim-7.2.003/src/if_cscope.c Tue Jun 24 23:52:06 2008
---- src/if_cscope.c Mon Aug 25 04:34:19 2008
-***************
-*** 74,80 ****
- { "add", cs_add,
- N_("Add a new database"), "add file|dir [pre-path] [flags]", 0 },
- { "find", cs_find,
-! N_("Query for a pattern"), FIND_USAGE, 1 },
- { "help", cs_help,
- N_("Show this message"), "help", 0 },
- { "kill", cs_kill,
---- 74,80 ----
- { "add", cs_add,
- N_("Add a new database"), "add file|dir [pre-path] [flags]", 0 },
- { "find", cs_find,
-! N_("Query for a pattern"), "find c|d|e|f|g|i|s|t name", 1 },
- { "help", cs_help,
- N_("Show this message"), "help", 0 },
- { "kill", cs_kill,
-***************
-*** 1180,1186 ****
- (void)smsg((char_u *)_("%-5s: %-30s (Usage: %s)"),
- cmdp->name, _(cmdp->help), cmdp->usage);
- if (strcmp(cmdp->name, "find") == 0)
-! MSG_PUTS(FIND_HELP);
- cmdp++;
- }
-
---- 1180,1195 ----
- (void)smsg((char_u *)_("%-5s: %-30s (Usage: %s)"),
- cmdp->name, _(cmdp->help), cmdp->usage);
- if (strcmp(cmdp->name, "find") == 0)
-! MSG_PUTS(_("\n"
-! " c: Find functions calling this function\n"
-! " d: Find functions called by this function\n"
-! " e: Find this egrep pattern\n"
-! " f: Find this file\n"
-! " g: Find this definition\n"
-! " i: Find files #including this file\n"
-! " s: Find this C symbol\n"
-! " t: Find assignments to\n"));
-!
- cmdp++;
- }
-
-*** ../vim-7.2.003/src/if_cscope.h Thu Sep 6 17:38:58 2007
---- src/if_cscope.h Mon Aug 25 04:34:17 2008
-***************
-*** 42,58 ****
- * f 7name Find this file
- * i 8name Find files #including this file
- */
-- #define FIND_USAGE "find c|d|e|f|g|i|s|t name"
-- #define FIND_HELP "\n\
-- c: Find functions calling this function\n\
-- d: Find functions called by this function\n\
-- e: Find this egrep pattern\n\
-- f: Find this file\n\
-- g: Find this definition\n\
-- i: Find files #including this file\n\
-- s: Find this C symbol\n\
-- t: Find assignments to\n"
--
-
- typedef struct {
- char * name;
---- 42,47 ----
-*** ../vim-7.2.003/src/version.c Mon Aug 25 04:12:38 2008
---- src/version.c Mon Aug 25 04:29:53 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 4,
- /**/
-
---
-If someone questions your market projections, simply point out that your
-target market is "People who are nuts" and "People who will buy any damn
-thing". Nobody is going to tell you there aren't enough of those people
-to go around.
- (Scott Adams - The Dilbert principle)
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.005 b/data/vim/patches/7.2.005
deleted file mode 100644
index 20cce85b3..000000000
--- a/data/vim/patches/7.2.005
+++ /dev/null
@@ -1,149 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.005
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.005
-Problem: A few problems when profiling. Using flag pointer instead of flag
- value. Allocating zero bytes. Not freeing used memory.
-Solution: Remove wrong '&' characters. Skip dumping when there is nothing
- to dump. Free used memory. (Dominique Pelle)
-Files: src/eval.c
-
-
-*** ../vim-7.2.004/src/eval.c Fri Aug 8 12:36:31 2008
---- src/eval.c Mon Aug 25 04:40:11 2008
-***************
-*** 3657,3664 ****
- }
-
- /*
-! * Return TRUE if typeval "tv" is locked: Either tha value is locked itself or
-! * it refers to a List or Dictionary that is locked.
- */
- static int
- tv_islocked(tv)
---- 3657,3664 ----
- }
-
- /*
-! * Return TRUE if typeval "tv" is locked: Either that value is locked itself
-! * or it refers to a List or Dictionary that is locked.
- */
- static int
- tv_islocked(tv)
-***************
-*** 15838,15847 ****
- if (res == FAIL)
- res = ITEM_COMPARE_FAIL;
- else
-- /* return value has wrong type */
- res = get_tv_number_chk(&rettv, &item_compare_func_err);
- if (item_compare_func_err)
-! res = ITEM_COMPARE_FAIL;
- clear_tv(&rettv);
- return res;
- }
---- 15838,15846 ----
- if (res == FAIL)
- res = ITEM_COMPARE_FAIL;
- else
- res = get_tv_number_chk(&rettv, &item_compare_func_err);
- if (item_compare_func_err)
-! res = ITEM_COMPARE_FAIL; /* return value has wrong type */
- clear_tv(&rettv);
- return res;
- }
-***************
-*** 20590,20595 ****
---- 20589,20597 ----
- int st_len = 0;
-
- todo = (int)func_hashtab.ht_used;
-+ if (todo == 0)
-+ return; /* nothing to dump */
-+
- sorttab = (ufunc_T **)alloc((unsigned)(sizeof(ufunc_T) * todo));
-
- for (hi = func_hashtab.ht_array; todo > 0; ++hi)
-***************
-*** 20638,20643 ****
---- 20640,20647 ----
- prof_self_cmp);
- prof_sort_list(fd, sorttab, st_len, "SELF", TRUE);
- }
-+
-+ vim_free(sorttab);
- }
-
- static void
-***************
-*** 21204,21210 ****
- if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
- func_do_profile(fp);
- if (fp->uf_profiling
-! || (fc.caller != NULL && &fc.caller->func->uf_profiling))
- {
- ++fp->uf_tm_count;
- profile_start(&call_start);
---- 21208,21214 ----
- if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
- func_do_profile(fp);
- if (fp->uf_profiling
-! || (fc.caller != NULL && fc.caller->func->uf_profiling))
- {
- ++fp->uf_tm_count;
- profile_start(&call_start);
-***************
-*** 21235,21247 ****
-
- #ifdef FEAT_PROFILE
- if (do_profiling == PROF_YES && (fp->uf_profiling
-! || (fc.caller != NULL && &fc.caller->func->uf_profiling)))
- {
- profile_end(&call_start);
- profile_sub_wait(&wait_start, &call_start);
- profile_add(&fp->uf_tm_total, &call_start);
- profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children);
-! if (fc.caller != NULL && &fc.caller->func->uf_profiling)
- {
- profile_add(&fc.caller->func->uf_tm_children, &call_start);
- profile_add(&fc.caller->func->uf_tml_children, &call_start);
---- 21239,21251 ----
-
- #ifdef FEAT_PROFILE
- if (do_profiling == PROF_YES && (fp->uf_profiling
-! || (fc.caller != NULL && fc.caller->func->uf_profiling)))
- {
- profile_end(&call_start);
- profile_sub_wait(&wait_start, &call_start);
- profile_add(&fp->uf_tm_total, &call_start);
- profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children);
-! if (fc.caller != NULL && fc.caller->func->uf_profiling)
- {
- profile_add(&fc.caller->func->uf_tm_children, &call_start);
- profile_add(&fc.caller->func->uf_tml_children, &call_start);
-*** ../vim-7.2.004/src/version.c Mon Aug 25 04:35:13 2008
---- src/version.c Mon Aug 25 04:46:44 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 5,
- /**/
-
---
-The process for understanding customers primarily involves sitting around with
-other marketing people and talking about what you would to if you were dumb
-enough to be a customer.
- (Scott Adams - The Dilbert principle)
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.006 b/data/vim/patches/7.2.006
deleted file mode 100644
index f22eeae53..000000000
--- a/data/vim/patches/7.2.006
+++ /dev/null
@@ -1,50 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.006
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.006
-Problem: HTML files are not recognized by contents.
-Solution: Add a rule to the scripts file. (Nico Weber)
-Files: runtime/scripts.vim
-
-
-*** ../vim-7.2.005/runtime/scripts.vim Sat Aug 9 19:37:09 2008
---- runtime/scripts.vim Sat Aug 16 04:05:34 2008
-***************
-*** 234,239 ****
---- 234,243 ----
- elseif s:line1 =~ '\<DTD\s\+XHTML\s'
- set ft=xhtml
-
-+ " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
-+ elseif s:line1 =~? '\<DOCTYPE\s\+html\>'
-+ set ft=html
-+
- " PDF
- elseif s:line1 =~ '^%PDF-'
- set ft=pdf
-*** ../vim-7.2.005/src/version.c Mon Aug 25 04:48:21 2008
---- src/version.c Mon Aug 25 05:02:34 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 6,
- /**/
-
---
-Never enter the boss's office unless it's absolutely necessary. Every boss
-saves one corner of the desk for useless assignments that are doled out like
-Halloween candy to each visitor.
- (Scott Adams - The Dilbert principle)
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.007 b/data/vim/patches/7.2.007
deleted file mode 100644
index 104b26785..000000000
--- a/data/vim/patches/7.2.007
+++ /dev/null
@@ -1,493 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.007 (extra)
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.007 (extra)
-Problem: Minor issues for VMS.
-Solution: Minor fixes for VMS. Add float support. (Zoltan Arpadffy)
-Files: runtime/doc/os_vms.txt, src/os_vms_conf.h, src/Make_vms.mms,
- src/testdir/Make_vms.mms, src/testdir/test30.in,
- src/testdir/test54.in
-
-
-*** ../vim-7.2.006/runtime/doc/os_vms.txt Sat Aug 9 19:36:50 2008
---- runtime/doc/os_vms.txt Tue Aug 19 06:29:31 2008
-***************
-*** 1,4 ****
-! *os_vms.txt* For Vim version 7.2. Last change: 2006 Nov 18
-
-
- VIM REFERENCE MANUAL
---- 1,4 ----
-! *os_vms.txt* For Vim version 7.2. Last change: 2008 Aug 19
-
-
- VIM REFERENCE MANUAL
-***************
-*** 312,318 ****
-
- 8. Useful notes *vms-notes*
-
-! 8.1 backspace/delete
- 8.2 Filters
- 8.3 VMS file version numbers
- 8.4 Directory conversion
---- 312,318 ----
-
- 8. Useful notes *vms-notes*
-
-! 8.1 Backspace/delete
- 8.2 Filters
- 8.3 VMS file version numbers
- 8.4 Directory conversion
-***************
-*** 326,333 ****
- 8.12 diff-mode
- 8.13 Allow '$' in C keywords
- 8.14 VIMTUTOR for beginners
-
-! 8.1 backspace/delete
-
- There are backspace/delete key inconsistencies with VMS.
- :fixdel doesn't do the trick, but the solution is: >
---- 326,335 ----
- 8.12 diff-mode
- 8.13 Allow '$' in C keywords
- 8.14 VIMTUTOR for beginners
-+ 8.15 Slow start in console mode issue
-+ 8.16 Common VIM directory - different architectures
-
-! 8.1 Backspace/delete
-
- There are backspace/delete key inconsistencies with VMS.
- :fixdel doesn't do the trick, but the solution is: >
-***************
-*** 663,674 ****
-
- (Thomas.R.Wyant III, Vim 6.1)
-
- ==============================================================================
-
- 9. VMS related changes *vms-changes*
-
-! Version 7
- - Improved low level char input (affects just console mode)
-
- Version 6.4 (2005 Oct 15)
- - GTKLIB and Vim build on IA64
---- 665,794 ----
-
- (Thomas.R.Wyant III, Vim 6.1)
-
-+ 8.14 Slow start in console mode issue
-+
-+ As GUI/GTK Vim works equally well in console mode, many administartors
-+ deploy those executables system wide.
-+ Unfortunately, on a remote slow connections GUI/GTK executables behave rather
-+ slow when user wants to run Vim just in the console mode - because of X environment detection timeout.
-+
-+ Luckily, there is a simple solution for that. Administrators need to deploy
-+ both GUI/GTK build and just console build executables, like below: >
-+
-+ |- vim72
-+ |----- doc
-+ |----- syntax
-+ vimrc (system rc files)
-+ gvimrc
-+ gvim.exe (the remaned GUI or GTK built vim.exe)
-+ vim.exe (the console only executable)
-+
-+ Define system symbols like below in for ex in LOGIN.COM or SYLOGIN.COM: >
-+
-+ $ define/nolog VIM RF10:[UTIL.VIM72] ! where you VIM directory is
-+ $ vi*m :== mcr VIM:VIM.EXE
-+ $ gvi*m :== mcr VIM:GVIM.EXE
-+ $ ! or you can try to spawn with
-+ $ gv*im :== spawn/nowait/input=NLA0 mcr VIM:GVIM.EXE -g -GEOMETRY 80x40
-+
-+
-+ Like this, users that do not have X environment and want to use Vim just in
-+ console mode can avoid performance problems.
-+
-+ (Zoltan Arpadffy, Vim 7.2)
-+
-+ 8.15 Common VIM directory - different architectures
-+
-+ In a cluster that contains nodes with different architectures like below:
-+
-+ $show cluster
-+ View of Cluster from system ID 11655 node: TOR 18-AUG-2008 11:58:31
-+ +---------------------------------+
-+ ¦ SYSTEMS ¦ MEMBERS ¦
-+ +-----------------------+---------¦
-+ ¦ NODE ¦ SOFTWARE ¦ STATUS ¦
-+ +--------+--------------+---------¦
-+ ¦ TOR ¦ VMS V7.3-2 ¦ MEMBER ¦
-+ ¦ TITAN2 ¦ VMS V8.3 ¦ MEMBER ¦
-+ ¦ ODIN ¦ VMS V7.3-2 ¦ MEMBER ¦
-+ +---------------------------------+
-+
-+ It is convinient to have a common VIM directory but execute different
-+ executables.
-+ There are more solutions for this problem:
-+
-+ solution 1. all executables in the same directory with different names
-+ This is easily done with the following script that can be added
-+ to the login.com or sylogin.com: >
-+
-+ $ if f$getsyi("NODE_HWTYPE") .eqs. "VAX"
-+ $ then
-+ $ say "VAX platform"
-+ $ vi*m:== mcr vim:VIM.EXE_VAX
-+ $ endif
-+ $ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH"
-+ $ then
-+ $ say "ALPHA platform"
-+ $ vi*m :== mcr vim:VIM.EXE_AXP
-+ $ endif
-+ $ if f$getsyi("ARCH_NAME") .eqs. "IA64"
-+ $ then
-+ $ say "IA64 platform"
-+ $ vi*m :== mcr vim:VIM.EXE_IA64
-+ $ endif
-+
-+ solution 2. different directories: >
-+
-+ $ if f$getsyi("NODE_HWTYPE") .eqs. "VAX"
-+ $ then
-+ $ say "VAX platform"
-+ $ define/nolog VIM RF10:[UTIL.VAX_EXE] ! VAX executables
-+ $ endif
-+ $ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH"
-+ $ then
-+ $ say "ALPHA platform"
-+ $ define/nolog VIM RF10:[UTIL.AXP_EXE] ! AXP executables
-+ $ endif
-+ $ if f$getsyi("ARCH_NAME") .eqs. "IA64"
-+ $ then
-+ $ say "IA64 platform"
-+ $ define/nolog VIM RF10:[UTIL.IA64_EXE] ! IA64 executables
-+ $ endif
-+ $! VIMRUNTIME must be defined in order to find runtime files
-+ $ define/nolog VIMRUNTIME RF10:[UTIL.VIM72]
-+
-+ A good examle for this approach is the [GNU]gnu_tools.com script from GNU_TOOLS.ZIP
-+ package downloadable from http://www.polarhome.com/vim/
-+
-+ (Zoltan Arpadffy, Vim 7.2)
-+
- ==============================================================================
-
- 9. VMS related changes *vms-changes*
-
-! Recent changes
-! - The following plugins are included into VMS runtime:
-! genutils 2.4, multiselect 2.2, multvals 3.1, selectbuf 4.3,
-! bufexplorer 7.1.7, taglist 4.5
-! - minor changes in vimrc (just in VMS runtime)
-! - make_vms.mms - HUGE model is the default
-! - [TESTDIR]make_vms.mms include as many tests possible
-! - modify test30 and test54 for VMS
-! - enable FLOAT feature in VMS port
-! - os_vms.txt updated
-!
-! Version 7.2 (2008 Aug 9)
-! - VCF files write corrected
-! - CTAGS 5.7 included
-! - corrected make_vms.mms (on VAX gave syntax error)
-!
-! Version 7.1 (2007 Jun 15)
-! - create TAGS file from menu
-!
-! Version 7 (2006 May 8)
- - Improved low level char input (affects just console mode)
-+ - Fixed plugin bug
-+ - CTAGS 5.6 included
-
- Version 6.4 (2005 Oct 15)
- - GTKLIB and Vim build on IA64
-***************
-*** 806,811 ****
---- 926,932 ----
-
- OpenVMS documentation and executables are maintained by:
- Zoltan Arpadffy <arpadffy@polarhome.com>
-+ OpenVMS Vim page: http://www.polarhome.com/vim/
-
- This document uses parts and remarks from earlier authors and contributors
- of OS_VMS.TXT:
-*** ../vim-7.2.006/src/os_vms_conf.h Thu May 10 19:26:17 2007
---- src/os_vms_conf.h Sat Aug 16 05:09:17 2008
-***************
-*** 114,119 ****
---- 114,121 ----
- #define HAVE_PUTENV
- #define HAVE_SETENV
- #define HAVE_SETJMP_H
-+ #define HAVE_MATH_H
-+ #define HAVE_FLOAT_FUNCS
-
- #undef HAVE_DIRENT_H
- #undef HAVE_SYS_NDIR_H
-*** ../vim-7.2.006/src/Make_vms.mms Mon Oct 29 22:38:54 2007
---- src/Make_vms.mms Sat Aug 16 05:17:41 2008
-***************
-*** 2,8 ****
- # Makefile for Vim on OpenVMS
- #
- # Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com>
-! # Last change: 2007 Oct 22
- #
- # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
- # with MMS and MMK
---- 2,8 ----
- # Makefile for Vim on OpenVMS
- #
- # Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com>
-! # Last change: 2008 Aug 16
- #
- # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
- # with MMS and MMK
-***************
-*** 36,42 ****
- # BIG - Many features enabled, as rich as possible. (default)
- # HUGE - All possible featues enabled.
- # Please select one of these alternatives above.
-! MODEL = BIG
-
- # GUI or terminal mode executable.
- # Comment out if you want just the character terminal mode only.
---- 36,42 ----
- # BIG - Many features enabled, as rich as possible. (default)
- # HUGE - All possible featues enabled.
- # Please select one of these alternatives above.
-! MODEL = HUGE
-
- # GUI or terminal mode executable.
- # Comment out if you want just the character terminal mode only.
-*** ../vim-7.2.006/src/testdir/Make_vms.mms Wed Jun 25 00:34:23 2008
---- src/testdir/Make_vms.mms Tue Aug 19 06:28:07 2008
-***************
-*** 4,12 ****
- # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
- # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
- #
-! # Last change: 2008 Jun 19
- #
-! # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX.
- # Edit the lines in the Configuration section below to select.
- #
- # Execute with:
---- 4,12 ----
- # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
- # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
- #
-! # Last change: 2008 Aug 19
- #
-! # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
- # Edit the lines in the Configuration section below to select.
- #
- # Execute with:
-***************
-*** 32,37 ****
---- 32,46 ----
- # and directory handling.
- # WANT_UNIX = YES
-
-+ # Comment out if you want to run Win32 specific tests as well, but please
-+ # be aware, that on OpenVMS will fail, because of cat, rm, etc commands
-+ # and directory handling.
-+ # WANT_WIN = YES
-+
-+ # Comment out if you want to run spell checker tests.
-+ # They fail because VMS does not support file names.
-+ # WANT_SPELL = YES
-+
- # Comment out if you have gzip on your system
- # HAVE_GZIP = YES
-
-***************
-*** 53,64 ****
- test13.out test14.out test15.out test17.out \
- test18.out test19.out test20.out test21.out test22.out \
- test23.out test24.out test26.out \
-! test28.out test29.out test31.out test32.out \
- test33.out test34.out test35.out test36.out test37.out \
- test38.out test39.out test40.out test41.out test42.out \
- test43.out test44.out test45.out test46.out \
- test48.out test51.out test53.out test54.out test55.out \
-! test56.out test57.out test58.out test59.out test60.out \
- test61.out test62.out test63.out test64.out test65.out
-
- .IFDEF WANT_GUI
---- 62,73 ----
- test13.out test14.out test15.out test17.out \
- test18.out test19.out test20.out test21.out test22.out \
- test23.out test24.out test26.out \
-! test28.out test29.out test30.out test31.out test32.out \
- test33.out test34.out test35.out test36.out test37.out \
- test38.out test39.out test40.out test41.out test42.out \
- test43.out test44.out test45.out test46.out \
- test48.out test51.out test53.out test54.out test55.out \
-! test56.out test57.out test60.out \
- test61.out test62.out test63.out test64.out test65.out
-
- .IFDEF WANT_GUI
-***************
-*** 67,73 ****
- .ENDIF
-
- .IFDEF WANT_UNIX
-! SCRIPT_UNIX = test10.out test12.out test25.out test27.out test30.out test49.out
- .ENDIF
-
- .IFDEF HAVE_GZIP
---- 76,90 ----
- .ENDIF
-
- .IFDEF WANT_UNIX
-! SCRIPT_UNIX = test10.out test12.out test25.out test27.out test49.out
-! .ENDIF
-!
-! .IFDEF WANT_WIN
-! SCRIPT_WIN = test50.out test52.out
-! .ENDIF
-!
-! .IFDEF WANT_SPELL
-! SCRIPT_SPELL = test58.out test59.out
- .ENDIF
-
- .IFDEF HAVE_GZIP
-***************
-*** 84,94 ****
- -@ write sys$output " "$*" "
- -@ write sys$output "-----------------------------------------------"
- -@ create/term/wait mcr $(VIMPROG) $(GUI_OPTION) -u vms.vim --noplugin -s dotest.in $*.in
-! -@ if "''F$SEARCH("test.out.*")'" .NES. "" then differences test.out $*.ok;
- -@ if "''F$SEARCH("test.out.*")'" .NES. "" then rename test.out $*.out
- -@ if "''F$SEARCH("Xdotest.*")'" .NES. "" then delete/noconfirm/nolog Xdotest.*.*
-
-! all : clean nolog $(SCRIPT) $(SCRIPT_GUI) $(SCRIPT_UNIX) $(SCRIPT_GZIP) $(SCRIPT_GDIFF)
- -@ write sys$output " "
- -@ write sys$output "-----------------------------------------------"
- -@ write sys$output " All done"
---- 101,111 ----
- -@ write sys$output " "$*" "
- -@ write sys$output "-----------------------------------------------"
- -@ create/term/wait mcr $(VIMPROG) $(GUI_OPTION) -u vms.vim --noplugin -s dotest.in $*.in
-! -@ if "''F$SEARCH("test.out.*")'" .NES. "" then differences /par test.out $*.ok;
- -@ if "''F$SEARCH("test.out.*")'" .NES. "" then rename test.out $*.out
- -@ if "''F$SEARCH("Xdotest.*")'" .NES. "" then delete/noconfirm/nolog Xdotest.*.*
-
-! all : clean nolog $(SCRIPT) $(SCRIPT_GUI) $(SCRIPT_UNIX) $(SCRIPT_WIN) $(SCRIPT_SPELL) $(SCRIPT_GZIP) $(SCRIPT_GDIFF)
- -@ write sys$output " "
- -@ write sys$output "-----------------------------------------------"
- -@ write sys$output " All done"
-***************
-*** 113,118 ****
---- 130,137 ----
- -@ write sys$output "MAKE_VMS.MMS options:"
- -@ write sys$output " WANT_GUI = ""$(WANT_GUI)"" "
- -@ write sys$output " WANT_UNIX = ""$(WANT_UNIX)"" "
-+ -@ write sys$output " WANT_WIN = ""$(WANT_WIN)"" "
-+ -@ write sys$output " WANT_SPELL= ""$(WANT_SPELL)"" "
- -@ write sys$output " HAVE_GZIP = ""$(HAVE_GZIP)"" "
- -@ write sys$output " HAVE_GDIFF= ""$(HAVE_GDIFF)"" "
- -@ write sys$output "Default vimrc file is VMS.VIM:
-***************
-*** 122,126 ****
---- 141,153 ----
- clean :
- -@ if "''F$SEARCH("*.out")'" .NES. "" then delete/noconfirm/nolog *.out.*
- -@ if "''F$SEARCH("test.log")'" .NES. "" then delete/noconfirm/nolog test.log.*
-+ -@ if "''F$SEARCH("test.ok")'" .NES. "" then delete/noconfirm/nolog test.ok.*
- -@ if "''F$SEARCH("Xdotest.*")'" .NES. "" then delete/noconfirm/nolog Xdotest.*.*
- -@ if "''F$SEARCH("*.*_sw*")'" .NES. "" then delete/noconfirm/nolog *.*_sw*.*
-+ -@ if "''F$SEARCH("*.failed")'" .NES. "" then delete/noconfirm/nolog *.failed.*
-+ -@ if "''F$SEARCH("*.rej")'" .NES. "" then delete/noconfirm/nolog *.rej.*
-+ -@ if "''F$SEARCH("tiny.vim")'" .NES. "" then delete/noconfirm/nolog tiny.vim.*
-+ -@ if "''F$SEARCH("small.vim")'" .NES. "" then delete/noconfirm/nolog small.vim.*
-+ -@ if "''F$SEARCH("mbyte.vim")'" .NES. "" then delete/noconfirm/nolog mbyte.vim.*
-+ -@ if "''F$SEARCH("viminfo.*")'" .NES. "" then delete/noconfirm/nolog viminfo.*.*
-+
-*** ../vim-7.2.006/src/testdir/test30.in Sun Jul 13 19:17:14 2008
---- src/testdir/test30.in Sat Aug 16 04:59:37 2008
-***************
-*** 24,33 ****
- :set nobin eol
- :bwipe XXUnix XXDos XXMac
- :" create mixed format files
-! :!cat XXUnix XXDos >XXUxDs
-! :!cat XXUnix XXMac >XXUxMac
-! :!cat XXDos XXMac >XXDosMac
-! :!cat XXUnix XXDos XXMac >XXUxDsMc
- :"
- :" try reading and writing with 'fileformats' empty
- :set fileformat=unix
---- 24,40 ----
- :set nobin eol
- :bwipe XXUnix XXDos XXMac
- :" create mixed format files
-! :if has("vms")
-! : !copy XXUnix,XXDos XXUxDs.
-! : !copy XXUnix,XXMac XXUxMac.
-! : !copy XXDos,XXMac XXDosMac.
-! : !copy XXUnix,XXDos,XXMac XXUxDsMc.
-! :else
-! : !cat XXUnix XXDos >XXUxDs
-! : !cat XXUnix XXMac >XXUxMac
-! : !cat XXDos XXMac >XXDosMac
-! : !cat XXUnix XXDos XXMac >XXUxDsMc
-! :endif
- :"
- :" try reading and writing with 'fileformats' empty
- :set fileformat=unix
-*** ../vim-7.2.006/src/testdir/test54.in Sun Jan 2 12:43:19 2005
---- src/testdir/test54.in Tue Aug 19 06:26:55 2008
-***************
-*** 3,10 ****
- STARTTEST
- :so small.vim
- :e xx
-! :!rm -f test.out
-! :au BufLeave <buffer> :!echo buffer-local autommand in %>> test.out
- :e somefile " here, autocommand for xx shall write test.out
- : " but autocommand shall not apply to buffer named <buffer>
- :bwipe xx " here, autocommand shall be auto-deleted
---- 3,15 ----
- STARTTEST
- :so small.vim
- :e xx
-! :if has("vms")
-! : !del test.out.*
-! : au BufLeave <buffer> :!write sys$output "buffer-local autommand in %" > test.out
-! :else
-! : !rm -f test.out
-! : au BufLeave <buffer> :!echo buffer-local autommand in %>> test.out
-! :endif
- :e somefile " here, autocommand for xx shall write test.out
- : " but autocommand shall not apply to buffer named <buffer>
- :bwipe xx " here, autocommand shall be auto-deleted
-*** ../vim-7.2.006/src/version.c Mon Aug 25 05:03:29 2008
---- src/version.c Mon Sep 1 16:46:50 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 7,
- /**/
-
---
-How To Keep A Healthy Level Of Insanity:
-8. Don't use any punctuation marks.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.008 b/data/vim/patches/7.2.008
deleted file mode 100644
index d3fb58e5c..000000000
--- a/data/vim/patches/7.2.008
+++ /dev/null
@@ -1,63 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.008
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.008
-Problem: With a BufHidden autocommand that invokes ":bunload" the window
- count for a buffer can be wrong. (Bob Hiestand)
-Solution: Don't call enter_buffer() when already in that buffer.
-Files: src/buffer.c
-
-
-*** ../vim-7.2.007/src/buffer.c Wed Aug 6 18:32:40 2008
---- src/buffer.c Mon Sep 1 14:25:45 2008
-***************
-*** 1351,1361 ****
- }
- }
- #ifdef FEAT_AUTOCMD
- # ifdef FEAT_EVAL
-! /* An autocommand may have deleted buf or aborted the script processing! */
-! if (buf_valid(buf) && !aborting())
- # else
-! if (buf_valid(buf)) /* an autocommand may have deleted buf! */
- # endif
- #endif
- enter_buffer(buf);
---- 1351,1362 ----
- }
- }
- #ifdef FEAT_AUTOCMD
-+ /* An autocommand may have deleted "buf", already entered it (e.g., when
-+ * it did ":bunload") or aborted the script processing! */
- # ifdef FEAT_EVAL
-! if (buf_valid(buf) && buf != curbuf && !aborting())
- # else
-! if (buf_valid(buf) && buf != curbuf)
- # endif
- #endif
- enter_buffer(buf);
-*** ../vim-7.2.007/src/version.c Mon Sep 1 16:50:09 2008
---- src/version.c Mon Sep 1 17:31:28 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 8,
- /**/
-
---
-If Pacman had affected us as kids we'd be running around in dark rooms,
-munching pills and listening to repetitive music.
- -- Marcus Brigstocke
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.009 b/data/vim/patches/7.2.009
deleted file mode 100644
index fa891dcfc..000000000
--- a/data/vim/patches/7.2.009
+++ /dev/null
@@ -1,67 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.009
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.009
-Problem: Can't compile with Perl 5.10 on MS-Windows. (Cesar Romani)
-Solution: Add the Perl_sv_free2 function for dynamic loading. (Dan Sharp)
-Files: src/if_perl.xs
-
-
-*** ../vim-7.2.008/src/if_perl.xs Thu Jul 24 16:24:15 2008
---- src/if_perl.xs Mon Sep 1 14:58:37 2008
-***************
-*** 136,141 ****
---- 136,144 ----
- # define Perl_newXS_flags dll_Perl_newXS_flags
- #endif
- # define Perl_sv_free dll_Perl_sv_free
-+ # if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
-+ # define Perl_sv_free2 dll_Perl_sv_free2
-+ # endif
- # define Perl_sv_isa dll_Perl_sv_isa
- # define Perl_sv_magic dll_Perl_sv_magic
- # define Perl_sv_setiv dll_Perl_sv_setiv
-***************
-*** 268,273 ****
---- 271,277 ----
- static void (*boot_DynaLoader)_((pTHX_ CV*));
-
- #if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
-+ static void (*Perl_sv_free2)(pTHX_ SV*);
- static void (*Perl_sys_init3)(int* argc, char*** argv, char*** env);
- static void (*Perl_sys_term)(void);
- static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
-***************
-*** 367,372 ****
---- 371,377 ----
- {"Perl_TXpv_ptr", (PERL_PROC*)&Perl_TXpv_ptr},
- {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr},
- #else
-+ {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
- {"Perl_sys_init3", (PERL_PROC*)&Perl_sys_init3},
- {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
- {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
-*** ../vim-7.2.008/src/version.c Mon Sep 1 17:32:40 2008
---- src/version.c Mon Sep 1 17:55:24 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 9,
- /**/
-
---
-How To Keep A Healthy Level Of Insanity:
-11. Specify that your drive-through order is "to go".
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.010 b/data/vim/patches/7.2.010
deleted file mode 100644
index 47315881e..000000000
--- a/data/vim/patches/7.2.010
+++ /dev/null
@@ -1,206 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.010
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.010
-Problem: When using "K" in Visual mode not all characters are properly
- escaped. (Ben Schmidt)
-Solution: Use a function with the functionality of shellescape(). (Jan
- Minar)
-Files: src/mbyte.c, src/misc2.c, src/normal.c
-
-
-*** ../vim-7.2.009/src/mbyte.c Wed Aug 6 18:45:36 2008
---- src/mbyte.c Wed Sep 3 22:34:48 2008
-***************
-*** 2540,2546 ****
- return (int)(p - q);
- }
-
-- #if defined(FEAT_EVAL) || defined(PROTO)
- /*
- * Copy a character from "*fp" to "*tp" and advance the pointers.
- */
---- 2540,2545 ----
-***************
-*** 2555,2561 ****
- *tp += l;
- *fp += l;
- }
-- #endif
-
- /*
- * Return the offset from "p" to the first byte of a character. When "p" is
---- 2554,2559 ----
-*** ../vim-7.2.009/src/misc2.c Thu Jul 24 20:28:58 2008
---- src/misc2.c Wed Sep 3 22:05:21 2008
-***************
-*** 1257,1263 ****
- return escaped_string;
- }
-
-- #if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO)
- /*
- * Return TRUE when 'shell' has "csh" in the tail.
- */
---- 1257,1262 ----
-***************
-*** 1266,1274 ****
- {
- return (strstr((char *)gettail(p_sh), "csh") != NULL);
- }
-- #endif
-
-- #if defined(FEAT_EVAL) || defined(PROTO)
- /*
- * Escape "string" for use as a shell argument with system().
- * This uses single quotes, except when we know we need to use double qoutes
---- 1265,1271 ----
-***************
-*** 1391,1397 ****
-
- return escaped_string;
- }
-- #endif
-
- /*
- * Like vim_strsave(), but make all characters uppercase.
---- 1388,1393 ----
-*** ../vim-7.2.009/src/normal.c Thu Jul 31 22:03:54 2008
---- src/normal.c Sat Sep 6 15:06:07 2008
-***************
-*** 5469,5474 ****
---- 5469,5479 ----
- STRCPY(buf, "he! ");
- else
- {
-+ /* An external command will probably use an argument starting
-+ * with "-" as an option. To avoid trouble we skip the "-". */
-+ while (*ptr == '-')
-+ ++ptr;
-+
- /* When a count is given, turn it into a range. Is this
- * really what we want? */
- isman = (STRCMP(kp, "man") == 0);
-***************
-*** 5511,5547 ****
- /*
- * Now grab the chars in the identifier
- */
-! if (cmdchar == '*')
-! aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\");
-! else if (cmdchar == '#')
-! aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
-! else if (cmdchar == 'K' && !kp_help)
-! aux_ptr = (char_u *)" \t\\\"|!";
-! else
-! /* Don't escape spaces and Tabs in a tag with a backslash */
-! aux_ptr = (char_u *)"\\|\"";
-!
-! p = buf + STRLEN(buf);
-! while (n-- > 0)
-! {
-! /* put a backslash before \ and some others */
-! if (vim_strchr(aux_ptr, *ptr) != NULL)
-! *p++ = '\\';
-! #ifdef FEAT_MBYTE
-! /* When current byte is a part of multibyte character, copy all bytes
-! * of that character. */
-! if (has_mbyte)
- {
-! int i;
-! int len = (*mb_ptr2len)(ptr) - 1;
-!
-! for (i = 0; i < len && n >= 1; ++i, --n)
-! *p++ = *ptr++;
- }
- #endif
-! *p++ = *ptr++;
- }
-- *p = NUL;
-
- /*
- * Execute the command.
---- 5516,5572 ----
- /*
- * Now grab the chars in the identifier
- */
-! if (cmdchar == 'K' && !kp_help)
-! {
-! /* Escape the argument properly for a shell command */
-! p = vim_strsave_shellescape(ptr, TRUE);
-! if (p == NULL)
- {
-! vim_free(buf);
-! return;
- }
-+ buf = (char_u *)vim_realloc(buf, STRLEN(buf) + STRLEN(p) + 1);
-+ if (buf == NULL)
-+ {
-+ vim_free(buf);
-+ vim_free(p);
-+ return;
-+ }
-+ STRCAT(buf, p);
-+ vim_free(p);
-+ }
-+ else
-+ {
-+ if (cmdchar == '*')
-+ aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\");
-+ else if (cmdchar == '#')
-+ aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
-+ else
-+ /* Don't escape spaces and Tabs in a tag with a backslash */
-+ aux_ptr = (char_u *)"\\|\"\n*?[";
-+
-+ p = buf + STRLEN(buf);
-+ while (n-- > 0)
-+ {
-+ /* put a backslash before \ and some others */
-+ if (vim_strchr(aux_ptr, *ptr) != NULL)
-+ *p++ = '\\';
-+ #ifdef FEAT_MBYTE
-+ /* When current byte is a part of multibyte character, copy all
-+ * bytes of that character. */
-+ if (has_mbyte)
-+ {
-+ int i;
-+ int len = (*mb_ptr2len)(ptr) - 1;
-+
-+ for (i = 0; i < len && n >= 1; ++i, --n)
-+ *p++ = *ptr++;
-+ }
- #endif
-! *p++ = *ptr++;
-! }
-! *p = NUL;
- }
-
- /*
- * Execute the command.
-*** ../vim-7.2.009/src/version.c Mon Sep 1 17:56:05 2008
---- src/version.c Sat Sep 6 16:26:42 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 10,
- /**/
-
---
-Q. What happens to programmers when they die?
-A: MS-Windows programmers are reinstalled. C++ programmers become undefined,
- anyone who refers to them will die as well. Java programmers reincarnate
- after being garbage collected.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.011 b/data/vim/patches/7.2.011
deleted file mode 100644
index 928f8d638..000000000
--- a/data/vim/patches/7.2.011
+++ /dev/null
@@ -1,105 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.011
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.011
-Problem: Get an error when inserting a float value from the expression
- register.
-Solution: Convert the Float to a String automatically in the same place
- where a List would be converted to a String.
-Files: src/eval.c
-
-
-*** ../vim-7.2.010/src/eval.c Mon Aug 25 04:48:21 2008
---- src/eval.c Sun Sep 7 13:50:38 2008
-***************
-*** 1256,1278 ****
-
- /*
- * Top level evaluation function, returning a string.
- * Return pointer to allocated memory, or NULL for failure.
- */
- char_u *
-! eval_to_string(arg, nextcmd, dolist)
- char_u *arg;
- char_u **nextcmd;
-! int dolist; /* turn List into sequence of lines */
- {
- typval_T tv;
- char_u *retval;
- garray_T ga;
-
- if (eval0(arg, &tv, nextcmd, TRUE) == FAIL)
- retval = NULL;
- else
- {
-! if (dolist && tv.v_type == VAR_LIST)
- {
- ga_init2(&ga, (int)sizeof(char), 80);
- if (tv.vval.v_list != NULL)
---- 1256,1281 ----
-
- /*
- * Top level evaluation function, returning a string.
-+ * When "convert" is TRUE convert a List into a sequence of lines and convert
-+ * a Float to a String.
- * Return pointer to allocated memory, or NULL for failure.
- */
- char_u *
-! eval_to_string(arg, nextcmd, convert)
- char_u *arg;
- char_u **nextcmd;
-! int convert;
- {
- typval_T tv;
- char_u *retval;
- garray_T ga;
-+ char_u numbuf[NUMBUFLEN];
-
- if (eval0(arg, &tv, nextcmd, TRUE) == FAIL)
- retval = NULL;
- else
- {
-! if (convert && tv.v_type == VAR_LIST)
- {
- ga_init2(&ga, (int)sizeof(char), 80);
- if (tv.vval.v_list != NULL)
-***************
-*** 1280,1285 ****
---- 1283,1295 ----
- ga_append(&ga, NUL);
- retval = (char_u *)ga.ga_data;
- }
-+ #ifdef FEAT_FLOAT
-+ else if (convert && tv.v_type == VAR_FLOAT)
-+ {
-+ vim_snprintf((char *)numbuf, NUMBUFLEN, "%g", tv.vval.v_float);
-+ retval = vim_strsave(numbuf);
-+ }
-+ #endif
- else
- retval = vim_strsave(get_tv_string(&tv));
- clear_tv(&tv);
-*** ../vim-7.2.010/src/version.c Sat Sep 6 16:44:06 2008
---- src/version.c Sun Sep 7 13:52:00 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 11,
- /**/
-
---
-hundred-and-one symptoms of being an internet addict:
-34. You laugh at people with 14400 baud modems.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.012 b/data/vim/patches/7.2.012
deleted file mode 100644
index fa3ed2473..000000000
--- a/data/vim/patches/7.2.012
+++ /dev/null
@@ -1,53 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.012
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.012
-Problem: Compiler warnings when building with startup timing.
-Solution: Add type casts.
-Files: src/ex_cmds2.c
-
-
-*** ../vim-7.2.011/src/ex_cmds2.c Sun Jul 13 19:36:09 2008
---- src/ex_cmds2.c Tue Sep 2 11:14:41 2008
-***************
-*** 3145,3152 ****
- verbose_leave();
- }
- #ifdef STARTUPTIME
-! vim_snprintf(IObuff, IOSIZE, "sourcing %s", fname);
-! time_msg(IObuff, &tv_start);
- time_pop(&tv_rel);
- #endif
-
---- 3145,3152 ----
- verbose_leave();
- }
- #ifdef STARTUPTIME
-! vim_snprintf((char *)IObuff, IOSIZE, "sourcing %s", fname);
-! time_msg((char *)IObuff, &tv_start);
- time_pop(&tv_rel);
- #endif
-
-*** ../vim-7.2.011/src/version.c Sun Sep 7 13:54:31 2008
---- src/version.c Sun Sep 7 15:49:00 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 12,
- /**/
-
---
-He who laughs last, thinks slowest.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.013 b/data/vim/patches/7.2.013
deleted file mode 100644
index 2645f0a7d..000000000
--- a/data/vim/patches/7.2.013
+++ /dev/null
@@ -1,135 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.013
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.013
-Problem: While waiting for the X selection Vim consumes a lot of CPU time
- and hangs until a response is received.
-Solution: Sleep a bit when the selection event hasn't been received yet.
- Time out after a couple of seconds to avoid a hang when the
- selection owner isn't responding.
-Files: src/ui.c
-
-
-*** ../vim-7.2.012/src/ui.c Mon Jul 14 21:47:49 2008
---- src/ui.c Sun Sep 7 16:54:35 2008
-***************
-*** 2110,2115 ****
---- 2110,2117 ----
- int i;
- int nbytes = 0;
- char_u *buffer;
-+ time_t start_time;
-+ int timed_out = FALSE;
-
- for (i =
- #ifdef FEAT_MBYTE
-***************
-*** 2129,2134 ****
---- 2131,2137 ----
- case 3: type = text_atom; break;
- default: type = XA_STRING;
- }
-+ success = FALSE;
- XtGetSelectionValue(myShell, cbd->sel_atom, type,
- clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
-
-***************
-*** 2141,2167 ****
- * characters, then they will appear before the one that requested the
- * paste! Don't worry, we will catch up with any other events later.
- */
- for (;;)
- {
- if (XCheckTypedEvent(dpy, SelectionNotify, &event))
- break;
- if (XCheckTypedEvent(dpy, SelectionRequest, &event))
- /* We may get a SelectionRequest here and if we don't handle
- * it we hang. KDE klipper does this, for example. */
- XtDispatchEvent(&event);
-
- /* Do we need this? Probably not. */
- XSync(dpy, False);
-
-! /* Bernhard Walle solved a slow paste response in an X terminal by
-! * adding: usleep(10000); here. */
- }
-
-- /* this is where clip_x11_request_selection_cb() is actually called */
-- XtDispatchEvent(&event);
--
- if (success)
- return;
- }
-
- /* Final fallback position - use the X CUT_BUFFER0 store */
---- 2144,2189 ----
- * characters, then they will appear before the one that requested the
- * paste! Don't worry, we will catch up with any other events later.
- */
-+ start_time = time(NULL);
- for (;;)
- {
- if (XCheckTypedEvent(dpy, SelectionNotify, &event))
-+ {
-+ /* this is where clip_x11_request_selection_cb() is actually
-+ * called */
-+ XtDispatchEvent(&event);
- break;
-+ }
- if (XCheckTypedEvent(dpy, SelectionRequest, &event))
- /* We may get a SelectionRequest here and if we don't handle
- * it we hang. KDE klipper does this, for example. */
- XtDispatchEvent(&event);
-
-+ /* Time out after 2 to 3 seconds to avoid that we hang when the
-+ * other process doesn't respond. Note that the SelectionNotify
-+ * event may still come later when the selection owner comes back
-+ * to life and the text gets inserted unexpectedly (by xterm).
-+ * Don't know how to avoid that :-(. */
-+ if (time(NULL) > start_time + 2)
-+ {
-+ timed_out = TRUE;
-+ break;
-+ }
-+
- /* Do we need this? Probably not. */
- XSync(dpy, False);
-
-! /* Wait for 1 msec to avoid that we eat up all CPU time. */
-! ui_delay(1L, TRUE);
- }
-
- if (success)
- return;
-+
-+ /* don't do a retry with another type after timing out, otherwise we
-+ * hang for 15 seconds. */
-+ if (timed_out)
-+ break;
- }
-
- /* Final fallback position - use the X CUT_BUFFER0 store */
-*** ../vim-7.2.012/src/version.c Sun Sep 7 15:49:45 2008
---- src/version.c Sun Sep 7 21:45:55 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 13,
- /**/
-
---
-The users that I support would double-click on a landmine to find out
-what happens. -- A system administrator
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.014 b/data/vim/patches/7.2.014
deleted file mode 100644
index a03794868..000000000
--- a/data/vim/patches/7.2.014
+++ /dev/null
@@ -1,52 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.014
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.014
-Problem: synstack() doesn't work in an emptly line.
-Solution: Accept column zero as a valid position.
-Files: src/eval.c
-
-
-*** ../vim-7.2.013/src/eval.c Sun Sep 7 13:54:31 2008
---- src/eval.c Sun Sep 7 13:50:38 2008
-***************
-*** 16667,16673 ****
- col = get_tv_number(&argvars[1]) - 1; /* -1 on type error */
-
- if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
-! && col >= 0 && col < (long)STRLEN(ml_get(lnum))
- && rettv_list_alloc(rettv) != FAIL)
- {
- (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE);
---- 16667,16673 ----
- col = get_tv_number(&argvars[1]) - 1; /* -1 on type error */
-
- if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
-! && col >= 0 && (col == 0 || col < (long)STRLEN(ml_get(lnum)))
- && rettv_list_alloc(rettv) != FAIL)
- {
- (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE);
-*** ../vim-7.2.013/src/version.c Sun Sep 7 21:47:51 2008
---- src/version.c Wed Sep 10 15:36:52 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 14,
- /**/
-
---
-Everybody lies, but it doesn't matter since nobody listens.
- -- Lieberman's Law
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.015 b/data/vim/patches/7.2.015
deleted file mode 100644
index e03ac1564..000000000
--- a/data/vim/patches/7.2.015
+++ /dev/null
@@ -1,82 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.015
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.015
-Problem: "make all test install" doesn't stop when the test fails. (Daniel
- Shahaf)
-Solution: When test.log contains failures exit with non-zero status.
-Files: src/testdir/Makefile
-
-
-*** ../vim-7.2.014/src/testdir/Makefile Wed Jun 25 00:22:53 2008
---- src/testdir/Makefile Sun Sep 7 21:31:49 2008
-***************
-*** 26,40 ****
-
- .SUFFIXES: .in .out
-
-! nongui: nolog $(SCRIPTS)
-! @echo
-! @cat test.log
-! @echo ALL DONE
-
-! gui: nolog $(SCRIPTS) $(SCRIPTS_GUI)
- @echo
-! @cat test.log
-! @echo ALL DONE
-
- $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
-
---- 26,42 ----
-
- .SUFFIXES: .in .out
-
-! nongui: nolog $(SCRIPTS) report
-!
-! gui: nolog $(SCRIPTS) $(SCRIPTS_GUI) report
-
-! report:
- @echo
-! @echo 'Test results:'
-! @/bin/sh -c "if test -f test.log; \
-! then cat test.log; echo TEST FAILURE; exit 1; \
-! else echo ALL DONE; \
-! fi"
-
- $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
-
-***************
-*** 71,74 ****
- test60.out: test60.vim
-
- nolog:
-! -echo Test results: >test.log
---- 73,76 ----
- test60.out: test60.vim
-
- nolog:
-! -rm -f test.log
-*** ../vim-7.2.014/src/version.c Wed Sep 10 15:38:13 2008
---- src/version.c Wed Sep 10 18:23:38 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 15,
- /**/
-
---
-Light travels faster than sound. This is why some people
-appear bright until you hear them speak
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.016 b/data/vim/patches/7.2.016
deleted file mode 100644
index 03d5207f2..000000000
--- a/data/vim/patches/7.2.016
+++ /dev/null
@@ -1,166 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.016
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.016
-Problem: The pattern being completed may be in freed memory when the
- command line is being reallocated. (Dominique Pelle)
-Solution: Keep a pointer to the expand_T in the command line structure.
- Don't use <S-Tab> as CTRL-P when there are no results. Clear the
- completion when using a command line from the history.
-Files: src/ex_getln.c
-
-
-*** ../vim-7.2.015/src/ex_getln.c Fri Aug 8 12:58:59 2008
---- src/ex_getln.c Wed Sep 10 22:43:41 2008
-***************
-*** 31,36 ****
---- 31,38 ----
- int cmdattr; /* attributes for prompt */
- int overstrike; /* Typing mode on the command line. Shared by
- getcmdline() and put_on_cmdline(). */
-+ expand_T *xpc; /* struct being used for expansion, xp_pattern
-+ may point into cmdbuff */
- int xp_context; /* type of expansion */
- # ifdef FEAT_EVAL
- char_u *xp_arg; /* user-defined expansion arg */
-***************
-*** 38,44 ****
- # endif
- };
-
-! static struct cmdline_info ccline; /* current cmdline_info */
-
- static int cmd_showtail; /* Only show path tail in lists ? */
-
---- 40,50 ----
- # endif
- };
-
-! /* The current cmdline_info. It is initialized in getcmdline() and after that
-! * used by other functions. When invoking getcmdline() recursively it needs
-! * to be saved with save_cmdline() and restored with restore_cmdline().
-! * TODO: make it local to getcmdline() and pass it around. */
-! static struct cmdline_info ccline;
-
- static int cmd_showtail; /* Only show path tail in lists ? */
-
-***************
-*** 238,243 ****
---- 244,250 ----
- }
-
- ExpandInit(&xpc);
-+ ccline.xpc = &xpc;
-
- #ifdef FEAT_RIGHTLEFT
- if (curwin->w_p_rl && *curwin->w_p_rlc == 's'
-***************
-*** 408,416 ****
- #endif
-
- /*
-! * <S-Tab> works like CTRL-P (unless 'wc' is <S-Tab>).
- */
-! if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles != -1)
- c = Ctrl_P;
-
- #ifdef FEAT_WILDMENU
---- 415,424 ----
- #endif
-
- /*
-! * When there are matching completions to select <S-Tab> works like
-! * CTRL-P (unless 'wc' is <S-Tab>).
- */
-! if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles > 0)
- c = Ctrl_P;
-
- #ifdef FEAT_WILDMENU
-***************
-*** 1513,1518 ****
---- 1521,1527 ----
- int old_firstc;
-
- vim_free(ccline.cmdbuff);
-+ xpc.xp_context = EXPAND_NOTHING;
- if (hiscnt == hislen)
- p = lookfor; /* back to the old one */
- else
-***************
-*** 1839,1844 ****
---- 1848,1854 ----
- #endif
-
- ExpandCleanup(&xpc);
-+ ccline.xpc = NULL;
-
- #ifdef FEAT_SEARCH_EXTRA
- if (did_incsearch)
-***************
-*** 2508,2513 ****
---- 2518,2537 ----
- }
- mch_memmove(ccline.cmdbuff, p, (size_t)ccline.cmdlen + 1);
- vim_free(p);
-+
-+ if (ccline.xpc != NULL
-+ && ccline.xpc->xp_pattern != NULL
-+ && ccline.xpc->xp_context != EXPAND_NOTHING
-+ && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
-+ {
-+ int i = ccline.xpc->xp_pattern - p;
-+
-+ /* If xp_pattern points inside the old cmdbuff it needs to be adjusted
-+ * to point into the newly allocated memory. */
-+ if (i >= 0 && i <= ccline.cmdlen)
-+ ccline.xpc->xp_pattern = ccline.cmdbuff + i;
-+ }
-+
- return OK;
- }
-
-***************
-*** 2875,2880 ****
---- 2899,2905 ----
- prev_ccline = ccline;
- ccline.cmdbuff = NULL;
- ccline.cmdprompt = NULL;
-+ ccline.xpc = NULL;
- }
-
- /*
-***************
-*** 3582,3587 ****
---- 3607,3613 ----
- ExpandInit(xp)
- expand_T *xp;
- {
-+ xp->xp_pattern = NULL;
- xp->xp_backslash = XP_BS_NONE;
- #ifndef BACKSLASH_IN_FILENAME
- xp->xp_shell = FALSE;
-*** ../vim-7.2.015/src/version.c Wed Sep 10 18:25:18 2008
---- src/version.c Sun Sep 14 14:38:47 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 16,
- /**/
-
---
-hundred-and-one symptoms of being an internet addict:
-53. To find out what time it is, you send yourself an e-mail and check the
- "Date:" field.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.017 b/data/vim/patches/7.2.017
deleted file mode 100644
index 99979a152..000000000
--- a/data/vim/patches/7.2.017
+++ /dev/null
@@ -1,162 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.017
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.017
-Problem: strlen() used on text that may not end in a NUL. (Dominique Pelle)
- Pasting a very big selection doesn't work.
-Solution: Use the length passed to the XtSelectionCallbackProc() function.
- After getting the SelectionNotify event continue dispatching
- events until the callback is actually called. Also dispatch the
- PropertyNotify event.
-Files: src/ui.c
-
-
-*** ../vim-7.2.016/src/ui.c Sun Sep 7 21:47:51 2008
---- src/ui.c Sun Sep 14 15:52:19 2008
-***************
-*** 2020,2026 ****
-
- if (value == NULL || *length == 0)
- {
-! clip_free_selection(cbd); /* ??? [what's the query?] */
- *(int *)success = FALSE;
- return;
- }
---- 2020,2026 ----
-
- if (value == NULL || *length == 0)
- {
-! clip_free_selection(cbd); /* nothing received, clear register */
- *(int *)success = FALSE;
- return;
- }
-***************
-*** 2076,2082 ****
- text_prop.value = (unsigned char *)value;
- text_prop.encoding = *type;
- text_prop.format = *format;
-! text_prop.nitems = STRLEN(value);
- status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
- &text_list, &n_text);
- if (status != Success || n_text < 1)
---- 2076,2082 ----
- text_prop.value = (unsigned char *)value;
- text_prop.encoding = *type;
- text_prop.format = *format;
-! text_prop.nitems = len;
- status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
- &text_list, &n_text);
- if (status != Success || n_text < 1)
-***************
-*** 2131,2137 ****
- case 3: type = text_atom; break;
- default: type = XA_STRING;
- }
-! success = FALSE;
- XtGetSelectionValue(myShell, cbd->sel_atom, type,
- clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
-
---- 2131,2137 ----
- case 3: type = text_atom; break;
- default: type = XA_STRING;
- }
-! success = MAYBE;
- XtGetSelectionValue(myShell, cbd->sel_atom, type,
- clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
-
-***************
-*** 2145,2169 ****
- * paste! Don't worry, we will catch up with any other events later.
- */
- start_time = time(NULL);
-! for (;;)
- {
-! if (XCheckTypedEvent(dpy, SelectionNotify, &event))
- {
-! /* this is where clip_x11_request_selection_cb() is actually
-! * called */
- XtDispatchEvent(&event);
-! break;
- }
-- if (XCheckTypedEvent(dpy, SelectionRequest, &event))
-- /* We may get a SelectionRequest here and if we don't handle
-- * it we hang. KDE klipper does this, for example. */
-- XtDispatchEvent(&event);
-
- /* Time out after 2 to 3 seconds to avoid that we hang when the
- * other process doesn't respond. Note that the SelectionNotify
- * event may still come later when the selection owner comes back
-! * to life and the text gets inserted unexpectedly (by xterm).
-! * Don't know how to avoid that :-(. */
- if (time(NULL) > start_time + 2)
- {
- timed_out = TRUE;
---- 2145,2171 ----
- * paste! Don't worry, we will catch up with any other events later.
- */
- start_time = time(NULL);
-! while (success == MAYBE)
- {
-! if (XCheckTypedEvent(dpy, SelectionNotify, &event)
-! || XCheckTypedEvent(dpy, SelectionRequest, &event)
-! || XCheckTypedEvent(dpy, PropertyNotify, &event))
- {
-! /* This is where clip_x11_request_selection_cb() should be
-! * called. It may actually happen a bit later, so we loop
-! * until "success" changes.
-! * We may get a SelectionRequest here and if we don't handle
-! * it we hang. KDE klipper does this, for example.
-! * We need to handle a PropertyNotify for large selections. */
- XtDispatchEvent(&event);
-! continue;
- }
-
- /* Time out after 2 to 3 seconds to avoid that we hang when the
- * other process doesn't respond. Note that the SelectionNotify
- * event may still come later when the selection owner comes back
-! * to life and the text gets inserted unexpectedly. Don't know
-! * why that happens or how to avoid that :-(. */
- if (time(NULL) > start_time + 2)
- {
- timed_out = TRUE;
-***************
-*** 2177,2183 ****
- ui_delay(1L, TRUE);
- }
-
-! if (success)
- return;
-
- /* don't do a retry with another type after timing out, otherwise we
---- 2179,2185 ----
- ui_delay(1L, TRUE);
- }
-
-! if (success == TRUE)
- return;
-
- /* don't do a retry with another type after timing out, otherwise we
-*** ../vim-7.2.016/src/version.c Sun Sep 14 14:41:44 2008
---- src/version.c Sun Sep 14 15:55:34 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 17,
- /**/
-
---
-hundred-and-one symptoms of being an internet addict:
-54. You start tilting your head sideways to smile. :-)
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.018 b/data/vim/patches/7.2.018
deleted file mode 100644
index b195f09dc..000000000
--- a/data/vim/patches/7.2.018
+++ /dev/null
@@ -1,45 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.018
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.018
-Problem: Memory leak when substitute is aborted.
-Solution: Free the buffer allocated for the new text. (Dominique Pelle)
-Files: src/ex_cmds.c
-
-
-*** ../vim-7.2.017/src/ex_cmds.c Wed Aug 6 15:03:07 2008
---- src/ex_cmds.c Sun Sep 14 13:45:03 2008
-***************
-*** 5059,5064 ****
---- 5059,5065 ----
-
- if (did_sub)
- ++sub_nlines;
-+ vim_free(new_start); /* for when substitute was cancelled */
- vim_free(sub_firstline); /* free the copy of the original line */
- sub_firstline = NULL;
- }
-*** ../vim-7.2.017/src/version.c Sun Sep 14 15:57:54 2008
---- src/version.c Sun Sep 14 21:38:25 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 18,
- /**/
-
---
-hundred-and-one symptoms of being an internet addict:
-55. You ask your doctor to implant a gig in your brain.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.019 b/data/vim/patches/7.2.019
deleted file mode 100644
index 4404bca4f..000000000
--- a/data/vim/patches/7.2.019
+++ /dev/null
@@ -1,65 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.019
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.019
-Problem: Completion of ":noautocmd" doesn't work and exists(":noautocmd")
- returns zero. (Ben Fritz)
-Solution: Add "noautocmd" to the list of modifiers and commands.
-Files: src/ex_cmds.h, src/ex_docmd.c
-
-
-*** ../vim-7.2.018/src/ex_cmds.h Wed Jun 25 00:44:40 2008
---- src/ex_cmds.h Sat Sep 13 18:37:25 2008
-***************
-*** 635,640 ****
---- 635,642 ----
- RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
- EX(CMD_noremap, "noremap", ex_map,
- BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
-+ EX(CMD_noautocmd, "noautocmd", ex_wrongmodifier,
-+ NEEDARG|EXTRA|NOTRLCOM),
- EX(CMD_nohlsearch, "nohlsearch", ex_nohlsearch,
- TRLBAR|SBOXOK|CMDWIN),
- EX(CMD_noreabbrev, "noreabbrev", ex_abbreviate,
-*** ../vim-7.2.018/src/ex_docmd.c Sat Jul 26 16:04:39 2008
---- src/ex_docmd.c Mon Sep 15 20:04:53 2008
-***************
-*** 2978,2983 ****
---- 2979,2985 ----
- {"keepmarks", 3, FALSE},
- {"leftabove", 5, FALSE},
- {"lockmarks", 3, FALSE},
-+ {"noautocmd", 3, FALSE},
- {"rightbelow", 6, FALSE},
- {"sandbox", 3, FALSE},
- {"silent", 3, FALSE},
-*** ../vim-7.2.018/src/version.c Sun Sep 14 21:40:26 2008
---- src/version.c Thu Sep 18 12:39:56 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 19,
- /**/
-
---
-Proof techniques #2: Proof by Oddity.
- SAMPLE: To prove that horses have an infinite number of legs.
-(1) Horses have an even number of legs.
-(2) They have two legs in back and fore legs in front.
-(3) This makes a total of six legs, which certainly is an odd number of
- legs for a horse.
-(4) But the only number that is both odd and even is infinity.
-(5) Therefore, horses must have an infinite number of legs.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.020 b/data/vim/patches/7.2.020
deleted file mode 100644
index fb290407f..000000000
--- a/data/vim/patches/7.2.020
+++ /dev/null
@@ -1,54 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.020
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.020
-Problem: Starting the GUI when the executable starts with 'k', but the KDE
- version no longer exists.
-Solution: Don't have "kvim" start the GUI.
-Files: src/main.c
-
-
-*** ../vim-7.2.019/src/main.c Thu Jul 24 19:34:23 2008
---- src/main.c Sun Sep 14 13:26:10 2008
-***************
-*** 1457,1463 ****
- ++initstr;
- }
-
-! if (TOLOWER_ASC(initstr[0]) == 'g' || initstr[0] == 'k')
- {
- main_start_gui();
- #ifdef FEAT_GUI
---- 1458,1465 ----
- ++initstr;
- }
-
-! /* "gvim" starts the GUI. Also accept "Gvim" for MS-Windows. */
-! if (TOLOWER_ASC(initstr[0]) == 'g')
- {
- main_start_gui();
- #ifdef FEAT_GUI
-*** ../vim-7.2.019/src/version.c Thu Sep 18 12:43:21 2008
---- src/version.c Thu Sep 18 20:54:10 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 20,
- /**/
-
---
-hundred-and-one symptoms of being an internet addict:
-90. Instead of calling you to dinner, your spouse sends e-mail.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.021 b/data/vim/patches/7.2.021
deleted file mode 100644
index fee0bd85c..000000000
--- a/data/vim/patches/7.2.021
+++ /dev/null
@@ -1,147 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.021
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.021
-Problem: When executing autocommands getting the full file name may be
- slow. (David Kotchan)
-Solution: Postpone calling FullName_save() until autocmd_fname is used.
-Files: src/ex_docmd.c, src/fileio.c, src/globals.h
-
-
-*** ../vim-7.2.020/src/ex_docmd.c Thu Sep 18 12:43:21 2008
---- src/ex_docmd.c Mon Sep 15 20:04:53 2008
-***************
-*** 9542,9547 ****
---- 9569,9583 ----
- #ifdef FEAT_AUTOCMD
- case SPEC_AFILE: /* file name for autocommand */
- result = autocmd_fname;
-+ if (result != NULL && !autocmd_fname_full)
-+ {
-+ /* Still need to turn the fname into a full path. It is
-+ * postponed to avoid a delay when <afile> is not used. */
-+ autocmd_fname_full = TRUE;
-+ result = FullName_save(autocmd_fname, FALSE);
-+ vim_free(autocmd_fname);
-+ autocmd_fname = result;
-+ }
- if (result == NULL)
- {
- *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"<afile>\"");
-*** ../vim-7.2.020/src/fileio.c Wed Aug 6 18:43:07 2008
---- src/fileio.c Tue Sep 16 21:24:26 2008
-***************
-*** 8523,8528 ****
---- 8523,8529 ----
- char_u *save_sourcing_name;
- linenr_T save_sourcing_lnum;
- char_u *save_autocmd_fname;
-+ int save_autocmd_fname_full;
- int save_autocmd_bufnr;
- char_u *save_autocmd_match;
- int save_autocmd_busy;
-***************
-*** 8601,8606 ****
---- 8602,8608 ----
- * Save the autocmd_* variables and info about the current buffer.
- */
- save_autocmd_fname = autocmd_fname;
-+ save_autocmd_fname_full = autocmd_fname_full;
- save_autocmd_bufnr = autocmd_bufnr;
- save_autocmd_match = autocmd_match;
- save_autocmd_busy = autocmd_busy;
-***************
-*** 8618,8631 ****
- if (fname != NULL && *fname != NUL)
- autocmd_fname = fname;
- else if (buf != NULL)
-! autocmd_fname = buf->b_fname;
- else
- autocmd_fname = NULL;
- }
- else
- autocmd_fname = fname_io;
- if (autocmd_fname != NULL)
-! autocmd_fname = FullName_save(autocmd_fname, FALSE);
-
- /*
- * Set the buffer number to be used for <abuf>.
---- 8620,8634 ----
- if (fname != NULL && *fname != NUL)
- autocmd_fname = fname;
- else if (buf != NULL)
-! autocmd_fname = buf->b_ffname;
- else
- autocmd_fname = NULL;
- }
- else
- autocmd_fname = fname_io;
- if (autocmd_fname != NULL)
-! autocmd_fname = vim_strsave(autocmd_fname);
-! autocmd_fname_full = FALSE; /* call FullName_save() later */
-
- /*
- * Set the buffer number to be used for <abuf>.
-***************
-*** 8810,8815 ****
---- 8813,8819 ----
- sourcing_lnum = save_sourcing_lnum;
- vim_free(autocmd_fname);
- autocmd_fname = save_autocmd_fname;
-+ autocmd_fname_full = save_autocmd_fname_full;
- autocmd_bufnr = save_autocmd_bufnr;
- autocmd_match = save_autocmd_match;
- #ifdef FEAT_EVAL
-***************
-*** 8918,8924 ****
- {
- apc->curpat = NULL;
-
-! /* only use a pattern when it has not been removed, has commands and
- * the group matches. For buffer-local autocommands only check the
- * buffer number. */
- if (ap->pat != NULL && ap->cmds != NULL
---- 8922,8928 ----
- {
- apc->curpat = NULL;
-
-! /* Only use a pattern when it has not been removed, has commands and
- * the group matches. For buffer-local autocommands only check the
- * buffer number. */
- if (ap->pat != NULL && ap->cmds != NULL
-*** ../vim-7.2.020/src/globals.h Sat Jul 26 16:04:49 2008
---- src/globals.h Mon Sep 15 19:59:28 2008
-***************
-*** 1022,1027 ****
---- 1022,1028 ----
- #endif
- #ifdef FEAT_AUTOCMD
- EXTERN char_u *autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */
-+ EXTERN int autocmd_fname_full; /* autocmd_fname is full path */
- EXTERN int autocmd_bufnr INIT(= 0); /* fnum for <abuf> on cmdline */
- EXTERN char_u *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
- EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
-*** ../vim-7.2.020/src/version.c Thu Sep 18 20:55:19 2008
---- src/version.c Thu Sep 18 21:24:30 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 21,
- /**/
-
---
-From "know your smileys":
- :----} You lie like Pinocchio
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/7.2.022 b/data/vim/patches/7.2.022
deleted file mode 100644
index 392773523..000000000
--- a/data/vim/patches/7.2.022
+++ /dev/null
@@ -1,140 +0,0 @@
-To: vim-dev@vim.org
-Subject: Patch 7.2.022 (extra)
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.022 (extra)
-Problem: Testing is not possible when compiling with MingW.
-Solution: Add a MingW specific test Makefile. (Bill McCarthy)
-Files: Filelist, src/testdir/Make_ming.mak
-
-
-*** ../vim-7.2.021/Filelist Sun Jul 13 19:33:31 2008
---- Filelist Sun Sep 14 21:47:01 2008
-***************
-*** 285,290 ****
---- 285,291 ----
- src/proto/os_win32.pro \
- src/proto/os_mswin.pro \
- src/testdir/Make_dos.mak \
-+ src/testdir/Make_ming.mak \
- src/testdir/dos.vim \
- src/uninstal.c \
- src/vim.def \
-*** ../vim-7.2.021/src/testdir/Make_ming.mak Sat Sep 20 16:25:06 2008
---- src/testdir/Make_ming.mak Sat Sep 20 16:25:58 2008
-***************
-*** 0 ****
---- 1,91 ----
-+ # Makefile to run tests for Vim, on Dos-like machines
-+ # with sh.exe or zsh.exe in the path or not.
-+ #
-+ # Author: Bill McCarthy
-+ #
-+ # Note that test54 has been removed until it is fixed.
-+ #
-+ # Requires a set of Unix tools: echo, diff, etc.
-+
-+ ifneq (sh.exe, $(SHELL))
-+ DEL = rm -f
-+ MV = mv
-+ CP = cp
-+ DIRSLASH = /
-+ else
-+ DEL = del
-+ MV = rename
-+ CP = copy
-+ DIRSLASH = \\
-+ endif
-+
-+ VIMPROG = ..$(DIRSLASH)vim
-+
-+ # Omitted:
-+ # test2 "\\tmp" doesn't work.
-+ # test10 'errorformat' is different
-+ # test12 can't unlink a swap file
-+ # test25 uses symbolic link
-+ # test27 can't edit file with "*" in file name
-+ # test31 16 bit version runs out of memory...
-+
-+ SCRIPTS16 = test1.out test19.out test20.out test22.out \
-+ test23.out test24.out test28.out test29.out \
-+ test35.out test36.out test43.out \
-+ test44.out test45.out test46.out test47.out \
-+ test48.out test51.out test53.out \
-+ test55.out test56.out test57.out test58.out test59.out \
-+ test60.out test61.out test62.out test63.out test64.out
-+
-+ # Had to remove test54 which doesn't work yet.
-+ # test54.out
-+
-+ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
-+ test8.out test9.out test11.out test13.out test14.out \
-+ test15.out test17.out test18.out test21.out test26.out \
-+ test30.out test31.out test32.out test33.out test34.out \
-+ test37.out test38.out test39.out test40.out test41.out \
-+ test42.out test52.out test65.out
-+
-+ SCRIPTS32 = test50.out
-+
-+ SCRIPTS_GUI = test16.out
-+
-+ .SUFFIXES: .in .out
-+
-+ vimall: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) $(SCRIPTS32)
-+ echo ALL DONE
-+
-+ nongui: fixff $(SCRIPTS16) $(SCRIPTS)
-+ echo ALL DONE
-+
-+ small:
-+ echo ALL DONE
-+
-+ gui: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI)
-+ echo ALL DONE
-+
-+ win32: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32)
-+ echo ALL DONE
-+
-+ fixff:
-+ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
-+
-+ clean:
-+ -$(DEL) *.out
-+ -$(DEL) test.ok
-+ -$(DEL) small.vim
-+ -$(DEL) tiny.vim
-+ -$(DEL) mbyte.vim
-+ -$(DEL) X*
-+ -$(DEL) viminfo
-+
-+ .in.out:
-+ $(CP) $*.ok test.ok
-+ $(VIMPROG) -u dos.vim -U NONE --noplugin -s dotest.in $*.in
-+ diff test.out $*.ok
-+ -$(DEL) $*.out
-+ $(MV) test.out $*.out
-+ -$(DEL) X*
-+ -$(DEL) test.ok
-+ -$(DEL) viminfo
-*** ../vim-7.2.021/src/version.c Thu Sep 18 21:29:07 2008
---- src/version.c Sat Sep 20 16:25:16 2008
-***************
-*** 678,679 ****
---- 678,681 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 22,
- /**/
-
---
-Where do you want to crash today?
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ download, build and distribute -- http://www.A-A-P.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0002 b/data/vim/patches/8.1.0002
new file mode 100644
index 000000000..1584c3080
--- /dev/null
+++ b/data/vim/patches/8.1.0002
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0002
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0002
+Problem: :stopinsert changes the message position.
+Solution: Save and restore msg_col and msg_row in clearmode(). (Jason
+ Franklin)
+Files: src/screen.c, src/testdir/test_messages.vim
+
+
+*** ../vim-8.1.0001/src/screen.c 2018-05-11 21:59:36.000000000 +0200
+--- src/screen.c 2018-05-19 14:33:04.359236642 +0200
+***************
+*** 10485,10494 ****
+--- 10485,10500 ----
+ void
+ clearmode(void)
+ {
++ int save_msg_row = msg_row;
++ int save_msg_col = msg_col;
++
+ msg_pos_mode();
+ if (Recording)
+ recording_mode(HL_ATTR(HLF_CM));
+ msg_clr_eos();
++
++ msg_col = save_msg_col;
++ msg_row = save_msg_row;
+ }
+
+ static void
+*** ../vim-8.1.0001/src/testdir/test_messages.vim 2017-03-16 18:28:30.000000000 +0100
+--- src/testdir/test_messages.vim 2018-05-19 14:23:02.298669402 +0200
+***************
+*** 38,40 ****
+--- 38,61 ----
+ let &more = oldmore
+ endtry
+ endfunction
++
++ " Patch 7.4.1696 defined the "clearmode()" command for clearing the mode
++ " indicator (e.g., "-- INSERT --") when ":stopinsert" is invoked. Message
++ " output could then be disturbed when 'cmdheight' was greater than one.
++ " This test ensures that the bugfix for this issue remains in place.
++ function! Test_stopinsert_does_not_break_message_output()
++ set cmdheight=2
++ redraw!
++
++ stopinsert | echo 'test echo'
++ call assert_equal(116, screenchar(&lines - 1, 1))
++ call assert_equal(32, screenchar(&lines, 1))
++ redraw!
++
++ stopinsert | echomsg 'test echomsg'
++ call assert_equal(116, screenchar(&lines - 1, 1))
++ call assert_equal(32, screenchar(&lines, 1))
++ redraw!
++
++ set cmdheight&
++ endfunction
+*** ../vim-8.1.0001/src/version.c 2018-05-17 23:34:37.427631392 +0200
+--- src/version.c 2018-05-19 14:24:40.646043654 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 2,
+ /**/
+
+--
+Wi n0t trei a h0liday in Sweden thi yer?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0003 b/data/vim/patches/8.1.0003
new file mode 100644
index 000000000..e8dd64546
--- /dev/null
+++ b/data/vim/patches/8.1.0003
@@ -0,0 +1,116 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0003
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0003
+Problem: The :compiler command is not tested.
+Solution: Add a test. (Dominique Pelle, closes #2930)
+Files: src/Makefile, src/testdir/test_alot.vim,
+ src/testdir/test_compiler.vim
+
+
+*** ../vim-8.1.0002/src/Makefile 2018-05-17 15:34:28.000000000 +0200
+--- src/Makefile 2018-05-19 14:57:04.670463659 +0200
+***************
+*** 2150,2155 ****
+--- 2150,2156 ----
+ test_cmdline \
+ test_command_count \
+ test_comparators \
++ test_compiler \
+ test_crypt \
+ test_cscope \
+ test_cursor_func \
+*** ../vim-8.1.0002/src/testdir/test_alot.vim 2017-10-29 15:08:48.000000000 +0100
+--- src/testdir/test_alot.vim 2018-05-19 14:57:04.670463659 +0200
+***************
+*** 5,10 ****
+--- 5,11 ----
+ source test_bufline.vim
+ source test_cd.vim
+ source test_changedtick.vim
++ source test_compiler.vim
+ source test_cursor_func.vim
+ source test_delete.vim
+ source test_ex_undo.vim
+*** ../vim-8.1.0002/src/testdir/test_compiler.vim 2018-05-19 15:00:23.281190298 +0200
+--- src/testdir/test_compiler.vim 2018-05-19 14:57:04.670463659 +0200
+***************
+*** 0 ****
+--- 1,50 ----
++ " Test the :compiler command
++
++ func Test_compiler()
++ if !executable('perl')
++ return
++ endif
++
++ e Xfoo.pl
++ compiler perl
++ call assert_equal('perl', b:current_compiler)
++ call assert_fails('let g:current_compiler', 'E121:')
++
++ call setline(1, ['#!/usr/bin/perl -w', 'use strict;', 'my $foo=1'])
++ w!
++ call feedkeys(":make\<CR>\<CR>", 'tx')
++ call assert_fails('clist', 'E42:')
++
++ call setline(1, ['#!/usr/bin/perl -w', 'use strict;', '$foo=1'])
++ w!
++ call feedkeys(":make\<CR>\<CR>", 'tx')
++ let a=execute('clist')
++ call assert_equal("\n 1 Xfoo.pl:3: Global symbol \"\$foo\" "
++ \ . "requires explicit package name "
++ \ . "(did you forget to declare \"my $foo\"?)", a)
++
++ call delete('Xfoo.pl')
++ bw!
++ endfunc
++
++ func Test_compiler_without_arg()
++ let a=split(execute('compiler'))
++ call assert_equal($VIMRUNTIME . '/compiler/ant.vim', a[0])
++ call assert_equal($VIMRUNTIME . '/compiler/bcc.vim', a[1])
++ call assert_equal($VIMRUNTIME . '/compiler/xmlwf.vim', a[-1])
++ endfunc
++
++ func Test_compiler_completion()
++ call feedkeys(":compiler \<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_match('^"compiler ant bcc .* xmlwf$', @:)
++
++ call feedkeys(":compiler p\<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"compiler pbx perl php pylint pyunit', @:)
++
++ call feedkeys(":compiler! p\<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"compiler! pbx perl php pylint pyunit', @:)
++ endfunc
++
++ func Test_compiler_error()
++ call assert_fails('compiler doesnotexist', 'E666:')
++ endfunc
+*** ../vim-8.1.0002/src/version.c 2018-05-19 14:43:26.779509715 +0200
+--- src/version.c 2018-05-19 14:58:56.017772272 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 3,
+ /**/
+
+--
+The Characters and incidents portrayed and the names used are fictitious and
+any similarity to the names, characters, or history of any person is entirely
+accidental and unintentional.
+ Signed RICHARD M. NIXON
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0004 b/data/vim/patches/8.1.0004
new file mode 100644
index 000000000..7d970899c
--- /dev/null
+++ b/data/vim/patches/8.1.0004
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0004
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0004
+Problem: Test for :compiler command sometimes fails.
+Solution: Be less strict about the error message. (Dominique Pelle)
+Files: src/testdir/test_compiler.vim
+
+
+*** ../vim-8.1.0003/src/testdir/test_compiler.vim 2018-05-19 15:00:48.841017887 +0200
+--- src/testdir/test_compiler.vim 2018-05-19 15:47:59.785667252 +0200
+***************
+*** 19,27 ****
+ w!
+ call feedkeys(":make\<CR>\<CR>", 'tx')
+ let a=execute('clist')
+! call assert_equal("\n 1 Xfoo.pl:3: Global symbol \"\$foo\" "
+! \ . "requires explicit package name "
+! \ . "(did you forget to declare \"my $foo\"?)", a)
+
+ call delete('Xfoo.pl')
+ bw!
+--- 19,26 ----
+ w!
+ call feedkeys(":make\<CR>\<CR>", 'tx')
+ let a=execute('clist')
+! call assert_match("\n 1 Xfoo.pl:3: Global symbol \"\$foo\" "
+! \ . "requires explicit package name", a)
+
+ call delete('Xfoo.pl')
+ bw!
+*** ../vim-8.1.0003/src/version.c 2018-05-19 15:00:48.841017887 +0200
+--- src/version.c 2018-05-19 15:51:02.132530786 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 4,
+ /**/
+
+--
+This message contains 78% recycled characters.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0005 b/data/vim/patches/8.1.0005
new file mode 100644
index 000000000..54e05f1b8
--- /dev/null
+++ b/data/vim/patches/8.1.0005
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0005
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0005
+Problem: Test for :compiler command fails on MS-Windows.
+Solution: Ignore difference in path.
+Files: src/testdir/test_compiler.vim
+
+
+*** ../vim-8.1.0004/src/testdir/test_compiler.vim 2018-05-19 15:52:08.080147738 +0200
+--- src/testdir/test_compiler.vim 2018-05-19 16:43:40.978098419 +0200
+***************
+*** 28,36 ****
+
+ func Test_compiler_without_arg()
+ let a=split(execute('compiler'))
+! call assert_equal($VIMRUNTIME . '/compiler/ant.vim', a[0])
+! call assert_equal($VIMRUNTIME . '/compiler/bcc.vim', a[1])
+! call assert_equal($VIMRUNTIME . '/compiler/xmlwf.vim', a[-1])
+ endfunc
+
+ func Test_compiler_completion()
+--- 28,36 ----
+
+ func Test_compiler_without_arg()
+ let a=split(execute('compiler'))
+! call assert_match('^.*runtime/compiler/ant.vim$', a[0])
+! call assert_match('^.*runtime/compiler/bcc.vim$', a[1])
+! call assert_match('^.*runtime/compiler/xmlwf.vim$', a[-1])
+ endfunc
+
+ func Test_compiler_completion()
+*** ../vim-8.1.0004/src/version.c 2018-05-19 15:52:08.084147716 +0200
+--- src/version.c 2018-05-19 16:44:18.851652336 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 5,
+ /**/
+
+--
+To keep milk from turning sour: Keep it in the cow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0006 b/data/vim/patches/8.1.0006
new file mode 100644
index 000000000..4e22ca8f4
--- /dev/null
+++ b/data/vim/patches/8.1.0006
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0006
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0006
+Problem: syn_id2cterm_bg() may be undefined. (Axel Bender)
+Solution: Adjust #ifdef.
+Files: src/syntax.c
+
+
+*** ../vim-8.1.0005/src/syntax.c 2018-04-30 15:12:37.000000000 +0200
+--- src/syntax.c 2018-05-20 13:33:20.830017598 +0200
+***************
+*** 9854,9860 ****
+ }
+ #endif
+
+! #if defined(FEAT_TERMINAL) || defined(PROTO)
+ void
+ syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
+ {
+--- 9854,9862 ----
+ }
+ #endif
+
+! #if (defined(WIN3264) \
+! && !defined(FEAT_GUI_W32) \
+! && defined(FEAT_TERMGUICOLORS)) || defined(PROTO)
+ void
+ syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
+ {
+*** ../vim-8.1.0005/src/version.c 2018-05-19 16:45:12.346716042 +0200
+--- src/version.c 2018-05-20 13:33:40.345133373 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 6,
+ /**/
+
+--
+SUPERIMPOSE "England AD 787". After a few more seconds we hear hoofbeats in
+the distance. They come slowly closer. Then out of the mist comes KING
+ARTHUR followed by a SERVANT who is banging two half coconuts together.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0007 b/data/vim/patches/8.1.0007
new file mode 100644
index 000000000..aaff80b09
--- /dev/null
+++ b/data/vim/patches/8.1.0007
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0007
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0007
+Problem: No test for "o" and "O" in Visual block mode.
+Solution: Add a test. (Dominique Pelle, closes #2932)
+Files: src/testdir/test_visual.vim
+
+
+*** ../vim-8.1.0006/src/testdir/test_visual.vim 2018-03-06 14:18:55.000000000 +0100
+--- src/testdir/test_visual.vim 2018-05-20 14:05:02.489093403 +0200
+***************
+*** 155,160 ****
+--- 155,179 ----
+ enew!
+ endfunc
+
++ " Test swapping corners in blockwise visual mode with o and O
++ func Test_blockwise_visual_o_O()
++ enew!
++
++ exe "norm! 10i.\<Esc>Y4P3lj\<C-V>4l2jr "
++ exe "norm! gvO\<Esc>ra"
++ exe "norm! gvO\<Esc>rb"
++ exe "norm! gvo\<C-c>rc"
++ exe "norm! gvO\<C-c>rd"
++
++ call assert_equal(['..........',
++ \ '...c d..',
++ \ '... ..',
++ \ '...a b..',
++ \ '..........'], getline(1, '$'))
++
++ enew!
++ endfun
++
+ " Test Virtual replace mode.
+ func Test_virtual_replace()
+ if exists('&t_kD')
+*** ../vim-8.1.0006/src/version.c 2018-05-20 13:35:40.193163458 +0200
+--- src/version.c 2018-05-20 14:05:52.113562894 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 7,
+ /**/
+
+--
+SOLDIER: Where did you get the coconuts?
+ARTHUR: Through ... We found them.
+SOLDIER: Found them? In Mercea. The coconut's tropical!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0008 b/data/vim/patches/8.1.0008
new file mode 100644
index 000000000..98c193276
--- /dev/null
+++ b/data/vim/patches/8.1.0008
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0008
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0008
+Problem: No test for strwidth().
+Solution: Add a test. (Dominique Pelle, closes #2931)
+Files: src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0007/src/testdir/test_functions.vim 2018-03-22 22:48:20.000000000 +0100
+--- src/testdir/test_functions.vim 2018-05-20 14:09:31.346367348 +0200
+***************
+*** 96,101 ****
+--- 96,125 ----
+ call assert_fails('call min(v:none)', 'E712:')
+ endfunc
+
++ func Test_strwidth()
++ for aw in ['single', 'double']
++ exe 'set ambiwidth=' . aw
++ call assert_equal(0, strwidth(''))
++ call assert_equal(1, strwidth("\t"))
++ call assert_equal(3, strwidth('Vim'))
++ call assert_equal(4, strwidth(1234))
++ call assert_equal(5, strwidth(-1234))
++
++ if has('multi_byte')
++ call assert_equal(2, strwidth('😉'))
++ call assert_equal(17, strwidth('EÄ¥oÅanÄo ĉiuĵaÅ­de'))
++ call assert_equal((aw == 'single') ? 6 : 7, strwidth('Straße'))
++ endif
++
++ call assert_fails('call strwidth({->0})', 'E729:')
++ call assert_fails('call strwidth([])', 'E730:')
++ call assert_fails('call strwidth({})', 'E731:')
++ call assert_fails('call strwidth(1.2)', 'E806:')
++ endfor
++
++ set ambiwidth&
++ endfunc
++
+ func Test_str2nr()
+ call assert_equal(0, str2nr(''))
+ call assert_equal(1, str2nr('1'))
+*** ../vim-8.1.0007/src/version.c 2018-05-20 14:06:34.506186527 +0200
+--- src/version.c 2018-05-20 14:10:31.208184912 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 8,
+ /**/
+
+--
+ARTHUR: The swallow may fly south with the sun, or the house martin or the
+ plover seek warmer hot lands in winter, yet these are not strangers to
+ our land.
+SOLDIER: Are you suggesting coconuts migrate?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0009 b/data/vim/patches/8.1.0009
new file mode 100644
index 000000000..aef38ee84
--- /dev/null
+++ b/data/vim/patches/8.1.0009
@@ -0,0 +1,102 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0009
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0009
+Problem: Tabpages insufficiently tested.
+Solution: Add more test coverage. (Dominique Pelle, closes #2934)
+Files: src/testdir/test_tabpage.vim
+
+
+*** ../vim-8.1.0008/src/testdir/test_tabpage.vim 2018-02-12 21:49:22.000000000 +0100
+--- src/testdir/test_tabpage.vim 2018-05-20 14:55:02.425998478 +0200
+***************
+*** 1,5 ****
+--- 1,6 ----
+ " Tests for tabpage
+
++
+ function Test_tabpage()
+ bw!
+ " Simple test for opening and closing a tab page
+***************
+*** 317,322 ****
+--- 318,351 ----
+ endfor
+ endfunc
+
++ func Test_tabpage_ctrl_pgup_pgdown()
++ enew!
++ tabnew tab1
++ tabnew tab2
++
++ call assert_equal(3, tabpagenr())
++ exe "norm! \<C-PageUp>"
++ call assert_equal(2, tabpagenr())
++ exe "norm! \<C-PageDown>"
++ call assert_equal(3, tabpagenr())
++
++ " Check wrapping at last or first page.
++ exe "norm! \<C-PageDown>"
++ call assert_equal(1, tabpagenr())
++ exe "norm! \<C-PageUp>"
++ call assert_equal(3, tabpagenr())
++
++ " With a count, <C-PageUp> and <C-PageDown> are not symmetrical somehow:
++ " - {count}<C-PageUp> goes {count} pages downward (relative count)
++ " - {count}<C-PageDown> goes to page number {count} (absolute count)
++ exe "norm! 2\<C-PageUp>"
++ call assert_equal(1, tabpagenr())
++ exe "norm! 2\<C-PageDown>"
++ call assert_equal(2, tabpagenr())
++
++ 1tabonly!
++ endfunc
++
+ " Test for [count] of tabclose
+ function Test_tabpage_with_tabclose()
+
+***************
+*** 491,494 ****
+--- 520,537 ----
+ buf Xtest
+ endfunc
+
++ func Test_tabs()
++ enew!
++ tabnew tab1
++ norm ixxx
++ let a=split(execute(':tabs'), "\n")
++ call assert_equal(['Tab page 1',
++ \ ' [No Name]',
++ \ 'Tab page 2',
++ \ '> + tab1'], a)
++
++ 1tabonly!
++ bw!
++ endfunc
++
+ " vim: shiftwidth=2 sts=2 expandtab
+*** ../vim-8.1.0008/src/version.c 2018-05-20 14:11:07.125342749 +0200
+--- src/version.c 2018-05-20 14:56:27.560347600 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 9,
+ /**/
+
+--
+Clothes make the man. Naked people have little or no influence on society.
+ -- Mark Twain (Samuel Clemens) (1835-1910)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0010 b/data/vim/patches/8.1.0010
new file mode 100644
index 000000000..9df182cc9
--- /dev/null
+++ b/data/vim/patches/8.1.0010
@@ -0,0 +1,381 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0010
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0010
+Problem: efm_to_regpat() is too long.
+Solution: Split off three functions. (Yegappan Lakshmanan, closes #2924)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0009/src/quickfix.c 2018-05-15 21:53:11.000000000 +0200
+--- src/quickfix.c 2018-05-20 15:40:22.857179812 +0200
+***************
+*** 228,246 ****
+ };
+
+ /*
+ * Converts a 'errorformat' string to regular expression pattern
+ */
+ static int
+ efm_to_regpat(
+ char_u *efm,
+! int len,
+ efm_T *fmt_ptr,
+ char_u *regpat,
+ char_u *errmsg)
+ {
+ char_u *ptr;
+ char_u *efmp;
+- char_u *srcptr;
+ int round;
+ int idx = 0;
+
+--- 228,399 ----
+ };
+
+ /*
++ * Convert an errorformat pattern to a regular expression pattern.
++ * See fmt_pat definition above for the list of supported patterns.
++ */
++ static char_u *
++ fmtpat_to_regpat(
++ char_u *efmp,
++ efm_T *fmt_ptr,
++ int idx,
++ int round,
++ char_u *ptr,
++ char_u *errmsg)
++ {
++ char_u *srcptr;
++
++ if (fmt_ptr->addr[idx])
++ {
++ /* Each errorformat pattern can occur only once */
++ sprintf((char *)errmsg,
++ _("E372: Too many %%%c in format string"), *efmp);
++ EMSG(errmsg);
++ return NULL;
++ }
++ if ((idx && idx < 6
++ && vim_strchr((char_u *)"DXOPQ", fmt_ptr->prefix) != NULL)
++ || (idx == 6
++ && vim_strchr((char_u *)"OPQ", fmt_ptr->prefix) == NULL))
++ {
++ sprintf((char *)errmsg,
++ _("E373: Unexpected %%%c in format string"), *efmp);
++ EMSG(errmsg);
++ return NULL;
++ }
++ fmt_ptr->addr[idx] = (char_u)++round;
++ *ptr++ = '\\';
++ *ptr++ = '(';
++ #ifdef BACKSLASH_IN_FILENAME
++ if (*efmp == 'f')
++ {
++ /* Also match "c:" in the file name, even when
++ * checking for a colon next: "%f:".
++ * "\%(\a:\)\=" */
++ STRCPY(ptr, "\\%(\\a:\\)\\=");
++ ptr += 10;
++ }
++ #endif
++ if (*efmp == 'f' && efmp[1] != NUL)
++ {
++ if (efmp[1] != '\\' && efmp[1] != '%')
++ {
++ /* A file name may contain spaces, but this isn't
++ * in "\f". For "%f:%l:%m" there may be a ":" in
++ * the file name. Use ".\{-1,}x" instead (x is
++ * the next character), the requirement that :999:
++ * follows should work. */
++ STRCPY(ptr, ".\\{-1,}");
++ ptr += 7;
++ }
++ else
++ {
++ /* File name followed by '\\' or '%': include as
++ * many file name chars as possible. */
++ STRCPY(ptr, "\\f\\+");
++ ptr += 4;
++ }
++ }
++ else
++ {
++ srcptr = (char_u *)fmt_pat[idx].pattern;
++ while ((*ptr = *srcptr++) != NUL)
++ ++ptr;
++ }
++ *ptr++ = '\\';
++ *ptr++ = ')';
++
++ return ptr;
++ }
++
++ /*
++ * Convert a scanf like format in 'errorformat' to a regular expression.
++ */
++ static char_u *
++ scanf_fmt_to_regpat(
++ char_u *efm,
++ int len,
++ char_u **pefmp,
++ char_u *ptr,
++ char_u *errmsg)
++ {
++ char_u *efmp = *pefmp;
++
++ if (*++efmp == '[' || *efmp == '\\')
++ {
++ if ((*ptr++ = *efmp) == '[') /* %*[^a-z0-9] etc. */
++ {
++ if (efmp[1] == '^')
++ *ptr++ = *++efmp;
++ if (efmp < efm + len)
++ {
++ *ptr++ = *++efmp; /* could be ']' */
++ while (efmp < efm + len
++ && (*ptr++ = *++efmp) != ']')
++ /* skip */;
++ if (efmp == efm + len)
++ {
++ EMSG(_("E374: Missing ] in format string"));
++ return NULL;
++ }
++ }
++ }
++ else if (efmp < efm + len) /* %*\D, %*\s etc. */
++ *ptr++ = *++efmp;
++ *ptr++ = '\\';
++ *ptr++ = '+';
++ }
++ else
++ {
++ /* TODO: scanf()-like: %*ud, %*3c, %*f, ... ? */
++ sprintf((char *)errmsg,
++ _("E375: Unsupported %%%c in format string"), *efmp);
++ EMSG(errmsg);
++ return NULL;
++ }
++
++ *pefmp = efmp;
++
++ return ptr;
++ }
++
++ /*
++ * Analyze/parse an errorformat prefix.
++ */
++ static int
++ efm_analyze_prefix(char_u **pefmp, efm_T *fmt_ptr, char_u *errmsg)
++ {
++ char_u *efmp = *pefmp;
++
++ if (vim_strchr((char_u *)"+-", *efmp) != NULL)
++ fmt_ptr->flags = *efmp++;
++ if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL)
++ fmt_ptr->prefix = *efmp;
++ else
++ {
++ sprintf((char *)errmsg,
++ _("E376: Invalid %%%c in format string prefix"), *efmp);
++ EMSG(errmsg);
++ return FAIL;
++ }
++
++ *pefmp = efmp;
++
++ return OK;
++ }
++
++ /*
+ * Converts a 'errorformat' string to regular expression pattern
+ */
+ static int
+ efm_to_regpat(
+ char_u *efm,
+! int len,
+ efm_T *fmt_ptr,
+ char_u *regpat,
+ char_u *errmsg)
+ {
+ char_u *ptr;
+ char_u *efmp;
+ int round;
+ int idx = 0;
+
+***************
+*** 260,361 ****
+ break;
+ if (idx < FMT_PATTERNS)
+ {
+! if (fmt_ptr->addr[idx])
+! {
+! sprintf((char *)errmsg,
+! _("E372: Too many %%%c in format string"), *efmp);
+! EMSG(errmsg);
+! return -1;
+! }
+! if ((idx
+! && idx < 6
+! && vim_strchr((char_u *)"DXOPQ",
+! fmt_ptr->prefix) != NULL)
+! || (idx == 6
+! && vim_strchr((char_u *)"OPQ",
+! fmt_ptr->prefix) == NULL))
+! {
+! sprintf((char *)errmsg,
+! _("E373: Unexpected %%%c in format string"), *efmp);
+! EMSG(errmsg);
+ return -1;
+! }
+! fmt_ptr->addr[idx] = (char_u)++round;
+! *ptr++ = '\\';
+! *ptr++ = '(';
+! #ifdef BACKSLASH_IN_FILENAME
+! if (*efmp == 'f')
+! {
+! /* Also match "c:" in the file name, even when
+! * checking for a colon next: "%f:".
+! * "\%(\a:\)\=" */
+! STRCPY(ptr, "\\%(\\a:\\)\\=");
+! ptr += 10;
+! }
+! #endif
+! if (*efmp == 'f' && efmp[1] != NUL)
+! {
+! if (efmp[1] != '\\' && efmp[1] != '%')
+! {
+! /* A file name may contain spaces, but this isn't
+! * in "\f". For "%f:%l:%m" there may be a ":" in
+! * the file name. Use ".\{-1,}x" instead (x is
+! * the next character), the requirement that :999:
+! * follows should work. */
+! STRCPY(ptr, ".\\{-1,}");
+! ptr += 7;
+! }
+! else
+! {
+! /* File name followed by '\\' or '%': include as
+! * many file name chars as possible. */
+! STRCPY(ptr, "\\f\\+");
+! ptr += 4;
+! }
+! }
+! else
+! {
+! srcptr = (char_u *)fmt_pat[idx].pattern;
+! while ((*ptr = *srcptr++) != NUL)
+! ++ptr;
+! }
+! *ptr++ = '\\';
+! *ptr++ = ')';
+ }
+ else if (*efmp == '*')
+ {
+! if (*++efmp == '[' || *efmp == '\\')
+! {
+! if ((*ptr++ = *efmp) == '[') /* %*[^a-z0-9] etc. */
+! {
+! if (efmp[1] == '^')
+! *ptr++ = *++efmp;
+! if (efmp < efm + len)
+! {
+! *ptr++ = *++efmp; /* could be ']' */
+! while (efmp < efm + len
+! && (*ptr++ = *++efmp) != ']')
+! /* skip */;
+! if (efmp == efm + len)
+! {
+! EMSG(_("E374: Missing ] in format string"));
+! return -1;
+! }
+! }
+! }
+! else if (efmp < efm + len) /* %*\D, %*\s etc. */
+! *ptr++ = *++efmp;
+! *ptr++ = '\\';
+! *ptr++ = '+';
+! }
+! else
+! {
+! /* TODO: scanf()-like: %*ud, %*3c, %*f, ... ? */
+! sprintf((char *)errmsg,
+! _("E375: Unsupported %%%c in format string"), *efmp);
+! EMSG(errmsg);
+ return -1;
+- }
+ }
+ else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL)
+ *ptr++ = *efmp; /* regexp magic characters */
+--- 413,429 ----
+ break;
+ if (idx < FMT_PATTERNS)
+ {
+! ptr = fmtpat_to_regpat(efmp, fmt_ptr, idx, round, ptr,
+! errmsg);
+! if (ptr == NULL)
+ return -1;
+! round++;
+ }
+ else if (*efmp == '*')
+ {
+! ptr = scanf_fmt_to_regpat(efm, len, &efmp, ptr, errmsg);
+! if (ptr == NULL)
+ return -1;
+ }
+ else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL)
+ *ptr++ = *efmp; /* regexp magic characters */
+***************
+*** 365,381 ****
+ fmt_ptr->conthere = TRUE;
+ else if (efmp == efm + 1) /* analyse prefix */
+ {
+! if (vim_strchr((char_u *)"+-", *efmp) != NULL)
+! fmt_ptr->flags = *efmp++;
+! if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL)
+! fmt_ptr->prefix = *efmp;
+! else
+! {
+! sprintf((char *)errmsg,
+! _("E376: Invalid %%%c in format string prefix"), *efmp);
+! EMSG(errmsg);
+ return -1;
+- }
+ }
+ else
+ {
+--- 433,440 ----
+ fmt_ptr->conthere = TRUE;
+ else if (efmp == efm + 1) /* analyse prefix */
+ {
+! if (efm_analyze_prefix(&efmp, fmt_ptr, errmsg) == FAIL)
+ return -1;
+ }
+ else
+ {
+*** ../vim-8.1.0009/src/version.c 2018-05-20 14:57:19.121429579 +0200
+--- src/version.c 2018-05-20 15:37:57.138956740 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 10,
+ /**/
+
+--
+SECOND SOLDIER: It could be carried by an African swallow!
+FIRST SOLDIER: Oh yes! An African swallow maybe ... but not a European
+ swallow. that's my point.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0011 b/data/vim/patches/8.1.0011
new file mode 100644
index 000000000..e767ad96d
--- /dev/null
+++ b/data/vim/patches/8.1.0011
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0011
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0011
+Problem: maparg() and mapcheck() confuse empty and non-existing.
+Solution: Return <Nop> for an existing non-empty mapping. (closes #2940)
+Files: src/evalfunc.c, src/testdir/test_maparg.vim
+
+
+*** ../vim-8.1.0010/src/evalfunc.c 2018-05-13 15:23:25.000000000 +0200
+--- src/evalfunc.c 2018-05-21 13:16:25.980369218 +0200
+***************
+*** 7383,7389 ****
+ {
+ /* Return a string. */
+ if (rhs != NULL)
+! rettv->vval.v_string = str2special_save(rhs, FALSE);
+
+ }
+ else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
+--- 7383,7394 ----
+ {
+ /* Return a string. */
+ if (rhs != NULL)
+! {
+! if (*rhs == NUL)
+! rettv->vval.v_string = vim_strsave((char_u *)"<Nop>");
+! else
+! rettv->vval.v_string = str2special_save(rhs, FALSE);
+! }
+
+ }
+ else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
+*** ../vim-8.1.0010/src/testdir/test_maparg.vim 2017-07-11 21:35:19.000000000 +0200
+--- src/testdir/test_maparg.vim 2018-05-21 13:23:58.341721377 +0200
+***************
+*** 29,37 ****
+ \ maparg('foo', '', 0, 1))
+
+ map abc x<char-114>x
+! call assert_equal(maparg('abc'), "xrx")
+ map abc y<S-char-114>y
+! call assert_equal(maparg('abc'), "yRy")
+ endfunction
+
+ function Test_range_map()
+--- 29,41 ----
+ \ maparg('foo', '', 0, 1))
+
+ map abc x<char-114>x
+! call assert_equal("xrx", maparg('abc'))
+ map abc y<S-char-114>y
+! call assert_equal("yRy", maparg('abc'))
+!
+! map abc <Nop>
+! call assert_equal("<Nop>", maparg('abc'))
+! unmap abc
+ endfunction
+
+ function Test_range_map()
+*** ../vim-8.1.0010/src/version.c 2018-05-20 15:41:12.884693893 +0200
+--- src/version.c 2018-05-21 13:22:09.938362521 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 11,
+ /**/
+
+--
+Why I like vim:
+> I like VIM because, when I ask a question in this newsgroup, I get a
+> one-line answer. With xemacs, I get a 1Kb lisp script with bugs in it ;-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0012 b/data/vim/patches/8.1.0012
new file mode 100644
index 000000000..a7f9d8d5b
--- /dev/null
+++ b/data/vim/patches/8.1.0012
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0012
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0012
+Problem: Misplaced #endif.
+Solution: Move the #endif to after the expression. (David Binderman)
+Files: src/fileio.c
+
+
+*** ../vim-8.1.0011/src/fileio.c 2018-05-01 14:13:53.000000000 +0200
+--- src/fileio.c 2018-05-21 13:35:31.805571321 +0200
+***************
+*** 714,721 ****
+ && st.st_gid != swap_st.st_gid
+ # ifdef HAVE_FCHOWN
+ && fchown(curbuf->b_ml.ml_mfp->mf_fd, -1, st.st_gid)
+- # endif
+ == -1
+ )
+ swap_mode &= 0600;
+ }
+--- 714,721 ----
+ && st.st_gid != swap_st.st_gid
+ # ifdef HAVE_FCHOWN
+ && fchown(curbuf->b_ml.ml_mfp->mf_fd, -1, st.st_gid)
+ == -1
++ # endif
+ )
+ swap_mode &= 0600;
+ }
+*** ../vim-8.1.0011/src/version.c 2018-05-21 13:28:40.324041565 +0200
+--- src/version.c 2018-05-21 13:36:39.065166257 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 12,
+ /**/
+
+--
+"Lisp has all the visual appeal of oatmeal with nail clippings thrown in."
+ -- Larry Wall
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0013 b/data/vim/patches/8.1.0013
new file mode 100644
index 000000000..fedac815d
--- /dev/null
+++ b/data/vim/patches/8.1.0013
@@ -0,0 +1,205 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0013
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0013
+Problem: Using freed memory when changing terminal cursor color.
+Solution: Make a copy of the color. (Dominique Pelle, closes #2938,
+ closes #2941)
+Files: src/terminal.c
+
+
+*** ../vim-8.1.0012/src/terminal.c 2018-05-17 13:17:10.000000000 +0200
+--- src/terminal.c 2018-05-21 14:46:25.723564355 +0200
+***************
+*** 171,178 ****
+
+ /* Store the last set and the desired cursor properties, so that we only update
+ * them when needed. Doing it unnecessary may result in flicker. */
+! static char_u *last_set_cursor_color = (char_u *)"";
+! static char_u *desired_cursor_color = (char_u *)"";
+ static int last_set_cursor_shape = -1;
+ static int desired_cursor_shape = -1;
+ static int last_set_cursor_blink = -1;
+--- 171,178 ----
+
+ /* Store the last set and the desired cursor properties, so that we only update
+ * them when needed. Doing it unnecessary may result in flicker. */
+! static char_u *last_set_cursor_color = NULL;
+! static char_u *desired_cursor_color = NULL;
+ static int last_set_cursor_shape = -1;
+ static int desired_cursor_shape = -1;
+ static int last_set_cursor_blink = -1;
+***************
+*** 183,188 ****
+--- 183,210 ----
+ * 1. Generic code for all systems.
+ */
+
++ static void
++ cursor_color_copy(char_u** to_color, char_u* from_color)
++ {
++ vim_free(*to_color);
++ *to_color = (from_color == NULL) ? NULL : vim_strsave(from_color);
++ }
++
++ static int
++ cursor_color_equal(char_u *lhs_color, char_u *rhs_color)
++ {
++ if (lhs_color != NULL && rhs_color != NULL)
++ return STRCMP(lhs_color, rhs_color) == 0;
++ return lhs_color == NULL && rhs_color == NULL;
++ }
++
++ static char_u *
++ cursor_color_get(char_u *color)
++ {
++ return (color == NULL) ? (char_u *)"" : color;
++ }
++
++
+ /*
+ * Parse 'termwinsize' and set "rows" and "cols" for the terminal size in the
+ * current window.
+***************
+*** 823,830 ****
+ if (term->tl_out_fd != NULL)
+ fclose(term->tl_out_fd);
+ #endif
+- if (desired_cursor_color == term->tl_cursor_color)
+- desired_cursor_color = (char_u *)"";
+ vim_free(term->tl_cursor_color);
+ vim_free(term);
+ buf->b_term = NULL;
+--- 845,850 ----
+***************
+*** 1954,1967 ****
+ static void
+ may_output_cursor_props(void)
+ {
+! if (STRCMP(last_set_cursor_color, desired_cursor_color) != 0
+ || last_set_cursor_shape != desired_cursor_shape
+ || last_set_cursor_blink != desired_cursor_blink)
+ {
+! last_set_cursor_color = desired_cursor_color;
+ last_set_cursor_shape = desired_cursor_shape;
+ last_set_cursor_blink = desired_cursor_blink;
+! term_cursor_color(desired_cursor_color);
+ if (desired_cursor_shape == -1 || desired_cursor_blink == -1)
+ /* this will restore the initial cursor style, if possible */
+ ui_cursor_shape_forced(TRUE);
+--- 1974,1987 ----
+ static void
+ may_output_cursor_props(void)
+ {
+! if (!cursor_color_equal(last_set_cursor_color, desired_cursor_color)
+ || last_set_cursor_shape != desired_cursor_shape
+ || last_set_cursor_blink != desired_cursor_blink)
+ {
+! cursor_color_copy(&last_set_cursor_color, desired_cursor_color);
+ last_set_cursor_shape = desired_cursor_shape;
+ last_set_cursor_blink = desired_cursor_blink;
+! term_cursor_color(cursor_color_get(desired_cursor_color));
+ if (desired_cursor_shape == -1 || desired_cursor_blink == -1)
+ /* this will restore the initial cursor style, if possible */
+ ui_cursor_shape_forced(TRUE);
+***************
+*** 1984,1993 ****
+ #endif
+ if (in_terminal_loop == term)
+ {
+! if (term->tl_cursor_color != NULL)
+! desired_cursor_color = term->tl_cursor_color;
+! else
+! desired_cursor_color = (char_u *)"";
+ desired_cursor_shape = term->tl_cursor_shape;
+ desired_cursor_blink = term->tl_cursor_blink;
+ may_output_cursor_props();
+--- 2004,2010 ----
+ #endif
+ if (in_terminal_loop == term)
+ {
+! cursor_color_copy(&desired_cursor_color, term->tl_cursor_color);
+ desired_cursor_shape = term->tl_cursor_shape;
+ desired_cursor_blink = term->tl_cursor_blink;
+ may_output_cursor_props();
+***************
+*** 2004,2010 ****
+ if (gui.in_use)
+ return;
+ #endif
+! desired_cursor_color = (char_u *)"";
+ desired_cursor_shape = -1;
+ desired_cursor_blink = -1;
+ may_output_cursor_props();
+--- 2021,2027 ----
+ if (gui.in_use)
+ return;
+ #endif
+! cursor_color_copy(&desired_cursor_color, NULL);
+ desired_cursor_shape = -1;
+ desired_cursor_blink = -1;
+ may_output_cursor_props();
+***************
+*** 2624,2636 ****
+ break;
+
+ case VTERM_PROP_CURSORCOLOR:
+! if (desired_cursor_color == term->tl_cursor_color)
+! desired_cursor_color = (char_u *)"";
+! vim_free(term->tl_cursor_color);
+! if (*value->string == NUL)
+! term->tl_cursor_color = NULL;
+! else
+! term->tl_cursor_color = vim_strsave((char_u *)value->string);
+ may_set_cursor_props(term);
+ break;
+
+--- 2641,2647 ----
+ break;
+
+ case VTERM_PROP_CURSORCOLOR:
+! cursor_color_copy(&term->tl_cursor_color, (char_u*)value->string);
+ may_set_cursor_props(term);
+ break;
+
+***************
+*** 4711,4718 ****
+ dict_add_nr_str(d, "blink", blink_state_is_inverted()
+ ? !term->tl_cursor_blink : term->tl_cursor_blink, NULL);
+ dict_add_nr_str(d, "shape", term->tl_cursor_shape, NULL);
+! dict_add_nr_str(d, "color", 0L, term->tl_cursor_color == NULL
+! ? (char_u *)"" : term->tl_cursor_color);
+ list_append_dict(l, d);
+ }
+ }
+--- 4722,4728 ----
+ dict_add_nr_str(d, "blink", blink_state_is_inverted()
+ ? !term->tl_cursor_blink : term->tl_cursor_blink, NULL);
+ dict_add_nr_str(d, "shape", term->tl_cursor_shape, NULL);
+! dict_add_nr_str(d, "color", 0L, cursor_color_get(term->tl_cursor_color));
+ list_append_dict(l, d);
+ }
+ }
+*** ../vim-8.1.0012/src/version.c 2018-05-21 13:39:36.051906757 +0200
+--- src/version.c 2018-05-21 14:47:20.927181563 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 13,
+ /**/
+
+--
+Friends? I have lots of friends! In fact, I have all episodes ever made.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0014 b/data/vim/patches/8.1.0014
new file mode 100644
index 000000000..3fd601475
--- /dev/null
+++ b/data/vim/patches/8.1.0014
@@ -0,0 +1,486 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0014
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0014
+Problem: qf_init_ext() is too long.
+Solution: Split it into multiple functions. (Yegappan Lakshmanan,
+ closes #2939)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0013/src/quickfix.c 2018-05-20 15:41:12.884693893 +0200
+--- src/quickfix.c 2018-05-21 16:53:13.288566927 +0200
+***************
+*** 134,143 ****
+
+ static efm_T *fmt_start = NULL; /* cached across qf_parse_line() calls */
+
+- static int qf_init_ext(qf_info_T *qi, int qf_idx, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast, char_u *qf_title, char_u *enc);
+ static void qf_new_list(qf_info_T *qi, char_u *qf_title);
+ static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid);
+- static qf_info_T *ll_new_list(void);
+ static void qf_free(qf_info_T *qi, int idx);
+ static char_u *qf_types(int, int);
+ static int qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *, char_u *);
+--- 134,141 ----
+***************
+*** 178,209 ****
+ N_("E926: Current location list was changed");
+
+ /*
+- * Read the errorfile "efile" into memory, line by line, building the error
+- * list. Set the error list's title to qf_title.
+- * Return -1 for error, number of errors for success.
+- */
+- int
+- qf_init(win_T *wp,
+- char_u *efile,
+- char_u *errorformat,
+- int newlist, /* TRUE: start a new error list */
+- char_u *qf_title,
+- char_u *enc)
+- {
+- qf_info_T *qi = &ql_info;
+-
+- if (wp != NULL)
+- {
+- qi = ll_get_or_alloc_list(wp);
+- if (qi == NULL)
+- return FAIL;
+- }
+-
+- return qf_init_ext(qi, qi->qf_curlist, efile, curbuf, NULL, errorformat,
+- newlist, (linenr_T)0, (linenr_T)0, qf_title, enc);
+- }
+-
+- /*
+ * Maximum number of bytes allowed per line while reading a errorfile.
+ */
+ #define LINE_MAXLEN 4096
+--- 176,181 ----
+***************
+*** 1336,1341 ****
+--- 1308,1401 ----
+ }
+
+ /*
++ * Allocate the fields used for parsing lines and populating a quickfix list.
++ */
++ static int
++ qf_alloc_fields(qffields_T *pfields)
++ {
++ pfields->namebuf = alloc_id(CMDBUFFSIZE + 1, aid_qf_namebuf);
++ pfields->module = alloc_id(CMDBUFFSIZE + 1, aid_qf_module);
++ pfields->errmsglen = CMDBUFFSIZE + 1;
++ pfields->errmsg = alloc_id(pfields->errmsglen, aid_qf_errmsg);
++ pfields->pattern = alloc_id(CMDBUFFSIZE + 1, aid_qf_pattern);
++ if (pfields->namebuf == NULL || pfields->errmsg == NULL
++ || pfields->pattern == NULL || pfields->module == NULL)
++ return FAIL;
++
++ return OK;
++ }
++
++ /*
++ * Free the fields used for parsing lines and populating a quickfix list.
++ */
++ static void
++ qf_free_fields(qffields_T *pfields)
++ {
++ vim_free(pfields->namebuf);
++ vim_free(pfields->module);
++ vim_free(pfields->errmsg);
++ vim_free(pfields->pattern);
++ }
++
++ /*
++ * Setup the state information used for parsing lines and populating a
++ * quickfix list.
++ */
++ static int
++ qf_setup_state(
++ qfstate_T *pstate,
++ char_u *enc,
++ char_u *efile,
++ typval_T *tv,
++ buf_T *buf,
++ linenr_T lnumfirst,
++ linenr_T lnumlast)
++ {
++ #ifdef FEAT_MBYTE
++ pstate->vc.vc_type = CONV_NONE;
++ if (enc != NULL && *enc != NUL)
++ convert_setup(&pstate->vc, enc, p_enc);
++ #endif
++
++ if (efile != NULL && (pstate->fd = mch_fopen((char *)efile, "r")) == NULL)
++ {
++ EMSG2(_(e_openerrf), efile);
++ return FAIL;
++ }
++
++ if (tv != NULL)
++ {
++ if (tv->v_type == VAR_STRING)
++ pstate->p_str = tv->vval.v_string;
++ else if (tv->v_type == VAR_LIST)
++ pstate->p_li = tv->vval.v_list->lv_first;
++ pstate->tv = tv;
++ }
++ pstate->buf = buf;
++ pstate->buflnum = lnumfirst;
++ pstate->lnumlast = lnumlast;
++
++ return OK;
++ }
++
++ /*
++ * Cleanup the state information used for parsing lines and populating a
++ * quickfix list.
++ */
++ static void
++ qf_cleanup_state(qfstate_T *pstate)
++ {
++ if (pstate->fd != NULL)
++ fclose(pstate->fd);
++
++ vim_free(pstate->growbuf);
++ #ifdef FEAT_MBYTE
++ if (pstate->vc.vc_type != CONV_NONE)
++ convert_setup(&pstate->vc, NULL, NULL);
++ #endif
++ }
++
++ /*
+ * Read the errorfile "efile" into memory, line by line, building the error
+ * list.
+ * Alternative: when "efile" is NULL read errors from buffer "buf".
+***************
+*** 1375,1400 ****
+
+ vim_memset(&state, 0, sizeof(state));
+ vim_memset(&fields, 0, sizeof(fields));
+! #ifdef FEAT_MBYTE
+! state.vc.vc_type = CONV_NONE;
+! if (enc != NULL && *enc != NUL)
+! convert_setup(&state.vc, enc, p_enc);
+! #endif
+! fields.namebuf = alloc_id(CMDBUFFSIZE + 1, aid_qf_namebuf);
+! fields.module = alloc_id(CMDBUFFSIZE + 1, aid_qf_module);
+! fields.errmsglen = CMDBUFFSIZE + 1;
+! fields.errmsg = alloc_id(fields.errmsglen, aid_qf_errmsg);
+! fields.pattern = alloc_id(CMDBUFFSIZE + 1, aid_qf_pattern);
+! if (fields.namebuf == NULL || fields.errmsg == NULL
+! || fields.pattern == NULL || fields.module == NULL)
+ goto qf_init_end;
+
+- if (efile != NULL && (state.fd = mch_fopen((char *)efile, "r")) == NULL)
+- {
+- EMSG2(_(e_openerrf), efile);
+- goto qf_init_end;
+- }
+-
+ if (newlist || qf_idx == qi->qf_listcount)
+ {
+ /* make place for a new list */
+--- 1435,1445 ----
+
+ vim_memset(&state, 0, sizeof(state));
+ vim_memset(&fields, 0, sizeof(fields));
+! if ((qf_alloc_fields(&fields) == FAIL) ||
+! (qf_setup_state(&state, enc, efile, tv, buf,
+! lnumfirst, lnumlast) == FAIL))
+ goto qf_init_end;
+
+ if (newlist || qf_idx == qi->qf_listcount)
+ {
+ /* make place for a new list */
+***************
+*** 1442,1459 ****
+ */
+ got_int = FALSE;
+
+- if (tv != NULL)
+- {
+- if (tv->v_type == VAR_STRING)
+- state.p_str = tv->vval.v_string;
+- else if (tv->v_type == VAR_LIST)
+- state.p_li = tv->vval.v_list->lv_first;
+- state.tv = tv;
+- }
+- state.buf = buf;
+- state.buflnum = lnumfirst;
+- state.lnumlast = lnumlast;
+-
+ /*
+ * Read the lines in the error file one by one.
+ * Try to recognize one of the error formats in each line.
+--- 1487,1492 ----
+***************
+*** 1526,1550 ****
+ --qi->qf_curlist;
+ }
+ qf_init_end:
+- if (state.fd != NULL)
+- fclose(state.fd);
+- vim_free(fields.namebuf);
+- vim_free(fields.module);
+- vim_free(fields.errmsg);
+- vim_free(fields.pattern);
+- vim_free(state.growbuf);
+-
+ if (qf_idx == qi->qf_curlist)
+ qf_update_buffer(qi, old_last);
+! #ifdef FEAT_MBYTE
+! if (state.vc.vc_type != CONV_NONE)
+! convert_setup(&state.vc, NULL, NULL);
+! #endif
+
+ return retval;
+ }
+
+ /*
+ * Set the title of the specified quickfix list. Frees the previous title.
+ * Prepends ':' to the title.
+ */
+--- 1559,1599 ----
+ --qi->qf_curlist;
+ }
+ qf_init_end:
+ if (qf_idx == qi->qf_curlist)
+ qf_update_buffer(qi, old_last);
+! qf_cleanup_state(&state);
+! qf_free_fields(&fields);
+
+ return retval;
+ }
+
+ /*
++ * Read the errorfile "efile" into memory, line by line, building the error
++ * list. Set the error list's title to qf_title.
++ * Return -1 for error, number of errors for success.
++ */
++ int
++ qf_init(win_T *wp,
++ char_u *efile,
++ char_u *errorformat,
++ int newlist, /* TRUE: start a new error list */
++ char_u *qf_title,
++ char_u *enc)
++ {
++ qf_info_T *qi = &ql_info;
++
++ if (wp != NULL)
++ {
++ qi = ll_get_or_alloc_list(wp);
++ if (qi == NULL)
++ return FAIL;
++ }
++
++ return qf_init_ext(qi, qi->qf_curlist, efile, curbuf, NULL, errorformat,
++ newlist, (linenr_T)0, (linenr_T)0, qf_title, enc);
++ }
++
++ /*
+ * Set the title of the specified quickfix list. Frees the previous title.
+ * Prepends ':' to the title.
+ */
+***************
+*** 3835,3840 ****
+--- 3884,3963 ----
+ }
+
+ /*
++ * Add an error line to the quickfix buffer.
++ */
++ static int
++ qf_buf_add_line(buf_T *buf, linenr_T lnum, qfline_T *qfp, char_u *dirname)
++ {
++ int len;
++ buf_T *errbuf;
++
++ if (qfp->qf_module != NULL)
++ {
++ STRCPY(IObuff, qfp->qf_module);
++ len = (int)STRLEN(IObuff);
++ }
++ else if (qfp->qf_fnum != 0
++ && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
++ && errbuf->b_fname != NULL)
++ {
++ if (qfp->qf_type == 1) /* :helpgrep */
++ STRCPY(IObuff, gettail(errbuf->b_fname));
++ else
++ {
++ /* shorten the file name if not done already */
++ if (errbuf->b_sfname == NULL
++ || mch_isFullName(errbuf->b_sfname))
++ {
++ if (*dirname == NUL)
++ mch_dirname(dirname, MAXPATHL);
++ shorten_buf_fname(errbuf, dirname, FALSE);
++ }
++ STRCPY(IObuff, errbuf->b_fname);
++ }
++ len = (int)STRLEN(IObuff);
++ }
++ else
++ len = 0;
++ IObuff[len++] = '|';
++
++ if (qfp->qf_lnum > 0)
++ {
++ sprintf((char *)IObuff + len, "%ld", qfp->qf_lnum);
++ len += (int)STRLEN(IObuff + len);
++
++ if (qfp->qf_col > 0)
++ {
++ sprintf((char *)IObuff + len, " col %d", qfp->qf_col);
++ len += (int)STRLEN(IObuff + len);
++ }
++
++ sprintf((char *)IObuff + len, "%s",
++ (char *)qf_types(qfp->qf_type, qfp->qf_nr));
++ len += (int)STRLEN(IObuff + len);
++ }
++ else if (qfp->qf_pattern != NULL)
++ {
++ qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len);
++ len += (int)STRLEN(IObuff + len);
++ }
++ IObuff[len++] = '|';
++ IObuff[len++] = ' ';
++
++ /* Remove newlines and leading whitespace from the text.
++ * For an unrecognized line keep the indent, the compiler may
++ * mark a word with ^^^^. */
++ qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text,
++ IObuff + len, IOSIZE - len);
++
++ if (ml_append_buf(buf, lnum, IObuff,
++ (colnr_T)STRLEN(IObuff) + 1, FALSE) == FAIL)
++ return FAIL;
++
++ return OK;
++ }
++
++ /*
+ * Fill current buffer with quickfix errors, replacing any previous contents.
+ * curbuf must be the quickfix buffer!
+ * If "old_last" is not NULL append the items after this one.
+***************
+*** 3846,3853 ****
+ {
+ linenr_T lnum;
+ qfline_T *qfp;
+- buf_T *errbuf;
+- int len;
+ int old_KeyTyped = KeyTyped;
+
+ if (old_last == NULL)
+--- 3969,3974 ----
+***************
+*** 3883,3949 ****
+ }
+ while (lnum < qi->qf_lists[qi->qf_curlist].qf_count)
+ {
+! if (qfp->qf_module != NULL)
+! {
+! STRCPY(IObuff, qfp->qf_module);
+! len = (int)STRLEN(IObuff);
+! }
+! else if (qfp->qf_fnum != 0
+! && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
+! && errbuf->b_fname != NULL)
+! {
+! if (qfp->qf_type == 1) /* :helpgrep */
+! STRCPY(IObuff, gettail(errbuf->b_fname));
+! else
+! {
+! /* shorten the file name if not done already */
+! if (errbuf->b_sfname == NULL
+! || mch_isFullName(errbuf->b_sfname))
+! {
+! if (*dirname == NUL)
+! mch_dirname(dirname, MAXPATHL);
+! shorten_buf_fname(errbuf, dirname, FALSE);
+! }
+! STRCPY(IObuff, errbuf->b_fname);
+! }
+! len = (int)STRLEN(IObuff);
+! }
+! else
+! len = 0;
+! IObuff[len++] = '|';
+!
+! if (qfp->qf_lnum > 0)
+! {
+! sprintf((char *)IObuff + len, "%ld", qfp->qf_lnum);
+! len += (int)STRLEN(IObuff + len);
+!
+! if (qfp->qf_col > 0)
+! {
+! sprintf((char *)IObuff + len, " col %d", qfp->qf_col);
+! len += (int)STRLEN(IObuff + len);
+! }
+!
+! sprintf((char *)IObuff + len, "%s",
+! (char *)qf_types(qfp->qf_type, qfp->qf_nr));
+! len += (int)STRLEN(IObuff + len);
+! }
+! else if (qfp->qf_pattern != NULL)
+! {
+! qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len);
+! len += (int)STRLEN(IObuff + len);
+! }
+! IObuff[len++] = '|';
+! IObuff[len++] = ' ';
+!
+! /* Remove newlines and leading whitespace from the text.
+! * For an unrecognized line keep the indent, the compiler may
+! * mark a word with ^^^^. */
+! qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text,
+! IObuff + len, IOSIZE - len);
+!
+! if (ml_append_buf(buf, lnum, IObuff,
+! (colnr_T)STRLEN(IObuff) + 1, FALSE) == FAIL)
+ break;
+ ++lnum;
+ qfp = qfp->qf_next;
+ if (qfp == NULL)
+--- 4004,4012 ----
+ }
+ while (lnum < qi->qf_lists[qi->qf_curlist].qf_count)
+ {
+! if (qf_buf_add_line(buf, lnum, qfp, dirname) == FAIL)
+ break;
++
+ ++lnum;
+ qfp = qfp->qf_next;
+ if (qfp == NULL)
+*** ../vim-8.1.0013/src/version.c 2018-05-21 14:55:22.555983588 +0200
+--- src/version.c 2018-05-21 16:55:00.327845962 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 14,
+ /**/
+
+--
+ARTHUR: ... and I am your king ....
+OLD WOMAN: Ooooh! I didn't know we had a king. I thought we were an
+ autonomous collective ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0015 b/data/vim/patches/8.1.0015
new file mode 100644
index 000000000..648710228
--- /dev/null
+++ b/data/vim/patches/8.1.0015
@@ -0,0 +1,144 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0015
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0015
+Problem: Cursor color wrong when closing a terminal window, ending up in
+ another terminal window. (Dominique Pelle)
+Solution: Bail out of terminal_loop() when the buffer changes.
+ (closes #2942)
+Files: src/terminal.c
+
+
+*** ../vim-8.1.0014/src/terminal.c 2018-05-21 14:55:22.555983588 +0200
+--- src/terminal.c 2018-05-21 18:37:16.628386002 +0200
+***************
+*** 183,196 ****
+ * 1. Generic code for all systems.
+ */
+
+! static void
+! cursor_color_copy(char_u** to_color, char_u* from_color)
+! {
+! vim_free(*to_color);
+! *to_color = (from_color == NULL) ? NULL : vim_strsave(from_color);
+! }
+!
+! static int
+ cursor_color_equal(char_u *lhs_color, char_u *rhs_color)
+ {
+ if (lhs_color != NULL && rhs_color != NULL)
+--- 183,189 ----
+ * 1. Generic code for all systems.
+ */
+
+! static int
+ cursor_color_equal(char_u *lhs_color, char_u *rhs_color)
+ {
+ if (lhs_color != NULL && rhs_color != NULL)
+***************
+*** 198,204 ****
+ return lhs_color == NULL && rhs_color == NULL;
+ }
+
+! static char_u *
+ cursor_color_get(char_u *color)
+ {
+ return (color == NULL) ? (char_u *)"" : color;
+--- 191,207 ----
+ return lhs_color == NULL && rhs_color == NULL;
+ }
+
+! static void
+! cursor_color_copy(char_u **to_color, char_u *from_color)
+! {
+! // Avoid a free & alloc if the value is already right.
+! if (cursor_color_equal(*to_color, from_color))
+! return;
+! vim_free(*to_color);
+! *to_color = (from_color == NULL) ? NULL : vim_strsave(from_color);
+! }
+!
+! static char_u *
+ cursor_color_get(char_u *color)
+ {
+ return (color == NULL) ? (char_u *)"" : color;
+***************
+*** 2119,2125 ****
+ while (must_redraw != 0)
+ if (update_screen(0) == FAIL)
+ break;
+! if (!term_use_loop_check(TRUE))
+ /* job finished while redrawing */
+ break;
+
+--- 2122,2128 ----
+ while (must_redraw != 0)
+ if (update_screen(0) == FAIL)
+ break;
+! if (!term_use_loop_check(TRUE) || in_terminal_loop != curbuf->b_term)
+ /* job finished while redrawing */
+ break;
+
+***************
+*** 2127,2133 ****
+ restore_cursor = TRUE;
+
+ c = term_vgetc();
+! if (!term_use_loop_check(TRUE))
+ {
+ /* Job finished while waiting for a character. Push back the
+ * received character. */
+--- 2130,2136 ----
+ restore_cursor = TRUE;
+
+ c = term_vgetc();
+! if (!term_use_loop_check(TRUE) || in_terminal_loop != curbuf->b_term)
+ {
+ /* Job finished while waiting for a character. Push back the
+ * received character. */
+***************
+*** 2178,2184 ****
+ #ifdef FEAT_CMDL_INFO
+ clear_showcmd();
+ #endif
+! if (!term_use_loop_check(TRUE))
+ /* job finished while waiting for a character */
+ break;
+
+--- 2181,2188 ----
+ #ifdef FEAT_CMDL_INFO
+ clear_showcmd();
+ #endif
+! if (!term_use_loop_check(TRUE)
+! || in_terminal_loop != curbuf->b_term)
+ /* job finished while waiting for a character */
+ break;
+
+*** ../vim-8.1.0014/src/version.c 2018-05-21 16:56:33.687217173 +0200
+--- src/version.c 2018-05-21 17:16:16.343071822 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 15,
+ /**/
+
+--
+OLD WOMAN: Well, how did you become king, then?
+ARTHUR: The Lady of the Lake, her arm clad in the purest shimmering samite,
+ held Excalibur aloft from the bosom of the water to signify by Divine
+ Providence ... that I, Arthur, was to carry Excalibur ... That is
+ why I am your king!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0016 b/data/vim/patches/8.1.0016
new file mode 100644
index 000000000..0ecad20a9
--- /dev/null
+++ b/data/vim/patches/8.1.0016
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0016
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0016
+Problem: Possible crash in term_wait(). (Dominique Pelle)
+Solution: Check for a valid buffer after ui_delay(). (closes #2944)
+Files: src/terminal.c
+
+
+*** ../vim-8.1.0015/src/terminal.c 2018-05-21 18:47:47.496590765 +0200
+--- src/terminal.c 2018-05-21 22:47:11.788087575 +0200
+***************
+*** 5264,5274 ****
+ {
+ mch_check_messages();
+ parse_queued_messages();
+ if (!buf_valid(buf))
+ /* If the terminal is closed when the channel is closed the
+ * buffer disappears. */
+ break;
+- ui_delay(10L, FALSE);
+ }
+ mch_check_messages();
+ parse_queued_messages();
+--- 5264,5274 ----
+ {
+ mch_check_messages();
+ parse_queued_messages();
++ ui_delay(10L, FALSE);
+ if (!buf_valid(buf))
+ /* If the terminal is closed when the channel is closed the
+ * buffer disappears. */
+ break;
+ }
+ mch_check_messages();
+ parse_queued_messages();
+*** ../vim-8.1.0015/src/version.c 2018-05-21 18:47:47.500590743 +0200
+--- src/version.c 2018-05-21 22:49:40.782890938 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 16,
+ /**/
+
+--
+DENNIS: You can't expect to wield supreme executive power just 'cause some
+ watery tart threw a sword at you!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0017 b/data/vim/patches/8.1.0017
new file mode 100644
index 000000000..7eb2704a6
--- /dev/null
+++ b/data/vim/patches/8.1.0017
@@ -0,0 +1,210 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0017
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0017
+Problem: Shell command completion has duplicates. (Yegappan Lakshmanan)
+Solution: Use a hash table to avoid duplicates. (Ozaki Kiichi, closes #539,
+ closes #2733)
+Files: src/ex_getln.c, src/testdir/test_cmdline.vim
+
+
+*** ../vim-8.1.0016/src/ex_getln.c 2018-05-13 18:28:45.000000000 +0200
+--- src/ex_getln.c 2018-05-22 16:50:19.196716156 +0200
+***************
+*** 5147,5153 ****
+ {
+ char_u *pat;
+ int i;
+! char_u *path;
+ int mustfree = FALSE;
+ garray_T ga;
+ char_u *buf = alloc(MAXPATHL);
+--- 5147,5153 ----
+ {
+ char_u *pat;
+ int i;
+! char_u *path = NULL;
+ int mustfree = FALSE;
+ garray_T ga;
+ char_u *buf = alloc(MAXPATHL);
+***************
+*** 5156,5161 ****
+--- 5156,5164 ----
+ int flags = flagsarg;
+ int ret;
+ int did_curdir = FALSE;
++ hashtab_T found_ht;
++ hashitem_T *hi;
++ hash_T hash;
+
+ if (buf == NULL)
+ return FAIL;
+***************
+*** 5169,5183 ****
+
+ flags |= EW_FILE | EW_EXEC | EW_SHELLCMD;
+
+! /* For an absolute name we don't use $PATH. */
+! if (mch_isFullName(pat))
+! path = (char_u *)" ";
+! else if ((pat[0] == '.' && (vim_ispathsep(pat[1])
+! || (pat[1] == '.' && vim_ispathsep(pat[2])))))
+ path = (char_u *)".";
+ else
+ {
+! path = vim_getenv((char_u *)"PATH", &mustfree);
+ if (path == NULL)
+ path = (char_u *)"";
+ }
+--- 5172,5185 ----
+
+ flags |= EW_FILE | EW_EXEC | EW_SHELLCMD;
+
+! if (pat[0] == '.' && (vim_ispathsep(pat[1])
+! || (pat[1] == '.' && vim_ispathsep(pat[2]))))
+ path = (char_u *)".";
+ else
+ {
+! /* For an absolute name we don't use $PATH. */
+! if (!mch_isFullName(pat))
+! path = vim_getenv((char_u *)"PATH", &mustfree);
+ if (path == NULL)
+ path = (char_u *)"";
+ }
+***************
+*** 5188,5193 ****
+--- 5190,5196 ----
+ * current directory, to find "subdir/cmd".
+ */
+ ga_init2(&ga, (int)sizeof(char *), 10);
++ hash_init(&found_ht);
+ for (s = path; ; s = e)
+ {
+ if (*s == NUL)
+***************
+*** 5200,5208 ****
+ else if (*s == '.')
+ did_curdir = TRUE;
+
+- if (*s == ' ')
+- ++s; /* Skip space used for absolute path name. */
+-
+ #if defined(MSWIN)
+ e = vim_strchr(s, ';');
+ #else
+--- 5203,5208 ----
+***************
+*** 5229,5243 ****
+ {
+ for (i = 0; i < *num_file; ++i)
+ {
+! s = (*file)[i];
+! if (STRLEN(s) > l)
+ {
+! /* Remove the path again. */
+! STRMOVE(s, s + l);
+! ((char_u **)ga.ga_data)[ga.ga_len++] = s;
+ }
+! else
+! vim_free(s);
+ }
+ vim_free(*file);
+ }
+--- 5229,5251 ----
+ {
+ for (i = 0; i < *num_file; ++i)
+ {
+! char_u *name = (*file)[i];
+!
+! if (STRLEN(name) > l)
+ {
+! // Check if this name was already found.
+! hash = hash_hash(name + l);
+! hi = hash_lookup(&found_ht, name + l, hash);
+! if (HASHITEM_EMPTY(hi))
+! {
+! // Remove the path that was prepended.
+! STRMOVE(name, name + l);
+! ((char_u **)ga.ga_data)[ga.ga_len++] = name;
+! hash_add_item(&found_ht, hi, name, hash);
+! name = NULL;
+! }
+ }
+! vim_free(name);
+ }
+ vim_free(*file);
+ }
+***************
+*** 5252,5257 ****
+--- 5260,5266 ----
+ vim_free(pat);
+ if (mustfree)
+ vim_free(path);
++ hash_clear(&found_ht);
+ return OK;
+ }
+
+*** ../vim-8.1.0016/src/testdir/test_cmdline.vim 2018-05-12 13:15:47.000000000 +0200
+--- src/testdir/test_cmdline.vim 2018-05-22 16:46:15.281766628 +0200
+***************
+*** 231,236 ****
+--- 231,245 ----
+ let l = getcompletion('not', 'mapclear')
+ call assert_equal([], l)
+
++ let l = getcompletion('.', 'shellcmd')
++ call assert_equal(['./', '../'], l[0:1])
++ call assert_equal(-1, match(l[2:], '^\.\.\?/$'))
++ let root = has('win32') ? 'C:\\' : '/'
++ let l = getcompletion(root, 'shellcmd')
++ let expected = map(filter(glob(root . '*', 0, 1),
++ \ 'isdirectory(v:val) || executable(v:val)'), 'isdirectory(v:val) ? v:val . ''/'' : v:val')
++ call assert_equal(expected, l)
++
+ if has('cscope')
+ let l = getcompletion('', 'cscope')
+ let cmds = ['add', 'find', 'help', 'kill', 'reset', 'show']
+***************
+*** 258,265 ****
+ endif
+
+ " For others test if the name is recognized.
+! let names = ['buffer', 'environment', 'file_in_path',
+! \ 'mapping', 'shellcmd', 'tag', 'tag_listfiles', 'user']
+ if has('cmdline_hist')
+ call add(names, 'history')
+ endif
+--- 267,273 ----
+ endif
+
+ " For others test if the name is recognized.
+! let names = ['buffer', 'environment', 'file_in_path', 'mapping', 'tag', 'tag_listfiles', 'user']
+ if has('cmdline_hist')
+ call add(names, 'history')
+ endif
+*** ../vim-8.1.0016/src/version.c 2018-05-21 22:50:22.514568516 +0200
+--- src/version.c 2018-05-22 16:48:23.473237408 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 17,
+ /**/
+
+--
+ARTHUR: You are indeed brave Sir knight, but the fight is mine.
+BLACK KNIGHT: Had enough?
+ARTHUR: You stupid bastard. You havn't got any arms left.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0018 b/data/vim/patches/8.1.0018
new file mode 100644
index 000000000..998587b8c
--- /dev/null
+++ b/data/vim/patches/8.1.0018
@@ -0,0 +1,328 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0018
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0018
+Problem: Using "gn" may select wrong text when wrapping.
+Solution: Avoid wrapping when searching forward. (Christian Brabandt)
+Files: src/search.c, src/testdir/test_gn.vim
+
+
+*** ../vim-8.1.0017/src/search.c 2018-04-27 22:44:25.000000000 +0200
+--- src/search.c 2018-05-22 17:45:10.884137772 +0200
+***************
+*** 4665,4670 ****
+--- 4665,4671 ----
+ {
+ pos_T start_pos; /* position before the pattern */
+ pos_T orig_pos; /* position of the cursor at beginning */
++ pos_T first_match; /* position of first match */
+ pos_T pos; /* position after the pattern */
+ int i;
+ int dir;
+***************
+*** 4758,4763 ****
+--- 4759,4766 ----
+ ml_get(curwin->w_buffer->b_ml.ml_line_count));
+ }
+ }
++ if (i == 0)
++ first_match = pos;
+ p_ws = old_p_ws;
+ }
+
+***************
+*** 4774,4782 ****
+ /* move to match, except for zero-width matches, in which case, we are
+ * already on the next match */
+ if (!one_char)
+! result = searchit(curwin, curbuf, &pos, direction,
+ spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0,
+ NULL, NULL);
+
+ if (!VIsual_active)
+ VIsual = start_pos;
+--- 4777,4801 ----
+ /* move to match, except for zero-width matches, in which case, we are
+ * already on the next match */
+ if (!one_char)
+! {
+! p_ws = FALSE;
+! for (i = 0; i < 2; i++)
+! {
+! result = searchit(curwin, curbuf, &pos, direction,
+ spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0,
+ NULL, NULL);
++ /* Search successfull, break out from the loop */
++ if (result)
++ break;
++ /* search failed, try again from the last search position match */
++ pos = first_match;
++ }
++ }
++
++ p_ws = old_p_ws;
++ /* not found */
++ if (!result)
++ return FAIL;
+
+ if (!VIsual_active)
+ VIsual = start_pos;
+*** ../vim-8.1.0017/src/testdir/test_gn.vim 2017-10-15 22:02:53.000000000 +0200
+--- src/testdir/test_gn.vim 2018-05-22 17:48:47.536062374 +0200
+***************
+*** 4,54 ****
+ noautocmd new
+ " replace a single char by itsself quoted:
+ call setline('.', 'abc x def x ghi x jkl')
+! let @/='x'
+ exe "norm! cgn'x'\<esc>.."
+ call assert_equal("abc 'x' def 'x' ghi 'x' jkl", getline('.'))
+ sil! %d_
+
+ " simple search match
+ call setline('.', 'foobar')
+! let @/='foobar'
+ exe "norm! gncsearchmatch"
+ call assert_equal('searchmatch', getline('.'))
+ sil! %d _
+
+ " replace a multi-line match
+ call setline('.', ['', 'one', 'two'])
+! let @/='one\_s*two\_s'
+ exe "norm! gnceins\<CR>zwei"
+ call assert_equal(['','eins','zwei'], getline(1,'$'))
+ sil! %d _
+
+ " test count argument
+ call setline('.', ['', 'abcdx | abcdx | abcdx'])
+! let @/='[a]bcdx'
+ exe "norm! 2gnd"
+ call assert_equal(['','abcdx | | abcdx'], getline(1,'$'))
+ sil! %d _
+
+ " join lines
+ call setline('.', ['join ', 'lines'])
+! let @/='$'
+ exe "norm! 0gnd"
+ call assert_equal(['join lines'], getline(1,'$'))
+ sil! %d _
+
+ " zero-width match
+ call setline('.', ['', 'zero width pattern'])
+! let @/='\>\zs'
+ exe "norm! 0gnd"
+ call assert_equal(['', 'zerowidth pattern'], getline(1,'$'))
+ sil! %d _
+
+ " delete first and last chars
+ call setline('.', ['delete first and last chars'])
+! let @/='^'
+ exe "norm! 0gnd$"
+! let @/='\zs'
+ exe "norm! gnd"
+ call assert_equal(['elete first and last char'], getline(1,'$'))
+ sil! %d _
+--- 4,54 ----
+ noautocmd new
+ " replace a single char by itsself quoted:
+ call setline('.', 'abc x def x ghi x jkl')
+! let @/ = 'x'
+ exe "norm! cgn'x'\<esc>.."
+ call assert_equal("abc 'x' def 'x' ghi 'x' jkl", getline('.'))
+ sil! %d_
+
+ " simple search match
+ call setline('.', 'foobar')
+! let @/ = 'foobar'
+ exe "norm! gncsearchmatch"
+ call assert_equal('searchmatch', getline('.'))
+ sil! %d _
+
+ " replace a multi-line match
+ call setline('.', ['', 'one', 'two'])
+! let @/ = 'one\_s*two\_s'
+ exe "norm! gnceins\<CR>zwei"
+ call assert_equal(['','eins','zwei'], getline(1,'$'))
+ sil! %d _
+
+ " test count argument
+ call setline('.', ['', 'abcdx | abcdx | abcdx'])
+! let @/ = '[a]bcdx'
+ exe "norm! 2gnd"
+ call assert_equal(['','abcdx | | abcdx'], getline(1,'$'))
+ sil! %d _
+
+ " join lines
+ call setline('.', ['join ', 'lines'])
+! let @/ = '$'
+ exe "norm! 0gnd"
+ call assert_equal(['join lines'], getline(1,'$'))
+ sil! %d _
+
+ " zero-width match
+ call setline('.', ['', 'zero width pattern'])
+! let @/ = '\>\zs'
+ exe "norm! 0gnd"
+ call assert_equal(['', 'zerowidth pattern'], getline(1,'$'))
+ sil! %d _
+
+ " delete first and last chars
+ call setline('.', ['delete first and last chars'])
+! let @/ = '^'
+ exe "norm! 0gnd$"
+! let @/ = '\zs'
+ exe "norm! gnd"
+ call assert_equal(['elete first and last char'], getline(1,'$'))
+ sil! %d _
+***************
+*** 61,74 ****
+
+ " backwards search
+ call setline('.', ['my very excellent mother just served us nachos'])
+! let @/='mother'
+ exe "norm! $cgNmongoose"
+ call assert_equal(['my very excellent mongoose just served us nachos'], getline(1,'$'))
+ sil! %d _
+
+ " search for single char
+ call setline('.', ['','for (i=0; i<=10; i++)'])
+! let @/='i'
+ exe "norm! cgnj"
+ call assert_equal(['','for (j=0; i<=10; i++)'], getline(1,'$'))
+ sil! %d _
+--- 61,74 ----
+
+ " backwards search
+ call setline('.', ['my very excellent mother just served us nachos'])
+! let @/ = 'mother'
+ exe "norm! $cgNmongoose"
+ call assert_equal(['my very excellent mongoose just served us nachos'], getline(1,'$'))
+ sil! %d _
+
+ " search for single char
+ call setline('.', ['','for (i=0; i<=10; i++)'])
+! let @/ = 'i'
+ exe "norm! cgnj"
+ call assert_equal(['','for (j=0; i<=10; i++)'], getline(1,'$'))
+ sil! %d _
+***************
+*** 76,103 ****
+ " search hex char
+ call setline('.', ['','Y'])
+ set noignorecase
+! let @/='\%x59'
+ exe "norm! gnd"
+ call assert_equal(['',''], getline(1,'$'))
+ sil! %d _
+
+ " test repeating gdn
+ call setline('.', ['', '1', 'Johnny', '2', 'Johnny', '3'])
+! let @/='Johnny'
+ exe "norm! dgn."
+ call assert_equal(['','1', '', '2', '', '3'], getline(1,'$'))
+ sil! %d _
+
+ " test repeating gUgn
+ call setline('.', ['', '1', 'Depp', '2', 'Depp', '3'])
+! let @/='Depp'
+ exe "norm! gUgn."
+ call assert_equal(['', '1', 'DEPP', '2', 'DEPP', '3'], getline(1,'$'))
+ sil! %d _
+
+ " test using look-ahead assertions
+ call setline('.', ['a:10', '', 'a:1', '', 'a:20'])
+! let @/='a:0\@!\zs\d\+'
+ exe "norm! 2nygno\<esc>p"
+ call assert_equal(['a:10', '', 'a:1', '1', '', 'a:20'], getline(1,'$'))
+ sil! %d _
+--- 76,103 ----
+ " search hex char
+ call setline('.', ['','Y'])
+ set noignorecase
+! let @/ = '\%x59'
+ exe "norm! gnd"
+ call assert_equal(['',''], getline(1,'$'))
+ sil! %d _
+
+ " test repeating gdn
+ call setline('.', ['', '1', 'Johnny', '2', 'Johnny', '3'])
+! let @/ = 'Johnny'
+ exe "norm! dgn."
+ call assert_equal(['','1', '', '2', '', '3'], getline(1,'$'))
+ sil! %d _
+
+ " test repeating gUgn
+ call setline('.', ['', '1', 'Depp', '2', 'Depp', '3'])
+! let @/ = 'Depp'
+ exe "norm! gUgn."
+ call assert_equal(['', '1', 'DEPP', '2', 'DEPP', '3'], getline(1,'$'))
+ sil! %d _
+
+ " test using look-ahead assertions
+ call setline('.', ['a:10', '', 'a:1', '', 'a:20'])
+! let @/ = 'a:0\@!\zs\d\+'
+ exe "norm! 2nygno\<esc>p"
+ call assert_equal(['a:10', '', 'a:1', '1', '', 'a:20'], getline(1,'$'))
+ sil! %d _
+***************
+*** 113,124 ****
+ " search upwards with nowrapscan set
+ call setline('.', ['foo', 'bar', 'foo', 'baz'])
+ set nowrapscan
+! let @/='foo'
+ $
+ norm! dgN
+ call assert_equal(['foo', 'bar', '', 'baz'], getline(1,'$'))
+ sil! %d_
+
+ set wrapscan&vim
+ endfu
+
+--- 113,133 ----
+ " search upwards with nowrapscan set
+ call setline('.', ['foo', 'bar', 'foo', 'baz'])
+ set nowrapscan
+! let @/ = 'foo'
+ $
+ norm! dgN
+ call assert_equal(['foo', 'bar', '', 'baz'], getline(1,'$'))
+ sil! %d_
+
++ " search using the \zs atom
++ call setline(1, [' nnoremap', '' , 'nnoremap'])
++ set wrapscan&vim
++ let @/ = '\_s\zsnnoremap'
++ $
++ norm! cgnmatch
++ call assert_equal([' nnoremap', '', 'match'], getline(1,'$'))
++ sil! %d_
++
+ set wrapscan&vim
+ endfu
+
+*** ../vim-8.1.0017/src/version.c 2018-05-22 16:58:43.979903077 +0200
+--- src/version.c 2018-05-22 17:49:43.960023944 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 18,
+ /**/
+
+--
+Eye have a spelling checker, it came with my PC;
+It plainly marks four my revue mistakes I cannot sea.
+I've run this poem threw it, I'm sure your please to no,
+It's letter perfect in it's weigh, my checker tolled me sew!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0019 b/data/vim/patches/8.1.0019
new file mode 100644
index 000000000..2c23681b7
--- /dev/null
+++ b/data/vim/patches/8.1.0019
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0019
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0019
+Problem: Error when defining a Lambda with index of a function result.
+Solution: When not evaluating an expression and skipping a function call,
+ set the return value to VAR_UNKNOWN.
+Files: src/userfunc.c, src/testdir/test_lambda.vim
+
+
+*** ../vim-8.1.0018/src/userfunc.c 2018-03-04 16:24:26.000000000 +0100
+--- src/userfunc.c 2018-05-22 18:28:12.801624574 +0200
+***************
+*** 1349,1356 ****
+ }
+
+
+! /* execute the function if no errors detected and executing */
+! if (evaluate && error == ERROR_NONE)
+ {
+ char_u *rfname = fname;
+
+--- 1349,1364 ----
+ }
+
+
+! /*
+! * Execute the function if executing and no errors were detected.
+! */
+! if (!evaluate)
+! {
+! // Not evaluating, which means the return value is unknown. This
+! // matters for giving error messages.
+! rettv->v_type = VAR_UNKNOWN;
+! }
+! else if (error == ERROR_NONE)
+ {
+ char_u *rfname = fname;
+
+*** ../vim-8.1.0018/src/testdir/test_lambda.vim 2017-02-02 22:52:07.000000000 +0100
+--- src/testdir/test_lambda.vim 2018-05-22 18:27:22.697688766 +0200
+***************
+*** 284,286 ****
+--- 284,292 ----
+ call test_garbagecollect_now()
+ call assert_equal(14, s:Abar())
+ endfunc
++
++ func Test_lambda_with_index()
++ let List = {x -> [x]}
++ let Extract = {-> function(List, ['foobar'])()[0]}
++ call assert_equal('foobar', Extract())
++ endfunc
+*** ../vim-8.1.0018/src/version.c 2018-05-22 17:50:38.683980716 +0200
+--- src/version.c 2018-05-22 18:27:48.673655578 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 19,
+ /**/
+
+--
+Westheimer's Discovery:
+ A couple of months in the laboratory can
+ frequently save a couple of hours in the library.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0020 b/data/vim/patches/8.1.0020
new file mode 100644
index 000000000..3685bee38
--- /dev/null
+++ b/data/vim/patches/8.1.0020
@@ -0,0 +1,519 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0020
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0020
+Problem: Cannot tell whether a register is being used for executing or
+ recording.
+Solution: Add reg_executing() and reg_recording(). (Hirohito Higashi,
+ closes #2745) Rename the global variables for consistency. Store
+ the register name in reg_executing.
+Files: runtime/doc/eval.txt, runtime/doc/usr_41.txt, src/evalfunc.c,
+ src/testdir/test_functions.vim, src/getchar.c, src/normal.c,
+ src/ops.c, src/globals.h, src/edit.c, src/fileio.c, src/message.c,
+ src/screen.c
+
+
+*** ../vim-8.1.0019/runtime/doc/eval.txt 2018-05-17 15:06:48.000000000 +0200
+--- runtime/doc/eval.txt 2018-05-22 20:25:41.869831935 +0200
+***************
+*** 2302,2307 ****
+--- 2302,2309 ----
+ List items from {expr} to {max}
+ readfile({fname} [, {binary} [, {max}]])
+ List get list of lines from file {fname}
++ reg_executing() Number get the executing register name
++ reg_recording() String get the recording register name
+ reltime([{start} [, {end}]]) List get time value
+ reltimefloat({time}) Float turn the time value into a Float
+ reltimestr({time}) String turn time value into a String
+***************
+*** 6558,6563 ****
+--- 6562,6576 ----
+ the result is an empty list.
+ Also see |writefile()|.
+
++ reg_executing() *reg_executing()*
++ Returns the single letter name of the register being executed.
++ Returns an empty string when no register is being executed.
++ See |@|.
++
++ reg_recording() *reg_recording()*
++ Returns the single letter name of the register being recorded.
++ Returns an empty string string when not recording. See |q|.
++
+ reltime([{start} [, {end}]]) *reltime()*
+ Return an item that represents a time value. The format of
+ the item depends on the system. It can be passed to
+*** ../vim-8.1.0019/runtime/doc/usr_41.txt 2018-05-17 13:42:03.000000000 +0200
+--- runtime/doc/usr_41.txt 2018-05-22 20:26:30.025880034 +0200
+***************
+*** 1018,1023 ****
+--- 1018,1025 ----
+ getreg() get contents of a register
+ getregtype() get type of a register
+ setreg() set contents and type of a register
++ reg_executing() return the name of the register being executed
++ reg_recording() return the name of the register being recorded
+
+ shiftwidth() effective value of 'shiftwidth'
+
+*** ../vim-8.1.0019/src/evalfunc.c 2018-05-21 13:28:40.320041589 +0200
+--- src/evalfunc.c 2018-05-22 20:32:33.566027870 +0200
+***************
+*** 306,311 ****
+--- 306,313 ----
+ #endif
+ static void f_range(typval_T *argvars, typval_T *rettv);
+ static void f_readfile(typval_T *argvars, typval_T *rettv);
++ static void f_reg_executing(typval_T *argvars, typval_T *rettv);
++ static void f_reg_recording(typval_T *argvars, typval_T *rettv);
+ static void f_reltime(typval_T *argvars, typval_T *rettv);
+ #ifdef FEAT_FLOAT
+ static void f_reltimefloat(typval_T *argvars, typval_T *rettv);
+***************
+*** 754,759 ****
+--- 756,763 ----
+ #endif
+ {"range", 1, 3, f_range},
+ {"readfile", 1, 3, f_readfile},
++ {"reg_executing", 0, 0, f_reg_executing},
++ {"reg_recording", 0, 0, f_reg_recording},
+ {"reltime", 0, 2, f_reltime},
+ #ifdef FEAT_FLOAT
+ {"reltimefloat", 1, 1, f_reltimefloat},
+***************
+*** 8697,8702 ****
+--- 8701,8734 ----
+ fclose(fd);
+ }
+
++ static void
++ return_register(int regname, typval_T *rettv)
++ {
++ char_u buf[2] = {0, 0};
++
++ buf[0] = (char_u)regname;
++ rettv->v_type = VAR_STRING;
++ rettv->vval.v_string = vim_strsave(buf);
++ }
++
++ /*
++ * "reg_executing()" function
++ */
++ static void
++ f_reg_executing(typval_T *argvars UNUSED, typval_T *rettv)
++ {
++ return_register(reg_executing, rettv);
++ }
++
++ /*
++ * "reg_recording()" function
++ */
++ static void
++ f_reg_recording(typval_T *argvars UNUSED, typval_T *rettv)
++ {
++ return_register(reg_recording, rettv);
++ }
++
+ #if defined(FEAT_RELTIME)
+ static int list2proftime(typval_T *arg, proftime_T *tm);
+
+*** ../vim-8.1.0019/src/testdir/test_functions.vim 2018-05-20 14:11:07.125342749 +0200
+--- src/testdir/test_functions.vim 2018-05-22 20:27:42.625937524 +0200
+***************
+*** 923,925 ****
+--- 923,950 ----
+ let chars = join(map(range(1, 0x20) + [0xa0], {n -> nr2char(n)}), '')
+ call assert_equal("x", trim(chars . "x" . chars))
+ endfunc
++
++ " Test for reg_recording() and reg_executing()
++ func Test_reg_executing_and_recording()
++ let s:reg_stat = ''
++ func s:save_reg_stat()
++ let s:reg_stat = reg_recording() . ':' . reg_executing()
++ return ''
++ endfunc
++
++ new
++ call s:save_reg_stat()
++ call assert_equal(':', s:reg_stat)
++ call feedkeys("qa\"=s:save_reg_stat()\<CR>pq", 'xt')
++ call assert_equal('a:', s:reg_stat)
++ call feedkeys("@a", 'xt')
++ call assert_equal(':a', s:reg_stat)
++ call feedkeys("qb@aq", 'xt')
++ call assert_equal('b:a', s:reg_stat)
++ call feedkeys("q\"\"=s:save_reg_stat()\<CR>pq", 'xt')
++ call assert_equal('":', s:reg_stat)
++
++ bwipe!
++ delfunc s:save_reg_stat
++ unlet s:reg_stat
++ endfunc
+*** ../vim-8.1.0019/src/getchar.c 2018-05-13 18:25:53.000000000 +0200
+--- src/getchar.c 2018-05-22 20:21:55.241805765 +0200
+***************
+*** 1244,1250 ****
+ int todo = len;
+
+ /* remember how many chars were last recorded */
+! if (Recording)
+ last_recorded_len += len;
+
+ buf[1] = NUL;
+--- 1244,1250 ----
+ int todo = len;
+
+ /* remember how many chars were last recorded */
+! if (reg_recording != 0)
+ last_recorded_len += len;
+
+ buf[1] = NUL;
+***************
+*** 1254,1260 ****
+ c = *s++;
+ updatescript(c);
+
+! if (Recording)
+ {
+ buf[0] = c;
+ add_buff(&recordbuff, buf, 1L);
+--- 1254,1260 ----
+ c = *s++;
+ updatescript(c);
+
+! if (reg_recording != 0)
+ {
+ buf[0] = c;
+ add_buff(&recordbuff, buf, 1L);
+***************
+*** 2007,2013 ****
+ init_typebuf();
+ start_stuff();
+ if (advance && typebuf.tb_maplen == 0)
+! Exec_reg = FALSE;
+ do
+ {
+ /*
+--- 2007,2013 ----
+ init_typebuf();
+ start_stuff();
+ if (advance && typebuf.tb_maplen == 0)
+! reg_executing = 0;
+ do
+ {
+ /*
+*** ../vim-8.1.0019/src/normal.c 2018-05-10 15:04:13.000000000 +0200
+--- src/normal.c 2018-05-22 20:22:01.537798525 +0200
+***************
+*** 871,878 ****
+ || (nv_cmds[idx].cmd_flags & NV_NCH_ALW) == NV_NCH_ALW
+ || (ca.cmdchar == 'q'
+ && oap->op_type == OP_NOP
+! && !Recording
+! && !Exec_reg)
+ || ((ca.cmdchar == 'a' || ca.cmdchar == 'i')
+ && (oap->op_type != OP_NOP || VIsual_active))))
+ {
+--- 871,878 ----
+ || (nv_cmds[idx].cmd_flags & NV_NCH_ALW) == NV_NCH_ALW
+ || (ca.cmdchar == 'q'
+ && oap->op_type == OP_NOP
+! && reg_recording == 0
+! && reg_executing == 0)
+ || ((ca.cmdchar == 'a' || ca.cmdchar == 'i')
+ && (oap->op_type != OP_NOP || VIsual_active))))
+ {
+***************
+*** 9324,9330 ****
+ #endif
+ /* (stop) recording into a named register, unless executing a
+ * register */
+! if (!Exec_reg && do_record(cap->nchar) == FAIL)
+ clearopbeep(cap->oap);
+ }
+ }
+--- 9324,9330 ----
+ #endif
+ /* (stop) recording into a named register, unless executing a
+ * register */
+! if (reg_executing == 0 && do_record(cap->nchar) == FAIL)
+ clearopbeep(cap->oap);
+ }
+ }
+*** ../vim-8.1.0019/src/ops.c 2018-05-01 19:10:26.000000000 +0200
+--- src/ops.c 2018-05-22 20:22:13.973784219 +0200
+***************
+*** 1091,1104 ****
+ yankreg_T *old_y_previous, *old_y_current;
+ int retval;
+
+! if (Recording == FALSE) /* start recording */
+ {
+ /* registers 0-9, a-z and " are allowed */
+ if (c < 0 || (!ASCII_ISALNUM(c) && c != '"'))
+ retval = FAIL;
+ else
+ {
+! Recording = c;
+ showmode();
+ regname = c;
+ retval = OK;
+--- 1091,1104 ----
+ yankreg_T *old_y_previous, *old_y_current;
+ int retval;
+
+! if (reg_recording == 0) /* start recording */
+ {
+ /* registers 0-9, a-z and " are allowed */
+ if (c < 0 || (!ASCII_ISALNUM(c) && c != '"'))
+ retval = FAIL;
+ else
+ {
+! reg_recording = c;
+ showmode();
+ regname = c;
+ retval = OK;
+***************
+*** 1111,1117 ****
+ * needs to be removed again to put it in a register. exec_reg then
+ * adds the escaping back later.
+ */
+! Recording = FALSE;
+ MSG("");
+ p = get_recorded();
+ if (p == NULL)
+--- 1111,1117 ----
+ * needs to be removed again to put it in a register. exec_reg then
+ * adds the escaping back later.
+ */
+! reg_recording = 0;
+ MSG("");
+ p = get_recorded();
+ if (p == NULL)
+***************
+*** 1318,1324 ****
+ == FAIL)
+ return FAIL;
+ }
+! Exec_reg = TRUE; /* disable the 'q' command */
+ }
+ return retval;
+ }
+--- 1318,1324 ----
+ == FAIL)
+ return FAIL;
+ }
+! reg_executing = regname == 0 ? '"' : regname; // disable "q" command
+ }
+ return retval;
+ }
+*** ../vim-8.1.0019/src/globals.h 2018-05-01 15:29:24.000000000 +0200
+--- src/globals.h 2018-05-22 20:22:30.453765251 +0200
+***************
+*** 933,940 ****
+ EXTERN int exmode_active INIT(= 0); /* zero, EXMODE_NORMAL or EXMODE_VIM */
+ EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */
+
+! EXTERN int Recording INIT(= FALSE); /* TRUE when recording into a reg. */
+! EXTERN int Exec_reg INIT(= FALSE); /* TRUE when executing a register */
+
+ EXTERN int no_mapping INIT(= FALSE); /* currently no mapping allowed */
+ EXTERN int no_zero_mapping INIT(= 0); /* mapping zero not allowed */
+--- 933,940 ----
+ EXTERN int exmode_active INIT(= 0); /* zero, EXMODE_NORMAL or EXMODE_VIM */
+ EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */
+
+! EXTERN int reg_recording INIT(= 0); /* register for recording or zero */
+! EXTERN int reg_executing INIT(= 0); /* register being executed or zero */
+
+ EXTERN int no_mapping INIT(= FALSE); /* currently no mapping allowed */
+ EXTERN int no_zero_mapping INIT(= 0); /* mapping zero not allowed */
+*** ../vim-8.1.0019/src/edit.c 2018-05-10 15:03:58.000000000 +0200
+--- src/edit.c 2018-05-22 20:19:41.393959222 +0200
+***************
+*** 8698,8704 ****
+ * When recording or for CTRL-O, need to display the new mode.
+ * Otherwise remove the mode message.
+ */
+! if (Recording || restart_edit != NUL)
+ showmode();
+ else if (p_smd)
+ MSG("");
+--- 8698,8704 ----
+ * When recording or for CTRL-O, need to display the new mode.
+ * Otherwise remove the mode message.
+ */
+! if (reg_recording != 0 || restart_edit != NUL)
+ showmode();
+ else if (p_smd)
+ MSG("");
+*** ../vim-8.1.0019/src/fileio.c 2018-05-21 13:39:36.047906786 +0200
+--- src/fileio.c 2018-05-22 20:19:50.201949153 +0200
+***************
+*** 9274,9280 ****
+
+ if (!did_cursorhold
+ && has_cursorhold()
+! && !Recording
+ && typebuf.tb_len == 0
+ #ifdef FEAT_INS_EXPAND
+ && !ins_compl_active()
+--- 9274,9280 ----
+
+ if (!did_cursorhold
+ && has_cursorhold()
+! && reg_recording == 0
+ && typebuf.tb_len == 0
+ #ifdef FEAT_INS_EXPAND
+ && !ins_compl_active()
+*** ../vim-8.1.0019/src/message.c 2018-04-29 12:18:04.000000000 +0200
+--- src/message.c 2018-05-22 20:20:24.417909998 +0200
+***************
+*** 1025,1031 ****
+ int oldState;
+ int tmpState;
+ int had_got_int;
+! int save_Recording;
+ FILE *save_scriptout;
+
+ if (redraw == TRUE)
+--- 1025,1031 ----
+ int oldState;
+ int tmpState;
+ int had_got_int;
+! int save_reg_recording;
+ FILE *save_scriptout;
+
+ if (redraw == TRUE)
+***************
+*** 1103,1118 ****
+ /* Temporarily disable Recording. If Recording is active, the
+ * character will be recorded later, since it will be added to the
+ * typebuf after the loop */
+! save_Recording = Recording;
+ save_scriptout = scriptout;
+! Recording = FALSE;
+ scriptout = NULL;
+ c = safe_vgetc();
+ if (had_got_int && !global_busy)
+ got_int = FALSE;
+ --no_mapping;
+ --allow_keys;
+! Recording = save_Recording;
+ scriptout = save_scriptout;
+
+ #ifdef FEAT_CLIPBOARD
+--- 1103,1118 ----
+ /* Temporarily disable Recording. If Recording is active, the
+ * character will be recorded later, since it will be added to the
+ * typebuf after the loop */
+! save_reg_recording = reg_recording;
+ save_scriptout = scriptout;
+! reg_recording = 0;
+ scriptout = NULL;
+ c = safe_vgetc();
+ if (had_got_int && !global_busy)
+ got_int = FALSE;
+ --no_mapping;
+ --allow_keys;
+! reg_recording = save_reg_recording;
+ scriptout = save_scriptout;
+
+ #ifdef FEAT_CLIPBOARD
+*** ../vim-8.1.0019/src/screen.c 2018-05-19 14:43:26.775509740 +0200
+--- src/screen.c 2018-05-22 20:20:50.233880413 +0200
+***************
+*** 10255,10261 ****
+ && ((State & INSERT)
+ || restart_edit
+ || VIsual_active));
+! if (do_mode || Recording)
+ {
+ /*
+ * Don't show mode right now, when not redrawing or inside a mapping.
+--- 10255,10261 ----
+ && ((State & INSERT)
+ || restart_edit
+ || VIsual_active));
+! if (do_mode || reg_recording != 0)
+ {
+ /*
+ * Don't show mode right now, when not redrawing or inside a mapping.
+***************
+*** 10414,10420 ****
+
+ need_clear = TRUE;
+ }
+! if (Recording
+ #ifdef FEAT_INS_EXPAND
+ && edit_submode == NULL /* otherwise it gets too long */
+ #endif
+--- 10414,10420 ----
+
+ need_clear = TRUE;
+ }
+! if (reg_recording != 0
+ #ifdef FEAT_INS_EXPAND
+ && edit_submode == NULL /* otherwise it gets too long */
+ #endif
+***************
+*** 10489,10495 ****
+ int save_msg_col = msg_col;
+
+ msg_pos_mode();
+! if (Recording)
+ recording_mode(HL_ATTR(HLF_CM));
+ msg_clr_eos();
+
+--- 10489,10495 ----
+ int save_msg_col = msg_col;
+
+ msg_pos_mode();
+! if (reg_recording != 0)
+ recording_mode(HL_ATTR(HLF_CM));
+ msg_clr_eos();
+
+***************
+*** 10504,10510 ****
+ if (!shortmess(SHM_RECORDING))
+ {
+ char_u s[4];
+! sprintf((char *)s, " @%c", Recording);
+ MSG_PUTS_ATTR(s, attr);
+ }
+ }
+--- 10504,10510 ----
+ if (!shortmess(SHM_RECORDING))
+ {
+ char_u s[4];
+! sprintf((char *)s, " @%c", reg_recording);
+ MSG_PUTS_ATTR(s, attr);
+ }
+ }
+*** ../vim-8.1.0019/src/version.c 2018-05-22 18:31:30.001365739 +0200
+--- src/version.c 2018-05-22 20:33:34.882025227 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 20,
+ /**/
+
+--
+ |
+
+Ceci n'est pas une pipe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0021 b/data/vim/patches/8.1.0021
new file mode 100644
index 000000000..3106e3ea5
--- /dev/null
+++ b/data/vim/patches/8.1.0021
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0021
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0021
+Problem: Clang warns for undefined behavior.
+Solution: Move #ifdef outside of sprintf() call.(suggestion by Michael
+ Jarvis, closes #2956)
+Files: src/term.c
+
+
+*** ../vim-8.1.0020/src/term.c 2018-05-10 14:39:42.000000000 +0200
+--- src/term.c 2018-05-23 20:26:41.770633594 +0200
+***************
+*** 2872,2885 ****
+ #else
+ char *format = "%s%s%%dm";
+ #endif
+! sprintf(buf, format,
+! i == 2 ?
+ #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS)
+! s[1] == '|' ? IF_EB("\033|", ESC_STR "|") :
+ #endif
+! IF_EB("\033[", ESC_STR "[") : "\233",
+! s[i] == '3' ? (n >= 16 ? "38;5;" : "9")
+! : (n >= 16 ? "48;5;" : "10"));
+ OUT_STR(tgoto(buf, 0, n >= 16 ? n : n - 8));
+ }
+ else
+--- 2872,2886 ----
+ #else
+ char *format = "%s%s%%dm";
+ #endif
+! char *lead = i == 2 ? (
+ #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS)
+! s[1] == '|' ? IF_EB("\033|", ESC_STR "|") :
+ #endif
+! IF_EB("\033[", ESC_STR "[")) : "\233";
+! char *tail = s[i] == '3' ? (n >= 16 ? "38;5;" : "9")
+! : (n >= 16 ? "48;5;" : "10");
+!
+! sprintf(buf, format, lead, tail);
+ OUT_STR(tgoto(buf, 0, n >= 16 ? n : n - 8));
+ }
+ else
+*** ../vim-8.1.0020/src/version.c 2018-05-22 20:35:13.566009271 +0200
+--- src/version.c 2018-05-23 20:30:12.982576453 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 21,
+ /**/
+
+--
+BEDEVERE: And what do you burn, apart from witches?
+FOURTH VILLAGER: ... Wood?
+BEDEVERE: So why do witches burn?
+SECOND VILLAGER: (pianissimo) ... Because they're made of wood...?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0022 b/data/vim/patches/8.1.0022
new file mode 100644
index 000000000..ce8aff837
--- /dev/null
+++ b/data/vim/patches/8.1.0022
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0022
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0022
+Problem: Repeating put from expression register fails.
+Solution: Re-evaluate the expression register. (Andy Massimino,
+ closes #2945)
+Files: src/getchar.c, src/testdir/test_put.vim
+
+
+*** ../vim-8.1.0021/src/getchar.c 2018-05-22 20:35:13.554009274 +0200
+--- src/getchar.c 2018-05-23 21:46:55.680567676 +0200
+***************
+*** 844,849 ****
+--- 844,857 ----
+ if (c >= '1' && c < '9')
+ ++c;
+ add_char_buff(&readbuf2, c);
++
++ /* the expression register should be re-evaluated */
++ if (c == '=')
++ {
++ add_char_buff(&readbuf2, CAR);
++ cmd_silent = TRUE;
++ }
++
+ c = read_redo(FALSE, old_redo);
+ }
+
+*** ../vim-8.1.0021/src/testdir/test_put.vim 2017-06-27 15:22:24.000000000 +0200
+--- src/testdir/test_put.vim 2018-05-23 21:44:03.492595109 +0200
+***************
+*** 45,47 ****
+--- 45,60 ----
+ bw!
+ call setreg('a', a[0], a[1])
+ endfunc
++
++ func Test_put_expr()
++ new
++ call setline(1, repeat(['A'], 6))
++ exec "1norm! \"=line('.')\<cr>p"
++ norm! j0.
++ norm! j0.
++ exec "4norm! \"=\<cr>P"
++ norm! j0.
++ norm! j0.
++ call assert_equal(['A1','A2','A3','4A','5A','6A'], getline(1,'$'))
++ bw!
++ endfunc
+*** ../vim-8.1.0021/src/version.c 2018-05-23 20:30:52.738566360 +0200
+--- src/version.c 2018-05-23 21:45:38.776580863 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 22,
+ /**/
+
+--
+The word "leader" is derived from the word "lead", as in the material that
+bullets are made out of. The term "leader" was popularized at about the same
+time as the invention of firearms. It grew out of the observation that the
+person in charge of every organization was the person whom everyone wanted to
+fill with hot lead.
+ I don't recomment this; it's just a point of historical interest.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0023 b/data/vim/patches/8.1.0023
new file mode 100644
index 000000000..49fb6543d
--- /dev/null
+++ b/data/vim/patches/8.1.0023
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0023
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0023
+Problem: gcc 8.1 warns for use of strncpy(). (John Marriott)
+Solution: Use mch_memmove() instead of STRNCPY().
+Files: src/memline.c
+
+
+*** ../vim-8.1.0022/src/memline.c 2018-05-12 16:51:22.000000000 +0200
+--- src/memline.c 2018-05-26 17:30:46.805941698 +0200
+***************
+*** 344,350 ****
+ b0p->b0_magic_int = (int)B0_MAGIC_INT;
+ b0p->b0_magic_short = (short)B0_MAGIC_SHORT;
+ b0p->b0_magic_char = B0_MAGIC_CHAR;
+! STRNCPY(b0p->b0_version, "VIM ", 4);
+ STRNCPY(b0p->b0_version + 4, Version, 6);
+ long_to_char((long)mfp->mf_page_size, b0p->b0_page_size);
+
+--- 344,350 ----
+ b0p->b0_magic_int = (int)B0_MAGIC_INT;
+ b0p->b0_magic_short = (short)B0_MAGIC_SHORT;
+ b0p->b0_magic_char = B0_MAGIC_CHAR;
+! mch_memmove(b0p->b0_version, "VIM ", 4);
+ STRNCPY(b0p->b0_version + 4, Version, 6);
+ long_to_char((long)mfp->mf_page_size, b0p->b0_page_size);
+
+*** ../vim-8.1.0022/src/version.c 2018-05-23 21:53:48.356478969 +0200
+--- src/version.c 2018-05-26 17:32:05.633850332 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 23,
+ /**/
+
+--
+A salesperson says: Translation:
+"backward compatible" Old technology
+"Premium" Overpriced
+"Can't keep it on the shelf" Unavailable
+"Stands alone" Piece of shit
+"Proprietary" Incompatible
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0024 b/data/vim/patches/8.1.0024
new file mode 100644
index 000000000..eb0deec55
--- /dev/null
+++ b/data/vim/patches/8.1.0024
@@ -0,0 +1,105 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0024
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0024
+Problem: % command not testded on #ifdef and comment.
+Solution: Add tests. (Dominique Pelle, closes #2956)
+Files: src/testdir/test_goto.vim
+
+
+*** ../vim-8.1.0023/src/testdir/test_goto.vim 2017-04-20 18:35:04.000000000 +0200
+--- src/testdir/test_goto.vim 2018-05-26 18:36:54.076751185 +0200
+***************
+*** 309,311 ****
+--- 309,373 ----
+ \ ]
+ call XTest_goto_decl('1gd', lines, 11, 11)
+ endfunc
++
++ func Test_motion_if_elif_else_endif()
++ new
++ a
++ /* Test pressing % on #if, #else #elsif and #endif,
++ * with nested #if
++ */
++ #if FOO
++ /* ... */
++ # if BAR
++ /* ... */
++ # endif
++ #elif BAR
++ /* ... */
++ #else
++ /* ... */
++ #endif
++ .
++ /#if FOO
++ norm %
++ call assert_equal([9, 1], getpos('.')[1:2])
++ norm %
++ call assert_equal([11, 1], getpos('.')[1:2])
++ norm %
++ call assert_equal([13, 1], getpos('.')[1:2])
++ norm %
++ call assert_equal([4, 1], getpos('.')[1:2])
++ /# if BAR
++ norm $%
++ call assert_equal([8, 1], getpos('.')[1:2])
++ norm $%
++ call assert_equal([6, 1], getpos('.')[1:2])
++
++ bw!
++ endfunc
++
++ func Test_motion_c_comment()
++ new
++ a
++ /*
++ * Test pressing % on beginning/end
++ * of C comments.
++ */
++ /* Another comment */
++ .
++ norm gg0%
++ call assert_equal([4, 3], getpos('.')[1:2])
++ norm %
++ call assert_equal([1, 1], getpos('.')[1:2])
++ norm gg0l%
++ call assert_equal([4, 3], getpos('.')[1:2])
++ norm h%
++ call assert_equal([1, 1], getpos('.')[1:2])
++
++ norm G^
++ norm %
++ call assert_equal([5, 21], getpos('.')[1:2])
++ norm %
++ call assert_equal([5, 1], getpos('.')[1:2])
++
++ bw!
++ endfunc
+*** ../vim-8.1.0023/src/version.c 2018-05-26 17:35:19.717625256 +0200
+--- src/version.c 2018-05-26 18:37:48.024690943 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 24,
+ /**/
+
+--
+The fastest way to get an engineer to solve a problem is to declare that the
+problem is unsolvable. No engineer can walk away from an unsolvable problem
+until it's solved.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0025 b/data/vim/patches/8.1.0025
new file mode 100644
index 000000000..90c8657c1
--- /dev/null
+++ b/data/vim/patches/8.1.0025
@@ -0,0 +1,169 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0025
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0025
+Problem: No test for the undofile() function.
+Solution: Add test. (Dominique Pelle, closes #2958)
+Files: src/testdir/test_undo.vim
+
+
+*** ../vim-8.1.0024/src/testdir/test_undo.vim 2018-02-06 22:06:44.000000000 +0100
+--- src/testdir/test_undo.vim 2018-05-26 18:45:22.924163341 +0200
+***************
+*** 85,91 ****
+ func FillBuffer()
+ for i in range(1,13)
+ put=i
+! " Set 'undolevels' to split undo.
+ exe "setg ul=" . &g:ul
+ endfor
+ endfunc
+--- 85,91 ----
+ func FillBuffer()
+ for i in range(1,13)
+ put=i
+! " Set 'undolevels' to split undo.
+ exe "setg ul=" . &g:ul
+ endfor
+ endfunc
+***************
+*** 193,211 ****
+ new
+ set ul=100
+
+! let a=execute('undolist')
+ call assert_equal("\nNothing to undo", a)
+
+ " 1 leaf (2 changes).
+ call feedkeys('achange1', 'xt')
+ call feedkeys('achange2', 'xt')
+! let a=execute('undolist')
+ call assert_match("^\nnumber changes when *saved\n *2 *2 .*$", a)
+
+ " 2 leaves.
+ call feedkeys('u', 'xt')
+ call feedkeys('achange3\<Esc>', 'xt')
+! let a=execute('undolist')
+ call assert_match("^\nnumber changes when *saved\n *2 *2 *.*\n *3 *2 .*$", a)
+ close!
+ endfunc
+--- 193,211 ----
+ new
+ set ul=100
+
+! let a = execute('undolist')
+ call assert_equal("\nNothing to undo", a)
+
+ " 1 leaf (2 changes).
+ call feedkeys('achange1', 'xt')
+ call feedkeys('achange2', 'xt')
+! let a = execute('undolist')
+ call assert_match("^\nnumber changes when *saved\n *2 *2 .*$", a)
+
+ " 2 leaves.
+ call feedkeys('u', 'xt')
+ call feedkeys('achange3\<Esc>', 'xt')
+! let a = execute('undolist')
+ call assert_match("^\nnumber changes when *saved\n *2 *2 *.*\n *3 *2 .*$", a)
+ close!
+ endfunc
+***************
+*** 339,345 ****
+ " Also test this in an empty buffer.
+ func Test_cmd_in_reg_undo()
+ enew!
+! let @a="Ox\<Esc>jAy\<Esc>kdd"
+ edit +/^$ test_undo.vim
+ normal @au
+ call assert_equal(0, &modified)
+--- 339,345 ----
+ " Also test this in an empty buffer.
+ func Test_cmd_in_reg_undo()
+ enew!
+! let @a = "Ox\<Esc>jAy\<Esc>kdd"
+ edit +/^$ test_undo.vim
+ normal @au
+ call assert_equal(0, &modified)
+***************
+*** 348,354 ****
+ normal @au
+ call assert_equal(0, &modified)
+ only!
+! let @a=''
+ endfunc
+
+ " This used to cause an illegal memory access
+--- 348,354 ----
+ normal @au
+ call assert_equal(0, &modified)
+ only!
+! let @a = ''
+ endfunc
+
+ " This used to cause an illegal memory access
+***************
+*** 410,412 ****
+--- 410,444 ----
+ exe "norm."
+ bwipe!
+ endfunc
++
++ funct Test_undofile()
++ " Test undofile() without setting 'undodir'.
++ if has('persistent_undo')
++ call assert_equal(fnamemodify('.Xundofoo.un~', ':p'), undofile('Xundofoo'))
++ else
++ call assert_equal('', undofile('Xundofoo'))
++ endif
++ call assert_equal('', undofile(''))
++
++ " Test undofile() with 'undodir' set to to an existing directory.
++ call mkdir('Xundodir')
++ set undodir=Xundodir
++ let cwd = getcwd()
++ if has('win32')
++ " Replace windows drive such as C:... into C%...
++ let cwd = substitute(cwd, '^\([A-Z]\):', '\1%', 'g')
++ endif
++ let cwd = substitute(cwd . '/Xundofoo', '/', '%', 'g')
++ if has('persistent_undo')
++ call assert_equal('Xundodir/' . cwd, undofile('Xundofoo'))
++ else
++ call assert_equal('', undofile('Xundofoo'))
++ endif
++ call assert_equal('', undofile(''))
++ call delete('Xundodir', 'd')
++
++ " Test undofile() with 'undodir' set to a non-existing directory.
++ call assert_equal('', undofile('Xundofoo'))
++
++ set undodir&
++ endfunc
+*** ../vim-8.1.0024/src/version.c 2018-05-26 18:39:29.608575858 +0200
+--- src/version.c 2018-05-26 18:43:40.832284081 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 25,
+ /**/
+
+--
+Engineers are always delighted to share wisdom, even in areas in which they
+have no experience whatsoever. Their logic provides them with inherent
+insight into any field of expertise. This can be a problem when dealing with
+the illogical people who believe that knowledge can only be derived through
+experience.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0026 b/data/vim/patches/8.1.0026
new file mode 100644
index 000000000..c60ab888e
--- /dev/null
+++ b/data/vim/patches/8.1.0026
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0026
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0026
+Problem: Terminal test fails with very tall terminal. (Tom)
+Solution: Fix the terminal window size in the test.
+Files: src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0025/src/testdir/test_terminal.vim 2018-05-15 23:48:29.000000000 +0200
+--- src/testdir/test_terminal.vim 2018-05-25 21:32:34.698182317 +0200
+***************
+*** 270,276 ****
+ endfunc
+
+ func Test_terminal_scrollback()
+! let buf = Run_shell_in_terminal({})
+ set termwinscroll=100
+ call writefile(range(150), 'Xtext')
+ if has('win32')
+--- 270,276 ----
+ endfunc
+
+ func Test_terminal_scrollback()
+! let buf = Run_shell_in_terminal({'term_rows': 15})
+ set termwinscroll=100
+ call writefile(range(150), 'Xtext')
+ if has('win32')
+*** ../vim-8.1.0025/src/version.c 2018-05-26 18:46:26.276087941 +0200
+--- src/version.c 2018-05-26 18:57:54.230499767 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 26,
+ /**/
+
+--
+For humans, honesty is a matter of degree. Engineers are always honest in
+matters of technology and human relationships. That's why it's a good idea
+to keep engineers away from customers, romantic interests, and other people
+who can't handle the truth.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0027 b/data/vim/patches/8.1.0027
new file mode 100644
index 000000000..46f5fd11c
--- /dev/null
+++ b/data/vim/patches/8.1.0027
@@ -0,0 +1,1480 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0027
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0027
+Problem: Difficult to make a plugin that feeds a line to a job.
+Solution: Add the nitial code for the "prompt" buftype.
+Files: runtime/doc/channel.txt, runtime/doc/eval.txt,
+ runtime/doc/options.txt, runtime/doc/tags, runtime/doc/todo.txt,
+ src/Makefile, src/buffer.c, src/channel.c, src/diff.c, src/edit.c,
+ src/evalfunc.c, src/normal.c, src/ops.c, src/option.c,
+ src/proto/buffer.pro, src/proto/channel.pro, src/proto/edit.pro,
+ src/proto/ops.pro, src/structs.h, src/testdir/Make_all.mak,
+ src/testdir/screendump.vim, src/testdir/test_prompt_buffer.vim
+
+
+*** ../vim-8.1.0026/runtime/doc/channel.txt 2018-05-17 13:40:51.000000000 +0200
+--- runtime/doc/channel.txt 2018-06-03 14:00:04.714957909 +0200
+***************
+*** 22,27 ****
+--- 22,28 ----
+ 9. Starting a job without a channel |job-start-nochannel|
+ 10. Job options |job-options|
+ 11. Controlling a job |job-control|
++ 12. Using a prompt buffer |prompt-buffer|
+
+ {Vi does not have any of these features}
+ {only when compiled with the |+channel| feature for channel stuff}
+***************
+*** 770,774 ****
+--- 771,813 ----
+
+ For more options see |job_stop()|.
+
++ ==============================================================================
++ 12. Using a prompt buffer *prompt-buffer*
++
++ If you want to type input for the job in a Vim window you have a few options:
++ - Use a normal buffer and handle all possible commands yourself.
++ This will be complicated, since there are so many possible commands.
++ - Use a terminal window. This works well if what you type goes directly to
++ the job and the job output is directly displayed in the window.
++ See |terminal-window|.
++ - Use a prompt window. This works well when entering a line for the job in Vim
++ while displaying (possibly filtered) output from the job.
++
++ A prompt buffer is created by setting 'buftype' to "prompt". You would
++ normally only do that in a newly created buffer.
++
++ The user can edit and enter one line of text at the very last line of the
++ buffer. When pressing Enter in the prompt line the callback set with
++ |prompt_setcallback()| is invoked. It would normally send the line to a job.
++ Another callback would receive the output from the job and display it in the
++ buffer, below the prompt (and above the next prompt).
++
++ Only the text in the last line, after the prompt, is editable. The rest of the
++ buffer is not modifiable with Normal mode commands. It can be modified by
++ calling functions, such as |append()|. Using other commands may mess up the
++ buffer.
++
++ After setting 'buftype' to "prompt" Vim does not automatically start Insert
++ mode, use `:startinsert` if you want to enter Insert mode, so that the user
++ can start typing a line.
++
++ The text of the prompt can be set with the |prompt_setprompt()| function.
++
++ The user can go to Normal mode and navigate through the buffer. This can be
++ useful see older output or copy text.
++
++ Any command that starts Insert mode, such as "a", "i", "A" and "I", will move
++ the cursor to the last line, after the prompt.
++
+
+ vim:tw=78:ts=8:ft=help:norl:
+*** ../vim-8.1.0026/runtime/doc/eval.txt 2018-05-22 20:35:13.550009275 +0200
+--- runtime/doc/eval.txt 2018-06-03 14:00:04.722957906 +0200
+***************
+*** 2294,2299 ****
+--- 2294,2302 ----
+ pow({x}, {y}) Float {x} to the power of {y}
+ prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
+ printf({fmt}, {expr1}...) String format text
++ prompt_addtext({buf}, {expr}) none add text to a prompt buffer
++ prompt_setprompt({buf}, {text}) none set prompt text
++ prompt_setcallback({buf}, {expr}) none set prompt callback function
+ pumvisible() Number whether popup menu is visible
+ pyeval({expr}) any evaluate |Python| expression
+ py3eval({expr}) any evaluate |python3| expression
+***************
+*** 2302,2308 ****
+ List items from {expr} to {max}
+ readfile({fname} [, {binary} [, {max}]])
+ List get list of lines from file {fname}
+! reg_executing() Number get the executing register name
+ reg_recording() String get the recording register name
+ reltime([{start} [, {end}]]) List get time value
+ reltimefloat({time}) Float turn the time value into a Float
+--- 2305,2311 ----
+ List items from {expr} to {max}
+ readfile({fname} [, {binary} [, {max}]])
+ List get list of lines from file {fname}
+! reg_executing() String get the executing register name
+ reg_recording() String get the recording register name
+ reltime([{start} [, {end}]]) List get time value
+ reltimefloat({time}) Float turn the time value into a Float
+***************
+*** 4650,4656 ****
+ from the current buffer. Example: >
+ getline(1)
+ < When {lnum} is a String that doesn't start with a
+! digit, line() is called to translate the String into a Number.
+ To get the line under the cursor: >
+ getline(".")
+ < When {lnum} is smaller than 1 or bigger than the number of
+--- 4653,4659 ----
+ from the current buffer. Example: >
+ getline(1)
+ < When {lnum} is a String that doesn't start with a
+! digit, |line()| is called to translate the String into a Number.
+ To get the line under the cursor: >
+ getline(".")
+ < When {lnum} is smaller than 1 or bigger than the number of
+***************
+*** 5822,5828 ****
+ listing.
+
+ When there is no mapping for {name}, an empty String is
+! returned.
+
+ The {name} can have special key names, like in the ":map"
+ command.
+--- 5825,5832 ----
+ listing.
+
+ When there is no mapping for {name}, an empty String is
+! returned. When the mapping for {name} is empty, then "<Nop>"
+! is returned.
+
+ The {name} can have special key names, like in the ":map"
+ command.
+***************
+*** 5889,5897 ****
+ mapping that matches with {name}, while maparg() only finds a
+ mapping for {name} exactly.
+ When there is no mapping that starts with {name}, an empty
+! String is returned. If there is one, the rhs of that mapping
+ is returned. If there are several mappings that start with
+! {name}, the rhs of one of them is returned.
+ The mappings local to the current buffer are checked first,
+ then the global mappings.
+ This function can be used to check if a mapping can be added
+--- 5893,5902 ----
+ mapping that matches with {name}, while maparg() only finds a
+ mapping for {name} exactly.
+ When there is no mapping that starts with {name}, an empty
+! String is returned. If there is one, the RHS of that mapping
+ is returned. If there are several mappings that start with
+! {name}, the RHS of one of them is returned. This will be
+! "<Nop>" if the RHS is empty.
+ The mappings local to the current buffer are checked first,
+ then the global mappings.
+ This function can be used to check if a mapping can be added
+***************
+*** 6473,6478 ****
+--- 6478,6519 ----
+ arguments an error is given. Up to 18 arguments can be used.
+
+
++ prompt_setprompt({buf}, {text}) *prompt_setprompt()*
++ Set prompt for buffer {buf} to {text}. You most likely want
++ {text} to end in a space.
++ The result is only visible if {buf} has 'buftype' set to
++ "prompt". Example: >
++ call prompt_setprompt(bufnr(''), 'command: ')
++
++
++ prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
++ Set prompt callback for buffer {buf} to {expr}. This has only
++ effect if {buf} has 'buftype' set to "prompt".
++ The callback is invoked when pressing Enter. The current
++ buffer will always be the prompt buffer. A new line for a
++ prompt is added before invoking the callback, thus the prompt
++ for which the callback was invoked will be in the last but one
++ line.
++ If the callback wants to add text to the buffer, it must
++ insert it above the last line, since that is where the current
++ prompt is. This can also be done asynchronously.
++ The callback is invoked with one argument, which is the text
++ that was entered at the prompt. This can be an empty string
++ if the user only typed Enter.
++ Example: >
++ call prompt_setcallback(bufnr(''), function('s:TextEntered'))
++ func s:TextEntered(text)
++ if a:text == 'exit' || a:text == 'quit'
++ stopinsert
++ close
++ else
++ call append(line('$') - 1, 'Entered: "' . a:text . '"')
++ " Reset 'modified' to allow the buffer to be closed.
++ set nomodified
++ endif
++ endfunc
++
++
+ pumvisible() *pumvisible()*
+ Returns non-zero when the popup menu is visible, zero
+ otherwise. See |ins-completion-menu|.
+*** ../vim-8.1.0026/runtime/doc/options.txt 2018-05-17 13:41:41.000000000 +0200
+--- runtime/doc/options.txt 2018-06-03 14:00:04.726957904 +0200
+***************
+*** 1394,1399 ****
+--- 1394,1402 ----
+ manually)
+ terminal buffer for a |terminal| (you are not supposed to set
+ this manually)
++ prompt buffer where only the last line can be edited, meant
++ to be used by a plugin, see |prompt-buffer|
++ {only when compiled with the |+channel| feature}
+
+ This option is used together with 'bufhidden' and 'swapfile' to
+ specify special kinds of buffers. See |special-buffers|.
+***************
+*** 4264,4270 ****
+ 'imactivatefunc' 'imaf' string (default "")
+ global
+ {not in Vi}
+! {only available when compiled with |+mbyte|}
+ This option specifies a function that will be called to
+ activate or deactivate the Input Method.
+ It is not used in the GUI.
+--- 4267,4274 ----
+ 'imactivatefunc' 'imaf' string (default "")
+ global
+ {not in Vi}
+! {only available when compiled with the |+multi_byte|
+! feature}
+ This option specifies a function that will be called to
+ activate or deactivate the Input Method.
+ It is not used in the GUI.
+***************
+*** 4316,4322 ****
+ 'imcmdline' 'imc' boolean (default off)
+ global
+ {not in Vi}
+! {only available when compiled with |+mbyte|}
+ When set the Input Method is always on when starting to edit a command
+ line, unless entering a search pattern (see 'imsearch' for that).
+ Setting this option is useful when your input method allows entering
+--- 4320,4327 ----
+ 'imcmdline' 'imc' boolean (default off)
+ global
+ {not in Vi}
+! {only available when compiled with the |+multi_byte|
+! feature}
+ When set the Input Method is always on when starting to edit a command
+ line, unless entering a search pattern (see 'imsearch' for that).
+ Setting this option is useful when your input method allows entering
+***************
+*** 4327,4333 ****
+ 'imdisable' 'imd' boolean (default off, on for some systems (SGI))
+ global
+ {not in Vi}
+! {only available when compiled with |+mbyte|}
+ When set the Input Method is never used. This is useful to disable
+ the IM when it doesn't work properly.
+ Currently this option is on by default for SGI/IRIX machines. This
+--- 4332,4339 ----
+ 'imdisable' 'imd' boolean (default off, on for some systems (SGI))
+ global
+ {not in Vi}
+! {only available when compiled with the |+multi_byte|
+! feature}
+ When set the Input Method is never used. This is useful to disable
+ the IM when it doesn't work properly.
+ Currently this option is on by default for SGI/IRIX machines. This
+***************
+*** 4380,4386 ****
+ 'imstatusfunc' 'imsf' string (default "")
+ global
+ {not in Vi}
+! {only available when compiled with |+mbyte|}
+ This option specifies a function that is called to obtain the status
+ of Input Method. It must return a positive number when IME is active.
+ It is not used in the GUI.
+--- 4386,4393 ----
+ 'imstatusfunc' 'imsf' string (default "")
+ global
+ {not in Vi}
+! {only available when compiled with the |+multi_byte|
+! feature}
+ This option specifies a function that is called to obtain the status
+ of Input Method. It must return a positive number when IME is active.
+ It is not used in the GUI.
+***************
+*** 5187,5193 ****
+ more depth, set 'maxfuncdepth' to a bigger number. But this will use
+ more memory, there is the danger of failing when memory is exhausted.
+ Increasing this limit above 200 also changes the maximum for Ex
+! command resursion, see |E169|.
+ See also |:function|.
+
+ *'maxmapdepth'* *'mmd'* *E223*
+--- 5194,5200 ----
+ more depth, set 'maxfuncdepth' to a bigger number. But this will use
+ more memory, there is the danger of failing when memory is exhausted.
+ Increasing this limit above 200 also changes the maximum for Ex
+! command recursion, see |E169|.
+ See also |:function|.
+
+ *'maxmapdepth'* *'mmd'* *E223*
+*** ../vim-8.1.0026/runtime/doc/tags 2018-05-17 16:27:20.000000000 +0200
+--- runtime/doc/tags 2018-06-03 14:00:04.730957903 +0200
+***************
+*** 4749,4754 ****
+--- 4749,4755 ----
+ PHP_BracesAtCodeLevel indent.txt /*PHP_BracesAtCodeLevel*
+ PHP_autoformatcomment indent.txt /*PHP_autoformatcomment*
+ PHP_default_indenting indent.txt /*PHP_default_indenting*
++ PHP_noArrowMatching indent.txt /*PHP_noArrowMatching*
+ PHP_outdentSLComments indent.txt /*PHP_outdentSLComments*
+ PHP_outdentphpescape indent.txt /*PHP_outdentphpescape*
+ PHP_removeCRwhenUnix indent.txt /*PHP_removeCRwhenUnix*
+***************
+*** 8058,8063 ****
+--- 8059,8067 ----
+ progname-variable eval.txt /*progname-variable*
+ progpath-variable eval.txt /*progpath-variable*
+ progress.vim syntax.txt /*progress.vim*
++ prompt-buffer channel.txt /*prompt-buffer*
++ prompt_setcallback() eval.txt /*prompt_setcallback()*
++ prompt_setprompt() eval.txt /*prompt_setprompt()*
+ pronounce intro.txt /*pronounce*
+ psql ft_sql.txt /*psql*
+ ptcap.vim syntax.txt /*ptcap.vim*
+***************
+*** 8198,8203 ****
+--- 8202,8209 ----
+ ref intro.txt /*ref*
+ reference intro.txt /*reference*
+ reference_toc help.txt /*reference_toc*
++ reg_executing() eval.txt /*reg_executing()*
++ reg_recording() eval.txt /*reg_recording()*
+ regexp pattern.txt /*regexp*
+ regexp-changes-5.4 version5.txt /*regexp-changes-5.4*
+ register sponsor.txt /*register*
+*** ../vim-8.1.0026/runtime/doc/todo.txt 2018-05-17 13:42:03.000000000 +0200
+--- runtime/doc/todo.txt 2018-06-03 14:00:04.730957903 +0200
+***************
+*** 38,48 ****
+ *known-bugs*
+ -------------------- Known bugs and current work -----------------------
+
+ Terminal emulator window:
+! - Win32: Termdebug doesn't work, because gdb does not support mi2.
+! This plugin: https://github.com/cpiger/NeoDebug runs gdb as a job,
+! redirecting input and output.
+! Open new console for for program with: "set new-console on"
+ - Win32: Redirecting input does not work, half of Test_terminal_redir_file()
+ is disabled.
+ - Win32: Redirecting output works but includes escape sequences.
+--- 38,60 ----
+ *known-bugs*
+ -------------------- Known bugs and current work -----------------------
+
++ Prompt buffer:
++ - Add a command line history.
++ - delay next prompt until plugin gives OK?
++ end?
++
+ Terminal emulator window:
+! - With a vertical split only one window is updated. (Linwei, 2018 Jun 2,
+! #2977)
+! - When typing : at the more prompt, instead of entering a new Vim command, the
+! : is inserted in the terminal window. Should skip terminal_loop here.
+! ()
+! - How to access selection in Terminal running a shell? (damnskippy, 2018 May
+! 27, #29620 When terminal doesn't use the mouse, use modeless selection.
+! - Win32: Termdebug doesn't work, because gdb does not support mi2 on a tty.
+! This plugin: https://github.com/cpiger/NeoDebug runs gdb as a job,
+! redirecting input and output.
+! Open new console for for program with: "set new-console on"
+ - Win32: Redirecting input does not work, half of Test_terminal_redir_file()
+ is disabled.
+ - Win32: Redirecting output works but includes escape sequences.
+***************
+*** 60,66 ****
+ after "run". Everything else works, including communication channel. Not
+ initializing mzscheme avoid the problem, thus it's not some #ifdef.
+
+! Patch to refactor efm_to_regpat(). (Yegappan Lakshmanan, 2018 May 16, #2924)
+
+ Crash when mixing matchadd and substitute()? (Max Christian Pohle, 2018 May
+ 13, #2910) Can't reproduce?
+--- 73,83 ----
+ after "run". Everything else works, including communication channel. Not
+ initializing mzscheme avoid the problem, thus it's not some #ifdef.
+
+! Patch to fix that ++bad no longer works. (Christian Brabandt, on #2947)
+!
+! Does not build with MinGW out of the box:
+! - _stat64 is not defined, need to use "struct stat" in vim.h
+! - WINVER conflict, should use 0x0600 by default?
+
+ Crash when mixing matchadd and substitute()? (Max Christian Pohle, 2018 May
+ 13, #2910) Can't reproduce?
+***************
+*** 68,76 ****
+ On Win32 when not in the console and t_Co >= 256, allow using 'tgc'.
+ (Nobuhiro Takasaki, #2833) Also check t_Co.
+
+! balloon_show() does not work properly in the terminal. (Ben Jackson, 2017 Dec
+! 20, #2481)
+! Also see #2352, want better control over balloon, perhaps set the position.
+
+ Errors found with random data:
+ heap-buffer-overflow in alist_add (#2472)
+--- 85,99 ----
+ On Win32 when not in the console and t_Co >= 256, allow using 'tgc'.
+ (Nobuhiro Takasaki, #2833) Also check t_Co.
+
+! Patch to fix arguments of :edit. (Dominique Pelle, 2018 May 28 #2966)
+!
+! Ptch to update html syntax. (Jorge Maldonado Ventura, #2974)
+!
+! Patch to fix that restoring window doesn't work when 'winheight' is large.
+! (Darrell Nash, 2018 May 30, #2971) Doesn't work? Issue #2970
+!
+! Patch to add completion to :unlet for environment vars. (Jason Franklin, 2018
+! May 30) Last update.
+
+ Errors found with random data:
+ heap-buffer-overflow in alist_add (#2472)
+***************
+*** 78,83 ****
+--- 101,122 ----
+ More warnings from static analysis:
+ https://lgtm.com/projects/g/vim/vim/alerts/?mode=list
+
++ Patch to make "is" and "as" work bettter. (Jason Franklin, 2018 May 19)
++
++ Patch to add tests for user and language completion. (Dominique Pelle, 2018
++ Jun 2, #2978)
++
++ Using ":file" in quickfix window during an autocommand doesn't work.
++ (Jason Franklin, 2018 May 23) Allow for using it when there is no argument.
++
++ Pull request #2967: Allow white space in sign text. (Ben Jackson)
++
++ Patch for xterm and vt320 builtin termcap. (Kouichi Iwamoto, 2018 May 31,
++ #2973)
++
++ Patch to add more testing for :cd command. (Dominique Pelle, 2018 May 30,
++ #2972)
++
+ Script generated by :mksession does not work well if there are windows with
+ modified buffers
+ change "silent only" into "silent only!"
+***************
+*** 85,100 ****
+--- 124,150 ----
+ skip "badd fname" if "fname" is already in the buffer list
+ remove remark about unloading buffers from documentation
+
++ Patch to make :help work for tags with a ?. (Hirohito Higashi, 2018 May 28)
++
+ Compiler warnings (geeknik, 2017 Oct 26):
+ - signed integer overflow in do_sub() (#2249)
+ - signed integer overflow in get_address() (#2248)
+ - signed integer overflow in getdecchrs() (#2254)
+ - undefined left shift in get_string_tv() (#2250)
+
++ Patch for more quickfix refactoring. (Yegappan Lakshmanan, #2950)
++
+ Tests failing for "make testgui" with GTK:
+ - Test_setbufvar_options()
+ - Test_exit_callback_interval()
+
++ Make balloon_show() work outside of 'balloonexpr'? Users expect it to work:
++ #2948. (related to #1512?)
++ On Win32 it stops showing, because showState is already ShS_SHOWING.
++ balloon_show() does not work properly in the terminal. (Ben Jackson, 2017 Dec
++ 20, #2481)
++ Also see #2352, want better control over balloon, perhaps set the position.
++
+ Try out background make plugin:
+ https://github.com/AndrewVos/vim-make-background
+ or asyncmake:
+***************
+*** 109,114 ****
+--- 159,166 ----
+
+ Cursor in wrong position when line wraps. (#2540)
+
++ Patch for Lua support. (Kazunobu Kuriyama, 2018 May 26)
++
+ Add an option similar to 'lazyredraw' to skip redrawing while executing a
+ script or function.
+
+***************
+*** 120,130 ****
+ Should add a test for every command line argument. Check coverage for what is
+ missing: --nofork, -A , -b, -h, etc.
+
+! Completing a command sometimes results in duplicates, since 7.4.672.
+! (Yegappan Lakshmanan, 2018 May 16)
+! Duplication of completion suggestions for ":!hom". Issue #539.
+! Patch by Christian, 2016 Jan 29
+! Another patch in #2733.
+
+ Improve the installer for MS-Windows. There are a few alternatives:
+ - Add silent install option. (Shane Lee, #751)
+--- 172,179 ----
+ Should add a test for every command line argument. Check coverage for what is
+ missing: --nofork, -A , -b, -h, etc.
+
+! Patch for variable tabstops. On github (Christian Brabandt, 2014 May 15)
+! Update 2018 March 12, #2711
+
+ Improve the installer for MS-Windows. There are a few alternatives:
+ - Add silent install option. (Shane Lee, #751)
+***************
+*** 141,146 ****
+--- 190,198 ----
+
+ Alternative manpager.vim. (Enno, 2018 Jan 5, #2529)
+
++ Patch to use NGETTEXT() in many more places. (Sergey Alyoshin, 2018 May 25)
++ Updated ptach May 27.
++
+ Does setting 'cursorline' cause syntax highlighting to slow down? Perhaps is
+ mess up the cache? (Mike Lee Williams, 2018 Jan 27, #2539)
+ Also: 'foldtext' is evaluated too often. (Daniel Hahler, #2773)
+***************
+*** 149,154 ****
+--- 201,207 ----
+ with packages under "start". (xtal8, #1994)
+
+ Patch to support "xxd -ps". (Erik Auerswald, 2018 May 1)
++ Lacks a test.
+
+ Column number is wrong when using 'linebreak' and 'wrap'. (Keith Smiley, 2018
+ Jan 15, #2555)
+***************
+*** 157,164 ****
+
+ Check argument of systemlist(). (Pavlov)
+
+- Patch to add reg_executing() and reg_recording(). (Hirohito Higashi, #2745)
+-
+ No maintainer for Vietnamese translations.
+ No maintainer for Simplified Chinese translations.
+
+--- 210,215 ----
+***************
+*** 1181,1189 ****
+ Patch: On MS-Windows shellescape() may have to triple double quotes.
+ (Ingo Karkat, 2015 Jan 16)
+
+- Patch for variable tabstops. On github (Christian Brabandt, 2014 May 15)
+- Update 2018 March 12, #2711
+-
+ Redo only remembers the last change. Could use "{count}g." to redo an older
+ change. How does the user know which change? At least have a way to list
+ them: ":repeats".
+--- 1232,1237 ----
+*** ../vim-8.1.0026/src/Makefile 2018-05-19 15:00:48.841017887 +0200
+--- src/Makefile 2018-06-03 14:10:39.298297816 +0200
+***************
+*** 2252,2257 ****
+--- 2252,2258 ----
+ test_popup \
+ test_preview \
+ test_profile \
++ test_prompt_buffer \
+ test_put \
+ test_python2 \
+ test_python3 \
+*** ../vim-8.1.0026/src/buffer.c 2018-05-13 18:00:51.000000000 +0200
+--- src/buffer.c 2018-06-03 14:00:04.730957903 +0200
+***************
+*** 851,856 ****
+--- 851,860 ----
+ #ifdef FEAT_TERMINAL
+ free_terminal(buf);
+ #endif
++ #ifdef FEAT_JOB_CHANNEL
++ vim_free(buf->b_prompt_text);
++ free_callback(buf->b_prompt_callback, buf->b_prompt_partial);
++ #endif
+
+ buf_hashtab_remove(buf);
+
+***************
+*** 5634,5639 ****
+--- 5638,5652 ----
+ }
+
+ /*
++ * Return TRUE if "buf" is a prompt buffer.
++ */
++ int
++ bt_prompt(buf_T *buf)
++ {
++ return buf != NULL && buf->b_p_bt[0] == 'p';
++ }
++
++ /*
+ * Return TRUE if "buf" is a "nofile", "acwrite" or "terminal" buffer.
+ * This means the buffer name is not a file name.
+ */
+***************
+*** 5642,5648 ****
+ {
+ return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+ || buf->b_p_bt[0] == 'a'
+! || buf->b_p_bt[0] == 't');
+ }
+
+ /*
+--- 5655,5662 ----
+ {
+ return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+ || buf->b_p_bt[0] == 'a'
+! || buf->b_p_bt[0] == 't'
+! || buf->b_p_bt[0] == 'p');
+ }
+
+ /*
+***************
+*** 5651,5657 ****
+ int
+ bt_dontwrite(buf_T *buf)
+ {
+! return buf != NULL && (buf->b_p_bt[0] == 'n' || buf->b_p_bt[0] == 't');
+ }
+
+ int
+--- 5665,5673 ----
+ int
+ bt_dontwrite(buf_T *buf)
+ {
+! return buf != NULL && (buf->b_p_bt[0] == 'n'
+! || buf->b_p_bt[0] == 't'
+! || buf->b_p_bt[0] == 'p');
+ }
+
+ int
+*** ../vim-8.1.0026/src/channel.c 2018-05-13 14:00:48.000000000 +0200
+--- src/channel.c 2018-06-03 14:21:30.877730377 +0200
+***************
+*** 5836,5839 ****
+--- 5836,5873 ----
+ return 1;
+ }
+
++ void
++ invoke_prompt_callback(void)
++ {
++ typval_T rettv;
++ int dummy;
++ typval_T argv[2];
++ char_u *text;
++ char_u *prompt;
++ linenr_T lnum = curbuf->b_ml.ml_line_count;
++
++ // Add a new line for the prompt before invoking the callback, so that
++ // text can always be inserted above the last line.
++ ml_append(lnum, (char_u *)"", 0, FALSE);
++ curwin->w_cursor.lnum = lnum + 1;
++ curwin->w_cursor.col = 0;
++
++ if (curbuf->b_prompt_callback == NULL)
++ return;
++ text = ml_get(lnum);
++ prompt = prompt_text();
++ if (STRLEN(text) >= STRLEN(prompt))
++ text += STRLEN(prompt);
++ argv[0].v_type = VAR_STRING;
++ argv[0].vval.v_string = vim_strsave(text);
++ argv[1].v_type = VAR_UNKNOWN;
++
++ call_func(curbuf->b_prompt_callback,
++ (int)STRLEN(curbuf->b_prompt_callback),
++ &rettv, 1, argv, NULL, 0L, 0L, &dummy, TRUE,
++ curbuf->b_prompt_partial, NULL);
++ clear_tv(&argv[0]);
++ clear_tv(&rettv);
++ }
++
+ #endif /* FEAT_JOB_CHANNEL */
+*** ../vim-8.1.0026/src/diff.c 2018-04-29 12:16:29.000000000 +0200
+--- src/diff.c 2018-06-03 14:00:04.730957903 +0200
+***************
+*** 2141,2146 ****
+--- 2141,2153 ----
+ exarg_T ea;
+ char_u buf[30];
+
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf))
++ {
++ vim_beep(BO_OPER);
++ return;
++ }
++ #endif
+ if (count == 0)
+ ea.arg = (char_u *)"";
+ else
+*** ../vim-8.1.0026/src/edit.c 2018-05-22 20:35:13.562009272 +0200
+--- src/edit.c 2018-06-03 14:25:28.549560429 +0200
+***************
+*** 203,208 ****
+--- 203,211 ----
+
+ static void ins_redraw(int ready);
+ static void ins_ctrl_v(void);
++ #ifdef FEAT_JOB_CHANNEL
++ static void init_prompt(int cmdchar_todo);
++ #endif
+ static void undisplay_dollar(void);
+ static void insert_special(int, int, int);
+ static void internal_format(int textwidth, int second_indent, int flags, int format_only, int c);
+***************
+*** 351,356 ****
+--- 354,362 ----
+ int inserted_space = FALSE; /* just inserted a space */
+ int replaceState = REPLACE;
+ int nomove = FALSE; /* don't move cursor on return */
++ #ifdef FEAT_JOB_CHANNEL
++ int cmdchar_todo = cmdchar;
++ #endif
+
+ /* Remember whether editing was restarted after CTRL-O. */
+ did_restart_edit = restart_edit;
+***************
+*** 707,712 ****
+--- 713,726 ----
+ foldCheckClose();
+ #endif
+
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf))
++ {
++ init_prompt(cmdchar_todo);
++ cmdchar_todo = NUL;
++ }
++ #endif
++
+ /*
+ * If we inserted a character at the last position of the last line in
+ * the window, scroll the window one line up. This avoids an extra
+***************
+*** 1374,1379 ****
+--- 1388,1405 ----
+ goto doESCkey;
+ }
+ #endif
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf))
++ {
++ buf_T *buf = curbuf;
++
++ invoke_prompt_callback();
++ if (curbuf != buf)
++ // buffer changed, get out of Insert mode
++ goto doESCkey;
++ break;
++ }
++ #endif
+ if (ins_eol(c) == FAIL && !p_im)
+ goto doESCkey; /* out of memory */
+ auto_format(FALSE, FALSE);
+***************
+*** 1808,1813 ****
+--- 1834,1891 ----
+ }
+ }
+
++ #if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
++ /*
++ * Return the effective prompt for the current buffer.
++ */
++ char_u *
++ prompt_text(void)
++ {
++ if (curbuf->b_prompt_text == NULL)
++ return (char_u *)"% ";
++ return curbuf->b_prompt_text;
++ }
++
++ /*
++ * Prepare for prompt mode: Make sure the last line has the prompt text.
++ * Move the cursor to this line.
++ */
++ static void
++ init_prompt(int cmdchar_todo)
++ {
++ char_u *prompt = prompt_text();
++ char_u *text;
++
++ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
++ text = ml_get_curline();
++ if (STRNCMP(text, prompt, STRLEN(prompt)) != 0)
++ {
++ // prompt is missing, insert it or append a line with it
++ if (*text == NUL)
++ ml_replace(curbuf->b_ml.ml_line_count, prompt, TRUE);
++ else
++ ml_append(curbuf->b_ml.ml_line_count, prompt, 0, FALSE);
++ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
++ coladvance((colnr_T)MAXCOL);
++ changed_bytes(curbuf->b_ml.ml_line_count, 0);
++ }
++ if (cmdchar_todo == 'A')
++ coladvance((colnr_T)MAXCOL);
++ if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt))
++ curwin->w_cursor.col = STRLEN(prompt);
++ }
++
++ /*
++ * Return TRUE if the cursor is in the editable position of the prompt line.
++ */
++ int
++ prompt_curpos_editable()
++ {
++ return curwin->w_cursor.lnum == curbuf->b_ml.ml_line_count
++ && curwin->w_cursor.col >= (int)STRLEN(prompt_text());
++ }
++ #endif
++
+ /*
+ * Undo the previous edit_putchar().
+ */
+*** ../vim-8.1.0026/src/evalfunc.c 2018-05-22 20:35:13.554009274 +0200
+--- src/evalfunc.c 2018-06-03 14:06:18.146613314 +0200
+***************
+*** 294,299 ****
+--- 294,303 ----
+ #endif
+ static void f_prevnonblank(typval_T *argvars, typval_T *rettv);
+ static void f_printf(typval_T *argvars, typval_T *rettv);
++ #ifdef FEAT_JOB_CHANNEL
++ static void f_prompt_setcallback(typval_T *argvars, typval_T *rettv);
++ static void f_prompt_setprompt(typval_T *argvars, typval_T *rettv);
++ #endif
+ static void f_pumvisible(typval_T *argvars, typval_T *rettv);
+ #ifdef FEAT_PYTHON3
+ static void f_py3eval(typval_T *argvars, typval_T *rettv);
+***************
+*** 744,749 ****
+--- 748,757 ----
+ #endif
+ {"prevnonblank", 1, 1, f_prevnonblank},
+ {"printf", 1, 19, f_printf},
++ #ifdef FEAT_JOB_CHANNEL
++ {"prompt_setcallback", 2, 2, f_prompt_setcallback},
++ {"prompt_setprompt", 2, 2, f_prompt_setprompt},
++ #endif
+ {"pumvisible", 0, 0, f_pumvisible},
+ #ifdef FEAT_PYTHON3
+ {"py3eval", 1, 1, f_py3eval},
+***************
+*** 1240,1245 ****
+--- 1248,1258 ----
+ appended_lines_mark(lnum, added);
+ if (curwin->w_cursor.lnum > lnum)
+ curwin->w_cursor.lnum += added;
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf) && (State & INSERT))
++ // show the line with the prompt
++ update_topline();
++ #endif
+ }
+ else
+ rettv->vval.v_number = 1; /* Failed */
+***************
+*** 8379,8384 ****
+--- 8392,8448 ----
+ did_emsg |= saved_did_emsg;
+ }
+
++ #ifdef FEAT_JOB_CHANNEL
++ /*
++ * "prompt_setcallback({buffer}, {callback})" function
++ */
++ static void
++ f_prompt_setcallback(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ buf_T *buf;
++ char_u *callback;
++ partial_T *partial;
++
++ if (check_secure())
++ return;
++ buf = get_buf_tv(&argvars[0], FALSE);
++ if (buf == NULL)
++ return;
++
++ callback = get_callback(&argvars[1], &partial);
++ if (callback == NULL)
++ return;
++
++ free_callback(buf->b_prompt_callback, buf->b_prompt_partial);
++ if (partial == NULL)
++ buf->b_prompt_callback = vim_strsave(callback);
++ else
++ /* pointer into the partial */
++ buf->b_prompt_callback = callback;
++ buf->b_prompt_partial = partial;
++ }
++
++ /*
++ * "prompt_setprompt({buffer}, {text})" function
++ */
++ static void
++ f_prompt_setprompt(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ buf_T *buf;
++ char_u *text;
++
++ if (check_secure())
++ return;
++ buf = get_buf_tv(&argvars[0], FALSE);
++ if (buf == NULL)
++ return;
++
++ text = get_tv_string(&argvars[1]);
++ vim_free(buf->b_prompt_text);
++ buf->b_prompt_text = vim_strsave(text);
++ }
++ #endif
++
+ /*
+ * "pumvisible()" function
+ */
+*** ../vim-8.1.0026/src/normal.c 2018-05-22 20:35:13.558009273 +0200
+--- src/normal.c 2018-06-03 14:00:04.734957901 +0200
+***************
+*** 4180,4185 ****
+--- 4180,4190 ----
+ static void
+ nv_addsub(cmdarg_T *cap)
+ {
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf) && !prompt_curpos_editable())
++ clearopbeep(cap->oap);
++ else
++ #endif
+ if (!VIsual_active && cap->oap->op_type == OP_NOP)
+ {
+ prep_redo_cmd(cap);
+***************
+*** 6214,6219 ****
+--- 6219,6235 ----
+ cmdwin_result = CAR;
+ else
+ #endif
++ #ifdef FEAT_JOB_CHANNEL
++ /* In a prompt buffer a <CR> in the last line invokes the callback. */
++ if (bt_prompt(curbuf) && cap->cmdchar == CAR
++ && curwin->w_cursor.lnum == curbuf->b_ml.ml_line_count)
++ {
++ invoke_prompt_callback();
++ if (restart_edit == 0)
++ restart_edit = 'a';
++ }
++ else
++ #endif
+ {
+ cap->oap->motion_type = MLINE;
+ if (cursor_down(cap->count1, cap->oap->op_type == OP_NOP) == FAIL)
+***************
+*** 6972,6977 ****
+--- 6988,7000 ----
+ {
+ if (!checkclearopq(cap->oap))
+ {
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf))
++ {
++ clearopbeep(cap->oap);
++ return;
++ }
++ #endif
+ u_undo((int)cap->count1);
+ curwin->w_set_curswant = TRUE;
+ }
+***************
+*** 6989,6994 ****
+--- 7012,7024 ----
+
+ if (checkclearop(cap->oap))
+ return;
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf) && !prompt_curpos_editable())
++ {
++ clearopbeep(cap->oap);
++ return;
++ }
++ #endif
+
+ /* get another character */
+ if (cap->nchar == Ctrl_V)
+***************
+*** 7465,7470 ****
+--- 7495,7507 ----
+ if (term_swap_diff() == OK)
+ return;
+ #endif
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf) && !prompt_curpos_editable())
++ {
++ clearopbeep(cap->oap);
++ return;
++ }
++ #endif
+ if (VIsual_active) /* "vs" and "vS" are the same as "vc" */
+ {
+ if (cap->cmdchar == 'S')
+***************
+*** 8570,8576 ****
+--- 8607,8622 ----
+ nv_tilde(cmdarg_T *cap)
+ {
+ if (!p_to && !VIsual_active && cap->oap->op_type != OP_TILDE)
++ {
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf) && !prompt_curpos_editable())
++ {
++ clearopbeep(cap->oap);
++ return;
++ }
++ #endif
+ n_swapchar(cap);
++ }
+ else
+ nv_operator(cap);
+ }
+***************
+*** 8585,8590 ****
+--- 8631,8643 ----
+ int op_type;
+
+ op_type = get_op_type(cap->cmdchar, cap->nchar);
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf) && op_is_change(op_type) && !prompt_curpos_editable())
++ {
++ clearopbeep(cap->oap);
++ return;
++ }
++ #endif
+
+ if (op_type == cap->oap->op_type) /* double operator works on lines */
+ nv_lineop(cap);
+***************
+*** 9426,9431 ****
+--- 9479,9490 ----
+ #endif
+ clearopbeep(cap->oap);
+ }
++ #ifdef FEAT_JOB_CHANNEL
++ else if (bt_prompt(curbuf) && !prompt_curpos_editable())
++ {
++ clearopbeep(cap->oap);
++ }
++ #endif
+ else
+ {
+ dir = (cap->cmdchar == 'P'
+***************
+*** 9551,9556 ****
+--- 9610,9621 ----
+ #endif
+ if (VIsual_active) /* switch start and end of visual */
+ v_swap_corners(cap->cmdchar);
++ #ifdef FEAT_JOB_CHANNEL
++ else if (bt_prompt(curbuf))
++ {
++ clearopbeep(cap->oap);
++ }
++ #endif
+ else
+ n_opencmd(cap);
+ }
+*** ../vim-8.1.0026/src/ops.c 2018-05-22 20:35:13.558009273 +0200
+--- src/ops.c 2018-06-03 14:00:04.734957901 +0200
+***************
+*** 126,168 ****
+ static int fmt_check_par(linenr_T);
+ #endif
+
+ /*
+ * The names of operators.
+ * IMPORTANT: Index must correspond with defines in vim.h!!!
+! * The third field indicates whether the operator always works on lines.
+ */
+ static char opchars[][3] =
+ {
+! {NUL, NUL, FALSE}, /* OP_NOP */
+! {'d', NUL, FALSE}, /* OP_DELETE */
+! {'y', NUL, FALSE}, /* OP_YANK */
+! {'c', NUL, FALSE}, /* OP_CHANGE */
+! {'<', NUL, TRUE}, /* OP_LSHIFT */
+! {'>', NUL, TRUE}, /* OP_RSHIFT */
+! {'!', NUL, TRUE}, /* OP_FILTER */
+! {'g', '~', FALSE}, /* OP_TILDE */
+! {'=', NUL, TRUE}, /* OP_INDENT */
+! {'g', 'q', TRUE}, /* OP_FORMAT */
+! {':', NUL, TRUE}, /* OP_COLON */
+! {'g', 'U', FALSE}, /* OP_UPPER */
+! {'g', 'u', FALSE}, /* OP_LOWER */
+! {'J', NUL, TRUE}, /* DO_JOIN */
+! {'g', 'J', TRUE}, /* DO_JOIN_NS */
+! {'g', '?', FALSE}, /* OP_ROT13 */
+! {'r', NUL, FALSE}, /* OP_REPLACE */
+! {'I', NUL, FALSE}, /* OP_INSERT */
+! {'A', NUL, FALSE}, /* OP_APPEND */
+! {'z', 'f', TRUE}, /* OP_FOLD */
+! {'z', 'o', TRUE}, /* OP_FOLDOPEN */
+! {'z', 'O', TRUE}, /* OP_FOLDOPENREC */
+! {'z', 'c', TRUE}, /* OP_FOLDCLOSE */
+! {'z', 'C', TRUE}, /* OP_FOLDCLOSEREC */
+! {'z', 'd', TRUE}, /* OP_FOLDDEL */
+! {'z', 'D', TRUE}, /* OP_FOLDDELREC */
+! {'g', 'w', TRUE}, /* OP_FORMAT2 */
+! {'g', '@', FALSE}, /* OP_FUNCTION */
+! {Ctrl_A, NUL, FALSE}, /* OP_NR_ADD */
+! {Ctrl_X, NUL, FALSE}, /* OP_NR_SUB */
+ };
+
+ /*
+--- 126,172 ----
+ static int fmt_check_par(linenr_T);
+ #endif
+
++ // Flags for third item in "opchars".
++ #define OPF_LINES 1 // operator always works on lines
++ #define OPF_CHANGE 2 // operator changes text
++
+ /*
+ * The names of operators.
+ * IMPORTANT: Index must correspond with defines in vim.h!!!
+! * The third field holds OPF_ flags.
+ */
+ static char opchars[][3] =
+ {
+! {NUL, NUL, 0}, // OP_NOP
+! {'d', NUL, OPF_CHANGE}, // OP_DELETE
+! {'y', NUL, 0}, // OP_YANK
+! {'c', NUL, OPF_CHANGE}, // OP_CHANGE
+! {'<', NUL, OPF_LINES | OPF_CHANGE}, // OP_LSHIFT
+! {'>', NUL, OPF_LINES | OPF_CHANGE}, // OP_RSHIFT
+! {'!', NUL, OPF_LINES | OPF_CHANGE}, // OP_FILTER
+! {'g', '~', OPF_CHANGE}, // OP_TILDE
+! {'=', NUL, OPF_LINES | OPF_CHANGE}, // OP_INDENT
+! {'g', 'q', OPF_LINES | OPF_CHANGE}, // OP_FORMAT
+! {':', NUL, OPF_LINES}, // OP_COLON
+! {'g', 'U', OPF_CHANGE}, // OP_UPPER
+! {'g', 'u', OPF_CHANGE}, // OP_LOWER
+! {'J', NUL, OPF_LINES | OPF_CHANGE}, // DO_JOIN
+! {'g', 'J', OPF_LINES | OPF_CHANGE}, // DO_JOIN_NS
+! {'g', '?', OPF_CHANGE}, // OP_ROT13
+! {'r', NUL, OPF_CHANGE}, // OP_REPLACE
+! {'I', NUL, OPF_CHANGE}, // OP_INSERT
+! {'A', NUL, OPF_CHANGE}, // OP_APPEND
+! {'z', 'f', OPF_LINES}, // OP_FOLD
+! {'z', 'o', OPF_LINES}, // OP_FOLDOPEN
+! {'z', 'O', OPF_LINES}, // OP_FOLDOPENREC
+! {'z', 'c', OPF_LINES}, // OP_FOLDCLOSE
+! {'z', 'C', OPF_LINES}, // OP_FOLDCLOSEREC
+! {'z', 'd', OPF_LINES}, // OP_FOLDDEL
+! {'z', 'D', OPF_LINES}, // OP_FOLDDELREC
+! {'g', 'w', OPF_LINES | OPF_CHANGE}, // OP_FORMAT2
+! {'g', '@', OPF_CHANGE}, // OP_FUNCTION
+! {Ctrl_A, NUL, OPF_CHANGE}, // OP_NR_ADD
+! {Ctrl_X, NUL, OPF_CHANGE}, // OP_NR_SUB
+ };
+
+ /*
+***************
+*** 201,207 ****
+ int
+ op_on_lines(int op)
+ {
+! return opchars[op][2];
+ }
+
+ /*
+--- 205,220 ----
+ int
+ op_on_lines(int op)
+ {
+! return opchars[op][2] & OPF_LINES;
+! }
+!
+! /*
+! * Return TRUE if operator "op" changes text.
+! */
+! int
+! op_is_change(int op)
+! {
+! return opchars[op][2] & OPF_CHANGE;
+ }
+
+ /*
+*** ../vim-8.1.0026/src/option.c 2018-05-05 16:27:58.000000000 +0200
+--- src/option.c 2018-06-03 14:00:04.738957899 +0200
+***************
+*** 3229,3235 ****
+ static char *(p_scbopt_values[]) = {"ver", "hor", "jump", NULL};
+ static char *(p_debug_values[]) = {"msg", "throw", "beep", NULL};
+ static char *(p_ead_values[]) = {"both", "ver", "hor", NULL};
+! static char *(p_buftype_values[]) = {"nofile", "nowrite", "quickfix", "help", "terminal", "acwrite", NULL};
+ static char *(p_bufhidden_values[]) = {"hide", "unload", "delete", "wipe", NULL};
+ static char *(p_bs_values[]) = {"indent", "eol", "start", NULL};
+ #ifdef FEAT_FOLDING
+--- 3229,3235 ----
+ static char *(p_scbopt_values[]) = {"ver", "hor", "jump", NULL};
+ static char *(p_debug_values[]) = {"msg", "throw", "beep", NULL};
+ static char *(p_ead_values[]) = {"both", "ver", "hor", NULL};
+! static char *(p_buftype_values[]) = {"nofile", "nowrite", "quickfix", "help", "terminal", "acwrite", "prompt", NULL};
+ static char *(p_bufhidden_values[]) = {"hide", "unload", "delete", "wipe", NULL};
+ static char *(p_bs_values[]) = {"indent", "eol", "start", NULL};
+ #ifdef FEAT_FOLDING
+*** ../vim-8.1.0026/src/proto/buffer.pro 2018-05-17 13:52:29.000000000 +0200
+--- src/proto/buffer.pro 2018-06-03 14:00:04.738957899 +0200
+***************
+*** 59,64 ****
+--- 59,65 ----
+ int bt_quickfix(buf_T *buf);
+ int bt_terminal(buf_T *buf);
+ int bt_help(buf_T *buf);
++ int bt_prompt(buf_T *buf);
+ int bt_nofile(buf_T *buf);
+ int bt_dontwrite(buf_T *buf);
+ int bt_dontwrite_msg(buf_T *buf);
+*** ../vim-8.1.0026/src/proto/channel.pro 2018-05-17 13:52:58.000000000 +0200
+--- src/proto/channel.pro 2018-06-03 14:00:04.738957899 +0200
+***************
+*** 71,74 ****
+--- 71,75 ----
+ void job_info(job_T *job, dict_T *dict);
+ void job_info_all(list_T *l);
+ int job_stop(job_T *job, typval_T *argvars, char *type);
++ void invoke_prompt_callback(void);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0026/src/proto/edit.pro 2018-05-17 13:52:32.000000000 +0200
+--- src/proto/edit.pro 2018-06-03 14:22:02.357707185 +0200
+***************
+*** 1,6 ****
+--- 1,8 ----
+ /* edit.c */
+ int edit(int cmdchar, int startln, long count);
+ void edit_putchar(int c, int highlight);
++ char_u *prompt_text(void);
++ int prompt_curpos_editable(void);
+ void edit_unputchar(void);
+ void display_dollar(colnr_T col);
+ void change_indent(int type, int amount, int round, int replaced, int call_changed_bytes);
+*** ../vim-8.1.0026/src/proto/ops.pro 2018-05-17 13:52:47.000000000 +0200
+--- src/proto/ops.pro 2018-06-03 14:00:04.742957898 +0200
+***************
+*** 1,6 ****
+--- 1,7 ----
+ /* ops.c */
+ int get_op_type(int char1, int char2);
+ int op_on_lines(int op);
++ int op_is_change(int op);
+ int get_op_char(int optype);
+ int get_extra_op_char(int optype);
+ void op_shift(oparg_T *oap, int curs_top, int amount);
+*** ../vim-8.1.0026/src/structs.h 2018-05-13 14:01:15.000000000 +0200
+--- src/structs.h 2018-06-03 14:00:04.742957898 +0200
+***************
+*** 2356,2361 ****
+--- 2356,2366 ----
+
+ int b_shortname; /* this file has an 8.3 file name */
+
++ #ifdef FEAT_JOB_CHANNEL
++ char_u *b_prompt_text; // set by prompt_setprompt()
++ char_u *b_prompt_callback; // set by prompt_setcallback()
++ partial_T *b_prompt_partial; // set by prompt_setcallback()
++ #endif
+ #ifdef FEAT_MZSCHEME
+ void *b_mzscheme_ref; /* The MzScheme reference to this buffer */
+ #endif
+*** ../vim-8.1.0026/src/testdir/Make_all.mak 2018-04-10 18:52:08.000000000 +0200
+--- src/testdir/Make_all.mak 2018-06-03 14:00:04.742957898 +0200
+***************
+*** 147,152 ****
+--- 147,153 ----
+ test_perl.res \
+ test_plus_arg_edit.res \
+ test_preview.res \
++ test_prompt_buffer.res \
+ test_profile.res \
+ test_python2.res \
+ test_python3.res \
+*** ../vim-8.1.0026/src/testdir/screendump.vim 2018-05-05 16:33:08.000000000 +0200
+--- src/testdir/screendump.vim 2018-06-03 14:17:25.161921247 +0200
+***************
+*** 5,23 ****
+ finish
+ endif
+
+! " Need to be able to run terminal Vim with 256 colors. On MS-Windows the
+! " console only has 16 colors and the GUI can't run in a terminal.
+! if !has('terminal') || has('win32')
+! func CanRunVimInTerminal()
+! return 0
+! endfunc
+! finish
+! endif
+!
+ func CanRunVimInTerminal()
+! return 1
+ endfunc
+
+ source shared.vim
+
+ " Run Vim with "arguments" in a new terminal window.
+--- 5,22 ----
+ finish
+ endif
+
+! " For most tests we need to be able to run terminal Vim with 256 colors. On
+! " MS-Windows the console only has 16 colors and the GUI can't run in a
+! " terminal.
+ func CanRunVimInTerminal()
+! return has('terminal') && !has('win32')
+ endfunc
+
++ " Skip the rest if there is no terminal feature at all.
++ if !has('terminal')
++ finish
++ endif
++
+ source shared.vim
+
+ " Run Vim with "arguments" in a new terminal window.
+***************
+*** 54,59 ****
+--- 53,59 ----
+ let cols = get(a:options, 'cols', 75)
+
+ let cmd = GetVimCommandClean()
++
+ " Add -v to have gvim run in the terminal (if possible)
+ let cmd .= ' -v ' . a:arguments
+ let buf = term_start(cmd, {'curwin': 1, 'term_rows': rows, 'term_cols': cols})
+***************
+*** 64,74 ****
+ let cols = term_getsize(buf)[1]
+ endif
+
+! " Wait for "All" or "Top" of the ruler in the status line to be shown. This
+! " can be quite slow (e.g. when using valgrind).
+ " If it fails then show the terminal contents for debugging.
+ try
+! call WaitFor({-> len(term_getline(buf, rows)) >= cols - 1})
+ catch /timed out after/
+ let lines = map(range(1, rows), {key, val -> term_getline(buf, val)})
+ call assert_report('RunVimInTerminal() failed, screen contents: ' . join(lines, "<NL>"))
+--- 64,75 ----
+ let cols = term_getsize(buf)[1]
+ endif
+
+! " Wait for "All" or "Top" of the ruler to be shown in the last line or in
+! " the status line of the last window. This can be quite slow (e.g. when
+! " using valgrind).
+ " If it fails then show the terminal contents for debugging.
+ try
+! call WaitFor({-> len(term_getline(buf, rows)) >= cols - 1 || len(term_getline(buf, rows - 1)) >= cols - 1})
+ catch /timed out after/
+ let lines = map(range(1, rows), {key, val -> term_getline(buf, val)})
+ call assert_report('RunVimInTerminal() failed, screen contents: ' . join(lines, "<NL>"))
+***************
+*** 80,86 ****
+ " Stop a Vim running in terminal buffer "buf".
+ func StopVimInTerminal(buf)
+ call assert_equal("running", term_getstatus(a:buf))
+! call term_sendkeys(a:buf, "\<Esc>\<Esc>:qa!\<cr>")
+ call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))})
+ only!
+ endfunc
+--- 81,87 ----
+ " Stop a Vim running in terminal buffer "buf".
+ func StopVimInTerminal(buf)
+ call assert_equal("running", term_getstatus(a:buf))
+! call term_sendkeys(a:buf, "\<Esc>:qa!\<cr>")
+ call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))})
+ only!
+ endfunc
+*** ../vim-8.1.0026/src/testdir/test_prompt_buffer.vim 2018-06-03 14:39:38.860806632 +0200
+--- src/testdir/test_prompt_buffer.vim 2018-06-03 14:32:25.681281861 +0200
+***************
+*** 0 ****
+--- 1,55 ----
++ " Tests for setting 'buftype' to "prompt"
++
++ if !has('channel')
++ finish
++ endif
++
++ source shared.vim
++ source screendump.vim
++
++ func Test_prompt_basic()
++ " We need to use a terminal window to be able to feed keys without leaving
++ " Insert mode.
++ if !has('terminal')
++ call assert_report('no terminal')
++ return
++ endif
++ call writefile([
++ \ 'func TextEntered(text)',
++ \ ' if a:text == "exit"',
++ \ ' stopinsert',
++ \ ' close',
++ \ ' else',
++ \ ' " Add the output above the current prompt.',
++ \ ' call append(line("$") - 1, "Command: \"" . a:text . "\"")',
++ \ ' " Reset &modified to allow the buffer to be closed.',
++ \ ' set nomodified',
++ \ ' call timer_start(20, {id -> TimerFunc(a:text)})',
++ \ ' endif',
++ \ 'endfunc',
++ \ '',
++ \ 'func TimerFunc(text)',
++ \ ' " Add the output above the current prompt.',
++ \ ' call append(line("$") - 1, "Result: \"" . a:text . "\"")',
++ \ 'endfunc',
++ \ '',
++ \ 'call setline(1, "other buffer")',
++ \ 'new',
++ \ 'set buftype=prompt',
++ \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))',
++ \ 'startinsert',
++ \ ], 'Xpromptscript')
++ let buf = RunVimInTerminal('-S Xpromptscript', {})
++ call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))})
++
++ call term_sendkeys(buf, "hello\<CR>")
++ call WaitForAssert({-> assert_equal('% hello', term_getline(buf, 1))})
++ call WaitForAssert({-> assert_equal('Command: "hello"', term_getline(buf, 2))})
++ call WaitForAssert({-> assert_equal('Result: "hello"', term_getline(buf, 3))})
++
++ call term_sendkeys(buf, "exit\<CR>")
++ call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))})
++
++ call StopVimInTerminal(buf)
++ call delete('Xpromptscript')
++ endfunc
+*** ../vim-8.1.0026/src/version.c 2018-05-26 18:58:47.306367819 +0200
+--- src/version.c 2018-06-03 14:04:04.270811668 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 27,
+ /**/
+
+--
+Q: What is the difference between open-source and commercial software?
+A: If you have a problem with commercial software you can call a phone
+ number and they will tell you it might be solved in a future version.
+ For open-source software there isn't a phone number to call, but you
+ get the solution within a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0028 b/data/vim/patches/8.1.0028
new file mode 100644
index 000000000..ea9a03657
--- /dev/null
+++ b/data/vim/patches/8.1.0028
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0028
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0028 (after 8.1.0027)
+Problem: Prompt buffer test fails on MS-Windows.
+Solution: Disable the test for now. Remove stray assert.
+Files: src/testdir/test_prompt_buffer.vim
+
+
+*** ../vim-8.1.0027/src/testdir/test_prompt_buffer.vim 2018-06-03 14:42:17.848505102 +0200
+--- src/testdir/test_prompt_buffer.vim 2018-06-03 15:07:17.978837576 +0200
+***************
+*** 11,17 ****
+ " We need to use a terminal window to be able to feed keys without leaving
+ " Insert mode.
+ if !has('terminal')
+! call assert_report('no terminal')
+ return
+ endif
+ call writefile([
+--- 11,20 ----
+ " We need to use a terminal window to be able to feed keys without leaving
+ " Insert mode.
+ if !has('terminal')
+! return
+! endif
+! if has('win32')
+! " TODO: make this work on MS-Windows
+ return
+ endif
+ call writefile([
+*** ../vim-8.1.0027/src/version.c 2018-06-03 14:42:17.848505102 +0200
+--- src/version.c 2018-06-03 15:02:58.663065129 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 28,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+26. You check your mail. It says "no new messages." So you check it again.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0029 b/data/vim/patches/8.1.0029
new file mode 100644
index 000000000..67db4902b
--- /dev/null
+++ b/data/vim/patches/8.1.0029
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0029
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0029
+Problem: Terminal test fails on MS-Windows when "wc" exists.
+Solution: Skip test with redirection on MS-Windows.
+Files: src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0028/src/testdir/test_terminal.vim 2018-05-26 18:58:47.306367819 +0200
+--- src/testdir/test_terminal.vim 2018-06-03 15:24:23.018768459 +0200
+***************
+*** 580,585 ****
+--- 580,589 ----
+ if !executable('wc')
+ throw 'skipped: wc command not available'
+ endif
++ if has('win32')
++ " TODO: enable once writing to stdin works on MS-Windows
++ return
++ endif
+ new
+ call setline(1, ['one', 'two', 'three'])
+ %term wc
+*** ../vim-8.1.0028/src/version.c 2018-06-03 15:07:59.090802190 +0200
+--- src/version.c 2018-06-03 15:25:29.414749796 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 29,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+27. You refer to your age as 3.x.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0030 b/data/vim/patches/8.1.0030
new file mode 100644
index 000000000..808f50736
--- /dev/null
+++ b/data/vim/patches/8.1.0030
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0030
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0030
+Problem: Stoping Vim running in a terminal may not work.
+Solution: Instead of sending <Esc> send CTRL-O.
+Files: src/testdir/screendump.vim, src/testdir/test_prompt_buffer.vim
+
+
+*** ../vim-8.1.0029/src/testdir/screendump.vim 2018-06-03 14:42:17.848505102 +0200
+--- src/testdir/screendump.vim 2018-06-03 17:05:18.094429502 +0200
+***************
+*** 81,87 ****
+ " Stop a Vim running in terminal buffer "buf".
+ func StopVimInTerminal(buf)
+ call assert_equal("running", term_getstatus(a:buf))
+! call term_sendkeys(a:buf, "\<Esc>:qa!\<cr>")
+ call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))})
+ only!
+ endfunc
+--- 81,91 ----
+ " Stop a Vim running in terminal buffer "buf".
+ func StopVimInTerminal(buf)
+ call assert_equal("running", term_getstatus(a:buf))
+!
+! " CTRL-O : works both in Normal mode and Insert mode to start a command line.
+! " In Command-line it's inserted, the CTRL-U removes it again.
+! call term_sendkeys(a:buf, "\<C-O>\<C-U>:qa!\<cr>")
+!
+ call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))})
+ only!
+ endfunc
+*** ../vim-8.1.0029/src/testdir/test_prompt_buffer.vim 2018-06-03 15:07:59.090802190 +0200
+--- src/testdir/test_prompt_buffer.vim 2018-06-03 17:05:18.094429502 +0200
+***************
+*** 34,42 ****
+--- 34,45 ----
+ \ 'func TimerFunc(text)',
+ \ ' " Add the output above the current prompt.',
+ \ ' call append(line("$") - 1, "Result: \"" . a:text . "\"")',
++ \ ' " Reset &modified to allow the buffer to be closed.',
++ \ ' set nomodified',
+ \ 'endfunc',
+ \ '',
+ \ 'call setline(1, "other buffer")',
++ \ 'set nomodified',
+ \ 'new',
+ \ 'set buftype=prompt',
+ \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))',
+*** ../vim-8.1.0029/src/version.c 2018-06-03 15:26:31.866729762 +0200
+--- src/version.c 2018-06-03 17:07:05.586362470 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 30,
+ /**/
+
+--
+Bypasses are devices that allow some people to dash from point A to
+point B very fast while other people dash from point B to point A very
+fast. People living at point C, being a point directly in between, are
+often given to wonder what's so great about point A that so many people
+from point B are so keen to get there and what's so great about point B
+that so many people from point A are so keen to get there. They often
+wish that people would just once and for all work out where the hell
+they wanted to be.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0031 b/data/vim/patches/8.1.0031
new file mode 100644
index 000000000..0cfae419b
--- /dev/null
+++ b/data/vim/patches/8.1.0031
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0031
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0031
+Problem: Terminal test aucmd_on_close is flaky.
+Solution: Wait a bit longer.
+Files: src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0030/src/testdir/test_terminal.vim 2018-06-03 15:26:31.866729762 +0200
+--- src/testdir/test_terminal.vim 2018-06-03 18:20:32.978001827 +0200
+***************
+*** 384,390 ****
+ func s:get_sleep_cmd()
+ if s:python != ''
+ let cmd = s:python . " test_short_sleep.py"
+! let waittime = 500
+ else
+ echo 'This will take five seconds...'
+ let waittime = 2000
+--- 384,391 ----
+ func s:get_sleep_cmd()
+ if s:python != ''
+ let cmd = s:python . " test_short_sleep.py"
+! " 500 was not enough for Travis
+! let waittime = 900
+ else
+ echo 'This will take five seconds...'
+ let waittime = 2000
+*** ../vim-8.1.0030/src/version.c 2018-06-03 17:10:36.274226639 +0200
+--- src/version.c 2018-06-03 18:21:37.361916784 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 31,
+ /**/
+
+--
+Don't Panic!
+ -- The Hitchhiker's Guide to the Galaxy
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0032 b/data/vim/patches/8.1.0032
new file mode 100644
index 000000000..f5ea02843
--- /dev/null
+++ b/data/vim/patches/8.1.0032
@@ -0,0 +1,191 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0032
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0032
+Problem: BS in prompt buffer starts new line.
+Solution: Do not allows BS over the prompt. Make term_sendkeys() handle
+ special keys. Add a test.
+Files: src/option.c, src/terminal.c, src/testdir/test_prompt_buffer.vim
+
+
+*** ../vim-8.1.0031/src/option.c 2018-06-03 14:42:17.848505102 +0200
+--- src/option.c 2018-06-04 16:51:10.811551036 +0200
+***************
+*** 12439,12444 ****
+--- 12439,12448 ----
+ can_bs(
+ int what) /* BS_INDENT, BS_EOL or BS_START */
+ {
++ #ifdef FEAT_JOB_CHANNEL
++ if (what == BS_START && bt_prompt(curbuf))
++ return FALSE;
++ #endif
+ switch (*p_bs)
+ {
+ case '2': return TRUE;
+*** ../vim-8.1.0031/src/terminal.c 2018-05-21 22:50:22.514568516 +0200
+--- src/terminal.c 2018-06-04 16:51:10.815551032 +0200
+***************
+*** 5094,5101 ****
+
+ while (*msg != NUL)
+ {
+! send_keys_to_term(term, PTR2CHAR(msg), FALSE);
+! msg += MB_CPTR2LEN(msg);
+ }
+ }
+
+--- 5094,5112 ----
+
+ while (*msg != NUL)
+ {
+! int c;
+!
+! if (*msg == K_SPECIAL && msg[1] != NUL && msg[2] != NUL)
+! {
+! c = TO_SPECIAL(msg[1], msg[2]);
+! msg += 3;
+! }
+! else
+! {
+! c = PTR2CHAR(msg);
+! msg += MB_CPTR2LEN(msg);
+! }
+! send_keys_to_term(term, c, FALSE);
+ }
+ }
+
+*** ../vim-8.1.0031/src/testdir/test_prompt_buffer.vim 2018-06-03 17:10:36.274226639 +0200
+--- src/testdir/test_prompt_buffer.vim 2018-06-04 17:13:41.298470827 +0200
+***************
+*** 7,22 ****
+ source shared.vim
+ source screendump.vim
+
+! func Test_prompt_basic()
+ " We need to use a terminal window to be able to feed keys without leaving
+ " Insert mode.
+ if !has('terminal')
+! return
+ endif
+ if has('win32')
+! " TODO: make this work on MS-Windows
+! return
+ endif
+ call writefile([
+ \ 'func TextEntered(text)',
+ \ ' if a:text == "exit"',
+--- 7,26 ----
+ source shared.vim
+ source screendump.vim
+
+! func CanTestPromptBuffer()
+ " We need to use a terminal window to be able to feed keys without leaving
+ " Insert mode.
+ if !has('terminal')
+! return 0
+ endif
+ if has('win32')
+! " TODO: make the tests work on MS-Windows
+! return 0
+ endif
++ return 1
++ endfunc
++
++ func WriteScript(name)
+ call writefile([
+ \ 'func TextEntered(text)',
+ \ ' if a:text == "exit"',
+***************
+*** 44,51 ****
+ \ 'set buftype=prompt',
+ \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))',
+ \ 'startinsert',
+! \ ], 'Xpromptscript')
+! let buf = RunVimInTerminal('-S Xpromptscript', {})
+ call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))})
+
+ call term_sendkeys(buf, "hello\<CR>")
+--- 48,64 ----
+ \ 'set buftype=prompt',
+ \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))',
+ \ 'startinsert',
+! \ ], a:name)
+! endfunc
+!
+! func Test_prompt_basic()
+! if !CanTestPromptBuffer()
+! return
+! endif
+! let scriptName = 'XpromptscriptBasic'
+! call WriteScript(scriptName)
+!
+! let buf = RunVimInTerminal('-S ' . scriptName, {})
+ call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))})
+
+ call term_sendkeys(buf, "hello\<CR>")
+***************
+*** 57,61 ****
+ call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))})
+
+ call StopVimInTerminal(buf)
+! call delete('Xpromptscript')
+ endfunc
+--- 70,103 ----
+ call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))})
+
+ call StopVimInTerminal(buf)
+! call delete(scriptName)
+! endfunc
+!
+! func Test_prompt_editing()
+! if !CanTestPromptBuffer()
+! return
+! endif
+! let scriptName = 'XpromptscriptEditing'
+! call WriteScript(scriptName)
+!
+! let buf = RunVimInTerminal('-S ' . scriptName, {})
+! call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))})
+!
+! let bs = "\<BS>"
+! call term_sendkeys(buf, "hello" . bs . bs)
+! call WaitForAssert({-> assert_equal('% hel', term_getline(buf, 1))})
+!
+! let left = "\<Left>"
+! call term_sendkeys(buf, left . left . left . bs . '-')
+! call WaitForAssert({-> assert_equal('% -hel', term_getline(buf, 1))})
+!
+! let end = "\<End>"
+! call term_sendkeys(buf, end . "x")
+! call WaitForAssert({-> assert_equal('% -helx', term_getline(buf, 1))})
+!
+! call term_sendkeys(buf, "\<C-U>exit\<CR>")
+! call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))})
+!
+! call StopVimInTerminal(buf)
+! call delete(scriptName)
+ endfunc
+*** ../vim-8.1.0031/src/version.c 2018-06-03 18:21:57.809890160 +0200
+--- src/version.c 2018-06-04 17:05:58.770829349 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 32,
+ /**/
+
+--
+I have a drinking problem -- I can't afford it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0033 b/data/vim/patches/8.1.0033
new file mode 100644
index 000000000..a16e8bd36
--- /dev/null
+++ b/data/vim/patches/8.1.0033
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0033
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0033
+Problem: Keys to stop Vim in terminal are wrong. (Marius Gedminas)
+Solution: Move ":" to before CTRL-U.
+Files: src/testdir/screendump.vim
+
+
+*** ../vim-8.1.0032/src/testdir/screendump.vim 2018-06-03 17:10:36.270226642 +0200
+--- src/testdir/screendump.vim 2018-06-04 19:01:48.274497229 +0200
+***************
+*** 84,90 ****
+
+ " CTRL-O : works both in Normal mode and Insert mode to start a command line.
+ " In Command-line it's inserted, the CTRL-U removes it again.
+! call term_sendkeys(a:buf, "\<C-O>\<C-U>:qa!\<cr>")
+
+ call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))})
+ only!
+--- 84,90 ----
+
+ " CTRL-O : works both in Normal mode and Insert mode to start a command line.
+ " In Command-line it's inserted, the CTRL-U removes it again.
+! call term_sendkeys(a:buf, "\<C-O>:\<C-U>qa!\<cr>")
+
+ call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))})
+ only!
+*** ../vim-8.1.0032/src/version.c 2018-06-04 17:28:04.729961269 +0200
+--- src/version.c 2018-06-04 19:04:28.410393592 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 33,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+3. Every time someone asks you to do something, ask if they want fries
+ with that.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0034 b/data/vim/patches/8.1.0034
new file mode 100644
index 000000000..c1fb32dc1
--- /dev/null
+++ b/data/vim/patches/8.1.0034
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0034
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0034
+Problem: Cursor not restored with ":edit #".
+Solution: Don't assume autocommands moved the cursor when it was moved to
+ the first non-blank.
+Files: src/ex_cmds.c, src/testdir/test_edit.vim
+
+
+*** ../vim-8.1.0033/src/ex_cmds.c 2018-04-10 18:37:19.000000000 +0200
+--- src/ex_cmds.c 2018-06-04 20:28:56.647447774 +0200
+***************
+*** 4193,4203 ****
+ check_arg_idx(curwin);
+
+ /* If autocommands change the cursor position or topline, we should
+! * keep it. Also when it moves within a line. */
+ if (!EQUAL_POS(curwin->w_cursor, orig_pos))
+ {
+! newlnum = curwin->w_cursor.lnum;
+! newcol = curwin->w_cursor.col;
+ }
+ if (curwin->w_topline == topline)
+ topline = 0;
+--- 4193,4210 ----
+ check_arg_idx(curwin);
+
+ /* If autocommands change the cursor position or topline, we should
+! * keep it. Also when it moves within a line. But not when it moves
+! * to the first non-blank. */
+ if (!EQUAL_POS(curwin->w_cursor, orig_pos))
+ {
+! char_u *text = ml_get_curline();
+!
+! if (curwin->w_cursor.lnum != orig_pos.lnum
+! || curwin->w_cursor.col != (int)(skipwhite(text) - text))
+! {
+! newlnum = curwin->w_cursor.lnum;
+! newcol = curwin->w_cursor.col;
+! }
+ }
+ if (curwin->w_topline == topline)
+ topline = 0;
+*** ../vim-8.1.0033/src/testdir/test_edit.vim 2018-02-09 14:37:30.000000000 +0100
+--- src/testdir/test_edit.vim 2018-06-04 20:28:56.647447774 +0200
+***************
+*** 1387,1389 ****
+--- 1387,1403 ----
+ only
+ endfunc
+
++ func Test_edit_alt()
++ " Keeping the cursor line didn't happen when the first line has indent.
++ new
++ call setline(1, [' one', 'two', 'three'])
++ w XAltFile
++ $
++ call assert_equal(3, line('.'))
++ e Xother
++ e #
++ call assert_equal(3, line('.'))
++
++ bwipe XAltFile
++ call delete('XAltFile')
++ endfunc
+*** ../vim-8.1.0033/src/version.c 2018-06-04 19:11:06.604648995 +0200
+--- src/version.c 2018-06-04 20:31:05.227428478 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 34,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+8. Don't use any punctuation marks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0035 b/data/vim/patches/8.1.0035
new file mode 100644
index 000000000..329d2c528
--- /dev/null
+++ b/data/vim/patches/8.1.0035
@@ -0,0 +1,237 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0035
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0035
+Problem: Not easy to switch between prompt buffer and other windows.
+Solution: Accept CTRL-W commands in Insert mode. Start and stop Insert mode
+ as one would expect.
+Files: src/edit.c, src/ex_docmd.c, src/structs.h, src/window.c
+
+
+*** ../vim-8.1.0034/src/edit.c 2018-06-03 14:42:17.840505115 +0200
+--- src/edit.c 2018-06-06 09:06:43.329569894 +0200
+***************
+*** 811,816 ****
+--- 811,824 ----
+ do
+ {
+ c = safe_vgetc();
++
++ if (stop_insert_mode)
++ {
++ // Insert mode ended, possibly from a callback.
++ count = 0;
++ nomove = TRUE;
++ goto doESCkey;
++ }
+ } while (c == K_IGNORE || c == K_NOP);
+
+ /* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */
+***************
+*** 1165,1170 ****
+--- 1173,1190 ----
+ break;
+
+ case Ctrl_W: /* delete word before the cursor */
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf) && (mod_mask & MOD_MASK_SHIFT) == 0)
++ {
++ // In a prompt window CTRL-W is used for window commands.
++ // Use Shift-CTRL-W to delete a word.
++ stuffcharReadbuff(Ctrl_W);
++ restart_edit = 'i';
++ nomove = TRUE;
++ count = 0;
++ goto doESCkey;
++ }
++ #endif
+ did_backspace = ins_bs(c, BACKSPACE_WORD, &inserted_space);
+ auto_format(FALSE, TRUE);
+ break;
+***************
+*** 1869,1874 ****
+--- 1889,1907 ----
+ coladvance((colnr_T)MAXCOL);
+ changed_bytes(curbuf->b_ml.ml_line_count, 0);
+ }
++
++ // Insert always starts after the prompt, allow editing text after it.
++ if (Insstart_orig.lnum != curwin->w_cursor.lnum
++ || Insstart_orig.col != (int)STRLEN(prompt))
++ {
++ Insstart.lnum = curwin->w_cursor.lnum;
++ Insstart.col = STRLEN(prompt);
++ Insstart_orig = Insstart;
++ Insstart_textlen = Insstart.col;
++ Insstart_blank_vcol = MAXCOL;
++ arrow_used = FALSE;
++ }
++
+ if (cmdchar_todo == 'A')
+ coladvance((colnr_T)MAXCOL);
+ if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt))
+*** ../vim-8.1.0034/src/ex_docmd.c 2018-05-08 21:57:39.000000000 +0200
+--- src/ex_docmd.c 2018-06-06 08:58:58.317930716 +0200
+***************
+*** 7341,7347 ****
+ {
+ if (eap->addr_count == 0)
+ ex_win_close(eap->forceit, curwin, NULL);
+! else {
+ FOR_ALL_WINDOWS(win)
+ {
+ winnr++;
+--- 7341,7348 ----
+ {
+ if (eap->addr_count == 0)
+ ex_win_close(eap->forceit, curwin, NULL);
+! else
+! {
+ FOR_ALL_WINDOWS(win)
+ {
+ winnr++;
+*** ../vim-8.1.0034/src/structs.h 2018-06-03 14:42:17.848505102 +0200
+--- src/structs.h 2018-06-06 08:58:58.317930716 +0200
+***************
+*** 2360,2365 ****
+--- 2360,2367 ----
+ char_u *b_prompt_text; // set by prompt_setprompt()
+ char_u *b_prompt_callback; // set by prompt_setcallback()
+ partial_T *b_prompt_partial; // set by prompt_setcallback()
++ int b_prompt_insert; // value for restart_edit when entering
++ // a prompt buffer window.
+ #endif
+ #ifdef FEAT_MZSCHEME
+ void *b_mzscheme_ref; /* The MzScheme reference to this buffer */
+*** ../vim-8.1.0034/src/window.c 2018-05-04 20:09:46.000000000 +0200
+--- src/window.c 2018-06-06 08:58:58.321930713 +0200
+***************
+*** 2103,2108 ****
+--- 2103,2131 ----
+ }
+ }
+
++ #ifdef FEAT_JOB_CHANNEL
++ static void
++ leaving_window(win_T *win)
++ {
++ // When leaving a prompt window stop Insert mode and perhaps restart
++ // it when entering that window again.
++ win->w_buffer->b_prompt_insert = restart_edit;
++ restart_edit = NUL;
++
++ // When leaving the window (or closing the window) was done from a
++ // callback we need to break out of the Insert mode loop.
++ if (State & INSERT)
++ stop_insert_mode = TRUE;
++ }
++
++ static void
++ entering_window(win_T *win)
++ {
++ // When entering the prompt window may restart Insert mode.
++ restart_edit = win->w_buffer->b_prompt_insert;
++ }
++ #endif
++
+ /*
+ * Close all windows for buffer "buf".
+ */
+***************
+*** 2231,2236 ****
+--- 2254,2262 ----
+ if (h != tabline_height())
+ shell_new_rows();
+ }
++ #ifdef FEAT_JOB_CHANNEL
++ entering_window(curwin);
++ #endif
+ /* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
+ * that now. */
+ apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf);
+***************
+*** 2296,2301 ****
+--- 2322,2330 ----
+
+ if (win == curwin)
+ {
++ #ifdef FEAT_JOB_CHANNEL
++ leaving_window(curwin);
++ #endif
+ /*
+ * Guess which window is going to be the new current window.
+ * This may change because of the autocommands (sigh).
+***************
+*** 3649,3654 ****
+--- 3678,3686 ----
+ * scrollbars. Have to update them anyway. */
+ gui_may_update_scrollbars();
+ #endif
++ #ifdef FEAT_JOB_CHANNEL
++ entering_window(curwin);
++ #endif
+
+ redraw_all_later(CLEAR);
+ apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf);
+***************
+*** 3822,3827 ****
+--- 3854,3862 ----
+ {
+ tabpage_T *tp = curtab;
+
++ #ifdef FEAT_JOB_CHANNEL
++ leaving_window(curwin);
++ #endif
+ reset_VIsual_and_resel(); /* stop Visual mode */
+ if (trigger_leave_autocmds)
+ {
+***************
+*** 4318,4323 ****
+--- 4353,4363 ----
+ if (wp == curwin && !curwin_invalid) /* nothing to do */
+ return;
+
++ #ifdef FEAT_JOB_CHANNEL
++ if (!curwin_invalid)
++ leaving_window(curwin);
++ #endif
++
+ if (!curwin_invalid && trigger_leave_autocmds)
+ {
+ /*
+***************
+*** 4389,4394 ****
+--- 4429,4437 ----
+ shorten_fnames(TRUE);
+ }
+
++ #ifdef FEAT_JOB_CHANNEL
++ entering_window(curwin);
++ #endif
+ if (trigger_new_autocmds)
+ apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf);
+ if (trigger_enter_autocmds)
+*** ../vim-8.1.0034/src/version.c 2018-06-04 20:34:07.607373577 +0200
+--- src/version.c 2018-06-06 09:01:35.521811501 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 35,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+12. Sing along at the opera.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0036 b/data/vim/patches/8.1.0036
new file mode 100644
index 000000000..4162ef227
--- /dev/null
+++ b/data/vim/patches/8.1.0036
@@ -0,0 +1,145 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0036
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0036
+Problem: Not restoring Insert mode if leaving a prompt buffer by using a
+ mouse click.
+Solution: Set b_prompt_insert appropriately. Also correct cursor position
+ when moving cursor to last line.
+Files: src/buffer.c, src/edit.c, src/window.c
+
+
+*** ../vim-8.1.0035/src/buffer.c 2018-06-03 14:42:17.840505115 +0200
+--- src/buffer.c 2018-06-06 17:51:25.004337836 +0200
+***************
+*** 5733,5738 ****
+--- 5733,5742 ----
+ #endif
+ if (buf->b_fname != NULL)
+ return buf->b_fname;
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(buf))
++ return (char_u *)_("[Prompt]");
++ #endif
+ return (char_u *)_("[Scratch]");
+ }
+
+*** ../vim-8.1.0035/src/edit.c 2018-06-06 09:11:07.253357321 +0200
+--- src/edit.c 2018-06-06 17:51:25.004337836 +0200
+***************
+*** 1411,1421 ****
+ #ifdef FEAT_JOB_CHANNEL
+ if (bt_prompt(curbuf))
+ {
+- buf_T *buf = curbuf;
+-
+ invoke_prompt_callback();
+! if (curbuf != buf)
+! // buffer changed, get out of Insert mode
+ goto doESCkey;
+ break;
+ }
+--- 1411,1420 ----
+ #ifdef FEAT_JOB_CHANNEL
+ if (bt_prompt(curbuf))
+ {
+ invoke_prompt_callback();
+! if (!bt_prompt(curbuf))
+! // buffer changed to a non-prompt buffer, get out of
+! // Insert mode
+ goto doESCkey;
+ break;
+ }
+***************
+*** 1906,1911 ****
+--- 1905,1912 ----
+ coladvance((colnr_T)MAXCOL);
+ if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt))
+ curwin->w_cursor.col = STRLEN(prompt);
++ /* Make sure the cursor is in a valid position. */
++ check_cursor();
+ }
+
+ /*
+***************
+*** 9467,9473 ****
+
+ /* If deleted before the insertion point, adjust it */
+ if (curwin->w_cursor.lnum == Insstart_orig.lnum
+! && curwin->w_cursor.col < Insstart_orig.col)
+ Insstart_orig.col = curwin->w_cursor.col;
+
+ /* vi behaviour: the cursor moves backward but the character that
+--- 9468,9474 ----
+
+ /* If deleted before the insertion point, adjust it */
+ if (curwin->w_cursor.lnum == Insstart_orig.lnum
+! && curwin->w_cursor.col < Insstart_orig.col)
+ Insstart_orig.col = curwin->w_cursor.col;
+
+ /* vi behaviour: the cursor moves backward but the character that
+***************
+*** 9517,9522 ****
+--- 9518,9528 ----
+ * previous one to stop insert there properly. */
+ curwin = old_curwin;
+ curbuf = curwin->w_buffer;
++ #ifdef FEAT_JOB_CHANNEL
++ if (bt_prompt(curbuf))
++ // Restart Insert mode when re-entering the prompt buffer.
++ curbuf->b_prompt_insert = 'A';
++ #endif
+ }
+ start_arrow(curwin == old_curwin ? &tpos : NULL);
+ if (curwin != new_curwin && win_valid(new_curwin))
+*** ../vim-8.1.0035/src/window.c 2018-06-06 09:11:07.257357317 +0200
+--- src/window.c 2018-06-06 17:51:25.012337813 +0200
+***************
+*** 2115,2126 ****
+--- 2115,2135 ----
+ // When leaving the window (or closing the window) was done from a
+ // callback we need to break out of the Insert mode loop.
+ if (State & INSERT)
++ {
+ stop_insert_mode = TRUE;
++ if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert == NUL)
++ win->w_buffer->b_prompt_insert = 'A';
++ }
+ }
+
+ static void
+ entering_window(win_T *win)
+ {
++ // When switching to a prompt buffer that was in Insert mode, don't stop
++ // Insert mode, it may have been set in leaving_window().
++ if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert != NUL)
++ stop_insert_mode = FALSE;
++
+ // When entering the prompt window may restart Insert mode.
+ restart_edit = win->w_buffer->b_prompt_insert;
+ }
+*** ../vim-8.1.0035/src/version.c 2018-06-06 09:11:07.261357314 +0200
+--- src/version.c 2018-06-06 17:55:55.983628274 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 36,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+15. Five days in advance, tell your friends you can't attend their
+ party because you're not in the mood.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0037 b/data/vim/patches/8.1.0037
new file mode 100644
index 000000000..d6b823354
--- /dev/null
+++ b/data/vim/patches/8.1.0037
@@ -0,0 +1,581 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0037
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0037
+Problem: Cannot easily append lines to another buffer.
+Solution: Add appendbufline().
+Files: runtime/doc/eval.txt, src/evalfunc.c,
+ src/testdir/test_bufline.vim, src/testdir/test_edit.vim
+
+
+*** ../vim-8.1.0036/runtime/doc/eval.txt 2018-06-03 14:42:17.824505143 +0200
+--- runtime/doc/eval.txt 2018-06-06 20:58:47.732807369 +0200
+***************
+*** 2560,2565 ****
+--- 2560,2580 ----
+ 0 for success. Example: >
+ :let failed = append(line('$'), "# THE END")
+ :let failed = append(0, ["Chapter 1", "the beginning"])
++
++ appendbufline({expr}, {lnum}, {text}) *appendbufline()*
++ Like |append()| but append the text in buffer {expr}.
++
++ For the use of {expr}, see |bufname()|.
++
++ {lnum} is used like with |append()|. Note that using |line()|
++ would use the current buffer, not the one appending to.
++ Use "$" to append at the end of the buffer.
++
++ On success 0 is returned, on failure 1 is returned.
++
++ If {expr} is not a valid buffer or {lnum} is not valid, an
++ error message is given. Example: >
++ :let failed = appendbufline(13, 0, "# THE START")
+ <
+ *argc()*
+ argc() The result is the number of files in the argument list of the
+*** ../vim-8.1.0036/src/evalfunc.c 2018-06-03 14:42:17.844505109 +0200
+--- src/evalfunc.c 2018-06-06 20:58:47.740807362 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+ static void f_add(typval_T *argvars, typval_T *rettv);
+ static void f_and(typval_T *argvars, typval_T *rettv);
+ static void f_append(typval_T *argvars, typval_T *rettv);
++ static void f_appendbufline(typval_T *argvars, typval_T *rettv);
+ static void f_argc(typval_T *argvars, typval_T *rettv);
+ static void f_argidx(typval_T *argvars, typval_T *rettv);
+ static void f_arglistid(typval_T *argvars, typval_T *rettv);
+***************
+*** 487,492 ****
+--- 488,494 ----
+ {"add", 2, 2, f_add},
+ {"and", 2, 2, f_and},
+ {"append", 2, 2, f_append},
++ {"appendbufline", 3, 3, f_appendbufline},
+ {"argc", 0, 0, f_argc},
+ {"argidx", 0, 0, f_argidx},
+ {"arglistid", 0, 2, f_arglistid},
+***************
+*** 1192,1261 ****
+ }
+
+ /*
+! * "append(lnum, string/list)" function
+ */
+ static void
+! f_append(typval_T *argvars, typval_T *rettv)
+ {
+! long lnum;
+! char_u *line;
+ list_T *l = NULL;
+ listitem_T *li = NULL;
+- typval_T *tv;
+ long added = 0;
+
+! /* When coming here from Insert mode, sync undo, so that this can be
+! * undone separately from what was previously inserted. */
+! if (u_sync_once == 2)
+ {
+! u_sync_once = 1; /* notify that u_sync() was called */
+! u_sync(TRUE);
+ }
+
+! lnum = get_tv_lnum(argvars);
+! if (lnum >= 0
+! && lnum <= curbuf->b_ml.ml_line_count
+! && u_save(lnum, lnum + 1) == OK)
+ {
+! if (argvars[1].v_type == VAR_LIST)
+! {
+! l = argvars[1].vval.v_list;
+! if (l == NULL)
+! return;
+! li = l->lv_first;
+! }
+! for (;;)
+ {
+! if (l == NULL)
+! tv = &argvars[1]; /* append a string */
+! else if (li == NULL)
+! break; /* end of list */
+! else
+! tv = &li->li_tv; /* append item from list */
+! line = get_tv_string_chk(tv);
+! if (line == NULL) /* type error */
+ {
+! rettv->vval.v_number = 1; /* Failed */
+ break;
+ }
+! ml_append(lnum + added, line, (colnr_T)0, FALSE);
+! ++added;
+! if (l == NULL)
+ break;
+ li = li->li_next;
+ }
+
+! appended_lines_mark(lnum, added);
+! if (curwin->w_cursor.lnum > lnum)
+! curwin->w_cursor.lnum += added;
+ #ifdef FEAT_JOB_CHANNEL
+ if (bt_prompt(curbuf) && (State & INSERT))
+ // show the line with the prompt
+ update_topline();
+ #endif
+ }
+ else
+! rettv->vval.v_number = 1; /* Failed */
+ }
+
+ /*
+--- 1194,1378 ----
+ }
+
+ /*
+! * Get the lnum from the first argument.
+! * Also accepts "$", then "buf" is used.
+! * Returns 0 on error.
+! */
+! static linenr_T
+! get_tv_lnum_buf(typval_T *argvars, buf_T *buf)
+! {
+! if (argvars[0].v_type == VAR_STRING
+! && argvars[0].vval.v_string != NULL
+! && argvars[0].vval.v_string[0] == '$'
+! && buf != NULL)
+! return buf->b_ml.ml_line_count;
+! return (linenr_T)get_tv_number_chk(&argvars[0], NULL);
+! }
+!
+! /*
+! * Set line or list of lines in buffer "buf".
+ */
+ static void
+! set_buffer_lines(
+! buf_T *buf,
+! linenr_T lnum_arg,
+! int append,
+! typval_T *lines,
+! typval_T *rettv)
+ {
+! linenr_T lnum = lnum_arg + (append ? 1 : 0);
+! char_u *line = NULL;
+ list_T *l = NULL;
+ listitem_T *li = NULL;
+ long added = 0;
++ linenr_T append_lnum;
++ buf_T *curbuf_save = NULL;
++ win_T *curwin_save = NULL;
++ int is_curbuf = buf == curbuf;
+
+! /* When using the current buffer ml_mfp will be set if needed. Useful when
+! * setline() is used on startup. For other buffers the buffer must be
+! * loaded. */
+! if (buf == NULL || (!is_curbuf && buf->b_ml.ml_mfp == NULL) || lnum < 1)
+ {
+! rettv->vval.v_number = 1; /* FAIL */
+! return;
+ }
+
+! if (!is_curbuf)
+ {
+! wininfo_T *wip;
+!
+! curbuf_save = curbuf;
+! curwin_save = curwin;
+! curbuf = buf;
+! for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
+ {
+! if (wip->wi_win != NULL)
+ {
+! curwin = wip->wi_win;
+ break;
+ }
+! }
+! }
+!
+! if (append)
+! // appendbufline() uses the line number below which we insert
+! append_lnum = lnum - 1;
+! else
+! // setbufline() uses the line number above which we insert, we only
+! // append if it's below the last line
+! append_lnum = curbuf->b_ml.ml_line_count;
+!
+! if (lines->v_type == VAR_LIST)
+! {
+! l = lines->vval.v_list;
+! li = l->lv_first;
+! }
+! else
+! line = get_tv_string_chk(lines);
+!
+! /* default result is zero == OK */
+! for (;;)
+! {
+! if (l != NULL)
+! {
+! /* list argument, get next string */
+! if (li == NULL)
+ break;
++ line = get_tv_string_chk(&li->li_tv);
+ li = li->li_next;
+ }
+
+! rettv->vval.v_number = 1; /* FAIL */
+! if (line == NULL || lnum > curbuf->b_ml.ml_line_count + 1)
+! break;
+!
+! /* When coming here from Insert mode, sync undo, so that this can be
+! * undone separately from what was previously inserted. */
+! if (u_sync_once == 2)
+! {
+! u_sync_once = 1; /* notify that u_sync() was called */
+! u_sync(TRUE);
+! }
+!
+! if (!append && lnum <= curbuf->b_ml.ml_line_count)
+! {
+! /* existing line, replace it */
+! if (u_savesub(lnum) == OK && ml_replace(lnum, line, TRUE) == OK)
+! {
+! changed_bytes(lnum, 0);
+! if (is_curbuf && lnum == curwin->w_cursor.lnum)
+! check_cursor_col();
+! rettv->vval.v_number = 0; /* OK */
+! }
+! }
+! else if (added > 0 || u_save(lnum - 1, lnum) == OK)
+! {
+! /* append the line */
+! ++added;
+! if (ml_append(lnum - 1, line, (colnr_T)0, FALSE) == OK)
+! rettv->vval.v_number = 0; /* OK */
+! }
+!
+! if (l == NULL) /* only one string argument */
+! break;
+! ++lnum;
+! }
+!
+! if (added > 0)
+! {
+! win_T *wp;
+! tabpage_T *tp;
+!
+! appended_lines_mark(append_lnum, added);
+! FOR_ALL_TAB_WINDOWS(tp, wp)
+! if (wp->w_buffer == buf && wp->w_cursor.lnum > append_lnum)
+! wp->w_cursor.lnum += added;
+! check_cursor_col();
+!
+ #ifdef FEAT_JOB_CHANNEL
+ if (bt_prompt(curbuf) && (State & INSERT))
+ // show the line with the prompt
+ update_topline();
+ #endif
+ }
++
++ if (!is_curbuf)
++ {
++ curbuf = curbuf_save;
++ curwin = curwin_save;
++ }
++ }
++
++ /*
++ * "append(lnum, string/list)" function
++ */
++ static void
++ f_append(typval_T *argvars, typval_T *rettv)
++ {
++ linenr_T lnum = get_tv_lnum(&argvars[0]);
++
++ set_buffer_lines(curbuf, lnum, TRUE, &argvars[1], rettv);
++ }
++
++ /*
++ * "appendbufline(buf, lnum, string/list)" function
++ */
++ static void
++ f_appendbufline(typval_T *argvars, typval_T *rettv)
++ {
++ linenr_T lnum;
++ buf_T *buf;
++
++ buf = get_buf_tv(&argvars[0], FALSE);
++ if (buf == NULL)
++ rettv->vval.v_number = 1; /* FAIL */
+ else
+! {
+! lnum = get_tv_lnum_buf(&argvars[1], buf);
+! set_buffer_lines(buf, lnum, TRUE, &argvars[2], rettv);
+! }
+ }
+
+ /*
+***************
+*** 4276,4297 ****
+ }
+
+ /*
+- * Get the lnum from the first argument.
+- * Also accepts "$", then "buf" is used.
+- * Returns 0 on error.
+- */
+- static linenr_T
+- get_tv_lnum_buf(typval_T *argvars, buf_T *buf)
+- {
+- if (argvars[0].v_type == VAR_STRING
+- && argvars[0].vval.v_string != NULL
+- && argvars[0].vval.v_string[0] == '$'
+- && buf != NULL)
+- return buf->b_ml.ml_line_count;
+- return (linenr_T)get_tv_number_chk(&argvars[0], NULL);
+- }
+-
+- /*
+ * "getbufline()" function
+ */
+ static void
+--- 4393,4398 ----
+***************
+*** 10226,10340 ****
+ }
+
+ /*
+- * Set line or list of lines in buffer "buf".
+- */
+- static void
+- set_buffer_lines(buf_T *buf, linenr_T lnum, typval_T *lines, typval_T *rettv)
+- {
+- char_u *line = NULL;
+- list_T *l = NULL;
+- listitem_T *li = NULL;
+- long added = 0;
+- linenr_T lcount;
+- buf_T *curbuf_save = NULL;
+- win_T *curwin_save = NULL;
+- int is_curbuf = buf == curbuf;
+-
+- /* When using the current buffer ml_mfp will be set if needed. Useful when
+- * setline() is used on startup. For other buffers the buffer must be
+- * loaded. */
+- if (buf == NULL || (!is_curbuf && buf->b_ml.ml_mfp == NULL) || lnum < 1)
+- {
+- rettv->vval.v_number = 1; /* FAIL */
+- return;
+- }
+-
+- if (!is_curbuf)
+- {
+- wininfo_T *wip;
+-
+- curbuf_save = curbuf;
+- curwin_save = curwin;
+- curbuf = buf;
+- for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
+- {
+- if (wip->wi_win != NULL)
+- {
+- curwin = wip->wi_win;
+- break;
+- }
+- }
+- }
+-
+- lcount = curbuf->b_ml.ml_line_count;
+-
+- if (lines->v_type == VAR_LIST)
+- {
+- l = lines->vval.v_list;
+- li = l->lv_first;
+- }
+- else
+- line = get_tv_string_chk(lines);
+-
+- /* default result is zero == OK */
+- for (;;)
+- {
+- if (l != NULL)
+- {
+- /* list argument, get next string */
+- if (li == NULL)
+- break;
+- line = get_tv_string_chk(&li->li_tv);
+- li = li->li_next;
+- }
+-
+- rettv->vval.v_number = 1; /* FAIL */
+- if (line == NULL || lnum > curbuf->b_ml.ml_line_count + 1)
+- break;
+-
+- /* When coming here from Insert mode, sync undo, so that this can be
+- * undone separately from what was previously inserted. */
+- if (u_sync_once == 2)
+- {
+- u_sync_once = 1; /* notify that u_sync() was called */
+- u_sync(TRUE);
+- }
+-
+- if (lnum <= curbuf->b_ml.ml_line_count)
+- {
+- /* existing line, replace it */
+- if (u_savesub(lnum) == OK && ml_replace(lnum, line, TRUE) == OK)
+- {
+- changed_bytes(lnum, 0);
+- if (is_curbuf && lnum == curwin->w_cursor.lnum)
+- check_cursor_col();
+- rettv->vval.v_number = 0; /* OK */
+- }
+- }
+- else if (added > 0 || u_save(lnum - 1, lnum) == OK)
+- {
+- /* lnum is one past the last line, append the line */
+- ++added;
+- if (ml_append(lnum - 1, line, (colnr_T)0, FALSE) == OK)
+- rettv->vval.v_number = 0; /* OK */
+- }
+-
+- if (l == NULL) /* only one string argument */
+- break;
+- ++lnum;
+- }
+-
+- if (added > 0)
+- appended_lines_mark(lcount, added);
+-
+- if (!is_curbuf)
+- {
+- curbuf = curbuf_save;
+- curwin = curwin_save;
+- }
+- }
+-
+- /*
+ * "setbufline()" function
+ */
+ static void
+--- 10327,10332 ----
+***************
+*** 10351,10358 ****
+ else
+ {
+ lnum = get_tv_lnum_buf(&argvars[1], buf);
+!
+! set_buffer_lines(buf, lnum, &argvars[2], rettv);
+ }
+ }
+
+--- 10343,10349 ----
+ else
+ {
+ lnum = get_tv_lnum_buf(&argvars[1], buf);
+! set_buffer_lines(buf, lnum, FALSE, &argvars[2], rettv);
+ }
+ }
+
+***************
+*** 10512,10518 ****
+ {
+ linenr_T lnum = get_tv_lnum(&argvars[0]);
+
+! set_buffer_lines(curbuf, lnum, &argvars[1], rettv);
+ }
+
+ static void set_qf_ll_list(win_T *wp, typval_T *list_arg, typval_T *action_arg, typval_T *what_arg, typval_T *rettv);
+--- 10503,10509 ----
+ {
+ linenr_T lnum = get_tv_lnum(&argvars[0]);
+
+! set_buffer_lines(curbuf, lnum, FALSE, &argvars[1], rettv);
+ }
+
+ static void set_qf_ll_list(win_T *wp, typval_T *list_arg, typval_T *action_arg, typval_T *what_arg, typval_T *rettv);
+*** ../vim-8.1.0036/src/testdir/test_bufline.vim 2017-11-06 21:26:52.000000000 +0100
+--- src/testdir/test_bufline.vim 2018-06-06 20:58:47.740807362 +0200
+***************
+*** 1,4 ****
+! " Tests for setbufline() and getbufline()
+
+ source shared.vim
+
+--- 1,4 ----
+! " Tests for setbufline(), getbufline(), appendbufline()
+
+ source shared.vim
+
+***************
+*** 65,67 ****
+--- 65,92 ----
+ call delete('Xscript')
+ call delete('Xtest')
+ endfunc
++
++ func Test_appendbufline()
++ new
++ let b = bufnr('%')
++ hide
++ call assert_equal(0, appendbufline(b, 0, ['foo', 'bar']))
++ call assert_equal(['foo'], getbufline(b, 1))
++ call assert_equal(['bar'], getbufline(b, 2))
++ call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
++ exe "bd!" b
++ call assert_equal([], getbufline(b, 1, 2))
++
++ split Xtest
++ call setline(1, ['a', 'b', 'c'])
++ let b = bufnr('%')
++ wincmd w
++ call assert_equal(1, appendbufline(b, 4, ['x']))
++ call assert_equal(1, appendbufline(1234, 1, ['x']))
++ call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
++ call assert_equal(['c'], getbufline(b, 3))
++ call assert_equal(['d'], getbufline(b, 4))
++ call assert_equal(['e'], getbufline(b, 5))
++ call assert_equal([], getbufline(b, 6))
++ exe "bwipe! " . b
++ endfunc
+*** ../vim-8.1.0036/src/testdir/test_edit.vim 2018-06-04 20:34:07.607373577 +0200
+--- src/testdir/test_edit.vim 2018-06-06 20:58:47.740807362 +0200
+***************
+*** 527,533 ****
+ " Tab in completion mode
+ let path=expand("%:p:h")
+ new
+! call setline(1, [path."/", ''])
+ call feedkeys("Arunt\<c-x>\<c-f>\<tab>\<cr>\<esc>", 'tnix')
+ call assert_match('runtest\.vim', getline(1))
+ %d
+--- 527,533 ----
+ " Tab in completion mode
+ let path=expand("%:p:h")
+ new
+! call setline(1, [path. "/", ''])
+ call feedkeys("Arunt\<c-x>\<c-f>\<tab>\<cr>\<esc>", 'tnix')
+ call assert_match('runtest\.vim', getline(1))
+ %d
+*** ../vim-8.1.0036/src/version.c 2018-06-06 18:02:31.402773772 +0200
+--- src/version.c 2018-06-06 21:00:46.040701324 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 37,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+16. Have your coworkers address you by your wrestling name, Rock Hard Kim.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0038 b/data/vim/patches/8.1.0038
new file mode 100644
index 000000000..323476c14
--- /dev/null
+++ b/data/vim/patches/8.1.0038
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0038
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0038
+Problem: Popup test causes Vim to exit.
+Solution: Disable the broken part of the test for now.
+Files: src/testdir/test_popup.vim
+
+
+*** ../vim-8.1.0037/src/testdir/test_popup.vim 2018-05-08 22:37:19.000000000 +0200
+--- src/testdir/test_popup.vim 2018-06-07 15:17:15.202630184 +0200
+***************
+*** 247,252 ****
+--- 247,256 ----
+ iunmap <F5>
+ endfunc
+
++ " TODO: Fix what breaks after this line.
++ " - Do not use "q!", it may exit Vim if there is an error
++ finish
++
+ func Test_noinsert_complete()
+ function! s:complTest1() abort
+ call complete(1, ['source', 'soundfold'])
+*** ../vim-8.1.0037/src/version.c 2018-06-06 21:03:57.780523901 +0200
+--- src/version.c 2018-06-07 15:18:16.722616394 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 38,
+ /**/
+
+--
+In many of the more relaxed civilizations on the Outer Eastern Rim of the
+Galaxy, "The Hitchhiker's Guide to the Galaxy" has already supplanted the
+great "Encyclopedia Galactica" as the standard repository of all knowledge
+and wisdom, for though it has many omissions and contains much that is
+apocryphal, or at least wildly inaccurate, it scores over the older, more
+pedestrian work in two important respects.
+First, it is slightly cheaper; and second, it has the words "DON'T PANIC"
+inscribed in large friendly letters on its cover.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0039 b/data/vim/patches/8.1.0039
new file mode 100644
index 000000000..29988ae68
--- /dev/null
+++ b/data/vim/patches/8.1.0039
@@ -0,0 +1,306 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0039
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0039
+Problem: Cannot easily delete lines in another buffer.
+Solution: Add deletebufline().
+Files: runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test_bufline.vim
+
+
+*** ../vim-8.1.0038/runtime/doc/eval.txt 2018-06-06 21:03:57.776523905 +0200
+--- runtime/doc/eval.txt 2018-06-07 18:13:41.137548220 +0200
+***************
+*** 2110,2115 ****
+--- 2110,2117 ----
+ cursor({list}) Number move cursor to position in {list}
+ deepcopy({expr} [, {noref}]) any make a full copy of {expr}
+ delete({fname} [, {flags}]) Number delete the file or directory {fname}
++ deletebufline({expr}, {first}[, {last}])
++ Number delete lines from buffer {expr}
+ did_filetype() Number |TRUE| if FileType autocmd event used
+ diff_filler({lnum}) Number diff filler lines about {lnum}
+ diff_hlID({lnum}, {col}) Number diff highlighting at {lnum}/{col}
+***************
+*** 3517,3524 ****
+ successful and -1 when the deletion failed or partly failed.
+
+ Use |remove()| to delete an item from a |List|.
+! To delete a line from the buffer use |:delete|. Use |:exe|
+! when the line number is in a variable.
+
+ *did_filetype()*
+ did_filetype() Returns |TRUE| when autocommands are being executed and the
+--- 3519,3537 ----
+ successful and -1 when the deletion failed or partly failed.
+
+ Use |remove()| to delete an item from a |List|.
+! To delete a line from the buffer use |:delete| or
+! |deletebufline()|.
+!
+! deletebufline({expr}, {first}[, {last}]) *deletebufline()*
+! Delete lines {first} to {last} (inclusive) from buffer {expr}.
+! If {last} is omitted then delete line {first} only.
+! On success 0 is returned, on failure 1 is returned.
+!
+! For the use of {expr}, see |bufname()| above.
+!
+! {first} and {last} are used like with |setline()|. Note that
+! when using |line()| this refers to the current buffer. Use "$"
+! to refer to the last line in buffer {expr}.
+
+ *did_filetype()*
+ did_filetype() Returns |TRUE| when autocommands are being executed and the
+*** ../vim-8.1.0038/src/evalfunc.c 2018-06-06 21:03:57.780523901 +0200
+--- src/evalfunc.c 2018-06-07 18:06:46.657672665 +0200
+***************
+*** 125,130 ****
+--- 125,131 ----
+ static void f_cursor(typval_T *argsvars, typval_T *rettv);
+ static void f_deepcopy(typval_T *argvars, typval_T *rettv);
+ static void f_delete(typval_T *argvars, typval_T *rettv);
++ static void f_deletebufline(typval_T *argvars, typval_T *rettv);
+ static void f_did_filetype(typval_T *argvars, typval_T *rettv);
+ static void f_diff_filler(typval_T *argvars, typval_T *rettv);
+ static void f_diff_hlID(typval_T *argvars, typval_T *rettv);
+***************
+*** 577,582 ****
+--- 578,584 ----
+ {"cursor", 1, 3, f_cursor},
+ {"deepcopy", 1, 2, f_deepcopy},
+ {"delete", 1, 2, f_delete},
++ {"deletebufline", 2, 3, f_deletebufline},
+ {"did_filetype", 0, 0, f_did_filetype},
+ {"diff_filler", 1, 1, f_diff_filler},
+ {"diff_hlID", 2, 2, f_diff_hlID},
+***************
+*** 1210,1215 ****
+--- 1212,1235 ----
+ }
+
+ /*
++ * If there is a window for "curbuf", make it the current window.
++ */
++ static void
++ find_win_for_curbuf(void)
++ {
++ wininfo_T *wip;
++
++ for (wip = curbuf->b_wininfo; wip != NULL; wip = wip->wi_next)
++ {
++ if (wip->wi_win != NULL)
++ {
++ curwin = wip->wi_win;
++ break;
++ }
++ }
++ }
++
++ /*
+ * Set line or list of lines in buffer "buf".
+ */
+ static void
+***************
+*** 1241,1259 ****
+
+ if (!is_curbuf)
+ {
+- wininfo_T *wip;
+-
+ curbuf_save = curbuf;
+ curwin_save = curwin;
+ curbuf = buf;
+! for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
+! {
+! if (wip->wi_win != NULL)
+! {
+! curwin = wip->wi_win;
+! break;
+! }
+! }
+ }
+
+ if (append)
+--- 1261,1270 ----
+
+ if (!is_curbuf)
+ {
+ curbuf_save = curbuf;
+ curwin_save = curwin;
+ curbuf = buf;
+! find_win_for_curbuf();
+ }
+
+ if (append)
+***************
+*** 2808,2813 ****
+--- 2819,2911 ----
+ }
+
+ /*
++ * "deletebufline()" function
++ */
++ static void
++ f_deletebufline(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ buf_T *buf;
++ linenr_T first, last;
++ linenr_T lnum;
++ long count;
++ int is_curbuf;
++ buf_T *curbuf_save = NULL;
++ win_T *curwin_save = NULL;
++ tabpage_T *tp;
++ win_T *wp;
++
++ buf = get_buf_tv(&argvars[0], FALSE);
++ if (buf == NULL)
++ {
++ rettv->vval.v_number = 1; /* FAIL */
++ return;
++ }
++ is_curbuf = buf == curbuf;
++
++ first = get_tv_lnum_buf(&argvars[1], buf);
++ if (argvars[2].v_type != VAR_UNKNOWN)
++ last = get_tv_lnum_buf(&argvars[2], buf);
++ else
++ last = first;
++
++ if (buf->b_ml.ml_mfp == NULL || first < 1
++ || first > buf->b_ml.ml_line_count || last < first)
++ {
++ rettv->vval.v_number = 1; /* FAIL */
++ return;
++ }
++
++ if (!is_curbuf)
++ {
++ curbuf_save = curbuf;
++ curwin_save = curwin;
++ curbuf = buf;
++ find_win_for_curbuf();
++ }
++ if (last > curbuf->b_ml.ml_line_count)
++ last = curbuf->b_ml.ml_line_count;
++ count = last - first + 1;
++
++ // When coming here from Insert mode, sync undo, so that this can be
++ // undone separately from what was previously inserted.
++ if (u_sync_once == 2)
++ {
++ u_sync_once = 1; // notify that u_sync() was called
++ u_sync(TRUE);
++ }
++
++ if (u_save(first - 1, last + 1) == FAIL)
++ {
++ rettv->vval.v_number = 1; /* FAIL */
++ return;
++ }
++
++ for (lnum = first; lnum <= last; ++lnum)
++ ml_delete(first, TRUE);
++
++ FOR_ALL_TAB_WINDOWS(tp, wp)
++ if (wp->w_buffer == buf)
++ {
++ if (wp->w_cursor.lnum > last)
++ wp->w_cursor.lnum -= count;
++ else if (wp->w_cursor.lnum> first)
++ wp->w_cursor.lnum = first;
++ if (wp->w_cursor.lnum > wp->w_buffer->b_ml.ml_line_count)
++ wp->w_cursor.lnum = wp->w_buffer->b_ml.ml_line_count;
++ }
++ check_cursor_col();
++ deleted_lines_mark(first, count);
++
++ if (!is_curbuf)
++ {
++ curbuf = curbuf_save;
++ curwin = curwin_save;
++ }
++ }
++
++ /*
+ * "did_filetype()" function
+ */
+ static void
+*** ../vim-8.1.0038/src/testdir/test_bufline.vim 2018-06-06 21:03:57.780523901 +0200
+--- src/testdir/test_bufline.vim 2018-06-07 18:06:46.657672665 +0200
+***************
+*** 1,4 ****
+! " Tests for setbufline(), getbufline(), appendbufline()
+
+ source shared.vim
+
+--- 1,4 ----
+! " Tests for setbufline(), getbufline(), appendbufline(), deletebufline()
+
+ source shared.vim
+
+***************
+*** 90,92 ****
+--- 90,114 ----
+ call assert_equal([], getbufline(b, 6))
+ exe "bwipe! " . b
+ endfunc
++
++ func Test_deletebufline()
++ new
++ let b = bufnr('%')
++ call setline(1, ['aaa', 'bbb', 'ccc'])
++ hide
++ call assert_equal(0, deletebufline(b, 2))
++ call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2))
++ call assert_equal(0, deletebufline(b, 2, 8))
++ call assert_equal(['aaa'], getbufline(b, 1, 2))
++ exe "bd!" b
++ call assert_equal(1, deletebufline(b, 1))
++
++ split Xtest
++ call setline(1, ['a', 'b', 'c'])
++ let b = bufnr('%')
++ wincmd w
++ call assert_equal(1, deletebufline(b, 4))
++ call assert_equal(0, deletebufline(b, 1))
++ call assert_equal(['b', 'c'], getbufline(b, 1, 2))
++ exe "bwipe! " . b
++ endfunc
+*** ../vim-8.1.0038/src/version.c 2018-06-07 15:18:36.826611722 +0200
+--- src/version.c 2018-06-07 18:07:51.517608846 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 39,
+ /**/
+
+--
+Now it is such a bizarrely improbable coincidence that anything as
+mind-bogglingly useful as the Babel fish could have evolved purely by chance
+that some thinkers have chosen to see it as a final and clinching proof of the
+NON-existence of God.
+The argument goes something like this: 'I refuse to prove that I exist,' says
+God, 'for proof denies faith, and without faith I am nothing.'
+'But,' says Man, 'the Babel fish is a dead giveaway, isn't it? It could not
+have evolved by chance. It proves you exist, and so therefore, by your own
+arguments, you don't. QED.'
+'Oh dear,' says God, 'I hadn't thought of that,' and promptly vanishes in a
+puff of logic.
+'Oh, that was easy,' says Man, and for an encore goes on to prove that black
+is white and gets himself killed on the next pedestrian crossing.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0040 b/data/vim/patches/8.1.0040
new file mode 100644
index 000000000..aa6d44f8a
--- /dev/null
+++ b/data/vim/patches/8.1.0040
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0040
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0040
+Problem: Warnings from 64-bit compiler.
+Solution: Add type casts. (Mike Williams)
+Files: src/edit.c
+
+
+*** ../vim-8.1.0039/src/edit.c 2018-06-06 18:02:31.402773772 +0200
+--- src/edit.c 2018-06-10 13:11:02.468619199 +0200
+***************
+*** 1894,1900 ****
+ || Insstart_orig.col != (int)STRLEN(prompt))
+ {
+ Insstart.lnum = curwin->w_cursor.lnum;
+! Insstart.col = STRLEN(prompt);
+ Insstart_orig = Insstart;
+ Insstart_textlen = Insstart.col;
+ Insstart_blank_vcol = MAXCOL;
+--- 1894,1900 ----
+ || Insstart_orig.col != (int)STRLEN(prompt))
+ {
+ Insstart.lnum = curwin->w_cursor.lnum;
+! Insstart.col = (int)STRLEN(prompt);
+ Insstart_orig = Insstart;
+ Insstart_textlen = Insstart.col;
+ Insstart_blank_vcol = MAXCOL;
+***************
+*** 1904,1910 ****
+ if (cmdchar_todo == 'A')
+ coladvance((colnr_T)MAXCOL);
+ if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt))
+! curwin->w_cursor.col = STRLEN(prompt);
+ /* Make sure the cursor is in a valid position. */
+ check_cursor();
+ }
+--- 1904,1910 ----
+ if (cmdchar_todo == 'A')
+ coladvance((colnr_T)MAXCOL);
+ if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt))
+! curwin->w_cursor.col = (int)STRLEN(prompt);
+ /* Make sure the cursor is in a valid position. */
+ check_cursor();
+ }
+*** ../vim-8.1.0039/src/version.c 2018-06-07 18:17:42.278227523 +0200
+--- src/version.c 2018-06-10 13:12:46.188502730 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 40,
+ /**/
+
+--
+The technology involved in making anything invisible is so infinitely
+complex that nine hundred and ninety-nine billion, nine hundred and
+ninety-nine million, nine hundred and ninety-nine thousand, nine hundred
+and ninety-nine times out of a trillion it is much simpler and more
+effective just to take the thing away and do without it.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0041 b/data/vim/patches/8.1.0041
new file mode 100644
index 000000000..a244d05d1
--- /dev/null
+++ b/data/vim/patches/8.1.0041
@@ -0,0 +1,107 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0041
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0041
+Problem: Attribute "width" missing from python window attribute list.
+Solution: Add the item. (Ken Takata) Order the list like the items are used
+ in the WindowAttr() function.
+Files: src/if_py_both.h, src/testdir/test86.ok, src/testdir/test87.ok
+
+
+*** ../vim-8.1.0040/src/if_py_both.h 2018-05-15 22:30:34.000000000 +0200
+--- src/if_py_both.h 2018-06-10 13:46:57.656741596 +0200
+***************
+*** 3836,3844 ****
+ else
+ return firstwin;
+ }
+ static char *WindowAttrs[] = {
+! "buffer", "cursor", "height", "vars", "options", "number", "row", "col",
+! "tabpage", "valid",
+ NULL
+ };
+
+--- 3836,3855 ----
+ else
+ return firstwin;
+ }
++
++ // Use the same order as in the WindowAttr() function.
+ static char *WindowAttrs[] = {
+! "buffer",
+! "cursor",
+! "height",
+! "row",
+! "width",
+! "col",
+! "vars",
+! "options",
+! "number",
+! "tabpage",
+! "valid",
+ NULL
+ };
+
+*** ../vim-8.1.0040/src/testdir/test86.ok 2017-11-09 19:53:22.000000000 +0100
+--- src/testdir/test86.ok 2018-06-10 13:54:16.580100057 +0200
+***************
+*** 443,449 ****
+ vim.current.tabpage:TabPage:True
+ current:__dir__,__members__,buffer,line,range,tabpage,window
+ buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars
+! window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
+ tabpage:__dir__,__members__,number,valid,vars,window,windows
+ range:__dir__,__members__,append,end,start
+ dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+--- 443,449 ----
+ vim.current.tabpage:TabPage:True
+ current:__dir__,__members__,buffer,line,range,tabpage,window
+ buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars
+! window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width
+ tabpage:__dir__,__members__,number,valid,vars,window,windows
+ range:__dir__,__members__,append,end,start
+ dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+*** ../vim-8.1.0040/src/testdir/test87.ok 2017-11-09 19:53:46.000000000 +0100
+--- src/testdir/test87.ok 2018-06-10 13:55:00.692036859 +0200
+***************
+*** 443,449 ****
+ vim.current.tabpage:TabPage:True
+ current:__dir__,buffer,line,range,tabpage,window
+ buffer:__dir__,append,mark,name,number,options,range,valid,vars
+! window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
+ tabpage:__dir__,number,valid,vars,window,windows
+ range:__dir__,append,end,start
+ dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+--- 443,449 ----
+ vim.current.tabpage:TabPage:True
+ current:__dir__,buffer,line,range,tabpage,window
+ buffer:__dir__,append,mark,name,number,options,range,valid,vars
+! window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width
+ tabpage:__dir__,number,valid,vars,window,windows
+ range:__dir__,append,end,start
+ dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+*** ../vim-8.1.0040/src/version.c 2018-06-10 13:12:52.176496009 +0200
+--- src/version.c 2018-06-10 13:51:40.632325004 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 41,
+ /**/
+
+--
+'Well, here's something to occupy you and keep your mind off things.'
+'It won't work, I have an exceptionally large mind.'
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0042 b/data/vim/patches/8.1.0042
new file mode 100644
index 000000000..ad8f947cf
--- /dev/null
+++ b/data/vim/patches/8.1.0042
@@ -0,0 +1,110 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0042
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0042
+Problem: If omni completion opens a window Insert mode is stopped.
+ (Hirohito Higashi)
+Solution: Only set stop_insert_mode in a prompt buffer window.
+Files: src/window.c
+
+
+*** ../vim-8.1.0041/src/window.c 2018-06-06 18:02:31.402773772 +0200
+--- src/window.c 2018-06-10 14:33:03.071395777 +0200
+***************
+*** 2107,2123 ****
+ static void
+ leaving_window(win_T *win)
+ {
+ // When leaving a prompt window stop Insert mode and perhaps restart
+ // it when entering that window again.
+ win->w_buffer->b_prompt_insert = restart_edit;
+ restart_edit = NUL;
+
+ // When leaving the window (or closing the window) was done from a
+! // callback we need to break out of the Insert mode loop.
+ if (State & INSERT)
+ {
+ stop_insert_mode = TRUE;
+! if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert == NUL)
+ win->w_buffer->b_prompt_insert = 'A';
+ }
+ }
+--- 2107,2128 ----
+ static void
+ leaving_window(win_T *win)
+ {
++ // Only matters for a prompt window.
++ if (!bt_prompt(win->w_buffer))
++ return;
++
+ // When leaving a prompt window stop Insert mode and perhaps restart
+ // it when entering that window again.
+ win->w_buffer->b_prompt_insert = restart_edit;
+ restart_edit = NUL;
+
+ // When leaving the window (or closing the window) was done from a
+! // callback we need to break out of the Insert mode loop and restart Insert
+! // mode when entering the window again.
+ if (State & INSERT)
+ {
+ stop_insert_mode = TRUE;
+! if (win->w_buffer->b_prompt_insert == NUL)
+ win->w_buffer->b_prompt_insert = 'A';
+ }
+ }
+***************
+*** 2125,2136 ****
+ static void
+ entering_window(win_T *win)
+ {
+ // When switching to a prompt buffer that was in Insert mode, don't stop
+ // Insert mode, it may have been set in leaving_window().
+! if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert != NUL)
+ stop_insert_mode = FALSE;
+
+! // When entering the prompt window may restart Insert mode.
+ restart_edit = win->w_buffer->b_prompt_insert;
+ }
+ #endif
+--- 2130,2146 ----
+ static void
+ entering_window(win_T *win)
+ {
++ // Only matters for a prompt window.
++ if (!bt_prompt(win->w_buffer))
++ return;
++
+ // When switching to a prompt buffer that was in Insert mode, don't stop
+ // Insert mode, it may have been set in leaving_window().
+! if (win->w_buffer->b_prompt_insert != NUL)
+ stop_insert_mode = FALSE;
+
+! // When entering the prompt window restart Insert mode if we were in Insert
+! // mode when we left it.
+ restart_edit = win->w_buffer->b_prompt_insert;
+ }
+ #endif
+*** ../vim-8.1.0041/src/version.c 2018-06-10 13:55:48.527949068 +0200
+--- src/version.c 2018-06-10 14:38:47.846545314 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 42,
+ /**/
+
+--
+The only backup you need is the one that you didn't have time for.
+(Murphy)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0043 b/data/vim/patches/8.1.0043
new file mode 100644
index 000000000..3a03439a6
--- /dev/null
+++ b/data/vim/patches/8.1.0043
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0043
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0043
+Problem: ++bad argument of :edit does not work properly.
+Solution: Return FAIL from get_bad_opt() only when there is no valid
+ argument. (Dominique Pelle, Christian Brabandt, closes #2966,
+ closes #2947)
+Files: src/ex_docmd.c, src/testdir/test_plus_arg_edit.vim
+
+
+*** ../vim-8.1.0042/src/ex_docmd.c 2018-06-06 09:11:07.257357317 +0200
+--- src/ex_docmd.c 2018-06-12 12:34:07.224425589 +0200
+***************
+*** 5318,5324 ****
+ eap->bad_char = BAD_DROP;
+ else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL)
+ eap->bad_char = *p;
+! return FAIL;
+ }
+ #endif
+
+--- 5318,5326 ----
+ eap->bad_char = BAD_DROP;
+ else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL)
+ eap->bad_char = *p;
+! else
+! return FAIL;
+! return OK;
+ }
+ #endif
+
+*** ../vim-8.1.0042/src/testdir/test_plus_arg_edit.vim 2017-11-21 11:34:15.000000000 +0100
+--- src/testdir/test_plus_arg_edit.vim 2018-06-12 12:34:07.228425586 +0200
+***************
+*** 1,10 ****
+ " Tests for complicated + argument to :edit command
+ function Test_edit()
+! call writefile(["foo|bar"], "Xfile1")
+! call writefile(["foo/bar"], "Xfile2")
+ edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w
+ call assert_equal(["fooPIPEbar"], readfile("Xfile1"))
+ call assert_equal(["fooSLASHbar"], readfile("Xfile2"))
+ call delete('Xfile1')
+ call delete('Xfile2')
+ endfunction
+--- 1,38 ----
+ " Tests for complicated + argument to :edit command
+ function Test_edit()
+! call writefile(["foo|bar"], "Xfile1")
+! call writefile(["foo/bar"], "Xfile2")
+ edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w
+ call assert_equal(["fooPIPEbar"], readfile("Xfile1"))
+ call assert_equal(["fooSLASHbar"], readfile("Xfile2"))
+ call delete('Xfile1')
+ call delete('Xfile2')
+ endfunction
++
++ func Test_edit_bad()
++ if !has('multi_byte')
++ finish
++ endif
++
++ " Test loading a utf8 file with bad utf8 sequences.
++ call writefile(["[\xff][\xc0][\xe2\x89\xf0][\xc2\xc2]"], "Xfile")
++ new
++
++ " Without ++bad=..., the default behavior is like ++bad=?
++ e! ++enc=utf8 Xfile
++ call assert_equal('[?][?][???][??]', getline(1))
++
++ e! ++enc=utf8 ++bad=_ Xfile
++ call assert_equal('[_][_][___][__]', getline(1))
++
++ e! ++enc=utf8 ++bad=drop Xfile
++ call assert_equal('[][][][]', getline(1))
++
++ e! ++enc=utf8 ++bad=keep Xfile
++ call assert_equal("[\xff][\xc0][\xe2\x89\xf0][\xc2\xc2]", getline(1))
++
++ call assert_fails('e! ++enc=utf8 ++bad=foo Xfile', 'E474:')
++
++ bw!
++ call delete('Xfile')
++ endfunc
+*** ../vim-8.1.0042/src/version.c 2018-06-10 14:39:47.022412206 +0200
+--- src/version.c 2018-06-12 12:37:19.442760084 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 43,
+ /**/
+
+--
+Have you heard about the new Beowulf cluster? It's so fast, it executes
+an infinite loop in 6 seconds.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0044 b/data/vim/patches/8.1.0044
new file mode 100644
index 000000000..94cc14c3d
--- /dev/null
+++ b/data/vim/patches/8.1.0044
@@ -0,0 +1,82 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0044
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0044
+Problem: If a test function exists Vim this may go unnoticed.
+Solution: Check for a test funtion quitting Vim. Fix tests that did exit
+ Vim.
+Files: src/testdir/runtest.vim, src/testdir/test_assert.vim
+
+
+*** ../vim-8.1.0043/src/testdir/runtest.vim 2018-04-10 18:56:35.000000000 +0200
+--- src/testdir/runtest.vim 2018-06-12 14:57:06.691409091 +0200
+***************
+*** 124,130 ****
+--- 124,133 ----
+ exe 'call ' . a:test
+ else
+ try
++ let s:test = a:test
++ au VimLeavePre * call EarlyExit(s:test)
+ exe 'call ' . a:test
++ au! VimLeavePre
+ catch /^\cskipped/
+ call add(s:messages, ' Skipped')
+ call add(s:skipped, 'SKIPPED ' . a:test . ': ' . substitute(v:exception, '^\S*\s\+', '', ''))
+***************
+*** 174,179 ****
+--- 177,191 ----
+ endif
+ endfunc
+
++ func EarlyExit(test)
++ " It's OK for the test we use to test the quit detection.
++ if a:test != 'Test_zz_quit_detected()'
++ call add(v:errors, 'Test caused Vim to exit: ' . a:test)
++ endif
++
++ call FinishTesting()
++ endfunc
++
+ " This function can be called by a test if it wants to abort testing.
+ func FinishTesting()
+ call AfterTheTest()
+*** ../vim-8.1.0043/src/testdir/test_assert.vim 2018-04-28 16:44:49.000000000 +0200
+--- src/testdir/test_assert.vim 2018-06-12 13:26:02.775142877 +0200
+***************
+*** 198,200 ****
+--- 198,206 ----
+ smile
+ sleep 300m
+ endfunc
++
++ " Must be last.
++ func Test_zz_quit_detected()
++ " Verify that if a test function ends Vim the test script detects this.
++ quit
++ endfunc
+*** ../vim-8.1.0043/src/version.c 2018-06-12 12:39:37.593152427 +0200
+--- src/version.c 2018-06-12 13:45:44.070675020 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 44,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+36. You miss more than five meals a week downloading the latest games from
+ Apogee.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0045 b/data/vim/patches/8.1.0045
new file mode 100644
index 000000000..b889adae6
--- /dev/null
+++ b/data/vim/patches/8.1.0045
@@ -0,0 +1,357 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0045
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0045 (after 8.1.0038)
+Problem: Popup test isn't run completely.
+Solution: Remove "finish". Clean up function definitions.
+Files: src/testdir/test_popup.vim
+
+
+*** ../vim-8.1.0044/src/testdir/test_popup.vim 2018-06-07 15:18:36.826611722 +0200
+--- src/testdir/test_popup.vim 2018-06-12 15:14:43.418467569 +0200
+***************
+*** 6,12 ****
+ let g:months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
+ let g:setting = ''
+
+! func! ListMonths()
+ if g:setting != ''
+ exe ":set" g:setting
+ endif
+--- 6,12 ----
+ let g:months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
+ let g:setting = ''
+
+! func ListMonths()
+ if g:setting != ''
+ exe ":set" g:setting
+ endif
+***************
+*** 19,25 ****
+ return ''
+ endfunc
+
+! func! Test_popup_complete2()
+ " Although the popupmenu is not visible, this does not mean completion mode
+ " has ended. After pressing <f5> to complete the currently typed char, Vim
+ " still stays in the first state of the completion (:h ins-completion-menu),
+--- 19,25 ----
+ return ''
+ endfunc
+
+! func Test_popup_complete2()
+ " Although the popupmenu is not visible, this does not mean completion mode
+ " has ended. After pressing <f5> to complete the currently typed char, Vim
+ " still stays in the first state of the completion (:h ins-completion-menu),
+***************
+*** 34,42 ****
+ call assert_equal(["Dece", "", "December2015"], getline(1,3))
+ %d
+ bw!
+! endfu
+
+! func! Test_popup_complete()
+ new
+ inoremap <f5> <c-r>=ListMonths()<cr>
+
+--- 34,42 ----
+ call assert_equal(["Dece", "", "December2015"], getline(1,3))
+ %d
+ bw!
+! endfunc
+
+! func Test_popup_complete()
+ new
+ inoremap <f5> <c-r>=ListMonths()<cr>
+
+***************
+*** 215,224 ****
+ call feedkeys("aM\<f5>\<enter>\<esc>", 'tx')
+ call assert_equal(["March", "M", "March"], getline(1,4))
+ %d
+! endfu
+
+
+! func! Test_popup_completion_insertmode()
+ new
+ inoremap <F5> <C-R>=ListMonths()<CR>
+
+--- 215,224 ----
+ call feedkeys("aM\<f5>\<enter>\<esc>", 'tx')
+ call assert_equal(["March", "M", "March"], getline(1,4))
+ %d
+! endfunc
+
+
+! func Test_popup_completion_insertmode()
+ new
+ inoremap <F5> <C-R>=ListMonths()<CR>
+
+***************
+*** 247,266 ****
+ iunmap <F5>
+ endfunc
+
+- " TODO: Fix what breaks after this line.
+- " - Do not use "q!", it may exit Vim if there is an error
+- finish
+-
+ func Test_noinsert_complete()
+! function! s:complTest1() abort
+ call complete(1, ['source', 'soundfold'])
+ return ''
+! endfunction
+
+! function! s:complTest2() abort
+ call complete(1, ['source', 'soundfold'])
+ return ''
+! endfunction
+
+ new
+ set completeopt+=noinsert
+--- 247,262 ----
+ iunmap <F5>
+ endfunc
+
+ func Test_noinsert_complete()
+! func! s:complTest1() abort
+ call complete(1, ['source', 'soundfold'])
+ return ''
+! endfunc
+
+! func! s:complTest2() abort
+ call complete(1, ['source', 'soundfold'])
+ return ''
+! endfunc
+
+ new
+ set completeopt+=noinsert
+***************
+*** 281,289 ****
+ endfunc
+
+ func Test_compl_vim_cmds_after_register_expr()
+! function! s:test_func()
+ return 'autocmd '
+! endfunction
+ augroup AAAAA_Group
+ au!
+ augroup END
+--- 277,285 ----
+ endfunc
+
+ func Test_compl_vim_cmds_after_register_expr()
+! func! s:test_func()
+ return 'autocmd '
+! endfunc
+ augroup AAAAA_Group
+ au!
+ augroup END
+***************
+*** 330,336 ****
+ else
+ return ['twodef', 'twoDEF']
+ endif
+! endfunction
+
+ " Test that nothing happens if the 'completefunc' opens
+ " a new window (no completion, no crash)
+--- 326,332 ----
+ else
+ return ['twodef', 'twoDEF']
+ endif
+! endfunc
+
+ " Test that nothing happens if the 'completefunc' opens
+ " a new window (no completion, no crash)
+***************
+*** 407,413 ****
+ q!
+ endfunc
+
+! function UndoComplete()
+ call complete(1, ['January', 'February', 'March',
+ \ 'April', 'May', 'June', 'July', 'August', 'September',
+ \ 'October', 'November', 'December'])
+--- 403,409 ----
+ q!
+ endfunc
+
+! func UndoComplete()
+ call complete(1, ['January', 'February', 'March',
+ \ 'April', 'May', 'June', 'July', 'August', 'September',
+ \ 'October', 'November', 'December'])
+***************
+*** 444,450 ****
+ q!
+ endfunc
+
+! function! DummyCompleteFive(findstart, base)
+ if a:findstart
+ return 0
+ else
+--- 440,446 ----
+ q!
+ endfunc
+
+! func DummyCompleteFive(findstart, base)
+ if a:findstart
+ return 0
+ else
+***************
+*** 489,495 ****
+ q!
+ endfunc
+
+! function! DummyCompleteSix()
+ call complete(1, ['Hello', 'World'])
+ return ''
+ endfunction
+--- 485,491 ----
+ q!
+ endfunc
+
+! func DummyCompleteSix()
+ call complete(1, ['Hello', 'World'])
+ return ''
+ endfunction
+***************
+*** 577,583 ****
+ bwipe!
+ endfunc
+
+! fun MessCompleteMonths()
+ for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep")
+ call complete_add(m)
+ if complete_check()
+--- 573,579 ----
+ bwipe!
+ endfunc
+
+! func MessCompleteMonths()
+ for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep")
+ call complete_add(m)
+ if complete_check()
+***************
+*** 585,598 ****
+ endif
+ endfor
+ return []
+! endfun
+
+! fun MessCompleteMore()
+ call complete(1, split("Oct Nov Dec"))
+ return []
+! endfun
+
+! fun MessComplete(findstart, base)
+ if a:findstart
+ let line = getline('.')
+ let start = col('.') - 1
+--- 581,594 ----
+ endif
+ endfor
+ return []
+! endfunc
+
+! func MessCompleteMore()
+ call complete(1, split("Oct Nov Dec"))
+ return []
+! endfunc
+
+! func MessComplete(findstart, base)
+ if a:findstart
+ let line = getline('.')
+ let start = col('.') - 1
+***************
+*** 605,611 ****
+ call MessCompleteMore()
+ return []
+ endif
+! endf
+
+ func Test_complete_func_mess()
+ " Calling complete() after complete_add() in 'completefunc' is wrong, but it
+--- 601,607 ----
+ call MessCompleteMore()
+ return []
+ endif
+! endfunc
+
+ func Test_complete_func_mess()
+ " Calling complete() after complete_add() in 'completefunc' is wrong, but it
+***************
+*** 835,841 ****
+ bwipe!
+ endfunc
+
+! fun! Test_complete_o_tab()
+ let s:o_char_pressed = 0
+
+ fun! s:act_on_text_changed()
+--- 831,837 ----
+ bwipe!
+ endfunc
+
+! func Test_complete_o_tab()
+ let s:o_char_pressed = 0
+
+ fun! s:act_on_text_changed()
+***************
+*** 843,849 ****
+ let s:o_char_pressed = 0
+ call feedkeys("\<c-x>\<c-n>", 'i')
+ endif
+! endf
+
+ set completeopt=menu,noselect
+ new
+--- 839,845 ----
+ let s:o_char_pressed = 0
+ call feedkeys("\<c-x>\<c-n>", 'i')
+ endif
+! endfunc
+
+ set completeopt=menu,noselect
+ new
+***************
+*** 862,868 ****
+ bwipe!
+ set completeopt&
+ delfunc s:act_on_text_changed
+! endf
+
+
+ " vim: shiftwidth=2 sts=2 expandtab
+--- 858,864 ----
+ bwipe!
+ set completeopt&
+ delfunc s:act_on_text_changed
+! endfunc
+
+
+ " vim: shiftwidth=2 sts=2 expandtab
+*** ../vim-8.1.0044/src/version.c 2018-06-12 14:58:35.566840630 +0200
+--- src/version.c 2018-06-12 15:21:43.280832536 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 45,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+37. You start looking for hot HTML addresses in public restrooms.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0046 b/data/vim/patches/8.1.0046
new file mode 100644
index 000000000..2b9682b93
--- /dev/null
+++ b/data/vim/patches/8.1.0046
@@ -0,0 +1,256 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0046
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0046
+Problem: Loading a session file fails if 'winheight' is a big number.
+Solution: Set 'minwinheight' to zero at first. Don't give an error when
+ setting 'minwinheight' while 'winheight' is a big number.
+ Fix using vertical splits. Fix setting 'minwinwidth'.
+ (closes #2970)
+Files: src/testdir/test_mksession.vim, src/option.c, src/window.c,
+ src/proto/window.pro
+
+
+*** ../vim-8.1.0045/src/testdir/test_mksession.vim 2018-03-09 21:25:55.000000000 +0100
+--- src/testdir/test_mksession.vim 2018-06-12 16:38:40.344105918 +0200
+***************
+*** 106,118 ****
+
+ func Test_mksession_winheight()
+ new
+! set winheight=10 winminheight=2
+ mksession! Xtest_mks.out
+ source Xtest_mks.out
+
+ call delete('Xtest_mks.out')
+ endfunc
+
+ func Test_mksession_arglist()
+ argdel *
+ next file1 file2 file3 file4
+--- 106,127 ----
+
+ func Test_mksession_winheight()
+ new
+! set winheight=10
+! set winminheight=2
+ mksession! Xtest_mks.out
+ source Xtest_mks.out
+
+ call delete('Xtest_mks.out')
+ endfunc
+
++ func Test_mksession_large_winheight()
++ set winheight=999
++ mksession! Xtest_mks_winheight.out
++ set winheight&
++ source Xtest_mks_winheight.out
++ call delete('Xtest_mks_winheight.out')
++ endfunc
++
+ func Test_mksession_arglist()
+ argdel *
+ next file1 file2 file3 file4
+*** ../vim-8.1.0045/src/option.c 2018-06-04 17:28:04.729961269 +0200
+--- src/option.c 2018-06-12 16:34:27.832376913 +0200
+***************
+*** 8796,8801 ****
+--- 8796,8802 ----
+ */
+ if (pp == &p_wh || pp == &p_hh)
+ {
++ // 'winheight' and 'helpheight'
+ if (p_wh < 1)
+ {
+ errmsg = e_positive;
+***************
+*** 8821,8830 ****
+ win_setheight((int)p_hh);
+ }
+ }
+-
+- /* 'winminheight' */
+ else if (pp == &p_wmh)
+ {
+ if (p_wmh < 0)
+ {
+ errmsg = e_positive;
+--- 8822,8830 ----
+ win_setheight((int)p_hh);
+ }
+ }
+ else if (pp == &p_wmh)
+ {
++ // 'winminheight'
+ if (p_wmh < 0)
+ {
+ errmsg = e_positive;
+***************
+*** 8839,8844 ****
+--- 8839,8845 ----
+ }
+ else if (pp == &p_wiw)
+ {
++ // 'winwidth'
+ if (p_wiw < 1)
+ {
+ errmsg = e_positive;
+***************
+*** 8854,8863 ****
+ if (!ONE_WINDOW && curwin->w_width < p_wiw)
+ win_setwidth((int)p_wiw);
+ }
+-
+- /* 'winminwidth' */
+ else if (pp == &p_wmw)
+ {
+ if (p_wmw < 0)
+ {
+ errmsg = e_positive;
+--- 8855,8863 ----
+ if (!ONE_WINDOW && curwin->w_width < p_wiw)
+ win_setwidth((int)p_wiw);
+ }
+ else if (pp == &p_wmw)
+ {
++ // 'winminwidth'
+ if (p_wmw < 0)
+ {
+ errmsg = e_positive;
+***************
+*** 8868,8874 ****
+ errmsg = e_winwidth;
+ p_wmw = p_wiw;
+ }
+! win_setminheight();
+ }
+
+ /* (re)set last window status line */
+--- 8868,8874 ----
+ errmsg = e_winwidth;
+ p_wmw = p_wiw;
+ }
+! win_setminwidth();
+ }
+
+ /* (re)set last window status line */
+*** ../vim-8.1.0045/src/window.c 2018-06-10 14:39:47.022412206 +0200
+--- src/window.c 2018-06-12 16:41:04.447771813 +0200
+***************
+*** 5430,5457 ****
+ }
+
+ /*
+! * Check 'winminheight' for a valid value.
+ */
+ void
+ win_setminheight(void)
+ {
+ int room;
+ int first = TRUE;
+- win_T *wp;
+
+! /* loop until there is a 'winminheight' that is possible */
+ while (p_wmh > 0)
+ {
+! /* TODO: handle vertical splits */
+! room = -p_wh;
+! FOR_ALL_WINDOWS(wp)
+! room += VISIBLE_HEIGHT(wp) - p_wmh;
+! if (room >= 0)
+ break;
+ --p_wmh;
+ if (first)
+ {
+ EMSG(_(e_noroom));
+ first = FALSE;
+ }
+ }
+--- 5430,5481 ----
+ }
+
+ /*
+! * Check 'winminheight' for a valid value and reduce it if needed.
+ */
+ void
+ win_setminheight(void)
+ {
+ int room;
++ int needed;
+ int first = TRUE;
+
+! // loop until there is a 'winminheight' that is possible
+ while (p_wmh > 0)
+ {
+! room = Rows - p_ch;
+! needed = frame_minheight(topframe, NULL);
+! if (room >= needed)
+ break;
+ --p_wmh;
+ if (first)
+ {
+ EMSG(_(e_noroom));
++ first = FALSE;
++ }
++ }
++ }
++
++ /*
++ * Check 'winminwidth' for a valid value and reduce it if needed.
++ */
++ void
++ win_setminwidth(void)
++ {
++ int room;
++ int needed;
++ int first = TRUE;
++
++ // loop until there is a 'winminheight' that is possible
++ while (p_wmw > 0)
++ {
++ room = Columns;
++ needed = frame_minwidth(topframe, NULL);
++ if (room >= needed)
++ break;
++ --p_wmw;
++ if (first)
++ {
++ EMSG(_(e_noroom));
+ first = FALSE;
+ }
+ }
+*** ../vim-8.1.0045/src/proto/window.pro 2018-05-17 13:52:56.000000000 +0200
+--- src/proto/window.pro 2018-06-12 16:34:10.876376437 +0200
+***************
+*** 54,59 ****
+--- 54,60 ----
+ void win_setwidth(int width);
+ void win_setwidth_win(int width, win_T *wp);
+ void win_setminheight(void);
++ void win_setminwidth(void);
+ void win_drag_status_line(win_T *dragwin, int offset);
+ void win_drag_vsep_line(win_T *dragwin, int offset);
+ void set_fraction(win_T *wp);
+*** ../vim-8.1.0045/src/version.c 2018-06-12 15:22:39.640579965 +0200
+--- src/version.c 2018-06-12 16:01:12.917283351 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 46,
+ /**/
+
+--
+He who laughs last, thinks slowest.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0047 b/data/vim/patches/8.1.0047
new file mode 100644
index 000000000..da8bf42f0
--- /dev/null
+++ b/data/vim/patches/8.1.0047
@@ -0,0 +1,93 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0047
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0047
+Problem: No completion for :unlet $VAR.
+Solution: Add completion. (Jason Franklin)
+Files: src/ex_docmd.c, src/testdir/test_unlet.vim
+
+
+*** ../vim-8.1.0046/src/ex_docmd.c 2018-06-12 12:39:37.585152510 +0200
+--- src/ex_docmd.c 2018-06-12 16:59:13.387246272 +0200
+***************
+*** 4056,4063 ****
+--- 4056,4071 ----
+ case CMD_unlet:
+ while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
+ arg = xp->xp_pattern + 1;
++
+ xp->xp_context = EXPAND_USER_VARS;
+ xp->xp_pattern = arg;
++
++ if (*xp->xp_pattern == '$')
++ {
++ xp->xp_context = EXPAND_ENV_VARS;
++ ++xp->xp_pattern;
++ }
++
+ break;
+
+ case CMD_function:
+***************
+*** 11277,11283 ****
+ * winminheight and winminwidth need to be set to avoid an error if the
+ * user has set winheight or winwidth.
+ */
+! if (put_line(fd, "set winminheight=1 winheight=1 winminwidth=1 winwidth=1") == FAIL)
+ return FAIL;
+ if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
+ return FAIL;
+--- 11285,11294 ----
+ * winminheight and winminwidth need to be set to avoid an error if the
+ * user has set winheight or winwidth.
+ */
+! if (put_line(fd, "set winminheight=0") == FAIL
+! || put_line(fd, "set winheight=1") == FAIL
+! || put_line(fd, "set winminwidth=0") == FAIL
+! || put_line(fd, "set winwidth=1") == FAIL)
+ return FAIL;
+ if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
+ return FAIL;
+*** ../vim-8.1.0046/src/testdir/test_unlet.vim 2018-05-13 15:58:22.000000000 +0200
+--- src/testdir/test_unlet.vim 2018-06-12 16:59:13.391246246 +0200
+***************
+*** 45,47 ****
+--- 45,57 ----
+
+ unlet $MUST_NOT_BE_AN_ERROR
+ endfunc
++
++ func Test_unlet_complete()
++ let g:FOOBAR = 1
++ call feedkeys(":unlet g:FOO\t\n", 'tx')
++ call assert_true(!exists('g:FOOBAR'))
++
++ let $FOOBAR = 1
++ call feedkeys(":unlet $FOO\t\n", 'tx')
++ call assert_true(!exists('$FOOBAR') || empty($FOOBAR))
++ endfunc
+*** ../vim-8.1.0046/src/version.c 2018-06-12 16:49:26.366028607 +0200
+--- src/version.c 2018-06-12 17:00:05.590909690 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 47,
+ /**/
+
+--
+Micro$oft: where do you want to go today?
+ Linux: where do you want to go tomorrow?
+ FreeBSD: are you guys coming, or what?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0048 b/data/vim/patches/8.1.0048
new file mode 100644
index 000000000..c8da45f80
--- /dev/null
+++ b/data/vim/patches/8.1.0048
@@ -0,0 +1,111 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0048
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0048
+Problem: vim_str2nr() does not handle numbers close to the maximum.
+Solution: Check for overflow more precisely. (Ken Takata, closes #2746)
+Files: src/charset.c
+
+
+*** ../vim-8.1.0047/src/charset.c 2018-04-25 21:59:10.000000000 +0200
+--- src/charset.c 2018-06-12 17:20:17.692062915 +0200
+***************
+*** 1928,1935 ****
+ while ('0' <= *ptr && *ptr <= '1')
+ {
+ /* avoid ubsan error for overflow */
+! if (un < UVARNUM_MAX / 2)
+! un = 2 * un + (unsigned long)(*ptr - '0');
+ else
+ un = UVARNUM_MAX;
+ ++ptr;
+--- 1928,1935 ----
+ while ('0' <= *ptr && *ptr <= '1')
+ {
+ /* avoid ubsan error for overflow */
+! if (un <= UVARNUM_MAX / 2)
+! un = 2 * un + (uvarnumber_T)(*ptr - '0');
+ else
+ un = UVARNUM_MAX;
+ ++ptr;
+***************
+*** 1943,1949 ****
+ while ('0' <= *ptr && *ptr <= '7')
+ {
+ /* avoid ubsan error for overflow */
+! if (un < UVARNUM_MAX / 8)
+ un = 8 * un + (uvarnumber_T)(*ptr - '0');
+ else
+ un = UVARNUM_MAX;
+--- 1943,1949 ----
+ while ('0' <= *ptr && *ptr <= '7')
+ {
+ /* avoid ubsan error for overflow */
+! if (un <= UVARNUM_MAX / 8)
+ un = 8 * un + (uvarnumber_T)(*ptr - '0');
+ else
+ un = UVARNUM_MAX;
+***************
+*** 1960,1966 ****
+ while (vim_isxdigit(*ptr))
+ {
+ /* avoid ubsan error for overflow */
+! if (un < UVARNUM_MAX / 16)
+ un = 16 * un + (uvarnumber_T)hex2nr(*ptr);
+ else
+ un = UVARNUM_MAX;
+--- 1960,1966 ----
+ while (vim_isxdigit(*ptr))
+ {
+ /* avoid ubsan error for overflow */
+! if (un <= UVARNUM_MAX / 16)
+ un = 16 * un + (uvarnumber_T)hex2nr(*ptr);
+ else
+ un = UVARNUM_MAX;
+***************
+*** 1974,1982 ****
+ /* decimal */
+ while (VIM_ISDIGIT(*ptr))
+ {
+ /* avoid ubsan error for overflow */
+! if (un < UVARNUM_MAX / 10)
+! un = 10 * un + (uvarnumber_T)(*ptr - '0');
+ else
+ un = UVARNUM_MAX;
+ ++ptr;
+--- 1974,1985 ----
+ /* decimal */
+ while (VIM_ISDIGIT(*ptr))
+ {
++ uvarnumber_T digit = (uvarnumber_T)(*ptr - '0');
++
+ /* avoid ubsan error for overflow */
+! if (un < UVARNUM_MAX / 10
+! || (un == UVARNUM_MAX / 10 && digit <= UVARNUM_MAX % 10))
+! un = 10 * un + digit;
+ else
+ un = UVARNUM_MAX;
+ ++ptr;
+*** ../vim-8.1.0047/src/version.c 2018-06-12 17:03:35.949611796 +0200
+--- src/version.c 2018-06-12 17:24:32.210718899 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 48,
+ /**/
+
+--
+Everyone has a photographic memory. Some don't have film.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0049 b/data/vim/patches/8.1.0049
new file mode 100644
index 000000000..79dfbe23a
--- /dev/null
+++ b/data/vim/patches/8.1.0049
@@ -0,0 +1,236 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0049
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0049
+Problem: Shell cannot tell running in a terminal window.
+Solution: Add the VIM_TERMINAL environment variable. (Christian Brabandt)
+Files: runtime/doc/terminal.txt, src/os_unix.c, src/os_win32.c,
+ src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0048/runtime/doc/terminal.txt 2018-05-17 14:49:10.000000000 +0200
+--- runtime/doc/terminal.txt 2018-06-12 17:43:50.152692460 +0200
+***************
+*** 204,210 ****
+ ++rows={height} Use {height} for the terminal window
+ height. If the terminal uses the full
+ Vim height (no window above or below
+! th terminal window) the command line
+ height will be reduced as needed.
+ ++cols={width} Use {width} for the terminal window
+ width. If the terminal uses the full
+--- 204,210 ----
+ ++rows={height} Use {height} for the terminal window
+ height. If the terminal uses the full
+ Vim height (no window above or below
+! the terminal window) the command line
+ height will be reduced as needed.
+ ++cols={width} Use {width} for the terminal window
+ width. If the terminal uses the full
+***************
+*** 243,249 ****
+ You can use `CTRL-W :hide` to close the terminal window and make the buffer
+ hidden, the job keeps running. The `:buffer` command can be used to turn the
+ current window into a terminal window. If there are unsaved changes this
+! fails, use ! to force, as usual.
+
+ To have a background job run without a window, and open the window when it's
+ done, use options like this: >
+--- 243,249 ----
+ You can use `CTRL-W :hide` to close the terminal window and make the buffer
+ hidden, the job keeps running. The `:buffer` command can be used to turn the
+ current window into a terminal window. If there are unsaved changes this
+! fails, use ! to force, as usual.
+
+ To have a background job run without a window, and open the window when it's
+ done, use options like this: >
+***************
+*** 376,381 ****
+--- 376,382 ----
+ COLUMNS number of columns in the terminal initially
+ COLORS number of colors, 't_Co' (256*256*256 in the GUI)
+ VIM_SERVERNAME v:servername
++ VIM_TERMINAL v:version
+
+
+ MS-Windows ~
+*** ../vim-8.1.0048/src/os_unix.c 2018-05-12 17:42:33.000000000 +0200
+--- src/os_unix.c 2018-06-12 17:58:42.928059243 +0200
+***************
+*** 4169,4174 ****
+--- 4169,4175 ----
+ static char envbuf_Lines[20];
+ static char envbuf_Columns[20];
+ static char envbuf_Colors[20];
++ static char envbuf_Version[20];
+ # ifdef FEAT_CLIENTSERVER
+ static char envbuf_Servername[60];
+ # endif
+***************
+*** 4189,4194 ****
+--- 4190,4197 ----
+ setenv("COLUMNS", (char *)envbuf, 1);
+ sprintf((char *)envbuf, "%ld", colors);
+ setenv("COLORS", (char *)envbuf, 1);
++ sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
++ setenv("VIM_TERMINAL", (char *)envbuf, 1);
+ # ifdef FEAT_CLIENTSERVER
+ setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1);
+ # endif
+***************
+*** 4209,4214 ****
+--- 4212,4220 ----
+ putenv(envbuf_Columns);
+ vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors);
+ putenv(envbuf_Colors);
++ vim_snprintf(envbuf_Version, sizeof(envbuf_Version), "VIM_TERMINAL=%ld",
++ get_vim_var_nr(VV_VERSION));
++ putenv(envbuf_Version);
+ # ifdef FEAT_CLIENTSERVER
+ vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername),
+ "VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName);
+*** ../vim-8.1.0048/src/os_win32.c 2018-05-06 17:05:39.000000000 +0200
+--- src/os_win32.c 2018-06-12 18:00:28.031513685 +0200
+***************
+*** 5275,5299 ****
+ }
+ }
+
+- # ifdef FEAT_CLIENTSERVER
+ if (is_terminal)
+ {
+ char_u *servername = get_vim_var_str(VV_SEND_SERVER);
+! size_t lval = STRLEN(servername);
+! size_t n;
+
+! if (ga_grow(gap, (int)(14 + lval + 2)) == OK)
+ {
+ for (n = 0; n < 15; n++)
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)"VIM_SERVERNAME="[n];
+! for (n = 0; n < lval; n++)
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)servername[n];
+ *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+ }
+ }
+- # endif
+ }
+
+ void
+--- 5275,5317 ----
+ }
+ }
+
+ if (is_terminal)
+ {
++ # ifdef FEAT_CLIENTSERVER
+ char_u *servername = get_vim_var_str(VV_SEND_SERVER);
+! size_t servername_len = STRLEN(servername);
+! # endif
+! char_u *version = get_vim_var_str(VV_VERSION);
+! size_t version_len = STRLEN(version);
+! // size of "VIM_SERVERNAME=" and value,
+! // plus "VIM_TERMINAL=" and value,
+! // plus two terminating NULs
+! size_t n = 0
+! # ifdef FEAT_CLIENTSERVER
+! + 15 + servername_len
+! # endif
+! + 13 + version_len + 2;
+
+! if (ga_grow(gap, (int)n) == OK)
+ {
++ # ifdef FEAT_CLIENTSERVER
+ for (n = 0; n < 15; n++)
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)"VIM_SERVERNAME="[n];
+! for (n = 0; n < servername_len; n++)
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)servername[n];
+ *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
++ # endif
++ for (n = 0; n < 13; n++)
++ *((WCHAR*)gap->ga_data + gap->ga_len++) =
++ (WCHAR)"VIM_TERMINAL="[n];
++ for (n = 0; n < version_len; n++)
++ *((WCHAR*)gap->ga_data + gap->ga_len++) =
++ (WCHAR)version[n];
++ *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+ }
+ }
+ }
+
+ void
+*** ../vim-8.1.0048/src/testdir/test_terminal.vim 2018-06-03 18:21:57.809890160 +0200
+--- src/testdir/test_terminal.vim 2018-06-12 18:01:49.195092385 +0200
+***************
+*** 482,499 ****
+ if !has('clientserver')
+ return
+ endif
+ let buf = Run_shell_in_terminal({})
+ " Wait for the shell to display a prompt
+ call WaitForAssert({-> assert_notequal('', term_getline(buf, 1))})
+ if has('win32')
+! call term_sendkeys(buf, "echo %VIM_SERVERNAME%\r")
+ else
+! call term_sendkeys(buf, "echo $VIM_SERVERNAME\r")
+ endif
+ call term_wait(buf)
+ call Stop_shell_in_terminal(buf)
+! call WaitFor('getline(2) == v:servername')
+! call assert_equal(v:servername, getline(2))
+
+ exe buf . 'bwipe'
+ unlet buf
+--- 482,506 ----
+ if !has('clientserver')
+ return
+ endif
++ call s:test_environment("VIM_SERVERNAME", v:servername)
++ endfunc
++
++ func Test_terminal_version()
++ call s:test_environment("VIM_TERMINAL", string(v:version))
++ endfunc
++
++ func s:test_environment(name, value)
+ let buf = Run_shell_in_terminal({})
+ " Wait for the shell to display a prompt
+ call WaitForAssert({-> assert_notequal('', term_getline(buf, 1))})
+ if has('win32')
+! call term_sendkeys(buf, "echo %" . a:name . "%\r")
+ else
+! call term_sendkeys(buf, "echo $" . a:name . "\r")
+ endif
+ call term_wait(buf)
+ call Stop_shell_in_terminal(buf)
+! call WaitForAssert({-> assert_equal(a:value, getline(2))})
+
+ exe buf . 'bwipe'
+ unlet buf
+*** ../vim-8.1.0048/src/version.c 2018-06-12 17:25:32.054404315 +0200
+--- src/version.c 2018-06-12 18:03:17.778632563 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 49,
+ /**/
+
+--
+On the other hand, you have different fingers.
+ -- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0050 b/data/vim/patches/8.1.0050
new file mode 100644
index 000000000..914d8c818
--- /dev/null
+++ b/data/vim/patches/8.1.0050
@@ -0,0 +1,414 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0050
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0050 (after 8.1.0049)
+Problem: $VIM_TERMINAL is also set when not in a terminal window.
+Solution: Pass a flag to indicate whether the job runs in a terminal.
+Files: src/channel.c, src/proto/channel.pro, src/evalfunc.c,
+ src/terminal.c, src/os_unix.c, src/proto/os_unix.pro,
+ src/os_win32.c
+
+
+*** ../vim-8.1.0049/src/channel.c 2018-06-03 14:42:17.840505115 +0200
+--- src/channel.c 2018-06-12 20:13:06.460135822 +0200
+***************
+*** 5525,5531 ****
+ * Returns NULL when out of memory.
+ */
+ job_T *
+! job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg)
+ {
+ job_T *job;
+ char_u *cmd = NULL;
+--- 5525,5535 ----
+ * Returns NULL when out of memory.
+ */
+ job_T *
+! job_start(
+! typval_T *argvars,
+! char **argv_arg,
+! jobopt_T *opt_arg,
+! int is_terminal UNUSED)
+ {
+ job_T *job;
+ char_u *cmd = NULL;
+***************
+*** 5679,5685 ****
+ ch_log(NULL, "Starting job: %s", (char *)ga.ga_data);
+ ga_clear(&ga);
+ }
+! mch_job_start(argv, job, &opt);
+ #else
+ ch_log(NULL, "Starting job: %s", (char *)cmd);
+ mch_job_start((char *)cmd, job, &opt);
+--- 5683,5689 ----
+ ch_log(NULL, "Starting job: %s", (char *)ga.ga_data);
+ ga_clear(&ga);
+ }
+! mch_job_start(argv, job, &opt, is_terminal);
+ #else
+ ch_log(NULL, "Starting job: %s", (char *)cmd);
+ mch_job_start((char *)cmd, job, &opt);
+*** ../vim-8.1.0049/src/proto/channel.pro 2018-06-03 14:42:17.848505102 +0200
+--- src/proto/channel.pro 2018-06-12 20:08:25.045683595 +0200
+***************
+*** 66,72 ****
+ void job_stop_on_exit(void);
+ int has_pending_job(void);
+ void job_check_ended(void);
+! job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg);
+ char *job_status(job_T *job);
+ void job_info(job_T *job, dict_T *dict);
+ void job_info_all(list_T *l);
+--- 66,72 ----
+ void job_stop_on_exit(void);
+ int has_pending_job(void);
+ void job_check_ended(void);
+! job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg, int is_terminal);
+ char *job_status(job_T *job);
+ void job_info(job_T *job, dict_T *dict);
+ void job_info_all(list_T *l);
+*** ../vim-8.1.0049/src/evalfunc.c 2018-06-07 18:17:42.278227523 +0200
+--- src/evalfunc.c 2018-06-12 20:05:33.630628161 +0200
+***************
+*** 7254,7260 ****
+ rettv->v_type = VAR_JOB;
+ if (check_restricted() || check_secure())
+ return;
+! rettv->vval.v_job = job_start(argvars, NULL, NULL);
+ }
+
+ /*
+--- 7254,7260 ----
+ rettv->v_type = VAR_JOB;
+ if (check_restricted() || check_secure())
+ return;
+! rettv->vval.v_job = job_start(argvars, NULL, NULL, FALSE);
+ }
+
+ /*
+*** ../vim-8.1.0049/src/terminal.c 2018-06-04 17:28:04.729961269 +0200
+--- src/terminal.c 2018-06-12 20:06:16.926389419 +0200
+***************
+*** 5769,5775 ****
+ #endif
+
+ /* This may change a string in "argvar". */
+! term->tl_job = job_start(argvar, argv, opt);
+ if (term->tl_job != NULL)
+ ++term->tl_job->jv_refcount;
+
+--- 5769,5775 ----
+ #endif
+
+ /* This may change a string in "argvar". */
+! term->tl_job = job_start(argvar, argv, opt, TRUE);
+ if (term->tl_job != NULL)
+ ++term->tl_job->jv_refcount;
+
+*** ../vim-8.1.0049/src/os_unix.c 2018-06-12 18:04:28.038267855 +0200
+--- src/os_unix.c 2018-06-12 20:11:20.272719511 +0200
+***************
+*** 4159,4165 ****
+ * Set the environment for a child process.
+ */
+ static void
+! set_child_environment(long rows, long columns, char *term)
+ {
+ # ifdef HAVE_SETENV
+ char envbuf[50];
+--- 4159,4169 ----
+ * Set the environment for a child process.
+ */
+ static void
+! set_child_environment(
+! long rows,
+! long columns,
+! char *term,
+! int is_terminal UNUSED)
+ {
+ # ifdef HAVE_SETENV
+ char envbuf[50];
+***************
+*** 4169,4175 ****
+--- 4173,4181 ----
+ static char envbuf_Lines[20];
+ static char envbuf_Columns[20];
+ static char envbuf_Colors[20];
++ # ifdef FEAT_TERMINAL
+ static char envbuf_Version[20];
++ # endif
+ # ifdef FEAT_CLIENTSERVER
+ static char envbuf_Servername[60];
+ # endif
+***************
+*** 4190,4197 ****
+ setenv("COLUMNS", (char *)envbuf, 1);
+ sprintf((char *)envbuf, "%ld", colors);
+ setenv("COLORS", (char *)envbuf, 1);
+! sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
+! setenv("VIM_TERMINAL", (char *)envbuf, 1);
+ # ifdef FEAT_CLIENTSERVER
+ setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1);
+ # endif
+--- 4196,4208 ----
+ setenv("COLUMNS", (char *)envbuf, 1);
+ sprintf((char *)envbuf, "%ld", colors);
+ setenv("COLORS", (char *)envbuf, 1);
+! # ifdef FEAT_TERMINAL
+! if (is_terminal)
+! {
+! sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
+! setenv("VIM_TERMINAL", (char *)envbuf, 1);
+! }
+! # endif
+ # ifdef FEAT_CLIENTSERVER
+ setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1);
+ # endif
+***************
+*** 4212,4220 ****
+ putenv(envbuf_Columns);
+ vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors);
+ putenv(envbuf_Colors);
+! vim_snprintf(envbuf_Version, sizeof(envbuf_Version), "VIM_TERMINAL=%ld",
+! get_vim_var_nr(VV_VERSION));
+! putenv(envbuf_Version);
+ # ifdef FEAT_CLIENTSERVER
+ vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername),
+ "VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName);
+--- 4223,4236 ----
+ putenv(envbuf_Columns);
+ vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors);
+ putenv(envbuf_Colors);
+! # ifdef FEAT_TERMINAL
+! if (is_terminal)
+! {
+! vim_snprintf(envbuf_Version, sizeof(envbuf_Version),
+! "VIM_TERMINAL=%ld", get_vim_var_nr(VV_VERSION));
+! putenv(envbuf_Version);
+! }
+! # endif
+ # ifdef FEAT_CLIENTSERVER
+ vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername),
+ "VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName);
+***************
+*** 4224,4232 ****
+ }
+
+ static void
+! set_default_child_environment(void)
+ {
+! set_child_environment(Rows, Columns, "dumb");
+ }
+ #endif
+
+--- 4240,4248 ----
+ }
+
+ static void
+! set_default_child_environment(int is_terminal)
+ {
+! set_child_environment(Rows, Columns, "dumb", is_terminal);
+ }
+ #endif
+
+***************
+*** 4689,4695 ****
+ # endif
+ }
+ # endif
+! set_default_child_environment();
+
+ /*
+ * stderr is only redirected when using the GUI, so that a
+--- 4705,4711 ----
+ # endif
+ }
+ # endif
+! set_default_child_environment(FALSE);
+
+ /*
+ * stderr is only redirected when using the GUI, so that a
+***************
+*** 5367,5373 ****
+
+ #if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
+ void
+! mch_job_start(char **argv, job_T *job, jobopt_T *options)
+ {
+ pid_t pid;
+ int fd_in[2] = {-1, -1}; /* for stdin */
+--- 5383,5389 ----
+
+ #if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
+ void
+! mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal)
+ {
+ pid_t pid;
+ int fd_in[2] = {-1, -1}; /* for stdin */
+***************
+*** 5515,5525 ****
+ set_child_environment(
+ (long)options->jo_term_rows,
+ (long)options->jo_term_cols,
+! term);
+ }
+ else
+ # endif
+! set_default_child_environment();
+
+ if (options->jo_env != NULL)
+ {
+--- 5531,5542 ----
+ set_child_environment(
+ (long)options->jo_term_rows,
+ (long)options->jo_term_cols,
+! term,
+! is_terminal);
+ }
+ else
+ # endif
+! set_default_child_environment(is_terminal);
+
+ if (options->jo_env != NULL)
+ {
+*** ../vim-8.1.0049/src/proto/os_unix.pro 2018-05-17 13:52:48.000000000 +0200
+--- src/proto/os_unix.pro 2018-06-12 20:08:29.497659084 +0200
+***************
+*** 62,68 ****
+ void mch_new_shellsize(void);
+ void may_send_sigint(int c, pid_t pid, pid_t wpid);
+ int mch_call_shell(char_u *cmd, int options);
+! void mch_job_start(char **argv, job_T *job, jobopt_T *options);
+ char *mch_job_status(job_T *job);
+ job_T *mch_detect_ended_job(job_T *job_list);
+ int mch_signal_job(job_T *job, char_u *how);
+--- 62,68 ----
+ void mch_new_shellsize(void);
+ void may_send_sigint(int c, pid_t pid, pid_t wpid);
+ int mch_call_shell(char_u *cmd, int options);
+! void mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal);
+ char *mch_job_status(job_T *job);
+ job_T *mch_detect_ended_job(job_T *job_list);
+ int mch_signal_job(job_T *job, char_u *how);
+*** ../vim-8.1.0049/src/os_win32.c 2018-06-12 18:04:28.038267855 +0200
+--- src/os_win32.c 2018-06-12 20:18:53.770228655 +0200
+***************
+*** 5275,5300 ****
+ }
+ }
+
+! if (is_terminal)
+ {
+! # ifdef FEAT_CLIENTSERVER
+ char_u *servername = get_vim_var_str(VV_SEND_SERVER);
+ size_t servername_len = STRLEN(servername);
+! # endif
+ char_u *version = get_vim_var_str(VV_VERSION);
+ size_t version_len = STRLEN(version);
+ // size of "VIM_SERVERNAME=" and value,
+ // plus "VIM_TERMINAL=" and value,
+ // plus two terminating NULs
+ size_t n = 0
+! # ifdef FEAT_CLIENTSERVER
+ + 15 + servername_len
+! # endif
+! + 13 + version_len + 2;
+
+ if (ga_grow(gap, (int)n) == OK)
+ {
+! # ifdef FEAT_CLIENTSERVER
+ for (n = 0; n < 15; n++)
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)"VIM_SERVERNAME="[n];
+--- 5275,5305 ----
+ }
+ }
+
+! # if defined(FEAT_CLIENTSERVER) || defined(FEAT_TERMINAL)
+ {
+! # ifdef FEAT_CLIENTSERVER
+ char_u *servername = get_vim_var_str(VV_SEND_SERVER);
+ size_t servername_len = STRLEN(servername);
+! # endif
+! # ifdef FEAT_TERMINAL
+ char_u *version = get_vim_var_str(VV_VERSION);
+ size_t version_len = STRLEN(version);
++ # endif
+ // size of "VIM_SERVERNAME=" and value,
+ // plus "VIM_TERMINAL=" and value,
+ // plus two terminating NULs
+ size_t n = 0
+! # ifdef FEAT_CLIENTSERVER
+ + 15 + servername_len
+! # endif
+! # ifdef FEAT_TERMINAL
+! + 13 + version_len + 2
+! # endif
+! ;
+
+ if (ga_grow(gap, (int)n) == OK)
+ {
+! # ifdef FEAT_CLIENTSERVER
+ for (n = 0; n < 15; n++)
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)"VIM_SERVERNAME="[n];
+***************
+*** 5302,5315 ****
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)servername[n];
+ *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+! # endif
+! for (n = 0; n < 13; n++)
+! *((WCHAR*)gap->ga_data + gap->ga_len++) =
+! (WCHAR)"VIM_TERMINAL="[n];
+! for (n = 0; n < version_len; n++)
+! *((WCHAR*)gap->ga_data + gap->ga_len++) =
+! (WCHAR)version[n];
+! *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+ }
+ }
+ }
+--- 5307,5325 ----
+ *((WCHAR*)gap->ga_data + gap->ga_len++) =
+ (WCHAR)servername[n];
+ *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+! # endif
+! # ifdef FEAT_TERMINAL
+! if (is_terminal)
+! {
+! for (n = 0; n < 13; n++)
+! *((WCHAR*)gap->ga_data + gap->ga_len++) =
+! (WCHAR)"VIM_TERMINAL="[n];
+! for (n = 0; n < version_len; n++)
+! *((WCHAR*)gap->ga_data + gap->ga_len++) =
+! (WCHAR)version[n];
+! *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+! }
+! # endif
+ }
+ }
+ }
+*** ../vim-8.1.0049/src/version.c 2018-06-12 18:04:28.042267834 +0200
+--- src/version.c 2018-06-12 20:21:54.749235631 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 50,
+ /**/
+
+--
+Change is inevitable, except from a vending machine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0051 b/data/vim/patches/8.1.0051
new file mode 100644
index 000000000..2d07138b3
--- /dev/null
+++ b/data/vim/patches/8.1.0051
@@ -0,0 +1,44 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0051
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0051 (after 8.1.0050)
+Problem: MS-Windows: missing #endif.
+Solution: Add the #endif.
+Files: src/os_win32.c
+
+
+*** ../vim-8.1.0050/src/os_win32.c 2018-06-12 20:25:47.891923371 +0200
+--- src/os_win32.c 2018-06-12 21:10:04.466837989 +0200
+***************
+*** 5322,5327 ****
+--- 5322,5328 ----
+ # endif
+ }
+ }
++ # endif
+ }
+
+ void
+*** ../vim-8.1.0050/src/version.c 2018-06-12 20:25:47.891923371 +0200
+--- src/version.c 2018-06-12 21:10:42.242668187 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 51,
+ /**/
+
+--
+Those who live by the sword get shot by those who don't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0052 b/data/vim/patches/8.1.0052
new file mode 100644
index 000000000..2293e705c
--- /dev/null
+++ b/data/vim/patches/8.1.0052
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0052
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0052
+Problem: When a mapping to <Nop> times out the next mapping is skipped.
+Solution: Reset "timedout" when waiting for a character. (Christian
+ Brabandt, closes #2921)
+Files: src/getchar.c
+
+
+*** ../vim-8.1.0051/src/getchar.c 2018-05-23 21:53:48.352478970 +0200
+--- src/getchar.c 2018-06-12 21:22:30.771274224 +0200
+***************
+*** 2856,2861 ****
+--- 2856,2866 ----
+ /*
+ * get a character: 3. from the user - get it
+ */
++ if (typebuf.tb_len == 0)
++ // timedout may have been set while waiting for a mapping
++ // that has a <Nop> RHS.
++ timedout = FALSE;
++
+ wait_tb_len = typebuf.tb_len;
+ c = inchar(typebuf.tb_buf + typebuf.tb_off + typebuf.tb_len,
+ typebuf.tb_buflen - typebuf.tb_off - typebuf.tb_len - 1,
+*** ../vim-8.1.0051/src/version.c 2018-06-12 21:11:08.626548598 +0200
+--- src/version.c 2018-06-12 21:28:00.797623373 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 52,
+ /**/
+
+--
+Portable Computer: A device invented to force businessmen
+to work at home, on vacation, and on business trips.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0053 b/data/vim/patches/8.1.0053
new file mode 100644
index 000000000..aa3ff44b1
--- /dev/null
+++ b/data/vim/patches/8.1.0053
@@ -0,0 +1,609 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0053
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0053
+Problem: The first argument given to 'completefunc' can be Number or
+ String, depending on the value.
+Solution: Avoid guessing the type of an argument, use typval_T in the
+ callers of call_vim_function(). (Ozaki Kiichi, closes #2993)
+Files: src/edit.c, src/eval.c, src/ex_getln.c, src/mbyte.c, src/normal.c,
+ src/proto/eval.pro, src/testdir/test_ins_complete.vim
+
+
+*** ../vim-8.1.0052/src/edit.c 2018-06-10 13:12:52.176496009 +0200
+--- src/edit.c 2018-06-12 21:49:32.781522896 +0200
+***************
+*** 4201,4207 ****
+ {
+ list_T *matchlist = NULL;
+ dict_T *matchdict = NULL;
+! char_u *args[2];
+ char_u *funcname;
+ pos_T pos;
+ win_T *curwin_save;
+--- 4201,4207 ----
+ {
+ list_T *matchlist = NULL;
+ dict_T *matchdict = NULL;
+! typval_T args[3];
+ char_u *funcname;
+ pos_T pos;
+ win_T *curwin_save;
+***************
+*** 4213,4227 ****
+ return;
+
+ /* Call 'completefunc' to obtain the list of matches. */
+! args[0] = (char_u *)"0";
+! args[1] = base;
+
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+
+ /* Call a function, which returns a list or dict. */
+! if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK)
+ {
+ switch (rettv.v_type)
+ {
+--- 4213,4230 ----
+ return;
+
+ /* Call 'completefunc' to obtain the list of matches. */
+! args[0].v_type = VAR_NUMBER;
+! args[0].vval.v_number = 0;
+! args[1].v_type = VAR_STRING;
+! args[1].vval.v_string = base != NULL ? base : (char_u *)"";
+! args[2].v_type = VAR_UNKNOWN;
+
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+
+ /* Call a function, which returns a list or dict. */
+! if (call_vim_function(funcname, 2, args, &rettv, FALSE) == OK)
+ {
+ switch (rettv.v_type)
+ {
+***************
+*** 5528,5534 ****
+ * Call user defined function 'completefunc' with "a:findstart"
+ * set to 1 to obtain the length of text to use for completion.
+ */
+! char_u *args[2];
+ int col;
+ char_u *funcname;
+ pos_T pos;
+--- 5531,5537 ----
+ * Call user defined function 'completefunc' with "a:findstart"
+ * set to 1 to obtain the length of text to use for completion.
+ */
+! typval_T args[3];
+ int col;
+ char_u *funcname;
+ pos_T pos;
+***************
+*** 5548,5555 ****
+ return FAIL;
+ }
+
+! args[0] = (char_u *)"1";
+! args[1] = NULL;
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+--- 5551,5561 ----
+ return FAIL;
+ }
+
+! args[0].v_type = VAR_NUMBER;
+! args[0].vval.v_number = 1;
+! args[1].v_type = VAR_STRING;
+! args[1].vval.v_string = (char_u *)"";
+! args[2].v_type = VAR_UNKNOWN;
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+*** ../vim-8.1.0052/src/eval.c 2018-05-13 15:42:40.000000000 +0200
+--- src/eval.c 2018-06-12 21:53:10.468274335 +0200
+***************
+*** 1011,1073 ****
+
+ /*
+ * Call some Vim script function and return the result in "*rettv".
+! * Uses argv[argc] for the function arguments. Only Number and String
+! * arguments are currently supported.
+ * Returns OK or FAIL.
+ */
+ int
+ call_vim_function(
+ char_u *func,
+ int argc,
+! char_u **argv,
+! int safe, /* use the sandbox */
+! int str_arg_only, /* all arguments are strings */
+! typval_T *rettv)
+ {
+- typval_T *argvars;
+- varnumber_T n;
+- int len;
+- int i;
+ int doesrange;
+ void *save_funccalp = NULL;
+ int ret;
+
+- argvars = (typval_T *)alloc((unsigned)((argc + 1) * sizeof(typval_T)));
+- if (argvars == NULL)
+- return FAIL;
+-
+- for (i = 0; i < argc; i++)
+- {
+- /* Pass a NULL or empty argument as an empty string */
+- if (argv[i] == NULL || *argv[i] == NUL)
+- {
+- argvars[i].v_type = VAR_STRING;
+- argvars[i].vval.v_string = (char_u *)"";
+- continue;
+- }
+-
+- if (str_arg_only)
+- len = 0;
+- else
+- {
+- /* Recognize a number argument, the others must be strings. A dash
+- * is a string too. */
+- vim_str2nr(argv[i], NULL, &len, STR2NR_ALL, &n, NULL, 0);
+- if (len == 1 && *argv[i] == '-')
+- len = 0;
+- }
+- if (len != 0 && len == (int)STRLEN(argv[i]))
+- {
+- argvars[i].v_type = VAR_NUMBER;
+- argvars[i].vval.v_number = n;
+- }
+- else
+- {
+- argvars[i].v_type = VAR_STRING;
+- argvars[i].vval.v_string = argv[i];
+- }
+- }
+-
+ if (safe)
+ {
+ save_funccalp = save_funccal();
+--- 1011,1032 ----
+
+ /*
+ * Call some Vim script function and return the result in "*rettv".
+! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc]
+! * should have type VAR_UNKNOWN.
+ * Returns OK or FAIL.
+ */
+ int
+ call_vim_function(
+ char_u *func,
+ int argc,
+! typval_T *argv,
+! typval_T *rettv,
+! int safe) /* use the sandbox */
+ {
+ int doesrange;
+ void *save_funccalp = NULL;
+ int ret;
+
+ if (safe)
+ {
+ save_funccalp = save_funccal();
+***************
+*** 1075,1081 ****
+ }
+
+ rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */
+! ret = call_func(func, (int)STRLEN(func), rettv, argc, argvars, NULL,
+ curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+ &doesrange, TRUE, NULL, NULL);
+ if (safe)
+--- 1034,1040 ----
+ }
+
+ rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */
+! ret = call_func(func, (int)STRLEN(func), rettv, argc, argv, NULL,
+ curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+ &doesrange, TRUE, NULL, NULL);
+ if (safe)
+***************
+*** 1083,1089 ****
+ --sandbox;
+ restore_funccal(save_funccalp);
+ }
+- vim_free(argvars);
+
+ if (ret == FAIL)
+ clear_tv(rettv);
+--- 1042,1047 ----
+***************
+*** 1094,1113 ****
+ /*
+ * Call Vim script function "func" and return the result as a number.
+ * Returns -1 when calling the function fails.
+! * Uses argv[argc] for the function arguments.
+ */
+ varnumber_T
+ call_func_retnr(
+ char_u *func,
+ int argc,
+! char_u **argv,
+ int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+ varnumber_T retval;
+
+! /* All arguments are passed as strings, no conversion to number. */
+! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+ return -1;
+
+ retval = get_tv_number_chk(&rettv, NULL);
+--- 1052,1071 ----
+ /*
+ * Call Vim script function "func" and return the result as a number.
+ * Returns -1 when calling the function fails.
+! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should
+! * have type VAR_UNKNOWN.
+ */
+ varnumber_T
+ call_func_retnr(
+ char_u *func,
+ int argc,
+! typval_T *argv,
+ int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+ varnumber_T retval;
+
+! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL)
+ return -1;
+
+ retval = get_tv_number_chk(&rettv, NULL);
+***************
+*** 1122,1141 ****
+ /*
+ * Call Vim script function "func" and return the result as a string.
+ * Returns NULL when calling the function fails.
+! * Uses argv[argc] for the function arguments.
+ */
+ void *
+ call_func_retstr(
+ char_u *func,
+ int argc,
+! char_u **argv,
+ int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+ char_u *retval;
+
+! /* All arguments are passed as strings, no conversion to number. */
+! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+ return NULL;
+
+ retval = vim_strsave(get_tv_string(&rettv));
+--- 1080,1099 ----
+ /*
+ * Call Vim script function "func" and return the result as a string.
+ * Returns NULL when calling the function fails.
+! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should
+! * have type VAR_UNKNOWN.
+ */
+ void *
+ call_func_retstr(
+ char_u *func,
+ int argc,
+! typval_T *argv,
+ int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+ char_u *retval;
+
+! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL)
+ return NULL;
+
+ retval = vim_strsave(get_tv_string(&rettv));
+***************
+*** 1146,1165 ****
+
+ /*
+ * Call Vim script function "func" and return the result as a List.
+! * Uses argv[argc] for the function arguments.
+ * Returns NULL when there is something wrong.
+ */
+ void *
+ call_func_retlist(
+ char_u *func,
+ int argc,
+! char_u **argv,
+ int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+
+! /* All arguments are passed as strings, no conversion to number. */
+! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+ return NULL;
+
+ if (rettv.v_type != VAR_LIST)
+--- 1104,1123 ----
+
+ /*
+ * Call Vim script function "func" and return the result as a List.
+! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should
+! * have type VAR_UNKNOWN.
+ * Returns NULL when there is something wrong.
+ */
+ void *
+ call_func_retlist(
+ char_u *func,
+ int argc,
+! typval_T *argv,
+ int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+
+! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL)
+ return NULL;
+
+ if (rettv.v_type != VAR_LIST)
+*** ../vim-8.1.0052/src/ex_getln.c 2018-05-22 16:58:43.979903077 +0200
+--- src/ex_getln.c 2018-06-12 21:56:34.139120017 +0200
+***************
+*** 5266,5272 ****
+
+
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+! static void * call_user_expand_func(void *(*user_expand_func)(char_u *, int, char_u **, int), expand_T *xp, int *num_file, char_u ***file);
+
+ /*
+ * Call "user_expand_func()" to invoke a user defined Vim script function and
+--- 5266,5272 ----
+
+
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+! static void * call_user_expand_func(void *(*user_expand_func)(char_u *, int, typval_T *, int), expand_T *xp, int *num_file, char_u ***file);
+
+ /*
+ * Call "user_expand_func()" to invoke a user defined Vim script function and
+***************
+*** 5274,5288 ****
+ */
+ static void *
+ call_user_expand_func(
+! void *(*user_expand_func)(char_u *, int, char_u **, int),
+ expand_T *xp,
+ int *num_file,
+ char_u ***file)
+ {
+ int keep = 0;
+! char_u num[50];
+! char_u *args[3];
+ int save_current_SID = current_SID;
+ void *ret;
+ struct cmdline_info save_ccline;
+
+--- 5274,5288 ----
+ */
+ static void *
+ call_user_expand_func(
+! void *(*user_expand_func)(char_u *, int, typval_T *, int),
+ expand_T *xp,
+ int *num_file,
+ char_u ***file)
+ {
+ int keep = 0;
+! typval_T args[4];
+ int save_current_SID = current_SID;
++ char_u *pat = NULL;
+ void *ret;
+ struct cmdline_info save_ccline;
+
+***************
+*** 5297,5306 ****
+ ccline.cmdbuff[ccline.cmdlen] = 0;
+ }
+
+! args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len);
+! args[1] = xp->xp_line;
+! sprintf((char *)num, "%d", xp->xp_col);
+! args[2] = num;
+
+ /* Save the cmdline, we don't know what the function may do. */
+ save_ccline = ccline;
+--- 5297,5311 ----
+ ccline.cmdbuff[ccline.cmdlen] = 0;
+ }
+
+! pat = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len);
+!
+! args[0].v_type = VAR_STRING;
+! args[0].vval.v_string = pat;
+! args[1].v_type = VAR_STRING;
+! args[1].vval.v_string = xp->xp_line;
+! args[2].v_type = VAR_NUMBER;
+! args[2].vval.v_number = xp->xp_col;
+! args[3].v_type = VAR_UNKNOWN;
+
+ /* Save the cmdline, we don't know what the function may do. */
+ save_ccline = ccline;
+***************
+*** 5315,5321 ****
+ if (ccline.cmdbuff != NULL)
+ ccline.cmdbuff[ccline.cmdlen] = keep;
+
+! vim_free(args[0]);
+ return ret;
+ }
+
+--- 5320,5326 ----
+ if (ccline.cmdbuff != NULL)
+ ccline.cmdbuff[ccline.cmdlen] = keep;
+
+! vim_free(pat);
+ return ret;
+ }
+
+*** ../vim-8.1.0052/src/mbyte.c 2018-05-17 13:06:28.000000000 +0200
+--- src/mbyte.c 2018-06-12 21:57:43.682728083 +0200
+***************
+*** 4795,4806 ****
+ static void
+ call_imactivatefunc(int active)
+ {
+! char_u *argv[1];
+
+! if (active)
+! argv[0] = (char_u *)"1";
+! else
+! argv[0] = (char_u *)"0";
+ (void)call_func_retnr(p_imaf, 1, argv, FALSE);
+ }
+
+--- 4795,4805 ----
+ static void
+ call_imactivatefunc(int active)
+ {
+! typval_T argv[2];
+
+! argv[0].v_type = VAR_NUMBER;
+! argv[0].vval.v_number = active ? 1 : 0;
+! argv[1].v_type = VAR_NUMBER;
+ (void)call_func_retnr(p_imaf, 1, argv, FALSE);
+ }
+
+*** ../vim-8.1.0052/src/normal.c 2018-06-03 14:42:17.844505109 +0200
+--- src/normal.c 2018-06-12 21:57:56.386656587 +0200
+***************
+*** 2219,2225 ****
+ op_function(oparg_T *oap UNUSED)
+ {
+ #ifdef FEAT_EVAL
+! char_u *(argv[1]);
+ # ifdef FEAT_VIRTUALEDIT
+ int save_virtual_op = virtual_op;
+ # endif
+--- 2219,2225 ----
+ op_function(oparg_T *oap UNUSED)
+ {
+ #ifdef FEAT_EVAL
+! typval_T argv[2];
+ # ifdef FEAT_VIRTUALEDIT
+ int save_virtual_op = virtual_op;
+ # endif
+***************
+*** 2235,2246 ****
+ /* Exclude the end position. */
+ decl(&curbuf->b_op_end);
+
+ if (oap->block_mode)
+! argv[0] = (char_u *)"block";
+ else if (oap->motion_type == MLINE)
+! argv[0] = (char_u *)"line";
+ else
+! argv[0] = (char_u *)"char";
+
+ # ifdef FEAT_VIRTUALEDIT
+ /* Reset virtual_op so that 'virtualedit' can be changed in the
+--- 2235,2248 ----
+ /* Exclude the end position. */
+ decl(&curbuf->b_op_end);
+
++ argv[0].v_type = VAR_STRING;
+ if (oap->block_mode)
+! argv[0].vval.v_string = (char_u *)"block";
+ else if (oap->motion_type == MLINE)
+! argv[0].vval.v_string = (char_u *)"line";
+ else
+! argv[0].vval.v_string = (char_u *)"char";
+! argv[1].v_type = VAR_UNKNOWN;
+
+ # ifdef FEAT_VIRTUALEDIT
+ /* Reset virtual_op so that 'virtualedit' can be changed in the
+*** ../vim-8.1.0052/src/proto/eval.pro 2018-05-17 13:52:32.000000000 +0200
+--- src/proto/eval.pro 2018-06-12 21:45:51.398816540 +0200
+***************
+*** 19,28 ****
+ list_T *eval_spell_expr(char_u *badword, char_u *expr);
+ int get_spellword(list_T *list, char_u **pp);
+ typval_T *eval_expr(char_u *arg, char_u **nextcmd);
+! int call_vim_function(char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv);
+! varnumber_T call_func_retnr(char_u *func, int argc, char_u **argv, int safe);
+! void *call_func_retstr(char_u *func, int argc, char_u **argv, int safe);
+! void *call_func_retlist(char_u *func, int argc, char_u **argv, int safe);
+ int eval_foldexpr(char_u *arg, int *cp);
+ void ex_let(exarg_T *eap);
+ void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first);
+--- 19,28 ----
+ list_T *eval_spell_expr(char_u *badword, char_u *expr);
+ int get_spellword(list_T *list, char_u **pp);
+ typval_T *eval_expr(char_u *arg, char_u **nextcmd);
+! int call_vim_function(char_u *func, int argc, typval_T *argv, typval_T *rettv, int safe);
+! varnumber_T call_func_retnr(char_u *func, int argc, typval_T *argv, int safe);
+! void *call_func_retstr(char_u *func, int argc, typval_T *argv, int safe);
+! void *call_func_retlist(char_u *func, int argc, typval_T *argv, int safe);
+ int eval_foldexpr(char_u *arg, int *cp);
+ void ex_let(exarg_T *eap);
+ void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first);
+*** ../vim-8.1.0052/src/testdir/test_ins_complete.vim 2018-02-10 16:12:08.000000000 +0100
+--- src/testdir/test_ins_complete.vim 2018-06-12 21:45:51.398816540 +0200
+***************
+*** 117,122 ****
+--- 117,147 ----
+ set omnifunc=
+ endfunc
+
++ func Test_completefunc_args()
++ let s:args = []
++ func! CompleteFunc(findstart, base)
++ let s:args += [[a:findstart, empty(a:base)]]
++ endfunc
++ new
++
++ set completefunc=CompleteFunc
++ call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x')
++ call assert_equal(s:args[0], [1, 1])
++ call assert_equal(s:args[1][0], 0)
++ set completefunc=
++
++ let s:args = []
++ set omnifunc=CompleteFunc
++ call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x')
++ call assert_equal(s:args[0], [1, 1])
++ call assert_equal(s:args[1][0], 0)
++ set omnifunc=
++
++ bwipe!
++ unlet s:args
++ delfunc CompleteFunc
++ endfunc
++
+ function! s:CompleteDone_CompleteFuncDict( findstart, base )
+ if a:findstart
+ return 0
+*** ../vim-8.1.0052/src/version.c 2018-06-12 21:35:37.518665900 +0200
+--- src/version.c 2018-06-12 21:46:24.302622304 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 53,
+ /**/
+
+--
+Bumper sticker: Honk if you love peace and quiet.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0054 b/data/vim/patches/8.1.0054
new file mode 100644
index 000000000..6f6327fd4
--- /dev/null
+++ b/data/vim/patches/8.1.0054
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0054
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0054
+Problem: Compiler warning for using %ld for "long long".
+Solution: Add a type cast. (closes #3002)
+Files: src/os_unix.c
+
+
+*** ../vim-8.1.0053/src/os_unix.c 2018-06-12 20:25:47.887923393 +0200
+--- src/os_unix.c 2018-06-13 20:49:32.360424689 +0200
+***************
+*** 4199,4205 ****
+ # ifdef FEAT_TERMINAL
+ if (is_terminal)
+ {
+! sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION));
+ setenv("VIM_TERMINAL", (char *)envbuf, 1);
+ }
+ # endif
+--- 4199,4205 ----
+ # ifdef FEAT_TERMINAL
+ if (is_terminal)
+ {
+! sprintf((char *)envbuf, "%ld", (long)get_vim_var_nr(VV_VERSION));
+ setenv("VIM_TERMINAL", (char *)envbuf, 1);
+ }
+ # endif
+***************
+*** 4227,4233 ****
+ if (is_terminal)
+ {
+ vim_snprintf(envbuf_Version, sizeof(envbuf_Version),
+! "VIM_TERMINAL=%ld", get_vim_var_nr(VV_VERSION));
+ putenv(envbuf_Version);
+ }
+ # endif
+--- 4227,4233 ----
+ if (is_terminal)
+ {
+ vim_snprintf(envbuf_Version, sizeof(envbuf_Version),
+! "VIM_TERMINAL=%ld", (long)get_vim_var_nr(VV_VERSION));
+ putenv(envbuf_Version);
+ }
+ # endif
+*** ../vim-8.1.0053/src/version.c 2018-06-12 22:05:10.656251565 +0200
+--- src/version.c 2018-06-13 20:48:19.840840420 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 54,
+ /**/
+
+--
+A fine is a tax for doing wrong. A tax is a fine for doing well.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0055 b/data/vim/patches/8.1.0055
new file mode 100644
index 000000000..4350a1275
--- /dev/null
+++ b/data/vim/patches/8.1.0055
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0055
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0055 (after 8.1.0053)
+Problem: Complete test has wrong order of arguments. Wrong type for
+ sentinel variable.
+Solution: Swap arguments, use VAR_UNKNOWN. (Ozaki Kiichi)
+Files: src/mbyte.c, src/testdir/test_ins_complete.vim
+
+
+*** ../vim-8.1.0054/src/mbyte.c 2018-06-12 22:05:10.656251565 +0200
+--- src/mbyte.c 2018-06-13 21:22:38.711055156 +0200
+***************
+*** 4799,4805 ****
+
+ argv[0].v_type = VAR_NUMBER;
+ argv[0].vval.v_number = active ? 1 : 0;
+! argv[1].v_type = VAR_NUMBER;
+ (void)call_func_retnr(p_imaf, 1, argv, FALSE);
+ }
+
+--- 4799,4805 ----
+
+ argv[0].v_type = VAR_NUMBER;
+ argv[0].vval.v_number = active ? 1 : 0;
+! argv[1].v_type = VAR_UNKNOWN;
+ (void)call_func_retnr(p_imaf, 1, argv, FALSE);
+ }
+
+*** ../vim-8.1.0054/src/testdir/test_ins_complete.vim 2018-06-12 22:05:10.656251565 +0200
+--- src/testdir/test_ins_complete.vim 2018-06-13 21:22:38.711055156 +0200
+***************
+*** 126,140 ****
+
+ set completefunc=CompleteFunc
+ call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x')
+! call assert_equal(s:args[0], [1, 1])
+! call assert_equal(s:args[1][0], 0)
+ set completefunc=
+
+ let s:args = []
+ set omnifunc=CompleteFunc
+ call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x')
+! call assert_equal(s:args[0], [1, 1])
+! call assert_equal(s:args[1][0], 0)
+ set omnifunc=
+
+ bwipe!
+--- 126,140 ----
+
+ set completefunc=CompleteFunc
+ call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x')
+! call assert_equal([1, 1], s:args[0])
+! call assert_equal(0, s:args[1][0])
+ set completefunc=
+
+ let s:args = []
+ set omnifunc=CompleteFunc
+ call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x')
+! call assert_equal([1, 1], s:args[0])
+! call assert_equal(0, s:args[1][0])
+ set omnifunc=
+
+ bwipe!
+*** ../vim-8.1.0054/src/version.c 2018-06-13 20:49:47.444338292 +0200
+--- src/version.c 2018-06-13 21:25:28.718171776 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 55,
+ /**/
+
+--
+Everybody lies, but it doesn't matter since nobody listens.
+ -- Lieberman's Law
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0056 b/data/vim/patches/8.1.0056
new file mode 100644
index 000000000..0dcd34411
--- /dev/null
+++ b/data/vim/patches/8.1.0056
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0056
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0056
+Problem: Crash when using :hardcopy with illegal byte.
+Solution: Check for string_convert() returning NULL. (Dominique Pelle)
+Files: src/hardcopy.c, src/testdir/test_hardcopy.vim
+
+
+*** ../vim-8.1.0055/src/hardcopy.c 2018-02-11 15:38:21.000000000 +0100
+--- src/hardcopy.c 2018-06-16 14:43:41.918213746 +0200
+***************
+*** 3372,3379 ****
+ }
+
+ int
+! mch_print_text_out(char_u *p, int len UNUSED)
+ {
+ int need_break;
+ char_u ch;
+ char_u ch_buff[8];
+--- 3372,3380 ----
+ }
+
+ int
+! mch_print_text_out(char_u *textp, int len UNUSED)
+ {
++ char_u *p = textp;
+ int need_break;
+ char_u ch;
+ char_u ch_buff[8];
+***************
+*** 3508,3515 ****
+--- 3509,3523 ----
+
+ #ifdef FEAT_MBYTE
+ if (prt_do_conv)
++ {
+ /* Convert from multi-byte to 8-bit encoding */
+ tofree = p = string_convert(&prt_conv, p, &len);
++ if (p == NULL)
++ {
++ p = (char_u *)"";
++ len = 0;
++ }
++ }
+
+ if (prt_out_mbyte)
+ {
+*** ../vim-8.1.0055/src/testdir/test_hardcopy.vim 2017-10-26 23:41:07.000000000 +0200
+--- src/testdir/test_hardcopy.vim 2018-06-16 14:39:00.343781251 +0200
+***************
+*** 63,74 ****
+ endfunc
+
+ func Test_fname_with_spaces()
+! if has('postscript')
+! split t\ e\ s\ t.txt
+! call setline(1, ['just', 'some', 'text'])
+! hardcopy > %.ps
+! call assert_true(filereadable('t e s t.txt.ps'))
+! call delete('t e s t.txt.ps')
+! bwipe!
+ endif
+ endfunc
+--- 63,89 ----
+ endfunc
+
+ func Test_fname_with_spaces()
+! if !has('postscript')
+! return
+ endif
++ split t\ e\ s\ t.txt
++ call setline(1, ['just', 'some', 'text'])
++ hardcopy > %.ps
++ call assert_true(filereadable('t e s t.txt.ps'))
++ call delete('t e s t.txt.ps')
++ bwipe!
+ endfunc
++
++ func Test_illegal_byte()
++ if !has('postscript') || &enc != 'utf-8'
++ return
++ endif
++ new
++ " conversion of 0xff will fail, this used to cause a crash
++ call setline(1, "\xff")
++ hardcopy >Xpstest
++
++ bwipe!
++ call delete('Xpstest')
++ endfunc
++
+*** ../vim-8.1.0055/src/version.c 2018-06-13 21:27:20.213366293 +0200
+--- src/version.c 2018-06-16 14:39:45.695527854 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 56,
+ /**/
+
+--
+The real
+trick is
+this: to
+keep the
+lines as
+short as
+possible
+and keep
+the size
+the same
+yet free
+from the
+need for
+hyphena-
+Dammit!! (Matthew Winn)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0057 b/data/vim/patches/8.1.0057
new file mode 100644
index 000000000..9cf86c5c9
--- /dev/null
+++ b/data/vim/patches/8.1.0057
@@ -0,0 +1,203 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0057
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0057
+Problem: Popup menu displayed wrong when using autocmd.
+Solution: Use aucmd_prepbuf(). Force updating status line if the popup menu
+ is going to be redrawn anyway. (Christian Brabandt, closes #3009)
+Files: src/edit.c, src/screen.c, src/proto/screen.pro
+
+
+*** ../vim-8.1.0056/src/edit.c 2018-06-12 22:05:10.652251583 +0200
+--- src/edit.c 2018-06-16 15:25:18.046301708 +0200
+***************
+*** 1704,1710 ****
+--- 1704,1715 ----
+ #endif
+ )
+ {
++ aco_save_T aco;
++
++ // save and restore curwin and curbuf, in case the autocmd changes them
++ aucmd_prepbuf(&aco, curbuf);
+ apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
++ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick = CHANGEDTICK(curbuf);
+ }
+
+***************
+*** 1716,1722 ****
+--- 1721,1732 ----
+ && curbuf->b_last_changedtick_pum != CHANGEDTICK(curbuf)
+ && pum_visible())
+ {
++ aco_save_T aco;
++
++ // save and restore curwin and curbuf, in case the autocmd changes them
++ aucmd_prepbuf(&aco, curbuf);
+ apply_autocmds(EVENT_TEXTCHANGEDP, NULL, NULL, FALSE, curbuf);
++ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick_pum = CHANGEDTICK(curbuf);
+ }
+ #endif
+*** ../vim-8.1.0056/src/screen.c 2018-05-22 20:35:13.566009271 +0200
+--- src/screen.c 2018-06-16 15:32:15.224125456 +0200
+***************
+*** 125,130 ****
+--- 125,131 ----
+ static schar_T *current_ScreenLine;
+
+ static void win_update(win_T *wp);
++ static void win_redr_status(win_T *wp, int ignore_pum);
+ static void win_draw_end(win_T *wp, int c1, int c2, int row, int endrow, hlf_T hl);
+ #ifdef FEAT_FOLDING
+ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T lnum, int row);
+***************
+*** 774,780 ****
+ if (wp->w_redr_status)
+ {
+ cursor_off();
+! win_redr_status(wp);
+ }
+ }
+ #if defined(FEAT_SEARCH_EXTRA)
+--- 775,781 ----
+ if (wp->w_redr_status)
+ {
+ cursor_off();
+! win_redr_status(wp, TRUE); // any popup menu will be redrawn below
+ }
+ }
+ #if defined(FEAT_SEARCH_EXTRA)
+***************
+*** 1030,1036 ****
+ if (wp->w_redr_type != 0)
+ win_update(wp);
+ if (wp->w_redr_status)
+! win_redr_status(wp);
+ }
+
+ update_finish();
+--- 1031,1037 ----
+ if (wp->w_redr_type != 0)
+ win_update(wp);
+ if (wp->w_redr_status)
+! win_redr_status(wp, FALSE);
+ }
+
+ update_finish();
+***************
+*** 1074,1080 ****
+ || *p_stl != NUL || *wp->w_p_stl != NUL
+ # endif
+ )
+! win_redr_status(wp);
+
+ update_finish();
+ }
+--- 1075,1081 ----
+ || *p_stl != NUL || *wp->w_p_stl != NUL
+ # endif
+ )
+! win_redr_status(wp, FALSE);
+
+ update_finish();
+ }
+***************
+*** 6535,6541 ****
+
+ FOR_ALL_WINDOWS(wp)
+ if (wp->w_redr_status)
+! win_redr_status(wp);
+ if (redraw_tabline)
+ draw_tabline();
+ }
+--- 6536,6542 ----
+
+ FOR_ALL_WINDOWS(wp)
+ if (wp->w_redr_status)
+! win_redr_status(wp, FALSE);
+ if (redraw_tabline)
+ draw_tabline();
+ }
+***************
+*** 6864,6872 ****
+ * Redraw the status line of window wp.
+ *
+ * If inversion is possible we use it. Else '=' characters are used.
+ */
+! void
+! win_redr_status(win_T *wp)
+ {
+ int row;
+ char_u *p;
+--- 6865,6875 ----
+ * Redraw the status line of window wp.
+ *
+ * If inversion is possible we use it. Else '=' characters are used.
++ * If "ignore_pum" is TRUE, also redraw statusline when the popup menu is
++ * displayed.
+ */
+! static void
+! win_redr_status(win_T *wp, int ignore_pum)
+ {
+ int row;
+ char_u *p;
+***************
+*** 6890,6898 ****
+ }
+ else if (!redrawing()
+ #ifdef FEAT_INS_EXPAND
+! /* don't update status line when popup menu is visible and may be
+! * drawn over it */
+! || pum_visible()
+ #endif
+ )
+ {
+--- 6893,6901 ----
+ }
+ else if (!redrawing()
+ #ifdef FEAT_INS_EXPAND
+! // don't update status line when popup menu is visible and may be
+! // drawn over it, unless it will be redrawn later
+! || (!ignore_pum && pum_visible())
+ #endif
+ )
+ {
+*** ../vim-8.1.0056/src/proto/screen.pro 2018-05-17 13:52:50.000000000 +0200
+--- src/proto/screen.pro 2018-06-16 15:23:36.274904477 +0200
+***************
+*** 25,31 ****
+ void redraw_statuslines(void);
+ void win_redraw_last_status(frame_T *frp);
+ void win_redr_status_matches(expand_T *xp, int num_matches, char_u **matches, int match, int showtail);
+- void win_redr_status(win_T *wp);
+ int stl_connected(win_T *wp);
+ int get_keymap_str(win_T *wp, char_u *fmt, char_u *buf, int len);
+ void screen_putchar(int c, int row, int col, int attr);
+--- 25,30 ----
+*** ../vim-8.1.0056/src/version.c 2018-06-16 14:44:05.754081590 +0200
+--- src/version.c 2018-06-16 15:23:26.526962287 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 57,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+49. You never have to deal with busy signals when calling your ISP...because
+ you never log off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0058 b/data/vim/patches/8.1.0058
new file mode 100644
index 000000000..bad287b86
--- /dev/null
+++ b/data/vim/patches/8.1.0058
@@ -0,0 +1,220 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0058
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0058
+Problem: Display problem with margins and scrolling.
+Solution: Place the cursor in the right column. (Kouichi Iwamoto,
+ closes #3016)
+Files: src/screen.c
+
+
+*** ../vim-8.1.0057/src/screen.c 2018-06-16 15:32:34.460024472 +0200
+--- src/screen.c 2018-06-16 16:14:27.022630636 +0200
+***************
+*** 9797,9802 ****
+--- 9797,9803 ----
+ int j;
+ unsigned temp;
+ int cursor_row;
++ int cursor_col = 0;
+ int type;
+ int result_empty;
+ int can_ce = can_clear(T_CE);
+***************
+*** 9893,9898 ****
+--- 9894,9902 ----
+ gui_dont_update_cursor(row + off <= gui.cursor_row);
+ #endif
+
++ if (wp != NULL && wp->w_wincol != 0 && *T_CSV != NUL && *T_CCS == NUL)
++ cursor_col = wp->w_wincol;
++
+ if (*T_CCS != NUL) /* cursor relative to region */
+ cursor_row = row;
+ else
+***************
+*** 9939,9945 ****
+ }
+
+ screen_stop_highlight();
+! windgoto(cursor_row, 0);
+ if (clear_attr != 0)
+ screen_start_highlight(clear_attr);
+
+--- 9943,9949 ----
+ }
+
+ screen_stop_highlight();
+! windgoto(cursor_row, cursor_col);
+ if (clear_attr != 0)
+ screen_start_highlight(clear_attr);
+
+***************
+*** 9958,9964 ****
+ if (type == USE_T_AL)
+ {
+ if (i && cursor_row != 0)
+! windgoto(cursor_row, 0);
+ out_str(T_AL);
+ }
+ else /* type == USE_T_SR */
+--- 9962,9968 ----
+ if (type == USE_T_AL)
+ {
+ if (i && cursor_row != 0)
+! windgoto(cursor_row, cursor_col);
+ out_str(T_AL);
+ }
+ else /* type == USE_T_SR */
+***************
+*** 9975,9981 ****
+ {
+ for (i = 0; i < line_count; ++i)
+ {
+! windgoto(off + i, 0);
+ out_str(T_CE);
+ screen_start(); /* don't know where cursor is now */
+ }
+--- 9979,9985 ----
+ {
+ for (i = 0; i < line_count; ++i)
+ {
+! windgoto(off + i, cursor_col);
+ out_str(T_CE);
+ screen_start(); /* don't know where cursor is now */
+ }
+***************
+*** 10011,10016 ****
+--- 10015,10021 ----
+ int i;
+ unsigned temp;
+ int cursor_row;
++ int cursor_col = 0;
+ int cursor_end;
+ int result_empty; /* result is empty until end of region */
+ int can_delete; /* deleting line codes can be used */
+***************
+*** 10110,10115 ****
+--- 10115,10123 ----
+ && gui.cursor_row < end + off);
+ #endif
+
++ if (wp != NULL && wp->w_wincol != 0 && *T_CSV != NUL && *T_CCS == NUL)
++ cursor_col = wp->w_wincol;
++
+ if (*T_CCS != NUL) /* cursor relative to region */
+ {
+ cursor_row = row;
+***************
+*** 10172,10184 ****
+ redraw_block(row, end, wp);
+ else if (type == USE_T_CD) /* delete the lines */
+ {
+! windgoto(cursor_row, 0);
+ out_str(T_CD);
+ screen_start(); /* don't know where cursor is now */
+ }
+ else if (type == USE_T_CDL)
+ {
+! windgoto(cursor_row, 0);
+ term_delete_lines(line_count);
+ screen_start(); /* don't know where cursor is now */
+ }
+--- 10180,10192 ----
+ redraw_block(row, end, wp);
+ else if (type == USE_T_CD) /* delete the lines */
+ {
+! windgoto(cursor_row, cursor_col);
+ out_str(T_CD);
+ screen_start(); /* don't know where cursor is now */
+ }
+ else if (type == USE_T_CDL)
+ {
+! windgoto(cursor_row, cursor_col);
+ term_delete_lines(line_count);
+ screen_start(); /* don't know where cursor is now */
+ }
+***************
+*** 10189,10195 ****
+ */
+ else if (type == USE_NL)
+ {
+! windgoto(cursor_end - 1, 0);
+ for (i = line_count; --i >= 0; )
+ out_char('\n'); /* cursor will remain on same line */
+ }
+--- 10197,10203 ----
+ */
+ else if (type == USE_NL)
+ {
+! windgoto(cursor_end - 1, cursor_col);
+ for (i = line_count; --i >= 0; )
+ out_char('\n'); /* cursor will remain on same line */
+ }
+***************
+*** 10199,10210 ****
+ {
+ if (type == USE_T_DL)
+ {
+! windgoto(cursor_row, 0);
+ out_str(T_DL); /* delete a line */
+ }
+ else /* type == USE_T_CE */
+ {
+! windgoto(cursor_row + i, 0);
+ out_str(T_CE); /* erase a line */
+ }
+ screen_start(); /* don't know where cursor is now */
+--- 10207,10218 ----
+ {
+ if (type == USE_T_DL)
+ {
+! windgoto(cursor_row, cursor_col);
+ out_str(T_DL); /* delete a line */
+ }
+ else /* type == USE_T_CE */
+ {
+! windgoto(cursor_row + i, cursor_col);
+ out_str(T_CE); /* erase a line */
+ }
+ screen_start(); /* don't know where cursor is now */
+***************
+*** 10219,10225 ****
+ {
+ for (i = line_count; i > 0; --i)
+ {
+! windgoto(cursor_end - i, 0);
+ out_str(T_CE); /* erase a line */
+ screen_start(); /* don't know where cursor is now */
+ }
+--- 10227,10233 ----
+ {
+ for (i = line_count; i > 0; --i)
+ {
+! windgoto(cursor_end - i, cursor_col);
+ out_str(T_CE); /* erase a line */
+ screen_start(); /* don't know where cursor is now */
+ }
+*** ../vim-8.1.0057/src/version.c 2018-06-16 15:32:34.460024472 +0200
+--- src/version.c 2018-06-16 16:13:43.890855764 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 58,
+ /**/
+
+--
+Never go to the toilet in a paperless office.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0059 b/data/vim/patches/8.1.0059
new file mode 100644
index 000000000..a029733c5
--- /dev/null
+++ b/data/vim/patches/8.1.0059
@@ -0,0 +1,111 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0059
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0059
+Problem: Displayed digraph for "ga" wrong with 'encoding' "cp1251".
+Solution: Convert from 'encoding' to "utf-8" if needed. (closes #3015)
+Files: src/digraph.c, src/testdir/test_digraph.vim
+
+
+*** ../vim-8.1.0058/src/digraph.c 2018-02-27 20:01:13.000000000 +0100
+--- src/digraph.c 2018-06-16 17:06:04.657272887 +0200
+***************
+*** 1979,1992 ****
+ * If not found return NULL.
+ */
+ char_u *
+! get_digraph_for_char(val)
+! int val;
+ {
+ int i;
+ int use_defaults;
+ digr_T *dp;
+ static char_u r[3];
+
+ for (use_defaults = 0; use_defaults <= 1; use_defaults++)
+ {
+ if (use_defaults == 0)
+--- 1979,2015 ----
+ * If not found return NULL.
+ */
+ char_u *
+! get_digraph_for_char(int val_arg)
+ {
++ int val = val_arg;
+ int i;
+ int use_defaults;
+ digr_T *dp;
+ static char_u r[3];
+
++ #if defined(FEAT_MBYTE) && defined(USE_UNICODE_DIGRAPHS)
++ if (!enc_utf8)
++ {
++ char_u buf[6], *to;
++ vimconv_T vc;
++
++ // convert the character from 'encoding' to Unicode
++ i = mb_char2bytes(val, buf);
++ vc.vc_type = CONV_NONE;
++ if (convert_setup(&vc, p_enc, (char_u *)"utf-8") == OK)
++ {
++ vc.vc_fail = TRUE;
++ to = string_convert(&vc, buf, &i);
++ if (to != NULL)
++ {
++ val = utf_ptr2char(to);
++ vim_free(to);
++ }
++ (void)convert_setup(&vc, NULL, NULL);
++ }
++ }
++ #endif
++
+ for (use_defaults = 0; use_defaults <= 1; use_defaults++)
+ {
+ if (use_defaults == 0)
+*** ../vim-8.1.0058/src/testdir/test_digraph.vim 2018-02-27 21:08:09.000000000 +0100
+--- src/testdir/test_digraph.vim 2018-06-16 17:15:21.629331405 +0200
+***************
+*** 465,468 ****
+--- 465,480 ----
+ bwipe!
+ endfunc
+
++ func Test_show_digraph_cp1251()
++ if !has('multi_byte')
++ return
++ endif
++ new
++ set encoding=cp1251
++ call Put_Dig("='")
++ call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii'))
++ set encoding=utf-8
++ bwipe!
++ endfunc
++
+ " vim: shiftwidth=2 sts=2 expandtab
+*** ../vim-8.1.0058/src/version.c 2018-06-16 16:20:48.772597946 +0200
+--- src/version.c 2018-06-16 17:07:11.244898262 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 59,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+53. To find out what time it is, you send yourself an e-mail and check the
+ "Date:" field.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0060 b/data/vim/patches/8.1.0060
new file mode 100644
index 000000000..b1af72ef4
--- /dev/null
+++ b/data/vim/patches/8.1.0060
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0060
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0060
+Problem: Crash when autocommands delete the current buffer. (Dominique
+ Pelle)
+Solution: Check that autocommands don't change the buffer.
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0059/src/quickfix.c 2018-05-21 16:56:33.683217200 +0200
+--- src/quickfix.c 2018-06-16 21:57:15.946537874 +0200
+***************
+*** 6272,6279 ****
+--- 6272,6287 ----
+ if (res >= 0)
+ qf_list_changed(qi, qi->qf_curlist);
+ if (au_name != NULL)
++ {
++ buf_T *curbuf_old = curbuf;
++
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
++ if (curbuf != curbuf_old)
++ // Autocommands changed buffer, don't jump now, "qi" may
++ // be invalid.
++ res = 0;
++ }
+ if (res > 0 && (eap->cmdidx == CMD_cbuffer ||
+ eap->cmdidx == CMD_lbuffer))
+ qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+*** ../vim-8.1.0059/src/testdir/test_quickfix.vim 2018-05-15 21:53:11.000000000 +0200
+--- src/testdir/test_quickfix.vim 2018-06-16 21:49:48.980572266 +0200
+***************
+*** 3350,3352 ****
+--- 3350,3364 ----
+ call assert_equal('Errors', w:quickfix_title)
+ cclose
+ endfunc
++
++ func Test_lbuffer_with_bwipe()
++ new
++ new
++ augroup nasty
++ au * * bwipe
++ augroup END
++ lbuffer
++ augroup nasty
++ au!
++ augroup END
++ endfunc
+*** ../vim-8.1.0059/src/version.c 2018-06-16 17:25:17.997346631 +0200
+--- src/version.c 2018-06-16 21:58:12.078265886 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 60,
+ /**/
+
+--
+Keyboard not found. Think ENTER to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0061 b/data/vim/patches/8.1.0061
new file mode 100644
index 000000000..e9c537e67
--- /dev/null
+++ b/data/vim/patches/8.1.0061
@@ -0,0 +1,420 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0061
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0061
+Problem: Window title is wrong after resetting and setting 'title'.
+Solution: Move resetting the title into maketitle(). (Jason Franklin)
+Files: src/option.c, src/buffer.c
+
+
+*** ../vim-8.1.0060/src/option.c 2018-06-12 16:49:26.366028607 +0200
+--- src/option.c 2018-06-16 22:36:07.814142229 +0200
+***************
+*** 3256,3264 ****
+ #ifdef FEAT_CMDWIN
+ static char_u *check_cedit(void);
+ #endif
+- #ifdef FEAT_TITLE
+- static void did_set_title(int icon);
+- #endif
+ static char_u *option_expand(int opt_idx, char_u *val);
+ static void didset_options(void);
+ static void didset_options2(void);
+--- 3256,3261 ----
+***************
+*** 5374,5400 ****
+ * the old value back.
+ */
+ static void
+! did_set_title(
+! int icon) /* Did set icon instead of title */
+ {
+ if (starting != NO_SCREEN
+ #ifdef FEAT_GUI
+ && !gui.starting
+ #endif
+ )
+- {
+ maketitle();
+- if (icon)
+- {
+- if (!p_icon)
+- mch_restore_title(2);
+- }
+- else
+- {
+- if (!p_title)
+- mch_restore_title(1);
+- }
+- }
+ }
+ #endif
+
+--- 5371,5384 ----
+ * the old value back.
+ */
+ static void
+! did_set_title(void)
+ {
+ if (starting != NO_SCREEN
+ #ifdef FEAT_GUI
+ && !gui.starting
+ #endif
+ )
+ maketitle();
+ }
+ #endif
+
+***************
+*** 6949,6956 ****
+ else
+ stl_syntax &= ~flagval;
+ # endif
+! did_set_title(varp == &p_iconstring);
+!
+ }
+ #endif
+
+--- 6933,6939 ----
+ else
+ stl_syntax &= ~flagval;
+ # endif
+! did_set_title();
+ }
+ #endif
+
+***************
+*** 8401,8414 ****
+
+ #ifdef FEAT_TITLE
+ /* when 'title' changed, may need to change the title; same for 'icon' */
+! else if ((int *)varp == &p_title)
+! {
+! did_set_title(FALSE);
+! }
+!
+! else if ((int *)varp == &p_icon)
+ {
+! did_set_title(TRUE);
+ }
+ #endif
+
+--- 8384,8392 ----
+
+ #ifdef FEAT_TITLE
+ /* when 'title' changed, may need to change the title; same for 'icon' */
+! else if ((int *)varp == &p_title || (int *)varp == &p_icon)
+ {
+! did_set_title();
+ }
+ #endif
+
+*** ../vim-8.1.0060/src/buffer.c 2018-06-06 18:02:31.402773772 +0200
+--- src/buffer.c 2018-06-16 22:57:08.067368623 +0200
+***************
+*** 38,44 ****
+ static int otherfile_buf(buf_T *buf, char_u *ffname);
+ #endif
+ #ifdef FEAT_TITLE
+! static int ti_change(char_u *str, char_u **last);
+ #endif
+ static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file);
+ static void free_buffer(buf_T *);
+--- 38,44 ----
+ static int otherfile_buf(buf_T *buf, char_u *ffname);
+ #endif
+ #ifdef FEAT_TITLE
+! static int value_changed(char_u *str, char_u **last);
+ #endif
+ static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file);
+ static void free_buffer(buf_T *);
+***************
+*** 3545,3564 ****
+ }
+
+ #if defined(FEAT_TITLE) || defined(PROTO)
+- /*
+- * put file name in title bar of window and in icon title
+- */
+-
+ static char_u *lasttitle = NULL;
+ static char_u *lasticon = NULL;
+
+ void
+ maketitle(void)
+ {
+ char_u *p;
+! char_u *t_str = NULL;
+! char_u *i_name;
+! char_u *i_str = NULL;
+ int maxlen = 0;
+ int len;
+ int mustset;
+--- 3545,3562 ----
+ }
+
+ #if defined(FEAT_TITLE) || defined(PROTO)
+ static char_u *lasttitle = NULL;
+ static char_u *lasticon = NULL;
+
++ /*
++ * Put the file name in the title bar and icon of the window.
++ */
+ void
+ maketitle(void)
+ {
+ char_u *p;
+! char_u *title_str = NULL;
+! char_u *icon_str = NULL;
+ int maxlen = 0;
+ int len;
+ int mustset;
+***************
+*** 3574,3580 ****
+
+ need_maketitle = FALSE;
+ if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL)
+! return;
+
+ if (p_title)
+ {
+--- 3572,3578 ----
+
+ need_maketitle = FALSE;
+ if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL)
+! return; // nothing to do
+
+ if (p_title)
+ {
+***************
+*** 3585,3591 ****
+ maxlen = 10;
+ }
+
+! t_str = buf;
+ if (*p_titlestring != NUL)
+ {
+ #ifdef FEAT_STL_OPT
+--- 3583,3589 ----
+ maxlen = 10;
+ }
+
+! title_str = buf;
+ if (*p_titlestring != NUL)
+ {
+ #ifdef FEAT_STL_OPT
+***************
+*** 3598,3604 ****
+ use_sandbox = was_set_insecurely((char_u *)"titlestring", 0);
+ # endif
+ called_emsg = FALSE;
+! build_stl_str_hl(curwin, t_str, sizeof(buf),
+ p_titlestring, use_sandbox,
+ 0, maxlen, NULL, NULL);
+ if (called_emsg)
+--- 3596,3602 ----
+ use_sandbox = was_set_insecurely((char_u *)"titlestring", 0);
+ # endif
+ called_emsg = FALSE;
+! build_stl_str_hl(curwin, title_str, sizeof(buf),
+ p_titlestring, use_sandbox,
+ 0, maxlen, NULL, NULL);
+ if (called_emsg)
+***************
+*** 3608,3614 ****
+ }
+ else
+ #endif
+! t_str = p_titlestring;
+ }
+ else
+ {
+--- 3606,3612 ----
+ }
+ else
+ #endif
+! title_str = p_titlestring;
+ }
+ else
+ {
+***************
+*** 3714,3724 ****
+ }
+ }
+ }
+! mustset = ti_change(t_str, &lasttitle);
+
+ if (p_icon)
+ {
+! i_str = buf;
+ if (*p_iconstring != NUL)
+ {
+ #ifdef FEAT_STL_OPT
+--- 3712,3722 ----
+ }
+ }
+ }
+! mustset = value_changed(title_str, &lasttitle);
+
+ if (p_icon)
+ {
+! icon_str = buf;
+ if (*p_iconstring != NUL)
+ {
+ #ifdef FEAT_STL_OPT
+***************
+*** 3731,3737 ****
+ use_sandbox = was_set_insecurely((char_u *)"iconstring", 0);
+ # endif
+ called_emsg = FALSE;
+! build_stl_str_hl(curwin, i_str, sizeof(buf),
+ p_iconstring, use_sandbox,
+ 0, 0, NULL, NULL);
+ if (called_emsg)
+--- 3729,3735 ----
+ use_sandbox = was_set_insecurely((char_u *)"iconstring", 0);
+ # endif
+ called_emsg = FALSE;
+! build_stl_str_hl(curwin, icon_str, sizeof(buf),
+ p_iconstring, use_sandbox,
+ 0, 0, NULL, NULL);
+ if (called_emsg)
+***************
+*** 3741,3772 ****
+ }
+ else
+ #endif
+! i_str = p_iconstring;
+ }
+ else
+ {
+ if (buf_spname(curbuf) != NULL)
+! i_name = buf_spname(curbuf);
+ else /* use file name only in icon */
+! i_name = gettail(curbuf->b_ffname);
+! *i_str = NUL;
+ /* Truncate name at 100 bytes. */
+! len = (int)STRLEN(i_name);
+ if (len > 100)
+ {
+ len -= 100;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! len += (*mb_tail_off)(i_name, i_name + len) + 1;
+ #endif
+! i_name += len;
+ }
+! STRCPY(i_str, i_name);
+! trans_characters(i_str, IOSIZE);
+ }
+ }
+
+! mustset |= ti_change(i_str, &lasticon);
+
+ if (mustset)
+ resettitle();
+--- 3739,3770 ----
+ }
+ else
+ #endif
+! icon_str = p_iconstring;
+ }
+ else
+ {
+ if (buf_spname(curbuf) != NULL)
+! p = buf_spname(curbuf);
+ else /* use file name only in icon */
+! p = gettail(curbuf->b_ffname);
+! *icon_str = NUL;
+ /* Truncate name at 100 bytes. */
+! len = (int)STRLEN(p);
+ if (len > 100)
+ {
+ len -= 100;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! len += (*mb_tail_off)(p, p + len) + 1;
+ #endif
+! p += len;
+ }
+! STRCPY(icon_str, p);
+! trans_characters(icon_str, IOSIZE);
+ }
+ }
+
+! mustset |= value_changed(icon_str, &lasticon);
+
+ if (mustset)
+ resettitle();
+***************
+*** 3775,3794 ****
+ /*
+ * Used for title and icon: Check if "str" differs from "*last". Set "*last"
+ * from "str" if it does.
+! * Return TRUE when "*last" changed.
+ */
+ static int
+! ti_change(char_u *str, char_u **last)
+ {
+ if ((str == NULL) != (*last == NULL)
+ || (str != NULL && *last != NULL && STRCMP(str, *last) != 0))
+ {
+ vim_free(*last);
+ if (str == NULL)
+ *last = NULL;
+ else
+ *last = vim_strsave(str);
+! return TRUE;
+ }
+ return FALSE;
+ }
+--- 3773,3797 ----
+ /*
+ * Used for title and icon: Check if "str" differs from "*last". Set "*last"
+ * from "str" if it does.
+! * Return TRUE if resettitle() is to be called.
+ */
+ static int
+! value_changed(char_u *str, char_u **last)
+ {
+ if ((str == NULL) != (*last == NULL)
+ || (str != NULL && *last != NULL && STRCMP(str, *last) != 0))
+ {
+ vim_free(*last);
+ if (str == NULL)
++ {
+ *last = NULL;
++ mch_restore_title(last == &lasttitle ? 1 : 2);
++ }
+ else
++ {
+ *last = vim_strsave(str);
+! return TRUE;
+! }
+ }
+ return FALSE;
+ }
+*** ../vim-8.1.0060/src/version.c 2018-06-16 22:16:43.232576946 +0200
+--- src/version.c 2018-06-16 22:48:20.082215622 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 61,
+ /**/
+
+--
+"I don’t know how to make a screenshot" - Richard Stallman, July 2002
+(when asked to send a screenshot of his desktop for unix.se)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0062 b/data/vim/patches/8.1.0062
new file mode 100644
index 000000000..7161478ca
--- /dev/null
+++ b/data/vim/patches/8.1.0062
@@ -0,0 +1,371 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0062
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0062
+Problem: Popup menu broken if a callback changes the window layout. (Qiming
+ Zhao)
+Solution: Recompute the popup menu position if needed. Redraw the ruler
+ even when the popup menu is displayed.
+Files: src/popupmnu.c, src/proto/popupmnu.pro, src/screen.c
+
+
+*** ../vim-8.1.0061/src/popupmnu.c 2018-05-14 23:05:31.000000000 +0200
+--- src/popupmnu.c 2018-06-17 14:41:52.487403691 +0200
+***************
+*** 29,34 ****
+--- 29,40 ----
+ static int pum_row; /* top row of pum */
+ static int pum_col; /* left column of pum */
+
++ static int pum_win_row;
++ static int pum_win_height;
++ static int pum_win_col;
++ static int pum_win_wcol;
++ static int pum_win_width;
++
+ static int pum_do_redraw = FALSE; /* do redraw anyway */
+
+ static int pum_set_selected(int n, int repeat);
+***************
+*** 81,87 ****
+ {
+ int def_width;
+ int max_width;
+- int row;
+ int context_lines;
+ int cursor_col;
+ int above_row;
+--- 87,92 ----
+***************
+*** 103,109 ****
+ validate_cursor_col();
+ pum_array = NULL;
+
+! row = curwin->w_wrow + W_WINROW(curwin);
+
+ #if defined(FEAT_QUICKFIX)
+ FOR_ALL_WINDOWS(pvwin)
+--- 108,120 ----
+ validate_cursor_col();
+ pum_array = NULL;
+
+! // Remember the essential parts of the window position and size, so we
+! // can decide when to reposition the popup menu.
+! pum_win_row = curwin->w_wrow + W_WINROW(curwin);
+! pum_win_height = curwin->w_height;
+! pum_win_col = curwin->w_wincol;
+! pum_win_wcol = curwin->w_wcol;
+! pum_win_width = curwin->w_width;
+
+ #if defined(FEAT_QUICKFIX)
+ FOR_ALL_WINDOWS(pvwin)
+***************
+*** 128,139 ****
+ if (p_ph > 0 && pum_height > p_ph)
+ pum_height = p_ph;
+
+! /* Put the pum below "row" if possible. If there are few lines decide
+ * on where there is more room. */
+! if (row + 2 >= below_row - pum_height
+! && row - above_row > (below_row - above_row) / 2)
+ {
+! /* pum above "row" */
+
+ /* Leave two lines of context if possible */
+ if (curwin->w_wrow - curwin->w_cline_row >= 2)
+--- 139,150 ----
+ if (p_ph > 0 && pum_height > p_ph)
+ pum_height = p_ph;
+
+! /* Put the pum below "pum_win_row" if possible. If there are few lines decide
+ * on where there is more room. */
+! if (pum_win_row + 2 >= below_row - pum_height
+! && pum_win_row - above_row > (below_row - above_row) / 2)
+ {
+! /* pum above "pum_win_row" */
+
+ /* Leave two lines of context if possible */
+ if (curwin->w_wrow - curwin->w_cline_row >= 2)
+***************
+*** 141,155 ****
+ else
+ context_lines = curwin->w_wrow - curwin->w_cline_row;
+
+! if (row >= size + context_lines)
+ {
+! pum_row = row - size - context_lines;
+ pum_height = size;
+ }
+ else
+ {
+ pum_row = 0;
+! pum_height = row - context_lines;
+ }
+ if (p_ph > 0 && pum_height > p_ph)
+ {
+--- 152,166 ----
+ else
+ context_lines = curwin->w_wrow - curwin->w_cline_row;
+
+! if (pum_win_row >= size + context_lines)
+ {
+! pum_row = pum_win_row - size - context_lines;
+ pum_height = size;
+ }
+ else
+ {
+ pum_row = 0;
+! pum_height = pum_win_row - context_lines;
+ }
+ if (p_ph > 0 && pum_height > p_ph)
+ {
+***************
+*** 159,165 ****
+ }
+ else
+ {
+! /* pum below "row" */
+
+ /* Leave two lines of context if possible */
+ if (curwin->w_cline_row
+--- 170,176 ----
+ }
+ else
+ {
+! /* pum below "pum_win_row" */
+
+ /* Leave two lines of context if possible */
+ if (curwin->w_cline_row
+***************
+*** 169,175 ****
+ context_lines = curwin->w_cline_row
+ + curwin->w_cline_height - curwin->w_wrow;
+
+! pum_row = row + context_lines;
+ if (size > below_row - pum_row)
+ pum_height = below_row - pum_row;
+ else
+--- 180,186 ----
+ context_lines = curwin->w_cline_row
+ + curwin->w_cline_height - curwin->w_wrow;
+
+! pum_row = pum_win_row + context_lines;
+ if (size > below_row - pum_row)
+ pum_height = below_row - pum_row;
+ else
+***************
+*** 823,828 ****
+--- 834,875 ----
+ }
+
+ /*
++ * Reposition the popup menu to adjust for window layout changes.
++ */
++ void
++ pum_may_redraw(void)
++ {
++ pumitem_T *array = pum_array;
++ int len = pum_size;
++ int selected = pum_selected;
++
++ if (!pum_visible())
++ return; // nothing to do
++
++ if (pum_win_row == curwin->w_wrow + W_WINROW(curwin)
++ && pum_win_height == curwin->w_height
++ && pum_win_col == curwin->w_wincol
++ && pum_win_width == curwin->w_width)
++ {
++ // window position didn't change, redraw in the same position
++ pum_redraw();
++ }
++ else
++ {
++ int wcol = curwin->w_wcol;
++
++ // Window layout changed, recompute the position.
++ // Use the remembered w_wcol value, the cursor may have moved when a
++ // completion was inserted, but we want the menu in the same position.
++ pum_undisplay();
++ curwin->w_wcol = pum_win_wcol;
++ curwin->w_valid |= VALID_WCOL;
++ pum_display(array, len, selected);
++ curwin->w_wcol = wcol;
++ }
++ }
++
++ /*
+ * Return the height of the popup menu, the number of entries visible.
+ * Only valid when pum_visible() returns TRUE!
+ */
+*** ../vim-8.1.0061/src/proto/popupmnu.pro 2018-05-17 13:52:48.000000000 +0200
+--- src/proto/popupmnu.pro 2018-06-17 14:12:56.177812770 +0200
+***************
+*** 4,9 ****
+--- 4,10 ----
+ void pum_undisplay(void);
+ void pum_clear(void);
+ int pum_visible(void);
++ void pum_may_redraw(void);
+ int pum_get_height(void);
+ int split_message(char_u *mesg, pumitem_T **array);
+ void ui_remove_balloon(void);
+*** ../vim-8.1.0061/src/screen.c 2018-06-16 16:20:48.768597967 +0200
+--- src/screen.c 2018-06-17 14:37:49.760753642 +0200
+***************
+*** 171,177 ****
+ static void win_redr_custom(win_T *wp, int draw_ruler);
+ #endif
+ #ifdef FEAT_CMDL_INFO
+! static void win_redr_ruler(win_T *wp, int always);
+ #endif
+
+ /* Ugly global: overrule attribute used by screen_char() */
+--- 171,177 ----
+ static void win_redr_custom(win_T *wp, int draw_ruler);
+ #endif
+ #ifdef FEAT_CMDL_INFO
+! static void win_redr_ruler(win_T *wp, int always, int ignore_pum);
+ #endif
+
+ /* Ugly global: overrule attribute used by screen_char() */
+***************
+*** 783,790 ****
+ #endif
+ #ifdef FEAT_INS_EXPAND
+ /* May need to redraw the popup menu. */
+! if (pum_visible())
+! pum_redraw();
+ #endif
+
+ /* Reset b_mod_set flags. Going through all windows is probably faster
+--- 783,789 ----
+ #endif
+ #ifdef FEAT_INS_EXPAND
+ /* May need to redraw the popup menu. */
+! pum_may_redraw();
+ #endif
+
+ /* Reset b_mod_set flags. Going through all windows is probably faster
+***************
+*** 7002,7008 ****
+ - 1 + wp->w_wincol), attr);
+
+ #ifdef FEAT_CMDL_INFO
+! win_redr_ruler(wp, TRUE);
+ #endif
+ }
+
+--- 7001,7007 ----
+ - 1 + wp->w_wincol), attr);
+
+ #ifdef FEAT_CMDL_INFO
+! win_redr_ruler(wp, TRUE, ignore_pum);
+ #endif
+ }
+
+***************
+*** 10455,10461 ****
+ /* If the last window has no status line, the ruler is after the mode
+ * message and must be redrawn */
+ if (redrawing() && lastwin->w_status_height == 0)
+! win_redr_ruler(lastwin, TRUE);
+ #endif
+ redraw_cmdline = FALSE;
+ clear_cmdline = FALSE;
+--- 10454,10460 ----
+ /* If the last window has no status line, the ruler is after the mode
+ * message and must be redrawn */
+ if (redrawing() && lastwin->w_status_height == 0)
+! win_redr_ruler(lastwin, TRUE, FALSE);
+ #endif
+ redraw_cmdline = FALSE;
+ clear_cmdline = FALSE;
+***************
+*** 10874,10879 ****
+--- 10873,10879 ----
+ (int)wp->w_width, FALSE);
+ }
+ #endif
++
+ /*
+ * Show current status info in ruler and various other places
+ * If always is FALSE, only show ruler if position has changed.
+***************
+*** 10899,10905 ****
+ else
+ #endif
+ #ifdef FEAT_CMDL_INFO
+! win_redr_ruler(curwin, always);
+ #endif
+
+ #ifdef FEAT_TITLE
+--- 10899,10905 ----
+ else
+ #endif
+ #ifdef FEAT_CMDL_INFO
+! win_redr_ruler(curwin, always, FALSE);
+ #endif
+
+ #ifdef FEAT_TITLE
+***************
+*** 10918,10924 ****
+
+ #ifdef FEAT_CMDL_INFO
+ static void
+! win_redr_ruler(win_T *wp, int always)
+ {
+ #define RULER_BUF_LEN 70
+ char_u buffer[RULER_BUF_LEN];
+--- 10918,10924 ----
+
+ #ifdef FEAT_CMDL_INFO
+ static void
+! win_redr_ruler(win_T *wp, int always, int ignore_pum)
+ {
+ #define RULER_BUF_LEN 70
+ char_u buffer[RULER_BUF_LEN];
+***************
+*** 10951,10958 ****
+ if (wp == lastwin && lastwin->w_status_height == 0)
+ if (edit_submode != NULL)
+ return;
+! /* Don't draw the ruler when the popup menu is visible, it may overlap. */
+! if (pum_visible())
+ return;
+ #endif
+
+--- 10951,10959 ----
+ if (wp == lastwin && lastwin->w_status_height == 0)
+ if (edit_submode != NULL)
+ return;
+! // Don't draw the ruler when the popup menu is visible, it may overlap.
+! // Except when the popup menu will be redrawn anyway.
+! if (!ignore_pum && pum_visible())
+ return;
+ #endif
+
+*** ../vim-8.1.0061/src/version.c 2018-06-16 22:58:11.791025515 +0200
+--- src/version.c 2018-06-17 14:39:53.964061772 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 62,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+58. You turn on your computer and turn off your wife.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0063 b/data/vim/patches/8.1.0063
new file mode 100644
index 000000000..b1018460a
--- /dev/null
+++ b/data/vim/patches/8.1.0063
@@ -0,0 +1,123 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0063
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0063
+Problem: Mac: NSStringPboardType is deprecated.
+Solution: Use NSPasteboardTypeString. (Akshay Hegde, closes #3022)
+Files: src/os_macosx.m
+
+
+*** ../vim-8.1.0062/src/os_macosx.m 2018-03-06 17:53:40.000000000 +0100
+--- src/os_macosx.m 2018-06-17 15:00:15.344692977 +0200
+***************
+*** 63,70 ****
+--- 63,75 ----
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSPasteboard *pb = [NSPasteboard generalPasteboard];
++ #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
++ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
++ NSPasteboardTypeString, nil];
++ #else
+ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
+ NSStringPboardType, nil];
++ #endif
+ NSString *bestType = [pb availableTypeFromArray:supportedTypes];
+ if (!bestType) goto releasepool;
+
+***************
+*** 76,82 ****
+ /* This type should consist of an array with two objects:
+ * 1. motion type (NSNumber)
+ * 2. text (NSString)
+! * If this is not the case we fall back on using NSStringPboardType.
+ */
+ id plist = [pb propertyListForType:VimPboardType];
+ if ([plist isKindOfClass:[NSArray class]] && [plist count] == 2)
+--- 81,87 ----
+ /* This type should consist of an array with two objects:
+ * 1. motion type (NSNumber)
+ * 2. text (NSString)
+! * If this is not the case we fall back on using NSPasteboardTypeString.
+ */
+ id plist = [pb propertyListForType:VimPboardType];
+ if ([plist isKindOfClass:[NSArray class]] && [plist count] == 2)
+***************
+*** 92,101 ****
+
+ if (!string)
+ {
+! /* Use NSStringPboardType. The motion type is detected automatically.
+ */
+ NSMutableString *mstring =
+ [[pb stringForType:NSStringPboardType] mutableCopy];
+ if (!mstring) goto releasepool;
+
+ /* Replace unrecognized end-of-line sequences with \x0a (line feed). */
+--- 97,111 ----
+
+ if (!string)
+ {
+! /* Use NSPasteboardTypeString. The motion type is detected automatically.
+ */
++ #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
++ NSMutableString *mstring =
++ [[pb stringForType:NSPasteboardTypeString] mutableCopy];
++ #else
+ NSMutableString *mstring =
+ [[pb stringForType:NSStringPboardType] mutableCopy];
++ #endif
+ if (!mstring) goto releasepool;
+
+ /* Replace unrecognized end-of-line sequences with \x0a (line feed). */
+***************
+*** 178,192 ****
+--- 188,211 ----
+
+ /* See clip_mch_request_selection() for info on pasteboard types. */
+ NSPasteboard *pb = [NSPasteboard generalPasteboard];
++ #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
++ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
++ NSPasteboardTypeString, nil];
++ #else
+ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
+ NSStringPboardType, nil];
++ #endif
+ [pb declareTypes:supportedTypes owner:nil];
+
+ NSNumber *motion = [NSNumber numberWithInt:motion_type];
+ NSArray *plist = [NSArray arrayWithObjects:motion, string, nil];
+ [pb setPropertyList:plist forType:VimPboardType];
+
++ #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
++ [pb setString:string forType:NSPasteboardTypeString];
++ #else
+ [pb setString:string forType:NSStringPboardType];
++ #endif
+
+ [string release];
+ }
+*** ../vim-8.1.0062/src/version.c 2018-06-17 14:47:50.657309005 +0200
+--- src/version.c 2018-06-17 15:00:06.472745233 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 63,
+ /**/
+
+--
+Q: Should I clean my house or work on Vim?
+A: Whatever contains more bugs.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0064 b/data/vim/patches/8.1.0064
new file mode 100644
index 000000000..66395247a
--- /dev/null
+++ b/data/vim/patches/8.1.0064
@@ -0,0 +1,100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0064
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0064
+Problem: Typing CTRL-W in a prompt buffer shows mode "-- --".
+Solution: Set restart_edit to 'A' and check for it.
+Files: src/edit.c, src/window.c, src/screen.c
+
+
+*** ../vim-8.1.0063/src/edit.c 2018-06-16 15:32:34.460024472 +0200
+--- src/edit.c 2018-06-17 16:11:15.377294192 +0200
+***************
+*** 1179,1185 ****
+ // In a prompt window CTRL-W is used for window commands.
+ // Use Shift-CTRL-W to delete a word.
+ stuffcharReadbuff(Ctrl_W);
+! restart_edit = 'i';
+ nomove = TRUE;
+ count = 0;
+ goto doESCkey;
+--- 1179,1185 ----
+ // In a prompt window CTRL-W is used for window commands.
+ // Use Shift-CTRL-W to delete a word.
+ stuffcharReadbuff(Ctrl_W);
+! restart_edit = 'A';
+ nomove = TRUE;
+ count = 0;
+ goto doESCkey;
+*** ../vim-8.1.0063/src/window.c 2018-06-12 16:49:26.366028607 +0200
+--- src/window.c 2018-06-17 16:18:31.098815622 +0200
+***************
+*** 2114,2119 ****
+--- 2114,2121 ----
+ // When leaving a prompt window stop Insert mode and perhaps restart
+ // it when entering that window again.
+ win->w_buffer->b_prompt_insert = restart_edit;
++ if (restart_edit != 0 && mode_displayed)
++ clear_cmdline = TRUE; /* unshow mode later */
+ restart_edit = NUL;
+
+ // When leaving the window (or closing the window) was done from a
+*** ../vim-8.1.0063/src/screen.c 2018-06-17 14:47:50.657309005 +0200
+--- src/screen.c 2018-06-17 16:12:28.936871827 +0200
+***************
+*** 10263,10269 ****
+
+ do_mode = ((p_smd && msg_silent == 0)
+ && ((State & INSERT)
+! || restart_edit
+ || VIsual_active));
+ if (do_mode || reg_recording != 0)
+ {
+--- 10263,10269 ----
+
+ do_mode = ((p_smd && msg_silent == 0)
+ && ((State & INSERT)
+! || restart_edit != NUL
+ || VIsual_active));
+ if (do_mode || reg_recording != 0)
+ {
+***************
+*** 10370,10376 ****
+ #endif
+ MSG_PUTS_ATTR(_(" INSERT"), attr);
+ }
+! else if (restart_edit == 'I')
+ MSG_PUTS_ATTR(_(" (insert)"), attr);
+ else if (restart_edit == 'R')
+ MSG_PUTS_ATTR(_(" (replace)"), attr);
+--- 10370,10376 ----
+ #endif
+ MSG_PUTS_ATTR(_(" INSERT"), attr);
+ }
+! else if (restart_edit == 'I' || restart_edit == 'A')
+ MSG_PUTS_ATTR(_(" (insert)"), attr);
+ else if (restart_edit == 'R')
+ MSG_PUTS_ATTR(_(" (replace)"), attr);
+*** ../vim-8.1.0063/src/version.c 2018-06-17 15:01:00.580427088 +0200
+--- src/version.c 2018-06-17 16:23:00.305303242 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 64,
+ /**/
+
+--
+I'm trying to be an optimist, but I don't think it'll work.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0065 b/data/vim/patches/8.1.0065
new file mode 100644
index 000000000..042a3c4ec
--- /dev/null
+++ b/data/vim/patches/8.1.0065
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0065
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0065 (after 8.1.0062)
+Problem: Balloon displayed at the wrong position.
+Solution: Do not reposition the popup menu at the cursor position.
+Files: src/popupmnu.c
+
+
+*** ../vim-8.1.0064/src/popupmnu.c 2018-06-17 14:47:50.649309059 +0200
+--- src/popupmnu.c 2018-06-17 17:06:35.634554918 +0200
+***************
+*** 29,34 ****
+--- 29,35 ----
+ static int pum_row; /* top row of pum */
+ static int pum_col; /* left column of pum */
+
++ static win_T *pum_window = NULL;
+ static int pum_win_row;
+ static int pum_win_height;
+ static int pum_win_col;
+***************
+*** 110,115 ****
+--- 111,117 ----
+
+ // Remember the essential parts of the window position and size, so we
+ // can decide when to reposition the popup menu.
++ pum_window = curwin;
+ pum_win_row = curwin->w_wrow + W_WINROW(curwin);
+ pum_win_height = curwin->w_height;
+ pum_win_col = curwin->w_wincol;
+***************
+*** 846,855 ****
+ if (!pum_visible())
+ return; // nothing to do
+
+! if (pum_win_row == curwin->w_wrow + W_WINROW(curwin)
+! && pum_win_height == curwin->w_height
+! && pum_win_col == curwin->w_wincol
+! && pum_win_width == curwin->w_width)
+ {
+ // window position didn't change, redraw in the same position
+ pum_redraw();
+--- 848,858 ----
+ if (!pum_visible())
+ return; // nothing to do
+
+! if (pum_window != curwin
+! || (pum_win_row == curwin->w_wrow + W_WINROW(curwin)
+! && pum_win_height == curwin->w_height
+! && pum_win_col == curwin->w_wincol
+! && pum_win_width == curwin->w_width))
+ {
+ // window position didn't change, redraw in the same position
+ pum_redraw();
+***************
+*** 912,917 ****
+--- 915,923 ----
+ pum_width = Columns - pum_col;
+ if (pum_width > pum_base_width + 1)
+ pum_width = pum_base_width + 1;
++
++ // Do not redraw at cursor position.
++ pum_window = NULL;
+ }
+
+ # endif
+*** ../vim-8.1.0064/src/version.c 2018-06-17 16:23:29.341140642 +0200
+--- src/version.c 2018-06-17 17:09:52.429048636 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 65,
+ /**/
+
+--
+Time is money. Especially if you make clocks.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0066 b/data/vim/patches/8.1.0066
new file mode 100644
index 000000000..7b1a2dff1
--- /dev/null
+++ b/data/vim/patches/8.1.0066
@@ -0,0 +1,129 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0066
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0066
+Problem: Nasty autocommand causes using freed memory. (Dominique Pelle)
+Solution: Do not force executing autocommands if the value of 'syntax' or
+ 'filetype' did not change.
+Files: src/option.c
+
+
+*** ../vim-8.1.0065/src/option.c 2018-06-16 22:58:11.791025515 +0200
+--- src/option.c 2018-06-17 17:30:01.421260379 +0200
+***************
+*** 6029,6035 ****
+ /* set when changing an option that only requires a redraw in the GUI */
+ int redraw_gui_only = FALSE;
+ #endif
+! int ft_changed = FALSE;
+ #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS)
+ int did_swaptcap = FALSE;
+ #endif
+--- 6029,6035 ----
+ /* set when changing an option that only requires a redraw in the GUI */
+ int redraw_gui_only = FALSE;
+ #endif
+! int value_changed = FALSE;
+ #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS)
+ int did_swaptcap = FALSE;
+ #endif
+***************
+*** 7437,7443 ****
+ if (!valid_filetype(*varp))
+ errmsg = e_invarg;
+ else
+! ft_changed = STRCMP(oldval, *varp) != 0;
+ }
+
+ #ifdef FEAT_SYN_HL
+--- 7437,7443 ----
+ if (!valid_filetype(*varp))
+ errmsg = e_invarg;
+ else
+! value_changed = STRCMP(oldval, *varp) != 0;
+ }
+
+ #ifdef FEAT_SYN_HL
+***************
+*** 7445,7450 ****
+--- 7445,7452 ----
+ {
+ if (!valid_filetype(*varp))
+ errmsg = e_invarg;
++ else
++ value_changed = STRCMP(oldval, *varp) != 0;
+ }
+ #endif
+
+***************
+*** 7565,7584 ****
+ /* When 'syntax' is set, load the syntax of that name */
+ if (varp == &(curbuf->b_p_syn))
+ {
+ apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
+! curbuf->b_fname, TRUE, curbuf);
+ }
+ #endif
+ else if (varp == &(curbuf->b_p_ft))
+ {
+ /* 'filetype' is set, trigger the FileType autocommand.
+ * Skip this when called from a modeline and the filetype was
+! * already set to this value. */
+! if (!(opt_flags & OPT_MODELINE) || ft_changed)
+ {
+ did_filetype = TRUE;
+ apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft,
+! curbuf->b_fname, TRUE, curbuf);
+ /* Just in case the old "curbuf" is now invalid. */
+ if (varp != &(curbuf->b_p_ft))
+ varp = NULL;
+--- 7567,7590 ----
+ /* When 'syntax' is set, load the syntax of that name */
+ if (varp == &(curbuf->b_p_syn))
+ {
++ // Only pass TRUE for "force" when the value changed, to avoid
++ // endless recurrence. */
+ apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
+! curbuf->b_fname, value_changed, curbuf);
+ }
+ #endif
+ else if (varp == &(curbuf->b_p_ft))
+ {
+ /* 'filetype' is set, trigger the FileType autocommand.
+ * Skip this when called from a modeline and the filetype was
+! * already set to this value.
+! * Only pass TRUE for "force" when the value changed, to avoid
+! * endless recurrence. */
+! if (!(opt_flags & OPT_MODELINE) || value_changed)
+ {
+ did_filetype = TRUE;
+ apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft,
+! curbuf->b_fname, value_changed, curbuf);
+ /* Just in case the old "curbuf" is now invalid. */
+ if (varp != &(curbuf->b_p_ft))
+ varp = NULL;
+*** ../vim-8.1.0065/src/version.c 2018-06-17 17:10:55.636590392 +0200
+--- src/version.c 2018-06-17 17:32:02.240534510 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 66,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+61. Your best friends know your e-mail address, but neither your phone number
+ nor the address where you live.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0067 b/data/vim/patches/8.1.0067
new file mode 100644
index 000000000..3a183214a
--- /dev/null
+++ b/data/vim/patches/8.1.0067
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0067
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0067
+Problem: Syntax highlighting not working when re-entering a buffer.
+Solution: Do force executing autocommands when not called recursively.
+Files: src/option.c
+
+
+*** ../vim-8.1.0066/src/option.c 2018-06-17 17:32:55.088218019 +0200
+--- src/option.c 2018-06-17 19:01:55.382567829 +0200
+***************
+*** 7567,7590 ****
+ /* When 'syntax' is set, load the syntax of that name */
+ if (varp == &(curbuf->b_p_syn))
+ {
+! // Only pass TRUE for "force" when the value changed, to avoid
+! // endless recurrence. */
+! apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
+! curbuf->b_fname, value_changed, curbuf);
+ }
+ #endif
+ else if (varp == &(curbuf->b_p_ft))
+ {
+ /* 'filetype' is set, trigger the FileType autocommand.
+ * Skip this when called from a modeline and the filetype was
+! * already set to this value.
+! * Only pass TRUE for "force" when the value changed, to avoid
+! * endless recurrence. */
+ if (!(opt_flags & OPT_MODELINE) || value_changed)
+ {
+ did_filetype = TRUE;
+! apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft,
+! curbuf->b_fname, value_changed, curbuf);
+ /* Just in case the old "curbuf" is now invalid. */
+ if (varp != &(curbuf->b_p_ft))
+ varp = NULL;
+--- 7567,7598 ----
+ /* When 'syntax' is set, load the syntax of that name */
+ if (varp == &(curbuf->b_p_syn))
+ {
+! static int syn_recursive = 0;
+!
+! ++syn_recursive;
+! // Only pass TRUE for "force" when the value changed or not used
+! // recursively, to avoid endless recurrence.
+! apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, curbuf->b_fname,
+! value_changed || syn_recursive == 1, curbuf);
+! --syn_recursive;
+ }
+ #endif
+ else if (varp == &(curbuf->b_p_ft))
+ {
+ /* 'filetype' is set, trigger the FileType autocommand.
+ * Skip this when called from a modeline and the filetype was
+! * already set to this value. */
+ if (!(opt_flags & OPT_MODELINE) || value_changed)
+ {
++ static int ft_recursive = 0;
++
++ ++ft_recursive;
+ did_filetype = TRUE;
+! // Only pass TRUE for "force" when the value changed or not
+! // used recursively, to avoid endless recurrence.
+! apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, curbuf->b_fname,
+! value_changed || ft_recursive == 1, curbuf);
+! --ft_recursive;
+ /* Just in case the old "curbuf" is now invalid. */
+ if (varp != &(curbuf->b_p_ft))
+ varp = NULL;
+*** ../vim-8.1.0066/src/version.c 2018-06-17 17:32:55.088218019 +0200
+--- src/version.c 2018-06-17 19:07:00.000819142 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 67,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+62. If your doorbell rings, you think that new mail has arrived. And then
+ you're disappointed that it's only someone at the door.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0068 b/data/vim/patches/8.1.0068
new file mode 100644
index 000000000..21c51359d
--- /dev/null
+++ b/data/vim/patches/8.1.0068
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0068
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0068
+Problem: Nasty autocommands can still cause using freed memory.
+Solution: Disallow using setloclist() and setqflist() recursively.
+Files: src/evalfunc.c
+
+
+*** ../vim-8.1.0067/src/evalfunc.c 2018-06-12 20:25:47.887923393 +0200
+--- src/evalfunc.c 2018-06-17 19:16:21.949606435 +0200
+***************
+*** 10621,10626 ****
+--- 10652,10658 ----
+ static char *e_invact = N_("E927: Invalid action: '%s'");
+ char_u *act;
+ int action = 0;
++ static int recursive = 0;
+ #endif
+
+ rettv->vval.v_number = -1;
+***************
+*** 10628,10633 ****
+--- 10660,10667 ----
+ #ifdef FEAT_QUICKFIX
+ if (list_arg->v_type != VAR_LIST)
+ EMSG(_(e_listreq));
++ else if (recursive != 0)
++ EMSG(_(e_au_recursive));
+ else
+ {
+ list_T *l = list_arg->vval.v_list;
+***************
+*** 10662,10670 ****
+ }
+ }
+
+ if (l != NULL && action && valid_dict && set_errorlist(wp, l, action,
+! (char_u *)(wp == NULL ? ":setqflist()" : ":setloclist()"), d) == OK)
+ rettv->vval.v_number = 0;
+ }
+ #endif
+ }
+--- 10696,10707 ----
+ }
+ }
+
++ ++recursive;
+ if (l != NULL && action && valid_dict && set_errorlist(wp, l, action,
+! (char_u *)(wp == NULL ? ":setqflist()" : ":setloclist()"),
+! d) == OK)
+ rettv->vval.v_number = 0;
++ --recursive;
+ }
+ #endif
+ }
+*** ../vim-8.1.0067/src/version.c 2018-06-17 19:08:26.476323920 +0200
+--- src/version.c 2018-06-17 19:17:27.305233384 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 68,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+63. You start using smileys in your snail mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0069 b/data/vim/patches/8.1.0069
new file mode 100644
index 000000000..f3f67bdc7
--- /dev/null
+++ b/data/vim/patches/8.1.0069
@@ -0,0 +1,301 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0069
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0069
+Problem: Cannot handle pressing CTRL-C in a prompt buffer.
+Solution: Add prompt_setinterrupt().
+Files: runtime/doc/eval.txt, src/edit.c, src/evalfunc.c, src/channel.c,
+ src/proto/channel.pro
+
+
+*** ../vim-8.1.0068/runtime/doc/eval.txt 2018-06-07 18:17:42.274227515 +0200
+--- runtime/doc/eval.txt 2018-06-17 18:12:12.760548966 +0200
+***************
+*** 2297,2304 ****
+ prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
+ printf({fmt}, {expr1}...) String format text
+ prompt_addtext({buf}, {expr}) none add text to a prompt buffer
+- prompt_setprompt({buf}, {text}) none set prompt text
+ prompt_setcallback({buf}, {expr}) none set prompt callback function
+ pumvisible() Number whether popup menu is visible
+ pyeval({expr}) any evaluate |Python| expression
+ py3eval({expr}) any evaluate |python3| expression
+--- 2297,2305 ----
+ prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
+ printf({fmt}, {expr1}...) String format text
+ prompt_addtext({buf}, {expr}) none add text to a prompt buffer
+ prompt_setcallback({buf}, {expr}) none set prompt callback function
++ prompt_setinterrupt({buf}, {text}) none set prompt interrupt function
++ prompt_setprompt({buf}, {text}) none set prompt text
+ pumvisible() Number whether popup menu is visible
+ pyeval({expr}) any evaluate |Python| expression
+ py3eval({expr}) any evaluate |python3| expression
+***************
+*** 6506,6522 ****
+ arguments an error is given. Up to 18 arguments can be used.
+
+
+- prompt_setprompt({buf}, {text}) *prompt_setprompt()*
+- Set prompt for buffer {buf} to {text}. You most likely want
+- {text} to end in a space.
+- The result is only visible if {buf} has 'buftype' set to
+- "prompt". Example: >
+- call prompt_setprompt(bufnr(''), 'command: ')
+-
+-
+ prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
+! Set prompt callback for buffer {buf} to {expr}. This has only
+ effect if {buf} has 'buftype' set to "prompt".
+ The callback is invoked when pressing Enter. The current
+ buffer will always be the prompt buffer. A new line for a
+ prompt is added before invoking the callback, thus the prompt
+--- 6507,6517 ----
+ arguments an error is given. Up to 18 arguments can be used.
+
+
+ prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
+! Set prompt callback for buffer {buf} to {expr}. When {expr}
+! is an empty string the callback is removed. This has only
+ effect if {buf} has 'buftype' set to "prompt".
++
+ The callback is invoked when pressing Enter. The current
+ buffer will always be the prompt buffer. A new line for a
+ prompt is added before invoking the callback, thus the prompt
+***************
+*** 6541,6546 ****
+--- 6536,6557 ----
+ endif
+ endfunc
+
++ prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()*
++ Set a callback for buffer {buf} to {expr}. When {expr} is an
++ empty string the callback is removed. This has only effect if
++ {buf} has 'buftype' set to "prompt".
++
++ This callback will be invoked when pressing CTRL-C in Insert
++ mode. Without setting a callback Vim will exit Insert mode,
++ as in any buffer.
++
++ prompt_setprompt({buf}, {text}) *prompt_setprompt()*
++ Set prompt for buffer {buf} to {text}. You most likely want
++ {text} to end in a space.
++ The result is only visible if {buf} has 'buftype' set to
++ "prompt". Example: >
++ call prompt_setprompt(bufnr(''), 'command: ')
++
+
+ pumvisible() *pumvisible()*
+ Returns non-zero when the popup menu is visible, zero
+***************
+*** 8563,8569 ****
+ instead of using 'termwinsize'
+ "term_cols" horizontal size to use for the terminal,
+ instead of using 'termwinsize'
+! "vertical" split the window vertically
+ "curwin" use the current window, do not split the
+ window; fails if the current buffer
+ cannot be |abandon|ed
+--- 8574,8582 ----
+ instead of using 'termwinsize'
+ "term_cols" horizontal size to use for the terminal,
+ instead of using 'termwinsize'
+! "vertical" split the window vertically; note that
+! other window position can be defined with
+! command modifiers, such as |:belowright|.
+ "curwin" use the current window, do not split the
+ window; fails if the current buffer
+ cannot be |abandon|ed
+***************
+*** 9392,9402 ****
+ out if it works in the current console).
+ wildignore Compiled with 'wildignore' option.
+ wildmenu Compiled with 'wildmenu' option.
+ win32 Win32 version of Vim (MS-Windows 95 and later, 32 or
+ 64 bits)
+ win32unix Win32 version of Vim, using Unix files (Cygwin)
+ win64 Win64 version of Vim (MS-Windows 64 bit).
+! win95 Win32 version for MS-Windows 95/98/ME.
+ winaltkeys Compiled with 'winaltkeys' option.
+ windows Compiled with support for more than one window.
+ writebackup Compiled with 'writebackup' default on.
+--- 9405,9416 ----
+ out if it works in the current console).
+ wildignore Compiled with 'wildignore' option.
+ wildmenu Compiled with 'wildmenu' option.
++ win16 old version for MS-Windows 3.1 (always False)
+ win32 Win32 version of Vim (MS-Windows 95 and later, 32 or
+ 64 bits)
+ win32unix Win32 version of Vim, using Unix files (Cygwin)
+ win64 Win64 version of Vim (MS-Windows 64 bit).
+! win95 Win32 version for MS-Windows 95/98/ME (always False)
+ winaltkeys Compiled with 'winaltkeys' option.
+ windows Compiled with support for more than one window.
+ writebackup Compiled with 'writebackup' default on.
+*** ../vim-8.1.0068/src/edit.c 2018-06-17 16:23:29.337140663 +0200
+--- src/edit.c 2018-06-17 19:32:54.656479224 +0200
+***************
+*** 1016,1021 ****
+--- 1016,1034 ----
+ goto doESCkey;
+ }
+ #endif
++ #ifdef FEAT_JOB_CHANNEL
++ if (c == Ctrl_C && bt_prompt(curbuf))
++ {
++ if (invoke_prompt_interrupt())
++ {
++ if (!bt_prompt(curbuf))
++ // buffer changed to a non-prompt buffer, get out of
++ // Insert mode
++ goto doESCkey;
++ break;
++ }
++ }
++ #endif
+
+ #ifdef UNIX
+ do_intr:
+*** ../vim-8.1.0068/src/evalfunc.c 2018-06-17 19:22:48.343603795 +0200
+--- src/evalfunc.c 2018-06-17 19:16:21.949606435 +0200
+***************
+*** 298,303 ****
+--- 298,304 ----
+ static void f_printf(typval_T *argvars, typval_T *rettv);
+ #ifdef FEAT_JOB_CHANNEL
+ static void f_prompt_setcallback(typval_T *argvars, typval_T *rettv);
++ static void f_prompt_setinterrupt(typval_T *argvars, typval_T *rettv);
+ static void f_prompt_setprompt(typval_T *argvars, typval_T *rettv);
+ #endif
+ static void f_pumvisible(typval_T *argvars, typval_T *rettv);
+***************
+*** 754,759 ****
+--- 755,761 ----
+ {"printf", 1, 19, f_printf},
+ #ifdef FEAT_JOB_CHANNEL
+ {"prompt_setcallback", 2, 2, f_prompt_setcallback},
++ {"prompt_setinterrupt", 2, 2, f_prompt_setinterrupt},
+ {"prompt_setprompt", 2, 2, f_prompt_setprompt},
+ #endif
+ {"pumvisible", 0, 0, f_pumvisible},
+***************
+*** 8622,8627 ****
+--- 8624,8658 ----
+ }
+
+ /*
++ * "prompt_setinterrupt({buffer}, {callback})" function
++ */
++ static void
++ f_prompt_setinterrupt(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ buf_T *buf;
++ char_u *callback;
++ partial_T *partial;
++
++ if (check_secure())
++ return;
++ buf = get_buf_tv(&argvars[0], FALSE);
++ if (buf == NULL)
++ return;
++
++ callback = get_callback(&argvars[1], &partial);
++ if (callback == NULL)
++ return;
++
++ free_callback(buf->b_prompt_interrupt, buf->b_prompt_int_partial);
++ if (partial == NULL)
++ buf->b_prompt_interrupt = vim_strsave(callback);
++ else
++ /* pointer into the partial */
++ buf->b_prompt_interrupt = callback;
++ buf->b_prompt_int_partial = partial;
++ }
++
++ /*
+ * "prompt_setprompt({buffer}, {text})" function
+ */
+ static void
+*** ../vim-8.1.0068/src/channel.c 2018-06-12 20:25:47.883923416 +0200
+--- src/channel.c 2018-06-17 19:33:49.264186387 +0200
+***************
+*** 5856,5862 ****
+ curwin->w_cursor.lnum = lnum + 1;
+ curwin->w_cursor.col = 0;
+
+! if (curbuf->b_prompt_callback == NULL)
+ return;
+ text = ml_get(lnum);
+ prompt = prompt_text();
+--- 5856,5862 ----
+ curwin->w_cursor.lnum = lnum + 1;
+ curwin->w_cursor.col = 0;
+
+! if (curbuf->b_prompt_callback == NULL || *curbuf->b_prompt_callback == NUL)
+ return;
+ text = ml_get(lnum);
+ prompt = prompt_text();
+***************
+*** 5874,5877 ****
+--- 5874,5901 ----
+ clear_tv(&rettv);
+ }
+
++ /*
++ * Return TRUE when the interrupt callback was invoked.
++ */
++ int
++ invoke_prompt_interrupt(void)
++ {
++ typval_T rettv;
++ int dummy;
++ typval_T argv[1];
++
++ if (curbuf->b_prompt_interrupt == NULL
++ || *curbuf->b_prompt_interrupt == NUL)
++ return FALSE;
++ argv[0].v_type = VAR_UNKNOWN;
++
++ got_int = FALSE; // don't skip executing commands
++ call_func(curbuf->b_prompt_interrupt,
++ (int)STRLEN(curbuf->b_prompt_interrupt),
++ &rettv, 0, argv, NULL, 0L, 0L, &dummy, TRUE,
++ curbuf->b_prompt_int_partial, NULL);
++ clear_tv(&rettv);
++ return TRUE;
++ }
++
+ #endif /* FEAT_JOB_CHANNEL */
+*** ../vim-8.1.0068/src/proto/channel.pro 2018-06-12 20:25:47.883923416 +0200
+--- src/proto/channel.pro 2018-06-17 19:34:32.267954974 +0200
+***************
+*** 72,75 ****
+--- 72,76 ----
+ void job_info_all(list_T *l);
+ int job_stop(job_T *job, typval_T *argvars, char *type);
+ void invoke_prompt_callback(void);
++ int invoke_prompt_interrupt(void);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0068/src/version.c 2018-06-17 19:22:48.343603795 +0200
+--- src/version.c 2018-06-17 19:34:40.111912692 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 69,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+64. The remote to the T.V. is missing...and you don't even care.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0070 b/data/vim/patches/8.1.0070
new file mode 100644
index 000000000..25766d0ec
--- /dev/null
+++ b/data/vim/patches/8.1.0070
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0070
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0070
+Problem: Missing part of the changes for prompt_setinterrupt().
+Solution: Add the missing changes.
+Files: src/structs.h
+
+
+*** ../vim-8.1.0069/src/structs.h 2018-06-06 09:11:07.257357317 +0200
+--- src/structs.h 2018-06-17 18:27:08.038723480 +0200
+***************
+*** 2360,2365 ****
+--- 2360,2367 ----
+ char_u *b_prompt_text; // set by prompt_setprompt()
+ char_u *b_prompt_callback; // set by prompt_setcallback()
+ partial_T *b_prompt_partial; // set by prompt_setcallback()
++ char_u *b_prompt_interrupt; // set by prompt_setinterrupt()
++ partial_T *b_prompt_int_partial; // set by prompt_setinterrupt()
+ int b_prompt_insert; // value for restart_edit when entering
+ // a prompt buffer window.
+ #endif
+*** ../vim-8.1.0069/src/version.c 2018-06-17 19:36:30.215317108 +0200
+--- src/version.c 2018-06-17 20:10:13.756190264 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 70,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+65. The last time you looked at the clock it was 11:30pm, and in what
+ seems like only a few seconds later, your sister runs past you to
+ catch her 7am school bus.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0071 b/data/vim/patches/8.1.0071
new file mode 100644
index 000000000..e3a8640fb
--- /dev/null
+++ b/data/vim/patches/8.1.0071
@@ -0,0 +1,792 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0071
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0071
+Problem: Terminal debugger only works with the terminal feature.
+Solution: Make it also work with a prompt buffer. Makes it possible to use
+ on MS-Windows. Various other improvements. (closes #3012)
+Files: runtime/doc/terminal.txt,
+ runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0070/runtime/doc/terminal.txt 2018-06-12 18:04:28.034267877 +0200
+--- runtime/doc/terminal.txt 2018-06-17 21:33:43.206011529 +0200
+***************
+*** 38,43 ****
+--- 38,44 ----
+ Stepping through code |termdebug-stepping|
+ Inspecting variables |termdebug-variables|
+ Other commands |termdebug-commands|
++ Prompt mode |termdebug-prompt|
+ Communication |termdebug-communication|
+ Customizing |termdebug-customizing|
+
+***************
+*** 620,625 ****
+--- 621,630 ----
+ the source code in a Vim window. Since this is completely contained inside
+ Vim this also works remotely over an ssh connection.
+
++ When the |+terminal| feature is missing, the plugin will use the "prompt"
++ buffer type, if possible. The running program will then use a newly opened
++ terminal window. See |termdebug-prompt| below for details.
++
+
+ Starting ~
+ *termdebug-starting*
+***************
+*** 799,804 ****
+--- 804,826 ----
+ isn't one
+
+
++ Prompt mode ~
++ *termdebug-prompt*
++ When the |+terminal| feature is not supported and on MS-Windows, gdb will run
++ in a buffer with 'buftype' set to "prompt". This works slightly differently:
++ - The gdb window will be in Insert mode while typing commands. Go to Normal
++ mode with <Esc>, then you can move around in the buffer, copy/paste, etc.
++ Go back to editing the gdb command with any command that starts Insert mode,
++ such as `a` or `i`.
++ - The program being debugged will run in a separate window. On MS-Windows
++ this is a new console window. On Unix, if the |+terminal| feature is
++ available a Terminal window will be opened to run the debugged program in.
++
++ *termdebug_use_prompt*
++ Prompt mode can be used even when the |+terminal| feature is present with: >
++ let g:termdebug_use_prompt = 1
++
++
+ Communication ~
+ *termdebug-communication*
+ There is another, hidden, buffer, which is used for Vim to communicate with
+***************
+*** 836,841 ****
+--- 858,871 ----
+ hi debugBreakpoint term=reverse ctermbg=red guibg=red
+
+
++ Shorcuts *termdebug_shortcuts*
++
++ You can define your own shortcuts (mappings) to control gdb, that can work in
++ any window, using the TermDebugSendCommand() function. Example: >
++ map ,w :call TermDebugSendCommand('where')<CR>
++ The argument is the gdb command.
++
++
+ Popup menu *termdebug_popup*
+
+ By default the Termdebug plugin sets 'mousemodel' to "popup_setpos" and adds
+*** ../vim-8.1.0070/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-04-16 16:16:51.000000000 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-17 21:27:00.040243063 +0200
+***************
+*** 1,27 ****
+ " Debugger plugin using gdb.
+ "
+! " WORK IN PROGRESS - much doesn't work yet
+ "
+! " Open two visible terminal windows:
+! " 1. run a pty, as with ":term NONE"
+! " 2. run gdb, passing the pty
+! " The current window is used to view source code and follows gdb.
+ "
+ " A third terminal window is hidden, it is used for communication with gdb.
+ "
+ " The communication with gdb uses GDB/MI. See:
+ " https://sourceware.org/gdb/current/onlinedocs/gdb/GDB_002fMI.html
+- "
+- " Author: Bram Moolenaar
+- " Copyright: Vim license applies, see ":help license"
+
+! " In case this gets loaded twice.
+ if exists(':Termdebug')
+ finish
+ endif
+
+! " Uncomment this line to write logging in "debuglog".
+! " call ch_logfile('debuglog', 'w')
+
+ " The command that starts debugging, e.g. ":Termdebug vim".
+ " To end type "quit" in the gdb window.
+--- 1,60 ----
+ " Debugger plugin using gdb.
+ "
+! " Author: Bram Moolenaar
+! " Copyright: Vim license applies, see ":help license"
+! " Last Update: 2018 Jun 3
+! "
+! " WORK IN PROGRESS - Only the basics work
+! " Note: On MS-Windows you need a recent version of gdb. The one included with
+! " MingW is too old (7.6.1).
+! " I used version 7.12 from http://www.equation.com/servlet/equation.cmd?fa=gdb
+! "
+! " There are two ways to run gdb:
+! " - In a terminal window; used if possible, does not work on MS-Windows
+! " Not used when g:termdebug_use_prompt is set to 1.
+! " - Using a "prompt" buffer; may use a terminal window for the program
+ "
+! " For both the current window is used to view source code and shows the
+! " current statement from gdb.
+ "
++ " USING A TERMINAL WINDOW
++ "
++ " Opens two visible terminal windows:
++ " 1. runs a pty for the debugged program, as with ":term NONE"
++ " 2. runs gdb, passing the pty of the debugged program
+ " A third terminal window is hidden, it is used for communication with gdb.
+ "
++ " USING A PROMPT BUFFER
++ "
++ " Opens a window with a prompt buffer to communicate with gdb.
++ " Gdb is run as a job with callbacks for I/O.
++ " On Unix another terminal window is opened to run the debugged program
++ " On MS-Windows a separate console is opened to run the debugged program
++ "
+ " The communication with gdb uses GDB/MI. See:
+ " https://sourceware.org/gdb/current/onlinedocs/gdb/GDB_002fMI.html
+
+! " In case this gets sourced twice.
+ if exists(':Termdebug')
+ finish
+ endif
+
+! " Need either the +terminal feature or +channel and the prompt buffer.
+! " The terminal feature does not work with gdb on win32.
+! if has('terminal') && !has('win32')
+! let s:way = 'terminal'
+! elseif has('channel') && exists('*prompt_setprompt')
+! let s:way = 'prompt'
+! else
+! if has('terminal')
+! let s:err = 'Cannot debug, missing prompt buffer support'
+! else
+! let s:err = 'Cannot debug, +channel feature is not supported'
+! endif
+! command -nargs=* -complete=file -bang Termdebug echoerr s:err
+! command -nargs=+ -complete=file -bang TermdebugCommand echoerr s:err
+! finish
+! endif
+
+ " The command that starts debugging, e.g. ":Termdebug vim".
+ " To end type "quit" in the gdb window.
+***************
+*** 59,66 ****
+ echoerr 'Terminal debugger already running'
+ return
+ endif
+
+! let s:startwin = win_getid(winnr())
+ let s:startsigncolumn = &signcolumn
+
+ let s:save_columns = 0
+--- 92,103 ----
+ echoerr 'Terminal debugger already running'
+ return
+ endif
++ let s:ptywin = 0
+
+! " Uncomment this line to write logging in "debuglog".
+! " call ch_logfile('debuglog', 'w')
+!
+! let s:sourcewin = win_getid(winnr())
+ let s:startsigncolumn = &signcolumn
+
+ let s:save_columns = 0
+***************
+*** 69,83 ****
+ let s:save_columns = &columns
+ let &columns = g:termdebug_wide
+ endif
+! let vertical = 1
+ else
+! let vertical = 0
+ endif
+
+! " Open a terminal window without a job, to run the debugged program
+ let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'gdb program',
+! \ 'vertical': vertical,
+ \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+--- 106,136 ----
+ let s:save_columns = &columns
+ let &columns = g:termdebug_wide
+ endif
+! let s:vertical = 1
+! else
+! let s:vertical = 0
+! endif
+!
+! " Override using a terminal window by setting g:termdebug_use_prompt to 1.
+! let use_prompt = exists('g:termdebug_use_prompt') && g:termdebug_use_prompt
+! if has('terminal') && !has('win32') && !use_prompt
+! let s:way = 'terminal'
+ else
+! let s:way = 'prompt'
+ endif
+
+! if s:way == 'prompt'
+! call s:StartDebug_prompt(a:dict)
+! else
+! call s:StartDebug_term(a:dict)
+! endif
+! endfunc
+!
+! func s:StartDebug_term(dict)
+! " Open a terminal window without a job, to run the debugged program in.
+ let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ 'vertical': s:vertical,
+ \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+***************
+*** 85,91 ****
+ endif
+ let pty = job_info(term_getjob(s:ptybuf))['tty_out']
+ let s:ptywin = win_getid(winnr())
+! if vertical
+ " Assuming the source code window will get a signcolumn, use two more
+ " columns for that, thus one less for the terminal window.
+ exe (&columns / 2 - 1) . "wincmd |"
+--- 138,144 ----
+ endif
+ let pty = job_info(term_getjob(s:ptybuf))['tty_out']
+ let s:ptywin = win_getid(winnr())
+! if s:vertical
+ " Assuming the source code window will get a signcolumn, use two more
+ " columns for that, thus one less for the terminal window.
+ exe (&columns / 2 - 1) . "wincmd |"
+***************
+*** 110,118 ****
+ let proc_args = get(a:dict, 'proc_args', [])
+
+ let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args
+! echomsg 'executing "' . join(cmd) . '"'
+ let s:gdbbuf = term_start(cmd, {
+! \ 'exit_cb': function('s:EndDebug'),
+ \ 'term_finish': 'close',
+ \ })
+ if s:gdbbuf == 0
+--- 163,171 ----
+ let proc_args = get(a:dict, 'proc_args', [])
+
+ let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args
+! call ch_log('executing "' . join(cmd) . '"')
+ let s:gdbbuf = term_start(cmd, {
+! \ 'exit_cb': function('s:EndTermDebug'),
+ \ 'term_finish': 'close',
+ \ })
+ if s:gdbbuf == 0
+***************
+*** 166,176 ****
+ " exec-interrupt, since many commands don't work properly while the target is
+ " running.
+ call s:SendCommand('-gdb-set mi-async on')
+
+ " Disable pagination, it causes everything to stop at the gdb
+ " "Type <return> to continue" prompt.
+! call s:SendCommand('-gdb-set pagination off')
+
+ " Sign used to highlight the line where the program has stopped.
+ " There can be only one.
+ sign define debugPC linehl=debugPC
+--- 219,326 ----
+ " exec-interrupt, since many commands don't work properly while the target is
+ " running.
+ call s:SendCommand('-gdb-set mi-async on')
++ " Older gdb uses a different command.
++ call s:SendCommand('-gdb-set target-async on')
+
+ " Disable pagination, it causes everything to stop at the gdb
+ " "Type <return> to continue" prompt.
+! call s:SendCommand('set pagination off')
+!
+! call s:StartDebugCommon(a:dict)
+! endfunc
+!
+! func s:StartDebug_prompt(dict)
+! " Open a window with a prompt buffer to run gdb in.
+! if s:vertical
+! vertical new
+! else
+! new
+! endif
+! let s:gdbwin = win_getid(winnr())
+! let s:promptbuf = bufnr('')
+! call prompt_setprompt(s:promptbuf, 'gdb> ')
+! set buftype=prompt
+! file gdb
+! call prompt_setcallback(s:promptbuf, function('s:PromptCallback'))
+! call prompt_setinterrupt(s:promptbuf, function('s:PromptInterrupt'))
+
++ if s:vertical
++ " Assuming the source code window will get a signcolumn, use two more
++ " columns for that, thus one less for the terminal window.
++ exe (&columns / 2 - 1) . "wincmd |"
++ endif
++
++ " Add -quiet to avoid the intro message causing a hit-enter prompt.
++ let gdb_args = get(a:dict, 'gdb_args', [])
++ let proc_args = get(a:dict, 'proc_args', [])
++
++ let cmd = [g:termdebugger, '-quiet', '--interpreter=mi2'] + gdb_args
++ call ch_log('executing "' . join(cmd) . '"')
++
++ let s:gdbjob = job_start(cmd, {
++ \ 'exit_cb': function('s:EndPromptDebug'),
++ \ 'out_cb': function('s:GdbOutCallback'),
++ \ })
++ if job_status(s:gdbjob) != "run"
++ echoerr 'Failed to start gdb'
++ exe 'bwipe! ' . s:promptbuf
++ return
++ endif
++ let s:gdb_channel = job_getchannel(s:gdbjob)
++
++ " Interpret commands while the target is running. This should usualy only
++ " be exec-interrupt, since many commands don't work properly while the
++ " target is running.
++ call s:SendCommand('-gdb-set mi-async on')
++ " Older gdb uses a different command.
++ call s:SendCommand('-gdb-set target-async on')
++
++ let s:ptybuf = 0
++ if has('win32')
++ " MS-Windows: run in a new console window for maximum compatibility
++ call s:SendCommand('set new-console on')
++ elseif has('terminal')
++ " Unix: Run the debugged program in a terminal window. Open it below the
++ " gdb window.
++ belowright let s:ptybuf = term_start('NONE', {
++ \ 'term_name': 'debugged program',
++ \ })
++ if s:ptybuf == 0
++ echoerr 'Failed to open the program terminal window'
++ call job_stop(s:gdbjob)
++ return
++ endif
++ let s:ptywin = win_getid(winnr())
++ let pty = job_info(term_getjob(s:ptybuf))['tty_out']
++ call s:SendCommand('tty ' . pty)
++
++ " Since GDB runs in a prompt window, the environment has not been set to
++ " match a terminal window, need to do that now.
++ call s:SendCommand('set env TERM = xterm-color')
++ call s:SendCommand('set env ROWS = ' . winheight(s:ptywin))
++ call s:SendCommand('set env LINES = ' . winheight(s:ptywin))
++ call s:SendCommand('set env COLUMNS = ' . winwidth(s:ptywin))
++ call s:SendCommand('set env COLORS = ' . &t_Co)
++ call s:SendCommand('set env VIM_TERMINAL = ' . v:version)
++ else
++ " TODO: open a new terminal get get the tty name, pass on to gdb
++ call s:SendCommand('show inferior-tty')
++ endif
++ call s:SendCommand('set print pretty on')
++ call s:SendCommand('set breakpoint pending on')
++ " Disable pagination, it causes everything to stop at the gdb
++ call s:SendCommand('set pagination off')
++
++ " Set arguments to be run
++ if len(proc_args)
++ call s:SendCommand('set args ' . join(proc_args))
++ endif
++
++ call s:StartDebugCommon(a:dict)
++ startinsert
++ endfunc
++
++ func s:StartDebugCommon(dict)
+ " Sign used to highlight the line where the program has stopped.
+ " There can be only one.
+ sign define debugPC linehl=debugPC
+***************
+*** 180,186 ****
+ sign define debugBreakpoint text=>> texthl=debugBreakpoint
+
+ " Install debugger commands in the text window.
+! call win_gotoid(s:startwin)
+ call s:InstallCommands()
+ call win_gotoid(s:gdbwin)
+
+--- 330,336 ----
+ sign define debugBreakpoint text=>> texthl=debugBreakpoint
+
+ " Install debugger commands in the text window.
+! call win_gotoid(s:sourcewin)
+ call s:InstallCommands()
+ call win_gotoid(s:gdbwin)
+
+***************
+*** 202,228 ****
+ au BufUnload * call s:BufUnloaded()
+ augroup END
+
+! " Run the command if the bang attribute was given
+! " and got to the window
+ if get(a:dict, 'bang', 0)
+ call s:SendCommand('-exec-run')
+ call win_gotoid(s:ptywin)
+ endif
+
+ endfunc
+
+! func s:EndDebug(job, status)
+! exe 'bwipe! ' . s:ptybuf
+ exe 'bwipe! ' . s:commbuf
+ unlet s:gdbwin
+
+ let curwinid = win_getid(winnr())
+
+! call win_gotoid(s:startwin)
+ let &signcolumn = s:startsigncolumn
+ call s:DeleteCommands()
+
+ call win_gotoid(curwinid)
+ if s:save_columns > 0
+ let &columns = s:save_columns
+ endif
+--- 352,481 ----
+ au BufUnload * call s:BufUnloaded()
+ augroup END
+
+! " Run the command if the bang attribute was given and got to the debug
+! " window.
+ if get(a:dict, 'bang', 0)
+ call s:SendCommand('-exec-run')
+ call win_gotoid(s:ptywin)
+ endif
++ endfunc
++
++ " Send a command to gdb. "cmd" is the string without line terminator.
++ func s:SendCommand(cmd)
++ call ch_log('sending to gdb: ' . a:cmd)
++ if s:way == 'prompt'
++ call ch_sendraw(s:gdb_channel, a:cmd . "\n")
++ else
++ call term_sendkeys(s:commbuf, a:cmd . "\r")
++ endif
++ endfunc
++
++ " This is global so that a user can create their mappings with this.
++ func TermDebugSendCommand(cmd)
++ if s:way == 'prompt'
++ call ch_sendraw(s:gdb_channel, a:cmd . "\n")
++ else
++ let do_continue = 0
++ if !s:stopped
++ let do_continue = 1
++ call s:SendCommand('-exec-interrupt')
++ sleep 10m
++ endif
++ call term_sendkeys(s:gdbbuf, a:cmd . "\r")
++ if do_continue
++ Continue
++ endif
++ endif
++ endfunc
++
++ " Function called when entering a line in the prompt buffer.
++ func s:PromptCallback(text)
++ call s:SendCommand(a:text)
++ endfunc
++
++ " Function called when pressing CTRL-C in the prompt buffer.
++ func s:PromptInterrupt()
++ call ch_log('Interrupting gdb')
++ call job_stop(s:gdbjob, 'int')
++ endfunc
++
++ " Function called when gdb outputs text.
++ func s:GdbOutCallback(channel, text)
++ call ch_log('received from gdb: ' . a:text)
++
++ " Drop the gdb prompt, we have our own.
++ " Drop status and echo'd commands.
++ if a:text == '(gdb) ' || a:text == '^done' || a:text[0] == '&' || a:text[0] == '='
++ return
++ endif
++ if a:text =~ '^^error,msg='
++ let text = s:DecodeMessage(a:text[11:])
++ if exists('s:evalexpr') && text =~ 'A syntax error in expression, near\|No symbol .* in current context'
++ " Silently drop evaluation errors.
++ unlet s:evalexpr
++ return
++ endif
++ elseif a:text[0] == '~'
++ let text = s:DecodeMessage(a:text[1:])
++ else
++ call s:CommOutput(a:channel, a:text)
++ return
++ endif
+
++ let curwinid = win_getid(winnr())
++ call win_gotoid(s:gdbwin)
++
++ " Add the output above the current prompt.
++ call append(line('$') - 1, text)
++ set nomodified
++
++ call win_gotoid(curwinid)
+ endfunc
+
+! " Decode a message from gdb. quotedText starts with a ", return the text up
+! " to the next ", unescaping characters.
+! func s:DecodeMessage(quotedText)
+! if a:quotedText[0] != '"'
+! echoerr 'DecodeMessage(): missing quote'
+! return
+! endif
+! let result = ''
+! let i = 1
+! while a:quotedText[i] != '"' && i < len(a:quotedText)
+! if a:quotedText[i] == '\'
+! let i += 1
+! if a:quotedText[i] == 'n'
+! " drop \n
+! let i += 1
+! continue
+! endif
+! endif
+! let result .= a:quotedText[i]
+! let i += 1
+! endwhile
+! return result
+! endfunc
+!
+! func s:EndTermDebug(job, status)
+ exe 'bwipe! ' . s:commbuf
+ unlet s:gdbwin
+
++ call s:EndDebugCommon()
++ endfunc
++
++ func s:EndDebugCommon()
+ let curwinid = win_getid(winnr())
+
+! if exists('s:ptybuf') && s:ptybuf
+! exe 'bwipe! ' . s:ptybuf
+! endif
+!
+! call win_gotoid(s:sourcewin)
+ let &signcolumn = s:startsigncolumn
+ call s:DeleteCommands()
+
+ call win_gotoid(curwinid)
++
+ if s:save_columns > 0
+ let &columns = s:save_columns
+ endif
+***************
+*** 240,245 ****
+--- 493,511 ----
+ au! TermDebug
+ endfunc
+
++ func s:EndPromptDebug(job, status)
++ let curwinid = win_getid(winnr())
++ call win_gotoid(s:gdbwin)
++ close
++ if curwinid != s:gdbwin
++ call win_gotoid(curwinid)
++ endif
++
++ call s:EndDebugCommon()
++ unlet s:gdbwin
++ call ch_log("Returning from EndPromptDebug()")
++ endfunc
++
+ " Handle a message received from gdb on the GDB/MI interface.
+ func s:CommOutput(chan, msg)
+ let msgs = split(a:msg, "\r")
+***************
+*** 275,285 ****
+ command -nargs=* Run call s:Run(<q-args>)
+ command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>)
+ command Stop call s:SendCommand('-exec-interrupt')
+! command Continue call s:SendCommand('-exec-continue')
+ command -range -nargs=* Evaluate call s:Evaluate(<range>, <q-args>)
+ command Gdb call win_gotoid(s:gdbwin)
+ command Program call win_gotoid(s:ptywin)
+! command Source call s:GotoStartwinOrCreateIt()
+ command Winbar call s:InstallWinbar()
+
+ " TODO: can the K mapping be restored?
+--- 541,558 ----
+ command -nargs=* Run call s:Run(<q-args>)
+ command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>)
+ command Stop call s:SendCommand('-exec-interrupt')
+!
+! " using -exec-continue results in CTRL-C in gdb window not working
+! if s:way == 'prompt'
+! command Continue call s:SendCommand('continue')
+! else
+! command Continue call term_sendkeys(s:gdbbuf, "continue\r")
+! endif
+!
+ command -range -nargs=* Evaluate call s:Evaluate(<range>, <q-args>)
+ command Gdb call win_gotoid(s:gdbwin)
+ command Program call win_gotoid(s:ptywin)
+! command Source call s:GotoSourcewinOrCreateIt()
+ command Winbar call s:InstallWinbar()
+
+ " TODO: can the K mapping be restored?
+***************
+*** 375,381 ****
+ let do_continue = 0
+ if !s:stopped
+ let do_continue = 1
+! call s:SendCommand('-exec-interrupt')
+ sleep 10m
+ endif
+ call s:SendCommand('-break-insert --source '
+--- 648,660 ----
+ let do_continue = 0
+ if !s:stopped
+ let do_continue = 1
+! if s:way == 'prompt'
+! " Need to send a signal to get the UI to listen. Strangely this is only
+! " needed once.
+! call job_stop(s:gdbjob, 'int')
+! else
+! call s:SendCommand('-exec-interrupt')
+! endif
+ sleep 10m
+ endif
+ call s:SendCommand('-break-insert --source '
+***************
+*** 391,397 ****
+ let lnum = line('.')
+ for [key, val] in items(s:breakpoints)
+ if val['fname'] == fname && val['lnum'] == lnum
+! call term_sendkeys(s:commbuf, '-break-delete ' . key . "\r")
+ " Assume this always wors, the reply is simply "^done".
+ exe 'sign unplace ' . (s:break_id + key)
+ unlet s:breakpoints[key]
+--- 670,676 ----
+ let lnum = line('.')
+ for [key, val] in items(s:breakpoints)
+ if val['fname'] == fname && val['lnum'] == lnum
+! call s:SendCommand('-break-delete ' . key)
+ " Assume this always wors, the reply is simply "^done".
+ exe 'sign unplace ' . (s:break_id + key)
+ unlet s:breakpoints[key]
+***************
+*** 400,410 ****
+ endfor
+ endfunc
+
+- " :Next, :Continue, etc - send a command to gdb
+- func s:SendCommand(cmd)
+- call term_sendkeys(s:commbuf, a:cmd . "\r")
+- endfunc
+-
+ func s:Run(args)
+ if a:args != ''
+ call s:SendCommand('-exec-arguments ' . a:args)
+--- 679,684 ----
+***************
+*** 466,472 ****
+ " Show a balloon with information of the variable under the mouse pointer,
+ " if there is any.
+ func TermDebugBalloonExpr()
+! if v:beval_winid != s:startwin
+ return
+ endif
+ let s:evalFromBalloonExpr = 1
+--- 740,751 ----
+ " Show a balloon with information of the variable under the mouse pointer,
+ " if there is any.
+ func TermDebugBalloonExpr()
+! if v:beval_winid != s:sourcewin
+! return
+! endif
+! if !s:stopped
+! " Only evaluate when stopped, otherwise setting a breakpoint using the
+! " mouse triggers a balloon.
+ return
+ endif
+ let s:evalFromBalloonExpr = 1
+***************
+*** 487,496 ****
+ echoerr substitute(a:msg, '.*msg="\(.*\)"', '\1', '')
+ endfunc
+
+! func s:GotoStartwinOrCreateIt()
+! if !win_gotoid(s:startwin)
+ new
+! let s:startwin = win_getid(winnr())
+ call s:InstallWinbar()
+ endif
+ endfunc
+--- 766,775 ----
+ echoerr substitute(a:msg, '.*msg="\(.*\)"', '\1', '')
+ endfunc
+
+! func s:GotoSourcewinOrCreateIt()
+! if !win_gotoid(s:sourcewin)
+ new
+! let s:sourcewin = win_getid(winnr())
+ call s:InstallWinbar()
+ endif
+ endfunc
+***************
+*** 506,512 ****
+ let s:stopped = 0
+ endif
+
+! call s:GotoStartwinOrCreateIt()
+
+ let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '')
+ if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
+--- 785,791 ----
+ let s:stopped = 0
+ endif
+
+! call s:GotoSourcewinOrCreateIt()
+
+ let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '')
+ if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
+***************
+*** 516,522 ****
+ if &modified
+ " TODO: find existing window
+ exe 'split ' . fnameescape(fname)
+! let s:startwin = win_getid(winnr())
+ call s:InstallWinbar()
+ else
+ exe 'edit ' . fnameescape(fname)
+--- 795,801 ----
+ if &modified
+ " TODO: find existing window
+ exe 'split ' . fnameescape(fname)
+! let s:sourcewin = win_getid(winnr())
+ call s:InstallWinbar()
+ else
+ exe 'edit ' . fnameescape(fname)
+*** ../vim-8.1.0070/src/version.c 2018-06-17 20:10:36.208066158 +0200
+--- src/version.c 2018-06-17 21:30:33.843055781 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 71,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+66. You create a homepage with the impression to cure the afflicted...but
+ your hidden agenda is to receive more e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0072 b/data/vim/patches/8.1.0072
new file mode 100644
index 000000000..e08a5d9b4
--- /dev/null
+++ b/data/vim/patches/8.1.0072
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0072
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0072
+Problem: Use of 'termwinkey' is inconsistent.
+Solution: Change the documentation and the behavior. (Ken Takata)
+Files: src/terminal.c, runtime/doc/terminal.txt
+
+
+*** ../vim-8.1.0071/src/terminal.c 2018-06-12 20:25:47.887923393 +0200
+--- src/terminal.c 2018-06-17 22:02:22.045425925 +0200
+***************
+*** 2107,2113 ****
+--- 2107,2117 ----
+ in_terminal_loop = curbuf->b_term;
+
+ if (*curwin->w_p_twk != NUL)
++ {
+ termwinkey = string_to_key(curwin->w_p_twk, TRUE);
++ if (termwinkey == Ctrl_W)
++ termwinkey = 0;
++ }
+ position_cursor(curwin, &curbuf->b_term->tl_cursor_pos);
+ may_set_cursor_props(curbuf->b_term);
+
+***************
+*** 2203,2214 ****
+ /* "CTRL-W CTRL-C" or 'termwinkey' CTRL-C: end the job */
+ mch_signal_job(curbuf->b_term->tl_job, (char_u *)"kill");
+ }
+! else if (termwinkey == 0 && c == '.')
+ {
+ /* "CTRL-W .": send CTRL-W to the job */
+! c = Ctrl_W;
+ }
+! else if (termwinkey == 0 && c == Ctrl_BSL)
+ {
+ /* "CTRL-W CTRL-\": send CTRL-\ to the job */
+ c = Ctrl_BSL;
+--- 2207,2219 ----
+ /* "CTRL-W CTRL-C" or 'termwinkey' CTRL-C: end the job */
+ mch_signal_job(curbuf->b_term->tl_job, (char_u *)"kill");
+ }
+! else if (c == '.')
+ {
+ /* "CTRL-W .": send CTRL-W to the job */
+! /* "'termwinkey' .": send 'termwinkey' to the job */
+! c = termwinkey == 0 ? Ctrl_W : termwinkey;
+ }
+! else if (c == Ctrl_BSL)
+ {
+ /* "CTRL-W CTRL-\": send CTRL-\ to the job */
+ c = Ctrl_BSL;
+*** ../vim-8.1.0071/runtime/doc/terminal.txt 2018-06-17 21:34:08.277873656 +0200
+--- runtime/doc/terminal.txt 2018-06-17 22:03:58.916917371 +0200
+***************
+*** 87,93 ****
+ 'termwinkey' CTRL-W move focus to the next window
+ 'termwinkey' : enter an Ex command
+ 'termwinkey' 'termwinkey' send 'termwinkey' to the job in the terminal
+! 'termwinkey' . send a CTRL-W to the job in the terminal
+ 'termwinkey' N go to terminal Normal mode, see below
+ 'termwinkey' CTRL-N same as CTRL-W N
+ 'termwinkey' CTRL-C same as |t_CTRL-W_CTRL-C|
+--- 87,94 ----
+ 'termwinkey' CTRL-W move focus to the next window
+ 'termwinkey' : enter an Ex command
+ 'termwinkey' 'termwinkey' send 'termwinkey' to the job in the terminal
+! 'termwinkey' . send 'termwinkey' to the job in the terminal
+! 'termwinkey' CTRL-\ send a CTRL-\ to the job in the terminal
+ 'termwinkey' N go to terminal Normal mode, see below
+ 'termwinkey' CTRL-N same as CTRL-W N
+ 'termwinkey' CTRL-C same as |t_CTRL-W_CTRL-C|
+*** ../vim-8.1.0071/src/version.c 2018-06-17 21:34:08.277873656 +0200
+--- src/version.c 2018-06-17 22:18:19.319512827 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 72,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+68. Your cat always puts viruses on your dogs homepage
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0073 b/data/vim/patches/8.1.0073
new file mode 100644
index 000000000..7d012ab4e
--- /dev/null
+++ b/data/vim/patches/8.1.0073
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0073
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0073
+Problem: Crash when autocommands call setloclist(). (Dominique Pelle)
+Solution: If the quickfix list changes then don't jump to the error.
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+
+*** ../vim-8.1.0072/src/quickfix.c 2018-06-16 22:16:43.232576946 +0200
+--- src/quickfix.c 2018-06-18 20:46:57.982804364 +0200
+***************
+*** 6348,6356 ****
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+! if (res > 0 && (eap->cmdidx == CMD_cexpr ||
+! eap->cmdidx == CMD_lexpr))
+! qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+ }
+ else
+ EMSG(_("E777: String or List expected"));
+--- 6348,6358 ----
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+! if (res > 0 && (eap->cmdidx == CMD_cexpr
+! || eap->cmdidx == CMD_lexpr)
+! && qi == ll_get_or_alloc_list(curwin))
+! // Jump to the first error if autocmds didn't free the list.
+! qf_jump(qi, 0, 0, eap->forceit);
+ }
+ else
+ EMSG(_("E777: String or List expected"));
+*** ../vim-8.1.0072/src/testdir/test_quickfix.vim 2018-06-16 22:16:43.232576946 +0200
+--- src/testdir/test_quickfix.vim 2018-06-18 20:48:23.134324971 +0200
+***************
+*** 3362,3364 ****
+--- 3362,3375 ----
+ au!
+ augroup END
+ endfunc
++
++ func Test_setloclist_in_aucmd()
++ " This was using freed memory.
++ augroup nasty
++ au * * call setloclist(0, [], 'f')
++ augroup END
++ lexpr "x"
++ augroup nasty
++ au!
++ augroup END
++ endfunc
+*** ../vim-8.1.0072/src/version.c 2018-06-17 22:19:07.267202961 +0200
+--- src/version.c 2018-06-18 20:51:25.897295981 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 73,
+ /**/
+
+--
+Q: How many legs does a giraffe have?
+A: Eight: two in front, two behind, two on the left and two on the right
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0074 b/data/vim/patches/8.1.0074
new file mode 100644
index 000000000..c2d37d77d
--- /dev/null
+++ b/data/vim/patches/8.1.0074
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0074
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0074 (after 8.1.0073)
+Problem: Crash when running quickfix tests.
+Solution: Do not alloc a new location list when checking for the reference
+ to be still valid.
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0073/src/quickfix.c 2018-06-18 20:52:09.553050181 +0200
+--- src/quickfix.c 2018-06-18 21:48:30.652450833 +0200
+***************
+*** 6350,6356 ****
+ curbuf->b_fname, TRUE, curbuf);
+ if (res > 0 && (eap->cmdidx == CMD_cexpr
+ || eap->cmdidx == CMD_lexpr)
+! && qi == ll_get_or_alloc_list(curwin))
+ // Jump to the first error if autocmds didn't free the list.
+ qf_jump(qi, 0, 0, eap->forceit);
+ }
+--- 6350,6356 ----
+ curbuf->b_fname, TRUE, curbuf);
+ if (res > 0 && (eap->cmdidx == CMD_cexpr
+ || eap->cmdidx == CMD_lexpr)
+! && qi == GET_LOC_LIST(curwin))
+ // Jump to the first error if autocmds didn't free the list.
+ qf_jump(qi, 0, 0, eap->forceit);
+ }
+*** ../vim-8.1.0073/src/version.c 2018-06-18 20:52:09.553050181 +0200
+--- src/version.c 2018-06-18 21:53:12.362887962 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 74,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+75. You start wondering whether you could actually upgrade your brain
+ with a Pentium Pro microprocessor 80. The upgrade works just fine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0075 b/data/vim/patches/8.1.0075
new file mode 100644
index 000000000..55f541a82
--- /dev/null
+++ b/data/vim/patches/8.1.0075
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0075
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0075
+Problem: No Vim logo in README file.
+Solution: Add one. (Ãrni Dagur, closes #3024)
+Files: README.md
+
+
+*** ../vim-8.1.0074/README.md 2018-05-17 13:35:11.000000000 +0200
+--- README.md 2018-06-18 21:58:04.861300010 +0200
+***************
+*** 1,5 ****
+--- 1,7 ----
+ `README.md` for version 8.1 of Vim: Vi IMproved.
+
++ ![Vim Logo](https://github.com/vim/vim/blob/master/runtime/vimlogo.gif)
++
+ [![Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim)
+ [![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master)
+ [![Coverage Status](https://coveralls.io/repos/vim/vim/badge.svg?branch=master&service=github)](https://coveralls.io/github/vim/vim?branch=master)
+*** ../vim-8.1.0074/src/version.c 2018-06-18 21:53:23.514826893 +0200
+--- src/version.c 2018-06-18 21:59:37.524801670 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 75,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+76. Your ISP regards you as a business partner rather than as a customer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0076 b/data/vim/patches/8.1.0076
new file mode 100644
index 000000000..a7bcdade0
--- /dev/null
+++ b/data/vim/patches/8.1.0076
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0076
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0076
+Problem: Command getting cleared with CTRL-W : in a terminal window. (Jason
+ Franklin)
+Solution: Call redraw_after_callback() when editing the command line.
+Files: src/terminal.c
+
+
+*** ../vim-8.1.0075/src/terminal.c 2018-06-17 22:19:07.263202987 +0200
+--- src/terminal.c 2018-06-18 22:11:07.069048292 +0200
+***************
+*** 973,983 ****
+ * contents, thus no screen update is needed. */
+ if (!term->tl_normal_mode)
+ {
+! /* TODO: only update once in a while. */
+ ch_log(term->tl_job->jv_channel, "updating screen");
+! if (buffer == curbuf)
+ {
+! update_screen(0);
+ /* update_screen() can be slow, check the terminal wasn't closed
+ * already */
+ if (buffer == curbuf && curbuf->b_term != NULL)
+--- 973,985 ----
+ * contents, thus no screen update is needed. */
+ if (!term->tl_normal_mode)
+ {
+! // Don't use update_screen() when editing the command line, it gets
+! // cleared.
+! // TODO: only update once in a while.
+ ch_log(term->tl_job->jv_channel, "updating screen");
+! if (buffer == curbuf && (State & CMDLINE) == 0)
+ {
+! update_screen(VALID_NO_UPDATE);
+ /* update_screen() can be slow, check the terminal wasn't closed
+ * already */
+ if (buffer == curbuf && curbuf->b_term != NULL)
+*** ../vim-8.1.0075/src/version.c 2018-06-18 22:00:18.844580003 +0200
+--- src/version.c 2018-06-18 22:15:09.191722898 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 76,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+78. You find yourself dialing IP numbers on the phone.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0077 b/data/vim/patches/8.1.0077
new file mode 100644
index 000000000..cbf51e709
--- /dev/null
+++ b/data/vim/patches/8.1.0077
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0077
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0077
+Problem: Header of README file is not nice.
+Solution: Move text to the bottom.
+Files: README.md
+
+
+*** ../vim-8.1.0076/README.md 2018-06-18 22:00:18.844580003 +0200
+--- README.md 2018-06-18 22:29:22.055138356 +0200
+***************
+*** 1,5 ****
+- `README.md` for version 8.1 of Vim: Vi IMproved.
+-
+ ![Vim Logo](https://github.com/vim/vim/blob/master/runtime/vimlogo.gif)
+
+ [![Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim)
+--- 1,3 ----
+***************
+*** 139,141 ****
+--- 137,142 ----
+
+ Send any other comments, patches, flowers and suggestions to:
+ Bram Moolenaar <Bram@vim.org>
++
++
++ This is `README.md` for version 8.1 of Vim: Vi IMproved.
+*** ../vim-8.1.0076/src/version.c 2018-06-18 22:15:46.255521457 +0200
+--- src/version.c 2018-06-18 22:30:38.882728350 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 77,
+ /**/
+
+--
+If bankers can count, how come they have eight windows and
+only four tellers?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0078 b/data/vim/patches/8.1.0078
new file mode 100644
index 000000000..a191dd0d4
--- /dev/null
+++ b/data/vim/patches/8.1.0078
@@ -0,0 +1,140 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0078
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0078
+Problem: "..." used inconsistently in messages.
+Solution: Drop the space before " ...".
+Files: src/spellfile.c, src/regexp_nfa.c
+
+
+*** ../vim-8.1.0077/src/spellfile.c 2018-04-08 12:52:47.000000000 +0200
+--- src/spellfile.c 2018-06-19 14:17:05.329080012 +0200
+***************
+*** 2241,2247 ****
+ return NULL;
+ }
+
+! vim_snprintf((char *)IObuff, IOSIZE, _("Reading affix file %s ..."), fname);
+ spell_message(spin, IObuff);
+
+ /* Only do REP lines when not done in another .aff file already. */
+--- 2241,2247 ----
+ return NULL;
+ }
+
+! vim_snprintf((char *)IObuff, IOSIZE, _("Reading affix file %s..."), fname);
+ spell_message(spin, IObuff);
+
+ /* Only do REP lines when not done in another .aff file already. */
+***************
+*** 3569,3575 ****
+ hash_init(&ht);
+
+ vim_snprintf((char *)IObuff, IOSIZE,
+! _("Reading dictionary file %s ..."), fname);
+ spell_message(spin, IObuff);
+
+ /* start with a message for the first line */
+--- 3569,3575 ----
+ hash_init(&ht);
+
+ vim_snprintf((char *)IObuff, IOSIZE,
+! _("Reading dictionary file %s..."), fname);
+ spell_message(spin, IObuff);
+
+ /* start with a message for the first line */
+***************
+*** 4149,4155 ****
+ return FAIL;
+ }
+
+! vim_snprintf((char *)IObuff, IOSIZE, _("Reading word file %s ..."), fname);
+ spell_message(spin, IObuff);
+
+ /*
+--- 4149,4155 ----
+ return FAIL;
+ }
+
+! vim_snprintf((char *)IObuff, IOSIZE, _("Reading word file %s..."), fname);
+ spell_message(spin, IObuff);
+
+ /*
+***************
+*** 5865,5871 ****
+ }
+
+ vim_snprintf((char *)IObuff, IOSIZE,
+! _("Writing suggestion file %s ..."), fname);
+ spell_message(spin, IObuff);
+
+ /*
+--- 5865,5871 ----
+ }
+
+ vim_snprintf((char *)IObuff, IOSIZE,
+! _("Writing suggestion file %s..."), fname);
+ spell_message(spin, IObuff);
+
+ /*
+***************
+*** 6150,6156 ****
+ * Write the info in the spell file.
+ */
+ vim_snprintf((char *)IObuff, IOSIZE,
+! _("Writing spell file %s ..."), wfname);
+ spell_message(&spin, IObuff);
+
+ error = write_vim_spell(&spin, wfname) == FAIL;
+--- 6150,6156 ----
+ * Write the info in the spell file.
+ */
+ vim_snprintf((char *)IObuff, IOSIZE,
+! _("Writing spell file %s..."), wfname);
+ spell_message(&spin, IObuff);
+
+ error = write_vim_spell(&spin, wfname) == FAIL;
+*** ../vim-8.1.0077/src/regexp_nfa.c 2018-02-10 18:34:41.000000000 +0100
+--- src/regexp_nfa.c 2018-06-19 14:20:14.816048075 +0200
+***************
+*** 5270,5276 ****
+ }
+ else
+ {
+! EMSG(_("Could not open temporary log file for writing, displaying on stderr ... "));
+ log_fd = stderr;
+ }
+ #endif
+--- 5270,5276 ----
+ }
+ else
+ {
+! EMSG(_("Could not open temporary log file for writing, displaying on stderr... "));
+ log_fd = stderr;
+ }
+ #endif
+*** ../vim-8.1.0077/src/version.c 2018-06-18 22:31:07.858573774 +0200
+--- src/version.c 2018-06-19 14:09:26.899529941 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 78,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+85. Choice between paying Compuserve bill and paying for kids education
+ is a no brainer -- although a bit painful for your kids.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0079 b/data/vim/patches/8.1.0079
new file mode 100644
index 000000000..6d3691524
--- /dev/null
+++ b/data/vim/patches/8.1.0079
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0079
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0079
+Problem: Superfluous space in messages.
+Solution: Remove the spaces. (closes #3030)
+Files: src/gui_w32.c
+
+
+*** ../vim-8.1.0078/src/gui_w32.c 2018-05-17 13:57:00.000000000 +0200
+--- src/gui_w32.c 2018-06-19 14:38:12.006094737 +0200
+***************
+*** 2821,2827 ****
+ }
+
+ set_window_title(s_findrep_hwnd,
+! _("Find string (use '\\\\' to find a '\\')"));
+ (void)SetFocus(s_findrep_hwnd);
+
+ s_findrep_is_find = TRUE;
+--- 2821,2827 ----
+ }
+
+ set_window_title(s_findrep_hwnd,
+! _("Find string (use '\\\\' to find a '\\')"));
+ (void)SetFocus(s_findrep_hwnd);
+
+ s_findrep_is_find = TRUE;
+***************
+*** 2856,2862 ****
+ }
+
+ set_window_title(s_findrep_hwnd,
+! _("Find & Replace (use '\\\\' to find a '\\')"));
+ (void)SetFocus(s_findrep_hwnd);
+
+ s_findrep_is_find = FALSE;
+--- 2856,2862 ----
+ }
+
+ set_window_title(s_findrep_hwnd,
+! _("Find & Replace (use '\\\\' to find a '\\')"));
+ (void)SetFocus(s_findrep_hwnd);
+
+ s_findrep_is_find = FALSE;
+*** ../vim-8.1.0078/src/version.c 2018-06-19 14:23:50.302866911 +0200
+--- src/version.c 2018-06-19 14:38:54.921853595 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 79,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+86. E-mail Deficiency Depression (EDD) forces you to e-mail yourself.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0080 b/data/vim/patches/8.1.0080
new file mode 100644
index 000000000..03dba7e9f
--- /dev/null
+++ b/data/vim/patches/8.1.0080
@@ -0,0 +1,258 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0080
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0080
+Problem: Can't see the breakpoint number in the terminal debugger.
+Solution: Use the breakpoint number for the sign. (Christian Brabandt)
+Files: runtime/doc/terminal.txt,
+ runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0079/runtime/doc/terminal.txt 2018-06-17 22:19:07.267202961 +0200
+--- runtime/doc/terminal.txt 2018-06-19 16:55:43.126412132 +0200
+***************
+*** 19,26 ****
+ Resizing |terminal-resizing|
+ Terminal Modes |Terminal-mode|
+ Cursor style |terminal-cursor-style|
+- Special keys |terminal-special-keys|
+ Session |terminal-session|
+ Unix |terminal-unix|
+ MS-Windows |terminal-ms-windows|
+ 2. Terminal communication |terminal-communication|
+--- 19,26 ----
+ Resizing |terminal-resizing|
+ Terminal Modes |Terminal-mode|
+ Cursor style |terminal-cursor-style|
+ Session |terminal-session|
++ Special keys |terminal-special-keys|
+ Unix |terminal-unix|
+ MS-Windows |terminal-ms-windows|
+ 2. Terminal communication |terminal-communication|
+***************
+*** 116,124 ****
+
+ < *options-in-terminal*
+ After opening the terminal window and setting 'buftype' to "terminal" the
+! BufWinEnter autocommand event is triggered. This makes it possible to set
+ options specifically for the window and buffer. Example: >
+! au BufWinEnter * if &buftype == 'terminal' | setlocal bufhidden=hide | endif
+
+ Mouse events (click and drag) are passed to the terminal. Mouse move events
+ are only passed when Vim itself is receiving them. For a terminal that is
+--- 116,127 ----
+
+ < *options-in-terminal*
+ After opening the terminal window and setting 'buftype' to "terminal" the
+! TerminalOpen autocommand event is triggered. This makes it possible to set
+ options specifically for the window and buffer. Example: >
+! au TerminalOpen * if &buftype == 'terminal' | setlocal bufhidden=hide | endif
+! The <abuf> is set to the terminal buffer, but if there is no window (hidden
+! terminal) then setting options will happen in the wrong buffer, therefore the
+! check for &buftype in the example.
+
+ Mouse events (click and drag) are passed to the terminal. Mouse move events
+ are only passed when Vim itself is receiving them. For a terminal that is
+***************
+*** 449,455 ****
+ of the terminal and {argument}, the decoded JSON argument.
+ The function name must start with "Tapi_" to avoid
+ accidentally calling a function not meant to be used for the
+! terminal API
+ The user function should sanity check the argument.
+ The function can use |term_sendkeys()| to send back a reply.
+ Example in JSON: >
+--- 452,458 ----
+ of the terminal and {argument}, the decoded JSON argument.
+ The function name must start with "Tapi_" to avoid
+ accidentally calling a function not meant to be used for the
+! terminal API.
+ The user function should sanity check the argument.
+ The function can use |term_sendkeys()| to send back a reply.
+ Example in JSON: >
+***************
+*** 702,712 ****
+ Vim will start running in the program window. Put focus there and type: >
+ :help gui
+ Gdb will run into the ex_help breakpoint. The source window now shows the
+! ex_cmds.c file. A ">>" marker will appear where the breakpoint was set. The
+! line where the debugger stopped is highlighted. You can now step through the
+! program. Let's use the mouse: click on the "Next" button in the window
+! toolbar. You will see the highlighting move as the debugger executes a line
+! of source code.
+
+ Click "Next" a few times until the for loop is highlighted. Put the cursor on
+ the end of "eap->arg", then click "Eval" in the toolbar. You will see this
+--- 705,715 ----
+ Vim will start running in the program window. Put focus there and type: >
+ :help gui
+ Gdb will run into the ex_help breakpoint. The source window now shows the
+! ex_cmds.c file. A red "1 " marker will appear in the signcolumn where the
+! breakpoint was set. The line where the debugger stopped is highlighted. You
+! can now step through the program. Let's use the mouse: click on the "Next"
+! button in the window toolbar. You will see the highlighting move as the
+! debugger executes a line of source code.
+
+ Click "Next" a few times until the for loop is highlighted. Put the cursor on
+ the end of "eap->arg", then click "Eval" in the toolbar. You will see this
+***************
+*** 785,790 ****
+--- 788,800 ----
+ happens if the buffer in the source code window has been modified and can't be
+ abandoned.
+
++ Gdb gives each breakpoint a number. In Vim the number shows up in the sign
++ column, with a red background. You can use these gdb commands:
++ - info break list breakpoints
++ - delete N delete breakpoint N
++ You can also use the `:Clear` command if the cursor is in the line with the
++ breakpoint, or use the "Clear breakpoint" right-click menu entry.
++
+
+ Inspecting variables ~
+ *termdebug-variables* *:Evaluate*
+***************
+*** 828,833 ****
+--- 838,850 ----
+ gdb. The buffer name is "gdb communication". Do not delete this buffer, it
+ will break the debugger.
+
++ Gdb has some weird behavior, the plugin does its best to work around that.
++ For example, after typing "continue" in the gdb window a CTRL-C can be used to
++ interrupt the running program. But after using the MI command
++ "-exec-continue" pressing CTRL-C does not interrupt. Therefore you will see
++ "continue" being used for the `:Continue` command, instead of using the
++ communication channel.
++
+
+ Customizing ~
+
+***************
+*** 885,891 ****
+ let g:termdebug_wide = 163
+ This will set &columns to 163 when :Termdebug is used. The value is restored
+ when quitting the debugger.
+! If g:termdebug_wide is set and &Columns is already larger than
+ g:termdebug_wide then a vertical split will be used without changing &columns.
+ Set it to 1 to get a vertical split without every changing &columns (useful
+ for when the terminal can't be resized by Vim).
+--- 902,908 ----
+ let g:termdebug_wide = 163
+ This will set &columns to 163 when :Termdebug is used. The value is restored
+ when quitting the debugger.
+! If g:termdebug_wide is set and &columns is already larger than
+ g:termdebug_wide then a vertical split will be used without changing &columns.
+ Set it to 1 to get a vertical split without every changing &columns (useful
+ for when the terminal can't be resized by Vim).
+*** ../vim-8.1.0079/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-17 21:34:08.277873656 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 16:59:18.185759005 +0200
+***************
+*** 67,73 ****
+ endif
+
+ let s:pc_id = 12
+! let s:break_id = 13
+ let s:stopped = 1
+
+ if &background == 'light'
+--- 67,73 ----
+ endif
+
+ let s:pc_id = 12
+! let s:break_id = 13 " breakpoint number is added to this
+ let s:stopped = 1
+
+ if &background == 'light'
+***************
+*** 325,334 ****
+ " There can be only one.
+ sign define debugPC linehl=debugPC
+
+- " Sign used to indicate a breakpoint.
+- " Can be used multiple times.
+- sign define debugBreakpoint text=>> texthl=debugBreakpoint
+-
+ " Install debugger commands in the text window.
+ call win_gotoid(s:sourcewin)
+ call s:InstallCommands()
+--- 325,330 ----
+***************
+*** 345,350 ****
+--- 341,347 ----
+ endif
+ endif
+
++ " Contains breakpoints that have been placed, key is the number.
+ let s:breakpoints = {}
+
+ augroup TermDebug
+***************
+*** 813,818 ****
+--- 810,825 ----
+ call win_gotoid(wid)
+ endfunc
+
++ func s:CreateBreakpoint(nr)
++ if !exists("s:BreakpointSigns")
++ let s:BreakpointSigns = []
++ endif
++ if index(s:BreakpointSigns, a:nr) == -1
++ call add(s:BreakpointSigns, a:nr)
++ exe "sign define debugBreakpoint". a:nr . " text=" . a:nr . " texthl=debugBreakpoint"
++ endif
++ endfunc
++
+ " Handle setting a breakpoint
+ " Will update the sign that shows the breakpoint
+ func s:HandleNewBreakpoint(msg)
+***************
+*** 820,825 ****
+--- 827,833 ----
+ if nr == 0
+ return
+ endif
++ call s:CreateBreakpoint(nr)
+
+ if has_key(s:breakpoints, nr)
+ let entry = s:breakpoints[nr]
+***************
+*** 839,845 ****
+ endfunc
+
+ func s:PlaceSign(nr, entry)
+! exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint file=' . a:entry['fname']
+ let a:entry['placed'] = 1
+ endfunc
+
+--- 847,853 ----
+ endfunc
+
+ func s:PlaceSign(nr, entry)
+! exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . a:nr . ' file=' . a:entry['fname']
+ let a:entry['placed'] = 1
+ endfunc
+
+*** ../vim-8.1.0079/src/version.c 2018-06-19 14:45:33.583620880 +0200
+--- src/version.c 2018-06-19 16:57:00.654200256 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 80,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+90. Instead of calling you to dinner, your spouse sends e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0081 b/data/vim/patches/8.1.0081
new file mode 100644
index 000000000..f943be461
--- /dev/null
+++ b/data/vim/patches/8.1.0081
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0081
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0081
+Problem: The terminal debugger doesn't adjust to changed 'background'.
+Solution: Add an OptionSet autocommand. (Christian Brabandt)
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0080/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 16:59:31.333713053 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 17:24:00.106825205 +0200
+***************
+*** 70,80 ****
+ let s:break_id = 13 " breakpoint number is added to this
+ let s:stopped = 1
+
+! if &background == 'light'
+! hi default debugPC term=reverse ctermbg=lightblue guibg=lightblue
+! else
+! hi default debugPC term=reverse ctermbg=darkblue guibg=darkblue
+! endif
+ hi default debugBreakpoint term=reverse ctermbg=red guibg=red
+
+ func s:StartDebug(bang, ...)
+--- 70,85 ----
+ let s:break_id = 13 " breakpoint number is added to this
+ let s:stopped = 1
+
+! func s:Highlight(init, old, new)
+! let default = a:init ? 'default ' : ''
+! if a:new ==# 'light' && a:old !=# 'light'
+! exe "hi " . default . "debugPC term=reverse ctermbg=lightblue guibg=lightblue"
+! elseif a:new ==# 'dark' && a:old !=# 'dark'
+! exe "hi " . default . "debugPC term=reverse ctermbg=darkblue guibg=darkblue"
+! endif
+! endfunc
+!
+! call s:Highlight(1, '', &background)
+ hi default debugBreakpoint term=reverse ctermbg=red guibg=red
+
+ func s:StartDebug(bang, ...)
+***************
+*** 347,352 ****
+--- 352,358 ----
+ augroup TermDebug
+ au BufRead * call s:BufRead()
+ au BufUnload * call s:BufUnloaded()
++ au OptionSet background call s:Highlight(0, v:option_old, v:option_new)
+ augroup END
+
+ " Run the command if the bang attribute was given and got to the debug
+***************
+*** 887,890 ****
+ endif
+ endfor
+ endfunc
+-
+--- 893,895 ----
+*** ../vim-8.1.0080/src/version.c 2018-06-19 16:59:31.333713053 +0200
+--- src/version.c 2018-06-19 17:27:18.613687664 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 81,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+91. It's Saturday afternoon in the middle of May and you
+ are on computer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0082 b/data/vim/patches/8.1.0082
new file mode 100644
index 000000000..57ff29d5c
--- /dev/null
+++ b/data/vim/patches/8.1.0082
@@ -0,0 +1,129 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0082
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0082
+Problem: In terminal window, typing : at more prompt, inserts ':' instead
+ of starting another Ex command.
+Solution: Add skip_term_loop and set it when putting ':' in the typeahead
+ buffer.
+Files: src/globals.h, src/main.c, src/message.c
+
+
+*** ../vim-8.1.0081/src/globals.h 2018-05-22 20:35:13.558009273 +0200
+--- src/globals.h 2018-06-19 17:38:48.904146780 +0200
+***************
+*** 371,376 ****
+--- 371,381 ----
+ # endif
+ # endif
+ #endif
++ #ifdef FEAT_TERMINAL
++ // When TRUE skip calling terminal_loop() once. Used when
++ // typing ':' at the more prompt.
++ EXTERN int skip_term_loop INIT(= FALSE);
++ #endif
+ #ifdef FEAT_GUI
+ EXTERN char_u *use_gvimrc INIT(= NULL); /* "-U" cmdline argument */
+ #endif
+*** ../vim-8.1.0081/src/main.c 2018-05-05 15:04:42.000000000 +0200
+--- src/main.c 2018-06-19 17:34:55.649828513 +0200
+***************
+*** 1339,1345 ****
+ #ifdef FEAT_TERMINAL
+ if (term_use_loop()
+ && oa.op_type == OP_NOP && oa.regname == NUL
+! && !VIsual_active)
+ {
+ /* If terminal_loop() returns OK we got a key that is handled
+ * in Normal model. With FAIL we first need to position the
+--- 1339,1346 ----
+ #ifdef FEAT_TERMINAL
+ if (term_use_loop()
+ && oa.op_type == OP_NOP && oa.regname == NUL
+! && !VIsual_active
+! && !skip_term_loop)
+ {
+ /* If terminal_loop() returns OK we got a key that is handled
+ * in Normal model. With FAIL we first need to position the
+***************
+*** 1349,1355 ****
+--- 1350,1361 ----
+ }
+ else
+ #endif
++ {
++ #ifdef FEAT_TERMINAL
++ skip_term_loop = FALSE;
++ #endif
+ normal_cmd(&oa, TRUE);
++ }
+ }
+ }
+ }
+***************
+*** 3320,3326 ****
+ main_msg(_("-dev <device>\t\tUse <device> for I/O"));
+ #endif
+ #ifdef FEAT_ARABIC
+! main_msg(_("-A\t\t\tstart in Arabic mode"));
+ #endif
+ #ifdef FEAT_RIGHTLEFT
+ main_msg(_("-H\t\t\tStart in Hebrew mode"));
+--- 3326,3332 ----
+ main_msg(_("-dev <device>\t\tUse <device> for I/O"));
+ #endif
+ #ifdef FEAT_ARABIC
+! main_msg(_("-A\t\t\tStart in Arabic mode"));
+ #endif
+ #ifdef FEAT_RIGHTLEFT
+ main_msg(_("-H\t\t\tStart in Hebrew mode"));
+*** ../vim-8.1.0081/src/message.c 2018-05-22 20:35:13.562009272 +0200
+--- src/message.c 2018-06-19 17:39:40.111793123 +0200
+***************
+*** 1219,1224 ****
+--- 1219,1227 ----
+ cmdline_row = msg_row;
+ skip_redraw = TRUE; /* skip redraw once */
+ do_redraw = FALSE;
++ #ifdef FEAT_TERMINAL
++ skip_term_loop = TRUE;
++ #endif
+ }
+
+ /*
+***************
+*** 2827,2832 ****
+--- 2830,2838 ----
+ /* Since got_int is set all typeahead will be flushed, but we
+ * want to keep this ':', remember that in a special way. */
+ typeahead_noflush(':');
++ #ifdef FEAT_TERMINAL
++ skip_term_loop = TRUE;
++ #endif
+ cmdline_row = Rows - 1; /* put ':' on this line */
+ skip_redraw = TRUE; /* skip redraw once */
+ need_wait_return = FALSE; /* don't wait in main() */
+*** ../vim-8.1.0081/src/version.c 2018-06-19 17:27:50.085385875 +0200
+--- src/version.c 2018-06-19 17:47:54.412556057 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 82,
+ /**/
+
+--
+From "know your smileys":
+ :^[/ mean-smiley-with-cigarette
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0083 b/data/vim/patches/8.1.0083
new file mode 100644
index 000000000..ec805d366
--- /dev/null
+++ b/data/vim/patches/8.1.0083
@@ -0,0 +1,196 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0083
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0083
+Problem: "is" and "as" have trouble with quoted punctuation.
+Solution: Check for punctuation before a quote. (Jason Franklin)
+Files: src/search.c, src/testdir/test_textobjects.vim
+
+
+*** ../vim-8.1.0082/src/search.c 2018-05-22 17:50:38.679980719 +0200
+--- src/search.c 2018-06-19 18:19:14.194486159 +0200
+***************
+*** 2707,2716 ****
+ }
+
+ /*
+! * findsent(dir, count) - Find the start of the next sentence in direction
+! * "dir" Sentences are supposed to end in ".", "!" or "?" followed by white
+! * space or a line break. Also stop at an empty line.
+! * Return OK if the next sentence was found.
+ */
+ int
+ findsent(int dir, long count)
+--- 2707,2717 ----
+ }
+
+ /*
+! * Find the start of the next sentence, searching in the direction specified
+! * by the "dir" argument. The cursor is positioned on the start of the next
+! * sentence when found. If the next sentence is found, return OK. Return FAIL
+! * otherwise. See ":h sentence" for the precise definition of a "sentence"
+! * text object.
+ */
+ int
+ findsent(int dir, long count)
+***************
+*** 2758,2783 ****
+ else if (dir == BACKWARD)
+ decl(&pos);
+
+! /* go back to the previous non-blank char */
+ found_dot = FALSE;
+! while ((c = gchar_pos(&pos)) == ' ' || c == '\t' ||
+! (dir == BACKWARD && vim_strchr((char_u *)".!?)]\"'", c) != NULL))
+ {
+! if (vim_strchr((char_u *)".!?", c) != NULL)
+! {
+! /* Only skip over a '.', '!' and '?' once. */
+! if (found_dot)
+! break;
+ found_dot = TRUE;
+! }
+! if (decl(&pos) == -1)
+ break;
+! /* when going forward: Stop in front of empty line */
+! if (LINEEMPTY(pos.lnum) && dir == FORWARD)
+! {
+! incl(&pos);
+! goto found;
+! }
+ }
+
+ /* remember the line where the search started */
+--- 2759,2783 ----
+ else if (dir == BACKWARD)
+ decl(&pos);
+
+! // go back to the previous non-white non-punctuation character
+ found_dot = FALSE;
+! while (c = gchar_pos(&pos), VIM_ISWHITE(c)
+! || vim_strchr((char_u *)".!?)]\"'", c) != NULL)
+ {
+! tpos = pos;
+! if (decl(&tpos) == -1 || (LINEEMPTY(tpos.lnum) && dir == FORWARD))
+! break;
+!
+! if (found_dot)
+! break;
+! if (vim_strchr((char_u *) ".!?", c) != NULL)
+ found_dot = TRUE;
+!
+! if (vim_strchr((char_u *) ")]\"'", c) != NULL
+! && vim_strchr((char_u *) ".!?)]\"'", gchar_pos(&tpos)) == NULL)
+ break;
+!
+! decl(&pos);
+ }
+
+ /* remember the line where the search started */
+*** ../vim-8.1.0082/src/testdir/test_textobjects.vim 2018-02-09 18:06:35.000000000 +0100
+--- src/testdir/test_textobjects.vim 2018-06-19 18:16:20.911420342 +0200
+***************
+*** 165,167 ****
+--- 165,242 ----
+ norm it
+ q!
+ endfunc
++
++ func Test_sentence()
++ enew!
++ call setline(1, 'A sentence. A sentence? A sentence!')
++
++ normal yis
++ call assert_equal('A sentence.', @")
++ normal yas
++ call assert_equal('A sentence. ', @")
++
++ normal )
++
++ normal yis
++ call assert_equal('A sentence?', @")
++ normal yas
++ call assert_equal('A sentence? ', @")
++
++ normal )
++
++ normal yis
++ call assert_equal('A sentence!', @")
++ normal yas
++ call assert_equal(' A sentence!', @")
++
++ normal 0
++ normal 2yis
++ call assert_equal('A sentence. ', @")
++ normal 3yis
++ call assert_equal('A sentence. A sentence?', @")
++ normal 2yas
++ call assert_equal('A sentence. A sentence? ', @")
++
++ %delete _
++ endfunc
++
++ func Test_sentence_with_quotes()
++ enew!
++ call setline(1, 'A "sentence." A sentence.')
++
++ normal yis
++ call assert_equal('A "sentence."', @")
++ normal yas
++ call assert_equal('A "sentence." ', @")
++
++ normal )
++
++ normal yis
++ call assert_equal('A sentence.', @")
++ normal yas
++ call assert_equal(' A sentence.', @")
++
++ %delete _
++ endfunc
++
++ func! Test_sentence_with_cursor_on_delimiter()
++ enew!
++ call setline(1, "A '([sentence.])' A sentence.")
++
++ normal! 15|yis
++ call assert_equal("A '([sentence.])'", @")
++ normal! 15|yas
++ call assert_equal("A '([sentence.])' ", @")
++
++ normal! 16|yis
++ call assert_equal("A '([sentence.])'", @")
++ normal! 16|yas
++ call assert_equal("A '([sentence.])' ", @")
++
++ normal! 17|yis
++ call assert_equal("A '([sentence.])'", @")
++ normal! 17|yas
++ call assert_equal("A '([sentence.])' ", @")
++
++ %delete _
++ endfunc
+*** ../vim-8.1.0082/src/version.c 2018-06-19 17:49:20.300015350 +0200
+--- src/version.c 2018-06-19 18:27:12.611837877 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 83,
+ /**/
+
+--
+From "know your smileys":
+ y:-) Bad toupee
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0084 b/data/vim/patches/8.1.0084
new file mode 100644
index 000000000..9623dff2d
--- /dev/null
+++ b/data/vim/patches/8.1.0084
@@ -0,0 +1,161 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0084
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0084
+Problem: User name completion does not work on MS-Windows.
+Solution: Use NetUserEnum() to get user names. (Yasuhiro Matsumoto)
+Files: src/Make_ivc.mak, src/Make_cyg_ming.mak, src/Make_mvc.mak,
+ src/misc1.c
+
+
+*** ../vim-8.1.0083/src/Make_ivc.mak 2016-07-19 13:51:41.000000000 +0200
+--- src/Make_ivc.mak 2018-06-19 18:37:43.572545354 +0200
+***************
+*** 88,94 ****
+ CPP_PROJ= /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c
+ # ADD CPP /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c
+
+! LINK32_FLAGS= oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib uuid.lib /nologo /machine:I386 /nodefaultlib
+ # ADD LINK32 oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib uuid.lib /nologo /machine:I386 /nodefaultlib
+ # SUBTRACT LINK32 /incremental:yes
+
+--- 88,94 ----
+ CPP_PROJ= /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c
+ # ADD CPP /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c
+
+! LINK32_FLAGS= oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib netapi32.lib uuid.lib /nologo /machine:I386 /nodefaultlib
+ # ADD LINK32 oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib uuid.lib /nologo /machine:I386 /nodefaultlib
+ # SUBTRACT LINK32 /incremental:yes
+
+*** ../vim-8.1.0083/src/Make_cyg_ming.mak 2018-04-21 19:06:58.000000000 +0200
+--- src/Make_cyg_ming.mak 2018-06-19 18:38:21.464387436 +0200
+***************
+*** 662,668 ****
+ CFLAGS += -s
+ endif
+
+! LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lversion
+ GUIOBJ = $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
+ CUIOBJ = $(OUTDIR)/iscygpty.o
+ OBJ = \
+--- 662,668 ----
+ CFLAGS += -s
+ endif
+
+! LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion
+ GUIOBJ = $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
+ CUIOBJ = $(OUTDIR)/iscygpty.o
+ OBJ = \
+*** ../vim-8.1.0083/src/Make_mvc.mak 2018-03-26 20:41:04.000000000 +0200
+--- src/Make_mvc.mak 2018-06-19 18:40:11.891907875 +0200
+***************
+*** 489,498 ****
+
+ # need advapi32.lib for GetUserName()
+ # need shell32.lib for ExtractIcon()
+ # gdi32.lib and comdlg32.lib for printing support
+ # ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
+ CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
+! comdlg32.lib ole32.lib uuid.lib /machine:$(CPU)
+ !if "$(DELAYLOAD)" == "yes"
+ CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
+ !endif
+--- 489,499 ----
+
+ # need advapi32.lib for GetUserName()
+ # need shell32.lib for ExtractIcon()
++ # need netapi32.lib for NetUserEnum()
+ # gdi32.lib and comdlg32.lib for printing support
+ # ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
+ CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
+! comdlg32.lib ole32.lib netapi32.lib uuid.lib /machine:$(CPU)
+ !if "$(DELAYLOAD)" == "yes"
+ CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
+ !endif
+***************
+*** 801,807 ****
+ $(OUTDIR)\os_w32exe.obj
+ GUI_LIB = \
+ gdi32.lib version.lib $(IME_LIB) \
+! winspool.lib comctl32.lib advapi32.lib shell32.lib \
+ /machine:$(CPU)
+ !else
+ SUBSYSTEM = console
+--- 802,808 ----
+ $(OUTDIR)\os_w32exe.obj
+ GUI_LIB = \
+ gdi32.lib version.lib $(IME_LIB) \
+! winspool.lib comctl32.lib advapi32.lib shell32.lib netapi32.lib \
+ /machine:$(CPU)
+ !else
+ SUBSYSTEM = console
+*** ../vim-8.1.0083/src/misc1.c 2018-05-14 22:56:16.000000000 +0200
+--- src/misc1.c 2018-06-19 18:41:51.783452927 +0200
+***************
+*** 14,19 ****
+--- 14,23 ----
+ #include "vim.h"
+ #include "version.h"
+
++ #if defined(FEAT_CMDL_COMPL) && defined(WIN3264)
++ # include <lm.h>
++ #endif
++
+ static char_u *vim_version_dir(char_u *vimdir);
+ static char_u *remove_tail(char_u *p, char_u *pend, char_u *name);
+ #if defined(FEAT_CMDL_COMPL)
+***************
+*** 4603,4608 ****
+--- 4607,4634 ----
+ }
+ endpwent();
+ }
++ # elif defined(WIN3264)
++ {
++ char_u* user;
++ DWORD nusers = 0, ntotal = 0, i;
++ PUSER_INFO_0 uinfo;
++
++ if (NetUserEnum(NULL, 0, 0, (LPBYTE *) &uinfo, MAX_PREFERRED_LENGTH,
++ &nusers, &ntotal, NULL) == NERR_Success)
++ {
++ for (i = 0; i < nusers; i++)
++ {
++ if (ga_grow(&ga_users, 1) == FAIL)
++ break;
++ user = utf16_to_enc(uinfo[i].usri0_name, NULL);
++ if (user == NULL)
++ break;
++ ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
++ }
++
++ NetApiBufferFree(uinfo);
++ }
++ }
+ # endif
+ }
+
+*** ../vim-8.1.0083/src/version.c 2018-06-19 18:27:38.271694008 +0200
+--- src/version.c 2018-06-19 18:56:50.358883504 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 84,
+ /**/
+
+--
+From "know your smileys":
+ :----} You lie like Pinocchio
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0085 b/data/vim/patches/8.1.0085
new file mode 100644
index 000000000..44d289928
--- /dev/null
+++ b/data/vim/patches/8.1.0085
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0085
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0085
+Problem: No test for completing user name and language.
+Solution: Add tests. (Dominique Pelle, closes #2978)
+Files: src/testdir/test_cmdline.vim
+
+
+*** ../vim-8.1.0084/src/testdir/test_cmdline.vim 2018-05-22 16:58:43.979903077 +0200
+--- src/testdir/test_cmdline.vim 2018-06-19 19:07:14.403515948 +0200
+***************
+*** 1,6 ****
+ " Tests for editing the command line.
+
+-
+ func Test_complete_tab()
+ call writefile(['testfile'], 'Xtestfile')
+ call feedkeys(":e Xtest\t\r", "tx")
+--- 1,5 ----
+***************
+*** 392,397 ****
+--- 391,440 ----
+ delcommand Foo
+ endfunc
+
++ func Test_cmdline_complete_user_names()
++ if has('unix') && executable('whoami')
++ let whoami = systemlist('whoami')[0]
++ let first_letter = whoami[0]
++ if len(first_letter) > 0
++ " Trying completion of :e ~x where x is the first letter of
++ " the user name should complete to at least the user name.
++ call feedkeys(':e ~' . first_letter . "\<c-a>\<c-B>\"\<cr>", 'tx')
++ call assert_match('^"e \~.*\<' . whoami . '\>', @:)
++ endif
++ endif
++ if has('win32')
++ " Just in case: check that the system has an Administrator account.
++ let names = system('net user')
++ if names =~ 'Administrator'
++ " Trying completion of :e ~A should complete to Administrator.
++ call feedkeys(':e ~A' . "\<c-a>\<c-B>\"\<cr>", 'tx')
++ call assert_match('^"e \~Administrator', @:)
++ endif
++ endif
++ endfunc
++
++ funct Test_cmdline_complete_languages()
++ let lang = substitute(execute('language messages'), '.*"\(.*\)"$', '\1', '')
++
++ call feedkeys(":language \<c-a>\<c-b>\"\<cr>", 'tx')
++ call assert_match('^"language .*\<ctype\>.*\<messages\>.*\<time\>', @:)
++
++ if has('unix')
++ " TODO: these tests don't work on Windows. lang appears to be 'C'
++ " but C does not appear in the completion. Why?
++ call assert_match('^"language .*\<' . lang . '\>', @:)
++
++ call feedkeys(":language messages \<c-a>\<c-b>\"\<cr>", 'tx')
++ call assert_match('^"language .*\<' . lang . '\>', @:)
++
++ call feedkeys(":language ctype \<c-a>\<c-b>\"\<cr>", 'tx')
++ call assert_match('^"language .*\<' . lang . '\>', @:)
++
++ call feedkeys(":language time \<c-a>\<c-b>\"\<cr>", 'tx')
++ call assert_match('^"language .*\<' . lang . '\>', @:)
++ endif
++ endfunc
++
+ func Test_cmdline_write_alternatefile()
+ new
+ call setline('.', ['one', 'two'])
+*** ../vim-8.1.0084/src/version.c 2018-06-19 18:58:04.010489820 +0200
+--- src/version.c 2018-06-19 19:07:41.203370203 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 85,
+ /**/
+
+--
+From "know your smileys":
+¯\_(ツ)_/¯ Shrug
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0086 b/data/vim/patches/8.1.0086
new file mode 100644
index 000000000..2186846f6
--- /dev/null
+++ b/data/vim/patches/8.1.0086
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0086
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0086
+Problem: No tests for libcall() and libcallnr().
+Solution: Add tests. (Dominique Pelle, closes #2982)
+Files: src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0085/src/testdir/test_functions.vim 2018-05-22 20:35:13.554009274 +0200
+--- src/testdir/test_functions.vim 2018-06-19 19:44:16.868201472 +0200
+***************
+*** 948,950 ****
+--- 948,986 ----
+ delfunc s:save_reg_stat
+ unlet s:reg_stat
+ endfunc
++
++ func Test_libcall_libcallnr()
++ if !has('libcall')
++ return
++ endif
++
++ if has('win32')
++ let libc = 'msvcrt.dll'
++ elseif has('mac')
++ let libc = 'libSystem.B.dylib'
++ else
++ " On Unix, libc.so can be in various places.
++ " Interestingly, using an empty string for the 1st argument of libcall
++ " allows to call functions from libc which is not documented.
++ let libc = ''
++ endif
++
++ if has('win32')
++ call assert_equal($USERPROFILE, libcall(libc, 'getenv', 'USERPROFILE'))
++ else
++ call assert_equal($HOME, libcall(libc, 'getenv', 'HOME'))
++ endif
++
++ " If function returns NULL, libcall() should return an empty string.
++ call assert_equal('', libcall(libc, 'getenv', 'X_ENV_DOES_NOT_EXIT'))
++
++ " Test libcallnr() with string and integer argument.
++ call assert_equal(4, libcallnr(libc, 'strlen', 'abcd'))
++ call assert_equal(char2nr('A'), libcallnr(libc, 'toupper', char2nr('a')))
++
++ call assert_fails("call libcall(libc, 'Xdoesnotexist_', '')", 'E364:')
++ call assert_fails("call libcallnr(libc, 'Xdoesnotexist_', '')", 'E364:')
++
++ call assert_fails("call libcall('Xdoesnotexist_', 'getenv', 'HOME')", 'E364:')
++ call assert_fails("call libcallnr('Xdoesnotexist_', 'strlen', 'abcd')", 'E364:')
++ endfunc
+*** ../vim-8.1.0085/src/version.c 2018-06-19 19:09:04.870914841 +0200
+--- src/version.c 2018-06-19 19:44:39.776148855 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 86,
+ /**/
+
+--
+From "know your smileys":
+ ;-0 Can't find shift key
+ ,-9 Kann Umschalttaste nicht finden
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0087 b/data/vim/patches/8.1.0087
new file mode 100644
index 000000000..8f6a9c65d
--- /dev/null
+++ b/data/vim/patches/8.1.0087
@@ -0,0 +1,255 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0087
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0087
+Problem: v:shell_error is always zero when using terminal for "!cmd".
+Solution: Use "exitval" of terminal-job. (Ozaki Kiichi, closes #2994)
+Files: src/os_unix.c, src/os_win32.c, src/proto/terminal.pro,
+ src/terminal.c, src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0086/src/os_unix.c 2018-06-13 20:49:47.444338292 +0200
+--- src/os_unix.c 2018-06-19 19:53:43.794232600 +0200
+***************
+*** 4365,4370 ****
+--- 4365,4371 ----
+ char_u *tofree2 = NULL;
+ int retval = -1;
+ buf_T *buf;
++ job_T *job;
+ aco_save_T aco;
+ oparg_T oa; /* operator arguments */
+
+***************
+*** 4374,4379 ****
+--- 4375,4385 ----
+ init_job_options(&opt);
+ ch_log(NULL, "starting terminal for system command '%s'", cmd);
+ buf = term_start(NULL, argv, &opt, TERM_START_SYSTEM);
++ if (buf == NULL)
++ goto theend;
++
++ job = term_getjob(buf->b_term);
++ ++job->jv_refcount;
+
+ /* Find a window to make "buf" curbuf. */
+ aucmd_prepbuf(&aco, buf);
+***************
+*** 4391,4399 ****
+ else
+ normal_cmd(&oa, TRUE);
+ }
+! retval = 0;
+ ch_log(NULL, "system command finished");
+
+ /* restore curwin/curbuf and a few other things */
+ aucmd_restbuf(&aco);
+
+--- 4397,4407 ----
+ else
+ normal_cmd(&oa, TRUE);
+ }
+! retval = job->jv_exitval;
+ ch_log(NULL, "system command finished");
+
++ job_unref(job);
++
+ /* restore curwin/curbuf and a few other things */
+ aucmd_restbuf(&aco);
+
+*** ../vim-8.1.0086/src/os_win32.c 2018-06-12 21:11:08.626548598 +0200
+--- src/os_win32.c 2018-06-19 19:53:43.798232583 +0200
+***************
+*** 4796,4801 ****
+--- 4796,4802 ----
+ long_u cmdlen;
+ int retval = -1;
+ buf_T *buf;
++ job_T *job;
+ aco_save_T aco;
+ oparg_T oa; /* operator arguments */
+
+***************
+*** 4826,4831 ****
+--- 4827,4835 ----
+ if (buf == NULL)
+ return 255;
+
++ job = term_getjob(buf->b_term);
++ ++job->jv_refcount;
++
+ /* Find a window to make "buf" curbuf. */
+ aucmd_prepbuf(&aco, buf);
+
+***************
+*** 4842,4850 ****
+ else
+ normal_cmd(&oa, TRUE);
+ }
+! retval = 0;
+ ch_log(NULL, "system command finished");
+
+ /* restore curwin/curbuf and a few other things */
+ aucmd_restbuf(&aco);
+
+--- 4846,4856 ----
+ else
+ normal_cmd(&oa, TRUE);
+ }
+! retval = job->jv_exitval;
+ ch_log(NULL, "system command finished");
+
++ job_unref(job);
++
+ /* restore curwin/curbuf and a few other things */
+ aucmd_restbuf(&aco);
+
+*** ../vim-8.1.0086/src/proto/terminal.pro 2018-05-17 13:52:53.000000000 +0200
+--- src/proto/terminal.pro 2018-06-19 19:53:43.798232583 +0200
+***************
+*** 55,59 ****
+--- 55,60 ----
+ void f_term_start(typval_T *argvars, typval_T *rettv);
+ void f_term_wait(typval_T *argvars, typval_T *rettv);
+ void term_send_eof(channel_T *ch);
++ job_T *term_getjob(term_T *term);
+ int terminal_enabled(void);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0086/src/terminal.c 2018-06-18 22:15:46.255521457 +0200
+--- src/terminal.c 2018-06-19 19:53:43.798232583 +0200
+***************
+*** 5336,5341 ****
+--- 5336,5347 ----
+ }
+ }
+
++ job_T *
++ term_getjob(term_T *term)
++ {
++ return term != NULL ? term->tl_job : NULL;
++ }
++
+ # if defined(WIN3264) || defined(PROTO)
+
+ /**************************************
+*** ../vim-8.1.0086/src/testdir/test_terminal.vim 2018-06-12 18:04:28.038267855 +0200
+--- src/testdir/test_terminal.vim 2018-06-19 19:55:56.917638761 +0200
+***************
+*** 522,550 ****
+ exe buf . 'bwipe'
+ endfunc
+
+- " must be last, we can't go back from GUI to terminal
+- func Test_zz_terminal_in_gui()
+- if !CanRunGui()
+- return
+- endif
+-
+- " Ignore the "failed to create input context" error.
+- call test_ignore_error('E285:')
+-
+- gui -f
+-
+- call assert_equal(1, winnr('$'))
+- let buf = Run_shell_in_terminal({'term_finish': 'close'})
+- call Stop_shell_in_terminal(buf)
+- call term_wait(buf)
+-
+- " closing window wipes out the terminal buffer a with finished job
+- call WaitForAssert({-> assert_equal(1, winnr('$'))})
+- call assert_equal("", bufname(buf))
+-
+- unlet g:job
+- endfunc
+-
+ func Test_terminal_list_args()
+ let buf = term_start([&shell, &shellcmdflag, 'echo "123"'])
+ call assert_fails(buf . 'bwipe', 'E517')
+--- 522,527 ----
+***************
+*** 1546,1548 ****
+--- 1523,1580 ----
+
+ exe buf . 'bwipe!'
+ endfunc
++
++ " must be nearly the last, we can't go back from GUI to terminal
++ func Test_zz1_terminal_in_gui()
++ if !CanRunGui()
++ return
++ endif
++
++ " Ignore the "failed to create input context" error.
++ call test_ignore_error('E285:')
++
++ gui -f
++
++ call assert_equal(1, winnr('$'))
++ let buf = Run_shell_in_terminal({'term_finish': 'close'})
++ call Stop_shell_in_terminal(buf)
++ call term_wait(buf)
++
++ " closing window wipes out the terminal buffer a with finished job
++ call WaitForAssert({-> assert_equal(1, winnr('$'))})
++ call assert_equal("", bufname(buf))
++
++ unlet g:job
++ endfunc
++
++ func Test_zz2_terminal_guioptions_bang()
++ if !has('gui_running')
++ return
++ endif
++ set guioptions+=!
++
++ let filename = 'Xtestscript'
++ if has('win32')
++ let filename .= '.bat'
++ let prefix = ''
++ let contents = ['@echo off', 'exit %1']
++ else
++ let filename .= '.sh'
++ let prefix = './'
++ let contents = ['#!/bin/sh', 'exit $1']
++ endif
++ call writefile(contents, filename)
++ call setfperm(filename, 'rwxrwx---')
++
++ " Check if v:shell_error is equal to the exit status.
++ let exitval = 0
++ execute printf(':!%s%s %d', prefix, filename, exitval)
++ call assert_equal(exitval, v:shell_error)
++
++ let exitval = 9
++ execute printf(':!%s%s %d', prefix, filename, exitval)
++ call assert_equal(exitval, v:shell_error)
++
++ set guioptions&
++ call delete(filename)
++ endfunc
+*** ../vim-8.1.0086/src/version.c 2018-06-19 19:46:01.703936337 +0200
+--- src/version.c 2018-06-19 19:50:34.551011945 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 87,
+ /**/
+
+--
+From "know your smileys":
+ :-) Funny
+ |-) Funny Oriental
+ (-: Funny Australian
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0088 b/data/vim/patches/8.1.0088
new file mode 100644
index 000000000..458bfa9fa
--- /dev/null
+++ b/data/vim/patches/8.1.0088
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0088
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0088
+Problem: Terminal test for stdout and stderr is a bit flaky.
+Solution: Wait for both stdout and stderr to have been processed. (Ozaki
+ Kiichi, closes #2991)
+Files: src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0087/src/testdir/test_terminal.vim 2018-06-19 19:59:15.248704265 +0200
+--- src/testdir/test_terminal.vim 2018-06-19 20:04:17.711202392 +0200
+***************
+*** 1487,1494 ****
+
+ let outfile = 'Xtermstdout'
+ let buf = term_start(['./Xechoerrout.sh'], {'out_io': 'file', 'out_name': outfile})
+! call WaitForAssert({-> assert_inrange(1, 2, len(readfile(outfile)))})
+! call assert_equal("this is standard out", readfile(outfile)[0])
+ call assert_equal('this is standard error', term_getline(buf, 1))
+
+ call WaitForAssert({-> assert_equal('dead', job_status(term_getjob(buf)))})
+--- 1487,1495 ----
+
+ let outfile = 'Xtermstdout'
+ let buf = term_start(['./Xechoerrout.sh'], {'out_io': 'file', 'out_name': outfile})
+!
+! call WaitFor({-> !empty(readfile(outfile)) && !empty(term_getline(buf, 1))})
+! call assert_equal(['this is standard out'], readfile(outfile))
+ call assert_equal('this is standard error', term_getline(buf, 1))
+
+ call WaitForAssert({-> assert_equal('dead', job_status(term_getjob(buf)))})
+*** ../vim-8.1.0087/src/version.c 2018-06-19 19:59:15.248704265 +0200
+--- src/version.c 2018-06-19 20:05:36.722799665 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 88,
+ /**/
+
+--
+From "know your smileys":
+ :~) A man with a tape recorder up his nose
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0089 b/data/vim/patches/8.1.0089
new file mode 100644
index 000000000..c993c6945
--- /dev/null
+++ b/data/vim/patches/8.1.0089
@@ -0,0 +1,199 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0089
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0089
+Problem: error when ending the terminal debugger
+Solution: Fix deleting defined signs for breakpoints. Make the debugger
+ work better on MS-Windows.
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0088/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 17:27:50.085385875 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 22:33:23.557472678 +0200
+***************
+*** 408,414 ****
+
+ " Drop the gdb prompt, we have our own.
+ " Drop status and echo'd commands.
+! if a:text == '(gdb) ' || a:text == '^done' || a:text[0] == '&' || a:text[0] == '='
+ return
+ endif
+ if a:text =~ '^^error,msg='
+--- 408,414 ----
+
+ " Drop the gdb prompt, we have our own.
+ " Drop status and echo'd commands.
+! if a:text == '(gdb) ' || a:text == '^done' || a:text[0] == '&'
+ return
+ endif
+ if a:text =~ '^^error,msg='
+***************
+*** 439,445 ****
+ " to the next ", unescaping characters.
+ func s:DecodeMessage(quotedText)
+ if a:quotedText[0] != '"'
+! echoerr 'DecodeMessage(): missing quote'
+ return
+ endif
+ let result = ''
+--- 439,445 ----
+ " to the next ", unescaping characters.
+ func s:DecodeMessage(quotedText)
+ if a:quotedText[0] != '"'
+! echoerr 'DecodeMessage(): missing quote in ' . a:quotedText
+ return
+ endif
+ let result = ''
+***************
+*** 459,464 ****
+--- 459,474 ----
+ return result
+ endfunc
+
++ " Extract the "name" value from a gdb message with fullname="name".
++ func s:GetFullname(msg)
++ let name = s:DecodeMessage(substitute(a:msg, '.*fullname=', '', ''))
++ if has('win32') && name =~ ':\\\\'
++ " sometimes the name arrives double-escaped
++ let name = substitute(name, '\\\\', '\\', 'g')
++ endif
++ return name
++ endfunc
++
+ func s:EndTermDebug(job, status)
+ exe 'bwipe! ' . s:commbuf
+ unlet s:gdbwin
+***************
+*** 639,647 ****
+ for key in keys(s:breakpoints)
+ exe 'sign unplace ' . (s:break_id + key)
+ endfor
+- sign undefine debugPC
+- sign undefine debugBreakpoint
+ unlet s:breakpoints
+ endfunc
+
+ " :Break - Set a breakpoint at the cursor position.
+--- 649,661 ----
+ for key in keys(s:breakpoints)
+ exe 'sign unplace ' . (s:break_id + key)
+ endfor
+ unlet s:breakpoints
++
++ sign undefine debugPC
++ for val in s:BreakpointSigns
++ exe "sign undefine debugBreakpoint" . val
++ endfor
++ unlet s:BreakpointSigns
+ endfunc
+
+ " :Break - Set a breakpoint at the cursor position.
+***************
+*** 660,667 ****
+ endif
+ sleep 10m
+ endif
+! call s:SendCommand('-break-insert --source '
+! \ . fnameescape(expand('%:p')) . ' --line ' . line('.'))
+ if do_continue
+ call s:SendCommand('-exec-continue')
+ endif
+--- 674,682 ----
+ endif
+ sleep 10m
+ endif
+! " Use the fname:lnum format, older gdb can't handle --source.
+! call s:SendCommand('-break-insert '
+! \ . fnameescape(expand('%:p')) . ':' . line('.'))
+ if do_continue
+ call s:SendCommand('-exec-continue')
+ endif
+***************
+*** 790,796 ****
+
+ call s:GotoSourcewinOrCreateIt()
+
+! let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '')
+ if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
+ let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
+ if lnum =~ '^[0-9]*$'
+--- 805,815 ----
+
+ call s:GotoSourcewinOrCreateIt()
+
+! if a:msg =~ 'fullname='
+! let fname = s:GetFullname(a:msg)
+! else
+! let fname = ''
+! endif
+ if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
+ let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
+ if lnum =~ '^[0-9]*$'
+***************
+*** 816,828 ****
+ call win_gotoid(wid)
+ endfunc
+
+ func s:CreateBreakpoint(nr)
+- if !exists("s:BreakpointSigns")
+- let s:BreakpointSigns = []
+- endif
+ if index(s:BreakpointSigns, a:nr) == -1
+ call add(s:BreakpointSigns, a:nr)
+! exe "sign define debugBreakpoint". a:nr . " text=" . a:nr . " texthl=debugBreakpoint"
+ endif
+ endfunc
+
+--- 835,846 ----
+ call win_gotoid(wid)
+ endfunc
+
++ let s:BreakpointSigns = []
++
+ func s:CreateBreakpoint(nr)
+ if index(s:BreakpointSigns, a:nr) == -1
+ call add(s:BreakpointSigns, a:nr)
+! exe "sign define debugBreakpoint" . a:nr . " text=" . a:nr . " texthl=debugBreakpoint"
+ endif
+ endfunc
+
+***************
+*** 842,848 ****
+ let s:breakpoints[nr] = entry
+ endif
+
+! let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '')
+ let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
+ let entry['fname'] = fname
+ let entry['lnum'] = lnum
+--- 860,866 ----
+ let s:breakpoints[nr] = entry
+ endif
+
+! let fname = s:GetFullname(a:msg)
+ let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
+ let entry['fname'] = fname
+ let entry['lnum'] = lnum
+*** ../vim-8.1.0088/src/version.c 2018-06-19 20:08:10.382007834 +0200
+--- src/version.c 2018-06-19 22:31:10.318179415 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 89,
+ /**/
+
+--
+How many light bulbs does it take to change a person?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0090 b/data/vim/patches/8.1.0090
new file mode 100644
index 000000000..8ca0b8cbe
--- /dev/null
+++ b/data/vim/patches/8.1.0090
@@ -0,0 +1,146 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0090
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0090
+Problem: "..." used inconsistently in a message.
+Solution: Define the message with " ..." once. (hint by Ken Takata)
+Files: src/regexp_nfa.c
+
+
+*** ../vim-8.1.0089/src/regexp_nfa.c 2018-06-19 14:23:50.302866911 +0200
+--- src/regexp_nfa.c 2018-06-20 20:34:22.266469423 +0200
+***************
+*** 2672,2677 ****
+--- 2672,2678 ----
+
+ #ifdef ENABLE_LOG
+ static FILE *log_fd;
++ static char_u e_log_open_failed[] = N_("Could not open temporary log file for writing, displaying on stderr... ");
+
+ /*
+ * Print the postfix notation of the current regexp.
+***************
+*** 2687,2693 ****
+ {
+ fprintf(f, "\n-------------------------\n");
+ if (retval == FAIL)
+! fprintf(f, ">>> NFA engine failed ... \n");
+ else if (retval == OK)
+ fprintf(f, ">>> NFA engine succeeded !\n");
+ fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr);
+--- 2688,2694 ----
+ {
+ fprintf(f, "\n-------------------------\n");
+ if (retval == FAIL)
+! fprintf(f, ">>> NFA engine failed... \n");
+ else if (retval == OK)
+ fprintf(f, ">>> NFA engine succeeded !\n");
+ fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr);
+***************
+*** 5270,5276 ****
+ }
+ else
+ {
+! EMSG(_("Could not open temporary log file for writing, displaying on stderr... "));
+ log_fd = stderr;
+ }
+ #endif
+--- 5271,5277 ----
+ }
+ else
+ {
+! EMSG(_(e_log_open_failed));
+ log_fd = stderr;
+ }
+ #endif
+***************
+*** 5620,5626 ****
+ }
+ else
+ {
+! EMSG(_("Could not open temporary log file for writing, displaying on stderr ... "));
+ log_fd = stderr;
+ }
+ #endif
+--- 5621,5627 ----
+ }
+ else
+ {
+! EMSG(_(e_log_open_failed));
+ log_fd = stderr;
+ }
+ #endif
+***************
+*** 5704,5710 ****
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "------------------------------------------\n");
+ fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput);
+! fprintf(log_fd, ">>> Advanced one character ... Current char is %c (code %d) \n", curc, (int)curc);
+ fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n);
+ {
+ int i;
+--- 5705,5711 ----
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "------------------------------------------\n");
+ fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput);
+! fprintf(log_fd, ">>> Advanced one character... Current char is %c (code %d) \n", curc, (int)curc);
+ fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n);
+ {
+ int i;
+***************
+*** 5757,5763 ****
+ else
+ col = (int)(t->subs.norm.list.line[0].start - regline);
+ nfa_set_code(t->state->c);
+! fprintf(log_fd, "(%d) char %d %s (start col %d)%s ... \n",
+ abs(t->state->id), (int)t->state->c, code, col,
+ pim_info(&t->pim));
+ }
+--- 5758,5764 ----
+ else
+ col = (int)(t->subs.norm.list.line[0].start - regline);
+ nfa_set_code(t->state->c);
+! fprintf(log_fd, "(%d) char %d %s (start col %d)%s... \n",
+ abs(t->state->id), (int)t->state->c, code, col,
+ pim_info(&t->pim));
+ }
+***************
+*** 7282,7288 ****
+
+ if (f != NULL)
+ {
+! fprintf(f, "\n*****************************\n\n\n\n\tCompiling regexp \"%s\" ... hold on !\n", expr);
+ fclose(f);
+ }
+ }
+--- 7283,7289 ----
+
+ if (f != NULL)
+ {
+! fprintf(f, "\n*****************************\n\n\n\n\tCompiling regexp \"%s\"... hold on !\n", expr);
+ fclose(f);
+ }
+ }
+*** ../vim-8.1.0089/src/version.c 2018-06-19 22:34:39.608993263 +0200
+--- src/version.c 2018-06-20 20:29:03.511932732 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 90,
+ /**/
+
+--
+Where do you want to crash today?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0091 b/data/vim/patches/8.1.0091
new file mode 100644
index 000000000..2888abf73
--- /dev/null
+++ b/data/vim/patches/8.1.0091
@@ -0,0 +1,369 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0091
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0091
+Problem: MS-Windows: Cannot interrupt gdb when program is running.
+Solution: Add debugbreak() and use it in the terminal debugger.
+ Respect 'modified' in a prompt buffer.
+Files: src/evalfunc.c, runtime/doc/eval.txt, src/undo.c,
+ runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0090/src/evalfunc.c 2018-06-17 19:36:30.215317108 +0200
+--- src/evalfunc.c 2018-06-20 21:37:04.384279452 +0200
+***************
+*** 123,128 ****
+--- 123,131 ----
+ static void f_count(typval_T *argvars, typval_T *rettv);
+ static void f_cscope_connection(typval_T *argvars, typval_T *rettv);
+ static void f_cursor(typval_T *argsvars, typval_T *rettv);
++ #ifdef WIN3264
++ static void f_debugbreak(typval_T *argvars, typval_T *rettv);
++ #endif
+ static void f_deepcopy(typval_T *argvars, typval_T *rettv);
+ static void f_delete(typval_T *argvars, typval_T *rettv);
+ static void f_deletebufline(typval_T *argvars, typval_T *rettv);
+***************
+*** 577,582 ****
+--- 580,588 ----
+ {"count", 2, 4, f_count},
+ {"cscope_connection",0,3, f_cscope_connection},
+ {"cursor", 1, 3, f_cursor},
++ #ifdef WIN3264
++ {"debugbreak", 1, 1, f_debugbreak},
++ #endif
+ {"deepcopy", 1, 2, f_deepcopy},
+ {"delete", 1, 2, f_delete},
+ {"deletebufline", 2, 3, f_deletebufline},
+***************
+*** 2761,2766 ****
+--- 2767,2799 ----
+ rettv->vval.v_number = 0;
+ }
+
++ #ifdef WIN3264
++ /*
++ * "debugbreak()" function
++ */
++ static void
++ f_debugbreak(typval_T *argvars, typval_T *rettv)
++ {
++ int pid;
++
++ rettv->vval.v_number = FAIL;
++ pid = (int)get_tv_number(&argvars[0]);
++ if (pid == 0)
++ EMSG(_(e_invarg));
++ else
++ {
++ HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
++
++ if (hProcess != NULL)
++ {
++ DebugBreakProcess(hProcess);
++ CloseHandle(hProcess);
++ rettv->vval.v_number = OK;
++ }
++ }
++ }
++ #endif
++
+ /*
+ * "deepcopy()" function
+ */
+*** ../vim-8.1.0090/runtime/doc/eval.txt 2018-06-17 19:36:30.211317130 +0200
+--- runtime/doc/eval.txt 2018-06-20 20:49:26.069391126 +0200
+***************
+*** 2108,2113 ****
+--- 2108,2114 ----
+ cursor({lnum}, {col} [, {off}])
+ Number move cursor to {lnum}, {col}, {off}
+ cursor({list}) Number move cursor to position in {list}
++ debugbreak({pid}) Number interrupt process being debugged
+ deepcopy({expr} [, {noref}]) any make a full copy of {expr}
+ delete({fname} [, {flags}]) Number delete the file or directory {fname}
+ deletebufline({expr}, {first}[, {last}])
+***************
+*** 3480,3485 ****
+--- 3481,3491 ----
+ position within a <Tab> or after the last character.
+ Returns 0 when the position could be set, -1 otherwise.
+
++ debugbreak({pid}) *debugbreak()*
++ Specifically used to interrupt a program being debugged. It
++ will cause process {pid} to get a SIGTRAP. Behavior for other
++ processes is undefined. See |terminal-debugger|.
++ {only available on MS-Windows}
+
+ deepcopy({expr} [, {noref}]) *deepcopy()* *E698*
+ Make a copy of {expr}. For Numbers and Strings this isn't
+***************
+*** 5488,5493 ****
+--- 5494,5513 ----
+ The returned Job object can be used to get the status with
+ |job_status()| and stop the job with |job_stop()|.
+
++ Note that the job object will be deleted if there are no
++ references to it. This closes the stdin and stderr, which may
++ cause the job to fail with an error. To avoid this keep a
++ reference to the job. Thus instead of: >
++ call job_start('my-command')
++ < use: >
++ let myjob = job_start('my-command')
++ < and unlet "myjob" once the job is not needed or is past the
++ point where it would fail (e.g. when it prints a message on
++ startup). Keep in mind that variables local to a function
++ will cease to exist if the function returns. Use a
++ script-local variable if needed: >
++ let s:myjob = job_start('my-command')
++ <
+ {options} must be a Dictionary. It can contain many optional
+ items, see |job-options|.
+
+*** ../vim-8.1.0090/src/undo.c 2018-04-08 12:53:24.000000000 +0200
+--- src/undo.c 2018-06-20 22:01:18.595276435 +0200
+***************
+*** 3539,3545 ****
+ int
+ bufIsChangedNotTerm(buf_T *buf)
+ {
+! return !bt_dontwrite(buf)
+ && (buf->b_changed || file_ff_differs(buf, TRUE));
+ }
+
+--- 3539,3547 ----
+ int
+ bufIsChangedNotTerm(buf_T *buf)
+ {
+! // In a "prompt" buffer we do respect 'modified', so that we can control
+! // closing the window by setting or resetting that option.
+! return (!bt_dontwrite(buf) || bt_prompt(buf))
+ && (buf->b_changed || file_ff_differs(buf, TRUE));
+ }
+
+*** ../vim-8.1.0090/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 22:34:39.608993263 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-20 22:35:22.126433823 +0200
+***************
+*** 98,103 ****
+--- 98,104 ----
+ return
+ endif
+ let s:ptywin = 0
++ let s:pid = 0
+
+ " Uncomment this line to write logging in "debuglog".
+ " call ch_logfile('debuglog', 'w')
+***************
+*** 271,276 ****
+--- 272,279 ----
+ exe 'bwipe! ' . s:promptbuf
+ return
+ endif
++ " Mark the buffer modified so that it's not easy to close.
++ set modified
+ let s:gdb_channel = job_getchannel(s:gdbjob)
+
+ " Interpret commands while the target is running. This should usualy only
+***************
+*** 396,405 ****
+ call s:SendCommand(a:text)
+ endfunc
+
+! " Function called when pressing CTRL-C in the prompt buffer.
+ func s:PromptInterrupt()
+! call ch_log('Interrupting gdb')
+! call job_stop(s:gdbjob, 'int')
+ endfunc
+
+ " Function called when gdb outputs text.
+--- 399,414 ----
+ call s:SendCommand(a:text)
+ endfunc
+
+! " Function called when pressing CTRL-C in the prompt buffer and when placing a
+! " breakpoint.
+ func s:PromptInterrupt()
+! if s:pid == 0
+! echoerr 'Cannot interrupt gdb, did not find a process ID'
+! else
+! call ch_log('Interrupting gdb')
+! " Using job_stop(s:gdbjob, 'int') does not work.
+! call debugbreak(s:pid)
+! endif
+ endfunc
+
+ " Function called when gdb outputs text.
+***************
+*** 430,436 ****
+
+ " Add the output above the current prompt.
+ call append(line('$') - 1, text)
+! set nomodified
+
+ call win_gotoid(curwinid)
+ endfunc
+--- 439,445 ----
+
+ " Add the output above the current prompt.
+ call append(line('$') - 1, text)
+! set modified
+
+ call win_gotoid(curwinid)
+ endfunc
+***************
+*** 509,514 ****
+--- 518,524 ----
+ func s:EndPromptDebug(job, status)
+ let curwinid = win_getid(winnr())
+ call win_gotoid(s:gdbwin)
++ set nomodified
+ close
+ if curwinid != s:gdbwin
+ call win_gotoid(curwinid)
+***************
+*** 535,540 ****
+--- 545,552 ----
+ call s:HandleNewBreakpoint(msg)
+ elseif msg =~ '^=breakpoint-deleted,'
+ call s:HandleBreakpointDelete(msg)
++ elseif msg =~ '^=thread-group-started'
++ call s:HandleProgramRun(msg)
+ elseif msg =~ '^\^done,value='
+ call s:HandleEvaluate(msg)
+ elseif msg =~ '^\^error,msg='
+***************
+*** 655,661 ****
+ for val in s:BreakpointSigns
+ exe "sign undefine debugBreakpoint" . val
+ endfor
+! unlet s:BreakpointSigns
+ endfunc
+
+ " :Break - Set a breakpoint at the cursor position.
+--- 667,673 ----
+ for val in s:BreakpointSigns
+ exe "sign undefine debugBreakpoint" . val
+ endfor
+! let s:BreakpointSigns = []
+ endfunc
+
+ " :Break - Set a breakpoint at the cursor position.
+***************
+*** 666,674 ****
+ if !s:stopped
+ let do_continue = 1
+ if s:way == 'prompt'
+! " Need to send a signal to get the UI to listen. Strangely this is only
+! " needed once.
+! call job_stop(s:gdbjob, 'int')
+ else
+ call s:SendCommand('-exec-interrupt')
+ endif
+--- 678,684 ----
+ if !s:stopped
+ let do_continue = 1
+ if s:way == 'prompt'
+! call s:PromptInterrupt()
+ else
+ call s:SendCommand('-exec-interrupt')
+ endif
+***************
+*** 798,810 ****
+ let wid = win_getid(winnr())
+
+ if a:msg =~ '^\*stopped'
+ let s:stopped = 1
+ elseif a:msg =~ '^\*running'
+ let s:stopped = 0
+ endif
+
+- call s:GotoSourcewinOrCreateIt()
+-
+ if a:msg =~ 'fullname='
+ let fname = s:GetFullname(a:msg)
+ else
+--- 808,820 ----
+ let wid = win_getid(winnr())
+
+ if a:msg =~ '^\*stopped'
++ call ch_log('program stopped')
+ let s:stopped = 1
+ elseif a:msg =~ '^\*running'
++ call ch_log('program running')
+ let s:stopped = 0
+ endif
+
+ if a:msg =~ 'fullname='
+ let fname = s:GetFullname(a:msg)
+ else
+***************
+*** 813,818 ****
+--- 823,829 ----
+ if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
+ let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
+ if lnum =~ '^[0-9]*$'
++ call s:GotoSourcewinOrCreateIt()
+ if expand('%:p') != fnamemodify(fname, ':p')
+ if &modified
+ " TODO: find existing window
+***************
+*** 828,834 ****
+ exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname
+ setlocal signcolumn=yes
+ endif
+! else
+ exe 'sign unplace ' . s:pc_id
+ endif
+
+--- 839,845 ----
+ exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname
+ setlocal signcolumn=yes
+ endif
+! elseif !s:stopped || fname != ''
+ exe 'sign unplace ' . s:pc_id
+ endif
+
+***************
+*** 892,897 ****
+--- 903,919 ----
+ endif
+ endfunc
+
++ " Handle the debugged program starting to run.
++ " Will store the process ID in s:pid
++ func s:HandleProgramRun(msg)
++ let nr = substitute(a:msg, '.*pid="\([0-9]*\)\".*', '\1', '') + 0
++ if nr == 0
++ return
++ endif
++ let s:pid = nr
++ call ch_log('Detected process ID: ' . s:pid)
++ endfunc
++
+ " Handle a BufRead autocommand event: place any signs.
+ func s:BufRead()
+ let fname = expand('<afile>:p')
+*** ../vim-8.1.0090/src/version.c 2018-06-20 20:37:32.469561678 +0200
+--- src/version.c 2018-06-20 20:50:45.560821218 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 91,
+ /**/
+
+--
+From "know your smileys":
+ :q vi user saying, "How do I get out of this damn emacs editor?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0092 b/data/vim/patches/8.1.0092
new file mode 100644
index 000000000..1f0c1816b
--- /dev/null
+++ b/data/vim/patches/8.1.0092
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0072
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0092 (after 8.1.0091)
+Problem: Prompt buffer test fails.
+Solution: Set 'nomodified' before closing the window. (Ozaki Kiichi,
+ closes #3051
+Files: src/testdir/test_prompt_buffer.vim
+
+
+*** ../vim-8.1.0091/src/testdir/test_prompt_buffer.vim 2018-06-04 17:28:04.729961269 +0200
+--- src/testdir/test_prompt_buffer.vim 2018-06-21 11:27:42.514152796 +0200
+***************
+*** 24,29 ****
+--- 24,31 ----
+ call writefile([
+ \ 'func TextEntered(text)',
+ \ ' if a:text == "exit"',
++ \ ' " Reset &modified to allow the buffer to be closed.',
++ \ ' set nomodified',
+ \ ' stopinsert',
+ \ ' close',
+ \ ' else',
+*** ../vim-8.1.0091/src/version.c 2018-06-20 22:37:52.658911284 +0200
+--- src/version.c 2018-06-21 12:06:40.685403486 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 92,
+ /**/
+
+--
+From "know your smileys":
+ <<<:-{ Worf (Never smiles anyways, so he's a bad smiley)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0093 b/data/vim/patches/8.1.0093
new file mode 100644
index 000000000..95fd0ca14
--- /dev/null
+++ b/data/vim/patches/8.1.0093
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0093
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0093
+Problem: non-MS-Windows: Cannot interrupt gdb when program is running.
+Solution: Only use debugbreak() on MS-Windows.
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0092/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-20 22:37:52.658911284 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-21 20:29:09.404402756 +0200
+***************
+*** 402,413 ****
+ " Function called when pressing CTRL-C in the prompt buffer and when placing a
+ " breakpoint.
+ func s:PromptInterrupt()
+! if s:pid == 0
+! echoerr 'Cannot interrupt gdb, did not find a process ID'
+ else
+! call ch_log('Interrupting gdb')
+! " Using job_stop(s:gdbjob, 'int') does not work.
+! call debugbreak(s:pid)
+ endif
+ endfunc
+
+--- 402,418 ----
+ " Function called when pressing CTRL-C in the prompt buffer and when placing a
+ " breakpoint.
+ func s:PromptInterrupt()
+! call ch_log('Interrupting gdb')
+! if has('win32')
+! " Using job_stop() does not work on MS-Windows, need to send SIGTRAP to
+! " the debugger program so that gdb responds again.
+! if s:pid == 0
+! echoerr 'Cannot interrupt gdb, did not find a process ID'
+! else
+! call debugbreak(s:pid)
+! endif
+ else
+! call job_stop(s:gdbjob, 'int')
+ endif
+ endfunc
+
+*** ../vim-8.1.0092/src/version.c 2018-06-21 12:07:00.065296930 +0200
+--- src/version.c 2018-06-21 20:30:01.052124494 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 93,
+ /**/
+
+--
+From "know your smileys":
+ (X0||) Double hamburger with lettuce and tomato
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0094 b/data/vim/patches/8.1.0094
new file mode 100644
index 000000000..10f92d15b
--- /dev/null
+++ b/data/vim/patches/8.1.0094
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0094
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0094
+Problem: Help text "usage:" is not capatalized.
+Solution: Make it "Usage:". (closes #3044)
+Files: src/main.c
+
+
+*** ../vim-8.1.0093/src/main.c 2018-06-19 17:49:20.300015350 +0200
+--- src/main.c 2018-06-21 21:35:43.324553857 +0200
+***************
+*** 3269,3275 ****
+ #endif
+
+ mch_msg(longVersion);
+! mch_msg(_("\n\nusage:"));
+ for (i = 0; ; ++i)
+ {
+ mch_msg(_(" vim [arguments] "));
+--- 3269,3275 ----
+ #endif
+
+ mch_msg(longVersion);
+! mch_msg(_("\n\nUsage:"));
+ for (i = 0; ; ++i)
+ {
+ mch_msg(_(" vim [arguments] "));
+*** ../vim-8.1.0093/src/version.c 2018-06-21 20:31:10.627749367 +0200
+--- src/version.c 2018-06-21 21:37:57.955727830 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 94,
+ /**/
+
+--
+From "know your smileys":
+ <>:-) Bishop
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0095 b/data/vim/patches/8.1.0095
new file mode 100644
index 000000000..acb4407f1
--- /dev/null
+++ b/data/vim/patches/8.1.0095
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0095
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0095
+Problem: Dialog for ":browse tabnew" says "new window".
+Solution: Use "new tab page". (closes #3053)
+Files: src/ex_docmd.c
+
+
+*** ../vim-8.1.0094/src/ex_docmd.c 2018-06-12 17:03:35.945611819 +0200
+--- src/ex_docmd.c 2018-06-21 22:07:23.933769249 +0200
+***************
+*** 8200,8205 ****
+--- 8200,8208 ----
+ #ifdef FEAT_BROWSE
+ int browse_flag = cmdmod.browse;
+ #endif
++ int use_tab = eap->cmdidx == CMD_tabedit
++ || eap->cmdidx == CMD_tabfind
++ || eap->cmdidx == CMD_tabnew;
+
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+***************
+*** 8248,8254 ****
+ }
+ else
+ {
+! fname = do_browse(0, (char_u *)_("Edit File in new window"),
+ eap->arg, NULL, NULL, NULL, curbuf);
+ if (fname == NULL)
+ goto theend;
+--- 8251,8259 ----
+ }
+ else
+ {
+! fname = do_browse(0, (char_u *)(use_tab
+! ? _("Edit File in new tab page")
+! : _("Edit File in new window")),
+ eap->arg, NULL, NULL, NULL, curbuf);
+ if (fname == NULL)
+ goto theend;
+***************
+*** 8261,8269 ****
+ /*
+ * Either open new tab page or split the window.
+ */
+! if (eap->cmdidx == CMD_tabedit
+! || eap->cmdidx == CMD_tabfind
+! || eap->cmdidx == CMD_tabnew)
+ {
+ if (win_new_tabpage(cmdmod.tab != 0 ? cmdmod.tab
+ : eap->addr_count == 0 ? 0
+--- 8266,8272 ----
+ /*
+ * Either open new tab page or split the window.
+ */
+! if (use_tab)
+ {
+ if (win_new_tabpage(cmdmod.tab != 0 ? cmdmod.tab
+ : eap->addr_count == 0 ? 0
+*** ../vim-8.1.0094/src/version.c 2018-06-21 21:38:29.599534681 +0200
+--- src/version.c 2018-06-21 22:08:45.513304600 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 95,
+ /**/
+
+--
+From "know your smileys":
+ +<(:-) The Pope
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0096 b/data/vim/patches/8.1.0096
new file mode 100644
index 000000000..a9658784e
--- /dev/null
+++ b/data/vim/patches/8.1.0096
@@ -0,0 +1,126 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0096
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0096
+Problem: Inconsistent use of the word autocommands.
+Solution: Don't use auto-commands or "auto commands".
+Files: src/fileio.c
+
+
+*** ../vim-8.1.0095/src/fileio.c 2018-05-22 20:35:13.562009272 +0200
+--- src/fileio.c 2018-06-22 21:26:06.200765470 +0200
+***************
+*** 8412,8430 ****
+ * will be automatically executed for <event>
+ * when editing a file matching <pat>, in
+ * the current group.
+! * :autocmd <event> <pat> Show the auto-commands associated with
+ * <event> and <pat>.
+! * :autocmd <event> Show the auto-commands associated with
+ * <event>.
+! * :autocmd Show all auto-commands.
+! * :autocmd! <event> <pat> <cmd> Remove all auto-commands associated with
+ * <event> and <pat>, and add the command
+ * <cmd>, for the current group.
+! * :autocmd! <event> <pat> Remove all auto-commands associated with
+ * <event> and <pat> for the current group.
+! * :autocmd! <event> Remove all auto-commands associated with
+ * <event> for the current group.
+! * :autocmd! Remove ALL auto-commands for the current
+ * group.
+ *
+ * Multiple events and patterns may be given separated by commas. Here are
+--- 8412,8430 ----
+ * will be automatically executed for <event>
+ * when editing a file matching <pat>, in
+ * the current group.
+! * :autocmd <event> <pat> Show the autocommands associated with
+ * <event> and <pat>.
+! * :autocmd <event> Show the autocommands associated with
+ * <event>.
+! * :autocmd Show all autocommands.
+! * :autocmd! <event> <pat> <cmd> Remove all autocommands associated with
+ * <event> and <pat>, and add the command
+ * <cmd>, for the current group.
+! * :autocmd! <event> <pat> Remove all autocommands associated with
+ * <event> and <pat> for the current group.
+! * :autocmd! <event> Remove all autocommands associated with
+ * <event> for the current group.
+! * :autocmd! Remove ALL autocommands for the current
+ * group.
+ *
+ * Multiple events and patterns may be given separated by commas. Here are
+***************
+*** 8534,8540 ****
+ if (!forceit && *cmd == NUL)
+ {
+ /* Highlight title */
+! MSG_PUTS_TITLE(_("\n--- Auto-Commands ---"));
+ }
+
+ /*
+--- 8534,8540 ----
+ if (!forceit && *cmd == NUL)
+ {
+ /* Highlight title */
+! MSG_PUTS_TITLE(_("\n--- Autocommands ---"));
+ }
+
+ /*
+***************
+*** 9602,9608 ****
+ autocmd_match = fname;
+
+
+! /* Don't redraw while doing auto commands. */
+ ++RedrawingDisabled;
+ save_sourcing_name = sourcing_name;
+ sourcing_name = NULL; /* don't free this one */
+--- 9602,9608 ----
+ autocmd_match = fname;
+
+
+! /* Don't redraw while doing autocommands. */
+ ++RedrawingDisabled;
+ save_sourcing_name = sourcing_name;
+ sourcing_name = NULL; /* don't free this one */
+***************
+*** 9855,9861 ****
+ : ap->buflocal_nr == apc->arg_bufnr)
+ {
+ name = event_nr2name(apc->event);
+! s = _("%s Auto commands for \"%s\"");
+ sourcing_name = alloc((unsigned)(STRLEN(s)
+ + STRLEN(name) + ap->patlen + 1));
+ if (sourcing_name != NULL)
+--- 9855,9861 ----
+ : ap->buflocal_nr == apc->arg_bufnr)
+ {
+ name = event_nr2name(apc->event);
+! s = _("%s Autocommands for \"%s\"");
+ sourcing_name = alloc((unsigned)(STRLEN(s)
+ + STRLEN(name) + ap->patlen + 1));
+ if (sourcing_name != NULL)
+*** ../vim-8.1.0095/src/version.c 2018-06-21 22:10:04.404854396 +0200
+--- src/version.c 2018-06-22 21:30:10.251289904 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 96,
+ /**/
+
+--
+Momento mori, ergo carpe diem
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0097 b/data/vim/patches/8.1.0097
new file mode 100644
index 000000000..f84af3bb3
--- /dev/null
+++ b/data/vim/patches/8.1.0097
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0097
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0097
+Problem: Superfluous space before exclamation mark.
+Solution: Remove the space. Don't translate debug message.
+Files: src/regexp_nfa.c
+
+
+*** ../vim-8.1.0096/src/regexp_nfa.c 2018-06-20 20:37:32.469561678 +0200
+--- src/regexp_nfa.c 2018-06-22 21:38:58.460097521 +0200
+***************
+*** 2989,2995 ****
+ fclose(df);
+ }
+ #endif
+! EMSG(_("E874: (NFA) Could not pop the stack !"));
+ }
+
+ /*
+--- 2989,2995 ----
+ fclose(df);
+ }
+ #endif
+! EMSG(_("E874: (NFA) Could not pop the stack!"));
+ }
+
+ /*
+***************
+*** 5593,5599 ****
+ debug = fopen(NFA_REGEXP_DEBUG_LOG, "a");
+ if (debug == NULL)
+ {
+! EMSG2(_("(NFA) COULD NOT OPEN %s !"), NFA_REGEXP_DEBUG_LOG);
+ return FALSE;
+ }
+ #endif
+--- 5593,5599 ----
+ debug = fopen(NFA_REGEXP_DEBUG_LOG, "a");
+ if (debug == NULL)
+ {
+! EMSG2("(NFA) COULD NOT OPEN %s!", NFA_REGEXP_DEBUG_LOG);
+ return FALSE;
+ }
+ #endif
+*** ../vim-8.1.0096/src/version.c 2018-06-22 21:30:27.355186506 +0200
+--- src/version.c 2018-06-22 21:39:55.343753790 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 97,
+ /**/
+
+--
+I AM THANKFUL...
+...for the taxes that I pay because it means that I am employed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0098 b/data/vim/patches/8.1.0098
new file mode 100644
index 000000000..f05b16452
--- /dev/null
+++ b/data/vim/patches/8.1.0098
@@ -0,0 +1,294 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0098
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0098
+Problem: Segfault when pattern with \z() is very slow.
+Solution: Check for NULL regprog. Add "nfa_fail" to test_override() to be
+ able to test this. Fix that 'searchhl' resets called_emsg.
+Files: src/syntax.c, runtime/doc/eval.txt, src/evalfunc.c, src/vim.h,
+ src/testdir/test_syntax.vim, src/globals.h, src/screen.c,
+ src/regexp.c, src/regexp_nfa.c
+
+
+*** ../vim-8.1.0097/src/syntax.c 2018-05-20 13:35:40.193163458 +0200
+--- src/syntax.c 2018-06-23 13:47:27.294238648 +0200
+***************
+*** 3327,3332 ****
+--- 3327,3338 ----
+ profile_start(&pt);
+ #endif
+
++ if (rmp->regprog == NULL)
++ // This can happen if a previous call to vim_regexec_multi() tried to
++ // use the NFA engine, which resulted in NFA_TOO_EXPENSIVE, and
++ // compiling the pattern with the other engine fails.
++ return FALSE;
++
+ rmp->rmm_maxcol = syn_buf->b_p_smc;
+ r = vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col,
+ #ifdef FEAT_RELTIME
+*** ../vim-8.1.0097/runtime/doc/eval.txt 2018-06-20 22:37:52.658911284 +0200
+--- runtime/doc/eval.txt 2018-06-23 13:27:43.863676347 +0200
+***************
+*** 8694,8699 ****
+--- 8694,8701 ----
+ redraw disable the redrawing() function
+ char_avail disable the char_avail() function
+ starting reset the "starting" variable, see below
++ nfa_fail makes the NFA regexp engine fail to force a
++ fallback to the old engine
+ ALL clear all overrides ({val} is not used)
+
+ "starting" is to be used when a test should behave like
+*** ../vim-8.1.0097/src/evalfunc.c 2018-06-20 22:37:52.654911306 +0200
+--- src/evalfunc.c 2018-06-23 13:29:32.603042364 +0200
+***************
+*** 13090,13099 ****
+--- 13090,13102 ----
+ save_starting = -1;
+ }
+ }
++ else if (STRCMP(name, (char_u *)"nfa_fail") == 0)
++ nfa_fail_for_testing = val;
+ else if (STRCMP(name, (char_u *)"ALL") == 0)
+ {
+ disable_char_avail_for_testing = FALSE;
+ disable_redraw_for_testing = FALSE;
++ nfa_fail_for_testing = FALSE;
+ if (save_starting >= 0)
+ {
+ starting = save_starting;
+*** ../vim-8.1.0097/src/vim.h 2018-04-30 15:12:48.000000000 +0200
+--- src/vim.h 2018-06-23 14:06:57.244449803 +0200
+***************
+*** 1013,1018 ****
+--- 1013,1019 ----
+ /* values for reg_do_extmatch */
+ # define REX_SET 1 /* to allow \z\(...\), */
+ # define REX_USE 2 /* to allow \z\1 et al. */
++ # define REX_ALL (REX_SET | REX_USE)
+ #endif
+
+ /* Return values for fullpathcmp() */
+*** ../vim-8.1.0097/src/testdir/test_syntax.vim 2018-02-24 19:33:19.000000000 +0100
+--- src/testdir/test_syntax.vim 2018-06-23 14:11:40.474945470 +0200
+***************
+*** 562,564 ****
+--- 562,576 ----
+ let $COLORFGBG = ''
+ call delete('Xtest.c')
+ endfun
++
++ " Using \z() in a region with NFA failing should not crash.
++ func Test_syn_wrong_z_one()
++ new
++ call setline(1, ['just some text', 'with foo and bar to match with'])
++ syn region FooBar start="foo\z(.*\)bar" end="\z1"
++ call test_override("nfa_fail", 1)
++ redraw!
++ redraw!
++ call test_override("ALL", 0)
++ bwipe!
++ endfunc
+*** ../vim-8.1.0097/src/globals.h 2018-06-19 17:49:20.296015375 +0200
+--- src/globals.h 2018-06-23 13:30:00.290880945 +0200
+***************
+*** 1634,1639 ****
+--- 1634,1640 ----
+ /* flags set by test_override() */
+ EXTERN int disable_char_avail_for_testing INIT(= 0);
+ EXTERN int disable_redraw_for_testing INIT(= 0);
++ EXTERN int nfa_fail_for_testing INIT(= 0);
+
+ EXTERN int in_free_unref_items INIT(= FALSE);
+ #endif
+*** ../vim-8.1.0097/src/screen.c 2018-06-17 16:23:29.341140642 +0200
+--- src/screen.c 2018-06-23 14:02:46.329754550 +0200
+***************
+*** 7868,7873 ****
+--- 7868,7874 ----
+ linenr_T l;
+ colnr_T matchcol;
+ long nmatched;
++ int save_called_emsg = called_emsg;
+
+ if (shl->lnum != 0)
+ {
+***************
+*** 7986,7991 ****
+--- 7987,7995 ----
+ break; /* useful match found */
+ }
+ }
++
++ // Restore called_emsg for assert_fails().
++ called_emsg = save_called_emsg;
+ }
+
+ /*
+*** ../vim-8.1.0097/src/regexp.c 2018-02-13 16:28:11.000000000 +0100
+--- src/regexp.c 2018-06-23 14:09:21.727692568 +0200
+***************
+*** 367,373 ****
+ static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)");
+ #ifdef FEAT_SYN_HL
+ static char_u e_z_not_allowed[] = N_("E66: \\z( not allowed here");
+! static char_u e_z1_not_allowed[] = N_("E67: \\z1 et al. not allowed here");
+ #endif
+ static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%[");
+ static char_u e_empty_sb[] = N_("E70: Empty %s%%[]");
+--- 367,373 ----
+ static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)");
+ #ifdef FEAT_SYN_HL
+ static char_u e_z_not_allowed[] = N_("E66: \\z( not allowed here");
+! static char_u e_z1_not_allowed[] = N_("E67: \\z1 - \\z9 not allowed here");
+ #endif
+ static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%[");
+ static char_u e_empty_sb[] = N_("E70: Empty %s%%[]");
+***************
+*** 2139,2145 ****
+ switch (c)
+ {
+ #ifdef FEAT_SYN_HL
+! case '(': if (reg_do_extmatch != REX_SET)
+ EMSG_RET_NULL(_(e_z_not_allowed));
+ if (one_exactly)
+ EMSG_ONE_RET_NULL;
+--- 2139,2145 ----
+ switch (c)
+ {
+ #ifdef FEAT_SYN_HL
+! case '(': if ((reg_do_extmatch & REX_SET) == 0)
+ EMSG_RET_NULL(_(e_z_not_allowed));
+ if (one_exactly)
+ EMSG_ONE_RET_NULL;
+***************
+*** 2158,2164 ****
+ case '6':
+ case '7':
+ case '8':
+! case '9': if (reg_do_extmatch != REX_USE)
+ EMSG_RET_NULL(_(e_z1_not_allowed));
+ ret = regnode(ZREF + c - '0');
+ re_has_z = REX_USE;
+--- 2158,2164 ----
+ case '6':
+ case '7':
+ case '8':
+! case '9': if ((reg_do_extmatch & REX_USE) == 0)
+ EMSG_RET_NULL(_(e_z1_not_allowed));
+ ret = regnode(ZREF + c - '0');
+ re_has_z = REX_USE;
+***************
+*** 8332,8339 ****
+
+ /*
+ * Match a regexp against multiple lines.
+! * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+! * Note: "rmp->regprog" may be freed and changed.
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return zero if there is no match. Return number of lines contained in the
+--- 8332,8339 ----
+
+ /*
+ * Match a regexp against multiple lines.
+! * "rmp->regprog" must be a compiled regexp as returned by vim_regcomp().
+! * Note: "rmp->regprog" may be freed and changed, even set to NULL.
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return zero if there is no match. Return number of lines contained in the
+***************
+*** 8376,8382 ****
+--- 8376,8387 ----
+ #ifdef FEAT_EVAL
+ report_re_switch(pat);
+ #endif
++ // checking for \z misuse was already done when compiling for NFA,
++ // allow all here
++ reg_do_extmatch = REX_ALL;
+ rmp->regprog = vim_regcomp(pat, re_flags);
++ reg_do_extmatch = 0;
++
+ if (rmp->regprog != NULL)
+ result = rmp->regprog->engine->regexec_multi(
+ rmp, win, buf, lnum, col, tm, timed_out);
+*** ../vim-8.1.0097/src/regexp_nfa.c 2018-06-22 21:42:26.743455036 +0200
+--- src/regexp_nfa.c 2018-06-23 14:08:50.071858765 +0200
+***************
+*** 1482,1488 ****
+ case '8':
+ case '9':
+ /* \z1...\z9 */
+! if (reg_do_extmatch != REX_USE)
+ EMSG_RET_FAIL(_(e_z1_not_allowed));
+ EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
+ /* No need to set nfa_has_backref, the sub-matches don't
+--- 1482,1488 ----
+ case '8':
+ case '9':
+ /* \z1...\z9 */
+! if ((reg_do_extmatch & REX_USE) == 0)
+ EMSG_RET_FAIL(_(e_z1_not_allowed));
+ EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
+ /* No need to set nfa_has_backref, the sub-matches don't
+***************
+*** 1491,1497 ****
+ break;
+ case '(':
+ /* \z( */
+! if (reg_do_extmatch != REX_SET)
+ EMSG_RET_FAIL(_(e_z_not_allowed));
+ if (nfa_reg(REG_ZPAREN) == FAIL)
+ return FAIL; /* cascaded error */
+--- 1491,1497 ----
+ break;
+ case '(':
+ /* \z( */
+! if ((reg_do_extmatch & REX_SET) == 0)
+ EMSG_RET_FAIL(_(e_z_not_allowed));
+ if (nfa_reg(REG_ZPAREN) == FAIL)
+ return FAIL; /* cascaded error */
+***************
+*** 5692,5698 ****
+ nextlist->n = 0; /* clear nextlist */
+ nextlist->has_pim = FALSE;
+ ++nfa_listid;
+! if (prog->re_engine == AUTOMATIC_ENGINE && nfa_listid >= NFA_MAX_STATES)
+ {
+ /* too many states, retry with old engine */
+ nfa_match = NFA_TOO_EXPENSIVE;
+--- 5692,5699 ----
+ nextlist->n = 0; /* clear nextlist */
+ nextlist->has_pim = FALSE;
+ ++nfa_listid;
+! if (prog->re_engine == AUTOMATIC_ENGINE
+! && (nfa_listid >= NFA_MAX_STATES || nfa_fail_for_testing))
+ {
+ /* too many states, retry with old engine */
+ nfa_match = NFA_TOO_EXPENSIVE;
+*** ../vim-8.1.0097/src/version.c 2018-06-22 21:42:26.747455046 +0200
+--- src/version.c 2018-06-23 13:28:43.939326081 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 98,
+ /**/
+
+--
+I AM THANKFUL...
+...for all the complaining I hear about the government
+because it means we have freedom of speech.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0099 b/data/vim/patches/8.1.0099
new file mode 100644
index 000000000..581defc93
--- /dev/null
+++ b/data/vim/patches/8.1.0099
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0099
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0099
+Problem: Exclamation mark in error message not needed.
+Solution: Remove the exclamation mark.
+Files: src/regexp_nfa.c
+
+
+*** ../vim-8.1.0098/src/regexp_nfa.c 2018-06-23 14:21:38.471484909 +0200
+--- src/regexp_nfa.c 2018-06-23 14:30:17.432612749 +0200
+***************
+*** 2232,2238 ****
+
+ if (re_multi_type(peekchr()) != NOT_MULTI)
+ /* Can't have a multi follow a multi. */
+! EMSG_RET_FAIL(_("E871: (NFA regexp) Can't have a multi follow a multi !"));
+
+ return OK;
+ }
+--- 2232,2238 ----
+
+ if (re_multi_type(peekchr()) != NOT_MULTI)
+ /* Can't have a multi follow a multi. */
+! EMSG_RET_FAIL(_("E871: (NFA regexp) Can't have a multi follow a multi"));
+
+ return OK;
+ }
+***************
+*** 7029,7035 ****
+ fclose(f);
+ }
+ else
+! EMSG(_("Could not open temporary log file for writing "));
+ #endif
+
+ clear_sub(&subs.norm);
+--- 7029,7035 ----
+ fclose(f);
+ }
+ else
+! EMSG("Could not open temporary log file for writing");
+ #endif
+
+ clear_sub(&subs.norm);
+*** ../vim-8.1.0098/src/version.c 2018-06-23 14:21:38.471484909 +0200
+--- src/version.c 2018-06-23 14:34:08.591348883 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 99,
+ /**/
+
+--
+I AM THANKFUL...
+...for the piles of laundry and ironing because it means I
+have plenty of clothes to wear.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0100 b/data/vim/patches/8.1.0100
new file mode 100644
index 000000000..004052329
--- /dev/null
+++ b/data/vim/patches/8.1.0100
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0100
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0100
+Problem: Terminal debugger: error when setting a watch point.
+Solution: Don't try defining a sign for a watch point.
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0099/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-21 20:31:10.627749367 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-23 13:56:49.559572378 +0200
+***************
+*** 863,868 ****
+--- 863,873 ----
+ " Handle setting a breakpoint
+ " Will update the sign that shows the breakpoint
+ func s:HandleNewBreakpoint(msg)
++ if a:msg !~ 'fullname='
++ " a watch does not have a file name
++ return
++ endif
++
+ let nr = substitute(a:msg, '.*number="\([0-9]\)*\".*', '\1', '') + 0
+ if nr == 0
+ return
+*** ../vim-8.1.0099/src/version.c 2018-06-23 14:34:24.551261826 +0200
+--- src/version.c 2018-06-23 14:35:29.442908084 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 100,
+ /**/
+
+--
+From "know your smileys":
+ [:-) Frankenstein's monster
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0101 b/data/vim/patches/8.1.0101
new file mode 100644
index 000000000..046cb6f09
--- /dev/null
+++ b/data/vim/patches/8.1.0101
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0101
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0101
+Problem: No test for getcmdwintype().
+Solution: Add a test. (Dominique Pelle, closes #3068)
+Files: src/testdir/test_cmdline.vim
+
+
+*** ../vim-8.1.0100/src/testdir/test_cmdline.vim 2018-06-19 19:09:04.870914841 +0200
+--- src/testdir/test_cmdline.vim 2018-06-23 14:53:32.194885652 +0200
+***************
+*** 511,516 ****
+--- 511,532 ----
+ cunmap <F6>
+ endfunc
+
++ func Test_getcmdwintype()
++ call feedkeys("q/:let a = getcmdwintype()\<CR>:q\<CR>", 'x!')
++ call assert_equal('/', a)
++
++ call feedkeys("q?:let a = getcmdwintype()\<CR>:q\<CR>", 'x!')
++ call assert_equal('?', a)
++
++ call feedkeys("q::let a = getcmdwintype()\<CR>:q\<CR>", 'x!')
++ call assert_equal(':', a)
++
++ call feedkeys(":\<C-F>:let a = getcmdwintype()\<CR>:q\<CR>", 'x!')
++ call assert_equal(':', a)
++
++ call assert_equal('', getcmdwintype())
++ endfunc
++
+ func Test_verbosefile()
+ set verbosefile=Xlog
+ echomsg 'foo'
+*** ../vim-8.1.0100/src/version.c 2018-06-23 14:36:13.778666585 +0200
+--- src/version.c 2018-06-23 14:54:30.426718329 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 101,
+ /**/
+
+--
+From "know your smileys":
+ :-E Has major dental problems
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0102 b/data/vim/patches/8.1.0102
new file mode 100644
index 000000000..c924c1a58
--- /dev/null
+++ b/data/vim/patches/8.1.0102
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0102
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0102
+Problem: Cannot build without syntax highlighting.
+Solution: Add #ifdef around using reg_do_extmatch.
+Files: src/regexp.c
+
+
+*** ../vim-8.1.0101/src/regexp.c 2018-06-23 14:21:38.471484909 +0200
+--- src/regexp.c 2018-06-23 15:07:31.635796811 +0200
+***************
+*** 8376,8386 ****
+--- 8376,8390 ----
+ #ifdef FEAT_EVAL
+ report_re_switch(pat);
+ #endif
++ #ifdef FEAT_SYN_HL
+ // checking for \z misuse was already done when compiling for NFA,
+ // allow all here
+ reg_do_extmatch = REX_ALL;
++ #endif
+ rmp->regprog = vim_regcomp(pat, re_flags);
++ #ifdef FEAT_SYN_HL
+ reg_do_extmatch = 0;
++ #endif
+
+ if (rmp->regprog != NULL)
+ result = rmp->regprog->engine->regexec_multi(
+*** ../vim-8.1.0101/src/version.c 2018-06-23 14:55:00.146628803 +0200
+--- src/version.c 2018-06-23 15:08:14.019617869 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 102,
+ /**/
+
+--
+From "know your smileys":
+ :-| :-| Deja' vu!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0103 b/data/vim/patches/8.1.0103
new file mode 100644
index 000000000..502f643d9
--- /dev/null
+++ b/data/vim/patches/8.1.0103
@@ -0,0 +1,195 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0103
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0103
+Problem: Long version string cannot be translated.
+Solution: Build the string in init_longVersion().
+Files: src/globals.h, src/version.h, src/version.c,
+ src/proto/version.pro, src/main.c
+
+
+*** ../vim-8.1.0102/src/globals.h 2018-06-23 14:21:38.467484932 +0200
+--- src/globals.h 2018-06-23 15:43:26.522795007 +0200
+***************
+*** 1131,1142 ****
+ EXTERN char breakat_flags[256]; /* which characters are in 'breakat' */
+ #endif
+
+! /* these are in version.c */
+ extern char *Version;
+ #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC)
+ extern char longVersion[];
+ #else
+! extern char *longVersion;
+ #endif
+
+ /*
+--- 1131,1142 ----
+ EXTERN char breakat_flags[256]; /* which characters are in 'breakat' */
+ #endif
+
+! /* These are in version.c, call init_longVersion() before use. */
+ extern char *Version;
+ #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC)
+ extern char longVersion[];
+ #else
+! EXTERN char *longVersion;
+ #endif
+
+ /*
+*** ../vim-8.1.0102/src/version.h 2018-05-17 13:33:02.000000000 +0200
+--- src/version.h 2018-06-23 15:35:20.481563682 +0200
+***************
+*** 36,40 ****
+ #define VIM_VERSION_NODOT "vim81"
+ #define VIM_VERSION_SHORT "8.1"
+ #define VIM_VERSION_MEDIUM "8.1"
+! #define VIM_VERSION_LONG "VIM - Vi IMproved 8.1 (2018 May 18)"
+! #define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 8.1 (2018 May 18, compiled "
+--- 36,42 ----
+ #define VIM_VERSION_NODOT "vim81"
+ #define VIM_VERSION_SHORT "8.1"
+ #define VIM_VERSION_MEDIUM "8.1"
+! #define VIM_VERSION_LONG "VIM - Vi IMproved 8.1 (2018 May 18)"
+! #define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 8.1 (2018 May 18, compiled "
+! #define VIM_VERSION_LONG_ONLY "VIM - Vi IMproved 8.1"
+! #define VIM_VERSION_DATE_ONLY "2018 May 18"
+*** ../vim-8.1.0102/src/version.c 2018-06-23 15:09:02.351412460 +0200
+--- src/version.c 2018-06-23 16:11:00.128696631 +0200
+***************
+*** 37,43 ****
+ + sizeof(__TIME__) + 3];
+
+ void
+! make_version(void)
+ {
+ /*
+ * Construct the long version string. Necessary because
+--- 37,43 ----
+ + sizeof(__TIME__) + 3];
+
+ void
+! init_longVersion(void)
+ {
+ /*
+ * Construct the long version string. Necessary because
+***************
+*** 49,56 ****
+ strcat(longVersion, __TIME__);
+ strcat(longVersion, ")");
+ }
+ # else
+! char *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
+ # endif
+ #else
+ char *longVersion = VIM_VERSION_LONG;
+--- 49,73 ----
+ strcat(longVersion, __TIME__);
+ strcat(longVersion, ")");
+ }
++
+ # else
+! void
+! init_longVersion(void)
+! {
+! char *date_time = __DATE__ " " __TIME__;
+! char *msg = _("%s (%s, compiled %s)");
+! size_t len = strlen(msg)
+! + strlen(VIM_VERSION_LONG_ONLY)
+! + strlen(VIM_VERSION_DATE_ONLY)
+! + strlen(date_time);
+!
+! longVersion = (char *)alloc(len);
+! if (longVersion == NULL)
+! longVersion = VIM_VERSION_LONG;
+! else
+! vim_snprintf(longVersion, len, msg,
+! VIM_VERSION_LONG_ONLY, VIM_VERSION_DATE_ONLY, date_time);
+! }
+ # endif
+ #else
+ char *longVersion = VIM_VERSION_LONG;
+***************
+*** 1148,1153 ****
+--- 1167,1173 ----
+ * When adding features here, don't forget to update the list of
+ * internal variables in eval.c!
+ */
++ init_longVersion();
+ MSG(longVersion);
+ #ifdef WIN3264
+ # ifdef FEAT_GUI_W32
+*** ../vim-8.1.0102/src/proto/version.pro 2018-05-17 13:52:55.000000000 +0200
+--- src/proto/version.pro 2018-06-23 15:40:19.395834338 +0200
+***************
+*** 1,5 ****
+ /* version.c */
+! void make_version(void);
+ int highest_patch(void);
+ int has_patch(int n);
+ void ex_version(exarg_T *eap);
+--- 1,5 ----
+ /* version.c */
+! void init_longVersion(void);
+ int highest_patch(void);
+ int has_patch(int n);
+ void ex_version(exarg_T *eap);
+*** ../vim-8.1.0102/src/main.c 2018-06-21 21:38:29.599534681 +0200
+--- src/main.c 2018-06-23 15:31:50.962855677 +0200
+***************
+*** 940,949 ****
+ /* Init the table of Normal mode commands. */
+ init_normal_cmds();
+
+- #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC)
+- make_version(); /* Construct the long version string. */
+- #endif
+-
+ /*
+ * Allocate space for the generic buffers (needed for set_init_1() and
+ * EMSG2()).
+--- 940,945 ----
+***************
+*** 3215,3220 ****
+--- 3211,3217 ----
+ reset_signals(); /* kill us with CTRL-C here, if you like */
+ #endif
+
++ init_longVersion();
+ mch_errmsg(longVersion);
+ mch_errmsg("\n");
+ mch_errmsg(_(main_errors[n]));
+***************
+*** 3268,3273 ****
+--- 3265,3271 ----
+ reset_signals(); /* kill us with CTRL-C here, if you like */
+ #endif
+
++ init_longVersion();
+ mch_msg(longVersion);
+ mch_msg(_("\n\nUsage:"));
+ for (i = 0; ; ++i)
+*** ../vim-8.1.0102/src/version.c 2018-06-23 15:09:02.351412460 +0200
+--- src/version.c 2018-06-23 16:11:00.128696631 +0200
+***************
+*** 763,764 ****
+--- 780,783 ----
+ { /* Add new patch number below this line */
++ /**/
++ 103,
+ /**/
+
+--
+From "know your smileys":
+ |-( Contact lenses, but has lost them
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0104 b/data/vim/patches/8.1.0104
new file mode 100644
index 000000000..ae5ab594b
--- /dev/null
+++ b/data/vim/patches/8.1.0104
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0104
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0104
+Problem: Can't build without the +eval feature.
+Solution: Add #ifdef.
+Files: src/regexp_nfa.c
+
+
+*** ../vim-8.1.0103/src/regexp_nfa.c 2018-06-23 14:34:24.551261826 +0200
+--- src/regexp_nfa.c 2018-06-23 17:13:47.102214648 +0200
+***************
+*** 5693,5699 ****
+ nextlist->has_pim = FALSE;
+ ++nfa_listid;
+ if (prog->re_engine == AUTOMATIC_ENGINE
+! && (nfa_listid >= NFA_MAX_STATES || nfa_fail_for_testing))
+ {
+ /* too many states, retry with old engine */
+ nfa_match = NFA_TOO_EXPENSIVE;
+--- 5693,5703 ----
+ nextlist->has_pim = FALSE;
+ ++nfa_listid;
+ if (prog->re_engine == AUTOMATIC_ENGINE
+! && (nfa_listid >= NFA_MAX_STATES
+! # ifdef FEAT_EVAL
+! || nfa_fail_for_testing
+! # endif
+! ))
+ {
+ /* too many states, retry with old engine */
+ nfa_match = NFA_TOO_EXPENSIVE;
+*** ../vim-8.1.0103/src/version.c 2018-06-23 16:12:15.784258242 +0200
+--- src/version.c 2018-06-23 17:14:18.414022555 +0200
+***************
+*** 780,781 ****
+--- 780,783 ----
+ { /* Add new patch number below this line */
++ /**/
++ 104,
+ /**/
+
+--
+From "know your smileys":
+ <|-) Chinese
+ <|-( Chinese and doesn't like these kind of jokes
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0105 b/data/vim/patches/8.1.0105
new file mode 100644
index 000000000..fe689753b
--- /dev/null
+++ b/data/vim/patches/8.1.0105
@@ -0,0 +1,3397 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0105
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0105
+Problem: All tab stops are the same.
+Solution: Add the variable tabstop feature. (Christian Brabandt,
+ closes #2711)
+Files: runtime/doc/change.txt, runtime/doc/options.txt,
+ runtime/doc/various.txt, runtime/optwin.vim, src/beval.c,
+ src/beval.h, src/buffer.c, src/charset.c, src/edit.c,
+ src/evalfunc.c, src/ex_cmds.c, src/feature.h, src/gui_beval.c,
+ src/gui_w32.c, src/hardcopy.c, src/message.c, src/misc1.c,
+ src/ops.c, src/option.c, src/option.h, src/proto/misc1.pro,
+ src/proto/option.pro, src/screen.c, src/structs.h,
+ src/testdir/Make_all.mak, src/testdir/gen_opt_test.vim,
+ src/testdir/test_breakindent.vim, src/testdir/test_vartabs.vim,
+ src/version.c, src/workshop.c, src/Makefile
+
+
+*** ../vim-8.1.0104/runtime/doc/change.txt 2018-05-17 13:40:51.000000000 +0200
+--- runtime/doc/change.txt 2018-06-23 17:41:10.096366118 +0200
+***************
+*** 987,992 ****
+--- 987,997 ----
+ this (that's a good habit anyway).
+ `:retab!` may also change a sequence of spaces by
+ <Tab> characters, which can mess up a printf().
++ If the |+vartabs| feature is enabled then a list of
++ tab widths separated by commas may be used in place of
++ a single tabstop. Each value in the list represents
++ the width of one tabstop, except the final value which
++ applies to all following tabstops.
+ {not in Vi}
+
+ *retab-example*
+*** ../vim-8.1.0104/runtime/doc/options.txt 2018-06-03 14:42:17.832505129 +0200
+--- runtime/doc/options.txt 2018-06-23 17:41:10.100366093 +0200
+***************
+*** 7172,7177 ****
+--- 7172,7181 ----
+ set.
+ NOTE: This option is set to 0 when 'compatible' is set.
+
++ If Vim is compiled with the |+vartabs| feature then the value of
++ 'softtabstop' will be ignored if |'varsofttabstop'| is set to
++ anything other than an empty string.
++
+ *'spell'* *'nospell'*
+ 'spell' boolean (default off)
+ local to window
+***************
+*** 7723,7728 ****
+--- 7727,7736 ----
+ though. Otherwise aligned comments will be wrong when 'tabstop' is
+ changed.
+
++ If Vim is compiled with the |+vartabs| feature then the value of
++ 'tabstop' will be ignored if |'vartabstop'| is set to anything other
++ than an empty string.
++
+ *'tagbsearch'* *'tbs'* *'notagbsearch'* *'notbs'*
+ 'tagbsearch' 'tbs' boolean (default on)
+ global
+***************
+*** 8468,8473 ****
+--- 8476,8519 ----
+ written to disk (see |crash-recovery|). Also used for the
+ |CursorHold| autocommand event.
+
++ *'varsofttabstop'* *'vsts'*
++ 'varsofttabstop' 'vsts' string (default "")
++ local to buffer
++ {only available when compiled with the |+vartabs|
++ feature}
++ {not in Vi}
++ A list of the number of spaces that a <Tab> counts for while editing,
++ such as inserting a <Tab> or using <BS>. It "feels" like variable-
++ width <Tab>s are being inserted, while in fact a mixture of spaces
++ and <Tab>s is used. Tab widths are separated with commas, with the
++ final value applying to all subsequent tabs.
++
++ For example, when editing assembly language files where statements
++ start in the 8th column and comments in the 40th, it may be useful
++ to use the following: >
++ :set varsofttabstop=8,32,8
++ < This will set soft tabstops at the 8th and 40th columns, and at every
++ 8th column thereafter.
++
++ Note that the value of |'softtabstop'| will be ignored while
++ 'varsofttabstop' is set.
++
++ *'vartabstop'* *'vts'*
++ 'vartabstop' 'vts' string (default "")
++ local to buffer
++ {only available when compiled with the |+vartabs|
++ feature}
++ {not in Vi}
++ A list of the number of spaces that a <Tab> in the file counts for,
++ separated by commas. Each value corresponds to one tab, with the
++ final value applying to all subsequent tabs. For example: >
++ :set vartabstop=4,20,10,8
++ < This will make the first tab 4 spaces wide, the second 20 spaces,
++ the third 10 spaces, and all following tabs 8 spaces.
++
++ Note that the value of |'tabstop'| will be ignored while 'vartabstop'
++ is set.
++
+ *'verbose'* *'vbs'*
+ 'verbose' 'vbs' number (default 0)
+ global
+*** ../vim-8.1.0104/runtime/doc/various.txt 2018-05-17 13:42:04.000000000 +0200
+--- runtime/doc/various.txt 2018-06-23 17:41:10.100366093 +0200
+***************
+*** 453,458 ****
+--- 453,459 ----
+ N *+title* Setting the window 'title' and 'icon'
+ N *+toolbar* |gui-toolbar|
+ N *+user_commands* User-defined commands. |user-commands|
++ B *+vartabs* Variable-width tabstops. |'vartabstop'|
+ N *+viminfo* |'viminfo'|
+ *+vertsplit* Vertically split windows |:vsplit|; Always enabled
+ since 8.0.1118.
+*** ../vim-8.1.0104/runtime/optwin.vim 2018-05-15 21:39:18.000000000 +0200
+--- runtime/optwin.vim 2018-06-23 17:41:10.100366093 +0200
+***************
+*** 856,861 ****
+--- 856,869 ----
+ call append("$", "shiftwidth\tnumber of spaces used for each step of (auto)indent")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("sw")
++ if has("vartabs")
++ call append("$", "vartabstop\tlist of number of spaces a tab counts for")
++ call append("$", "\t(local to buffer)")
++ call <SID>OptionL("vts")
++ call append("$", "varsofttabstop\tlist of number of spaces a soft tabsstop counts for")
++ call append("$", "\t(local to buffer)")
++ call <SID>OptionL("vsts")
++ endif
+ call append("$", "smarttab\ta <Tab> in an indent inserts 'shiftwidth' spaces")
+ call <SID>BinOptionG("sta", &sta)
+ call append("$", "softtabstop\tif non-zero, number of spaces to insert for a <Tab>")
+*** ../vim-8.1.0104/src/beval.c 2018-02-06 22:46:29.000000000 +0100
+--- src/beval.c 2018-06-23 18:34:30.918950814 +0200
+***************
+*** 124,129 ****
+--- 124,134 ----
+ *lnump = lnum;
+ *textp = lbuf;
+ *colp = col;
++ #ifdef FEAT_VARTABS
++ if (beval->vts)
++ vim_free(beval->vts);
++ beval->vts = tabstop_copy(wp->w_buffer->b_p_vts_array);
++ #endif
+ beval->ts = wp->w_buffer->b_p_ts;
+ return OK;
+ }
+*** ../vim-8.1.0104/src/beval.h 2017-11-19 20:22:17.000000000 +0100
+--- src/beval.h 2018-06-23 18:42:21.444354814 +0200
+***************
+*** 71,77 ****
+ void *clientData; /* For callback */
+ #endif
+
+! int ts; /* tabstop setting for this buffer */
+ char_u *msg;
+ } BalloonEval;
+
+--- 71,80 ----
+ void *clientData; /* For callback */
+ #endif
+
+! int ts; // tabstop setting for this buffer
+! #ifdef FEAT_VARTABS
+! int *vts; // vartabstop setting for this buffer
+! #endif
+ char_u *msg;
+ } BalloonEval;
+
+*** ../vim-8.1.0104/src/buffer.c 2018-06-16 22:58:11.791025515 +0200
+--- src/buffer.c 2018-06-23 18:34:40.502898381 +0200
+***************
+*** 271,277 ****
+ /*
+ * Set/reset the Changed flag first, autocmds may change the buffer.
+ * Apply the automatic commands, before processing the modelines.
+! * So the modelines have priority over auto commands.
+ */
+ /* When reading stdin, the buffer contents always needs writing, so set
+ * the changed flag. Unless in readonly mode: "ls | gview -".
+--- 271,277 ----
+ /*
+ * Set/reset the Changed flag first, autocmds may change the buffer.
+ * Apply the automatic commands, before processing the modelines.
+! * So the modelines have priority over autocommands.
+ */
+ /* When reading stdin, the buffer contents always needs writing, so set
+ * the changed flag. Unless in readonly mode: "ls | gview -".
+***************
+*** 2159,2164 ****
+--- 2159,2177 ----
+ clear_string_option(&buf->b_p_fo);
+ clear_string_option(&buf->b_p_flp);
+ clear_string_option(&buf->b_p_isk);
++ #ifdef FEAT_VARTABS
++ clear_string_option(&buf->b_p_vsts);
++ if (buf->b_p_vsts_nopaste)
++ vim_free(buf->b_p_vsts_nopaste);
++ buf->b_p_vsts_nopaste = NULL;
++ if (buf->b_p_vsts_array)
++ vim_free(buf->b_p_vsts_array);
++ buf->b_p_vsts_array = NULL;
++ clear_string_option(&buf->b_p_vts);
++ if (buf->b_p_vts_array)
++ vim_free(buf->b_p_vts_array);
++ buf->b_p_vts_array = NULL;
++ #endif
+ #ifdef FEAT_KEYMAP
+ clear_string_option(&buf->b_p_keymap);
+ keymap_clear(&buf->b_kmap_ga);
+***************
+*** 5190,5196 ****
+ win_close(wp, FALSE);
+ wpnext = firstwin; /* just in case an autocommand does
+ something strange with windows */
+! tpnext = first_tabpage; /* start all over...*/
+ open_wins = 0;
+ }
+ else
+--- 5203,5209 ----
+ win_close(wp, FALSE);
+ wpnext = firstwin; /* just in case an autocommand does
+ something strange with windows */
+! tpnext = first_tabpage; /* start all over... */
+ open_wins = 0;
+ }
+ else
+***************
+*** 5650,5657 ****
+ }
+
+ /*
+! * Return TRUE if "buf" is a "nofile", "acwrite" or "terminal" buffer.
+! * This means the buffer name is not a file name.
+ */
+ int
+ bt_nofile(buf_T *buf)
+--- 5663,5670 ----
+ }
+
+ /*
+! * Return TRUE if "buf" is a "nofile", "acwrite", "terminal" or "prompt"
+! * buffer. This means the buffer name is not a file name.
+ */
+ int
+ bt_nofile(buf_T *buf)
+***************
+*** 5663,5669 ****
+ }
+
+ /*
+! * Return TRUE if "buf" is a "nowrite", "nofile" or "terminal" buffer.
+ */
+ int
+ bt_dontwrite(buf_T *buf)
+--- 5676,5683 ----
+ }
+
+ /*
+! * Return TRUE if "buf" is a "nowrite", "nofile", "terminal" or "prompt"
+! * buffer.
+ */
+ int
+ bt_dontwrite(buf_T *buf)
+*** ../vim-8.1.0104/src/charset.c 2018-06-12 17:25:32.054404315 +0200
+--- src/charset.c 2018-06-23 18:42:59.804141756 +0200
+***************
+*** 812,818 ****
+ * Also see getvcol() below.
+ */
+
+! #define RET_WIN_BUF_CHARTABSIZE(wp, buf, p, col) \
+ if (*(p) == TAB && (!(wp)->w_p_list || lcs_tab1)) \
+ { \
+ int ts; \
+--- 812,827 ----
+ * Also see getvcol() below.
+ */
+
+! #ifdef FEAT_VARTABS
+! # define RET_WIN_BUF_CHARTABSIZE(wp, buf, p, col) \
+! if (*(p) == TAB && (!(wp)->w_p_list || lcs_tab1)) \
+! { \
+! return tabstop_padding(col, (buf)->b_p_ts, (buf)->b_p_vts_array); \
+! } \
+! else \
+! return ptr2cells(p);
+! #else
+! # define RET_WIN_BUF_CHARTABSIZE(wp, buf, p, col) \
+ if (*(p) == TAB && (!(wp)->w_p_list || lcs_tab1)) \
+ { \
+ int ts; \
+***************
+*** 821,826 ****
+--- 830,836 ----
+ } \
+ else \
+ return ptr2cells(p);
++ #endif
+
+ int
+ chartabsize(char_u *p, colnr_T col)
+***************
+*** 1221,1228 ****
+--- 1231,1243 ----
+
+ if (*s == TAB && (!wp->w_p_list || lcs_tab1))
+ {
++ # ifdef FEAT_VARTABS
++ return tabstop_padding(col, wp->w_buffer->b_p_ts,
++ wp->w_buffer->b_p_vts_array);
++ # else
+ n = wp->w_buffer->b_p_ts;
+ return (int)(n - (col % n));
++ # endif
+ }
+ n = ptr2cells(s);
+ /* Add one cell for a double-width character in the last column of the
+***************
+*** 1282,1287 ****
+--- 1297,1305 ----
+ char_u *line; /* start of the line */
+ int incr;
+ int head;
++ #ifdef FEAT_VARTABS
++ int *vts = wp->w_buffer->b_p_vts_array;
++ #endif
+ int ts = wp->w_buffer->b_p_ts;
+ int c;
+
+***************
+*** 1332,1338 ****
+--- 1350,1360 ----
+ }
+ /* A tab gets expanded, depending on the current column */
+ if (c == TAB)
++ #ifdef FEAT_VARTABS
++ incr = tabstop_padding(vcol, ts, vts);
++ #else
+ incr = ts - (vcol % ts);
++ #endif
+ else
+ {
+ #ifdef FEAT_MBYTE
+*** ../vim-8.1.0104/src/edit.c 2018-06-17 19:36:30.215317108 +0200
+--- src/edit.c 2018-06-23 18:56:42.835538285 +0200
+***************
+*** 742,748 ****
+ mincol = curwin->w_wcol;
+ validate_cursor_col();
+
+! if ((int)curwin->w_wcol < mincol - curbuf->b_p_ts
+ && curwin->w_wrow == W_WINROW(curwin)
+ + curwin->w_height - 1 - p_so
+ && (curwin->w_cursor.lnum != curwin->w_topline
+--- 742,755 ----
+ mincol = curwin->w_wcol;
+ validate_cursor_col();
+
+! if (
+! #ifdef FEAT_VARTABS
+! (int)curwin->w_wcol < mincol - tabstop_at(
+! get_nolist_virtcol(), curbuf->b_p_ts,
+! curbuf->b_p_vts_array)
+! #else
+! (int)curwin->w_wcol < mincol - curbuf->b_p_ts
+! #endif
+ && curwin->w_wrow == W_WINROW(curwin)
+ + curwin->w_height - 1 - p_so
+ && (curwin->w_cursor.lnum != curwin->w_topline
+***************
+*** 9329,9351 ****
+ */
+ if ( mode == BACKSPACE_CHAR
+ && ((p_sta && in_indent)
+! || (get_sts_value() != 0
+ && curwin->w_cursor.col > 0
+ && (*(ml_get_cursor() - 1) == TAB
+ || (*(ml_get_cursor() - 1) == ' '
+ && (!*inserted_space_p
+ || arrow_used))))))
+ {
+ int ts;
+ colnr_T vcol;
+ colnr_T want_vcol;
+ colnr_T start_vcol;
+
+ *inserted_space_p = FALSE;
+ if (p_sta && in_indent)
+ ts = (int)get_sw_value(curbuf);
+ else
+ ts = (int)get_sts_value();
+ /* Compute the virtual column where we want to be. Since
+ * 'showbreak' may get in the way, need to get the last column of
+ * the previous character. */
+--- 9336,9366 ----
+ */
+ if ( mode == BACKSPACE_CHAR
+ && ((p_sta && in_indent)
+! || ((get_sts_value() != 0
+! #ifdef FEAT_VARTABS
+! || tabstop_count(curbuf->b_p_vsts_array)
+! #endif
+! )
+ && curwin->w_cursor.col > 0
+ && (*(ml_get_cursor() - 1) == TAB
+ || (*(ml_get_cursor() - 1) == ' '
+ && (!*inserted_space_p
+ || arrow_used))))))
+ {
++ #ifndef FEAT_VARTABS
+ int ts;
++ #endif
+ colnr_T vcol;
+ colnr_T want_vcol;
+ colnr_T start_vcol;
+
+ *inserted_space_p = FALSE;
++ #ifndef FEAT_VARTABS
+ if (p_sta && in_indent)
+ ts = (int)get_sw_value(curbuf);
+ else
+ ts = (int)get_sts_value();
++ #endif
+ /* Compute the virtual column where we want to be. Since
+ * 'showbreak' may get in the way, need to get the last column of
+ * the previous character. */
+***************
+*** 9354,9360 ****
+--- 9369,9383 ----
+ dec_cursor();
+ getvcol(curwin, &curwin->w_cursor, NULL, NULL, &want_vcol);
+ inc_cursor();
++ #ifdef FEAT_VARTABS
++ if (p_sta && in_indent)
++ want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw;
++ else
++ want_vcol = tabstop_start(want_vcol, curbuf->b_p_sts,
++ curbuf->b_p_vsts_array);
++ #else
+ want_vcol = (want_vcol / ts) * ts;
++ #endif
+
+ /* delete characters until we are at or before want_vcol */
+ while (vcol > want_vcol
+***************
+*** 10144,10153 ****
+ #endif
+
+ /*
+! * When nothing special, insert TAB like a normal character
+ */
+ if (!curbuf->b_p_et
+ && !(p_sta && ind && curbuf->b_p_ts != get_sw_value(curbuf))
+ && get_sts_value() == 0)
+ return TRUE;
+
+--- 10167,10188 ----
+ #endif
+
+ /*
+! * When nothing special, insert TAB like a normal character.
+ */
+ if (!curbuf->b_p_et
++ #ifdef FEAT_VARTABS
++ && !(p_sta && ind
++ /* These five lines mean 'tabstop' != 'shiftwidth' */
++ && ((tabstop_count(curbuf->b_p_vts_array) > 1)
++ || (tabstop_count(curbuf->b_p_vts_array) == 1
++ && tabstop_first(curbuf->b_p_vts_array)
++ != get_sw_value(curbuf))
++ || (tabstop_count(curbuf->b_p_vts_array) == 0
++ && curbuf->b_p_ts != get_sw_value(curbuf))))
++ && tabstop_count(curbuf->b_p_vsts_array) == 0
++ #else
+ && !(p_sta && ind && curbuf->b_p_ts != get_sw_value(curbuf))
++ #endif
+ && get_sts_value() == 0)
+ return TRUE;
+
+***************
+*** 10162,10167 ****
+--- 10197,10216 ----
+ #endif
+ AppendToRedobuff((char_u *)"\t");
+
++ #ifdef FEAT_VARTABS
++ if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */
++ {
++ temp = (int)curbuf->b_p_sw;
++ temp -= get_nolist_virtcol() % temp;
++ }
++ else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts > 0)
++ /* use 'softtabstop' when set */
++ temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_sts,
++ curbuf->b_p_vsts_array);
++ else /* otherwise use 'tabstop' */
++ temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ #else
+ if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */
+ temp = (int)get_sw_value(curbuf);
+ else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */
+***************
+*** 10169,10174 ****
+--- 10218,10224 ----
+ else /* otherwise use 'tabstop' */
+ temp = (int)curbuf->b_p_ts;
+ temp -= get_nolist_virtcol() % temp;
++ #endif
+
+ /*
+ * Insert the first space with ins_char(). It will delete one char in
+***************
+*** 10193,10199 ****
+--- 10243,10255 ----
+ /*
+ * When 'expandtab' not set: Replace spaces by TABs where possible.
+ */
++ #ifdef FEAT_VARTABS
++ if (!curbuf->b_p_et && (tabstop_count(curbuf->b_p_vsts_array) > 0
++ || get_sts_value() > 0
++ || (p_sta && ind)))
++ #else
+ if (!curbuf->b_p_et && (get_sts_value() || (p_sta && ind)))
++ #endif
+ {
+ char_u *ptr;
+ #ifdef FEAT_VREPLACE
+*** ../vim-8.1.0104/src/evalfunc.c 2018-06-23 14:21:38.467484932 +0200
+--- src/evalfunc.c 2018-06-23 17:41:10.108366044 +0200
+***************
+*** 6436,6441 ****
+--- 6436,6444 ----
+ "user-commands", /* was accidentally included in 5.4 */
+ "user_commands",
+ #endif
++ #ifdef FEAT_VARTABS
++ "vartabs",
++ #endif
+ #ifdef FEAT_VIMINFO
+ "viminfo",
+ #endif
+*** ../vim-8.1.0104/src/ex_cmds.c 2018-06-04 20:34:07.607373577 +0200
+--- src/ex_cmds.c 2018-06-23 18:49:09.570076283 +0200
+***************
+*** 673,684 ****
+ long vcol;
+ long start_col = 0; /* For start of white-space string */
+ long start_vcol = 0; /* For start of white-space string */
+- int temp;
+ long old_len;
+ char_u *ptr;
+ char_u *new_line = (char_u *)1; /* init to non-NULL */
+ int did_undo; /* called u_save for current line */
+ int new_ts;
+ int save_list;
+ linenr_T first_line = 0; /* first changed line */
+ linenr_T last_line = 0; /* last changed line */
+--- 673,689 ----
+ long vcol;
+ long start_col = 0; /* For start of white-space string */
+ long start_vcol = 0; /* For start of white-space string */
+ long old_len;
+ char_u *ptr;
+ char_u *new_line = (char_u *)1; /* init to non-NULL */
+ int did_undo; /* called u_save for current line */
++ #ifdef FEAT_VARTABS
++ int *new_ts = 0;
++ char_u *new_ts_str; /* string value of tab argument */
++ #else
++ int temp;
+ int new_ts;
++ #endif
+ int save_list;
+ linenr_T first_line = 0; /* first changed line */
+ linenr_T last_line = 0; /* last changed line */
+***************
+*** 686,691 ****
+--- 691,713 ----
+ save_list = curwin->w_p_list;
+ curwin->w_p_list = 0; /* don't want list mode here */
+
++ #ifdef FEAT_VARTABS
++ new_ts_str = eap->arg;
++ if (!tabstop_set(eap->arg, &new_ts))
++ return;
++ while (vim_isdigit(*(eap->arg)) || *(eap->arg) == ',')
++ ++(eap->arg);
++
++ // This ensures that either new_ts and new_ts_str are freshly allocated,
++ // or new_ts points to an existing array and new_ts_str is null.
++ if (new_ts == 0)
++ {
++ new_ts = curbuf->b_p_vts_array;
++ new_ts_str = NULL;
++ }
++ else
++ new_ts_str = vim_strnsave(new_ts_str, eap->arg - new_ts_str);
++ #else
+ new_ts = getdigits(&(eap->arg));
+ if (new_ts < 0)
+ {
+***************
+*** 694,699 ****
+--- 716,722 ----
+ }
+ if (new_ts == 0)
+ new_ts = curbuf->b_p_ts;
++ #endif
+ for (lnum = eap->line1; !got_int && lnum <= eap->line2; ++lnum)
+ {
+ ptr = ml_get(lnum);
+***************
+*** 726,731 ****
+--- 749,764 ----
+ num_tabs = 0;
+ if (!curbuf->b_p_et)
+ {
++ #ifdef FEAT_VARTABS
++ int t, s;
++
++ tabstop_fromto(start_vcol, vcol,
++ tabstop_count(new_ts)? 0: curbuf->b_p_ts,
++ new_ts,
++ &t, &s);
++ num_tabs = t;
++ num_spaces = s;
++ #else
+ temp = new_ts - (start_vcol % new_ts);
+ if (num_spaces >= temp)
+ {
+***************
+*** 734,739 ****
+--- 767,773 ----
+ }
+ num_tabs += num_spaces / new_ts;
+ num_spaces -= (num_spaces / new_ts) * new_ts;
++ #endif
+ }
+ if (curbuf->b_p_et || got_tab ||
+ (num_spaces + num_tabs < len))
+***************
+*** 791,804 ****
+--- 825,877 ----
+ if (got_int)
+ EMSG(_(e_interr));
+
++ #ifdef FEAT_VARTABS
++ // If a single value was given then it can be considered equal to
++ // either the value of 'tabstop' or the value of 'vartabstop'.
++ if (tabstop_count(curbuf->b_p_vts_array) == 0
++ && tabstop_count(new_ts) == 1
++ && curbuf->b_p_ts == tabstop_first(new_ts))
++ ; /* not changed */
++ else if (tabstop_count(curbuf->b_p_vts_array) > 0
++ && tabstop_eq(curbuf->b_p_vts_array, new_ts))
++ ; /* not changed */
++ else
++ redraw_curbuf_later(NOT_VALID);
++ #else
+ if (curbuf->b_p_ts != new_ts)
+ redraw_curbuf_later(NOT_VALID);
++ #endif
+ if (first_line != 0)
+ changed_lines(first_line, 0, last_line + 1, 0L);
+
+ curwin->w_p_list = save_list; /* restore 'list' */
+
++ #ifdef FEAT_VARTABS
++ if (new_ts_str != NULL) /* set the new tabstop */
++ {
++ // If 'vartabstop' is in use or if the value given to retab has more
++ // than one tabstop then update 'vartabstop'.
++ int *old_vts_ary = curbuf->b_p_vts_array;
++
++ if (tabstop_count(old_vts_ary) > 0 || tabstop_count(new_ts) > 1)
++ {
++ set_string_option_direct((char_u *)"vts", -1, new_ts_str,
++ OPT_FREE|OPT_LOCAL, 0);
++ vim_free(new_ts_str);
++ curbuf->b_p_vts_array = new_ts;
++ vim_free(old_vts_ary);
++ }
++ else
++ {
++ // 'vartabstop' wasn't in use and a single value was given to
++ // retab then update 'tabstop'.
++ curbuf->b_p_ts = tabstop_first(new_ts);
++ vim_free(new_ts);
++ }
++ }
++ #else
+ curbuf->b_p_ts = new_ts;
++ #endif
+ coladvance(curwin->w_curswant);
+
+ u_clearline();
+*** ../vim-8.1.0104/src/feature.h 2018-03-29 15:32:30.000000000 +0200
+--- src/feature.h 2018-06-23 17:41:10.108366044 +0200
+***************
+*** 806,811 ****
+--- 806,818 ----
+ #endif
+
+ /*
++ * +vartabs 'vartabstop' and 'varsofttabstop' options.
++ */
++ #ifdef FEAT_BIG
++ # define FEAT_VARTABS
++ #endif
++
++ /*
+ * Preferences:
+ * ============
+ */
+*** ../vim-8.1.0104/src/gui_beval.c 2017-11-18 21:20:07.000000000 +0100
+--- src/gui_beval.c 2018-06-23 18:50:11.437730010 +0200
+***************
+*** 130,135 ****
+--- 130,138 ----
+ beval->msg = mesg;
+ beval->msgCB = mesgCB;
+ beval->clientData = clientData;
++ #ifdef FEAT_VARTABS
++ beval->vts = NULL;
++ #endif
+
+ /*
+ * Set up event handler which will keep its eyes on the pointer,
+***************
+*** 172,177 ****
+--- 175,184 ----
+ # else
+ XtDestroyWidget(beval->balloonShell);
+ # endif
++ # ifdef FEAT_VARTABS
++ if (beval->vts)
++ vim_free(beval->vts);
++ # endif
+ vim_free(beval);
+ }
+ #endif
+*** ../vim-8.1.0104/src/gui_w32.c 2018-06-19 14:45:33.583620880 +0200
+--- src/gui_w32.c 2018-06-23 18:50:14.853710890 +0200
+***************
+*** 8934,8939 ****
+--- 8934,8942 ----
+ beval->msg = mesg;
+ beval->msgCB = mesgCB;
+ beval->clientData = clientData;
++ #ifdef FEAT_VARTABS
++ beval->vts = NULL;
++ #endif
+
+ InitCommonControls();
+ cur_beval = beval;
+***************
+*** 8990,8995 ****
+--- 8993,9002 ----
+ void
+ gui_mch_destroy_beval_area(BalloonEval *beval)
+ {
++ #ifdef FEAT_VARTABS
++ if (beval->vts)
++ vim_free(beval->vts);
++ #endif
+ vim_free(beval);
+ }
+ #endif /* FEAT_BEVAL_GUI */
+*** ../vim-8.1.0104/src/hardcopy.c 2018-06-16 14:44:05.750081612 +0200
+--- src/hardcopy.c 2018-06-23 18:35:24.530657199 +0200
+***************
+*** 915,921 ****
+--- 915,926 ----
+ if (line[col] == TAB || tab_spaces != 0)
+ {
+ if (tab_spaces == 0)
++ #ifdef FEAT_VARTABS
++ tab_spaces = tabstop_padding(print_pos, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ #else
+ tab_spaces = (int)(curbuf->b_p_ts - (print_pos % curbuf->b_p_ts));
++ #endif
+
+ while (tab_spaces > 0)
+ {
+*** ../vim-8.1.0104/src/message.c 2018-06-19 17:49:20.300015350 +0200
+--- src/message.c 2018-06-23 18:35:29.794628331 +0200
+***************
+*** 1831,1837 ****
+--- 1831,1842 ----
+ if (c == TAB && (!list || lcs_tab1))
+ {
+ /* tab amount depends on current column */
++ #ifdef FEAT_VARTABS
++ n_extra = tabstop_padding(col, curbuf->b_p_ts,
++ curbuf->b_p_vts_array) - 1;
++ #else
+ n_extra = curbuf->b_p_ts - col % curbuf->b_p_ts - 1;
++ #endif
+ if (!list)
+ {
+ c = ' ';
+*** ../vim-8.1.0104/src/misc1.c 2018-06-19 18:58:04.010489820 +0200
+--- src/misc1.c 2018-06-23 18:50:28.649633665 +0200
+***************
+*** 36,42 ****
+--- 36,47 ----
+ int
+ get_indent(void)
+ {
++ #ifdef FEAT_VARTABS
++ return get_indent_str_vtab(ml_get_curline(), (int)curbuf->b_p_ts,
++ curbuf->b_p_vts_array, FALSE);
++ #else
+ return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts, FALSE);
++ #endif
+ }
+
+ /*
+***************
+*** 45,51 ****
+--- 50,61 ----
+ int
+ get_indent_lnum(linenr_T lnum)
+ {
++ #ifdef FEAT_VARTABS
++ return get_indent_str_vtab(ml_get(lnum), (int)curbuf->b_p_ts,
++ curbuf->b_p_vts_array, FALSE);
++ #else
+ return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts, FALSE);
++ #endif
+ }
+
+ #if defined(FEAT_FOLDING) || defined(PROTO)
+***************
+*** 56,62 ****
+--- 66,77 ----
+ int
+ get_indent_buf(buf_T *buf, linenr_T lnum)
+ {
++ #ifdef FEAT_VARTABS
++ return get_indent_str_vtab(ml_get_buf(buf, lnum, FALSE),
++ (int)curbuf->b_p_ts, buf->b_p_vts_array, FALSE);
++ #else
+ return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts, FALSE);
++ #endif
+ }
+ #endif
+
+***************
+*** 91,96 ****
+--- 106,142 ----
+ return count;
+ }
+
++ #ifdef FEAT_VARTABS
++ /*
++ * Count the size (in window cells) of the indent in line "ptr", using
++ * variable tabstops.
++ * if "list" is TRUE, count only screen size for tabs.
++ */
++ int
++ get_indent_str_vtab(char_u *ptr, int ts, int *vts, int list)
++ {
++ int count = 0;
++
++ for ( ; *ptr; ++ptr)
++ {
++ if (*ptr == TAB) /* count a tab for what it is worth */
++ {
++ if (!list || lcs_tab1)
++ count += tabstop_padding(count, ts, vts);
++ else
++ /* In list mode, when tab is not set, count screen char width
++ * for Tab, displays: ^I */
++ count += ptr2cells(ptr);
++ }
++ else if (*ptr == ' ')
++ ++count; /* count a space for one */
++ else
++ break;
++ }
++ return count;
++ }
++ #endif
++
+ /*
+ * Set the indent of the current line.
+ * Leaves the cursor on the first non-blank in the line.
+***************
+*** 115,120 ****
+--- 161,169 ----
+ int line_len;
+ int doit = FALSE;
+ int ind_done = 0; /* measured in spaces */
++ #ifdef FEAT_VARTABS
++ int ind_col = 0;
++ #endif
+ int tab_pad;
+ int retval = FALSE;
+ int orig_char_len = -1; /* number of initial whitespace chars when
+***************
+*** 147,154 ****
+--- 196,208 ----
+ {
+ if (*p == TAB)
+ {
++ #ifdef FEAT_VARTABS
++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ #else
+ tab_pad = (int)curbuf->b_p_ts
+ - (ind_done % (int)curbuf->b_p_ts);
++ #endif
+ /* stop if this tab will overshoot the target */
+ if (todo < tab_pad)
+ break;
+***************
+*** 165,187 ****
+--- 219,269 ----
+ ++p;
+ }
+
++ #ifdef FEAT_VARTABS
++ /* These diverge from this point. */
++ ind_col = ind_done;
++ #endif
+ /* Set initial number of whitespace chars to copy if we are
+ * preserving indent but expandtab is set */
+ if (curbuf->b_p_et)
+ orig_char_len = ind_len;
+
+ /* Fill to next tabstop with a tab, if possible */
++ #ifdef FEAT_VARTABS
++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ #else
+ tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
++ #endif
+ if (todo >= tab_pad && orig_char_len == -1)
+ {
+ doit = TRUE;
+ todo -= tab_pad;
+ ++ind_len;
+ /* ind_done += tab_pad; */
++ #ifdef FEAT_VARTABS
++ ind_col += tab_pad;
++ #endif
+ }
+ }
+
+ /* count tabs required for indent */
++ #ifdef FEAT_VARTABS
++ for (;;)
++ {
++ tab_pad = tabstop_padding(ind_col, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ if (todo < tab_pad)
++ break;
++ if (*p != TAB)
++ doit = TRUE;
++ else
++ ++p;
++ todo -= tab_pad;
++ ++ind_len;
++ ind_col += tab_pad;
++ }
++ #else
+ while (todo >= (int)curbuf->b_p_ts)
+ {
+ if (*p != TAB)
+***************
+*** 192,197 ****
+--- 274,280 ----
+ ++ind_len;
+ /* ind_done += (int)curbuf->b_p_ts; */
+ }
++ #endif
+ }
+ /* count spaces required for indent */
+ while (todo > 0)
+***************
+*** 266,273 ****
+--- 349,361 ----
+ {
+ if (*p == TAB)
+ {
++ #ifdef FEAT_VARTABS
++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ #else
+ tab_pad = (int)curbuf->b_p_ts
+ - (ind_done % (int)curbuf->b_p_ts);
++ #endif
+ /* stop if this tab will overshoot the target */
+ if (todo < tab_pad)
+ break;
+***************
+*** 283,303 ****
+--- 371,412 ----
+ }
+
+ /* Fill to next tabstop with a tab, if possible */
++ #ifdef FEAT_VARTABS
++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ #else
+ tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
++ #endif
+ if (todo >= tab_pad)
+ {
+ *s++ = TAB;
+ todo -= tab_pad;
++ #ifdef FEAT_VARTABS
++ ind_done += tab_pad;
++ #endif
+ }
+
+ p = skipwhite(p);
+ }
+
++ #ifdef FEAT_VARTABS
++ for (;;)
++ {
++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ if (todo < tab_pad)
++ break;
++ *s++ = TAB;
++ todo -= tab_pad;
++ ind_done += tab_pad;
++ }
++ #else
+ while (todo >= (int)curbuf->b_p_ts)
+ {
+ *s++ = TAB;
+ todo -= (int)curbuf->b_p_ts;
+ }
++ #endif
+ }
+ while (todo > 0)
+ {
+***************
+*** 350,355 ****
+--- 459,467 ----
+ int tab_pad;
+ int ind_done;
+ int round;
++ #ifdef FEAT_VARTABS
++ int ind_col;
++ #endif
+
+ /* Round 1: compute the number of characters needed for the indent
+ * Round 2: copy the characters. */
+***************
+*** 358,363 ****
+--- 470,478 ----
+ todo = size;
+ ind_len = 0;
+ ind_done = 0;
++ #ifdef FEAT_VARTABS
++ ind_col = 0;
++ #endif
+ s = src;
+
+ /* Count/copy the usable portion of the source line */
+***************
+*** 365,382 ****
+--- 480,508 ----
+ {
+ if (*s == TAB)
+ {
++ #ifdef FEAT_VARTABS
++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ #else
+ tab_pad = (int)curbuf->b_p_ts
+ - (ind_done % (int)curbuf->b_p_ts);
++ #endif
+ /* Stop if this tab will overshoot the target */
+ if (todo < tab_pad)
+ break;
+ todo -= tab_pad;
+ ind_done += tab_pad;
++ #ifdef FEAT_VARTABS
++ ind_col += tab_pad;
++ #endif
+ }
+ else
+ {
+ --todo;
+ ++ind_done;
++ #ifdef FEAT_VARTABS
++ ++ind_col;
++ #endif
+ }
+ ++ind_len;
+ if (p != NULL)
+***************
+*** 385,406 ****
+ }
+
+ /* Fill to next tabstop with a tab, if possible */
+ tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
+ if (todo >= tab_pad && !curbuf->b_p_et)
+ {
+ todo -= tab_pad;
+ ++ind_len;
+ if (p != NULL)
+ *p++ = TAB;
+ }
+
+ /* Add tabs required for indent */
+! while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et)
+ {
+! todo -= (int)curbuf->b_p_ts;
+! ++ind_len;
+! if (p != NULL)
+! *p++ = TAB;
+ }
+
+ /* Count/add spaces required for indent */
+--- 511,558 ----
+ }
+
+ /* Fill to next tabstop with a tab, if possible */
++ #ifdef FEAT_VARTABS
++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts,
++ curbuf->b_p_vts_array);
++ #else
+ tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
++ #endif
+ if (todo >= tab_pad && !curbuf->b_p_et)
+ {
+ todo -= tab_pad;
+ ++ind_len;
++ #ifdef FEAT_VARTABS
++ ind_col += tab_pad;
++ #endif
+ if (p != NULL)
+ *p++ = TAB;
+ }
+
+ /* Add tabs required for indent */
+! if (!curbuf->b_p_et)
+ {
+! #ifdef FEAT_VARTABS
+! for (;;)
+! {
+! tab_pad = tabstop_padding(ind_col, curbuf->b_p_ts,
+! curbuf->b_p_vts_array);
+! if (todo < tab_pad)
+! break;
+! todo -= tab_pad;
+! ++ind_len;
+! ind_col += tab_pad;
+! if (p != NULL)
+! *p++ = TAB;
+! }
+! #else
+! while (todo >= (int)curbuf->b_p_ts)
+! {
+! todo -= (int)curbuf->b_p_ts;
+! ++ind_len;
+! if (p != NULL)
+! *p++ = TAB;
+! }
+! #endif
+ }
+
+ /* Count/add spaces required for indent */
+***************
+*** 497,502 ****
+--- 649,657 ----
+ static long prev_ts = 0L; /* cached tabstop value */
+ static char_u *prev_line = NULL; /* cached pointer to line */
+ static varnumber_T prev_tick = 0; /* changedtick of cached value */
++ #ifdef FEAT_VARTABS
++ static int *prev_vts = NULL; /* cached vartabs values */
++ #endif
+ int bri = 0;
+ /* window width minus window margin space, i.e. what rests for text */
+ const int eff_wwidth = wp->w_width
+***************
+*** 506,518 ****
+
+ /* used cached indent, unless pointer or 'tabstop' changed */
+ if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts
+! || prev_tick != CHANGEDTICK(wp->w_buffer))
+ {
+ prev_line = line;
+ prev_ts = wp->w_buffer->b_p_ts;
+ prev_tick = CHANGEDTICK(wp->w_buffer);
+ prev_indent = get_indent_str(line,
+ (int)wp->w_buffer->b_p_ts, wp->w_p_list);
+ }
+ bri = prev_indent + wp->w_p_brishift;
+
+--- 661,684 ----
+
+ /* used cached indent, unless pointer or 'tabstop' changed */
+ if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts
+! || prev_tick != CHANGEDTICK(wp->w_buffer)
+! #ifdef FEAT_VARTABS
+! || prev_vts != wp->w_buffer->b_p_vts_array
+! #endif
+! )
+ {
+ prev_line = line;
+ prev_ts = wp->w_buffer->b_p_ts;
+ prev_tick = CHANGEDTICK(wp->w_buffer);
++ #ifdef FEAT_VARTABS
++ prev_vts = wp->w_buffer->b_p_vts_array;
++ prev_indent = get_indent_str_vtab(line,
++ (int)wp->w_buffer->b_p_ts,
++ wp->w_buffer->b_p_vts_array, wp->w_p_list);
++ #else
+ prev_indent = get_indent_str(line,
+ (int)wp->w_buffer->b_p_ts, wp->w_p_list);
++ #endif
+ }
+ bri = prev_indent + wp->w_p_brishift;
+
+***************
+*** 741,747 ****
+--- 907,918 ----
+ /*
+ * count white space on current line
+ */
++ #ifdef FEAT_VARTABS
++ newindent = get_indent_str_vtab(saved_line, curbuf->b_p_ts,
++ curbuf->b_p_vts_array, FALSE);
++ #else
+ newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts, FALSE);
++ #endif
+ if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
+ newindent = second_line_indent; /* for ^^D command in insert mode */
+
+***************
+*** 1264,1270 ****
+ || do_si
+ #endif
+ )
+! newindent = get_indent_str(leader, (int)curbuf->b_p_ts, FALSE);
+
+ /* Add the indent offset */
+ if (newindent + off < 0)
+--- 1435,1447 ----
+ || do_si
+ #endif
+ )
+! #ifdef FEAT_VARTABS
+! newindent = get_indent_str_vtab(leader, curbuf->b_p_ts,
+! curbuf->b_p_vts_array, FALSE);
+! #else
+! newindent = get_indent_str(leader,
+! (int)curbuf->b_p_ts, FALSE);
+! #endif
+
+ /* Add the indent offset */
+ if (newindent + off < 0)
+*** ../vim-8.1.0104/src/ops.c 2018-06-03 14:42:17.844505109 +0200
+--- src/ops.c 2018-06-23 18:36:27.566311089 +0200
+***************
+*** 398,403 ****
+--- 398,406 ----
+ char_u *newp, *oldp;
+ int oldcol = curwin->w_cursor.col;
+ int p_sw = (int)get_sw_value(curbuf);
++ #ifdef FEAT_VARTABS
++ int *p_vts = curbuf->b_p_vts_array;
++ #endif
+ int p_ts = (int)curbuf->b_p_ts;
+ struct block_def bd;
+ int incr;
+***************
+*** 459,470 ****
+--- 462,480 ----
+ }
+ /* OK, now total=all the VWS reqd, and textstart points at the 1st
+ * non-ws char in the block. */
++ #ifdef FEAT_VARTABS
++ if (!curbuf->b_p_et)
++ tabstop_fromto(ws_vcol, ws_vcol + total, p_ts, p_vts, &i, &j);
++ else
++ j = total;
++ #else
+ if (!curbuf->b_p_et)
+ i = ((ws_vcol % p_ts) + total) / p_ts; /* number of tabs */
+ if (i)
+ j = ((ws_vcol % p_ts) + total) % p_ts; /* number of spp */
+ else
+ j = total;
++ #endif
+ /* if we're splitting a TAB, allow for it */
+ bd.textcol -= bd.pre_whitesp_c - (bd.startspaces != 0);
+ len = (int)STRLEN(bd.textstart) + 1;
+***************
+*** 3697,3706 ****
+--- 3707,3725 ----
+ {
+ /* Don't need to insert spaces when "p" on the last position of a
+ * tab or "P" on the first position. */
++ #ifdef FEAT_VARTABS
++ int viscol = getviscol();
++ if (dir == FORWARD
++ ? tabstop_padding(viscol, curbuf->b_p_ts,
++ curbuf->b_p_vts_array) != 1
++ : curwin->w_cursor.coladd > 0)
++ coladvance_force(viscol);
++ #else
+ if (dir == FORWARD
+ ? (int)curwin->w_cursor.coladd < curbuf->b_p_ts - 1
+ : curwin->w_cursor.coladd > 0)
+ coladvance_force(getviscol());
++ #endif
+ else
+ curwin->w_cursor.coladd = 0;
+ }
+*** ../vim-8.1.0104/src/option.c 2018-06-17 19:08:26.472323943 +0200
+--- src/option.c 2018-06-23 18:53:46.500525908 +0200
+***************
+*** 182,187 ****
+--- 182,191 ----
+ # define PV_UDF OPT_BUF(BV_UDF)
+ #endif
+ #define PV_WM OPT_BUF(BV_WM)
++ #ifdef FEAT_VARTABS
++ # define PV_VSTS OPT_BUF(BV_VSTS)
++ # define PV_VTS OPT_BUF(BV_VTS)
++ #endif
+
+ /*
+ * Definition of the PV_ values for window-local options.
+***************
+*** 371,376 ****
+--- 375,384 ----
+ static int p_udf;
+ #endif
+ static long p_wm;
++ #ifdef FEAT_VARTABS
++ static char_u *p_vsts;
++ static char_u *p_vts;
++ #endif
+ #ifdef FEAT_KEYMAP
+ static char_u *p_keymap;
+ #endif
+***************
+*** 390,395 ****
+--- 398,406 ----
+ static long p_sts_nopaste;
+ static long p_tw_nopaste;
+ static long p_wm_nopaste;
++ #ifdef FEAT_VARTABS
++ static char_u *p_vsts_nopaste;
++ #endif
+
+ struct vimoption
+ {
+***************
+*** 2925,2930 ****
+--- 2936,2959 ----
+ {"updatetime", "ut", P_NUM|P_VI_DEF,
+ (char_u *)&p_ut, PV_NONE,
+ {(char_u *)4000L, (char_u *)0L} SCRIPTID_INIT},
++ {"varsofttabstop", "vsts", P_STRING|P_VI_DEF|P_VIM|P_COMMA,
++ #ifdef FEAT_VARTABS
++ (char_u *)&p_vsts, PV_VSTS,
++ {(char_u *)"", (char_u *)0L}
++ #else
++ (char_u *)NULL, PV_NONE,
++ {(char_u *)"", (char_u *)NULL}
++ #endif
++ SCRIPTID_INIT},
++ {"vartabstop", "vts", P_STRING|P_VI_DEF|P_VIM|P_RBUF|P_COMMA,
++ #ifdef FEAT_VARTABS
++ (char_u *)&p_vts, PV_VTS,
++ {(char_u *)"", (char_u *)0L}
++ #else
++ (char_u *)NULL, PV_NONE,
++ {(char_u *)"", (char_u *)NULL}
++ #endif
++ SCRIPTID_INIT},
+ {"verbose", "vbs", P_NUM|P_VI_DEF,
+ (char_u *)&p_verbose, PV_NONE,
+ {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+***************
+*** 5608,5613 ****
+--- 5637,5646 ----
+ /* Parse default for 'clipboard' */
+ (void)check_clipboard_option();
+ #endif
++ #ifdef FEAT_VARTABS
++ tabstop_set(curbuf->b_p_vsts, &curbuf->b_p_vsts_array);
++ tabstop_set(curbuf->b_p_vts, &curbuf->b_p_vts_array);
++ #endif
+ }
+
+ /*
+***************
+*** 5725,5730 ****
+--- 5758,5767 ----
+ #ifdef FEAT_MBYTE
+ check_string_option(&buf->b_p_menc);
+ #endif
++ #ifdef FEAT_VARTABS
++ check_string_option(&buf->b_p_vsts);
++ check_string_option(&buf->b_p_vts);
++ #endif
+ }
+
+ /*
+***************
+*** 7472,7477 ****
+--- 7509,7596 ----
+ }
+ #endif
+
++ #ifdef FEAT_VARTABS
++ /* 'varsofttabstop' */
++ else if (varp == &(curbuf->b_p_vsts))
++ {
++ char_u *cp;
++
++ if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1]))
++ {
++ if (curbuf->b_p_vsts_array)
++ {
++ vim_free(curbuf->b_p_vsts_array);
++ curbuf->b_p_vsts_array = 0;
++ }
++ }
++ else
++ {
++ for (cp = *varp; *cp; ++cp)
++ {
++ if (vim_isdigit(*cp))
++ continue;
++ if (*cp == ',' && cp > *varp && *(cp-1) != ',')
++ continue;
++ errmsg = e_invarg;
++ break;
++ }
++ if (errmsg == NULL)
++ {
++ int *oldarray = curbuf->b_p_vsts_array;
++ if (tabstop_set(*varp, &(curbuf->b_p_vsts_array)))
++ {
++ if (oldarray)
++ vim_free(oldarray);
++ }
++ else
++ errmsg = e_invarg;
++ }
++ }
++ }
++
++ /* 'vartabstop' */
++ else if (varp == &(curbuf->b_p_vts))
++ {
++ char_u *cp;
++
++ if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1]))
++ {
++ if (curbuf->b_p_vts_array)
++ {
++ vim_free(curbuf->b_p_vts_array);
++ curbuf->b_p_vts_array = NULL;
++ }
++ }
++ else
++ {
++ for (cp = *varp; *cp; ++cp)
++ {
++ if (vim_isdigit(*cp))
++ continue;
++ if (*cp == ',' && cp > *varp && *(cp-1) != ',')
++ continue;
++ errmsg = e_invarg;
++ break;
++ }
++ if (errmsg == NULL)
++ {
++ int *oldarray = curbuf->b_p_vts_array;
++ if (tabstop_set(*varp, &(curbuf->b_p_vts_array)))
++ {
++ if (oldarray)
++ vim_free(oldarray);
++ #ifdef FEAT_FOLDING
++ if (foldmethodIsIndent(curwin))
++ foldUpdateAll(curwin);
++ #endif /* FEAT_FOLDING */
++ }
++ else
++ errmsg = e_invarg;
++ }
++ }
++ }
++ #endif
++
+ /* Options that are a list of flags. */
+ else
+ {
+***************
+*** 8780,8786 ****
+--- 8899,8912 ----
+ if (curbuf->b_p_sw < 0)
+ {
+ errmsg = e_positive;
++ #ifdef FEAT_VARTABS
++ // Use the first 'vartabstop' value, or 'tabstop' if vts isn't in use.
++ curbuf->b_p_sw = tabstop_count(curbuf->b_p_vts_array) > 0
++ ? tabstop_first(curbuf->b_p_vts_array)
++ : curbuf->b_p_ts;
++ #else
+ curbuf->b_p_sw = curbuf->b_p_ts;
++ #endif
+ }
+
+ /*
+***************
+*** 10814,10819 ****
+--- 10940,10949 ----
+ #ifdef FEAT_SIGNS
+ case PV_SCL: return (char_u *)&(curwin->w_p_scl);
+ #endif
++ #ifdef FEAT_VARTABS
++ case PV_VSTS: return (char_u *)&(curbuf->b_p_vsts);
++ case PV_VTS: return (char_u *)&(curbuf->b_p_vts);
++ #endif
+ default: IEMSG(_("E356: get_varp ERROR"));
+ }
+ /* always return a valid pointer to avoid a crash! */
+***************
+*** 11138,11143 ****
+--- 11268,11282 ----
+ #endif
+ buf->b_p_sts = p_sts;
+ buf->b_p_sts_nopaste = p_sts_nopaste;
++ #ifdef FEAT_VARTABS
++ buf->b_p_vsts = vim_strsave(p_vsts);
++ if (p_vsts && p_vsts != empty_option)
++ tabstop_set(p_vsts, &buf->b_p_vsts_array);
++ else
++ buf->b_p_vsts_array = 0;
++ buf->b_p_vsts_nopaste = p_vsts_nopaste
++ ? vim_strsave(p_vsts_nopaste) : NULL;
++ #endif
+ buf->b_p_sn = p_sn;
+ #ifdef FEAT_COMMENTS
+ buf->b_p_com = vim_strsave(p_com);
+***************
+*** 11259,11270 ****
+--- 11398,11424 ----
+ * or to a help buffer.
+ */
+ if (dont_do_help)
++ {
+ buf->b_p_isk = save_p_isk;
++ #ifdef FEAT_VARTABS
++ if (p_vts && p_vts != empty_option && !buf->b_p_vts_array)
++ tabstop_set(p_vts, &buf->b_p_vts_array);
++ else
++ buf->b_p_vts_array = NULL;
++ #endif
++ }
+ else
+ {
+ buf->b_p_isk = vim_strsave(p_isk);
+ did_isk = TRUE;
+ buf->b_p_ts = p_ts;
++ #ifdef FEAT_VARTABS
++ buf->b_p_vts = vim_strsave(p_vts);
++ if (p_vts && p_vts != empty_option && !buf->b_p_vts_array)
++ tabstop_set(p_vts, &buf->b_p_vts_array);
++ else
++ buf->b_p_vts_array = NULL;
++ #endif
+ buf->b_help = FALSE;
+ if (buf->b_p_bt[0] == 'h')
+ clear_string_option(&buf->b_p_bt);
+***************
+*** 12084,12089 ****
+--- 12238,12249 ----
+ buf->b_p_sts_nopaste = buf->b_p_sts;
+ buf->b_p_ai_nopaste = buf->b_p_ai;
+ buf->b_p_et_nopaste = buf->b_p_et;
++ #ifdef FEAT_VARTABS
++ if (buf->b_p_vsts_nopaste)
++ vim_free(buf->b_p_vsts_nopaste);
++ buf->b_p_vsts_nopaste = buf->b_p_vsts && buf->b_p_vsts != empty_option
++ ? vim_strsave(buf->b_p_vsts) : NULL;
++ #endif
+ }
+
+ /* save global options */
+***************
+*** 12102,12107 ****
+--- 12262,12272 ----
+ p_sts_nopaste = p_sts;
+ p_tw_nopaste = p_tw;
+ p_wm_nopaste = p_wm;
++ #ifdef FEAT_VARTABS
++ if (p_vsts_nopaste)
++ vim_free(p_vsts_nopaste);
++ p_vsts_nopaste = p_vsts && p_vsts != empty_option ? vim_strsave(p_vsts) : NULL;
++ #endif
+ }
+
+ /*
+***************
+*** 12116,12121 ****
+--- 12281,12294 ----
+ buf->b_p_sts = 0; /* softtabstop is 0 */
+ buf->b_p_ai = 0; /* no auto-indent */
+ buf->b_p_et = 0; /* no expandtab */
++ #ifdef FEAT_VARTABS
++ if (buf->b_p_vsts)
++ free_string_option(buf->b_p_vsts);
++ buf->b_p_vsts = empty_option;
++ if (buf->b_p_vsts_array)
++ vim_free(buf->b_p_vsts_array);
++ buf->b_p_vsts_array = 0;
++ #endif
+ }
+
+ /* set global options */
+***************
+*** 12135,12140 ****
+--- 12308,12318 ----
+ p_wm = 0;
+ p_sts = 0;
+ p_ai = 0;
++ #ifdef FEAT_VARTABS
++ if (p_vsts)
++ free_string_option(p_vsts);
++ p_vsts = empty_option;
++ #endif
+ }
+
+ /*
+***************
+*** 12150,12155 ****
+--- 12328,12345 ----
+ buf->b_p_sts = buf->b_p_sts_nopaste;
+ buf->b_p_ai = buf->b_p_ai_nopaste;
+ buf->b_p_et = buf->b_p_et_nopaste;
++ #ifdef FEAT_VARTABS
++ if (buf->b_p_vsts)
++ free_string_option(buf->b_p_vsts);
++ buf->b_p_vsts = buf->b_p_vsts_nopaste
++ ? vim_strsave(buf->b_p_vsts_nopaste) : empty_option;
++ if (buf->b_p_vsts_array)
++ vim_free(buf->b_p_vsts_array);
++ if (buf->b_p_vsts && buf->b_p_vsts != empty_option)
++ tabstop_set(buf->b_p_vsts, &buf->b_p_vsts_array);
++ else
++ buf->b_p_vsts_array = 0;
++ #endif
+ }
+
+ /* restore global options */
+***************
+*** 12170,12175 ****
+--- 12360,12370 ----
+ p_sts = p_sts_nopaste;
+ p_tw = p_tw_nopaste;
+ p_wm = p_wm_nopaste;
++ #ifdef FEAT_VARTABS
++ if (p_vsts)
++ free_string_option(p_vsts);
++ p_vsts = p_vsts_nopaste ? vim_strsave(p_vsts_nopaste) : empty_option;
++ #endif
+ }
+
+ old_p_paste = p_paste;
+***************
+*** 12510,12515 ****
+--- 12705,12999 ----
+ return check_opt_strings(p, p_ff_values, FALSE);
+ }
+
++ #ifdef FEAT_VARTABS
++
++ /*
++ * Set the integer values corresponding to the string setting of 'vartabstop'.
++ */
++ int
++ tabstop_set(char_u *var, int **array)
++ {
++ int valcount = 1;
++ int t;
++ char_u *cp;
++
++ if ((!var[0] || (var[0] == '0' && !var[1])))
++ {
++ *array = NULL;
++ return TRUE;
++ }
++
++ for (cp = var; *cp; ++cp)
++ {
++ if (cp == var || *(cp - 1) == ',')
++ {
++ char_u *end;
++ if (strtol((char *)cp, (char **)&end, 10) <= 0)
++ {
++ if (cp != end)
++ EMSG(_(e_positive));
++ else
++ EMSG(_(e_invarg));
++ return FALSE;
++ }
++ }
++
++ if (VIM_ISDIGIT(*cp))
++ continue;
++ if (*cp == ',' && cp > var && *(cp - 1) != ',')
++ {
++ ++valcount;
++ continue;
++ }
++ EMSG(_(e_invarg));
++ return FALSE;
++ }
++
++ *array = (int *) alloc((unsigned) ((valcount + 1) * sizeof(int)));
++ (*array)[0] = valcount;
++
++ t = 1;
++ for (cp = var; *cp;)
++ {
++ (*array)[t++] = atoi((char *)cp);
++ while (*cp && *cp != ',')
++ ++cp;
++ if (*cp)
++ ++cp;
++ }
++
++ return TRUE;
++ }
++
++ /*
++ * Calculate the number of screen spaces a tab will occupy.
++ * If "vts" is set then the tab widths are taken from that array,
++ * otherwise the value of ts is used.
++ */
++ int
++ tabstop_padding(colnr_T col, int ts_arg, int *vts)
++ {
++ int ts = ts_arg == 0 ? 8 : ts_arg;
++ int tabcount;
++ colnr_T tabcol = 0;
++ int t;
++ int padding = 0;
++
++ if (vts == NULL || vts[0] == 0)
++ return ts - (col % ts);
++
++ tabcount = vts[0];
++
++ for (t = 1; t <= tabcount; ++t)
++ {
++ tabcol += vts[t];
++ if (tabcol > col)
++ {
++ padding = (int)(tabcol - col);
++ break;
++ }
++ }
++ if (t > tabcount)
++ padding = vts[tabcount] - (int)((col - tabcol) % vts[tabcount]);
++
++ return padding;
++ }
++
++ /*
++ * Find the size of the tab that covers a particular column.
++ */
++ int
++ tabstop_at(colnr_T col, int ts, int *vts)
++ {
++ int tabcount;
++ colnr_T tabcol = 0;
++ int t;
++ int tab_size = 0;
++
++ if (vts == 0 || vts[0] == 0)
++ return ts;
++
++ tabcount = vts[0];
++ for (t = 1; t <= tabcount; ++t)
++ {
++ tabcol += vts[t];
++ if (tabcol > col)
++ {
++ tab_size = vts[t];
++ break;
++ }
++ }
++ if (t > tabcount)
++ tab_size = vts[tabcount];
++
++ return tab_size;
++ }
++
++ /*
++ * Find the column on which a tab starts.
++ */
++ colnr_T
++ tabstop_start(colnr_T col, int ts, int *vts)
++ {
++ int tabcount;
++ colnr_T tabcol = 0;
++ int t;
++ int excess;
++
++ if (vts == 0 || vts[0] == 0)
++ return (col / ts) * ts;
++
++ tabcount = vts[0];
++ for (t = 1; t <= tabcount; ++t)
++ {
++ tabcol += vts[t];
++ if (tabcol > col)
++ return tabcol - vts[t];
++ }
++
++ excess = tabcol % vts[tabcount];
++ return excess + ((col - excess) / vts[tabcount]) * vts[tabcount];
++ }
++
++ /*
++ * Find the number of tabs and spaces necessary to get from one column
++ * to another.
++ */
++ void
++ tabstop_fromto(
++ colnr_T start_col,
++ colnr_T end_col,
++ int ts,
++ int *vts,
++ int *ntabs,
++ int *nspcs)
++ {
++ int spaces = end_col - start_col;
++ colnr_T tabcol = 0;
++ int padding = 0;
++ int tabcount;
++ int t;
++
++ if (vts == 0 || vts[0] == 0)
++ {
++ int tabs = 0;
++ int initspc = ts - (start_col % ts);
++ if (spaces >= initspc)
++ {
++ spaces -= initspc;
++ tabs++;
++ }
++ tabs += spaces / ts;
++ spaces -= (spaces / ts) * ts;
++
++ *ntabs = tabs;
++ *nspcs = spaces;
++ return;
++ }
++
++ /* Find the padding needed to reach the next tabstop. */
++ tabcount = vts[0];
++ for (t = 1; t <= tabcount; ++t)
++ {
++ tabcol += vts[t];
++ if (tabcol > start_col)
++ {
++ padding = (int)(tabcol - start_col);
++ break;
++ }
++ }
++ if (t > tabcount)
++ padding = vts[tabcount] - (int)((start_col - tabcol) % vts[tabcount]);
++
++ /* If the space needed is less than the padding no tabs can be used. */
++ if (spaces < padding)
++ {
++ *ntabs = 0;
++ *nspcs = spaces;
++ return;
++ }
++
++ *ntabs = 1;
++ spaces -= padding;
++
++ /* At least one tab has been used. See if any more will fit. */
++ while (spaces != 0 && ++t <= tabcount)
++ {
++ padding = vts[t];
++ if (spaces < padding)
++ {
++ *nspcs = spaces;
++ return;
++ }
++ ++*ntabs;
++ spaces -= padding;
++ }
++
++ *ntabs += spaces / vts[tabcount];
++ *nspcs = spaces % vts[tabcount];
++ }
++
++ /*
++ * See if two tabstop arrays contain the same values.
++ */
++ int
++ tabstop_eq(int *ts1, int *ts2)
++ {
++ int t;
++
++ if ((ts1 == 0 && ts2) || (ts1 && ts2 == 0))
++ return FALSE;
++ if (ts1 == ts2)
++ return TRUE;
++ if (ts1[0] != ts2[0])
++ return FALSE;
++
++ for (t = 1; t <= ts1[0]; ++t)
++ if (ts1[t] != ts2[t])
++ return FALSE;
++
++ return TRUE;
++ }
++
++ /*
++ * Copy a tabstop array, allocating space for the new array.
++ */
++ int *
++ tabstop_copy(int *oldts)
++ {
++ int *newts;
++ int t;
++
++ if (oldts == 0)
++ return 0;
++
++ newts = (int *) alloc((unsigned) ((oldts[0] + 1) * sizeof(int)));
++ for (t = 0; t <= oldts[0]; ++t)
++ newts[t] = oldts[t];
++
++ return newts;
++ }
++
++ /*
++ * Return a count of the number of tabstops.
++ */
++ int
++ tabstop_count(int *ts)
++ {
++ return ts != NULL ? ts[0] : 0;
++ }
++
++ /*
++ * Return the first tabstop, or 8 if there are no tabstops defined.
++ */
++ int
++ tabstop_first(int *ts)
++ {
++ return ts != NULL ? ts[1] : 8;
++ }
++
++ #endif
++
+ /*
+ * Return the effective shiftwidth value for current buffer, using the
+ * 'tabstop' value when 'shiftwidth' is zero.
+*** ../vim-8.1.0104/src/option.h 2018-05-05 16:28:11.000000000 +0200
+--- src/option.h 2018-06-23 17:41:10.116365995 +0200
+***************
+*** 1114,1119 ****
+--- 1114,1123 ----
+ #ifdef FEAT_TERMINAL
+ , BV_TWSL
+ #endif
++ #ifdef FEAT_VARTABS
++ , BV_VSTS
++ , BV_VTS
++ #endif
+ , BV_COUNT /* must be the last one */
+ };
+
+*** ../vim-8.1.0104/src/proto/misc1.pro 2018-05-17 13:52:45.000000000 +0200
+--- src/proto/misc1.pro 2018-06-23 18:20:45.471296904 +0200
+***************
+*** 3,8 ****
+--- 3,9 ----
+ int get_indent_lnum(linenr_T lnum);
+ int get_indent_buf(buf_T *buf, linenr_T lnum);
+ int get_indent_str(char_u *ptr, int ts, int list);
++ int get_indent_str_vtab(char_u *ptr, int ts, int *vts, int list);
+ int set_indent(int size, int flags);
+ int get_number_indent(linenr_T lnum);
+ int get_breakindent_win(win_T *wp, char_u *line);
+*** ../vim-8.1.0104/src/proto/option.pro 2018-05-17 13:52:47.000000000 +0200
+--- src/proto/option.pro 2018-06-23 18:38:40.189580238 +0200
+***************
+*** 60,65 ****
+--- 60,74 ----
+ void save_file_ff(buf_T *buf);
+ int file_ff_differs(buf_T *buf, int ignore_empty);
+ int check_ff_value(char_u *p);
++ int tabstop_set(char_u *var, int **array);
++ int tabstop_padding(colnr_T col, int ts_arg, int *vts);
++ int tabstop_at(colnr_T col, int ts, int *vts);
++ colnr_T tabstop_start(colnr_T col, int ts, int *vts);
++ void tabstop_fromto(colnr_T start_col, colnr_T end_col, int ts, int *vts, int *ntabs, int *nspcs);
++ int tabstop_eq(int *ts1, int *ts2);
++ int *tabstop_copy(int *oldts);
++ int tabstop_count(int *ts);
++ int tabstop_first(int *ts);
+ long get_sw_value(buf_T *buf);
+ long get_sts_value(void);
+ void find_mps_values(int *initc, int *findc, int *backwards, int switchit);
+*** ../vim-8.1.0104/src/screen.c 2018-06-23 14:21:38.467484932 +0200
+--- src/screen.c 2018-06-23 18:36:56.702150819 +0200
+***************
+*** 4848,4855 ****
+ vcol_adjusted = vcol - MB_CHARLEN(p_sbr);
+ #endif
+ /* tab amount depends on current column */
+ tab_len = (int)wp->w_buffer->b_p_ts
+! - vcol_adjusted % (int)wp->w_buffer->b_p_ts - 1;
+
+ #ifdef FEAT_LINEBREAK
+ if (!wp->w_p_lbr || !wp->w_p_list)
+--- 4848,4861 ----
+ vcol_adjusted = vcol - MB_CHARLEN(p_sbr);
+ #endif
+ /* tab amount depends on current column */
++ #ifdef FEAT_VARTABS
++ tab_len = tabstop_padding(vcol_adjusted,
++ wp->w_buffer->b_p_ts,
++ wp->w_buffer->b_p_vts_array) - 1;
++ #else
+ tab_len = (int)wp->w_buffer->b_p_ts
+! - vcol_adjusted % (int)wp->w_buffer->b_p_ts - 1;
+! #endif
+
+ #ifdef FEAT_LINEBREAK
+ if (!wp->w_p_lbr || !wp->w_p_list)
+*** ../vim-8.1.0104/src/structs.h 2018-06-17 20:10:36.208066158 +0200
+--- src/structs.h 2018-06-23 18:39:12.357402504 +0200
+***************
+*** 2236,2241 ****
+--- 2236,2248 ----
+ long b_p_wm; /* 'wrapmargin' */
+ long b_p_wm_nobin; /* b_p_wm saved for binary mode */
+ long b_p_wm_nopaste; /* b_p_wm saved for paste mode */
++ #ifdef FEAT_VARTABS
++ char_u *b_p_vsts; /* 'varsofttabstop' */
++ int *b_p_vsts_array; /* 'varsofttabstop' in internal format */
++ char_u *b_p_vsts_nopaste; /* b_p_vsts saved for paste mode */
++ char_u *b_p_vts; /* 'vartabstop' */
++ int *b_p_vts_array; /* 'vartabstop' in internal format */
++ #endif
+ #ifdef FEAT_KEYMAP
+ char_u *b_p_keymap; /* 'keymap' */
+ #endif
+*** ../vim-8.1.0104/src/testdir/Make_all.mak 2018-06-03 14:42:17.848505102 +0200
+--- src/testdir/Make_all.mak 2018-06-23 17:41:10.116365995 +0200
+***************
+*** 147,154 ****
+ test_perl.res \
+ test_plus_arg_edit.res \
+ test_preview.res \
+- test_prompt_buffer.res \
+ test_profile.res \
+ test_python2.res \
+ test_python3.res \
+ test_pyx2.res \
+--- 147,154 ----
+ test_perl.res \
+ test_plus_arg_edit.res \
+ test_preview.res \
+ test_profile.res \
++ test_prompt_buffer.res \
+ test_python2.res \
+ test_python3.res \
+ test_pyx2.res \
+***************
+*** 180,185 ****
+--- 180,186 ----
+ test_undo.res \
+ test_user_func.res \
+ test_usercommands.res \
++ test_vartabs.res \
+ test_viminfo.res \
+ test_vimscript.res \
+ test_visual.res \
+*** ../vim-8.1.0104/src/testdir/gen_opt_test.vim 2018-05-05 16:32:49.000000000 +0200
+--- src/testdir/gen_opt_test.vim 2018-06-23 17:41:10.116365995 +0200
+***************
+*** 136,141 ****
+--- 136,143 ----
+ \ 'toolbariconsize': [['', 'tiny', 'huge'], ['xxx']],
+ \ 'ttymouse': [['', 'xterm'], ['xxx']],
+ \ 'ttytype': [[], []],
++ \ 'varsofttabstop': [['8', '4,8,16,32'], ['xxx', '-1', '4,-1,20']],
++ \ 'vartabstop': [['8', '4,8,16,32'], ['xxx', '-1', '4,-1,20']],
+ \ 'viewoptions': [['', 'cursor', 'unix,slash'], ['xxx']],
+ \ 'viminfo': [['', '''50', '"30'], ['xxx']],
+ \ 'virtualedit': [['', 'all', 'all,block'], ['xxx']],
+*** ../vim-8.1.0104/src/testdir/test_breakindent.vim 2017-03-01 17:42:25.000000000 +0100
+--- src/testdir/test_breakindent.vim 2018-06-23 19:21:36.118945791 +0200
+***************
+*** 12,146 ****
+
+ let s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP"
+
+! function s:screen_lines(lnum, width) abort
+ return ScreenLines([a:lnum, a:lnum + 2], a:width)
+! endfunction
+
+! function! s:compare_lines(expect, actual)
+ call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
+! endfunction
+
+! function s:test_windows(...)
+ call NewWindow(10, 20)
+ setl ts=4 sw=4 sts=4 breakindent
+ put =s:input
+ exe get(a:000, 0, '')
+! endfunction
+
+! function s:close_windows(...)
+ call CloseWindow()
+ exe get(a:000, 0, '')
+! endfunction
+
+! function Test_breakindent01()
+ " simple breakindent test
+ call s:test_windows('setl briopt=min:0')
+! let lines=s:screen_lines(line('.'),8)
+! let expect=[
+! \ " abcd",
+! \ " qrst",
+! \ " GHIJ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunction
+
+! function Test_breakindent02()
+ " simple breakindent test with showbreak set
+ call s:test_windows('setl briopt=min:0 sbr=>>')
+! let lines=s:screen_lines(line('.'),8)
+! let expect=[
+! \ " abcd",
+! \ " >>qr",
+! \ " >>EF",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr=')
+! endfunction
+
+! function Test_breakindent03()
+ " simple breakindent test with showbreak set and briopt including sbr
+ call s:test_windows('setl briopt=sbr,min:0 sbr=++')
+! let lines=s:screen_lines(line('.'),8)
+! let expect=[
+! \ " abcd",
+! \ "++ qrst",
+! \ "++ GHIJ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ " clean up
+ call s:close_windows('set sbr=')
+! endfunction
+
+! function Test_breakindent04()
+ " breakindent set with min width 18
+ call s:test_windows('setl sbr= briopt=min:18')
+! let lines=s:screen_lines(line('.'),8)
+! let expect=[
+! \ " abcd",
+! \ " qrstuv",
+! \ " IJKLMN",
+! \ ]
+ call s:compare_lines(expect, lines)
+ " clean up
+ call s:close_windows('set sbr=')
+! endfunction
+
+! function Test_breakindent05()
+ " breakindent set and shift by 2
+ call s:test_windows('setl briopt=shift:2,min:0')
+! let lines=s:screen_lines(line('.'),8)
+! let expect=[
+! \ " abcd",
+! \ " qr",
+! \ " EF",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunction
+
+! function Test_breakindent06()
+ " breakindent set and shift by -1
+ call s:test_windows('setl briopt=shift:-1,min:0')
+! let lines=s:screen_lines(line('.'),8)
+! let expect=[
+! \ " abcd",
+! \ " qrstu",
+! \ " HIJKL",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunction
+
+! function Test_breakindent07()
+ " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
+ call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n')
+! let lines=s:screen_lines(line('.'),10)
+! let expect=[
+! \ " 2 ab",
+! \ "? m",
+! \ "? x",
+! \ ]
+ call s:compare_lines(expect, lines)
+ " clean up
+ call s:close_windows('set sbr= cpo-=n')
+! endfunction
+
+! function Test_breakindent07a()
+ " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
+ call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4')
+! let lines=s:screen_lines(line('.'),10)
+! let expect=[
+! \ " 2 ab",
+! \ " ? m",
+! \ " ? x",
+! \ ]
+ call s:compare_lines(expect, lines)
+ " clean up
+ call s:close_windows('set sbr=')
+! endfunction
+
+! function Test_breakindent08()
+ " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
+ call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4')
+ " make sure, cache is invalidated!
+--- 12,278 ----
+
+ let s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP"
+
+! func s:screen_lines(lnum, width) abort
+ return ScreenLines([a:lnum, a:lnum + 2], a:width)
+! endfunc
+
+! func s:compare_lines(expect, actual)
+ call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
+! endfunc
+
+! func s:test_windows(...)
+ call NewWindow(10, 20)
+ setl ts=4 sw=4 sts=4 breakindent
+ put =s:input
+ exe get(a:000, 0, '')
+! endfunc
+
+! func s:close_windows(...)
+ call CloseWindow()
+ exe get(a:000, 0, '')
+! endfunc
+
+! func Test_breakindent01()
+ " simple breakindent test
+ call s:test_windows('setl briopt=min:0')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " qrst",
+! \ " GHIJ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunc
+
+! func Test_breakindent01_vartabs()
+! " like 01 but with vartabs feature
+! if !has("vartabs")
+! return
+! endif
+! call s:test_windows('setl briopt=min:0 vts=4')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " qrst",
+! \ " GHIJ",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set vts&')
+! endfunc
+!
+! func Test_breakindent02()
+ " simple breakindent test with showbreak set
+ call s:test_windows('setl briopt=min:0 sbr=>>')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " >>qr",
+! \ " >>EF",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr=')
+! endfunc
+!
+! func Test_breakindent02_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " simple breakindent test with showbreak set
+! call s:test_windows('setl briopt=min:0 sbr=>> vts=4')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " >>qr",
+! \ " >>EF",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set sbr= vts&')
+! endfunc
+
+! func Test_breakindent03()
+ " simple breakindent test with showbreak set and briopt including sbr
+ call s:test_windows('setl briopt=sbr,min:0 sbr=++')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ "++ qrst",
+! \ "++ GHIJ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ " clean up
+ call s:close_windows('set sbr=')
+! endfunc
+
+! func Test_breakindent03_vartabs()
+! " simple breakindent test with showbreak set and briopt including sbr
+! if !has("vartabs")
+! return
+! endif
+! call s:test_windows('setl briopt=sbr,min:0 sbr=++ vts=4')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ "++ qrst",
+! \ "++ GHIJ",
+! \ ]
+! call s:compare_lines(expect, lines)
+! " clean up
+! call s:close_windows('set sbr= vts&')
+! endfunc
+!
+! func Test_breakindent04()
+ " breakindent set with min width 18
+ call s:test_windows('setl sbr= briopt=min:18')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " qrstuv",
+! \ " IJKLMN",
+! \ ]
+ call s:compare_lines(expect, lines)
+ " clean up
+ call s:close_windows('set sbr=')
+! endfunc
+
+! func Test_breakindent04_vartabs()
+! " breakindent set with min width 18
+! if !has("vartabs")
+! return
+! endif
+! call s:test_windows('setl sbr= briopt=min:18 vts=4')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " qrstuv",
+! \ " IJKLMN",
+! \ ]
+! call s:compare_lines(expect, lines)
+! " clean up
+! call s:close_windows('set sbr= vts&')
+! endfunc
+!
+! func Test_breakindent05()
+ " breakindent set and shift by 2
+ call s:test_windows('setl briopt=shift:2,min:0')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " qr",
+! \ " EF",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunc
+!
+! func Test_breakindent05_vartabs()
+! " breakindent set and shift by 2
+! if !has("vartabs")
+! return
+! endif
+! call s:test_windows('setl briopt=shift:2,min:0 vts=4')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " qr",
+! \ " EF",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set vts&')
+! endfunc
+
+! func Test_breakindent06()
+ " breakindent set and shift by -1
+ call s:test_windows('setl briopt=shift:-1,min:0')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " qrstu",
+! \ " HIJKL",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunc
+
+! func Test_breakindent06_vartabs()
+! " breakindent set and shift by -1
+! if !has("vartabs")
+! return
+! endif
+! call s:test_windows('setl briopt=shift:-1,min:0 vts=4')
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ " abcd",
+! \ " qrstu",
+! \ " HIJKL",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set vts&')
+! endfunc
+!
+! func Test_breakindent07()
+ " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
+ call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n')
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ab",
+! \ "? m",
+! \ "? x",
+! \ ]
+ call s:compare_lines(expect, lines)
+ " clean up
+ call s:close_windows('set sbr= cpo-=n')
+! endfunc
+!
+! func Test_breakindent07_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
+! call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n vts=4')
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ab",
+! \ "? m",
+! \ "? x",
+! \ ]
+! call s:compare_lines(expect, lines)
+! " clean up
+! call s:close_windows('set sbr= cpo-=n vts&')
+! endfunc
+
+! func Test_breakindent07a()
+ " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
+ call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4')
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ab",
+! \ " ? m",
+! \ " ? x",
+! \ ]
+ call s:compare_lines(expect, lines)
+ " clean up
+ call s:close_windows('set sbr=')
+! endfunc
+!
+! func Test_breakindent07a_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " breakindent set and shift by 1, Number set sbr=? and briopt:sbr
+! call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 vts=4')
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ab",
+! \ " ? m",
+! \ " ? x",
+! \ ]
+! call s:compare_lines(expect, lines)
+! " clean up
+! call s:close_windows('set sbr= vts&')
+! endfunc
+
+! func Test_breakindent08()
+ " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
+ call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4')
+ " make sure, cache is invalidated!
+***************
+*** 148,190 ****
+ redraw!
+ set ts=4
+ redraw!
+! let lines=s:screen_lines(line('.'),10)
+! let expect=[
+! \ " 2 ^Iabcd",
+! \ "# opq",
+! \ "# BCD",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr= cpo-=n')
+! endfunction
+
+! function Test_breakindent08a()
+ " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
+ call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list')
+! let lines=s:screen_lines(line('.'),10)
+! let expect=[
+! \ " 2 ^Iabcd",
+! \ " # opq",
+! \ " # BCD",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr=')
+! endfunction
+
+! function Test_breakindent09()
+ " breakindent set and shift by 1, Number and list set sbr=#
+ call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list')
+! let lines=s:screen_lines(line('.'),10)
+! let expect=[
+! \ " 2 ^Iabcd",
+! \ " #op",
+! \ " #AB",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr=')
+! endfunction
+
+! function Test_breakindent10()
+ " breakindent set, Number set sbr=~
+ call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0')
+ " make sure, cache is invalidated!
+--- 280,375 ----
+ redraw!
+ set ts=4
+ redraw!
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ^Iabcd",
+! \ "# opq",
+! \ "# BCD",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr= cpo-=n')
+! endfunc
+
+! func Test_breakindent08_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
+! call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4 vts=4')
+! " make sure, cache is invalidated!
+! set ts=8
+! redraw!
+! set ts=4
+! redraw!
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ^Iabcd",
+! \ "# opq",
+! \ "# BCD",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set sbr= cpo-=n vts&')
+! endfunc
+!
+! func Test_breakindent08a()
+ " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
+ call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list')
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ^Iabcd",
+! \ " # opq",
+! \ " # BCD",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr=')
+! endfunc
+!
+! func Test_breakindent08a_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr
+! call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list vts=4')
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ^Iabcd",
+! \ " # opq",
+! \ " # BCD",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set sbr= vts&')
+! endfunc
+
+! func Test_breakindent09()
+ " breakindent set and shift by 1, Number and list set sbr=#
+ call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list')
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ^Iabcd",
+! \ " #op",
+! \ " #AB",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr=')
+! endfunc
+
+! func Test_breakindent09_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " breakindent set and shift by 1, Number and list set sbr=#
+! call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list vts=4')
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ^Iabcd",
+! \ " #op",
+! \ " #AB",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set sbr= vts&')
+! endfunc
+!
+! func Test_breakindent10()
+ " breakindent set, Number set sbr=~
+ call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0')
+ " make sure, cache is invalidated!
+***************
+*** 192,232 ****
+ redraw!
+ set ts=4
+ redraw!
+! let lines=s:screen_lines(line('.'),10)
+! let expect=[
+! \ " 2 ab",
+! \ "~ mn",
+! \ "~ yz",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr= cpo-=n')
+! endfunction
+
+! function Test_breakindent11()
+ " test strdisplaywidth()
+ call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4')
+! let text=getline(2)
+ let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times
+ call assert_equal(width, strdisplaywidth(text))
+ call s:close_windows('set sbr=')
+! endfunction
+
+! function Test_breakindent12()
+ " test breakindent with long indent
+! let s:input="\t\t\t\t\t{"
+ call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-')
+! let lines=s:screen_lines(2,16)
+! let expect=[
+! \ " 2 >--->--->--->",
+! \ " ---{ ",
+! \ "~ ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set nuw=4 listchars=')
+! endfunction
+
+! function Test_breakindent13()
+! let s:input=""
+ call s:test_windows('setl breakindent briopt=min:10 ts=8')
+ vert resize 20
+ call setline(1, [" a\tb\tc\td\te", " z y x w v"])
+--- 377,467 ----
+ redraw!
+ set ts=4
+ redraw!
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ab",
+! \ "~ mn",
+! \ "~ yz",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set sbr= cpo-=n')
+! endfunc
+
+! func Test_breakindent10_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " breakindent set, Number set sbr=~
+! call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0 vts=4')
+! " make sure, cache is invalidated!
+! set ts=8
+! redraw!
+! set ts=4
+! redraw!
+! let lines = s:screen_lines(line('.'),10)
+! let expect = [
+! \ " 2 ab",
+! \ "~ mn",
+! \ "~ yz",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set sbr= cpo-=n vts&')
+! endfunc
+!
+! func Test_breakindent11()
+ " test strdisplaywidth()
+ call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4')
+! let text = getline(2)
+ let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times
+ call assert_equal(width, strdisplaywidth(text))
+ call s:close_windows('set sbr=')
+! endfunc
+!
+! func Test_breakindent11_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " test strdisplaywidth()
+! call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4')
+! let text = getline(2)
+! let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times
+! call assert_equal(width, strdisplaywidth(text))
+! call s:close_windows('set sbr= vts&')
+! endfunc
+
+! func Test_breakindent12()
+ " test breakindent with long indent
+! let s:input = "\t\t\t\t\t{"
+ call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-')
+! let lines = s:screen_lines(2,16)
+! let expect = [
+! \ " 2 >--->--->--->",
+! \ " ---{ ",
+! \ "~ ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows('set nuw=4 listchars=')
+! endfunc
+
+! func Test_breakindent12_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " test breakindent with long indent
+! let s:input = "\t\t\t\t\t{"
+! call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>- vts=4')
+! let lines = s:screen_lines(2,16)
+! let expect = [
+! \ " 2 >--->--->--->",
+! \ " ---{ ",
+! \ "~ ",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set nuw=4 listchars= vts&')
+! endfunc
+!
+! func Test_breakindent13()
+! let s:input = ""
+ call s:test_windows('setl breakindent briopt=min:10 ts=8')
+ vert resize 20
+ call setline(1, [" a\tb\tc\td\te", " z y x w v"])
+***************
+*** 237,298 ****
+ call assert_equal('d', @a)
+ call assert_equal('w', @b)
+ call s:close_windows()
+! endfunction
+
+! function Test_breakindent14()
+! let s:input=""
+ call s:test_windows('setl breakindent briopt= ts=8')
+ vert resize 30
+ norm! 3a1234567890
+ norm! a abcde
+ exec "norm! 0\<C-V>tex"
+! let lines=s:screen_lines(line('.'),8)
+! let expect=[
+! \ "e ",
+! \ "~ ",
+! \ "~ ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunction
+
+! function Test_breakindent15()
+! let s:input=""
+ call s:test_windows('setl breakindent briopt= ts=8 sw=8')
+ vert resize 30
+ norm! 4a1234567890
+ exe "normal! >>\<C-V>3f0x"
+! let lines=s:screen_lines(line('.'),20)
+! let expect=[
+! \ " 1234567890 ",
+! \ "~ ",
+! \ "~ ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunction
+
+! function Test_breakindent16()
+ " Check that overlong lines are indented correctly.
+! let s:input=""
+ call s:test_windows('setl breakindent briopt=min:0 ts=4')
+ call setline(1, "\t".repeat("1234567890", 10))
+ resize 6
+ norm! 1gg$
+ redraw!
+! let lines=s:screen_lines(1,10)
+! let expect=[
+! \ " 789012",
+! \ " 345678",
+! \ " 901234",
+! \ ]
+! call s:compare_lines(expect, lines)
+! let lines=s:screen_lines(4,10)
+! let expect=[
+! \ " 567890",
+! \ " 123456",
+! \ " 7890 ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunction
+--- 472,617 ----
+ call assert_equal('d', @a)
+ call assert_equal('w', @b)
+ call s:close_windows()
+! endfunc
+
+! func Test_breakindent13_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! let s:input = ""
+! call s:test_windows('setl breakindent briopt=min:10 ts=8 vts=8')
+! vert resize 20
+! call setline(1, [" a\tb\tc\td\te", " z y x w v"])
+! 1
+! norm! fbgj"ayl
+! 2
+! norm! fygj"byl
+! call assert_equal('d', @a)
+! call assert_equal('w', @b)
+! call s:close_windows('set vts&')
+! endfunc
+!
+! func Test_breakindent14()
+! let s:input = ""
+ call s:test_windows('setl breakindent briopt= ts=8')
+ vert resize 30
+ norm! 3a1234567890
+ norm! a abcde
+ exec "norm! 0\<C-V>tex"
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ "e ",
+! \ "~ ",
+! \ "~ ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunc
+!
+! func Test_breakindent14_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! let s:input = ""
+! call s:test_windows('setl breakindent briopt= ts=8 vts=8')
+! vert resize 30
+! norm! 3a1234567890
+! norm! a abcde
+! exec "norm! 0\<C-V>tex"
+! let lines = s:screen_lines(line('.'),8)
+! let expect = [
+! \ "e ",
+! \ "~ ",
+! \ "~ ",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set vts&')
+! endfunc
+
+! func Test_breakindent15()
+! let s:input = ""
+ call s:test_windows('setl breakindent briopt= ts=8 sw=8')
+ vert resize 30
+ norm! 4a1234567890
+ exe "normal! >>\<C-V>3f0x"
+! let lines = s:screen_lines(line('.'),20)
+! let expect = [
+! \ " 1234567890 ",
+! \ "~ ",
+! \ "~ ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunc
+!
+! func Test_breakindent15_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! let s:input = ""
+! call s:test_windows('setl breakindent briopt= ts=8 sw=8 vts=8')
+! vert resize 30
+! norm! 4a1234567890
+! exe "normal! >>\<C-V>3f0x"
+! let lines = s:screen_lines(line('.'),20)
+! let expect = [
+! \ " 1234567890 ",
+! \ "~ ",
+! \ "~ ",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set vts&')
+! endfunc
+
+! func Test_breakindent16()
+ " Check that overlong lines are indented correctly.
+! let s:input = ""
+ call s:test_windows('setl breakindent briopt=min:0 ts=4')
+ call setline(1, "\t".repeat("1234567890", 10))
+ resize 6
+ norm! 1gg$
+ redraw!
+! let lines = s:screen_lines(1,10)
+! let expect = [
+! \ " 789012",
+! \ " 345678",
+! \ " 901234",
+! \ ]
+! call s:compare_lines(expect, lines)
+! let lines = s:screen_lines(4,10)
+! let expect = [
+! \ " 567890",
+! \ " 123456",
+! \ " 7890 ",
+! \ ]
+ call s:compare_lines(expect, lines)
+ call s:close_windows()
+! endfunc
+!
+! func Test_breakindent16_vartabs()
+! if !has("vartabs")
+! return
+! endif
+! " Check that overlong lines are indented correctly.
+! let s:input = ""
+! call s:test_windows('setl breakindent briopt=min:0 ts=4 vts=4')
+! call setline(1, "\t".repeat("1234567890", 10))
+! resize 6
+! norm! 1gg$
+! redraw!
+! let lines = s:screen_lines(1,10)
+! let expect = [
+! \ " 789012",
+! \ " 345678",
+! \ " 901234",
+! \ ]
+! call s:compare_lines(expect, lines)
+! let lines = s:screen_lines(4,10)
+! let expect = [
+! \ " 567890",
+! \ " 123456",
+! \ " 7890 ",
+! \ ]
+! call s:compare_lines(expect, lines)
+! call s:close_windows('set vts&')
+! endfunc
+*** ../vim-8.1.0104/src/testdir/test_vartabs.vim 2018-06-23 19:18:52.740059396 +0200
+--- src/testdir/test_vartabs.vim 2018-06-23 18:05:31.387656858 +0200
+***************
+*** 0 ****
+--- 1,257 ----
++ " Test for variable tabstops
++
++ if !has("vartabs")
++ finish
++ endif
++
++ func! Test_vartabs()
++ new
++ %d
++
++ " Test normal operation of tabstops ...
++ set ts=4
++ call setline(1, join(split('aaaaa', '\zs'), "\t"))
++ retab 8
++ let expect = "a a\<tab>a a\<tab>a"
++ call assert_equal(expect, getline(1))
++
++ " ... and softtabstops
++ set ts=8 sts=6
++ exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b"
++ let expect = "b b\<tab> b\<tab> b\<tab>b"
++ call assert_equal(expect, getline(1))
++
++ " Test variable tabstops.
++ set sts=0 vts=4,8,4,8
++ exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c"
++ retab 8
++ let expect = "c c\<tab> c\<tab>c\<tab>c\<tab>c"
++ call assert_equal(expect, getline(1))
++
++ set et vts=4,8,4,8
++ exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d"
++ let expect = "d d d d d d"
++ call assert_equal(expect, getline(1))
++
++ " Changing ts should have no effect if vts is in use.
++ call cursor(1, 1)
++ set ts=6
++ exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e"
++ let expect = "e e e e e e"
++ call assert_equal(expect, getline(1))
++
++ " Clearing vts should revert to using ts.
++ set vts=
++ exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f"
++ let expect = "f f f f f f"
++ call assert_equal(expect, getline(1))
++
++ " Test variable softtabstops.
++ set noet ts=8 vsts=12,2,6
++ exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g"
++ let expect = "g\<tab> g g\<tab> g\<tab> g\<tab>g"
++ call assert_equal(expect, getline(1))
++
++ " Variable tabstops and softtabstops combined.
++ set vsts=6,12,8 vts=4,6,8
++ exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h"
++ let expect = "h\<tab> h\<tab>\<tab>h\<tab>h\<tab>h"
++ call assert_equal(expect, getline(1))
++
++ " Retab with a single value, not using vts.
++ set ts=8 sts=0 vts= vsts=
++ exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i"
++ retab 4
++ let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i"
++ call assert_equal(expect, getline(1))
++
++ " Retab with a single value, using vts.
++ set ts=8 sts=0 vts=6 vsts=
++ exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j"
++ retab 4
++ let expect = "j\<tab> j\<tab>\<tab>j\<tab> j\<tab>\<tab>j"
++ call assert_equal(expect, getline(1))
++
++ " Retab with multiple values, not using vts.
++ set ts=6 sts=0 vts= vsts=
++ exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k"
++ retab 4,8
++ let expect = "k\<tab> k\<tab>k k\<tab> k\<tab> k"
++ call assert_equal(expect, getline(1))
++
++ " Retab with multiple values, using vts.
++ set ts=8 sts=0 vts=6 vsts=
++ exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l"
++ retab 4,8
++ let expect = "l\<tab> l\<tab>l l\<tab> l\<tab> l"
++ call assert_equal(expect, getline(1))
++
++ " Check that global and local values are set.
++ set ts=4 vts=6 sts=8 vsts=10
++ call assert_equal(&ts, 4)
++ call assert_equal(&vts, '6')
++ call assert_equal(&sts, 8)
++ call assert_equal(&vsts, '10')
++ new
++ call assert_equal(&ts, 4)
++ call assert_equal(&vts, '6')
++ call assert_equal(&sts, 8)
++ call assert_equal(&vsts, '10')
++ bwipeout!
++
++ " Check that local values only are set.
++ setlocal ts=5 vts=7 sts=9 vsts=11
++ call assert_equal(&ts, 5)
++ call assert_equal(&vts, '7')
++ call assert_equal(&sts, 9)
++ call assert_equal(&vsts, '11')
++ new
++ call assert_equal(&ts, 4)
++ call assert_equal(&vts, '6')
++ call assert_equal(&sts, 8)
++ call assert_equal(&vsts, '10')
++ bwipeout!
++
++ " Check that global values only are set.
++ setglobal ts=6 vts=8 sts=10 vsts=12
++ call assert_equal(&ts, 5)
++ call assert_equal(&vts, '7')
++ call assert_equal(&sts, 9)
++ call assert_equal(&vsts, '11')
++ new
++ call assert_equal(&ts, 6)
++ call assert_equal(&vts, '8')
++ call assert_equal(&sts, 10)
++ call assert_equal(&vsts, '12')
++ bwipeout!
++
++ set ts& vts& sts& vsts& et&
++ bwipeout!
++ endfunc
++
++ func! Test_vartabs_breakindent()
++ if !exists("+breakindent")
++ return
++ endif
++ new
++ %d
++
++ " Test normal operation of tabstops ...
++ set ts=4
++ call setline(1, join(split('aaaaa', '\zs'), "\t"))
++ retab 8
++ let expect = "a a\<tab>a a\<tab>a"
++ call assert_equal(expect, getline(1))
++
++ " ... and softtabstops
++ set ts=8 sts=6
++ exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b"
++ let expect = "b b\<tab> b\<tab> b\<tab>b"
++ call assert_equal(expect, getline(1))
++
++ " Test variable tabstops.
++ set sts=0 vts=4,8,4,8
++ exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c"
++ retab 8
++ let expect = "c c\<tab> c\<tab>c\<tab>c\<tab>c"
++ call assert_equal(expect, getline(1))
++
++ set et vts=4,8,4,8
++ exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d"
++ let expect = "d d d d d d"
++ call assert_equal(expect, getline(1))
++
++ " Changing ts should have no effect if vts is in use.
++ call cursor(1, 1)
++ set ts=6
++ exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e"
++ let expect = "e e e e e e"
++ call assert_equal(expect, getline(1))
++
++ " Clearing vts should revert to using ts.
++ set vts=
++ exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f"
++ let expect = "f f f f f f"
++ call assert_equal(expect, getline(1))
++
++ " Test variable softtabstops.
++ set noet ts=8 vsts=12,2,6
++ exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g"
++ let expect = "g\<tab> g g\<tab> g\<tab> g\<tab>g"
++ call assert_equal(expect, getline(1))
++
++ " Variable tabstops and softtabstops combined.
++ set vsts=6,12,8 vts=4,6,8
++ exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h"
++ let expect = "h\<tab> h\<tab>\<tab>h\<tab>h\<tab>h"
++ call assert_equal(expect, getline(1))
++
++ " Retab with a single value, not using vts.
++ set ts=8 sts=0 vts= vsts=
++ exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i"
++ retab 4
++ let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i"
++ call assert_equal(expect, getline(1))
++
++ " Retab with a single value, using vts.
++ set ts=8 sts=0 vts=6 vsts=
++ exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j"
++ retab 4
++ let expect = "j\<tab> j\<tab>\<tab>j\<tab> j\<tab>\<tab>j"
++ call assert_equal(expect, getline(1))
++
++ " Retab with multiple values, not using vts.
++ set ts=6 sts=0 vts= vsts=
++ exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k"
++ retab 4,8
++ let expect = "k\<tab> k\<tab>k k\<tab> k\<tab> k"
++ call assert_equal(expect, getline(1))
++
++ " Retab with multiple values, using vts.
++ set ts=8 sts=0 vts=6 vsts=
++ exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l"
++ retab 4,8
++ let expect = "l\<tab> l\<tab>l l\<tab> l\<tab> l"
++ call assert_equal(expect, getline(1))
++
++ " Check that global and local values are set.
++ set ts=4 vts=6 sts=8 vsts=10
++ call assert_equal(&ts, 4)
++ call assert_equal(&vts, '6')
++ call assert_equal(&sts, 8)
++ call assert_equal(&vsts, '10')
++ new
++ call assert_equal(&ts, 4)
++ call assert_equal(&vts, '6')
++ call assert_equal(&sts, 8)
++ call assert_equal(&vsts, '10')
++ bwipeout!
++
++ " Check that local values only are set.
++ setlocal ts=5 vts=7 sts=9 vsts=11
++ call assert_equal(&ts, 5)
++ call assert_equal(&vts, '7')
++ call assert_equal(&sts, 9)
++ call assert_equal(&vsts, '11')
++ new
++ call assert_equal(&ts, 4)
++ call assert_equal(&vts, '6')
++ call assert_equal(&sts, 8)
++ call assert_equal(&vsts, '10')
++ bwipeout!
++
++ " Check that global values only are set.
++ setglobal ts=6 vts=8 sts=10 vsts=12
++ call assert_equal(&ts, 5)
++ call assert_equal(&vts, '7')
++ call assert_equal(&sts, 9)
++ call assert_equal(&vsts, '11')
++ new
++ call assert_equal(&ts, 6)
++ call assert_equal(&vts, '8')
++ call assert_equal(&sts, 10)
++ call assert_equal(&vsts, '12')
++ bwipeout!
++
++ bwipeout!
++ endfunc
+*** ../vim-8.1.0104/src/version.c 2018-06-23 17:14:36.801909989 +0200
+--- src/version.c 2018-06-23 19:18:18.788276086 +0200
+***************
+*** 677,682 ****
+--- 677,687 ----
+ #else
+ "-user_commands",
+ #endif
++ #ifdef FEAT_VARTABS
++ "+vartabs",
++ #else
++ "-vartabs",
++ #endif
+ "+vertsplit",
+ #ifdef FEAT_VIRTUALEDIT
+ "+virtualedit",
+*** ../vim-8.1.0104/src/workshop.c 2017-11-18 21:10:42.000000000 +0100
+--- src/workshop.c 2018-06-23 17:41:10.116365995 +0200
+***************
+*** 49,55 ****
+--- 49,59 ----
+ static void warp_to_pc(int);
+ #ifdef FEAT_BEVAL_GUI
+ void workshop_beval_cb(BalloonEval *, int);
++ # ifdef FEAT_VARTABS
++ static int computeIndex(int, char_u *, int, int *);
++ # else
+ static int computeIndex(int, char_u *, int);
++ # endif
+ #endif
+ static char *fixAccelText(char *);
+ static void addMenu(char *, char *, char *);
+***************
+*** 1534,1540 ****
+--- 1538,1548 ----
+ * a column number. Compute the index from col. Also set
+ * line to 0 because thats what dbx expects.
+ */
++ #ifdef FEAT_VARTABS
++ idx = computeIndex(col, text, beval->ts, beval->vts);
++ #else
+ idx = computeIndex(col, text, beval->ts);
++ #endif
+ if (idx > 0)
+ {
+ lnum = 0;
+***************
+*** 1569,1575 ****
+ computeIndex(
+ int wantedCol,
+ char_u *line,
+! int ts)
+ {
+ int col = 0;
+ int idx = 0;
+--- 1577,1587 ----
+ computeIndex(
+ int wantedCol,
+ char_u *line,
+! int ts
+! #ifdef FEAT_VARTABS
+! int *vts
+! #else
+! )
+ {
+ int col = 0;
+ int idx = 0;
+***************
+*** 1577,1583 ****
+--- 1589,1599 ----
+ while (line[idx])
+ {
+ if (line[idx] == '\t')
++ #ifdef FEAT_VARTABS
++ col += tabstop_padding(col, ts, vts);
++ #else
+ col += ts - (col % ts);
++ #endif
+ else
+ col++;
+ idx++;
+*** ../vim-8.1.0104/src/Makefile 2018-06-03 14:42:17.836505122 +0200
+--- src/Makefile 2018-06-23 18:09:24.498279403 +0200
+***************
+*** 2305,2310 ****
+--- 2305,2311 ----
+ test_usercommands \
+ test_utf8 \
+ test_utf8_comparisons \
++ test_vartabs \
+ test_viminfo \
+ test_vimscript \
+ test_virtualedit \
+*** ../vim-8.1.0104/src/version.c 2018-06-23 17:14:36.801909989 +0200
+--- src/version.c 2018-06-23 19:18:18.788276086 +0200
+***************
+*** 780,781 ****
+--- 785,788 ----
+ { /* Add new patch number below this line */
++ /**/
++ 105,
+ /**/
+
+--
+# echo reboot >universe
+# chmod +x universe
+# ./universe
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0106 b/data/vim/patches/8.1.0106
new file mode 100644
index 000000000..af7b56a3c
--- /dev/null
+++ b/data/vim/patches/8.1.0106
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0106
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0106 (after 8.1.0103)
+Problem: Build fails when HAVE_DATE_TIME is undefined.
+Solution: Always define init_longVersion(). (Christian Brabandt,
+ closes #3075)
+Files: src/version.c
+
+
+*** ../vim-8.1.0105/src/version.c 2018-06-23 19:22:45.618486231 +0200
+--- src/version.c 2018-06-24 14:44:21.454379055 +0200
+***************
+*** 71,76 ****
+--- 71,82 ----
+ # endif
+ #else
+ char *longVersion = VIM_VERSION_LONG;
++
++ void
++ init_longVersion(void)
++ {
++ // nothing to do
++ }
+ #endif
+
+ static void list_features(void);
+*** ../vim-8.1.0105/src/version.c 2018-06-23 19:22:45.618486231 +0200
+--- src/version.c 2018-06-24 14:44:21.454379055 +0200
+***************
+*** 785,786 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 106,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+97. Your mother tells you to remember something, and you look for
+ a File/Save command.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0107 b/data/vim/patches/8.1.0107
new file mode 100644
index 000000000..4f0262d36
--- /dev/null
+++ b/data/vim/patches/8.1.0107
@@ -0,0 +1,93 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0107
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0107
+Problem: Python: getting buffer option clears message. (Jacob Niehus)
+Solution: Don't use aucmd_prepbuf(). (closes #3079)
+Files: src/option.c
+
+
+*** ../vim-8.1.0106/src/option.c 2018-06-23 19:22:45.614486258 +0200
+--- src/option.c 2018-06-24 15:13:42.200150566 +0200
+***************
+*** 9692,9698 ****
+ * consider it set when 'ff' or 'fenc' changed. */
+ if (p->indir == PV_MOD)
+ {
+! *numval = bufIsChanged((buf_T *) from);
+ varp = NULL;
+ }
+ #ifdef FEAT_CRYPT
+--- 9692,9698 ----
+ * consider it set when 'ff' or 'fenc' changed. */
+ if (p->indir == PV_MOD)
+ {
+! *numval = bufIsChanged((buf_T *)from);
+ varp = NULL;
+ }
+ #ifdef FEAT_CRYPT
+***************
+*** 9705,9721 ****
+ #endif
+ else
+ {
+! aco_save_T aco;
+! aucmd_prepbuf(&aco, (buf_T *) from);
+ varp = get_varp(p);
+! aucmd_restbuf(&aco);
+ }
+ }
+ else if (opt_type == SREQ_WIN)
+ {
+! win_T *save_curwin;
+! save_curwin = curwin;
+! curwin = (win_T *) from;
+ curbuf = curwin->w_buffer;
+ varp = get_varp(p);
+ curwin = save_curwin;
+--- 9705,9725 ----
+ #endif
+ else
+ {
+! buf_T *save_curbuf = curbuf;
+!
+! // only getting a pointer, no need to use aucmd_prepbuf()
+! curbuf = (buf_T *)from;
+! curwin->w_buffer = curbuf;
+ varp = get_varp(p);
+! curbuf = save_curbuf;
+! curwin->w_buffer = curbuf;
+ }
+ }
+ else if (opt_type == SREQ_WIN)
+ {
+! win_T *save_curwin = curwin;
+!
+! curwin = (win_T *)from;
+ curbuf = curwin->w_buffer;
+ varp = get_varp(p);
+ curwin = save_curwin;
+*** ../vim-8.1.0106/src/version.c 2018-06-24 14:44:42.282243290 +0200
+--- src/version.c 2018-06-24 15:11:21.536911391 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 107,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+99. The hum of a cooling fan and the click of keys is comforting to you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0108 b/data/vim/patches/8.1.0108
new file mode 100644
index 000000000..13a497324
--- /dev/null
+++ b/data/vim/patches/8.1.0108
@@ -0,0 +1,7847 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0108
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0108
+Problem: No Danish translations.
+Solution: Add Danish message translations. (closes #3073) Move list of
+ languages to a common makefile.
+Files: src/po/Makefile, src/po/Make_cyg.mak, src/po/Make_mvc.mak,
+ src/po/Make_ming.mak, src/po/Make_all.mak, src/po/da.po
+
+
+*** ../vim-8.1.0107/src/po/Makefile 2018-04-29 12:09:57.000000000 +0200
+--- src/po/Makefile 2018-06-24 15:50:59.192329630 +0200
+***************
+*** 3,138 ****
+ # Include stuff found by configure.
+ include ../auto/config.mk
+
+! # TODO make this configurable
+ # Note: ja.sjis, *.cp1250 and zh_CN.cp936 are only for MS-Windows, they are
+ # not installed on Unix
+
+- LANGUAGES = \
+- af \
+- ca \
+- cs \
+- de \
+- en_GB \
+- eo \
+- es \
+- fi \
+- fr \
+- ga \
+- it \
+- ja \
+- ko \
+- ko.UTF-8 \
+- lv \
+- nb \
+- nl \
+- no \
+- pl \
+- pt_BR \
+- ru \
+- sk \
+- sr \
+- sv \
+- uk \
+- vi \
+- zh_CN \
+- zh_CN.UTF-8 \
+- zh_TW \
+- zh_TW.UTF-8
+-
+- CONVERTED = \
+- cs.cp1250 \
+- ja.sjis \
+- ja.euc-jp \
+- pl.cp1250 \
+- pl.UTF-8 \
+- ru.cp1251 \
+- sk.cp1250 \
+- uk.cp1251 \
+- zh_CN.cp936
+-
+- MOFILES = \
+- af.mo \
+- ca.mo \
+- cs.mo \
+- de.mo \
+- en_GB.mo \
+- eo.mo \
+- es.mo \
+- fi.mo \
+- fr.mo \
+- ga.mo \
+- it.mo \
+- ja.mo \
+- ko.mo \
+- ko.UTF-8.mo \
+- lv.mo \
+- nb.mo \
+- nl.mo \
+- no.mo \
+- pl.mo \
+- pt_BR.mo \
+- ru.mo \
+- sk.mo \
+- sr.mo \
+- sv.mo \
+- uk.mo \
+- vi.mo \
+- zh_CN.UTF-8.mo \
+- zh_CN.mo \
+- zh_TW.UTF-8.mo \
+- zh_TW.mo
+-
+- MOCONVERTED = \
+- cs.cp1250.mo \
+- ja.sjis.mo \
+- ja.euc-jp.mo \
+- pl.cp1250.mo \
+- pl.UTF-8.mo \
+- ru.cp1251.mo \
+- sk.cp1250.mo \
+- uk.cp1251.mo \
+- zh_CN.cp936.mo
+-
+- CHECKFILES = \
+- af.ck \
+- ca.ck \
+- cs.ck \
+- de.ck \
+- en_GB.ck \
+- eo.ck \
+- es.ck \
+- fi.ck \
+- fr.ck \
+- ga.ck \
+- it.ck \
+- ja.ck \
+- ko.ck \
+- ko.UTF-8.ck \
+- nb.ck \
+- nl.ck \
+- no.ck \
+- pl.ck \
+- pt_BR.ck \
+- ru.ck \
+- sk.ck \
+- sr.ck \
+- sv.ck \
+- uk.ck \
+- vi.ck \
+- zh_CN.UTF-8.ck \
+- zh_CN.ck \
+- zh_TW.UTF-8.ck \
+- zh_TW.ck \
+- cs.cp1250.ck \
+- ja.sjis.ck \
+- ja.euc-jp.ck \
+- pl.cp1250.ck \
+- pl.UTF-8.ck \
+- ru.cp1251.ck \
+- sk.cp1250.ck \
+- uk.cp1251.ck \
+- zh_CN.cp936.ck
+-
+ PACKAGE = vim
+ SHELL = /bin/sh
+ VIM = ../vim
+--- 3,14 ----
+ # Include stuff found by configure.
+ include ../auto/config.mk
+
+! # get LANGUAGES, MOFILES, MOCONVERTED and CHECKFILES
+! include Make_all.mak
+!
+ # Note: ja.sjis, *.cp1250 and zh_CN.cp936 are only for MS-Windows, they are
+ # not installed on Unix
+
+ PACKAGE = vim
+ SHELL = /bin/sh
+ VIM = ../vim
+***************
+*** 147,153 ****
+
+ .SUFFIXES:
+ .SUFFIXES: .po .mo .pot .ck
+! .PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) $(CONVERTED)
+
+ .po.mo:
+ $(MSGFMTCMD) -o $@ $<
+--- 23,29 ----
+
+ .SUFFIXES:
+ .SUFFIXES: .po .mo .pot .ck
+! .PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES)
+
+ .po.mo:
+ $(MSGFMTCMD) -o $@ $<
+***************
+*** 162,168 ****
+
+ install: $(MOFILES) $(MOCONVERTED)
+ @$(MAKE) prefixcheck
+! for lang in $(LANGUAGES) $(CONVERTED); do \
+ dir=$(LOCALEDIR)/$$lang/; \
+ if test ! -x "$$dir"; then \
+ mkdir $$dir; chmod 755 $$dir; \
+--- 38,44 ----
+
+ install: $(MOFILES) $(MOCONVERTED)
+ @$(MAKE) prefixcheck
+! for lang in $(LANGUAGES); do \
+ dir=$(LOCALEDIR)/$$lang/; \
+ if test ! -x "$$dir"; then \
+ mkdir $$dir; chmod 755 $$dir; \
+***************
+*** 257,269 ****
+ ru.cp1251.po: ru.po
+ rm -f ru.cp1251.po
+ iconv -f utf-8 -t cp1251 ru.po | \
+! sed -e 's/charset=utf-8/charset=cp1251/' -e 's/# Original translations/# Generated from ru.po, DO NOT EDIT/' > ru.cp1251.po
+
+ # Convert uk.po to create uk.cp1251.po.
+ uk.cp1251.po: uk.po
+ rm -f uk.cp1251.po
+ iconv -f utf-8 -t cp1251 uk.po | \
+! sed -e 's/charset=utf-8/charset=cp1251/' -e 's/# Original translations/# Generated from uk.po, DO NOT EDIT/' > uk.cp1251.po
+
+ prefixcheck:
+ @if test "x" = "x$(prefix)"; then \
+--- 133,145 ----
+ ru.cp1251.po: ru.po
+ rm -f ru.cp1251.po
+ iconv -f utf-8 -t cp1251 ru.po | \
+! sed -e 's/charset=[uU][tT][fF]-8/charset=cp1251/' -e 's/# Original translations/# Generated from ru.po, DO NOT EDIT/' > ru.cp1251.po
+
+ # Convert uk.po to create uk.cp1251.po.
+ uk.cp1251.po: uk.po
+ rm -f uk.cp1251.po
+ iconv -f utf-8 -t cp1251 uk.po | \
+! sed -e 's/charset=[uU][tT][fF]-8/charset=cp1251/' -e 's/# Original translations/# Generated from uk.po, DO NOT EDIT/' > uk.cp1251.po
+
+ prefixcheck:
+ @if test "x" = "x$(prefix)"; then \
+*** ../vim-8.1.0107/src/po/Make_cyg.mak 2018-04-29 12:09:57.000000000 +0200
+--- src/po/Make_cyg.mak 2018-06-24 15:41:25.979639598 +0200
+***************
+*** 12,96 ****
+ VIMRUNTIME = ../../runtime
+ endif
+
+! LANGUAGES = \
+! af \
+! ca \
+! cs \
+! cs.cp1250 \
+! de \
+! en_GB \
+! eo \
+! es \
+! fi \
+! fr \
+! ga \
+! it \
+! ja \
+! ja.euc-jp \
+! ja.sjis \
+! ko \
+! ko.UTF-8 \
+! nb \
+! nl \
+! no \
+! pl \
+! pl.cp1250 \
+! pl.UTF-8 \
+! pt_BR \
+! ru \
+! ru.cp1251 \
+! sk \
+! sk.cp1250 \
+! sr \
+! sv \
+! uk \
+! uk.cp1251 \
+! vi \
+! zh_CN \
+! zh_CN.cp936 \
+! zh_CN.UTF-8 \
+! zh_TW \
+! zh_TW.UTF-8 \
+!
+! MOFILES = \
+! af.mo \
+! ca.mo \
+! cs.cp1250.mo \
+! cs.mo \
+! de.mo \
+! en_GB.mo \
+! eo.mo \
+! es.mo \
+! fi.mo \
+! fr.mo \
+! ga.mo \
+! it.mo \
+! ja.euc-jp.mo \
+! ja.mo \
+! ja.sjis.mo \
+! ko.mo \
+! ko.UTF-8.mo \
+! nb.mo \
+! nl.mo \
+! no.mo \
+! pl.cp1250.mo \
+! pl.mo \
+! pl.UTF-8.mo \
+! pt_BR.mo \
+! ru.cp1251.mo \
+! ru.mo \
+! sk.cp1250.mo \
+! sk.mo \
+! sr.mo \
+! sv.mo \
+! uk.cp1251.mo \
+! uk.mo \
+! vi.mo \
+! zh_CN.mo \
+! zh_CN.cp936.mo \
+! zh_CN.UTF-8.mo \
+! zh_TW.mo \
+! zh_TW.UTF-8.mo \
+
+ PACKAGE = vim
+
+--- 12,19 ----
+ VIMRUNTIME = ../../runtime
+ endif
+
+! # get LANGUAGES, MOFILES and MOCONVERTED
+! include Make_all.mak
+
+ PACKAGE = vim
+
+***************
+*** 126,132 ****
+ .po.mo:
+ $(MSGFMT) -o $@ $<
+
+! all: $(MOFILES)
+
+ first_time:
+ $(XGETTEXT) --default-domain=$(LANGUAGE) \
+--- 49,55 ----
+ .po.mo:
+ $(MSGFMT) -o $@ $<
+
+! all: $(MOFILES) $(MOCONVERTED)
+
+ first_time:
+ $(XGETTEXT) --default-domain=$(LANGUAGE) \
+***************
+*** 141,147 ****
+ $(MSGMERGE) $@.po.old $(PACKAGE).pot -o $@.po
+ $(RM) $@.po.old
+
+! install: $(MOFILES)
+ for TARGET in $(LANGUAGES); do \
+ $(MKD) $(VIMRUNTIME)/lang/$$TARGET/LC_MESSAGES ; \
+ $(CP) $$TARGET.mo $(VIMRUNTIME)/lang/$$TARGET/LC_MESSAGES/$(PACKAGE).mo ; \
+--- 64,70 ----
+ $(MSGMERGE) $@.po.old $(PACKAGE).pot -o $@.po
+ $(RM) $@.po.old
+
+! install: $(MOFILES) $(MOCONVERTED)
+ for TARGET in $(LANGUAGES); do \
+ $(MKD) $(VIMRUNTIME)/lang/$$TARGET/LC_MESSAGES ; \
+ $(CP) $$TARGET.mo $(VIMRUNTIME)/lang/$$TARGET/LC_MESSAGES/$(PACKAGE).mo ; \
+*** ../vim-8.1.0107/src/po/Make_mvc.mak 2018-04-29 12:09:57.000000000 +0200
+--- src/po/Make_mvc.mak 2018-06-24 15:42:00.171455825 +0200
+***************
+*** 10,94 ****
+ VIMRUNTIME = ..\..\runtime
+ !endif
+
+! LANGUAGES = \
+! af \
+! ca \
+! cs \
+! cs.cp1250 \
+! de \
+! en_GB \
+! eo \
+! es \
+! fi \
+! fr \
+! ga \
+! it \
+! ja \
+! ja.euc-jp \
+! ja.sjis \
+! ko \
+! ko.UTF-8 \
+! nb \
+! nl \
+! no \
+! pl \
+! pl.cp1250 \
+! pl.UTF-8 \
+! pt_BR \
+! ru \
+! ru.cp1251 \
+! sk \
+! sk.cp1250 \
+! sr \
+! sv \
+! uk \
+! uk.cp1251 \
+! vi \
+! zh_CN \
+! zh_CN.cp936 \
+! zh_CN.UTF-8 \
+! zh_TW \
+! zh_TW.UTF-8 \
+!
+! MOFILES = \
+! af.mo \
+! ca.mo \
+! cs.cp1250.mo \
+! cs.mo \
+! de.mo \
+! en_GB.mo \
+! eo.mo \
+! es.mo \
+! fi.mo \
+! fr.mo \
+! ga.mo \
+! it.mo \
+! ja.euc-jp.mo \
+! ja.mo \
+! ja.sjis.mo \
+! ko.mo \
+! ko.UTF-8.mo \
+! nb.mo \
+! nl.mo \
+! no.mo \
+! pl.cp1250.mo \
+! pl.mo \
+! pl.UTF-8.mo \
+! pt_BR.mo \
+! ru.cp1251.mo \
+! ru.mo \
+! sk.cp1250.mo \
+! sk.mo \
+! sr.mo \
+! sv.mo \
+! uk.cp1251.mo \
+! uk.mo \
+! vi.mo \
+! zh_CN.mo \
+! zh_CN.cp936.mo \
+! zh_CN.UTF-8.mo \
+! zh_TW.mo \
+! zh_TW.UTF-8.mo \
+
+ PACKAGE = vim
+
+--- 10,17 ----
+ VIMRUNTIME = ..\..\runtime
+ !endif
+
+! # get LANGUAGES, MOFILES and MOCONVERTED
+! !include Make_all.mak
+
+ PACKAGE = vim
+
+***************
+*** 116,122 ****
+ set OLD_PO_FILE_INPUT=yes
+ $(MSGFMT) -o $@ $<
+
+! all: $(MOFILES)
+
+ files:
+ $(LS) $(LSFLAGS) ..\*.c ..\if_perl.xs ..\GvimExt\gvimext.cpp ..\globals.h ..\if_py_both.h ..\vim.h > .\files
+--- 39,45 ----
+ set OLD_PO_FILE_INPUT=yes
+ $(MSGFMT) -o $@ $<
+
+! all: $(MOFILES) $(MOCONVERTED)
+
+ files:
+ $(LS) $(LSFLAGS) ..\*.c ..\if_perl.xs ..\GvimExt\gvimext.cpp ..\globals.h ..\if_py_both.h ..\vim.h > .\files
+*** ../vim-8.1.0107/src/po/Make_ming.mak 2018-04-29 12:09:57.000000000 +0200
+--- src/po/Make_ming.mak 2018-06-24 15:41:39.523566813 +0200
+***************
+*** 18,102 ****
+ endif
+ endif
+
+! LANGUAGES = \
+! af \
+! ca \
+! cs \
+! cs.cp1250 \
+! de \
+! en_GB \
+! eo \
+! es \
+! fi \
+! fr \
+! ga \
+! it \
+! ja \
+! ja.euc-jp \
+! ja.sjis \
+! ko \
+! ko.UTF-8 \
+! nb \
+! nl \
+! no \
+! pl \
+! pl.cp1250 \
+! pl.UTF-8 \
+! pt_BR \
+! ru \
+! ru.cp1251 \
+! sk \
+! sk.cp1250 \
+! sr \
+! sv \
+! uk \
+! uk.cp1251 \
+! vi \
+! zh_CN \
+! zh_CN.cp936 \
+! zh_CN.UTF-8 \
+! zh_TW \
+! zh_TW.UTF-8 \
+!
+! MOFILES = \
+! af.mo \
+! ca.mo \
+! cs.cp1250.mo \
+! cs.mo \
+! de.mo \
+! en_GB.mo \
+! eo.mo \
+! es.mo \
+! fi.mo \
+! fr.mo \
+! ga.mo \
+! it.mo \
+! ja.euc-jp.mo \
+! ja.mo \
+! ja.sjis.mo \
+! ko.mo \
+! ko.UTF-8.mo \
+! nb.mo \
+! nl.mo \
+! no.mo \
+! pl.cp1250.mo \
+! pl.mo \
+! pl.UTF-8.mo \
+! pt_BR.mo \
+! ru.cp1251.mo \
+! ru.mo \
+! sk.cp1250.mo \
+! sk.mo \
+! sr.mo \
+! sv.mo \
+! uk.cp1251.mo \
+! uk.mo \
+! vi.mo \
+! zh_CN.mo \
+! zh_CN.cp936.mo \
+! zh_CN.UTF-8.mo \
+! zh_TW.mo \
+! zh_TW.UTF-8.mo \
+
+ PACKAGE = vim
+
+--- 18,25 ----
+ endif
+ endif
+
+! # get LANGUAGES, MOFILES and MOCONVERTED
+! include Make_all.mak
+
+ PACKAGE = vim
+
+***************
+*** 135,141 ****
+ .po.mo:
+ $(MSGFMT) -o $@ $<
+
+! all: $(MOFILES)
+
+ first_time:
+ $(XGETTEXT) --default-domain=$(LANGUAGE) \
+--- 58,64 ----
+ .po.mo:
+ $(MSGFMT) -o $@ $<
+
+! all: $(MOFILES) $(MOCONVERTED)
+
+ first_time:
+ $(XGETTEXT) --default-domain=$(LANGUAGE) \
+*** ../vim-8.1.0107/src/po/Make_all.mak 2018-06-24 15:50:12.300626368 +0200
+--- src/po/Make_all.mak 2018-06-24 15:43:56.730828750 +0200
+***************
+*** 0 ****
+--- 1,135 ----
++ #
++ # Common po Makefile, defines the list of languages.
++ #
++
++ LANGUAGES = \
++ af \
++ ca \
++ cs \
++ cs.cp1250 \
++ da \
++ de \
++ en_GB \
++ eo \
++ es \
++ fi \
++ fr \
++ ga \
++ it \
++ ja \
++ ja.euc-jp \
++ ja.sjis \
++ ko \
++ ko.UTF-8 \
++ nb \
++ nl \
++ no \
++ pl \
++ pl.UTF-8 \
++ pl.cp1250 \
++ pt_BR \
++ ru \
++ ru.cp1251 \
++ sk \
++ sk.cp1250 \
++ sr \
++ sv \
++ uk \
++ uk.cp1251 \
++ vi \
++ zh_CN \
++ zh_CN.UTF-8 \
++ zh_CN.cp936 \
++ zh_TW \
++ zh_TW.UTF-8 \
++ lv \
++
++
++ MOFILES = \
++ af.mo \
++ ca.mo \
++ cs.mo \
++ da.mo \
++ de.mo \
++ en_GB.mo \
++ eo.mo \
++ es.mo \
++ fi.mo \
++ fr.mo \
++ ga.mo \
++ it.mo \
++ ja.mo \
++ ko.UTF-8.mo \
++ ko.mo \
++ nb.mo \
++ nl.mo \
++ no.mo \
++ pl.mo \
++ pt_BR.mo \
++ ru.mo \
++ sk.mo \
++ sr.mo \
++ sv.mo \
++ uk.mo \
++ vi.mo \
++ zh_CN.UTF-8.mo \
++ zh_CN.mo \
++ zh_TW.UTF-8.mo \
++ zh_TW.mo \
++ lv.mo \
++
++
++ MOCONVERTED = \
++ cs.cp1250.mo \
++ ja.euc-jp.mo \
++ ja.sjis.mo \
++ pl.UTF-8.mo \
++ pl.cp1250.mo \
++ ru.cp1251.mo \
++ sk.cp1250.mo \
++ uk.cp1251.mo \
++ zh_CN.cp936.mo \
++
++
++ CHECKFILES = \
++ af.ck \
++ ca.ck \
++ cs.ck \
++ cs.cp1250.ck \
++ da.ck \
++ de.ck \
++ en_GB.ck \
++ eo.ck \
++ es.ck \
++ fi.ck \
++ fr.ck \
++ ga.ck \
++ it.ck \
++ ja.ck \
++ ja.euc-jp.ck \
++ ja.sjis.ck \
++ ko.UTF-8.ck \
++ ko.ck \
++ lv.ck \
++ nb.ck \
++ nl.ck \
++ no.ck \
++ pl.UTF-8.ck \
++ pl.ck \
++ pl.cp1250.ck \
++ pt_BR.ck \
++ ru.ck \
++ ru.cp1251.ck \
++ sk.ck \
++ sk.cp1250.ck \
++ sr.ck \
++ sv.ck \
++ uk.ck \
++ uk.cp1251.ck \
++ vi.ck \
++ zh_CN.UTF-8.ck \
++ zh_CN.ck \
++ zh_CN.cp936.ck \
++ zh_TW.UTF-8.ck \
++ zh_TW.ck \
++
+*** ../vim-8.1.0107/src/po/da.po 2018-06-24 15:50:12.304626342 +0200
+--- src/po/da.po 2018-06-24 15:18:44.246744941 +0200
+***************
+*** 0 ****
+--- 1,7088 ----
++ # Danish translation for Vim
++ # Copyright (C) 2018 The Vim authors
++ # This file is distributed under the same license as the vim package.
++ # scootergrisen, 2018.
++ msgid ""
++ msgstr ""
++ "Project-Id-Version: Vim 8.1\n"
++ "Report-Msgid-Bugs-To: \n"
++ "POT-Creation-Date: 2018-06-08 22:09+0200\n"
++ "PO-Revision-Date: 2018-06-23 23:30+0200\n"
++ "Last-Translator: scootergrisen\n"
++ "Language-Team: Danish\n"
++ "Language: da\n"
++ "MIME-Version: 1.0\n"
++ "Content-Type: text/plain; charset=UTF-8\n"
++ "Content-Transfer-Encoding: 8bit\n"
++ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
++
++ msgid "E831: bf_key_init() called with empty password"
++ msgstr "E831: bf_key_init() kaldt med tom adgangskode"
++
++ msgid "E820: sizeof(uint32_t) != 4"
++ msgstr "E820: sizeof(uint32_t) != 4"
++
++ msgid "E817: Blowfish big/little endian use wrong"
++ msgstr "E817: Forkert brug af stor/lille byterækkefølge for blowfish"
++
++ msgid "E818: sha256 test failed"
++ msgstr "E818: sha256-test mislykkede"
++
++ msgid "E819: Blowfish test failed"
++ msgstr "E819: Blowfish-test mislykkede"
++
++ msgid "[Location List]"
++ msgstr "[Placeringsliste]"
++
++ msgid "[Quickfix List]"
++ msgstr "[Quickfix-liste]"
++
++ msgid "E855: Autocommands caused command to abort"
++ msgstr "E855: Autokommandoer forårsagede afbrydelse af kommando"
++
++ msgid "E82: Cannot allocate any buffer, exiting..."
++ msgstr "E82: Kan ikke allokere buffer, afslutter..."
++
++ msgid "E83: Cannot allocate buffer, using other one..."
++ msgstr "E83: Kan ikke allokere buffer, bruger en anden..."
++
++ msgid "E931: Buffer cannot be registered"
++ msgstr "E931: Buffer kan ikke registreres"
++
++ msgid "E937: Attempt to delete a buffer that is in use"
++ msgstr "E937: Forsøg på at slette en buffer som er i brug"
++
++ msgid "E515: No buffers were unloaded"
++ msgstr "E515: Ingen buffere blev udlæst"
++
++ msgid "E516: No buffers were deleted"
++ msgstr "E516: Ingen brugere blev slettet"
++
++ msgid "E517: No buffers were wiped out"
++ msgstr "E517: Ingen buffere blev ryddet"
++
++ msgid "1 buffer unloaded"
++ msgstr "1 buffer udlæst"
++
++ #, c-format
++ msgid "%d buffers unloaded"
++ msgstr "%d buffere udlæst"
++
++ msgid "1 buffer deleted"
++ msgstr "1 buffer slettet"
++
++ #, c-format
++ msgid "%d buffers deleted"
++ msgstr "%d buffere slettet"
++
++ msgid "1 buffer wiped out"
++ msgstr "1 buffer ryddet"
++
++ #, c-format
++ msgid "%d buffers wiped out"
++ msgstr "%d buffere ryddet"
++
++ msgid "E90: Cannot unload last buffer"
++ msgstr "E90: Kan ikke udlæse sidste buffer"
++
++ msgid "E84: No modified buffer found"
++ msgstr "E84: Fandt ingen ændret buffer"
++
++ msgid "E85: There is no listed buffer"
++ msgstr "E85: Der er ingen oplistet buffer"
++
++ msgid "E87: Cannot go beyond last buffer"
++ msgstr "E87: Kan ikke gå over sidste buffer"
++
++ msgid "E88: Cannot go before first buffer"
++ msgstr "E88: Kan ikke gå før første buffer"
++
++ #, c-format
++ msgid "E89: No write since last change for buffer %ld (add ! to override)"
++ msgstr ""
++ "E89: Ingen skrivning siden sidste ændring for bufferen %ld (tilføj ! for at "
++ "tilsidesætte)"
++
++ msgid "E948: Job still running (add ! to end the job)"
++ msgstr "E948: Job kører stadig (tilføj ! for at afslutte jobbet)"
++
++ msgid "E37: No write since last change (add ! to override)"
++ msgstr ""
++ "E37: Ingen skrivning siden sidste ændring (tilføj ! for at tilsidesætte)"
++
++ msgid "E948: Job still running"
++ msgstr "E948: Job kører stadig"
++
++ msgid "E37: No write since last change"
++ msgstr "E37: Ingen skrivning siden sidste ændring"
++
++ msgid "W14: Warning: List of file names overflow"
++ msgstr "W14: Advarsel: Overløb i liste over filnavne"
++
++ #, c-format
++ msgid "E92: Buffer %ld not found"
++ msgstr "E92: Bufferen %ld blev ikke fundet"
++
++ #, c-format
++ msgid "E93: More than one match for %s"
++ msgstr "E93: Flere end ét match for %s"
++
++ #, c-format
++ msgid "E94: No matching buffer for %s"
++ msgstr "E94: Ingen matchende buffer for %s"
++
++ #, c-format
++ msgid "line %ld"
++ msgstr "linje %ld"
++
++ msgid "E95: Buffer with this name already exists"
++ msgstr "E95: Buffer med dette navn findes allerede"
++
++ msgid " [Modified]"
++ msgstr " [Ændret]"
++
++ msgid "[Not edited]"
++ msgstr "[Ikke redigeret]"
++
++ msgid "[New file]"
++ msgstr "[Ny fil]"
++
++ msgid "[Read errors]"
++ msgstr "[Læsefejl]"
++
++ msgid "[RO]"
++ msgstr "[SB]"
++
++ msgid "[readonly]"
++ msgstr "[skrivebeskyttet]"
++
++ #, c-format
++ msgid "1 line --%d%%--"
++ msgstr "1 linje --%d%%--"
++
++ #, c-format
++ msgid "%ld lines --%d%%--"
++ msgstr "%ld linjer --%d%%--"
++
++ #, c-format
++ msgid "line %ld of %ld --%d%%-- col "
++ msgstr "linje %ld af %ld --%d%%-- kol "
++
++ msgid "[No Name]"
++ msgstr "[Intet navn]"
++
++ msgid "help"
++ msgstr "hjælp"
++
++ msgid "[Help]"
++ msgstr "[Hjælp]"
++
++ msgid "[Preview]"
++ msgstr "[Forhåndsvisning]"
++
++ msgid "All"
++ msgstr "Alt"
++
++ msgid "Bot"
++ msgstr "Ned"
++
++ msgid "Top"
++ msgstr "Øve"
++
++ msgid ""
++ "\n"
++ "# Buffer list:\n"
++ msgstr ""
++ "\n"
++ "# Bufferliste:\n"
++
++ msgid "E382: Cannot write, 'buftype' option is set"
++ msgstr "E382: Kan ikke skrive, 'buftype'-tilvalget er sat"
++
++ msgid "[Prompt]"
++ msgstr "[Prompt]"
++
++ msgid "[Scratch]"
++ msgstr "[Kladdeblok]"
++
++ msgid ""
++ "\n"
++ "--- Signs ---"
++ msgstr ""
++ "\n"
++ "--- Signs ---"
++
++ #, c-format
++ msgid "Signs for %s:"
++ msgstr "Signs for %s:"
++
++ #, c-format
++ msgid " line=%ld id=%d name=%s"
++ msgstr " linje=%ld id=%d navn=%s"
++
++ msgid "E902: Cannot connect to port"
++ msgstr "E902: Kan ikke oprette forbindelse til port"
++
++ msgid "E901: gethostbyname() in channel_open()"
++ msgstr "E901: gethostbyname() i channel_open()"
++
++ msgid "E898: socket() in channel_open()"
++ msgstr "E898: socket() i channel_open()"
++
++ msgid "E903: received command with non-string argument"
++ msgstr "E903: modtog kommando med argument som ikke er en streng"
++
++ msgid "E904: last argument for expr/call must be a number"
++ msgstr "E904: sidste argument for udtryk/kald skal være et nummer"
++
++ msgid "E904: third argument for call must be a list"
++ msgstr "E904: tredje argument for kald skal være en liste"
++
++ #, c-format
++ msgid "E905: received unknown command: %s"
++ msgstr "E905: modtog ukendt kommando: %s"
++
++ #, c-format
++ msgid "E630: %s(): write while not connected"
++ msgstr "E630: %s(): skrivning mens der ikke er forbindelse"
++
++ #, c-format
++ msgid "E631: %s(): write failed"
++ msgstr "E631: %s(): skrivning mislykkedes"
++
++ #, c-format
++ msgid "E917: Cannot use a callback with %s()"
++ msgstr "E917: Kan ikke bruge et callback med %s()"
++
++ msgid "E912: cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel"
++ msgstr ""
++ "E912: kan ikke bruge ch_evalexpr()/ch_sendexpr() med en rå- eller nl-kanal"
++
++ msgid "E906: not an open channel"
++ msgstr "E906: ikke en åben kanal"
++
++ msgid "E920: _io file requires _name to be set"
++ msgstr "E920: _io-fil kræver at _name er sat"
++
++ msgid "E915: in_io buffer requires in_buf or in_name to be set"
++ msgstr "E915: in_io-buffer kræver at in_buf eller in_name er sat"
++
++ #, c-format
++ msgid "E918: buffer must be loaded: %s"
++ msgstr "E918: buffer skal være indlæst: %s"
++
++ msgid "E821: File is encrypted with unknown method"
++ msgstr "E821: Filen er krypteret med ukendt metode"
++
++ msgid "Warning: Using a weak encryption method; see :help 'cm'"
++ msgstr "Advarsel: Bruger en svag krypteringsmetode; se :help 'cm'"
++
++ msgid "Enter encryption key: "
++ msgstr "Indtast krypteringsnøgle: "
++
++ msgid "Enter same key again: "
++ msgstr "Indtast samme nøgle igen: "
++
++ msgid "Keys don't match!"
++ msgstr "Nøglerne er ikke ens!"
++
++ msgid "[crypted]"
++ msgstr "[crypted]"
++
++ #, c-format
++ msgid "E720: Missing colon in Dictionary: %s"
++ msgstr "E720: Manglende kolon i ordbog: %s"
++
++ #, c-format
++ msgid "E721: Duplicate key in Dictionary: \"%s\""
++ msgstr "E721: Duplikeret nøgle i ordbog: \"%s\""
++
++ #, c-format
++ msgid "E722: Missing comma in Dictionary: %s"
++ msgstr "E722: Manglende komma i ordbog: %s"
++
++ #, c-format
++ msgid "E723: Missing end of Dictionary '}': %s"
++ msgstr "E723: Manglende slutning på ordbog '}': %s"
++
++ msgid "extend() argument"
++ msgstr "extend()-argument"
++
++ #, c-format
++ msgid "E737: Key already exists: %s"
++ msgstr "E737: Nøgle findes allerede: %s"
++
++ #, c-format
++ msgid "E96: Cannot diff more than %ld buffers"
++ msgstr "E96: Kan ikke diff'e flere end %ld buffere"
++
++ msgid "E810: Cannot read or write temp files"
++ msgstr "E810: Kan ikke læse eller skrive midlertidige filer"
++
++ msgid "E97: Cannot create diffs"
++ msgstr "E97: Kan ikke oprette diff'er"
++
++ msgid "Patch file"
++ msgstr "Patch-fil"
++
++ msgid "E816: Cannot read patch output"
++ msgstr "E816: Kan ikke læse patch-output"
++
++ msgid "E98: Cannot read diff output"
++ msgstr "E98: Kan ikke læse diff-output"
++
++ msgid "E99: Current buffer is not in diff mode"
++ msgstr "E99: Nuværende buffer er ikke i diff-tilstand"
++
++ msgid "E793: No other buffer in diff mode is modifiable"
++ msgstr "E793: Ingen anden buffer i diff-tilstand kan ændres"
++
++ msgid "E100: No other buffer in diff mode"
++ msgstr "E100: Ingen anden buffer i diff-tilstand"
++
++ msgid "E101: More than two buffers in diff mode, don't know which one to use"
++ msgstr ""
++ "E101: Mere end to buffere i diff-tilstand, ved ikke hvilke der skal bruges"
++
++ #, c-format
++ msgid "E102: Can't find buffer \"%s\""
++ msgstr "E102: Kan ikke finde bufferen \"%s\""
++
++ #, c-format
++ msgid "E103: Buffer \"%s\" is not in diff mode"
++ msgstr "E103: Bufferen \"%s\" er ikke i diff-tilstand"
++
++ msgid "E787: Buffer changed unexpectedly"
++ msgstr "E787: Buffer ændret uventet"
++
++ msgid "E104: Escape not allowed in digraph"
++ msgstr "E104: Escape ikke tilladt i digraf"
++
++ msgid "E544: Keymap file not found"
++ msgstr "E544: Keymap-fil ikke fundet"
++
++ msgid "E105: Using :loadkeymap not in a sourced file"
++ msgstr "E105: Bruger :loadkeymap ikke i en sourced fil"
++
++ msgid "E791: Empty keymap entry"
++ msgstr "E791: Tom keymap-post"
++
++ msgid " Keyword completion (^N^P)"
++ msgstr " Fuldførelse af nøgleord (^N^P)"
++
++ msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
++ msgstr " ^X tilstand (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
++
++ msgid " Whole line completion (^L^N^P)"
++ msgstr " Fuldførelse af hel linje (^L^N^P)"
++
++ msgid " File name completion (^F^N^P)"
++ msgstr " Fuldførelse af filnavn (^F^N^P)"
++
++ msgid " Tag completion (^]^N^P)"
++ msgstr " Fuldførelse af tag (^]^N^P)"
++
++ msgid " Path pattern completion (^N^P)"
++ msgstr " Fuldførelse af sti (^N^P)"
++
++ msgid " Definition completion (^D^N^P)"
++ msgstr " Fuldførelse af definition (^D^N^P)"
++
++ msgid " Dictionary completion (^K^N^P)"
++ msgstr " Fuldførelse af ordbog (^K^N^P)"
++
++ msgid " Thesaurus completion (^T^N^P)"
++ msgstr " Fuldførelse af tesaurus (^T^N^P)"
++
++ msgid " Command-line completion (^V^N^P)"
++ msgstr " Fuldførelse af kommandolinje (^V^N^P)"
++
++ msgid " User defined completion (^U^N^P)"
++ msgstr " Fuldførelse af brugerdefineret (^U^N^P)"
++
++ msgid " Omni completion (^O^N^P)"
++ msgstr " Fuldførelse af omni (^O^N^P)"
++
++ msgid " Spelling suggestion (s^N^P)"
++ msgstr " Staveforslag (s^N^P)"
++
++ msgid " Keyword Local completion (^N^P)"
++ msgstr " Fuldførelse af nøgleord local (^N^P)"
++
++ msgid "Hit end of paragraph"
++ msgstr "Stødte på slutningen af afsnit"
++
++ msgid "E839: Completion function changed window"
++ msgstr "E839: Fuldførelse-funktion ændrede vindue"
++
++ msgid "E840: Completion function deleted text"
++ msgstr "E840: Fuldførelse-funktion slettede tekst"
++
++ msgid "'dictionary' option is empty"
++ msgstr "'dictionary'-tilvalget er tomt"
++
++ msgid "'thesaurus' option is empty"
++ msgstr "'thesaurus'-tilvalget er tomt"
++
++ #, c-format
++ msgid "Scanning dictionary: %s"
++ msgstr "Skanner ordbog: %s"
++
++ msgid " (insert) Scroll (^E/^Y)"
++ msgstr " (indsæt) Rul (^E/^Y)"
++
++ msgid " (replace) Scroll (^E/^Y)"
++ msgstr " (erstat) Rul (^E/^Y)"
++
++ #, c-format
++ msgid "Scanning: %s"
++ msgstr "Skanner: %s"
++
++ msgid "Scanning tags."
++ msgstr "Skanner tags."
++
++ msgid "match in file"
++ msgstr "match i fil"
++
++ msgid " Adding"
++ msgstr " Tilføjer"
++
++ msgid "-- Searching..."
++ msgstr "-- Søger..."
++
++ msgid "Back at original"
++ msgstr "Tilbage ved original"
++
++ msgid "Word from other line"
++ msgstr "Ord fra anden linje"
++
++ msgid "The only match"
++ msgstr "Det eneste match"
++
++ #, c-format
++ msgid "match %d of %d"
++ msgstr "match %d af %d"
++
++ #, c-format
++ msgid "match %d"
++ msgstr "match %d"
++
++ msgid "E18: Unexpected characters in :let"
++ msgstr "E18: Uventede tegn i :let"
++
++ #, c-format
++ msgid "E121: Undefined variable: %s"
++ msgstr "E121: Udefineret variabel: %s"
++
++ msgid "E111: Missing ']'"
++ msgstr "E111: Manglende ']'"
++
++ msgid "E719: Cannot use [:] with a Dictionary"
++ msgstr "E719: Kan ikke bruge [:] med en ordbog"
++
++ #, c-format
++ msgid "E734: Wrong variable type for %s="
++ msgstr "E734: Forkert variabeltype for %s="
++
++ #, c-format
++ msgid "E461: Illegal variable name: %s"
++ msgstr "E461: Ulovligt variabelnavn: %s"
++
++ msgid "E806: using Float as a String"
++ msgstr "E806: bruger flydende kommatal som en streng"
++
++ msgid "E687: Less targets than List items"
++ msgstr "E687: Færre mål end listepunkter"
++
++ msgid "E688: More targets than List items"
++ msgstr "E688: Flere mål end listepunkter"
++
++ msgid "Double ; in list of variables"
++ msgstr "Dobbelt ; i liste over variabler"
++
++ #, c-format
++ msgid "E738: Can't list variables for %s"
++ msgstr "E738: Kan ikke opliste variabler for %s"
++
++ msgid "E689: Can only index a List or Dictionary"
++ msgstr "E689: Kan kun indeksere en liste eller ordbog"
++
++ msgid "E708: [:] must come last"
++ msgstr "E708: [:] skal være sidst"
++
++ msgid "E709: [:] requires a List value"
++ msgstr "E709: [:] kræver en listeværdi"
++
++ msgid "E710: List value has more items than target"
++ msgstr "E710: Listeværdi har flere punkter end mål"
++
++ msgid "E711: List value has not enough items"
++ msgstr "E711: Listeværdi har ikke nok punkter"
++
++ msgid "E690: Missing \"in\" after :for"
++ msgstr "E690: Manglende \"in\" efter :for"
++
++ #, c-format
++ msgid "E108: No such variable: \"%s\""
++ msgstr "E108: Ingen sådan variabel: \"%s\""
++
++ #, c-format
++ msgid "E940: Cannot lock or unlock variable %s"
++ msgstr "E940: Kan ikke låse eller låse op for variablen %s"
++
++ msgid "E743: variable nested too deep for (un)lock"
++ msgstr "E743: variabel indlejret for dybt til at blive låst/låst op"
++
++ msgid "E109: Missing ':' after '?'"
++ msgstr "E109: Manglende ':' efter '?'"
++
++ msgid "E804: Cannot use '%' with Float"
++ msgstr "E804: Kan ikke bruge '%' med flydende kommatal"
++
++ msgid "E110: Missing ')'"
++ msgstr "E110: Manglende ')'"
++
++ msgid "E695: Cannot index a Funcref"
++ msgstr "E695: Kan ikke indeksere en funcref"
++
++ msgid "E909: Cannot index a special variable"
++ msgstr "E909: Kan ikke indeksere en speciel variabel"
++
++ #, c-format
++ msgid "E112: Option name missing: %s"
++ msgstr "E112: Tilvalgsnavn mangler: %s"
++
++ #, c-format
++ msgid "E113: Unknown option: %s"
++ msgstr "E113: Ukendt tilvalg: %s"
++
++ #, c-format
++ msgid "E114: Missing quote: %s"
++ msgstr "E114: Manglende citationstegn: %s"
++
++ #, c-format
++ msgid "E115: Missing quote: %s"
++ msgstr "E115: Manglende citationstegn: %s"
++
++ msgid "Not enough memory to set references, garbage collection aborted!"
++ msgstr "Ikke nok hukommelse til at sætte referencer, affaldsindsamling afbrudt!"
++
++ msgid "E724: variable nested too deep for displaying"
++ msgstr "E724: variabel indlejret for dybt til at blive vist"
++
++ msgid "E805: Using a Float as a Number"
++ msgstr "E805: Bruger et flydende kommatal som et nummer"
++
++ msgid "E703: Using a Funcref as a Number"
++ msgstr "E703: Bruger en funcref som et nummer"
++
++ msgid "E745: Using a List as a Number"
++ msgstr "E745: Bruger en liste som et nummer"
++
++ msgid "E728: Using a Dictionary as a Number"
++ msgstr "E728: Bruger en ordbog som et nummer"
++
++ msgid "E910: Using a Job as a Number"
++ msgstr "E910: Bruger et job som et nummer"
++
++ msgid "E913: Using a Channel as a Number"
++ msgstr "E913: Bruger en kanal som et nummer"
++
++ msgid "E891: Using a Funcref as a Float"
++ msgstr "E891: Bruger en funcref som et fyldende kommatal"
++
++ msgid "E892: Using a String as a Float"
++ msgstr "E892: Bruger en streng som et flydende kommatal"
++
++ msgid "E893: Using a List as a Float"
++ msgstr "E893: Bruger en liste som et flydende kommatal"
++
++ msgid "E894: Using a Dictionary as a Float"
++ msgstr "E894: Bruger en ordbog som et flydende kommatal"
++
++ msgid "E907: Using a special value as a Float"
++ msgstr "E907: Bruger en speciel værdi som et flydende kommatal"
++
++ msgid "E911: Using a Job as a Float"
++ msgstr "E911: Bruger et job som et flydende kommatal"
++
++ msgid "E914: Using a Channel as a Float"
++ msgstr "E914: Bruger en kanal som et flydende kommatal"
++
++ msgid "E729: using Funcref as a String"
++ msgstr "E729: bruger funcref som en streng"
++
++ msgid "E730: using List as a String"
++ msgstr "E730: bruger liste som en streng"
++
++ msgid "E731: using Dictionary as a String"
++ msgstr "E731: bruger ordbog som en streng"
++
++ msgid "E908: using an invalid value as a String"
++ msgstr "E908: bruger en ugyldig værdi som en streng"
++
++ #, c-format
++ msgid "E795: Cannot delete variable %s"
++ msgstr "E795: Kan ikke slette variablen %s"
++
++ #, c-format
++ msgid "E704: Funcref variable name must start with a capital: %s"
++ msgstr "E704: Funcref-variabelnavn skal begynde med et stort bogstav: %s"
++
++ #, c-format
++ msgid "E705: Variable name conflicts with existing function: %s"
++ msgstr "E705: Variabelnavn er i konflikt med eksisterende funktion: %s"
++
++ #, c-format
++ msgid "E741: Value is locked: %s"
++ msgstr "E741: Værdien er låst: %s"
++
++ msgid "Unknown"
++ msgstr "Ukendt"
++
++ #, c-format
++ msgid "E742: Cannot change value of %s"
++ msgstr "E742: Kan ikke ændre værdien af %s"
++
++ msgid "E698: variable nested too deep for making a copy"
++ msgstr "E698: variabel indlejret for dybt til at lave en kopi"
++
++ msgid ""
++ "\n"
++ "# global variables:\n"
++ msgstr ""
++ "\n"
++ "# globale variabler:\n"
++
++ msgid ""
++ "\n"
++ "\tLast set from "
++ msgstr ""
++ "\n"
++ "\tSidst sat fra "
++
++ msgid "E691: Can only compare List with List"
++ msgstr "E691: Kan kun sammenligne liste med liste"
++
++ msgid "E692: Invalid operation for List"
++ msgstr "E692: Ugyldig handling for liste"
++
++ msgid "E735: Can only compare Dictionary with Dictionary"
++ msgstr "E735: Kan kun sammenligne ordbog med ordbog"
++
++ msgid "E736: Invalid operation for Dictionary"
++ msgstr "E736: Ugyldig handling for ordbog"
++
++ msgid "E694: Invalid operation for Funcrefs"
++ msgstr "E694: Ugyldig handling for funcref'er"
++
++ msgid "map() argument"
++ msgstr "map()-argument"
++
++ msgid "filter() argument"
++ msgstr "filter()-argument"
++
++ #, c-format
++ msgid "E686: Argument of %s must be a List"
++ msgstr "E686: Argument af %s skal være en liste"
++
++ msgid "E928: String required"
++ msgstr "E928: Streng kræves"
++
++ msgid "E808: Number or Float required"
++ msgstr "E808: Nummer eller flydende kommatal kræves"
++
++ msgid "add() argument"
++ msgstr "add()-argument"
++
++ msgid "E785: complete() can only be used in Insert mode"
++ msgstr "E785: complete() kan kun bruges i indsæt-tilstand"
++
++ msgid "&Ok"
++ msgstr "&Ok"
++
++ #, c-format
++ msgid "+-%s%3ld line: "
++ msgid_plural "+-%s%3ld lines: "
++ msgstr[0] "+-%s%3ld linje: "
++ msgstr[1] "+-%s%3ld linjer: "
++
++ #, c-format
++ msgid "E700: Unknown function: %s"
++ msgstr "E700: Ukendt funktion: %s"
++
++ msgid "E922: expected a dict"
++ msgstr "E922: ventede en ordbog"
++
++ msgid "E923: Second argument of function() must be a list or a dict"
++ msgstr "E923: Andet argument af function() skal være en liste eller en ordbog"
++
++ msgid ""
++ "&OK\n"
++ "&Cancel"
++ msgstr ""
++ "&OK\n"
++ "&Annuller"
++
++ msgid "called inputrestore() more often than inputsave()"
++ msgstr "kaldte inputrestore() flere gange end inputsave()"
++
++ msgid "insert() argument"
++ msgstr "insert()-argument"
++
++ msgid "E786: Range not allowed"
++ msgstr "E786: Område ikke tilladt"
++
++ msgid "E916: not a valid job"
++ msgstr "E916: ikke et gyldigt job"
++
++ msgid "E701: Invalid type for len()"
++ msgstr "E701: Ugyldig type for len()"
++
++ #, c-format
++ msgid "E798: ID is reserved for \":match\": %ld"
++ msgstr "E798: ID er reserveret til \":match\": %ld"
++
++ msgid "E726: Stride is zero"
++ msgstr "E726: Stride er nul"
++
++ msgid "E727: Start past end"
++ msgstr "E727: Start efter slutningen"
++
++ msgid "<empty>"
++ msgstr "<tom>"
++
++ msgid "E240: No connection to the X server"
++ msgstr "E240: Ingen forbindelse til X-serveren"
++
++ #, c-format
++ msgid "E241: Unable to send to %s"
++ msgstr "E241: Kan ikke sende til %s"
++
++ msgid "E277: Unable to read a server reply"
++ msgstr "E277: Kan ikke læse et serversvar"
++
++ msgid "E941: already started a server"
++ msgstr "E941: allerede startet en server"
++
++ msgid "E942: +clientserver feature not available"
++ msgstr "E942: +clientserver-funktionalitet ikke tilgængelig"
++
++ msgid "remove() argument"
++ msgstr "remove()-argument"
++
++ msgid "E655: Too many symbolic links (cycle?)"
++ msgstr "E655: For mange symbolske links (cyklus?)"
++
++ msgid "reverse() argument"
++ msgstr "reverse()-argument"
++
++ msgid "E258: Unable to send to client"
++ msgstr "E258: Kan ikke sende til klient"
++
++ #, c-format
++ msgid "E927: Invalid action: '%s'"
++ msgstr "E927: Ugyldig handling: '%s'"
++
++ msgid "sort() argument"
++ msgstr "sort()-argument"
++
++ msgid "uniq() argument"
++ msgstr "uniq()-argument"
++
++ msgid "E702: Sort compare function failed"
++ msgstr "E702: Sort-sammenligningsfunktion mislykkedes"
++
++ msgid "E882: Uniq compare function failed"
++ msgstr "E882: Uniq-sammenligningsfunktion mislykkedes"
++
++ msgid "(Invalid)"
++ msgstr "(Ugyldig)"
++
++ #, c-format
++ msgid "E935: invalid submatch number: %d"
++ msgstr "E935: ugyldigt undermatch-nummer: %d"
++
++ msgid "E677: Error writing temp file"
++ msgstr "E677: Fejl ved skrivning af midlertidig fil"
++
++ msgid "E921: Invalid callback argument"
++ msgstr "E921: Ugyldigt callback-argument"
++
++ #, c-format
++ msgid "<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s"
++ msgstr "<%s>%s%s %d, hex %02x, oct %03o, digr %s"
++
++ #, c-format
++ msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
++ msgstr "<%s>%s%s %d, hex %02x, octal %03o"
++
++ #, c-format
++ msgid "> %d, Hex %04x, Oct %o, Digr %s"
++ msgstr "> %d, hex %04x, oct %o, digr %s"
++
++ #, c-format
++ msgid "> %d, Hex %08x, Oct %o, Digr %s"
++ msgstr "> %d, hex %08x, oct %o, digr %s"
++
++ #, c-format
++ msgid "> %d, Hex %04x, Octal %o"
++ msgstr "> %d, hex %04x, octal %o"
++
++ #, c-format
++ msgid "> %d, Hex %08x, Octal %o"
++ msgstr "> %d, hex %08x, octal %o"
++
++ msgid "E134: Move lines into themselves"
++ msgstr "E134: flyt linjer ind i dem selv"
++
++ msgid "1 line moved"
++ msgstr "1 linje flyttet"
++
++ #, c-format
++ msgid "%ld lines moved"
++ msgstr "%ld linjer flyttet"
++
++ #, c-format
++ msgid "%ld lines filtered"
++ msgstr "%ld linjer filtreret"
++
++ msgid "E135: *Filter* Autocommands must not change current buffer"
++ msgstr "E135: *Filter*-autokommandoer må ikke ændre nuværende buffer"
++
++ msgid "[No write since last change]\n"
++ msgstr "[Ingen skrivning siden sidste ændring]\n"
++
++ #, c-format
++ msgid "%sviminfo: %s in line: "
++ msgstr "%sviminfo: %s på linje: "
++
++ msgid "E136: viminfo: Too many errors, skipping rest of file"
++ msgstr "E136: viminfo: For mange fejl, springer resten af filen over"
++
++ #, c-format
++ msgid "Reading viminfo file \"%s\"%s%s%s"
++ msgstr "Læser viminfo-filen \"%s\"%s%s%s"
++
++ msgid " info"
++ msgstr " info"
++
++ msgid " marks"
++ msgstr " mærker"
++
++ msgid " oldfiles"
++ msgstr " gamle filer"
++
++ msgid " FAILED"
++ msgstr " MISLYKKEDES"
++
++ #, c-format
++ msgid "E137: Viminfo file is not writable: %s"
++ msgstr "E137: Viminfo-filen er skrivebeskyttet: %s"
++
++ #, c-format
++ msgid "E929: Too many viminfo temp files, like %s!"
++ msgstr "E929: For mange midlertidige filer for viminfo, såsom %s!"
++
++ #, c-format
++ msgid "E138: Can't write viminfo file %s!"
++ msgstr "E138: Kan ikke skrive viminfo-filen %s!"
++
++ #, c-format
++ msgid "Writing viminfo file \"%s\""
++ msgstr "Skriver viminfo-filen \"%s\""
++
++ #, c-format
++ msgid "E886: Can't rename viminfo file to %s!"
++ msgstr "E886: Kan ikke omdøbe viminfo-fil til %s!"
++
++ #, c-format
++ msgid "# This viminfo file was generated by Vim %s.\n"
++ msgstr "# Denne viminfo-fil blev genereret af Vim %s.\n"
++
++ msgid ""
++ "# You may edit it if you're careful!\n"
++ "\n"
++ msgstr ""
++ "# Du kan redigere den, hvis du er forsigtig!\n"
++ "\n"
++
++ msgid "# Value of 'encoding' when this file was written\n"
++ msgstr "# Værdien af 'encoding' da filen blev skrevet\n"
++
++ msgid "Illegal starting char"
++ msgstr "Ulovligt tegn i begyndelsen"
++
++ msgid ""
++ "\n"
++ "# Bar lines, copied verbatim:\n"
++ msgstr ""
++ "\n"
++ "#-bjælkelinjer, kopieret ordret:\n"
++
++ msgid "Save As"
++ msgstr "Gem som"
++
++ msgid "Write partial file?"
++ msgstr "Skriv ufuldstændig fil?"
++
++ msgid "E140: Use ! to write partial buffer"
++ msgstr "E140: Brug ! til at skrive ufuldstændig buffer"
++
++ #, c-format
++ msgid "Overwrite existing file \"%s\"?"
++ msgstr "Overskriv eksisterende fil \"%s\"?"
++
++ #, c-format
++ msgid "Swap file \"%s\" exists, overwrite anyway?"
++ msgstr "Swap-filen \"%s\" findes, overskriv alligevel?"
++
++ #, c-format
++ msgid "E768: Swap file exists: %s (:silent! overrides)"
++ msgstr "E768: Swap-filen findes: %s (:silent! tilsidesætter)"
++
++ #, c-format
++ msgid "E141: No file name for buffer %ld"
++ msgstr "E141: Intet filnavn for buffer %ld"
++
++ msgid "E142: File not written: Writing is disabled by 'write' option"
++ msgstr "E142: Fil ikke skrevet: Skrivning er deaktiveret af 'write'-tilvalget"
++
++ #, c-format
++ msgid ""
++ "'readonly' option is set for \"%s\".\n"
++ "Do you wish to write anyway?"
++ msgstr ""
++ "'readonly'-tilvalget er sat for \"%s\".\n"
++ "Vil du skrive alligevel?"
++
++ #, c-format
++ msgid ""
++ "File permissions of \"%s\" are read-only.\n"
++ "It may still be possible to write it.\n"
++ "Do you wish to try?"
++ msgstr ""
++ "Filtilladelserne for \"%s\" er skrivebeskyttede.\n"
++ "Der kan stadig være mulighed for at skrive den.\n"
++ "Vil du prøve?"
++
++ #, c-format
++ msgid "E505: \"%s\" is read-only (add ! to override)"
++ msgstr "E505: \"%s\" er skrivebeskyttet (tilføj ! for at tilsidesætte)"
++
++ msgid "Edit File"
++ msgstr "Rediger fil"
++
++ #, c-format
++ msgid "E143: Autocommands unexpectedly deleted new buffer %s"
++ msgstr "E143: Autokommandoer slettede uventede ny buffer %s"
++
++ msgid "E144: non-numeric argument to :z"
++ msgstr "E144: ikke-numerisk argument til :z"
++
++ msgid "E145: Shell commands not allowed in rvim"
++ msgstr "E145: Skalkommandoer er ikke tilladt i rvim"
++
++ msgid "E146: Regular expressions can't be delimited by letters"
++ msgstr "E146: Regulære udtryk kan ikke afgrænses af bogstaver"
++
++ #, c-format
++ msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
++ msgstr "erstat med %s (y/n/a/q/l/^E/^Y)?"
++
++ msgid "(Interrupted) "
++ msgstr "(Afbrudt) "
++
++ msgid "1 match"
++ msgstr "1 match"
++
++ msgid "1 substitution"
++ msgstr "1 erstatning"
++
++ #, c-format
++ msgid "%ld matches"
++ msgstr "%ld match"
++
++ #, c-format
++ msgid "%ld substitutions"
++ msgstr "%ld erstatninger"
++
++ msgid " on 1 line"
++ msgstr " på 1 linje"
++
++ #, c-format
++ msgid " on %ld lines"
++ msgstr " på %ld linjer"
++
++ msgid "E147: Cannot do :global recursive with a range"
++ msgstr "E147: Kan ikke foretage :global rekursivt med et område"
++
++ msgid "E148: Regular expression missing from global"
++ msgstr "E148: Regulære udtryk mangler fra global"
++
++ #, c-format
++ msgid "Pattern found in every line: %s"
++ msgstr "Mønster fundet på hver linje: %s"
++
++ #, c-format
++ msgid "Pattern not found: %s"
++ msgstr "Mønster ikke fundet: %s"
++
++ msgid ""
++ "\n"
++ "# Last Substitute String:\n"
++ "$"
++ msgstr ""
++ "\n"
++ "# Sidste erstatningsstreng:\n"
++ "$"
++
++ msgid "E478: Don't panic!"
++ msgstr "E478: Tag det bare helt roligt!"
++
++ #, c-format
++ msgid "E661: Sorry, no '%s' help for %s"
++ msgstr "E661: Beklager, ingen '%s' hjælp til %s"
++
++ #, c-format
++ msgid "E149: Sorry, no help for %s"
++ msgstr "E149: Beklager, ingen hjælp til %s"
++
++ #, c-format
++ msgid "Sorry, help file \"%s\" not found"
++ msgstr "Beklager, hjælpfilen \"%s\" ikke fundet"
++
++ #, c-format
++ msgid "E151: No match: %s"
++ msgstr "E151: Intet match: %s"
++
++ #, c-format
++ msgid "E152: Cannot open %s for writing"
++ msgstr "E152: Kan ikke åbne %s til skrivning"
++
++ #, c-format
++ msgid "E153: Unable to open %s for reading"
++ msgstr "E153: Kan ikke åbne %s til læsning"
++
++ #, c-format
++ msgid "E670: Mix of help file encodings within a language: %s"
++ msgstr "E670: Blanding af kodninger for hjælpfiler i samme sprog: %s"
++
++ #, c-format
++ msgid "E154: Duplicate tag \"%s\" in file %s/%s"
++ msgstr "E154: Duplikeret tag \"%s\" i fil %s/%s"
++
++ #, c-format
++ msgid "E150: Not a directory: %s"
++ msgstr "E150: Ikke en mappe: %s"
++
++ #, c-format
++ msgid "E160: Unknown sign command: %s"
++ msgstr "E160: Ukendt sign-kommando: %s"
++
++ msgid "E156: Missing sign name"
++ msgstr "E156: Manglende sign-navn"
++
++ msgid "E612: Too many signs defined"
++ msgstr "E612: For mange signs defineret"
++
++ #, c-format
++ msgid "E239: Invalid sign text: %s"
++ msgstr "E239: Ugyldig sign-tekst: %s"
++
++ #, c-format
++ msgid "E155: Unknown sign: %s"
++ msgstr "E155: Ukendt sign: %s"
++
++ msgid "E159: Missing sign number"
++ msgstr "E159: Manglende sign-nummer"
++
++ #, c-format
++ msgid "E158: Invalid buffer name: %s"
++ msgstr "E158: Ugyldigt buffernavn: %s"
++
++ msgid "E934: Cannot jump to a buffer that does not have a name"
++ msgstr "E934: Kan ikke hoppe til en buffer som ikke har et navn"
++
++ #, c-format
++ msgid "E157: Invalid sign ID: %ld"
++ msgstr "E157: Ugyldigt sign-ID: %ld"
++
++ #, c-format
++ msgid "E885: Not possible to change sign %s"
++ msgstr "E885: Det er ikke muligt at ændre sign %s"
++
++ msgid " (NOT FOUND)"
++ msgstr " (IKKE FUNDET)"
++
++ msgid " (not supported)"
++ msgstr " (understøttes ikke)"
++
++ msgid "[Deleted]"
++ msgstr "[Slettet]"
++
++ msgid "No old files"
++ msgstr "Ingen gamle filer"
++
++ msgid "Entering Debug mode. Type \"cont\" to continue."
++ msgstr "Går i fejlretningstilstand. Skriv \"cont\" for at fortsætte."
++
++ #, c-format
++ msgid "Oldval = \"%s\""
++ msgstr "Oldval = \"%s\""
++
++ #, c-format
++ msgid "Newval = \"%s\""
++ msgstr "Newval = \"%s\""
++
++ #, c-format
++ msgid "line %ld: %s"
++ msgstr "linje %ld: %s"
++
++ #, c-format
++ msgid "cmd: %s"
++ msgstr "cmd: %s"
++
++ msgid "frame is zero"
++ msgstr "ramme er nul"
++
++ #, c-format
++ msgid "frame at highest level: %d"
++ msgstr "ramme på højeste niveau: %d"
++
++ #, c-format
++ msgid "Breakpoint in \"%s%s\" line %ld"
++ msgstr "Breakpoint i \"%s%s\" linje %ld"
++
++ #, c-format
++ msgid "E161: Breakpoint not found: %s"
++ msgstr "E161: Breakpoint ikke fundet: %s"
++
++ msgid "No breakpoints defined"
++ msgstr "Ingen breakpoints defineret"
++
++ #, c-format
++ msgid "%3d %s %s line %ld"
++ msgstr "%3d %s %s linje %ld"
++
++ #, c-format
++ msgid "%3d expr %s"
++ msgstr "%3d udtryk %s"
++
++ msgid "E750: First use \":profile start {fname}\""
++ msgstr "E750: Brug først \":profile start {fname}\""
++
++ #, c-format
++ msgid "Save changes to \"%s\"?"
++ msgstr "Gem ændringer til \"%s\"?"
++
++ #, c-format
++ msgid "E947: Job still running in buffer \"%s\""
++ msgstr "E947: Job kører stadig i bufferen \"%s\""
++
++ #, c-format
++ msgid "E162: No write since last change for buffer \"%s\""
++ msgstr "E162: Ingen skrivning siden sidste ændring for bufferen \"%s\""
++
++ msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
++ msgstr "Advarsel: Indtastede anden buffer uventede (tjek autokommandoer)"
++
++ msgid "E163: There is only one file to edit"
++ msgstr "E163: Der er kun én fil at redigere"
++
++ msgid "E164: Cannot go before first file"
++ msgstr "E164: Kan ikke gå før første fil"
++
++ msgid "E165: Cannot go beyond last file"
++ msgstr "E165: Kan ikke gå over sidste fil"
++
++ #, c-format
++ msgid "E666: compiler not supported: %s"
++ msgstr "E666: kompiler understøttes ikke: %s"
++
++ #, c-format
++ msgid "Searching for \"%s\" in \"%s\""
++ msgstr "Søger efter \"%s\" i \"%s\""
++
++ #, c-format
++ msgid "Searching for \"%s\""
++ msgstr "Søger efter \"%s\""
++
++ #, c-format
++ msgid "not found in '%s': \"%s\""
++ msgstr "ikke fundet i '%s': \"%s\""
++
++ #, c-format
++ msgid "W20: Required python version 2.x not supported, ignoring file: %s"
++ msgstr "W20: Krævede python-version 2.x understøttes ikke, ignorerer fil: %s"
++
++ #, c-format
++ msgid "W21: Required python version 3.x not supported, ignoring file: %s"
++ msgstr "W21: Krævede python-version 3.x understøttes ikke, ignorerer fil: %s"
++
++ msgid "Source Vim script"
++ msgstr "Source Vim-script"
++
++ #, c-format
++ msgid "Cannot source a directory: \"%s\""
++ msgstr "Kan ikke source en mappe: \"%s\""
++
++ #, c-format
++ msgid "could not source \"%s\""
++ msgstr "kunne ikke source \"%s\""
++
++ #, c-format
++ msgid "line %ld: could not source \"%s\""
++ msgstr "linje %ld: kunne ikke source \"%s\""
++
++ #, c-format
++ msgid "sourcing \"%s\""
++ msgstr "sourcing \"%s\""
++
++ #, c-format
++ msgid "line %ld: sourcing \"%s\""
++ msgstr "linje %ld: sourcing \"%s\""
++
++ #, c-format
++ msgid "finished sourcing %s"
++ msgstr "færdig med sourcing af %s"
++
++ #, c-format
++ msgid "continuing in %s"
++ msgstr "fortsætter i %s"
++
++ msgid "modeline"
++ msgstr "tilstandslinje"
++
++ msgid "--cmd argument"
++ msgstr "--cmd-argument"
++
++ msgid "-c argument"
++ msgstr "-c-argument"
++
++ msgid "environment variable"
++ msgstr "miljøvariabel"
++
++ msgid "error handler"
++ msgstr "fejlhåndtering"
++
++ msgid "W15: Warning: Wrong line separator, ^M may be missing"
++ msgstr "W15: Advarsel: Forkert linjeseparator, ^M mangler muligvis"
++
++ msgid "E167: :scriptencoding used outside of a sourced file"
++ msgstr "E167: :scriptencoding brugt udenfor en sourced fil"
++
++ msgid "E168: :finish used outside of a sourced file"
++ msgstr "E168: :finish udenfor en sourced fil"
++
++ #, c-format
++ msgid "Current %slanguage: \"%s\""
++ msgstr "Nuværende %ssprog: \"%s\""
++
++ #, c-format
++ msgid "E197: Cannot set language to \"%s\""
++ msgstr "E197: Kan ikke sætte sprog til \"%s\""
++
++ msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
++ msgstr "Går i Ex-tilstand. Skriv \"visual\" for at gå til normal tilstand."
++
++ msgid "E501: At end-of-file"
++ msgstr "E501: Ved filens slutning"
++
++ msgid "E169: Command too recursive"
++ msgstr "E169: Kommando for rekursiv"
++
++ #, c-format
++ msgid "E605: Exception not caught: %s"
++ msgstr "E605: Undtagelse ikke fanget: %s"
++
++ msgid "End of sourced file"
++ msgstr "Slut på sourced fil"
++
++ msgid "End of function"
++ msgstr "Slutning af funktion"
++
++ msgid "E464: Ambiguous use of user-defined command"
++ msgstr "E464: Flertydig brug af brugerdefineret kommando"
++
++ msgid "E492: Not an editor command"
++ msgstr "E492: Ikke en editor-kommando"
++
++ msgid "E493: Backwards range given"
++ msgstr "E493: Baglæns område givet"
++
++ msgid "Backwards range given, OK to swap"
++ msgstr "Baglæns område givet, OK at bytte om"
++
++ msgid "E494: Use w or w>>"
++ msgstr "E494: Brug w eller w>>"
++
++ msgid "E943: Command table needs to be updated, run 'make cmdidxs'"
++ msgstr "E943: Kommandotabel skal opdateres, kør 'make cmdidxs'"
++
++ msgid "E319: Sorry, the command is not available in this version"
++ msgstr "E319: Beklager, kommandoen er ikke tilgængelig i denne version"
++
++ msgid "1 more file to edit. Quit anyway?"
++ msgstr "1 fil mere at redigere. Afslut alligevel?"
++
++ #, c-format
++ msgid "%d more files to edit. Quit anyway?"
++ msgstr "%d filer mere at redigere. Afslut alligevel?"
++
++ msgid "E173: 1 more file to edit"
++ msgstr "E173: 1 fil mere at redigere"
++
++ #, c-format
++ msgid "E173: %ld more files to edit"
++ msgstr "E173: %ld filer mere at redigere"
++
++ msgid "E174: Command already exists: add ! to replace it"
++ msgstr "E174: Kommandoen findes allerede: tilføj ! for at erstatte den"
++
++ msgid ""
++ "\n"
++ " Name Args Address Complete Definition"
++ msgstr ""
++ "\n"
++ " Navn Argumenter Adresse Fuldført Definition"
++
++ msgid "No user-defined commands found"
++ msgstr "Fandt ingen brugerdefinerede kommandoer"
++
++ msgid "E175: No attribute specified"
++ msgstr "E175: Ingen attribut angivet"
++
++ msgid "E176: Invalid number of arguments"
++ msgstr "E176: Ugyldigt antal argumenter"
++
++ msgid "E177: Count cannot be specified twice"
++ msgstr "E177: Tælling må ikke angives to gange"
++
++ msgid "E178: Invalid default value for count"
++ msgstr "E178: Ugyldig standardværdi for tælling"
++
++ msgid "E179: argument required for -complete"
++ msgstr "E179: argument kræves til -complete"
++
++ msgid "E179: argument required for -addr"
++ msgstr "E179: argument kræves til -addr"
++
++ #, c-format
++ msgid "E181: Invalid attribute: %s"
++ msgstr "E181: Ugyldig attribut: %s"
++
++ msgid "E182: Invalid command name"
++ msgstr "E182: Ugyldigt kommandonavn"
++
++ msgid "E183: User defined commands must start with an uppercase letter"
++ msgstr "E183: Brugerdefinerede kommandoer skal begynde med et stort bogstav"
++
++ msgid "E841: Reserved name, cannot be used for user defined command"
++ msgstr "E841: Reserveret navn, kan ikke bruges til brugerdefineret kommando"
++
++ #, c-format
++ msgid "E184: No such user-defined command: %s"
++ msgstr "E184: Ingen sådan brugerdefineret kommando: %s"
++
++ #, c-format
++ msgid "E180: Invalid address type value: %s"
++ msgstr "E180: Ugyldig værdi for adressetype: %s"
++
++ #, c-format
++ msgid "E180: Invalid complete value: %s"
++ msgstr "E180: Ugyldig complete-værdi: %s"
++
++ msgid "E468: Completion argument only allowed for custom completion"
++ msgstr "E468: Fuldførelse-argument kun tilladt for tilpasset fuldførelse"
++
++ msgid "E467: Custom completion requires a function argument"
++ msgstr "E467: Tilpasset fuldførelse kræver et funktion-argument"
++
++ msgid "unknown"
++ msgstr "ukendt"
++
++ #, c-format
++ msgid "E185: Cannot find color scheme '%s'"
++ msgstr "E185: Kan ikke finde farveskemaet '%s'"
++
++ msgid "Greetings, Vim user!"
++ msgstr "Hejsa, Vim-bruger!"
++
++ msgid "E784: Cannot close last tab page"
++ msgstr "E784: Kan ikke lukke sidste fanebladsside"
++
++ msgid "Already only one tab page"
++ msgstr "Allerede kun én fanebladsside"
++
++ msgid "Edit File in new window"
++ msgstr "Rediger fil i nyt vindue"
++
++ #, c-format
++ msgid "Tab page %d"
++ msgstr "Fanebladsside %d"
++
++ msgid "No swap file"
++ msgstr "Ingen swap-fil"
++
++ msgid "Append File"
++ msgstr "Tilføj fil til slutningen"
++
++ msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
++ msgstr ""
++ "E747: Kan ikke skifte mappe, buffer er ændret (tilføj ! for at tilsidesætte)"
++
++ msgid "E186: No previous directory"
++ msgstr "E186: Ingen tidligere ordbog"
++
++ msgid "E187: Unknown"
++ msgstr "E187: Ukendt"
++
++ msgid "E465: :winsize requires two number arguments"
++ msgstr "E465: :winsize kræver to nummer-argumenter"
++
++ #, c-format
++ msgid "Window position: X %d, Y %d"
++ msgstr "Vinduesplacering: X %d, Y %d"
++
++ msgid "E188: Obtaining window position not implemented for this platform"
++ msgstr ""
++ "E188: Indhentelse af vinduesplacering ikke implementeret på denne platform"
++
++ msgid "E466: :winpos requires two number arguments"
++ msgstr "E466: :winpos kræver to nummer-argumenter"
++
++ msgid "E930: Cannot use :redir inside execute()"
++ msgstr "E930: Kan ikke bruge :redir i execute()"
++
++ msgid "Save Redirection"
++ msgstr "Gem omdirigering"
++
++ msgid "Save View"
++ msgstr "Gem visning"
++
++ msgid "Save Session"
++ msgstr "Gem session"
++
++ msgid "Save Setup"
++ msgstr "Gem opsætning"
++
++ #, c-format
++ msgid "E739: Cannot create directory: %s"
++ msgstr "E739: Kan ikke oprette mappe: %s"
++
++ #, c-format
++ msgid "E189: \"%s\" exists (add ! to override)"
++ msgstr "E189: \"%s\" findes (tilføj ! for at tilsidesætte)"
++
++ #, c-format
++ msgid "E190: Cannot open \"%s\" for writing"
++ msgstr "E190: Kan ikke åbne \"%s\" til skrivning"
++
++ msgid "E191: Argument must be a letter or forward/backward quote"
++ msgstr ""
++ "E191: Argument skal være et bogstav eller retvendt/omvendt citationstegn"
++
++ msgid "E192: Recursive use of :normal too deep"
++ msgstr "E192: Rekursiv brug af :normal for dyb"
++
++ msgid "E809: #< is not available without the +eval feature"
++ msgstr "E809: #< er ikke tilgængelig uden +eval-funktionaliteten"
++
++ msgid "E194: No alternate file name to substitute for '#'"
++ msgstr "E194: Intet alternate-filnavn til erstatning for '#'"
++
++ msgid "E495: no autocommand file name to substitute for \"<afile>\""
++ msgstr "E495: intet autokommando-filnavn til erstatning for \"<afile>\""
++
++ msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
++ msgstr "E496: intet autokommando-buffernummer til erstatning for \"<abuf>\""
++
++ msgid "E497: no autocommand match name to substitute for \"<amatch>\""
++ msgstr "E497: intet autokommando-matchnavn til erstatning for \"<amatch>\""
++
++ msgid "E498: no :source file name to substitute for \"<sfile>\""
++ msgstr "E498: intet :source-filnavn til erstatning for \"<sfile>\""
++
++ msgid "E842: no line number to use for \"<slnum>\""
++ msgstr "E842: intet linjenummer til brug for \"<slnum>\""
++
++ #, no-c-format
++ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
++ msgstr "E499: Tomt filnavn for '%' eller '#', virker kun med \":p:h\""
++
++ msgid "E500: Evaluates to an empty string"
++ msgstr "E500: Evaluerer til en tom streng"
++
++ msgid "E195: Cannot open viminfo file for reading"
++ msgstr "E195: Kan ikke åbne viminfo-fil til læsning"
++
++ msgid "Untitled"
++ msgstr "Unavngivet"
++
++ msgid "E196: No digraphs in this version"
++ msgstr "E196: Ingen digraffer i denne version"
++
++ msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
++ msgstr "E608: Kan ikke :throw-undtagelser med 'Vim'-præfiks"
++
++ #, c-format
++ msgid "Exception thrown: %s"
++ msgstr "Undtagelse kastet: %s"
++
++ #, c-format
++ msgid "Exception finished: %s"
++ msgstr "Undtagelse færdig: %s"
++
++ #, c-format
++ msgid "Exception discarded: %s"
++ msgstr "Undtagelse forkastet: %s"
++
++ #, c-format
++ msgid "%s, line %ld"
++ msgstr "%s, linje %ld"
++
++ #, c-format
++ msgid "Exception caught: %s"
++ msgstr "Undtagelse fanget: %s"
++
++ #, c-format
++ msgid "%s made pending"
++ msgstr "%s gjort afventende"
++
++ #, c-format
++ msgid "%s resumed"
++ msgstr "%s genoptaget"
++
++ #, c-format
++ msgid "%s discarded"
++ msgstr "%s forkastet"
++
++ msgid "Exception"
++ msgstr "Undtagelse"
++
++ msgid "Error and interrupt"
++ msgstr "Fejl og afbryd"
++
++ msgid "Error"
++ msgstr "Fejl"
++
++ msgid "Interrupt"
++ msgstr "Afbryd"
++
++ msgid "E579: :if nesting too deep"
++ msgstr "E579: :if-indlejring for dyb"
++
++ msgid "E580: :endif without :if"
++ msgstr "E580: :endif uden :if"
++
++ msgid "E581: :else without :if"
++ msgstr "E581: :else uden :if"
++
++ msgid "E582: :elseif without :if"
++ msgstr "E582: :elseif uden :if"
++
++ msgid "E583: multiple :else"
++ msgstr "E583: flere :else"
++
++ msgid "E584: :elseif after :else"
++ msgstr "E584: :elseif efter :else"
++
++ msgid "E585: :while/:for nesting too deep"
++ msgstr "E585: :while/:for-indlejring for dyb"
++
++ msgid "E586: :continue without :while or :for"
++ msgstr "E586: :continue uden :while eller :for"
++
++ msgid "E587: :break without :while or :for"
++ msgstr "E587: :break uden :while eller :for"
++
++ msgid "E732: Using :endfor with :while"
++ msgstr "E732: Bruger :endfor med :while"
++
++ msgid "E733: Using :endwhile with :for"
++ msgstr "E733: Bruger :endwhile med :for"
++
++ msgid "E601: :try nesting too deep"
++ msgstr "E601: :try-indlejring for dyb"
++
++ msgid "E603: :catch without :try"
++ msgstr "E603: :catch uden :try"
++
++ msgid "E604: :catch after :finally"
++ msgstr "E604: :catch efter :finally"
++
++ msgid "E606: :finally without :try"
++ msgstr "E606: :finally uden :try"
++
++ msgid "E607: multiple :finally"
++ msgstr "E607: flere :finally"
++
++ msgid "E602: :endtry without :try"
++ msgstr "E602: :endtry uden :try"
++
++ msgid "E193: :endfunction not inside a function"
++ msgstr "E193: :endfunction ikke i en funktion"
++
++ msgid "E788: Not allowed to edit another buffer now"
++ msgstr "E788: Ikke tilladt at redigere anden buffer nu"
++
++ msgid "E811: Not allowed to change buffer information now"
++ msgstr "E811: Ikke tilladt at ændre bufferinformation nu"
++
++ msgid "tagname"
++ msgstr "tagnavn"
++
++ msgid " kind file\n"
++ msgstr " kind-fil\n"
++
++ msgid "'history' option is zero"
++ msgstr "'history'-tilvalget er nul"
++
++ #, c-format
++ msgid ""
++ "\n"
++ "# %s History (newest to oldest):\n"
++ msgstr ""
++ "\n"
++ "# %s Historik (nyeste til ældste):\n"
++
++ msgid "Command Line"
++ msgstr "Kommandolinje"
++
++ msgid "Search String"
++ msgstr "Søgestreng"
++
++ msgid "Expression"
++ msgstr "Udtryk"
++
++ msgid "Input Line"
++ msgstr "Inputlinje"
++
++ msgid "Debug Line"
++ msgstr "Fejlretningslinje"
++
++ msgid "E198: cmd_pchar beyond the command length"
++ msgstr "E198: cmd_pchar efter kommandolængden"
++
++ msgid "E199: Active window or buffer deleted"
++ msgstr "E199: Aktivt vindue eller buffer slettet"
++
++ msgid "E812: Autocommands changed buffer or buffer name"
++ msgstr "E812: Autokommandoer ændrede buffer eller buffernavn"
++
++ msgid "Illegal file name"
++ msgstr "Ulovlig filnavn"
++
++ msgid "is a directory"
++ msgstr "er en mappe"
++
++ msgid "is not a file"
++ msgstr "er ikke en fil"
++
++ msgid "is a device (disabled with 'opendevice' option)"
++ msgstr "er en enhed (deaktiveret med 'opendevice'-tilvalget)"
++
++ msgid "[New File]"
++ msgstr "[Ny fil]"
++
++ msgid "[New DIRECTORY]"
++ msgstr "[Ny MAPPE]"
++
++ msgid "[File too big]"
++ msgstr "[Filen er for stor]"
++
++ msgid "[Permission Denied]"
++ msgstr "[Tilladelse nægtet]"
++
++ msgid "E200: *ReadPre autocommands made the file unreadable"
++ msgstr "E200: *ReadPre-autokommandoer gjorde filen ulæselig"
++
++ msgid "E201: *ReadPre autocommands must not change current buffer"
++ msgstr "E201: *ReadPre-autokommandoer må ikke ændre nuværende buffer"
++
++ msgid "Vim: Reading from stdin...\n"
++ msgstr "Vim: Læser fra stdin...\n"
++
++ msgid "Reading from stdin..."
++ msgstr "Læser fra stdin..."
++
++ msgid "E202: Conversion made file unreadable!"
++ msgstr "E202: Konvertering gjorde filen ulæselig!"
++
++ msgid "[fifo/socket]"
++ msgstr "[fifo/sokkel]"
++
++ msgid "[fifo]"
++ msgstr "[fifo]"
++
++ msgid "[socket]"
++ msgstr "[sokkel]"
++
++ msgid "[character special]"
++ msgstr "[character special]"
++
++ msgid "[CR missing]"
++ msgstr "[CR mangler]"
++
++ msgid "[long lines split]"
++ msgstr "[opdeling af lange linjer]"
++
++ msgid "[NOT converted]"
++ msgstr "[IKKE konverteret]"
++
++ msgid "[converted]"
++ msgstr "[konverteret]"
++
++ #, c-format
++ msgid "[CONVERSION ERROR in line %ld]"
++ msgstr "[KONVERTERINGSFEJL på linje %ld]"
++
++ #, c-format
++ msgid "[ILLEGAL BYTE in line %ld]"
++ msgstr "[ULOVLIG BYTE på linje %ld]"
++
++ msgid "[READ ERRORS]"
++ msgstr "[LÆSEFEJL]"
++
++ msgid "Can't find temp file for conversion"
++ msgstr "Kan ikke finde midlertidig fil til konvertering"
++
++ msgid "Conversion with 'charconvert' failed"
++ msgstr "Konvertering med 'charconvert' mislykkedes"
++
++ msgid "can't read output of 'charconvert'"
++ msgstr "kan ikke læse output af 'charconvert'"
++
++ msgid "E676: No matching autocommands for acwrite buffer"
++ msgstr "E676: Ingen matchende autokommandoer for acwrite-buffer"
++
++ msgid "E203: Autocommands deleted or unloaded buffer to be written"
++ msgstr "E203: Autokommandoer slettet eller udlæste buffer som skal skrives"
++
++ msgid "E204: Autocommand changed number of lines in unexpected way"
++ msgstr "E204: Autokommando ændrede antal linjer på en uventede måde"
++
++ msgid "NetBeans disallows writes of unmodified buffers"
++ msgstr "NetBeans tillader ikke skrivninger af uændrede buffere"
++
++ msgid "Partial writes disallowed for NetBeans buffers"
++ msgstr "Ufuldstændige skrivninger er ikke tilladt for NetBeans-buffere"
++
++ msgid "is not a file or writable device"
++ msgstr "er ikke en fil eller enhed som der kan skrives til"
++
++ msgid "writing to device disabled with 'opendevice' option"
++ msgstr "skrivning til enhed er deaktiveret med 'opendevice'-tilvalget"
++
++ msgid "is read-only (add ! to override)"
++ msgstr "er skrivebeskyttet (tilføj ! for at tilsidesætte)"
++
++ msgid "E506: Can't write to backup file (add ! to override)"
++ msgstr ""
++ "E506: Kan ikke skrive til sikkerhedskopieret fil (tilføj ! for at "
++ "tilsidesætte)"
++
++ msgid "E507: Close error for backup file (add ! to override)"
++ msgstr ""
++ "E507: Fejl ved lukning af sikkerhedskopieret fil (tilføj ! for at "
++ "tilsidesætte)"
++
++ msgid "E508: Can't read file for backup (add ! to override)"
++ msgstr ""
++ "E508: Kan ikke læse fil til sikkerhedskopiering (tilføj ! for at "
++ "tilsidesætte)"
++
++ msgid "E509: Cannot create backup file (add ! to override)"
++ msgstr ""
++ "E509: Kan ikke oprette (create) sikkerhedskopieret fil (tilføj ! for at "
++ "tilsidesætte)"
++
++ msgid "E510: Can't make backup file (add ! to override)"
++ msgstr ""
++ "E510: Kan ikke oprette (make) sikkerhedskopieret fil (tilføj ! for at "
++ "tilsidesætte)"
++
++ msgid "E214: Can't find temp file for writing"
++ msgstr "E214: Kan ikke finde midlertidig fil til skrivning"
++
++ msgid "E213: Cannot convert (add ! to write without conversion)"
++ msgstr "E213: Kan ikke konvertere (tilføj ! for at skrive uden konvertering)"
++
++ msgid "E166: Can't open linked file for writing"
++ msgstr "E166: Kan ikke åbne linket fil til skrivning"
++
++ msgid "E212: Can't open file for writing"
++ msgstr "E212: Kan ikke åbne filen til skrivning"
++
++ msgid "E949: File changed while writing"
++ msgstr "E949: Filen blev ændret ved skrivning"
++
++ msgid "E512: Close failed"
++ msgstr "E512: Lukning mislykkedes"
++
++ msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
++ msgstr ""
++ "E513: fejl ved skrivning, konvertering mislykkedes (gør 'fenc' tom for at "
++ "tilsidesætte)"
++
++ #, c-format
++ msgid ""
++ "E513: write error, conversion failed in line %ld (make 'fenc' empty to "
++ "override)"
++ msgstr ""
++ "E513: fejl ved skrivning, konvertering mislykkedes på linje %ld (gør 'fenc' "
++ "tom for at tilsidesætte)"
++
++ msgid "E514: write error (file system full?)"
++ msgstr "E514: skrivefejl (er filsystemet fuldt?)"
++
++ msgid " CONVERSION ERROR"
++ msgstr " KONVERTERINGSFEJL"
++
++ #, c-format
++ msgid " in line %ld;"
++ msgstr " på linje %ld;"
++
++ msgid "[Device]"
++ msgstr "[Enhed]"
++
++ msgid "[New]"
++ msgstr "[Ny]"
++
++ msgid " [a]"
++ msgstr " [a]"
++
++ msgid " appended"
++ msgstr " tilføjet i slutningen"
++
++ msgid " [w]"
++ msgstr " [s]"
++
++ msgid " written"
++ msgstr " skrevet"
++
++ msgid "E205: Patchmode: can't save original file"
++ msgstr "E205: Patchmode: kan ikke gemme original fil"
++
++ msgid "E206: patchmode: can't touch empty original file"
++ msgstr "E206: patchmode: kan ikke touch tom original fil"
++
++ msgid "E207: Can't delete backup file"
++ msgstr "E207: Kan ikke slette sikkerhedskopieret fil"
++
++ msgid ""
++ "\n"
++ "WARNING: Original file may be lost or damaged\n"
++ msgstr ""
++ "\n"
++ "ADVARSEL: Den originale fil kan man mistet eller beskadiget\n"
++
++ msgid "don't quit the editor until the file is successfully written!"
++ msgstr "afslut ikke editoren inden filen er blevet skrevet!"
++
++ msgid "[dos]"
++ msgstr "[dos]"
++
++ msgid "[dos format]"
++ msgstr "[dos-format]"
++
++ msgid "[mac]"
++ msgstr "[mac]"
++
++ msgid "[mac format]"
++ msgstr "[mac-format]"
++
++ msgid "[unix]"
++ msgstr "[unix]"
++
++ msgid "[unix format]"
++ msgstr "[unix-format]"
++
++ msgid "1 line, "
++ msgstr "1 linje, "
++
++ #, c-format
++ msgid "%ld lines, "
++ msgstr "%ld linjer, "
++
++ msgid "1 character"
++ msgstr "1 tegn"
++
++ #, c-format
++ msgid "%lld characters"
++ msgstr "%lld tegn"
++
++ msgid "[noeol]"
++ msgstr "[ingen eol]"
++
++ msgid "[Incomplete last line]"
++ msgstr "[Ufuldstændig sidste linje]"
++
++ msgid "WARNING: The file has been changed since reading it!!!"
++ msgstr "ADVARSEL: Filen er blevet ændret siden den blev læst!!!"
++
++ msgid "Do you really want to write to it"
++ msgstr "Vil du virkelig skrive den"
++
++ #, c-format
++ msgid "E208: Error writing to \"%s\""
++ msgstr "E208: Fejl ved skrivning til \"%s\""
++
++ #, c-format
++ msgid "E209: Error closing \"%s\""
++ msgstr "E209: Fejl ved lukning af \"%s\""
++
++ #, c-format
++ msgid "E210: Error reading \"%s\""
++ msgstr "E210: Fejl ved læsning af \"%s\""
++
++ msgid "E246: FileChangedShell autocommand deleted buffer"
++ msgstr "E246: FileChangedShell-autokommando slettede buffer"
++
++ #, c-format
++ msgid "E211: File \"%s\" no longer available"
++ msgstr "E211: Filen \"%s\" er ikke længere tilgængelig"
++
++ #, c-format
++ msgid ""
++ "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
++ "well"
++ msgstr ""
++ "W12: Advarsel: Filen \"%s\" er blevet ændret og bufferen blev også ændret i "
++ "Vim"
++
++ msgid "See \":help W12\" for more info."
++ msgstr "Se \":help W12\" for mere info."
++
++ #, c-format
++ msgid "W11: Warning: File \"%s\" has changed since editing started"
++ msgstr "W11: Advarsel: Filen \"%s\" er blevet ændret siden redigeringen startede"
++
++ msgid "See \":help W11\" for more info."
++ msgstr "Se \":help W11\" for mere info."
++
++ #, c-format
++ msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
++ msgstr ""
++ "W16: Advarsel: Tilstanden af filen \"%s\" er blevet ændret siden redigeringen "
++ "startede"
++
++ msgid "See \":help W16\" for more info."
++ msgstr "Se \":help W16\" for mere info."
++
++ #, c-format
++ msgid "W13: Warning: File \"%s\" has been created after editing started"
++ msgstr ""
++ "W13: Advarsel: Filen \"%s\" er blevet oprettet efter redigeringen startede"
++
++ msgid "Warning"
++ msgstr "Advarsel"
++
++ msgid ""
++ "&OK\n"
++ "&Load File"
++ msgstr ""
++ "&OK\n"
++ "&Indlæs fil"
++
++ #, c-format
++ msgid "E462: Could not prepare for reloading \"%s\""
++ msgstr "E462: Kunne ikke forbedre til genindlæsning af \"%s\""
++
++ #, c-format
++ msgid "E321: Could not reload \"%s\""
++ msgstr "E321: Kunne ikke genindlæse \"%s\""
++
++ msgid "--Deleted--"
++ msgstr "--Slettet--"
++
++ #, c-format
++ msgid "auto-removing autocommand: %s <buffer=%d>"
++ msgstr "auto-removing-autokommando: %s <buffer=%d>"
++
++ #, c-format
++ msgid "E367: No such group: \"%s\""
++ msgstr "E367: Ingen sådan gruppe: \"%s\""
++
++ msgid "E936: Cannot delete the current group"
++ msgstr "E936: Kan ikke slette den nuværende gruppe"
++
++ msgid "W19: Deleting augroup that is still in use"
++ msgstr "W19: Sletter augroup som stadig er i brug"
++
++ #, c-format
++ msgid "E215: Illegal character after *: %s"
++ msgstr "E215: Ulovligt tegn efter *: %s"
++
++ #, c-format
++ msgid "E216: No such event: %s"
++ msgstr "E216: Ingen sådan hændelse: %s"
++
++ #, c-format
++ msgid "E216: No such group or event: %s"
++ msgstr "E216: Ingen sådan gruppe eller hændelse: %s"
++
++ msgid ""
++ "\n"
++ "--- Auto-Commands ---"
++ msgstr ""
++ "\n"
++ "--- Auto-kommandoer ---"
++
++ #, c-format
++ msgid "E680: <buffer=%d>: invalid buffer number "
++ msgstr "E680: <buffer=%d>: ugyldigt buffernummer "
++
++ msgid "E217: Can't execute autocommands for ALL events"
++ msgstr "E217: Kan ikke udføre autokommandoer for ALLE hændelser"
++
++ msgid "No matching autocommands"
++ msgstr "Ingen matchende autokommandoer"
++
++ msgid "E218: autocommand nesting too deep"
++ msgstr "E218: autokommando indlejret for dyb"
++
++ #, c-format
++ msgid "%s Auto commands for \"%s\""
++ msgstr "%s Auto-kommandoer for \"%s\""
++
++ #, c-format
++ msgid "Executing %s"
++ msgstr "Udfører %s"
++
++ #, c-format
++ msgid "autocommand %s"
++ msgstr "autokommando %s"
++
++ msgid "E219: Missing {."
++ msgstr "E219: Manglende {."
++
++ msgid "E220: Missing }."
++ msgstr "E220: Manglende }."
++
++ msgid "E490: No fold found"
++ msgstr "E490: Ingen sammenfoldning fundet"
++
++ msgid "E350: Cannot create fold with current 'foldmethod'"
++ msgstr "E350: Kan ikke oprette sammenfoldning med nuværende 'foldmethod'"
++
++ msgid "E351: Cannot delete fold with current 'foldmethod'"
++ msgstr "E351: Kan ikke slette sammenfoldning med nuværende 'foldmethod'"
++
++ #, c-format
++ msgid "+--%3ld line folded "
++ msgid_plural "+--%3ld lines folded "
++ msgstr[0] "+--%3ld linje sammenfoldet "
++ msgstr[1] "+--%3ld linjer sammenfoldet "
++
++ msgid "E222: Add to read buffer"
++ msgstr "E222: Tilføj til læsebuffer"
++
++ msgid "E223: recursive mapping"
++ msgstr "E223: rekursiv mapping"
++
++ #, c-format
++ msgid "E224: global abbreviation already exists for %s"
++ msgstr "E224: global forkortelse findes allerede for %s"
++
++ #, c-format
++ msgid "E225: global mapping already exists for %s"
++ msgstr "E225: global mapping findes allerede for %s"
++
++ #, c-format
++ msgid "E226: abbreviation already exists for %s"
++ msgstr "E226: forkortelse findes allerede for %s"
++
++ #, c-format
++ msgid "E227: mapping already exists for %s"
++ msgstr "E227: mapping findes allerede for %s"
++
++ msgid "No abbreviation found"
++ msgstr "Ingen forkortelse fundet"
++
++ msgid "No mapping found"
++ msgstr "Ingen mapping fundet"
++
++ msgid "E228: makemap: Illegal mode"
++ msgstr "E228: makemap: Ulovlig tilstand"
++
++ msgid "E851: Failed to create a new process for the GUI"
++ msgstr "E851: Kunne ikke oprette en ny proces for GUI'en"
++
++ msgid "E852: The child process failed to start the GUI"
++ msgstr "E852: Barneprocessen kunne ikke starte GUI'en"
++
++ msgid "E229: Cannot start the GUI"
++ msgstr "E229: Kan ikke starte GUI'en"
++
++ #, c-format
++ msgid "E230: Cannot read from \"%s\""
++ msgstr "E230: Kan ikke læse fra \"%s\""
++
++ msgid "E665: Cannot start GUI, no valid font found"
++ msgstr "E665: Kan ikke starte GUI, ingen gyldig skrifttype fundet"
++
++ msgid "E231: 'guifontwide' invalid"
++ msgstr "E231: 'guifontwide' ugyldig"
++
++ msgid "E599: Value of 'imactivatekey' is invalid"
++ msgstr "E599: Værdien af 'imactivatekey' er ugyldig"
++
++ #, c-format
++ msgid "E254: Cannot allocate color %s"
++ msgstr "E254: Kan ikke allokere farven %s"
++
++ msgid "No match at cursor, finding next"
++ msgstr "Intet match ved markør, finder næste"
++
++ msgid "<cannot open> "
++ msgstr "<kan ikke åbne> "
++
++ #, c-format
++ msgid "E616: vim_SelFile: can't get font %s"
++ msgstr "E616: vim_SelFile: kan ikke hente skrifttypen %s"
++
++ msgid "E614: vim_SelFile: can't return to current directory"
++ msgstr "E614: vim_SelFile: kan ikke vende tilbage til nuværende mappe"
++
++ msgid "Pathname:"
++ msgstr "Stinavn:"
++
++ msgid "E615: vim_SelFile: can't get current directory"
++ msgstr "E615: vim_SelFile: kan ikke hente nuværende mappe"
++
++ msgid "OK"
++ msgstr "OK"
++
++ msgid "Cancel"
++ msgstr "Annuller"
++
++ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
++ msgstr ""
++ "Rullebjælke-widget: Kunne ikke hente geometri eller pixelkort til miniature."
++
++ msgid "Vim dialog"
++ msgstr "Vim-dialog"
++
++ msgid "E232: Cannot create BalloonEval with both message and callback"
++ msgstr "E232: Kan ikke oprette BalloonEval med både meddelelse og callback"
++
++ msgid "_Cancel"
++ msgstr "_Annuller"
++
++ msgid "_Save"
++ msgstr "_Gem"
++
++ msgid "_Open"
++ msgstr "_Ã…bn"
++
++ msgid "_OK"
++ msgstr "_OK"
++
++ msgid ""
++ "&Yes\n"
++ "&No\n"
++ "&Cancel"
++ msgstr ""
++ "&Ja\n"
++ "&Nej\n"
++ "&Annuller"
++
++ msgid "Yes"
++ msgstr "Ja"
++
++ msgid "No"
++ msgstr "Nej"
++
++ msgid "Input _Methods"
++ msgstr "Input_metoder"
++
++ msgid "VIM - Search and Replace..."
++ msgstr "VIM - Søg og erstat..."
++
++ msgid "VIM - Search..."
++ msgstr "VIM - Søg..."
++
++ msgid "Find what:"
++ msgstr "Find hvad:"
++
++ msgid "Replace with:"
++ msgstr "Erstat med:"
++
++ msgid "Match whole word only"
++ msgstr "Match kun hele ord"
++
++ msgid "Match case"
++ msgstr "Der skelnes ikke mellem store og små bogstaver"
++
++ msgid "Direction"
++ msgstr "Retning"
++
++ msgid "Up"
++ msgstr "Op"
++
++ msgid "Down"
++ msgstr "Ned"
++
++ msgid "Find Next"
++ msgstr "Find næste"
++
++ msgid "Replace"
++ msgstr "Erstat"
++
++ msgid "Replace All"
++ msgstr "Erstat alle"
++
++ msgid "_Close"
++ msgstr "_Luk"
++
++ msgid "Vim: Received \"die\" request from session manager\n"
++ msgstr "Vim: Modtog \"die\"-anmodning fra sessionshåndtering\n"
++
++ msgid "Close tab"
++ msgstr "Luk faneblad"
++
++ msgid "New tab"
++ msgstr "Nyt faneblad"
++
++ msgid "Open Tab..."
++ msgstr "Ã…bn faneblad..."
++
++ msgid "Vim: Main window unexpectedly destroyed\n"
++ msgstr "Vim: Hovedvindue uventet ødelagt\n"
++
++ msgid "&Filter"
++ msgstr "&Filter"
++
++ msgid "&Cancel"
++ msgstr "&Annuller"
++
++ msgid "Directories"
++ msgstr "Mapper"
++
++ msgid "Filter"
++ msgstr "Filter"
++
++ msgid "&Help"
++ msgstr "&Hjælp"
++
++ msgid "Files"
++ msgstr "Filer"
++
++ msgid "&OK"
++ msgstr "&OK"
++
++ msgid "Selection"
++ msgstr "Markering"
++
++ msgid "Find &Next"
++ msgstr "Find &næste"
++
++ msgid "&Replace"
++ msgstr "&Erstat"
++
++ msgid "Replace &All"
++ msgstr "Erstat &alle"
++
++ msgid "&Undo"
++ msgstr "&Fortryd"
++
++ msgid "Open tab..."
++ msgstr "Ã…bn faneblad..."
++
++ msgid "Find string (use '\\\\' to find a '\\')"
++ msgstr "Find streng (brug '\\\\' til at finde et '\\')"
++
++ msgid "Find & Replace (use '\\\\' to find a '\\')"
++ msgstr "Find og erstat (brug '\\\\' til at finde et '\\')"
++
++ msgid "Not Used"
++ msgstr "Ikke brugt"
++
++ msgid "Directory\t*.nothing\n"
++ msgstr "Mappe\t\t*.nothing\n"
++
++ #, c-format
++ msgid "E671: Cannot find window title \"%s\""
++ msgstr "E671: Kan ikke finde vinduestitlen \"%s\""
++
++ #, c-format
++ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
++ msgstr "E243: Argumentet understøttes ikke: \"-%s\"; Brug OLE-versionen."
++
++ msgid "E672: Unable to open window inside MDI application"
++ msgstr "E672: Kan ikke åbne vindue i MDI-program"
++
++ msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
++ msgstr ""
++ "Vim E458: Kan ikke allokere colormap-post, nogle farver kan være forkerte"
++
++ #, c-format
++ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
++ msgstr "E250: Skrifttyper for følgende tegnsæt mangler i skrifttypesættet %s:"
++
++ #, c-format
++ msgid "E252: Fontset name: %s"
++ msgstr "E252: Skrifttypesætnavn: %s"
++
++ #, c-format
++ msgid "Font '%s' is not fixed-width"
++ msgstr "Skrifttypen '%s' er ikke med fast bredde"
++
++ #, c-format
++ msgid "E253: Fontset name: %s"
++ msgstr "E253: Skrifttypesætnavn: %s"
++
++ #, c-format
++ msgid "Font0: %s"
++ msgstr "Skrifttype0: %s"
++
++ #, c-format
++ msgid "Font1: %s"
++ msgstr "Skrifttype1: %s"
++
++ #, c-format
++ msgid "Font%ld width is not twice that of font0"
++ msgstr "Bredden på skrifttype%ld er ikke det dobbelte af skrifttype0"
++
++ #, c-format
++ msgid "Font0 width: %ld"
++ msgstr "Bredden på skrifttype0: %ld"
++
++ #, c-format
++ msgid "Font1 width: %ld"
++ msgstr "Bredden på skrifttype1: %ld"
++
++ msgid "Invalid font specification"
++ msgstr "Ugyldig skrifttypespecifikation"
++
++ msgid "&Dismiss"
++ msgstr "&Luk"
++
++ msgid "no specific match"
++ msgstr "intet specifikt match"
++
++ msgid "Vim - Font Selector"
++ msgstr "Vim - Skrifttypevælger"
++
++ msgid "Name:"
++ msgstr "Navn:"
++
++ msgid "Show size in Points"
++ msgstr "Vis størrelse i punkter"
++
++ msgid "Encoding:"
++ msgstr "Kodning:"
++
++ msgid "Font:"
++ msgstr "Skrifttype:"
++
++ msgid "Style:"
++ msgstr "Stil:"
++
++ msgid "Size:"
++ msgstr "Størrelse:"
++
++ msgid "E256: Hangul automata ERROR"
++ msgstr "E256: FEJL ved Hangul automata"
++
++ msgid "E550: Missing colon"
++ msgstr "E550: Manglende kolon"
++
++ msgid "E551: Illegal component"
++ msgstr "E551: Ulovlig komponent"
++
++ msgid "E552: digit expected"
++ msgstr "E552: ciffer ventet"
++
++ #, c-format
++ msgid "Page %d"
++ msgstr "Side %d"
++
++ msgid "No text to be printed"
++ msgstr "Ingen tekst at udskrive"
++
++ #, c-format
++ msgid "Printing page %d (%d%%)"
++ msgstr "Udskriver side %d (%d%%)"
++
++ #, c-format
++ msgid " Copy %d of %d"
++ msgstr " Kopi %d af %d"
++
++ #, c-format
++ msgid "Printed: %s"
++ msgstr "Udskrev: %s"
++
++ msgid "Printing aborted"
++ msgstr "Udskrivning afbrudt"
++
++ msgid "E455: Error writing to PostScript output file"
++ msgstr "E455: Fejl ved skrivning til PostScript-output-fil"
++
++ #, c-format
++ msgid "E624: Can't open file \"%s\""
++ msgstr "E624: Kan ikke åbne filen \"%s\""
++
++ #, c-format
++ msgid "E457: Can't read PostScript resource file \"%s\""
++ msgstr "E457: Kan ikke læse PostScript-ressourcefilen \"%s\""
++
++ #, c-format
++ msgid "E618: file \"%s\" is not a PostScript resource file"
++ msgstr "E618: filen \"%s\" er ikke en PostScript-ressourcefil"
++
++ #, c-format
++ msgid "E619: file \"%s\" is not a supported PostScript resource file"
++ msgstr "E619: filen \"%s\" er ikke en understøttet PostScript-ressourcefil"
++
++ #, c-format
++ msgid "E621: \"%s\" resource file has wrong version"
++ msgstr "E621: \"%s\"-ressourcefilen har forkert version"
++
++ msgid "E673: Incompatible multi-byte encoding and character set."
++ msgstr "E673: Inkompatibel multibyte-kodning og -tegnsæt."
++
++ msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
++ msgstr "E674: printmbcharset må ikke være tom med multibyte-kodning."
++
++ msgid "E675: No default font specified for multi-byte printing."
++ msgstr "E675: Ingen standardskrifttype angivet for multibyte-udskrivning."
++
++ msgid "E324: Can't open PostScript output file"
++ msgstr "E324: Kan ikke åbne PostScript-output-fil"
++
++ #, c-format
++ msgid "E456: Can't open file \"%s\""
++ msgstr "E456: Kan ikke åbne filen \"%s\""
++
++ msgid "E456: Can't find PostScript resource file \"prolog.ps\""
++ msgstr "E456: Kan ikke finde PostScript-ressourcefilen \"prolog.ps\""
++
++ msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
++ msgstr "E456: Kan ikke finde PostScript-ressourcefilen \"cidfont.ps\""
++
++ #, c-format
++ msgid "E456: Can't find PostScript resource file \"%s.ps\""
++ msgstr "E456: Kan ikke finde PostScript-ressourcefilen \"%s.ps\""
++
++ #, c-format
++ msgid "E620: Unable to convert to print encoding \"%s\""
++ msgstr "E620: Kan ikke konvertere til udskrivningskodningen \"%s\""
++
++ msgid "Sending to printer..."
++ msgstr "Sender til printer..."
++
++ msgid "E365: Failed to print PostScript file"
++ msgstr "E365: Kunne ikke udskrive PostScript-fil"
++
++ msgid "Print job sent."
++ msgstr "Udskrivningsjob sendt."
++
++ msgid "Add a new database"
++ msgstr "Tilføj en ny database"
++
++ msgid "Query for a pattern"
++ msgstr "Forespørgsel til et mønster"
++
++ msgid "Show this message"
++ msgstr "Vis denne meddelelse"
++
++ msgid "Kill a connection"
++ msgstr "Dræb en forbindelse"
++
++ msgid "Reinit all connections"
++ msgstr "Geninitialisere alle forbindelser"
++
++ msgid "Show connections"
++ msgstr "Vis forbindelser"
++
++ #, c-format
++ msgid "E560: Usage: cs[cope] %s"
++ msgstr "E560: Anvendelse: cs[cope] %s"
++
++ msgid "This cscope command does not support splitting the window.\n"
++ msgstr "Denne cscope-kommando understøtter ikke opdeling af vinduet.\n"
++
++ msgid "E562: Usage: cstag <ident>"
++ msgstr "E562: Anvendelse: cstag <ident>"
++
++ msgid "E257: cstag: tag not found"
++ msgstr "E257: cstag: tag ikke fundet"
++
++ #, c-format
++ msgid "E563: stat(%s) error: %d"
++ msgstr "E563: fejl ved stat(%s): %d"
++
++ msgid "E563: stat error"
++ msgstr "E563: fejl ved stat"
++
++ #, c-format
++ msgid "E564: %s is not a directory or a valid cscope database"
++ msgstr "E564: %s er ikke en mappe eller en gyldig cscope-database"
++
++ #, c-format
++ msgid "Added cscope database %s"
++ msgstr "Tilføjede cscope-databasen %s"
++
++ #, c-format
++ msgid "E262: error reading cscope connection %ld"
++ msgstr "E262: fejl ved læsning af cscope-forbindelse %ld"
++
++ msgid "E561: unknown cscope search type"
++ msgstr "E561: ukendt cscope-søgetype"
++
++ msgid "E566: Could not create cscope pipes"
++ msgstr "E566: Kunne ikke oprette cscope-pipes"
++
++ msgid "E622: Could not fork for cscope"
++ msgstr "E622: Kunne ikke fork for cscope"
++
++ msgid "cs_create_connection setpgid failed"
++ msgstr "cs_create_connection setpgid mislykkedes"
++
++ msgid "cs_create_connection exec failed"
++ msgstr "cs_create_connection exec mislykkedes"
++
++ msgid "cs_create_connection: fdopen for to_fp failed"
++ msgstr "cs_create_connection: fdopen for to_fp mislykkedes"
++
++ msgid "cs_create_connection: fdopen for fr_fp failed"
++ msgstr "cs_create_connection: fdopen for fr_fp mislykkedes"
++
++ msgid "E623: Could not spawn cscope process"
++ msgstr "E623: Kunne ikke spawn cscope-proces"
++
++ msgid "E567: no cscope connections"
++ msgstr "E567: ingen cscope-forbindelser"
++
++ #, c-format
++ msgid "E469: invalid cscopequickfix flag %c for %c"
++ msgstr "E469: ugyldigt cscopequickfix-flag %c for %c"
++
++ #, c-format
++ msgid "E259: no matches found for cscope query %s of %s"
++ msgstr "E259: ingen match fundet for cscope-forespørgsel %s af %s"
++
++ msgid "cscope commands:\n"
++ msgstr "cscope-kommandoer:\n"
++
++ #, c-format
++ msgid "%-5s: %s%*s (Usage: %s)"
++ msgstr "%-5s: %s%*s (Anvendelse: %s)"
++
++ msgid ""
++ "\n"
++ " a: Find assignments to this symbol\n"
++ " c: Find functions calling this function\n"
++ " d: Find functions called by this function\n"
++ " e: Find this egrep pattern\n"
++ " f: Find this file\n"
++ " g: Find this definition\n"
++ " i: Find files #including this file\n"
++ " s: Find this C symbol\n"
++ " t: Find this text string\n"
++ msgstr ""
++ "\n"
++ " a: Find tildelinger til symbolet\n"
++ " c: Find funktioner som kalder funktionen\n"
++ " d: Find funktioner som kaldes af funktionen\n"
++ " e: Find dette egrep-mønster\n"
++ " f: Find filen\n"
++ " g: Find definitionen\n"
++ " i: Find filer som #inkludere filen\n"
++ " s: Find C-symbolet\n"
++ " t: Find tekststrengen\n"
++
++ #, c-format
++ msgid "E625: cannot open cscope database: %s"
++ msgstr "E625: kan ikke åbne cscope-database: %s"
++
++ msgid "E626: cannot get cscope database information"
++ msgstr "E626: kan ikke hente information for cscope-database"
++
++ msgid "E568: duplicate cscope database not added"
++ msgstr "E568: duplikeret cscope-database ikke tilføjet"
++
++ #, c-format
++ msgid "E261: cscope connection %s not found"
++ msgstr "E261: cscope-forbindelsen %s ikke fundet"
++
++ #, c-format
++ msgid "cscope connection %s closed"
++ msgstr "cscope-forbindelsen %s lukket"
++
++ msgid "E570: fatal error in cs_manage_matches"
++ msgstr "E570: fatal fejl i cs_manage_matches"
++
++ #, c-format
++ msgid "Cscope tag: %s"
++ msgstr "Cscope-tag: %s"
++
++ msgid ""
++ "\n"
++ " # line"
++ msgstr ""
++ "\n"
++ " # linje"
++
++ msgid "filename / context / line\n"
++ msgstr "filnavn/kontekst/linje\n"
++
++ #, c-format
++ msgid "E609: Cscope error: %s"
++ msgstr "E609: Fejl ved cscope: %s"
++
++ msgid "All cscope databases reset"
++ msgstr "Alle cscope-databaser nulstillet"
++
++ msgid "no cscope connections\n"
++ msgstr "ingen cscope-forbindelser\n"
++
++ msgid " # pid database name prepend path\n"
++ msgstr " # pid databasenavn prepend-sti\n"
++
++ msgid "Lua library cannot be loaded."
++ msgstr "Lua-bibliotek kan ikke indlæses."
++
++ msgid "cannot save undo information"
++ msgstr "kan ikke gemme fortrydinformation"
++
++ msgid ""
++ "E815: Sorry, this command is disabled, the MzScheme libraries could not be "
++ "loaded."
++ msgstr ""
++ "E815: Beklager, kommandoen er deaktiveret, MzScheme-bibliotekerne kunne ikke "
++ "indlæses."
++
++ msgid ""
++ "E895: Sorry, this command is disabled, the MzScheme's racket/base module "
++ "could not be loaded."
++ msgstr ""
++ "E895: Beklager, kommandoen er deaktiveret, MzScheme's racket-/base-modul "
++ "kunne ikke indlæses."
++
++ msgid "invalid expression"
++ msgstr "ugyldigt udtryk"
++
++ msgid "expressions disabled at compile time"
++ msgstr "udtryk deaktiveret ved kompileringstid"
++
++ msgid "hidden option"
++ msgstr "skjult tilvalg"
++
++ msgid "unknown option"
++ msgstr "ukendt tilvalg"
++
++ msgid "window index is out of range"
++ msgstr "vinduesindeks udenfor område"
++
++ msgid "couldn't open buffer"
++ msgstr "kan ikke åbne buffer"
++
++ msgid "cannot delete line"
++ msgstr "kan ikke slette linje"
++
++ msgid "cannot replace line"
++ msgstr "kan ikke erstatte linje"
++
++ msgid "cannot insert line"
++ msgstr "kan ikke indsætte linje"
++
++ msgid "string cannot contain newlines"
++ msgstr "streng må ikke indeholde linjeskift"
++
++ msgid "error converting Scheme values to Vim"
++ msgstr "fejl ved konvertering af Scheme-værdier til Vim"
++
++ msgid "Vim error: ~a"
++ msgstr "Fejl ved Vim: ~a"
++
++ msgid "Vim error"
++ msgstr "Fejl ved Vim"
++
++ msgid "buffer is invalid"
++ msgstr "buffer er ugyldig"
++
++ msgid "window is invalid"
++ msgstr "vindue er ugyldigt"
++
++ msgid "linenr out of range"
++ msgstr "linjenummer udenfor område"
++
++ msgid "not allowed in the Vim sandbox"
++ msgstr "ikke tilladt i Vim-sandboksen"
++
++ msgid "E836: This Vim cannot execute :python after using :py3"
++ msgstr "E836: Denne Vim kan ikke udføre :python efter brug af :py3"
++
++ msgid ""
++ "E263: Sorry, this command is disabled, the Python library could not be "
++ "loaded."
++ msgstr ""
++ "E263: Beklager, kommandoen er deaktiveret, Python-biblioteket kunne ikke "
++ "indlæses."
++
++ msgid ""
++ "E887: Sorry, this command is disabled, the Python's site module could not be "
++ "loaded."
++ msgstr ""
++ "E887: Beklager, kommandoen er deaktiveret, Python's site-modul kunne ikke "
++ "indlæses."
++
++ msgid "E659: Cannot invoke Python recursively"
++ msgstr "E659: Kan ikke starte Python rekursivt"
++
++ msgid "E837: This Vim cannot execute :py3 after using :python"
++ msgstr "E837: Denne Vim kan ikke udføre :py3 efter brug af :python"
++
++ msgid "E265: $_ must be an instance of String"
++ msgstr "E265: $_ skal være en instans af streng"
++
++ msgid ""
++ "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
++ msgstr ""
++ "E266: Beklager, kommandoen er deaktiveret, Ruby-biblioteket kunne ikke "
++ "indlæses."
++
++ msgid "E267: unexpected return"
++ msgstr "E267: uventet return"
++
++ msgid "E268: unexpected next"
++ msgstr "E268: uventet next"
++
++ msgid "E269: unexpected break"
++ msgstr "E269: uventet break"
++
++ msgid "E270: unexpected redo"
++ msgstr "E270: uventet redo"
++
++ msgid "E271: retry outside of rescue clause"
++ msgstr "E271: prøv igen udenfor rescue clause"
++
++ msgid "E272: unhandled exception"
++ msgstr "E272: uhåndteret undtagelse"
++
++ #, c-format
++ msgid "E273: unknown longjmp status %d"
++ msgstr "E273: ukendt longjmp-status %d"
++
++ msgid "invalid buffer number"
++ msgstr "ugyldigt buffernummer"
++
++ msgid "not implemented yet"
++ msgstr "endnu ikke implementeret"
++
++ msgid "cannot set line(s)"
++ msgstr "kan ikke sætte linje(r)"
++
++ msgid "invalid mark name"
++ msgstr "ugyldigt mærkenavn"
++
++ msgid "mark not set"
++ msgstr "mærke ikke sat"
++
++ #, c-format
++ msgid "row %d column %d"
++ msgstr "række %d kolonne %d"
++
++ msgid "cannot insert/append line"
++ msgstr "kan ikke indsætte/tilføje linje"
++
++ msgid "line number out of range"
++ msgstr "linjenummer udenfor område"
++
++ msgid "unknown flag: "
++ msgstr "ukendt flag: "
++
++ msgid "unknown vimOption"
++ msgstr "ukendt vimOption"
++
++ msgid "keyboard interrupt"
++ msgstr "tastaturafbryd"
++
++ msgid "vim error"
++ msgstr "fejl ved vim"
++
++ msgid "cannot create buffer/window command: object is being deleted"
++ msgstr "kan ikke oprette buffer-/vindue-kommando: objekt slettes"
++
++ msgid ""
++ "cannot register callback command: buffer/window is already being deleted"
++ msgstr ""
++ "kan ikke registrere callback-kommando: buffer/vindue er allerede ved at "
++ "blive slettet"
++
++ msgid ""
++ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim."
++ "org"
++ msgstr ""
++ "E280: FATAL FEJL VED TCL: reflist korrupt!? Rapportér det venligst til vim-"
++ "dev@vim.org"
++
++ msgid "cannot register callback command: buffer/window reference not found"
++ msgstr ""
++ "kan ikke registrere callback-kommando: buffer-/vindue-reference ikke fundet"
++
++ msgid ""
++ "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
++ msgstr ""
++ "E571: Beklager, kommandoen er deaktiveret: Tcl-biblioteket kunne ikke "
++ "indlæses."
++
++ #, c-format
++ msgid "E572: exit code %d"
++ msgstr "E572: afslutningskode %d"
++
++ msgid "cannot get line"
++ msgstr "kan ikke hente linje"
++
++ msgid "Unable to register a command server name"
++ msgstr "Kan ikke registrere et kommandoservernavn"
++
++ msgid "E248: Failed to send command to the destination program"
++ msgstr "E248: Kunne ikke sende kommando til destinationsprogrammet"
++
++ #, c-format
++ msgid "E573: Invalid server id used: %s"
++ msgstr "E573: Ugyldigt server-id brugt: %s"
++
++ msgid "E251: VIM instance registry property is badly formed. Deleted!"
++ msgstr ""
++ "E251: Registreringsegenskab for VIM-instans er dårligt udformet. Slettet!"
++
++ #, c-format
++ msgid "E938: Duplicate key in JSON: \"%s\""
++ msgstr "E938: Duplikeret nøgle i JSON: \"%s\""
++
++ #, c-format
++ msgid "E696: Missing comma in List: %s"
++ msgstr "E696: Manglende komma i liste: %s"
++
++ #, c-format
++ msgid "E697: Missing end of List ']': %s"
++ msgstr "E697: Manglende slutning på List ']': %s"
++
++ msgid "Unknown option argument"
++ msgstr "Ukendt tilvalgsargument"
++
++ msgid "Too many edit arguments"
++ msgstr "For mange redigeringsargumenter"
++
++ msgid "Argument missing after"
++ msgstr "Argument mangler efter"
++
++ msgid "Garbage after option argument"
++ msgstr "Affald efter tilvalgsargument"
++
++ msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
++ msgstr ""
++ "For mange \"+kommando\"-, \"-c kommando\"- eller \"--cmd kommando\"-argumenter"
++
++ msgid "Invalid argument for"
++ msgstr "Ugyldigt argument for"
++
++ #, c-format
++ msgid "%d files to edit\n"
++ msgstr "%d filer at redigere\n"
++
++ msgid "netbeans is not supported with this GUI\n"
++ msgstr "netbeans understøttes ikke med denne GUI\n"
++
++ msgid "'-nb' cannot be used: not enabled at compile time\n"
++ msgstr "'-nb' kan ikke bruges: ikke aktiveret ved kompileringstid\n"
++
++ msgid "This Vim was not compiled with the diff feature."
++ msgstr "Denne Vim blev ikke kompileret med diff-funktionaliteten."
++
++ msgid "Attempt to open script file again: \""
++ msgstr "Forsøg på at åbne scriptfil igen: \""
++
++ msgid "Cannot open for reading: \""
++ msgstr "Kan ikke åbne til læsning: \""
++
++ msgid "Cannot open for script output: \""
++ msgstr "Kan ikke åbne for script-output: \""
++
++ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
++ msgstr "Vim: Fejl: Kunne ikke starte gvim fra NetBeans\n"
++
++ msgid "Vim: Error: This version of Vim does not run in a Cygwin terminal\n"
++ msgstr "Vim: Fejl: Denne version af Vim kører ikke i en Cygwin-terminal\n"
++
++ msgid "Vim: Warning: Output is not to a terminal\n"
++ msgstr "Vim: Advarsel: Output er ikke til en terminal\n"
++
++ msgid "Vim: Warning: Input is not from a terminal\n"
++ msgstr "Vim: Advarsel: Input er ikke fra en terminal\n"
++
++ msgid "pre-vimrc command line"
++ msgstr "pre-vimrc-kommandolinje"
++
++ #, c-format
++ msgid "E282: Cannot read from \"%s\""
++ msgstr "E282: Kan ikke læse fra \"%s\""
++
++ msgid ""
++ "\n"
++ "More info with: \"vim -h\"\n"
++ msgstr ""
++ "\n"
++ "Mere info med: \"vim -h\"\n"
++
++ msgid "[file ..] edit specified file(s)"
++ msgstr "[fil ..] rediger angivne fil(er)"
++
++ msgid "- read text from stdin"
++ msgstr "- læs tekst fra stdin"
++
++ msgid "-t tag edit file where tag is defined"
++ msgstr "-t tag rediger fil hvor tag er defineret"
++
++ msgid "-q [errorfile] edit file with first error"
++ msgstr "-q [fejlfil] rediger fil med første fejl"
++
++ msgid ""
++ "\n"
++ "\n"
++ "usage:"
++ msgstr ""
++ "\n"
++ "\n"
++ "anvendelse:"
++
++ msgid " vim [arguments] "
++ msgstr " vim [argumenter] "
++
++ msgid ""
++ "\n"
++ " or:"
++ msgstr ""
++ "\n"
++ " eller:"
++
++ msgid ""
++ "\n"
++ "Where case is ignored prepend / to make flag upper case"
++ msgstr ""
++ "\n"
++ "Når der ikke skelnes mellem store og små bogstaver, så tilføj / i "
++ "begyndelsen for at gøre flag til store bogstaver"
++
++ msgid ""
++ "\n"
++ "\n"
++ "Arguments:\n"
++ msgstr ""
++ "\n"
++ "\n"
++ "Argumenter:\n"
++
++ msgid "--\t\t\tOnly file names after this"
++ msgstr "--\t\t\tKun filnavne herefter"
++
++ msgid "--literal\t\tDon't expand wildcards"
++ msgstr "--literal\t\tUdvid ikke jokertegn"
++
++ msgid "-register\t\tRegister this gvim for OLE"
++ msgstr "-register\t\tRegistrer denne gvim til OLE"
++
++ msgid "-unregister\t\tUnregister gvim for OLE"
++ msgstr "-unregister\t\tAfregistrer gvim for OLE"
++
++ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
++ msgstr "-g\t\t\tKør med GUI (ligesom \"gvim\")"
++
++ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
++ msgstr "-f eller --nofork\tForgrund: Fork ikke når GUI startes"
++
++ msgid "-v\t\t\tVi mode (like \"vi\")"
++ msgstr "-v\t\t\tVi-tilstand (ligesom \"vi\")"
++
++ msgid "-e\t\t\tEx mode (like \"ex\")"
++ msgstr "-e\t\t\tEx-tilstand (ligesom \"ex\")"
++
++ msgid "-E\t\t\tImproved Ex mode"
++ msgstr "-E\t\t\tForbedret Ex-tilstand"
++
++ msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
++ msgstr "-s\t\t\tStille (batch) tilstand (kun til \"ex\")"
++
++ msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
++ msgstr "-d\t\t\tDiff-tilstand (ligesom \"vimdiff\")"
++
++ msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
++ msgstr "-y\t\t\tEasy-tilstand (ligesom \"evim\", tilstandsløs)"
++
++ msgid "-R\t\t\tReadonly mode (like \"view\")"
++ msgstr "-R\t\t\tSkrivebeskyttet tilstand (ligesom \"view\")"
++
++ msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
++ msgstr "-Z\t\t\tRestriktiv tilstand (ligesom \"rvim\")"
++
++ msgid "-m\t\t\tModifications (writing files) not allowed"
++ msgstr "-m\t\t\tÆndringer (skrivning af filer) ikke tilladt"
++
++ msgid "-M\t\t\tModifications in text not allowed"
++ msgstr "-M\t\t\tÆndringer i tekst ikke tilladt"
++
++ msgid "-b\t\t\tBinary mode"
++ msgstr "-b\t\t\tBinær tilstand"
++
++ msgid "-l\t\t\tLisp mode"
++ msgstr "-l\t\t\tLisp-tilstand"
++
++ msgid "-C\t\t\tCompatible with Vi: 'compatible'"
++ msgstr "-C\t\t\tKompatibel med Vi: 'compatible'"
++
++ msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
++ msgstr "-N\t\t\tIkke fuldt ud Vi-kompatibel: 'nocompatible'"
++
++ msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
++ msgstr "-V[N][fnavn]\t\tVær uddybende [niveau N] [log meddelelser til fnavn]"
++
++ msgid "-D\t\t\tDebugging mode"
++ msgstr "-D\t\t\tFejlretningstilstand"
++
++ msgid "-n\t\t\tNo swap file, use memory only"
++ msgstr "-n\t\t\tIngen swap-fil, brug kun hukommelse"
++
++ msgid "-r\t\t\tList swap files and exit"
++ msgstr "-r\t\t\tOplist swap-filer og afslut"
++
++ msgid "-r (with file name)\tRecover crashed session"
++ msgstr "-r (med filnavn)\tGendan session som holdt op med at virke"
++
++ msgid "-L\t\t\tSame as -r"
++ msgstr "-L\t\t\tSamme som -r"
++
++ msgid "-f\t\t\tDon't use newcli to open window"
++ msgstr "-f\t\t\tBrug ikke newcli til at åbne vindue"
++
++ msgid "-dev <device>\t\tUse <device> for I/O"
++ msgstr "-dev <enhed>\t\tBrug <enhed> til I/O"
++
++ msgid "-A\t\t\tstart in Arabic mode"
++ msgstr "-A\t\t\tstart i arabisk tilstand"
++
++ msgid "-H\t\t\tStart in Hebrew mode"
++ msgstr "-H\t\t\tStart i hebraisk tilstand"
++
++ msgid "-F\t\t\tStart in Farsi mode"
++ msgstr "-F\t\t\tStart i persisk tilstand"
++
++ msgid "-T <terminal>\tSet terminal type to <terminal>"
++ msgstr "-T <terminal>\tSæt terminaltype til <terminal>"
++
++ msgid "--not-a-term\t\tSkip warning for input/output not being a terminal"
++ msgstr ""
++ "--not-a-term\t\tSpring advarsel over for input/output som ikke er en terminal"
++
++ msgid "--ttyfail\t\tExit if input or output is not a terminal"
++ msgstr "--ttyfail\t\tAfslut hvis input eller output ikke er en terminal"
++
++ msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
++ msgstr "-u <vimrc>\t\tBrug <vimrc> i stedet for nogen .vimrc"
++
++ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
++ msgstr "-U <gvimrc>\t\tBrug <gvimrc> i stedet for nogen .gvimrc"
++
++ msgid "--noplugin\t\tDon't load plugin scripts"
++ msgstr "--noplugin\t\tIndlæs ikke plugin-scripts"
++
++ msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
++ msgstr "-p[N]\t\tÅbn N fanebladssider (standard: én pr. fil)"
++
++ msgid "-o[N]\t\tOpen N windows (default: one for each file)"
++ msgstr "-o[N]\t\tÅbn N vinduer (standard: én pr. fil)"
++
++ msgid "-O[N]\t\tLike -o but split vertically"
++ msgstr "-O[N]\t\tLigesom -o men opdel lodret"
++
++ msgid "+\t\t\tStart at end of file"
++ msgstr "+\t\t\tBegynd ved slutningen af filen"
++
++ msgid "+<lnum>\t\tStart at line <lnum>"
++ msgstr "+<lnum>\t\tBegynd ved linje <lnum>"
++
++ msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
++ msgstr "--cmd <kommando>\tUdfør <kommando> inden indlæsning af vimrc-filer"
++
++ msgid "-c <command>\t\tExecute <command> after loading the first file"
++ msgstr "-c <kommando>\tUdfør <kommando> efter indlæsning af den første fil"
++
++ msgid "-S <session>\t\tSource file <session> after loading the first file"
++ msgstr "-S <session>\t\tSource filen <session> efter indlæsning af den første fil"
++
++ msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
++ msgstr "-s <scriptind>\tLæs normal tilstand-kommandoer fra filen <scriptind>"
++
++ msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
++ msgstr ""
++ "-w <scriptud>\tTilføj alle indtastede kommandoer til slutningen af filen "
++ "<scriptud>"
++
++ msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
++ msgstr "-W <scriptud>\tSkriv alle indtastede kommandoer til filen <scriptud>"
++
++ msgid "-x\t\t\tEdit encrypted files"
++ msgstr "-x\t\t\tRediger krypterede filer"
++
++ msgid "-display <display>\tConnect vim to this particular X-server"
++ msgstr "-display <display>\tForbind vim til denne X-server"
++
++ msgid "-X\t\t\tDo not connect to X server"
++ msgstr "-X\t\t\tOpret ikke forbindelse til X-server"
++
++ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
++ msgstr "--remote <filer>\tRediger <filer> i en Vim-server, hvis det er muligt"
++
++ msgid "--remote-silent <files> Same, don't complain if there is no server"
++ msgstr ""
++ "--remote-silent <filer> Samme, men vær tavs hvis der ikke er nogen server"
++
++ msgid ""
++ "--remote-wait <files> As --remote but wait for files to have been edited"
++ msgstr ""
++ "--remote-wait <filer> Som --remote men vent på filer som skal redigeres"
++
++ msgid ""
++ "--remote-wait-silent <files> Same, don't complain if there is no server"
++ msgstr ""
++ "--remote-wait-silent <filer> Samme, men vær tavs hvis der ikke er nogen "
++ "server"
++
++ msgid ""
++ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per file"
++ msgstr ""
++ "--remote-tab[-wait][-silent] <filer> Som --remote men brug fanebladsside "
++ "pr. fil"
++
++ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
++ msgstr "--remote-send <nøgler>\tSend <nøgler> til en Vim-server og afslut"
++
++ msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
++ msgstr ""
++ "--remote-expr <udtryk>\tEvaluér <udtryk> i en Vim-server og udskriv "
++ "resultatet"
++
++ msgid "--serverlist\t\tList available Vim server names and exit"
++ msgstr "--serverlist\t\tOplist tilgængelige Vim-servernavne og afslut"
++
++ msgid "--servername <name>\tSend to/become the Vim server <name>"
++ msgstr "--servername <navn>\tSend til/bliv Vim-serveren <navn>"
++
++ msgid "--startuptime <file>\tWrite startup timing messages to <file>"
++ msgstr "--startuptime <fil>\tSkriv meddelelser om opstartstiming til <fil>"
++
++ msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
++ msgstr "-i <viminfo>\t\tBrug <viminfo> i stedet for .viminfo"
++
++ msgid "--clean\t\t'nocompatible', Vim defaults, no plugins, no viminfo"
++ msgstr "--clean\t\t'nocompatible', Vim-standarder, ingen plugins, ingen viminfo"
++
++ msgid "-h or --help\tPrint Help (this message) and exit"
++ msgstr "-h eller --help\tUdskriv hjælp (denne meddelelse) og afslut"
++
++ msgid "--version\t\tPrint version information and exit"
++ msgstr "--version\t\tUdskriv versionsinformation og afslut"
++
++ msgid ""
++ "\n"
++ "Arguments recognised by gvim (Motif version):\n"
++ msgstr ""
++ "\n"
++ "Argumenter som genkendes af gvim (Motif-version):\n"
++
++ msgid ""
++ "\n"
++ "Arguments recognised by gvim (neXtaw version):\n"
++ msgstr ""
++ "\n"
++ "Argumenter som genkendes af gvim (neXtaw-version):\n"
++
++ msgid ""
++ "\n"
++ "Arguments recognised by gvim (Athena version):\n"
++ msgstr ""
++ "\n"
++ "Argumenter som genkendes af gvim (Athena-version):\n"
++
++ msgid "-display <display>\tRun vim on <display>"
++ msgstr "-display <display>\tKør vim på <display>"
++
++ msgid "-iconic\t\tStart vim iconified"
++ msgstr "-iconic\t\tStart vim som ikon"
++
++ msgid "-background <color>\tUse <color> for the background (also: -bg)"
++ msgstr "-background <farve>\tBrug <farve> til baggrunden (også: -bg)"
++
++ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
++ msgstr "-foreground <farve>\tBrug <farve> til normal tekst (også: -fg)"
++
++ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
++ msgstr "-font <skrifttype>\tBrug <skrifttype> til normal tekst (også: -fn)"
++
++ msgid "-boldfont <font>\tUse <font> for bold text"
++ msgstr "-boldfont <skrifttype>\tBrug <skrifttype> til fed tekst"
++
++ msgid "-italicfont <font>\tUse <font> for italic text"
++ msgstr "-italicfont <skriftt.>\tBrug <skrifttype> til kursiv tekst"
++
++ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
++ msgstr "-geometry <geom>\tBrug <geom> for indledende geometri (også: -geom)"
++
++ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
++ msgstr "-borderwidth <bredde>\tBrug en kantbredde på <bredde> (også: -bw)"
++
++ msgid "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
++ msgstr ""
++ "-scrollbarwidth <bredde> Brug en rullebjælkebredde på <bredde> (også: -sw)"
++
++ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
++ msgstr "-menuheight <højde>\tBrug en menulinjehøjde på <højde> (også: -mh)"
++
++ msgid "-reverse\t\tUse reverse video (also: -rv)"
++ msgstr "-reverse\t\tBrug omvendt grafik (også: -rv)"
++
++ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
++ msgstr "+reverse\t\tBrug ikke omvendt grafik (også: +rv)"
++
++ msgid "-xrm <resource>\tSet the specified resource"
++ msgstr "-xrm <ressource>\tSæt den angivne ressource"
++
++ msgid ""
++ "\n"
++ "Arguments recognised by gvim (GTK+ version):\n"
++ msgstr ""
++ "\n"
++ "Argumenter genkendt af gvim (GTK+-version):\n"
++
++ msgid "-display <display>\tRun vim on <display> (also: --display)"
++ msgstr "-display <display>\tKør vim på <display> (også: --display)"
++
++ msgid "--role <role>\tSet a unique role to identify the main window"
++ msgstr "--role <rolle>\tSæt en unik rolle til at identificere hovedvinduet"
++
++ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
++ msgstr "--socketid <xid>\tÃ…bn Vim i en anden GTK-widget"
++
++ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
++ msgstr "--echo-wid\t\tFÃ¥ gvim til at skrive vinduets ID til stdout"
++
++ msgid "-P <parent title>\tOpen Vim inside parent application"
++ msgstr "-P <forældertitel>\tÅbn Vim i forælderprogram"
++
++ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
++ msgstr "--windowid <HWND>\tÃ…bn Vim i en anden win32-widget"
++
++ msgid "No display"
++ msgstr "Intet display"
++
++ msgid ": Send failed.\n"
++ msgstr ": Sending mislykkedes.\n"
++
++ msgid ": Send failed. Trying to execute locally\n"
++ msgstr ": Sending mislykkedes. Prøver at udføre lokalt\n"
++
++ #, c-format
++ msgid "%d of %d edited"
++ msgstr "%d af %d redigeret"
++
++ msgid "No display: Send expression failed.\n"
++ msgstr "Intet display: Send-udtryk mislykkedes.\n"
++
++ msgid ": Send expression failed.\n"
++ msgstr ": Send-udtryk mislykkedes.\n"
++
++ msgid "No marks set"
++ msgstr "Ingen mærker sat"
++
++ #, c-format
++ msgid "E283: No marks matching \"%s\""
++ msgstr "E283: Ingen mærker matcher \"%s\""
++
++ msgid ""
++ "\n"
++ "mark line col file/text"
++ msgstr ""
++ "\n"
++ "mærke linje kol fil/tekst"
++
++ msgid ""
++ "\n"
++ " jump line col file/text"
++ msgstr ""
++ "\n"
++ " hop linje kol fil/tekst"
++
++ msgid ""
++ "\n"
++ "change line col text"
++ msgstr ""
++ "\n"
++ "skift linje kol tekst"
++
++ msgid ""
++ "\n"
++ "# File marks:\n"
++ msgstr ""
++ "\n"
++ "# Filmærker:\n"
++
++ msgid ""
++ "\n"
++ "# Jumplist (newest first):\n"
++ msgstr ""
++ "\n"
++ "# Hopliste (nyeste først):\n"
++
++ msgid ""
++ "\n"
++ "# History of marks within files (newest to oldest):\n"
++ msgstr ""
++ "\n"
++ "# Historik over mærker i filer (nyeste til ældste):\n"
++
++ msgid "Missing '>'"
++ msgstr "Manglende '>'"
++
++ msgid "E543: Not a valid codepage"
++ msgstr "E543: Ikke en gyldig tegnkodningstabel"
++
++ msgid "E284: Cannot set IC values"
++ msgstr "E284: Kan ikke sætte IC-værdier"
++
++ msgid "E285: Failed to create input context"
++ msgstr "E285: Kunne ikke oprette inputkontekst"
++
++ msgid "E286: Failed to open input method"
++ msgstr "E286: Kunne ikke åbne inputmetode"
++
++ msgid "E287: Warning: Could not set destroy callback to IM"
++ msgstr "E287: Advarsel: Kunne ikke sætte destroy callback til IM"
++
++ msgid "E288: input method doesn't support any style"
++ msgstr "E288: inputmetode understøtter ikke nogen stil"
++
++ msgid "E289: input method doesn't support my preedit type"
++ msgstr "E289: inputmetode understøtter ikke min preedit-type"
++
++ msgid "E293: block was not locked"
++ msgstr "E293: blok blev ikke låst"
++
++ msgid "E294: Seek error in swap file read"
++ msgstr "E294: Søgefejl ved læsning af swap-fil"
++
++ msgid "E295: Read error in swap file"
++ msgstr "E295: Læsefejl i swap-fil"
++
++ msgid "E296: Seek error in swap file write"
++ msgstr "E296: Søgefejl ved skrivning af swap-fil"
++
++ msgid "E297: Write error in swap file"
++ msgstr "E297: Skrivefejl i swap-fil"
++
++ msgid "E300: Swap file already exists (symlink attack?)"
++ msgstr "E300: Swap-filen findes allerede (symlink angreb?)"
++
++ msgid "E298: Didn't get block nr 0?"
++ msgstr "E298: Blev blok nr. 0 ikke hentet?"
++
++ msgid "E298: Didn't get block nr 1?"
++ msgstr "E298: Blev blok nr. 1 ikke hentet?"
++
++ msgid "E298: Didn't get block nr 2?"
++ msgstr "E298: Blev blok nr. 2 ikke hentet?"
++
++ msgid "E843: Error while updating swap file crypt"
++ msgstr "E843: Fejl ved opdatering af crypt for swap-fil"
++
++ msgid "E301: Oops, lost the swap file!!!"
++ msgstr "E301: Ups, mistede swap-filen!!!"
++
++ msgid "E302: Could not rename swap file"
++ msgstr "E302: Kunne ikke omdøbe swap-fil"
++
++ #, c-format
++ msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
++ msgstr "E303: Kan ikke åbne swap-filen for \"%s\", gendannelse er ikke muligt"
++
++ msgid "E304: ml_upd_block0(): Didn't get block 0??"
++ msgstr "E304: ml_upd_block0(): Blev blok 0 ikke hentet??"
++
++ #, c-format
++ msgid "E305: No swap file found for %s"
++ msgstr "E305: Fandt ingen swap-fil for %s"
++
++ msgid "Enter number of swap file to use (0 to quit): "
++ msgstr "Indtast antal swap-filer som der skal bruges (0 for at afslutte): "
++
++ #, c-format
++ msgid "E306: Cannot open %s"
++ msgstr "E306: Kan ikke åbne %s"
++
++ msgid "Unable to read block 0 from "
++ msgstr "Kan ikke læse blok 0 fra "
++
++ msgid ""
++ "\n"
++ "Maybe no changes were made or Vim did not update the swap file."
++ msgstr ""
++ "\n"
++ "Måske er der ikke foretaget nogen ændringer eller Vim opdaterede ikke swap-"
++ "filen."
++
++ msgid " cannot be used with this version of Vim.\n"
++ msgstr " kan ikke bruges med denne version af Vim.\n"
++
++ msgid "Use Vim version 3.0.\n"
++ msgstr "Brug Vim version 3.0.\n"
++
++ #, c-format
++ msgid "E307: %s does not look like a Vim swap file"
++ msgstr "E307: %s ligner ikke en Vim swap-fil"
++
++ msgid " cannot be used on this computer.\n"
++ msgstr " kan ikke bruges på denne computer.\n"
++
++ msgid "The file was created on "
++ msgstr "Filen blev oprettet på "
++
++ msgid ""
++ ",\n"
++ "or the file has been damaged."
++ msgstr ""
++ ",\n"
++ "eller filen er beskadiget."
++
++ #, c-format
++ msgid ""
++ "E833: %s is encrypted and this version of Vim does not support encryption"
++ msgstr ""
++ "E833: %s er krypteret og denne version af Vim understøtter ikke kryptering"
++
++ msgid " has been damaged (page size is smaller than minimum value).\n"
++ msgstr " er beskadiget (sidestørrelsen er mindre end minimumsværdien).\n"
++
++ #, c-format
++ msgid "Using swap file \"%s\""
++ msgstr "Bruger swap-filen \"%s\""
++
++ #, c-format
++ msgid "Original file \"%s\""
++ msgstr "Den originale fil \"%s\""
++
++ msgid "E308: Warning: Original file may have been changed"
++ msgstr "E308: Advarsel: Den originale fil kan være ændret"
++
++ #, c-format
++ msgid "Swap file is encrypted: \"%s\""
++ msgstr "Swap-filen er krypteret: \"%s\""
++
++ msgid ""
++ "\n"
++ "If you entered a new crypt key but did not write the text file,"
++ msgstr ""
++ "\n"
++ "Hvis du indtastede en ny crypt-nøgle men ikke skrev tekstfilen,"
++
++ msgid ""
++ "\n"
++ "enter the new crypt key."
++ msgstr ""
++ "\n"
++ "så indtast den nye crypt-nøgle."
++
++ msgid ""
++ "\n"
++ "If you wrote the text file after changing the crypt key press enter"
++ msgstr ""
++ "\n"
++ "Hvis du skrev tekstfilen efter crypt-nøglen blev ændret, så tryk på enter"
++
++ msgid ""
++ "\n"
++ "to use the same key for text file and swap file"
++ msgstr ""
++ "\n"
++ "for at bruge den samme nøgle til tekstfilen og swap-filen"
++
++ #, c-format
++ msgid "E309: Unable to read block 1 from %s"
++ msgstr "E309: Kan ikke læse blok 1 fra %s"
++
++ msgid "???MANY LINES MISSING"
++ msgstr "???MANGE LINJER MANGLER"
++
++ msgid "???LINE COUNT WRONG"
++ msgstr "???LINJEANTAL FORKERT"
++
++ msgid "???EMPTY BLOCK"
++ msgstr "???TOM BLOK"
++
++ msgid "???LINES MISSING"
++ msgstr "???LINJER MANGLER"
++
++ #, c-format
++ msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
++ msgstr "E310: Forkert ID for blok 1 (%s ikke en .swp-fil?)"
++
++ msgid "???BLOCK MISSING"
++ msgstr "???BLOK MANGLER"
++
++ msgid "??? from here until ???END lines may be messed up"
++ msgstr "??? herfra indtil ???SLUT kan linjer være rodet"
++
++ msgid "??? from here until ???END lines may have been inserted/deleted"
++ msgstr "??? herfra indtil ???SLUT kan linjer være indsat/slettet"
++
++ msgid "???END"
++ msgstr "???SLUT"
++
++ msgid "E311: Recovery Interrupted"
++ msgstr "E311: Gendannelse afbrudt"
++
++ msgid ""
++ "E312: Errors detected while recovering; look for lines starting with ???"
++ msgstr ""
++ "E312: Fejl registreret ved gendannelse; kig efter linjer som begynder med "
++ "???"
++
++ msgid "See \":help E312\" for more information."
++ msgstr "Se \":help E312\" for mere information."
++
++ msgid "Recovery completed. You should check if everything is OK."
++ msgstr "Gendannelse gennemført. Du bør tjekke om alt er OK."
++
++ msgid ""
++ "\n"
++ "(You might want to write out this file under another name\n"
++ msgstr ""
++ "\n"
++ "(Det kan være du vil skrive filen under et andet navn\n"
++
++ msgid "and run diff with the original file to check for changes)"
++ msgstr "og kør diff men den originale fil for at tjekke for ændringer)"
++
++ msgid "Recovery completed. Buffer contents equals file contents."
++ msgstr ""
++ "Gendannelse gennemført. Bufferens indhold er det samme som filens indhold."
++
++ msgid ""
++ "\n"
++ "You may want to delete the .swp file now.\n"
++ "\n"
++ msgstr ""
++ "\n"
++ "Det kan være du vil slette .swp-filen nu.\n"
++ "\n"
++
++ msgid "Using crypt key from swap file for the text file.\n"
++ msgstr "Bruger crypt-nøglen fra swap-filen til tekstfilen.\n"
++
++ msgid "Swap files found:"
++ msgstr "Swap-filer fundet:"
++
++ msgid " In current directory:\n"
++ msgstr " I nuværende mappe:\n"
++
++ msgid " Using specified name:\n"
++ msgstr " Bruger angivne navn:\n"
++
++ msgid " In directory "
++ msgstr " I mappe "
++
++ msgid " -- none --\n"
++ msgstr " -- ingen --\n"
++
++ msgid " owned by: "
++ msgstr " ejet af: "
++
++ msgid " dated: "
++ msgstr " dateret: "
++
++ msgid " dated: "
++ msgstr " dateret: "
++
++ msgid " [from Vim version 3.0]"
++ msgstr " [fra Vim version 3.0]"
++
++ msgid " [does not look like a Vim swap file]"
++ msgstr " [ligner ikke en Vim swap-fil]"
++
++ msgid " file name: "
++ msgstr " filnavn: "
++
++ msgid ""
++ "\n"
++ " modified: "
++ msgstr ""
++ "\n"
++ " ændret: "
++
++ msgid "YES"
++ msgstr "JA"
++
++ msgid "no"
++ msgstr "nej"
++
++ msgid ""
++ "\n"
++ " user name: "
++ msgstr ""
++ "\n"
++ " brugernavn: "
++
++ msgid " host name: "
++ msgstr " værtsnavn: "
++
++ msgid ""
++ "\n"
++ " host name: "
++ msgstr ""
++ "\n"
++ " værtsnavn: "
++
++ msgid ""
++ "\n"
++ " process ID: "
++ msgstr ""
++ "\n"
++ " proces-ID: "
++
++ msgid " (still running)"
++ msgstr " (kører stadig)"
++
++ msgid ""
++ "\n"
++ " [not usable with this version of Vim]"
++ msgstr ""
++ "\n"
++ " [ikke anvendelig med denne version af Vim]"
++
++ msgid ""
++ "\n"
++ " [not usable on this computer]"
++ msgstr ""
++ "\n"
++ " [ikke anvendelig på denne computer]"
++
++ msgid " [cannot be read]"
++ msgstr " [kan ikke læses]"
++
++ msgid " [cannot be opened]"
++ msgstr " [kan ikke åbnes]"
++
++ msgid "E313: Cannot preserve, there is no swap file"
++ msgstr "E313: Kan ikke bevares, der er ikke nogen swap-fil"
++
++ msgid "File preserved"
++ msgstr "Fil bevaret"
++
++ msgid "E314: Preserve failed"
++ msgstr "E314: Bevaring mislykkedes"
++
++ #, c-format
++ msgid "E315: ml_get: invalid lnum: %ld"
++ msgstr "E315: ml_get: ugyldig lnum: %ld"
++
++ #, c-format
++ msgid "E316: ml_get: cannot find line %ld"
++ msgstr "E316: ml_get: kan ikke finde linje %ld"
++
++ msgid "E317: pointer block id wrong 3"
++ msgstr "E317: forkert blok-id for pointer 3"
++
++ msgid "stack_idx should be 0"
++ msgstr "stack_idx skal være 0"
++
++ msgid "E318: Updated too many blocks?"
++ msgstr "E318: Opdaterede for mange blokke?"
++
++ msgid "E317: pointer block id wrong 4"
++ msgstr "E317: forkert blok-id for pointer 4"
++
++ msgid "deleted block 1?"
++ msgstr "slettede blok 1?"
++
++ #, c-format
++ msgid "E320: Cannot find line %ld"
++ msgstr "E320: Kan ikke finde linje %ld"
++
++ msgid "E317: pointer block id wrong"
++ msgstr "E317: forkert blok-id for pointer"
++
++ msgid "pe_line_count is zero"
++ msgstr "pe_line_count er nul"
++
++ #, c-format
++ msgid "E322: line number out of range: %ld past the end"
++ msgstr "E322: linjenummer udenfor område: %ld efter slutningen"
++
++ #, c-format
++ msgid "E323: line count wrong in block %ld"
++ msgstr "E323: linje antal forkert i blok %ld"
++
++ msgid "Stack size increases"
++ msgstr "Stakstørrelse øges"
++
++ msgid "E317: pointer block id wrong 2"
++ msgstr "E317: forkert blok-id for pointer 2"
++
++ #, c-format
++ msgid "E773: Symlink loop for \"%s\""
++ msgstr "E773: Symlink-løkke for \"%s\""
++
++ msgid "E325: ATTENTION"
++ msgstr "E325: OBS"
++
++ msgid ""
++ "\n"
++ "Found a swap file by the name \""
++ msgstr ""
++ "\n"
++ "Fandt en swap-fil ved navn \""
++
++ msgid "While opening file \""
++ msgstr "Ved åbning af filen \""
++
++ msgid " NEWER than swap file!\n"
++ msgstr " NYERE end swap-fil!\n"
++
++ msgid ""
++ "\n"
++ "(1) Another program may be editing the same file. If this is the case,\n"
++ " be careful not to end up with two different instances of the same\n"
++ " file when making changes. Quit, or continue with caution.\n"
++ msgstr ""
++ "\n"
++ "(1) Et andet program redigere muligvis den samme fil. Hvis det er tilfældet,\n"
++ " så pas på ikke at ende med to forskellige instanser af den samme\n"
++ " fil når der foretages ændringer. Afslut, eller fortsæt med forsigtighed.\n"
++
++ msgid "(2) An edit session for this file crashed.\n"
++ msgstr "(2) En redigeringssession for filen holdt op med at virke.\n"
++
++ msgid " If this is the case, use \":recover\" or \"vim -r "
++ msgstr " Hvis det er tilfældet, så brug \":recover\" eller \"vim -r "
++
++ msgid ""
++ "\"\n"
++ " to recover the changes (see \":help recovery\").\n"
++ msgstr ""
++ "\"\n"
++ " for at gendanne ændringerne (se \":help recovery\").\n"
++
++ msgid " If you did this already, delete the swap file \""
++ msgstr " Hvis du allerede har gjort det, så slet swap-filen \""
++
++ msgid ""
++ "\"\n"
++ " to avoid this message.\n"
++ msgstr ""
++ "\"\n"
++ " for at undgå denne meddelelse.\n"
++
++ msgid "Swap file \""
++ msgstr "Swap-filen \""
++
++ msgid "\" already exists!"
++ msgstr "\" findes allerede!"
++
++ msgid "VIM - ATTENTION"
++ msgstr "VIM - OBS"
++
++ msgid "Swap file already exists!"
++ msgstr "Swap-filen findes allerede!"
++
++ msgid ""
++ "&Open Read-Only\n"
++ "&Edit anyway\n"
++ "&Recover\n"
++ "&Quit\n"
++ "&Abort"
++ msgstr ""
++ "&Ã…bn skrivebeskyttet\n"
++ "&Rediger alligevel\n"
++ "&Gendan\n"
++ "&Afslut\n"
++ "&Afbryd"
++
++ msgid ""
++ "&Open Read-Only\n"
++ "&Edit anyway\n"
++ "&Recover\n"
++ "&Delete it\n"
++ "&Quit\n"
++ "&Abort"
++ msgstr ""
++ "&Ã…bn skrivebeskyttet\n"
++ "&Rediger alligevel\n"
++ "&Gendan\n"
++ "&Slet den\n"
++ "&Afslut\n"
++ "&Afbryd"
++
++ msgid "E326: Too many swap files found"
++ msgstr "E326: For mange swap-filer fundet"
++
++ msgid "E327: Part of menu-item path is not sub-menu"
++ msgstr "E327: Del af sti til menupunkt er ikke undermenu"
++
++ msgid "E328: Menu only exists in another mode"
++ msgstr "E328: Menuen findes kun i en anden tilstand"
++
++ #, c-format
++ msgid "E329: No menu \"%s\""
++ msgstr "E329: Ingen menu \"%s\""
++
++ msgid "E792: Empty menu name"
++ msgstr "E792: Tomt menunavn"
++
++ msgid "E330: Menu path must not lead to a sub-menu"
++ msgstr "E330: Menusti må ikke lede til en undermenu"
++
++ msgid "E331: Must not add menu items directly to menu bar"
++ msgstr "E331: Må ikke tilføje menupunkter direkte til menulinje"
++
++ msgid "E332: Separator cannot be part of a menu path"
++ msgstr "E332: Separator må ikke være del af en menusti"
++
++ msgid ""
++ "\n"
++ "--- Menus ---"
++ msgstr ""
++ "\n"
++ "--- Menuer ---"
++
++ msgid "Tear off this menu"
++ msgstr "Løsriv menuen"
++
++ #, c-format
++ msgid "E335: Menu not defined for %s mode"
++ msgstr "E335: Menu ikke defineret for %s-tilstand"
++
++ msgid "E333: Menu path must lead to a menu item"
++ msgstr "E333: Menusti skal lede til et menupunkt"
++
++ #, c-format
++ msgid "E334: Menu not found: %s"
++ msgstr "E334: Menu ikke fundet: %s"
++
++ msgid "E336: Menu path must lead to a sub-menu"
++ msgstr "E336: Menusti skal lede til en undermenu"
++
++ msgid "E337: Menu not found - check menu names"
++ msgstr "E337: Menu ikke fundet - tjek menunavne"
++
++ #, c-format
++ msgid "Error detected while processing %s:"
++ msgstr "Fejl registreret ved behandling af %s:"
++
++ #, c-format
++ msgid "line %4ld:"
++ msgstr "linje %4ld:"
++
++ #, c-format
++ msgid "E354: Invalid register name: '%s'"
++ msgstr "E354: Ugyldigt registernavn: '%s'"
++
++ msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
++ msgstr "Oversætter: scootergrisen"
++
++ msgid "Interrupt: "
++ msgstr "Afbryd: "
++
++ msgid "Press ENTER or type command to continue"
++ msgstr "Tryk på ENTER eller skriv kommando for at fortsætte"
++
++ #, c-format
++ msgid "%s line %ld"
++ msgstr "%s linje %ld"
++
++ msgid "-- More --"
++ msgstr "-- Mere --"
++
++ msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
++ msgstr " MELLEMRUM/d/j: skærm/side/linje ned, b/u/k: op, q: afslut "
++
++ msgid "Question"
++ msgstr "Spørgsmål"
++
++ msgid ""
++ "&Yes\n"
++ "&No"
++ msgstr ""
++ "&Ja\n"
++ "&Nej"
++
++ msgid ""
++ "&Yes\n"
++ "&No\n"
++ "Save &All\n"
++ "&Discard All\n"
++ "&Cancel"
++ msgstr ""
++ "&Ja\n"
++ "&Nej\n"
++ "Gem &alle\n"
++ "&Forkast alle\n"
++ "&Annuller"
++
++ msgid "Select Directory dialog"
++ msgstr "Vælg mappe-dialog"
++
++ msgid "Save File dialog"
++ msgstr "Gem fil-dialog"
++
++ msgid "Open File dialog"
++ msgstr "Ã…bn fil-dialog"
++
++ msgid "E338: Sorry, no file browser in console mode"
++ msgstr "E338: Beklager, ingen filbrowser i konsol-tilstand"
++
++ msgid "E766: Insufficient arguments for printf()"
++ msgstr "E766: Ikke nok argumenter for printf()"
++
++ msgid "E807: Expected Float argument for printf()"
++ msgstr "E807: Ventede flydende kommatal-argument for printf()"
++
++ msgid "E767: Too many arguments to printf()"
++ msgstr "E767: For mange argumenter til printf()"
++
++ msgid "W10: Warning: Changing a readonly file"
++ msgstr "W10: Advarsel: Ændre en skrivebeskyttet fil"
++
++ msgid "Type number and <Enter> or click with mouse (empty cancels): "
++ msgstr "Skriv nummer og <Enter> eller klik med musen (tom annullerer): "
++
++ msgid "Type number and <Enter> (empty cancels): "
++ msgstr "Skriv nummer og <Enter> (tom annullerer): "
++
++ msgid "1 more line"
++ msgstr "1 linje mere"
++
++ msgid "1 line less"
++ msgstr "1 linje mindre"
++
++ #, c-format
++ msgid "%ld more lines"
++ msgstr "%ld linjer mere"
++
++ #, c-format
++ msgid "%ld fewer lines"
++ msgstr "%ld linjere mindre"
++
++ msgid " (Interrupted)"
++ msgstr " (Afbrudt)"
++
++ msgid "Beep!"
++ msgstr "Bip!"
++
++ msgid "ERROR: "
++ msgstr "FEJL: "
++
++ #, c-format
++ msgid ""
++ "\n"
++ "[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
++ msgstr ""
++ "\n"
++ "[byte] samlet allok-frigivet %lu-%lu, i brug %lu, spidspunktsbrug %lu\n"
++
++ #, c-format
++ msgid ""
++ "[calls] total re/malloc()'s %lu, total free()'s %lu\n"
++ "\n"
++ msgstr ""
++ "[kald] samlet re/malloc()'er %lu, samlet free()'er %lu\n"
++ "\n"
++
++ msgid "E340: Line is becoming too long"
++ msgstr "E340: Linje er ved at blive for lang"
++
++ #, c-format
++ msgid "E341: Internal error: lalloc(%ld, )"
++ msgstr "E341: Intern fejl: lalloc(%ld, )"
++
++ #, c-format
++ msgid "E342: Out of memory! (allocating %lu bytes)"
++ msgstr "E342: Ikke mere ledig hukommelse! (allokerer %lu byte)"
++
++ #, c-format
++ msgid "Calling shell to execute: \"%s\""
++ msgstr "Kalder skal til udførelse af: \"%s\""
++
++ msgid "E545: Missing colon"
++ msgstr "E545: Manglende kolon"
++
++ msgid "E546: Illegal mode"
++ msgstr "E546: Ulovlig tilstand"
++
++ msgid "E547: Illegal mouseshape"
++ msgstr "E547: Ulovlig museform"
++
++ msgid "E548: digit expected"
++ msgstr "E548: ciffer ventet"
++
++ msgid "E549: Illegal percentage"
++ msgstr "E549: Ulovlig procent"
++
++ msgid "E854: path too long for completion"
++ msgstr "E854: sti for lang til fuldførelse"
++
++ #, c-format
++ msgid ""
++ "E343: Invalid path: '**[number]' must be at the end of the path or be "
++ "followed by '%s'."
++ msgstr ""
++ "E343: Ugyldig sti: '**[nummer]' skal være i slutningen af stien eller "
++ "efterfølges af '%s'."
++
++ #, c-format
++ msgid "E344: Can't find directory \"%s\" in cdpath"
++ msgstr "E344: Kan ikke finde mappen \"%s\" i cdpath"
++
++ #, c-format
++ msgid "E345: Can't find file \"%s\" in path"
++ msgstr "E345: Kan ikke finde filen \"%s\" i path"
++
++ #, c-format
++ msgid "E346: No more directory \"%s\" found in cdpath"
++ msgstr "E346: Ikke flere mappe \"%s\" fundet i cdpath"
++
++ #, c-format
++ msgid "E347: No more file \"%s\" found in path"
++ msgstr "E347: Ikke flere fil \"%s\" fundet i path"
++
++ #, c-format
++ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
++ msgstr "E668: Forkert adgangstilstand for NetBeans-forbindelsens info-fil: \"%s\""
++
++ #, c-format
++ msgid "E658: NetBeans connection lost for buffer %ld"
++ msgstr "E658: NetBeans-forbindelse mistet for buffer %ld"
++
++ msgid "E838: netbeans is not supported with this GUI"
++ msgstr "E838: netbeans understøttes ikke med denne GUI"
++
++ msgid "E511: netbeans already connected"
++ msgstr "E511: netbeans allerede forbundet"
++
++ #, c-format
++ msgid "E505: %s is read-only (add ! to override)"
++ msgstr "E505: %s er skrivebeskyttet (tilføj ! for at tilsidesætte)"
++
++ msgid "E349: No identifier under cursor"
++ msgstr "E349: Ingen identifikator under markør"
++
++ msgid "E774: 'operatorfunc' is empty"
++ msgstr "E774: 'operatorfunc' er tom"
++
++ msgid "E775: Eval feature not available"
++ msgstr "E775: Eval-funktionalitet ikke tilgængelig"
++
++ msgid "Warning: terminal cannot highlight"
++ msgstr "Advarsel: terminal kan ikke fremhæve"
++
++ msgid "E348: No string under cursor"
++ msgstr "E348: Ingen streng under markør"
++
++ msgid "E352: Cannot erase folds with current 'foldmethod'"
++ msgstr "E352: Kan ikke slette sammenfoldninger med nuværende 'foldmethod'"
++
++ msgid "E664: changelist is empty"
++ msgstr "E664: ændringsliste er tom"
++
++ msgid "E662: At start of changelist"
++ msgstr "E662: Ved begyndelsen af ændringsliste"
++
++ msgid "E663: At end of changelist"
++ msgstr "E663: Ved slutningen af ændringsliste"
++
++ msgid "Type :qa! and press <Enter> to abandon all changes and exit Vim"
++ msgstr ""
++ "Skriv :qa! og tryk på <Enter> for at droppe alle ændringer og afslut Vim"
++
++ #, c-format
++ msgid "1 line %sed 1 time"
++ msgstr "1 linje %sed 1 gang"
++
++ #, c-format
++ msgid "1 line %sed %d times"
++ msgstr "1 linje %sed %d gange"
++
++ #, c-format
++ msgid "%ld lines %sed 1 time"
++ msgstr "%ld linjer %sed 1 gang"
++
++ #, c-format
++ msgid "%ld lines %sed %d times"
++ msgstr "%ld linjer %sed %d gange"
++
++ #, c-format
++ msgid "%ld lines to indent... "
++ msgstr "%ld linjer at indrykke... "
++
++ msgid "1 line indented "
++ msgstr "1 linje indrykket "
++
++ #, c-format
++ msgid "%ld lines indented "
++ msgstr "%ld linjer indrykket "
++
++ msgid "E748: No previously used register"
++ msgstr "E748: Intet tidligere brugt register"
++
++ msgid "cannot yank; delete anyway"
++ msgstr "kan ikke rykke; slet alligevel"
++
++ msgid "1 line changed"
++ msgstr "1 linje ændret"
++
++ #, c-format
++ msgid "%ld lines changed"
++ msgstr "%ld linjer ændret"
++
++ #, c-format
++ msgid "freeing %ld lines"
++ msgstr "frigør %ld linjer"
++
++ #, c-format
++ msgid " into \"%c"
++ msgstr " i \"%c"
++
++ #, c-format
++ msgid "block of 1 line yanked%s"
++ msgstr "blok på 1 linje rykket%s"
++
++ #, c-format
++ msgid "1 line yanked%s"
++ msgstr "1 linje rykket%s"
++
++ #, c-format
++ msgid "block of %ld lines yanked%s"
++ msgstr "blok på %ld linjer rykket%s"
++
++ #, c-format
++ msgid "%ld lines yanked%s"
++ msgstr "%ld linjer rykket%s"
++
++ #, c-format
++ msgid "E353: Nothing in register %s"
++ msgstr "E353: Intet i register %s"
++
++ msgid ""
++ "\n"
++ "--- Registers ---"
++ msgstr ""
++ "\n"
++ "--- Registre ---"
++
++ msgid "Illegal register name"
++ msgstr "Ulovligt registernavn"
++
++ msgid ""
++ "\n"
++ "# Registers:\n"
++ msgstr ""
++ "\n"
++ "# Registre:\n"
++
++ #, c-format
++ msgid "E574: Unknown register type %d"
++ msgstr "E574: Ukendt registertype %d"
++
++ msgid ""
++ "E883: search pattern and expression register may not contain two or more "
++ "lines"
++ msgstr ""
++ "E883: søgemønster og udtryksregister må ikke indeholde to eller flere linjer"
++
++ #, c-format
++ msgid "%ld Cols; "
++ msgstr "%ld kolonner; "
++
++ #, c-format
++ msgid "Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Bytes"
++ msgstr "Markerede %s%ld af %ld linje; %lld af %lld ord; %lld af %lld byte"
++
++ #, c-format
++ msgid ""
++ "Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Chars; %lld of "
++ "%lld Bytes"
++ msgstr ""
++ "Markerede %s%ld af %ld linje; %lld af %lld ord; %lld af %lld tegn; %lld af %"
++ "lld byte"
++
++ #, c-format
++ msgid "Col %s of %s; Line %ld of %ld; Word %lld of %lld; Byte %lld of %lld"
++ msgstr "Kol %s af %s; Linje %ld af %ld; Ord %lld af %lld; Byte %lld af %lld"
++
++ #, c-format
++ msgid ""
++ "Col %s of %s; Line %ld of %ld; Word %lld of %lld; Char %lld of %lld; Byte "
++ "%lld of %lld"
++ msgstr ""
++ "Kol %s af %s; Linje %ld af %ld; Ord %lld af %lld; Tegn %lld af %lld; Byte %"
++ "lld af %lld"
++
++ #, c-format
++ msgid "(+%lld for BOM)"
++ msgstr "(+%lld for BOM)"
++
++ msgid "Thanks for flying Vim"
++ msgstr "Tak fordi du fløj med Vim"
++
++ msgid "E518: Unknown option"
++ msgstr "E518: Ukendt tilvalg"
++
++ msgid "E519: Option not supported"
++ msgstr "E519: Tilvalg understøttes ikke"
++
++ msgid "E520: Not allowed in a modeline"
++ msgstr "E520: Ikke tilladt på en tilstandslinje"
++
++ msgid "E846: Key code not set"
++ msgstr "E846: Tastekode ikke sat"
++
++ msgid "E521: Number required after ="
++ msgstr "E521: Nummer kræves efter ="
++
++ msgid "E522: Not found in termcap"
++ msgstr "E522: Ikke fundet i termcap"
++
++ #, c-format
++ msgid "E539: Illegal character <%s>"
++ msgstr "E539: Ulovligt tegn <%s>"
++
++ #, c-format
++ msgid "For option %s"
++ msgstr "For tilvalget %s"
++
++ msgid "E529: Cannot set 'term' to empty string"
++ msgstr "E529: Kan ikke sætte 'term' til tom streng"
++
++ msgid "E530: Cannot change term in GUI"
++ msgstr "E530: Kan ikke skifte term i GUI"
++
++ msgid "E531: Use \":gui\" to start the GUI"
++ msgstr "E531: Brug \":gui\" til at starte GUI'en"
++
++ msgid "E589: 'backupext' and 'patchmode' are equal"
++ msgstr "E589: 'backupext' og 'patchmode' er ens"
++
++ msgid "E834: Conflicts with value of 'listchars'"
++ msgstr "E834: Er i konflikt med værdien af 'listchars'"
++
++ msgid "E835: Conflicts with value of 'fillchars'"
++ msgstr "E835: Er i konflikt med værdien af 'fillchars'"
++
++ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
++ msgstr "E617: Kan ikke ændres i GTK+ 2 GUI'en"
++
++ #, c-format
++ msgid "E950: Cannot convert between %s and %s"
++ msgstr "E950: Kan ikke konvertere mellem %s og %s"
++
++ msgid "E524: Missing colon"
++ msgstr "E524: Manglende kolon"
++
++ msgid "E525: Zero length string"
++ msgstr "E525: Streng uden længde"
++
++ #, c-format
++ msgid "E526: Missing number after <%s>"
++ msgstr "E526: Manglende nummer efter <%s>"
++
++ msgid "E527: Missing comma"
++ msgstr "E527: Manglende komma"
++
++ msgid "E528: Must specify a ' value"
++ msgstr "E528: Skal angive en '-værdi"
++
++ msgid "E595: contains unprintable or wide character"
++ msgstr "E595: indeholder tegn som ikke kan udskrives eller er bredt"
++
++ msgid "E596: Invalid font(s)"
++ msgstr "E596: Ugyldig skrifttype(r)"
++
++ msgid "E597: can't select fontset"
++ msgstr "E597: kan ikke vælge skrifttypesæt"
++
++ msgid "E598: Invalid fontset"
++ msgstr "E598: Ugyldigt skrifttypesæt"
++
++ msgid "E533: can't select wide font"
++ msgstr "E533: kan ikke vælge bred skrifttype"
++
++ msgid "E534: Invalid wide font"
++ msgstr "E534: Ugyldig bred skrifttype"
++
++ #, c-format
++ msgid "E535: Illegal character after <%c>"
++ msgstr "E535: Ulovligt tegn efter <%c>"
++
++ msgid "E536: comma required"
++ msgstr "E536: komma kræves"
++
++ #, c-format
++ msgid "E537: 'commentstring' must be empty or contain %s"
++ msgstr "E537: 'commentstring' skal være tom eller indeholde %s"
++
++ msgid "E538: No mouse support"
++ msgstr "E538: Ingen understøttelse af mus"
++
++ msgid "E540: Unclosed expression sequence"
++ msgstr "E540: Ulukket udtryk-sekvens"
++
++ msgid "E541: too many items"
++ msgstr "E541: for mange punkter"
++
++ msgid "E542: unbalanced groups"
++ msgstr "E542: ubalancerede grupper"
++
++ msgid "E946: Cannot make a terminal with running job modifiable"
++ msgstr "E946: Kan ikke gøre en terminal med kørende job ændringsbar"
++
++ msgid "E590: A preview window already exists"
++ msgstr "E590: Der findes allerede et forhåndsvisningsvindue"
++
++ msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
++ msgstr "W17: Arabisk kræver UTF-8, brug ':set encoding=utf-8'"
++
++ msgid "E954: 24-bit colors are not supported on this environment"
++ msgstr "E954: 24-bit farver understøttes ikke i dette miljø"
++
++ #, c-format
++ msgid "E593: Need at least %d lines"
++ msgstr "E593: Skal være mindst %d linjer"
++
++ #, c-format
++ msgid "E594: Need at least %d columns"
++ msgstr "E594: Skal være mindst %d kolonner"
++
++ #, c-format
++ msgid "E355: Unknown option: %s"
++ msgstr "E355: Ukendt tilvalg: %s"
++
++ #, c-format
++ msgid "E521: Number required: &%s = '%s'"
++ msgstr "E521: Nummer kræves: &%s = '%s'"
++
++ msgid ""
++ "\n"
++ "--- Terminal codes ---"
++ msgstr ""
++ "\n"
++ "--- Terminal-koder ---"
++
++ msgid ""
++ "\n"
++ "--- Global option values ---"
++ msgstr ""
++ "\n"
++ "--- Værdier for globale tilvalg ---"
++
++ msgid ""
++ "\n"
++ "--- Local option values ---"
++ msgstr ""
++ "\n"
++ "--- Værdier for lokale tilvalg ---"
++
++ msgid ""
++ "\n"
++ "--- Options ---"
++ msgstr ""
++ "\n"
++ "--- Tilvalg ---"
++
++ msgid "E356: get_varp ERROR"
++ msgstr "E356: Fejl ved get_varp"
++
++ #, c-format
++ msgid "E357: 'langmap': Matching character missing for %s"
++ msgstr "E357: 'langmap': Matchende tegn mangler for %s"
++
++ #, c-format
++ msgid "E358: 'langmap': Extra characters after semicolon: %s"
++ msgstr "E358: 'langmap': Ekstra tegn efter semikolon: %s"
++
++ msgid "cannot open "
++ msgstr "kan ikke åbne "
++
++ msgid "VIM: Can't open window!\n"
++ msgstr "VIM: Kan ikke åbne vindue!\n"
++
++ msgid "Need Amigados version 2.04 or later\n"
++ msgstr "Behøver Amigados version 2.04 eller senere\n"
++
++ #, c-format
++ msgid "Need %s version %ld\n"
++ msgstr "Behøver %s version %ld\n"
++
++ msgid "Cannot open NIL:\n"
++ msgstr "Kan ikke åbne NIL:\n"
++
++ msgid "Cannot create "
++ msgstr "Kan ikke oprette "
++
++ #, c-format
++ msgid "Vim exiting with %d\n"
++ msgstr "Vim afsluttede med %d\n"
++
++ msgid "cannot change console mode ?!\n"
++ msgstr "kan ikke skifte konsoltilstand ?!\n"
++
++ msgid "mch_get_shellsize: not a console??\n"
++ msgstr "mch_get_shellsize: ikke en konsol??\n"
++
++ msgid "E360: Cannot execute shell with -f option"
++ msgstr "E360: Kan ikke udføre skal med -f-tilvalget"
++
++ msgid "Cannot execute "
++ msgstr "Kan ikke udføre "
++
++ msgid "shell "
++ msgstr "skal "
++
++ msgid " returned\n"
++ msgstr " returnerede\n"
++
++ msgid "ANCHOR_BUF_SIZE too small."
++ msgstr "ANCHOR_BUF_SIZE for lille."
++
++ msgid "I/O ERROR"
++ msgstr "FEJL VED I/O"
++
++ msgid "Message"
++ msgstr "Meddelelse"
++
++ msgid "E237: Printer selection failed"
++ msgstr "E237: Valg af printer mislykkedes"
++
++ #, c-format
++ msgid "to %s on %s"
++ msgstr "til %s på %s"
++
++ #, c-format
++ msgid "E613: Unknown printer font: %s"
++ msgstr "E613: Ukendt skrifttype til printer: %s"
++
++ #, c-format
++ msgid "E238: Print error: %s"
++ msgstr "E238: Fejl ved udskrivning: %s"
++
++ #, c-format
++ msgid "Printing '%s'"
++ msgstr "Udskriver '%s'"
++
++ #, c-format
++ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
++ msgstr "E244: Ulovligt tegnsætnavn \"%s\" i skrifttypenavnet \"%s\""
++
++ #, c-format
++ msgid "E244: Illegal quality name \"%s\" in font name \"%s\""
++ msgstr "E244: Ulovligt kvalitetsnavn \"%s\" i skrifttypenavnet \"%s\""
++
++ #, c-format
++ msgid "E245: Illegal char '%c' in font name \"%s\""
++ msgstr "E245: Ulovligt tegn '%c' i skrifttypenavnet \"%s\""
++
++ #, c-format
++ msgid "Opening the X display took %ld msec"
++ msgstr "Ã…bningen af X-displayet tog %ld ms"
++
++ msgid ""
++ "\n"
++ "Vim: Got X error\n"
++ msgstr ""
++ "\n"
++ "Vim: Fik fejl ved X\n"
++
++ msgid "Testing the X display failed"
++ msgstr "Test af X-displayet mislykkedes"
++
++ msgid "Opening the X display timed out"
++ msgstr "Ã…bningen af X-displayet fik timeout"
++
++ msgid ""
++ "\n"
++ "Could not get security context for "
++ msgstr ""
++ "\n"
++ "Kunne ikke hente sikkerhedskontekst for "
++
++ msgid ""
++ "\n"
++ "Could not set security context for "
++ msgstr ""
++ "\n"
++ "Kunne ikke sætte sikkerhedskontekst for "
++
++ #, c-format
++ msgid "Could not set security context %s for %s"
++ msgstr "Kunne ikke sætte sikkerhedskonteksten %s for %s"
++
++ #, c-format
++ msgid "Could not get security context %s for %s. Removing it!"
++ msgstr "Kunne ikke hente sikkerhedskonteksten %s for %s. Fjerner den!"
++
++ msgid ""
++ "\n"
++ "Cannot execute shell sh\n"
++ msgstr ""
++ "\n"
++ "Kan ikke udføre skallen sh\n"
++
++ msgid ""
++ "\n"
++ "shell returned "
++ msgstr ""
++ "\n"
++ "skal returnerede "
++
++ msgid ""
++ "\n"
++ "Cannot create pipes\n"
++ msgstr ""
++ "\n"
++ "Kan ikke oprette pipes\n"
++
++ msgid ""
++ "\n"
++ "Cannot fork\n"
++ msgstr ""
++ "\n"
++ "Kan ikke fork\n"
++
++ msgid ""
++ "\n"
++ "Cannot execute shell "
++ msgstr ""
++ "\n"
++ "Kan ikke udføre skallen "
++
++ msgid ""
++ "\n"
++ "Command terminated\n"
++ msgstr ""
++ "\n"
++ "Kommando termineret\n"
++
++ msgid "XSMP lost ICE connection"
++ msgstr "XSMP mistede ICE-forbindelse"
++
++ #, c-format
++ msgid "dlerror = \"%s\""
++ msgstr "dlerror = \"%s\""
++
++ msgid "Opening the X display failed"
++ msgstr "Ã…bningen af X-displayet mislykkedes"
++
++ msgid "XSMP handling save-yourself request"
++ msgstr "XSMP-håndtering save-yourself-anmodning"
++
++ msgid "XSMP opening connection"
++ msgstr "XSMP åbner forbindelse"
++
++ msgid "XSMP ICE connection watch failed"
++ msgstr "XSMP ICE-forbindelse watch mislykkedes"
++
++ #, c-format
++ msgid "XSMP SmcOpenConnection failed: %s"
++ msgstr "XSMP SmcOpenConnection mislykkedes: %s"
++
++ msgid "At line"
++ msgstr "PÃ¥ linje"
++
++ msgid "Could not load vim32.dll!"
++ msgstr "Kunne ikke indlæse vim32.dll!"
++
++ msgid "VIM Error"
++ msgstr "Fejl ved VIM"
++
++ msgid "Could not fix up function pointers to the DLL!"
++ msgstr "Kunne ikke rette op på funktion-pointere til DLL'en!"
++
++ #, c-format
++ msgid "Vim: Caught %s event\n"
++ msgstr "Vim: Fangede %s-hændelse\n"
++
++ msgid "close"
++ msgstr "luk"
++
++ msgid "logoff"
++ msgstr "log ud"
++
++ msgid "shutdown"
++ msgstr "luk ned"
++
++ msgid "E371: Command not found"
++ msgstr "E371: Kommando ikke fundet"
++
++ msgid ""
++ "VIMRUN.EXE not found in your $PATH.\n"
++ "External commands will not pause after completion.\n"
++ "See :help win32-vimrun for more information."
++ msgstr ""
++ "VIMRUN.EXE ikke fundet i din $PATH.\n"
++ "Eksterne kommandoer sættes ikke på pause efter fuldførelse.\n"
++ "Se :help win32-vimrun for mere information."
++
++ msgid "Vim Warning"
++ msgstr "Advarsel ved Vim"
++
++ #, c-format
++ msgid "shell returned %d"
++ msgstr "skal returnerede %d"
++
++ msgid "E926: Current location list was changed"
++ msgstr "E926: Nuværende placeringsliste blev ændret"
++
++ #, c-format
++ msgid "E372: Too many %%%c in format string"
++ msgstr "E372: For mange %%%c i formatet streng"
++
++ #, c-format
++ msgid "E373: Unexpected %%%c in format string"
++ msgstr "E373: Uventet %%%c i formatet streng"
++
++ msgid "E374: Missing ] in format string"
++ msgstr "E374: Manglende ] i formatet streng"
++
++ #, c-format
++ msgid "E375: Unsupported %%%c in format string"
++ msgstr "E375: Ikke-understøttet %%%c i formatet streng"
++
++ #, c-format
++ msgid "E376: Invalid %%%c in format string prefix"
++ msgstr "E376: Ugyldig %%%c i præfiks for formatet streng"
++
++ #, c-format
++ msgid "E377: Invalid %%%c in format string"
++ msgstr "E377: Ugyldig %%%c i formatet streng"
++
++ msgid "E378: 'errorformat' contains no pattern"
++ msgstr "E378: 'errorformat' indeholder ikke noget mønter"
++
++ msgid "E379: Missing or empty directory name"
++ msgstr "E379: Manglende eller tomt mappenavn"
++
++ msgid "E553: No more items"
++ msgstr "E553: Ikke flere punkter"
++
++ msgid "E924: Current window was closed"
++ msgstr "E924: Nuværende vindue blev lukket"
++
++ msgid "E925: Current quickfix was changed"
++ msgstr "E925: Nuværende quickfix blev ændret"
++
++ #, c-format
++ msgid "(%d of %d)%s%s: "
++ msgstr "(%d af %d)%s%s: "
++
++ msgid " (line deleted)"
++ msgstr " (linje slettet)"
++
++ #, c-format
++ msgid "%serror list %d of %d; %d errors "
++ msgstr "%sfejlliste %d af %d; %d fejl "
++
++ msgid "E380: At bottom of quickfix stack"
++ msgstr "E380: Nederst i quickfix-stakken"
++
++ msgid "E381: At top of quickfix stack"
++ msgstr "E381: Øverst i quickfix-stakken"
++
++ msgid "No entries"
++ msgstr "Ingen poster"
++
++ msgid "Error file"
++ msgstr "Fejlfil"
++
++ msgid "E683: File name missing or invalid pattern"
++ msgstr "E683: Filnavn mangler eller ugyldigt mønster"
++
++ #, c-format
++ msgid "Cannot open file \"%s\""
++ msgstr "Kan ikke åbne filen \"%s\""
++
++ msgid "E681: Buffer is not loaded"
++ msgstr "E681: Buffer er ikke indlæst"
++
++ msgid "E777: String or List expected"
++ msgstr "E777: Streng eller liste ventet"
++
++ #, c-format
++ msgid "E369: invalid item in %s%%[]"
++ msgstr "E369: ugyldigt punkt i %s%%[]"
++
++ #, c-format
++ msgid "E769: Missing ] after %s["
++ msgstr "E769: Manglende ] efter %s["
++
++ msgid "E944: Reverse range in character class"
++ msgstr "E944: Baglæns område i tegnklasse"
++
++ msgid "E945: Range too large in character class"
++ msgstr "E945: Område for stort i tegnklasse"
++
++ #, c-format
++ msgid "E53: Unmatched %s%%("
++ msgstr "E53: Ikke-matchet %s%%("
++
++ #, c-format
++ msgid "E54: Unmatched %s("
++ msgstr "E54: Ikke-matchet %s("
++
++ #, c-format
++ msgid "E55: Unmatched %s)"
++ msgstr "E55: Ikke-matchet %s)"
++
++ msgid "E66: \\z( not allowed here"
++ msgstr "E66: \\z( ikke tilladt her"
++
++ msgid "E67: \\z1 et al. not allowed here"
++ msgstr "E67: \\z1 og andre ikke tilladt her"
++
++ #, c-format
++ msgid "E69: Missing ] after %s%%["
++ msgstr "E69: Manglende ] efter %s%%["
++
++ #, c-format
++ msgid "E70: Empty %s%%[]"
++ msgstr "E70: Tom %s%%[]"
++
++ msgid "E65: Illegal back reference"
++ msgstr "E65: Ulovlig tilbage-reference"
++
++ msgid "E339: Pattern too long"
++ msgstr "E339: Mønster for langt"
++
++ msgid "E50: Too many \\z("
++ msgstr "E50: For mange \\z("
++
++ #, c-format
++ msgid "E51: Too many %s("
++ msgstr "E51: For mange %s("
++
++ msgid "E52: Unmatched \\z("
++ msgstr "E52: Ikke-matchet \\z("
++
++ #, c-format
++ msgid "E59: invalid character after %s@"
++ msgstr "E59: ugyldigt tegn efter %s@"
++
++ #, c-format
++ msgid "E60: Too many complex %s{...}s"
++ msgstr "E60: For mange komplekse %s{...}s"
++
++ #, c-format
++ msgid "E61: Nested %s*"
++ msgstr "E61: Indlejret %s*"
++
++ #, c-format
++ msgid "E62: Nested %s%c"
++ msgstr "E62: Indlejret %s%c"
++
++ msgid "E63: invalid use of \\_"
++ msgstr "E63: ugyldig brug af \\_"
++
++ #, c-format
++ msgid "E64: %s%c follows nothing"
++ msgstr "E64: %s%c efterfølger intet"
++
++ msgid "E68: Invalid character after \\z"
++ msgstr "E68: Ugyldigt tegn efter \\z"
++
++ #, c-format
++ msgid "E678: Invalid character after %s%%[dxouU]"
++ msgstr "E678: Ugyldigt tegn efter %s%%[dxouU]"
++
++ #, c-format
++ msgid "E71: Invalid character after %s%%"
++ msgstr "E71: Ugyldigt tegn efter %s%%"
++
++ #, c-format
++ msgid "E554: Syntax error in %s{...}"
++ msgstr "E554: Fejl ved syntaks i %s{...}"
++
++ msgid "External submatches:\n"
++ msgstr "Eksterne undermatch:\n"
++
++ #, c-format
++ msgid "E888: (NFA regexp) cannot repeat %s"
++ msgstr "E888: (NFA regexp) kan ikke gentage %s"
++
++ msgid ""
++ "E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
++ "used "
++ msgstr ""
++ "E864: \\%#= må kun efterfølges af 0, 1 eller 2. Bruger den automatiske motor "
++
++ msgid "Switching to backtracking RE engine for pattern: "
++ msgstr "Skifter til backtracking RE-motor for mønster: "
++
++ msgid "E865: (NFA) Regexp end encountered prematurely"
++ msgstr "E865: (NFA) Mødte slutningen på regulært udtryk for tidligt"
++
++ #, c-format
++ msgid "E866: (NFA regexp) Misplaced %c"
++ msgstr "E866: (NFA regexp) Forkert placeret %c"
++
++ #, c-format
++ msgid "E877: (NFA regexp) Invalid character class: %ld"
++ msgstr "E877: (NFA regexp) Ugyldig tegnklasse: %ld"
++
++ #, c-format
++ msgid "E867: (NFA) Unknown operator '\\z%c'"
++ msgstr "E867: (NFA) Ukendt operator '\\z%c'"
++
++ msgid "E951: \\% value too large"
++ msgstr "E951: \\%-værdi for stor"
++
++ #, c-format
++ msgid "E867: (NFA) Unknown operator '\\%%%c'"
++ msgstr "E867: (NFA) Ukendt operator '\\%%%c'"
++
++ msgid "E868: Error building NFA with equivalence class!"
++ msgstr "E868: Fejl ved bygning af NFA med ligestillet klasse!"
++
++ #, c-format
++ msgid "E869: (NFA) Unknown operator '\\@%c'"
++ msgstr "E869: (NFA) Ukendt operator '\\@%c'"
++
++ msgid "E870: (NFA regexp) Error reading repetition limits"
++ msgstr "E870: (NFA regexp) Fejl ved læsning af gentagelsesgrænser"
++
++ msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
++ msgstr "E871: (NFA regexp) En multi må ikke efterfølges af en multi !"
++
++ msgid "E872: (NFA regexp) Too many '('"
++ msgstr "E872: (NFA regexp) For mange '('"
++
++ msgid "E879: (NFA regexp) Too many \\z("
++ msgstr "E879: (NFA regexp) For mange \\z("
++
++ msgid "E873: (NFA regexp) proper termination error"
++ msgstr "E873: (NFA regexp) fejl ved korrekt terminering"
++
++ msgid "E874: (NFA) Could not pop the stack !"
++ msgstr "E874: (NFA) Kunne ikke pop'e stakken !"
++
++ msgid ""
++ "E875: (NFA regexp) (While converting from postfix to NFA), too many states "
++ "left on stack"
++ msgstr ""
++ "E875: (NFA regexp) (Ved konvertering fra postfix til NFA), for mange "
++ "tilstande tilbage på stak"
++
++ msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
++ msgstr "E876: (NFA regexp) Ikke nok plads til at lagre hele NFA'en "
++
++ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
++ msgstr "E878: (NFA) Kunne ikke allokere hukommelse til gennemgang af gren!"
++
++ msgid ""
++ "Could not open temporary log file for writing, displaying on stderr ... "
++ msgstr "Kunne ikke åbne midlertidig logfil til skrivning, viser på stderr ... "
++
++ #, c-format
++ msgid "(NFA) COULD NOT OPEN %s !"
++ msgstr "(NFA) KUNNE IKKE Ã…BNE %s !"
++
++ msgid "Could not open temporary log file for writing "
++ msgstr "Kunne ikke åbne midlertidig logfil til skrivning "
++
++ msgid " VREPLACE"
++ msgstr " VERSTAT"
++
++ msgid " REPLACE"
++ msgstr " ERSTAT"
++
++ msgid " REVERSE"
++ msgstr " BAGLÆNS"
++
++ msgid " INSERT"
++ msgstr " INDSÆT"
++
++ msgid " (insert)"
++ msgstr " (indsæt)"
++
++ msgid " (replace)"
++ msgstr " (erstat)"
++
++ msgid " (vreplace)"
++ msgstr " (verstat)"
++
++ msgid " Hebrew"
++ msgstr " Hebraisk"
++
++ msgid " Arabic"
++ msgstr " Arabisk"
++
++ msgid " (paste)"
++ msgstr " (indsæt)"
++
++ msgid " VISUAL"
++ msgstr " VISUEL"
++
++ msgid " VISUAL LINE"
++ msgstr " VISUEL LINJE"
++
++ msgid " VISUAL BLOCK"
++ msgstr " VISUEL BLOK"
++
++ msgid " SELECT"
++ msgstr " VÆLG"
++
++ msgid " SELECT LINE"
++ msgstr " VÆLG LINJE"
++
++ msgid " SELECT BLOCK"
++ msgstr " VÆLG BLOK"
++
++ msgid "recording"
++ msgstr "optager"
++
++ #, c-format
++ msgid "E383: Invalid search string: %s"
++ msgstr "E383: Ugyldig søgestreng: %s"
++
++ #, c-format
++ msgid "E384: search hit TOP without match for: %s"
++ msgstr "E384: søgning ramte ØVERST uden match for: %s"
++
++ #, c-format
++ msgid "E385: search hit BOTTOM without match for: %s"
++ msgstr "E385: søgning ramte NEDERST uden match for: %s"
++
++ msgid "E386: Expected '?' or '/' after ';'"
++ msgstr "E386: Ventede '?' eller '/' efter ';'"
++
++ msgid " (includes previously listed match)"
++ msgstr " (inkluderer tidligere oplistet match)"
++
++ msgid "--- Included files "
++ msgstr "--- Inkluderede filer "
++
++ msgid "not found "
++ msgstr "ikke fundet "
++
++ msgid "in path ---\n"
++ msgstr "i sti ---\n"
++
++ msgid " (Already listed)"
++ msgstr " (Allerede oplistet)"
++
++ msgid " NOT FOUND"
++ msgstr " IKKE FUNDET"
++
++ #, c-format
++ msgid "Scanning included file: %s"
++ msgstr "Skanner inkluderede filer: %s"
++
++ #, c-format
++ msgid "Searching included file %s"
++ msgstr "Søger efter inkluderede fil %s"
++
++ msgid "E387: Match is on current line"
++ msgstr "E387: Match er på nuværende linje"
++
++ msgid "All included files were found"
++ msgstr "Alle inkluderede filer blev fundet"
++
++ msgid "No included files"
++ msgstr "Ingen inkluderede filer"
++
++ msgid "E388: Couldn't find definition"
++ msgstr "E388: Kunne ikke finde definition"
++
++ msgid "E389: Couldn't find pattern"
++ msgstr "E389: Kunne ikke finde mønster"
++
++ msgid "Substitute "
++ msgstr "Erstatning "
++
++ #, c-format
++ msgid ""
++ "\n"
++ "# Last %sSearch Pattern:\n"
++ "~"
++ msgstr ""
++ "\n"
++ "# Sidste %sSøgemønster:\n"
++ "~"
++
++ msgid "E756: Spell checking is not enabled"
++ msgstr "E756: Stavekontrol er ikke aktiveret"
++
++ #, c-format
++ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++ msgstr "Advarsel: Kan ikke finde ordlisten \"%s_%s.spl\" eller \"%s_ascii.spl\""
++
++ #, c-format
++ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
++ msgstr "Advarsel: Kan ikke finde ordlisten \"%s.%s.spl\" eller \"%s.ascii.spl\""
++
++ msgid "E797: SpellFileMissing autocommand deleted buffer"
++ msgstr "E797: SpellFileMissing-autokommando slettede buffer"
++
++ #, c-format
++ msgid "Warning: region %s not supported"
++ msgstr "Advarsel: regionen %s understøttes ikke"
++
++ msgid "Sorry, no suggestions"
++ msgstr "Beklager, ingen forslag"
++
++ #, c-format
++ msgid "Sorry, only %ld suggestions"
++ msgstr "Beklager, kun %ld forslag"
++
++ #, c-format
++ msgid "Change \"%.*s\" to:"
++ msgstr "Ændr \"%.*s\" til:"
++
++ #, c-format
++ msgid " < \"%.*s\""
++ msgstr " < \"%.*s\""
++
++ msgid "E752: No previous spell replacement"
++ msgstr "E752: Ingen tidligere staveerstatning"
++
++ #, c-format
++ msgid "E753: Not found: %s"
++ msgstr "E753: Ikke fundet: %s"
++
++ msgid "E758: Truncated spell file"
++ msgstr "E758: Afkortet spell-fil"
++
++ #, c-format
++ msgid "Trailing text in %s line %d: %s"
++ msgstr "Efterstillede tekst i %s linje %d: %s"
++
++ #, c-format
++ msgid "Affix name too long in %s line %d: %s"
++ msgstr "Affix-navn for langt i %s linje %d: %s"
++
++ msgid "E761: Format error in affix file FOL, LOW or UPP"
++ msgstr "E761: Fejl i format i affix-filens FOL, LOW eller UPP"
++
++ msgid "E762: Character in FOL, LOW or UPP is out of range"
++ msgstr "E762: Tegn i FOL, LOW eller UPP er udenfor område"
++
++ msgid "Compressing word tree..."
++ msgstr "Komprimerer ordtræ..."
++
++ #, c-format
++ msgid "Reading spell file \"%s\""
++ msgstr "Læser spell-filen \"%s\""
++
++ msgid "E757: This does not look like a spell file"
++ msgstr "E757: Det ligner ikke en spell-fil"
++
++ msgid "E771: Old spell file, needs to be updated"
++ msgstr "E771: Gammel spell-fil, som skal opdateres"
++
++ msgid "E772: Spell file is for newer version of Vim"
++ msgstr "E772: Spell-filen er til en nyere version af Vim"
++
++ msgid "E770: Unsupported section in spell file"
++ msgstr "E770: Ikke-understøttet sektion i spell-fil"
++
++ #, c-format
++ msgid "E778: This does not look like a .sug file: %s"
++ msgstr "E778: ligner ikke en .sug-fil: %s"
++
++ #, c-format
++ msgid "E779: Old .sug file, needs to be updated: %s"
++ msgstr "E779: Gammel .sug-fil, som skal opdateres: %s"
++
++ #, c-format
++ msgid "E780: .sug file is for newer version of Vim: %s"
++ msgstr "E780: .sug-filen er til en nyere version af Vim: %s"
++
++ #, c-format
++ msgid "E781: .sug file doesn't match .spl file: %s"
++ msgstr "E781: .sug-filen matcher ikke .spl-filen: %s"
++
++ #, c-format
++ msgid "E782: error while reading .sug file: %s"
++ msgstr "E782: fejl ved læsning af .sug-fil: %s"
++
++ #, c-format
++ msgid "Reading affix file %s ..."
++ msgstr "Læser affix-filen %s ..."
++
++ #, c-format
++ msgid "Conversion failure for word in %s line %d: %s"
++ msgstr "Mislykkede konvertering for ordet %s linje %d: %s"
++
++ #, c-format
++ msgid "Conversion in %s not supported: from %s to %s"
++ msgstr "Konvertering i %s understøttes ikke: fra %s til %s"
++
++ #, c-format
++ msgid "Conversion in %s not supported"
++ msgstr "Konvertering i %s understøttes ikke"
++
++ #, c-format
++ msgid "Invalid value for FLAG in %s line %d: %s"
++ msgstr "Ugyldig værdi for FLAG i %s linje %d: %s"
++
++ #, c-format
++ msgid "FLAG after using flags in %s line %d: %s"
++ msgstr "FLAG efter brug af flag i %s linje %d: %s"
++
++ #, c-format
++ msgid ""
++ "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
++ "%d"
++ msgstr ""
++ "Definering af COMPOUNDFORBIDFLAG efter PFX-punkt kan give forkerte "
++ "resultater i %s linje %d"
++
++ #, c-format
++ msgid ""
++ "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
++ "%d"
++ msgstr ""
++ "Definering af COMPOUNDPERMITFLAG efter PFX-punkt kan give forkerte "
++ "resultater i %s linje %d"
++
++ #, c-format
++ msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
++ msgstr "Forkert COMPOUNDRULES-værdi i %s linje %d: %s"
++
++ #, c-format
++ msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
++ msgstr "Forkert COMPOUNDWORDMAX-værdi i %s linje %d: %s"
++
++ #, c-format
++ msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
++ msgstr "Forkert COMPOUNDMIN-værdi i %s linje %d: %s"
++
++ #, c-format
++ msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
++ msgstr "Forkert COMPOUNDSYLMAX-værdi i %s linje %d: %s"
++
++ #, c-format
++ msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
++ msgstr "Forkert CHECKCOMPOUNDPATTERN-værdi i %s linje %d: %s"
++
++ #, c-format
++ msgid "Different combining flag in continued affix block in %s line %d: %s"
++ msgstr "Forskellige kombineringsflag i fortsat affix-blok i %s linje %d: %s"
++
++ #, c-format
++ msgid "Duplicate affix in %s line %d: %s"
++ msgstr "Duplikeret affix i %s linje %d: %s"
++
++ #, c-format
++ msgid ""
++ "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
++ "line %d: %s"
++ msgstr ""
++ "Affix også brugt for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST i %s "
++ "linje %d: %s"
++
++ #, c-format
++ msgid "Expected Y or N in %s line %d: %s"
++ msgstr "Ventede Y eller N i %s linje %d: %s"
++
++ #, c-format
++ msgid "Broken condition in %s line %d: %s"
++ msgstr "Ødelagt betingelse i %s linje %d: %s"
++
++ #, c-format
++ msgid "Expected REP(SAL) count in %s line %d"
++ msgstr "Ventede REP(SAL)-tælling i %s linje %d"
++
++ #, c-format
++ msgid "Expected MAP count in %s line %d"
++ msgstr "Ventede MAP-tælling i %s linje %d"
++
++ #, c-format
++ msgid "Duplicate character in MAP in %s line %d"
++ msgstr "Duplikeret tegn i MAP i %s linje %d"
++
++ #, c-format
++ msgid "Unrecognized or duplicate item in %s line %d: %s"
++ msgstr "Ikke-genkendt eller duplikeret punkt i %s linje %d: %s"
++
++ #, c-format
++ msgid "Missing FOL/LOW/UPP line in %s"
++ msgstr "Manglende FOL-/LOW-/UPP-linje i %s"
++
++ msgid "COMPOUNDSYLMAX used without SYLLABLE"
++ msgstr "COMPOUNDSYLMAX brugt uden SYLLABLE"
++
++ msgid "Too many postponed prefixes"
++ msgstr "For mange udskudte præfikser"
++
++ msgid "Too many compound flags"
++ msgstr "For mange compound-flag"
++
++ msgid "Too many postponed prefixes and/or compound flags"
++ msgstr "For mange udskudte præfikser og/eller compound-flag"
++
++ #, c-format
++ msgid "Missing SOFO%s line in %s"
++ msgstr "Manglende SOFO%s-linje i %s"
++
++ #, c-format
++ msgid "Both SAL and SOFO lines in %s"
++ msgstr "BÃ¥de SAL- og SOFO-linjer i %s"
++
++ #, c-format
++ msgid "Flag is not a number in %s line %d: %s"
++ msgstr "Flag er ikke et nummer i %s linje %d: %s"
++
++ #, c-format
++ msgid "Illegal flag in %s line %d: %s"
++ msgstr "Ulovligt flag i %s linje %d: %s"
++
++ #, c-format
++ msgid "%s value differs from what is used in another .aff file"
++ msgstr "%s-værdi er ikke den samme som bruges i en anden .aff-fil"
++
++ #, c-format
++ msgid "Reading dictionary file %s ..."
++ msgstr "Læser ordbogsfilen %s ..."
++
++ #, c-format
++ msgid "E760: No word count in %s"
++ msgstr "E760: Ingen ordtælling i %s"
++
++ #, c-format
++ msgid "line %6d, word %6ld - %s"
++ msgstr "linje %6d, ord %6ld - %s"
++
++ #, c-format
++ msgid "Duplicate word in %s line %d: %s"
++ msgstr "Duplikeret ord i %s linje %d: %s"
++
++ #, c-format
++ msgid "First duplicate word in %s line %d: %s"
++ msgstr "Første duplikeret ord i %s linje %d: %s"
++
++ #, c-format
++ msgid "%d duplicate word(s) in %s"
++ msgstr "%d duplikeret ord i %s"
++
++ #, c-format
++ msgid "Ignored %d word(s) with non-ASCII characters in %s"
++ msgstr "Ignorerede %d ord med ikke-ASCII-tegn i %s"
++
++ #, c-format
++ msgid "Reading word file %s ..."
++ msgstr "Læser ordfilen %s ..."
++
++ #, c-format
++ msgid "Duplicate /encoding= line ignored in %s line %d: %s"
++ msgstr "Duplikeret /encoding=-linje ignoreret i %s linje %d: %s"
++
++ #, c-format
++ msgid "/encoding= line after word ignored in %s line %d: %s"
++ msgstr "/encoding=-linje efter ord ignoreret i %s linje %d: %s"
++
++ #, c-format
++ msgid "Duplicate /regions= line ignored in %s line %d: %s"
++ msgstr "Duplikerede /regions=-linjer ignoreret i %s linje %d: %s"
++
++ #, c-format
++ msgid "Too many regions in %s line %d: %s"
++ msgstr "For mange regioner i %s linje %d: %s"
++
++ #, c-format
++ msgid "/ line ignored in %s line %d: %s"
++ msgstr "/-linje ignoreret i %s linje %d: %s"
++
++ #, c-format
++ msgid "Invalid region nr in %s line %d: %s"
++ msgstr "Ugyldigt regisionsnummer i %s linje %d: %s"
++
++ #, c-format
++ msgid "Unrecognized flags in %s line %d: %s"
++ msgstr "Ugenkendte flag i %s linje %d: %s"
++
++ #, c-format
++ msgid "Ignored %d words with non-ASCII characters"
++ msgstr "Ignorerer %d ord med ikke-ASCII-tegn"
++
++ msgid "E845: Insufficient memory, word list will be incomplete"
++ msgstr "E845: Ikke nok hukommelse, ordlisten vil være ufuldstændig"
++
++ #, c-format
++ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
++ msgstr "Komprimerede %d af %d punkter; %d (%d%%) tilbage"
++
++ msgid "Reading back spell file..."
++ msgstr "Læser spell-fil tilbage..."
++
++ msgid "Performing soundfolding..."
++ msgstr "Udfører lydsammenfoldning..."
++
++ #, c-format
++ msgid "Number of words after soundfolding: %ld"
++ msgstr "Antal ord efter lydsammenfoldning: %ld"
++
++ #, c-format
++ msgid "Total number of words: %d"
++ msgstr "Samlet antal ord: %d"
++
++ #, c-format
++ msgid "Writing suggestion file %s ..."
++ msgstr "Skriver forslagsfilen %s ..."
++
++ #, c-format
++ msgid "Estimated runtime memory use: %d bytes"
++ msgstr "Anslået brug af afviklingshukommelse: %d byte"
++
++ msgid "E751: Output file name must not have region name"
++ msgstr "E751: Outputfilnavn må ikke have regionsnavn"
++
++ #, c-format
++ msgid "E754: Only up to %ld regions supported"
++ msgstr "E754: Kun op til %ld regioner understøttes"
++
++ #, c-format
++ msgid "E755: Invalid region in %s"
++ msgstr "E755: Ugyldig region i %s"
++
++ msgid "Warning: both compounding and NOBREAK specified"
++ msgstr "Advarsel: både compounding og NOBREAK angivet"
++
++ #, c-format
++ msgid "Writing spell file %s ..."
++ msgstr "Skriver spell-filen %s ..."
++
++ msgid "Done!"
++ msgstr "Færdig!"
++
++ #, c-format
++ msgid "E765: 'spellfile' does not have %ld entries"
++ msgstr "E765: 'spellfile' har ingen %ld-poster"
++
++ #, c-format
++ msgid "Word '%.*s' removed from %s"
++ msgstr "Ordet '%.*s' fjernet fra %s"
++
++ #, c-format
++ msgid "Word '%.*s' added to %s"
++ msgstr "Ordet '%.*s' tilføjet til %s"
++
++ msgid "E763: Word characters differ between spell files"
++ msgstr "E763: Ordtegn er ikke ens i spell-filer"
++
++ msgid "E783: duplicate char in MAP entry"
++ msgstr "E783: duplikeret tegn i MAP-post"
++
++ msgid "No Syntax items defined for this buffer"
++ msgstr "Ingen syntakspunkter defineret for denne buffer"
++
++ msgid "syntax conceal on"
++ msgstr "syntax conceal on"
++
++ msgid "syntax conceal off"
++ msgstr "syntax conceal off"
++
++ #, c-format
++ msgid "E390: Illegal argument: %s"
++ msgstr "E390: Ulovligt argument: %s"
++
++ msgid "syntax case ignore"
++ msgstr "syntax case ignore"
++
++ msgid "syntax case match"
++ msgstr "syntax case match"
++
++ msgid "syntax spell toplevel"
++ msgstr "syntax spell toplevel"
++
++ msgid "syntax spell notoplevel"
++ msgstr "syntax spell notoplevel"
++
++ msgid "syntax spell default"
++ msgstr "syntax spell default"
++
++ msgid "syntax iskeyword "
++ msgstr "syntax iskeyword "
++
++ #, c-format
++ msgid "E391: No such syntax cluster: %s"
++ msgstr "E391: Ingen sådan syntaks-cluster: %s"
++
++ msgid "syncing on C-style comments"
++ msgstr "synkronisering på C-style-kommentarer"
++
++ msgid "no syncing"
++ msgstr "ingen synkronisering"
++
++ msgid "syncing starts "
++ msgstr "synkronisering starter "
++
++ msgid " lines before top line"
++ msgstr " linjer inden øverste linje"
++
++ msgid ""
++ "\n"
++ "--- Syntax sync items ---"
++ msgstr ""
++ "\n"
++ "--- Syntaks-synkroniseringspunkter ---"
++
++ msgid ""
++ "\n"
++ "syncing on items"
++ msgstr ""
++ "\n"
++ "synkroniserer på punkter"
++
++ msgid ""
++ "\n"
++ "--- Syntax items ---"
++ msgstr ""
++ "\n"
++ "--- Syntakspunkter ---"
++
++ #, c-format
++ msgid "E392: No such syntax cluster: %s"
++ msgstr "E392: Ingen sådan syntaks-cluster: %s"
++
++ msgid "minimal "
++ msgstr "minimal "
++
++ msgid "maximal "
++ msgstr "maksimal "
++
++ msgid "; match "
++ msgstr "; match "
++
++ msgid " line breaks"
++ msgstr " linjeombrydninger"
++
++ msgid "E395: contains argument not accepted here"
++ msgstr "E395: indeholder argument som ikke accepteres her"
++
++ msgid "E844: invalid cchar value"
++ msgstr "E844: ugyldig cchar-værdi"
++
++ msgid "E393: group[t]here not accepted here"
++ msgstr "E393: group[t]here accepteres ikke her"
++
++ #, c-format
++ msgid "E394: Didn't find region item for %s"
++ msgstr "E394: Find ikke regionspunkter for %s"
++
++ msgid "E397: Filename required"
++ msgstr "E397: Filnavn kræves"
++
++ msgid "E847: Too many syntax includes"
++ msgstr "E847: For mange syntaks inkluderinger"
++
++ #, c-format
++ msgid "E789: Missing ']': %s"
++ msgstr "E789: Manglende ']': %s"
++
++ #, c-format
++ msgid "E890: trailing char after ']': %s]%s"
++ msgstr "E890: efterstillede tegn efter ']': %s]%s"
++
++ #, c-format
++ msgid "E398: Missing '=': %s"
++ msgstr "E398: Manglende '=': %s"
++
++ #, c-format
++ msgid "E399: Not enough arguments: syntax region %s"
++ msgstr "E399: For mange argumenter: syntaks region %s"
++
++ msgid "E848: Too many syntax clusters"
++ msgstr "E848: For mange syntaks-clusters"
++
++ msgid "E400: No cluster specified"
++ msgstr "E400: Ingen cluster angivet"
++
++ #, c-format
++ msgid "E401: Pattern delimiter not found: %s"
++ msgstr "E401: Mønsterafgrænser ikke fundet: %s"
++
++ #, c-format
++ msgid "E402: Garbage after pattern: %s"
++ msgstr "E402: Affald efter mønster: %s"
++
++ msgid "E403: syntax sync: line continuations pattern specified twice"
++ msgstr ""
++ "E403: syntaks synkronisering: linjefortsættelsesmønster angivet to gange"
++
++ #, c-format
++ msgid "E404: Illegal arguments: %s"
++ msgstr "E404: Ulovlige argumenter: %s"
++
++ #, c-format
++ msgid "E405: Missing equal sign: %s"
++ msgstr "E405: Manglende lighedstegn: %s"
++
++ #, c-format
++ msgid "E406: Empty argument: %s"
++ msgstr "E406: Tomt argument: %s"
++
++ #, c-format
++ msgid "E407: %s not allowed here"
++ msgstr "E407: %s ikke tilladt her"
++
++ #, c-format
++ msgid "E408: %s must be first in contains list"
++ msgstr "E408: %s skal være først i contains-liste"
++
++ #, c-format
++ msgid "E409: Unknown group name: %s"
++ msgstr "E409: Ukendt gruppenavn: %s"
++
++ #, c-format
++ msgid "E410: Invalid :syntax subcommand: %s"
++ msgstr "E410: Ugyldig :syntax-underkommando: %s"
++
++ msgid ""
++ " TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
++ msgstr ""
++ " SAMLET ANTAL MATCH LANGSOMST GENNEMS. NAVN MØNSTER"
++
++ msgid "E679: recursive loop loading syncolor.vim"
++ msgstr "E679: rekursiv løkke ved indlæsning af syncolor.vim"
++
++ #, c-format
++ msgid "E411: highlight group not found: %s"
++ msgstr "E411: fremhævningsgruppe ikke fundet: %s"
++
++ #, c-format
++ msgid "E412: Not enough arguments: \":highlight link %s\""
++ msgstr "E412: Ikke nok argumenter: \":highlight link %s\""
++
++ #, c-format
++ msgid "E413: Too many arguments: \":highlight link %s\""
++ msgstr "E413: For mange argumenter: \":highlight link %s\""
++
++ msgid "E414: group has settings, highlight link ignored"
++ msgstr "E414: gruppe har indstillinger, highlight link ignoreret"
++
++ #, c-format
++ msgid "E415: unexpected equal sign: %s"
++ msgstr "E415: uventet lighedstegn: %s"
++
++ #, c-format
++ msgid "E416: missing equal sign: %s"
++ msgstr "E416: manglende lighedstegn: %s"
++
++ #, c-format
++ msgid "E417: missing argument: %s"
++ msgstr "E417: manglende argument: %s"
++
++ #, c-format
++ msgid "E418: Illegal value: %s"
++ msgstr "E418: Ulovlig værdi: %s"
++
++ msgid "E419: FG color unknown"
++ msgstr "E419: Forgrundsfarve ukendt"
++
++ msgid "E420: BG color unknown"
++ msgstr "E420: Baggrundsfarve ukendt"
++
++ #, c-format
++ msgid "E421: Color name or number not recognized: %s"
++ msgstr "E421: Farvenavn eller -nummer ikke genkendt: %s"
++
++ #, c-format
++ msgid "E422: terminal code too long: %s"
++ msgstr "E422: terminalkode for lang: %s"
++
++ #, c-format
++ msgid "E423: Illegal argument: %s"
++ msgstr "E423: Ulovligt argument: %s"
++
++ msgid "E424: Too many different highlighting attributes in use"
++ msgstr "E424: For mange forskellige fremhævningsattributter i brug"
++
++ msgid "E669: Unprintable character in group name"
++ msgstr "E669: Tegn som ikke kan udskrives i gruppenavn"
++
++ msgid "W18: Invalid character in group name"
++ msgstr "W18: Ugyldige tegn i gruppenavn"
++
++ msgid "E849: Too many highlight and syntax groups"
++ msgstr "E849: For mange fremhævnings- og syntaksgrupper"
++
++ msgid "E555: at bottom of tag stack"
++ msgstr "E555: nederst i tag-stak"
++
++ msgid "E556: at top of tag stack"
++ msgstr "E556: øverst i tag-stak"
++
++ msgid "E425: Cannot go before first matching tag"
++ msgstr "E425: Kan ikke gå efter første matchende tag"
++
++ #, c-format
++ msgid "E426: tag not found: %s"
++ msgstr "E426: tag ikke fundet: %s"
++
++ msgid " # pri kind tag"
++ msgstr " # pri kind tag"
++
++ msgid "file\n"
++ msgstr "fil\n"
++
++ msgid "E427: There is only one matching tag"
++ msgstr "E427: Der er kun ét matchende tag"
++
++ msgid "E428: Cannot go beyond last matching tag"
++ msgstr "E428: Kan ikke gå efter sidste matchende tag"
++
++ #, c-format
++ msgid "File \"%s\" does not exist"
++ msgstr "Filen \"%s\" findes ikke"
++
++ #, c-format
++ msgid "tag %d of %d%s"
++ msgstr "tag %d af %d%s"
++
++ msgid " or more"
++ msgstr " eller flere"
++
++ msgid " Using tag with different case!"
++ msgstr " Bruger tag med anden versaltype!"
++
++ #, c-format
++ msgid "E429: File \"%s\" does not exist"
++ msgstr "E429: Filen \"%s\" findes ikke"
++
++ msgid ""
++ "\n"
++ " # TO tag FROM line in file/text"
++ msgstr ""
++ "\n"
++ " # TIL tag FRA linje i fil/tekst"
++
++ #, c-format
++ msgid "Searching tags file %s"
++ msgstr "Søger i tags-filen %s"
++
++ #, c-format
++ msgid "E430: Tag file path truncated for %s\n"
++ msgstr "E430: Tag-filens sti afkortet for %s\n"
++
++ msgid "Ignoring long line in tags file"
++ msgstr "Ignorerer lang linje i tags-fil"
++
++ #, c-format
++ msgid "E431: Format error in tags file \"%s\""
++ msgstr "E431: Fejl ved format i tags-filen \"%s\""
++
++ #, c-format
++ msgid "Before byte %ld"
++ msgstr "Inden byte %ld"
++
++ #, c-format
++ msgid "E432: Tags file not sorted: %s"
++ msgstr "E432: Tags-fil ikke sorteret: %s"
++
++ msgid "E433: No tags file"
++ msgstr "E433: Ingen tags-fil"
++
++ msgid "E434: Can't find tag pattern"
++ msgstr "E434: Kan ikke finde tag-mønster"
++
++ msgid "E435: Couldn't find tag, just guessing!"
++ msgstr "E435: Kunne ikke finde tag, gætter bare!"
++
++ #, c-format
++ msgid "Duplicate field name: %s"
++ msgstr "Duplikeret feltnavn: %s"
++
++ msgid "' not known. Available builtin terminals are:"
++ msgstr "' ikke kendt. Tilgængelige indbyggede terminaler:"
++
++ msgid "defaulting to '"
++ msgstr "bruger standarden '"
++
++ msgid "E557: Cannot open termcap file"
++ msgstr "E557: Kan ikke åbne termcap-fil"
++
++ msgid "E558: Terminal entry not found in terminfo"
++ msgstr "E558: Terminal-post ikke fundet i terminfo"
++
++ msgid "E559: Terminal entry not found in termcap"
++ msgstr "E559: Terminal-post ikke fundet i termcap"
++
++ #, c-format
++ msgid "E436: No \"%s\" entry in termcap"
++ msgstr "E436: Ingen \"%s\"-post i termcap"
++
++ msgid "E437: terminal capability \"cm\" required"
++ msgstr "E437: terminal-formåenheden \"cm\" kræves"
++
++ msgid ""
++ "\n"
++ "--- Terminal keys ---"
++ msgstr ""
++ "\n"
++ "--- Terminal-taster ---"
++
++ msgid "Cannot open $VIMRUNTIME/rgb.txt"
++ msgstr "Kan ikke åbne $VIMRUNTIME/rgb.txt"
++
++ #, c-format
++ msgid "Kill job in \"%s\"?"
++ msgstr "Dræb job i \"%s\"?"
++
++ msgid "Terminal"
++ msgstr "Terminal"
++
++ msgid "Terminal-finished"
++ msgstr "Terminal-færdig"
++
++ msgid "active"
++ msgstr "aktiv"
++
++ msgid "running"
++ msgstr "køre"
++
++ msgid "finished"
++ msgstr "færdig"
++
++ #, c-format
++ msgid "E953: File exists: %s"
++ msgstr "E953: Filen findes: %s"
++
++ msgid "E955: Not a terminal buffer"
++ msgstr "E955: Ikke en terminal-buffer"
++
++ msgid "new shell started\n"
++ msgstr "ny skal startet\n"
++
++ msgid "Vim: Error reading input, exiting...\n"
++ msgstr "Vim: Fejl ved læsning af input, afslutter...\n"
++
++ msgid "Used CUT_BUFFER0 instead of empty selection"
++ msgstr "Brugte CUT_BUFFER0 i stedet for tom markering"
++
++ msgid "E881: Line count changed unexpectedly"
++ msgstr "E881: Linjeantal ændret uventet"
++
++ msgid "No undo possible; continue anyway"
++ msgstr "Ingen fortryd mulig; fortsætter alligevel"
++
++ #, c-format
++ msgid "E828: Cannot open undo file for writing: %s"
++ msgstr "E828: Kan ikke åbne fortrydelsesfil til skrivning: %s"
++
++ #, c-format
++ msgid "E825: Corrupted undo file (%s): %s"
++ msgstr "E825: Korrupt fortrydelsesfil (%s): %s"
++
++ msgid "Cannot write undo file in any directory in 'undodir'"
++ msgstr "Kan ikke skrive fortrydelsesfil i nogen mappe i 'undodir'"
++
++ #, c-format
++ msgid "Will not overwrite with undo file, cannot read: %s"
++ msgstr "Overskriver ikke med fortrydelsesfil, kan ikke læse: %s"
++
++ #, c-format
++ msgid "Will not overwrite, this is not an undo file: %s"
++ msgstr "Overskriver ikke, det er ikke en fortrydelsesfil: %s"
++
++ msgid "Skipping undo file write, nothing to undo"
++ msgstr "Springer skrivning af fortrydelsesfil over, intet at fortryde"
++
++ #, c-format
++ msgid "Writing undo file: %s"
++ msgstr "Skriver fortrydelsesfil: %s"
++
++ #, c-format
++ msgid "E829: write error in undo file: %s"
++ msgstr "E829: fejl ved skrivning i fortrydelsesfil: %s"
++
++ #, c-format
++ msgid "Not reading undo file, owner differs: %s"
++ msgstr "Læser ikke fortrydelsesfil, ejer er ikke den samme: %s"
++
++ #, c-format
++ msgid "Reading undo file: %s"
++ msgstr "Læser fortrydelsesfil: %s"
++
++ #, c-format
++ msgid "E822: Cannot open undo file for reading: %s"
++ msgstr "E822: Kan ikke åbne fortrydelsesfil til læsning: %s"
++
++ #, c-format
++ msgid "E823: Not an undo file: %s"
++ msgstr "E823: Ikke en fortrydelsesfil: %s"
++
++ #, c-format
++ msgid "E832: Non-encrypted file has encrypted undo file: %s"
++ msgstr "E832: Ikke-krypteret fil har krypteret fortrydelsesfil: %s"
++
++ #, c-format
++ msgid "E826: Undo file decryption failed: %s"
++ msgstr "E826: Dekryptering af fortrydelsesfil mislykkedes: %s"
++
++ #, c-format
++ msgid "E827: Undo file is encrypted: %s"
++ msgstr "E827: Fortrydelsesfilen er krypteret: %s"
++
++ #, c-format
++ msgid "E824: Incompatible undo file: %s"
++ msgstr "E824: Inkompatibel fortrydelsesfil: %s"
++
++ msgid "File contents changed, cannot use undo info"
++ msgstr "Filindholdet ændret, kan ikke bruge fortrydelsesinfo"
++
++ #, c-format
++ msgid "Finished reading undo file %s"
++ msgstr "Færdig med at læse fortrydelsesfilen %s"
++
++ msgid "Already at oldest change"
++ msgstr "Allerede ved ældste ændring"
++
++ msgid "Already at newest change"
++ msgstr "Allerede ved nyeste ændring"
++
++ #, c-format
++ msgid "E830: Undo number %ld not found"
++ msgstr "E830: Fortrydelsesnummer %ld ikke fundet"
++
++ msgid "E438: u_undo: line numbers wrong"
++ msgstr "E438: u_undo: linjenumre forkerte"
++
++ msgid "more line"
++ msgstr "linje mere"
++
++ msgid "more lines"
++ msgstr "linjer mere"
++
++ msgid "line less"
++ msgstr "linje mindre"
++
++ msgid "fewer lines"
++ msgstr "linjere mindre"
++
++ msgid "change"
++ msgstr "ændring"
++
++ msgid "changes"
++ msgstr "ændringer"
++
++ #, c-format
++ msgid "%ld %s; %s #%ld %s"
++ msgstr "%ld %s; %s #%ld %s"
++
++ msgid "before"
++ msgstr "inden"
++
++ msgid "after"
++ msgstr "efter"
++
++ msgid "Nothing to undo"
++ msgstr "Intet at fortryde"
++
++ msgid "number changes when saved"
++ msgstr "nummer ændrin. hvornår gemt"
++
++ #, c-format
++ msgid "%ld seconds ago"
++ msgstr "%ld sekunder siden"
++
++ msgid "E790: undojoin is not allowed after undo"
++ msgstr "E790: undojoin ikke tilladt efter undo"
++
++ msgid "E439: undo list corrupt"
++ msgstr "E439: fortrydelsesliste korrupt"
++
++ msgid "E440: undo line missing"
++ msgstr "E440: fortrydelseslinje mangler"
++
++ #, c-format
++ msgid "E122: Function %s already exists, add ! to replace it"
++ msgstr "E122: Funktionen %s findes allerede, tilføj ! for at erstatte den"
++
++ msgid "E717: Dictionary entry already exists"
++ msgstr "E717: Ordbog-post findes allerede"
++
++ msgid "E718: Funcref required"
++ msgstr "E718: Funcref kræves"
++
++ #, c-format
++ msgid "E130: Unknown function: %s"
++ msgstr "E130: Ukendt funktion: %s"
++
++ #, c-format
++ msgid "E125: Illegal argument: %s"
++ msgstr "E125: Ulovligt argument: %s"
++
++ #, c-format
++ msgid "E853: Duplicate argument name: %s"
++ msgstr "E853: Duplikeret argumentnavn: %s"
++
++ #, c-format
++ msgid "E740: Too many arguments for function %s"
++ msgstr "E740: For mange argumenter til funktionen %s"
++
++ #, c-format
++ msgid "E116: Invalid arguments for function %s"
++ msgstr "E116: Ugyldige argumenter til funktionen %s"
++
++ msgid "E132: Function call depth is higher than 'maxfuncdepth'"
++ msgstr "E132: Dybden af funktionskald er større end 'maxfuncdepth'"
++
++ #, c-format
++ msgid "calling %s"
++ msgstr "kalder %s"
++
++ #, c-format
++ msgid "%s aborted"
++ msgstr "%s afbrudt"
++
++ #, c-format
++ msgid "%s returning #%ld"
++ msgstr "%s returnerer #%ld"
++
++ #, c-format
++ msgid "%s returning %s"
++ msgstr "%s returnerer %s"
++
++ msgid "E699: Too many arguments"
++ msgstr "E699: For mange argumenter"
++
++ #, c-format
++ msgid "E117: Unknown function: %s"
++ msgstr "E117: Ukendt funktion: %s"
++
++ #, c-format
++ msgid "E933: Function was deleted: %s"
++ msgstr "E933: Funktion blev slettet: %s"
++
++ #, c-format
++ msgid "E119: Not enough arguments for function: %s"
++ msgstr "E119: Ikke nok argumenter til funktionen: %s"
++
++ #, c-format
++ msgid "E120: Using <SID> not in a script context: %s"
++ msgstr "E120: Bruger <SID> ikke i et script kontekst: %s"
++
++ #, c-format
++ msgid "E725: Calling dict function without Dictionary: %s"
++ msgstr "E725: Kalder dict-funktion uden ordbog: %s"
++
++ msgid "E129: Function name required"
++ msgstr "E129: Funktionsnavn kræves"
++
++ #, c-format
++ msgid "E128: Function name must start with a capital or \"s:\": %s"
++ msgstr "E128: Funktionsnavnet skal begynde med et stort bogstav eller \"s:\": %s"
++
++ #, c-format
++ msgid "E884: Function name cannot contain a colon: %s"
++ msgstr "E884: Funktionsnavnet må ikke indeholdet et kolon: %s"
++
++ #, c-format
++ msgid "E123: Undefined function: %s"
++ msgstr "E123: Udefineret funktion: %s"
++
++ #, c-format
++ msgid "E124: Missing '(': %s"
++ msgstr "E124: Manglende '(': %s"
++
++ msgid "E862: Cannot use g: here"
++ msgstr "E862: Kan ikke bruge g: her"
++
++ #, c-format
++ msgid "E932: Closure function should not be at top level: %s"
++ msgstr "E932: Closure-funktion skal ikke være på topniveau: %s"
++
++ msgid "E126: Missing :endfunction"
++ msgstr "E126: Manglende :endfunction"
++
++ #, c-format
++ msgid "W22: Text found after :endfunction: %s"
++ msgstr "W22: Tekst fundet efter :endfunction: %s"
++
++ #, c-format
++ msgid "E707: Function name conflicts with variable: %s"
++ msgstr "E707: Funktionsnavnet er i konflikt med variablen: %s"
++
++ #, c-format
++ msgid "E127: Cannot redefine function %s: It is in use"
++ msgstr "E127: Kan ikke redefinere funktionen %s: Den er i brug"
++
++ #, c-format
++ msgid "E746: Function name does not match script file name: %s"
++ msgstr "E746: Funktionsnavn matcher ikke scriptfilnavn: %s"
++
++ #, c-format
++ msgid "E131: Cannot delete function %s: It is in use"
++ msgstr "E131: Kan ikke slette funktionen %s: Den er i brug"
++
++ msgid "E133: :return not inside a function"
++ msgstr "E133: :return ikke i en funktion"
++
++ #, c-format
++ msgid "E107: Missing parentheses: %s"
++ msgstr "E107: Manglende parenteser: %s"
++
++ msgid ""
++ "\n"
++ "MS-Windows 64-bit GUI version"
++ msgstr ""
++ "\n"
++ "MS-Windows 64-bit GUI-version"
++
++ msgid ""
++ "\n"
++ "MS-Windows 32-bit GUI version"
++ msgstr ""
++ "\n"
++ "MS-Windows 32-bit GUI-version"
++
++ msgid " with OLE support"
++ msgstr " med understøttelse af OLE"
++
++ msgid ""
++ "\n"
++ "MS-Windows 64-bit console version"
++ msgstr ""
++ "\n"
++ "MS-Windows 64-bit konsol-version"
++
++ msgid ""
++ "\n"
++ "MS-Windows 32-bit console version"
++ msgstr ""
++ "\n"
++ "MS-Windows 32-bit konsol-version"
++
++ msgid ""
++ "\n"
++ "macOS version"
++ msgstr ""
++ "\n"
++ "macOS-version"
++
++ msgid ""
++ "\n"
++ "macOS version w/o darwin feat."
++ msgstr ""
++ "\n"
++ "macOS-version med/uden darwin-funktionalitet."
++
++ msgid ""
++ "\n"
++ "OpenVMS version"
++ msgstr ""
++ "\n"
++ "OpenVMS-version"
++
++ msgid ""
++ "\n"
++ "Included patches: "
++ msgstr ""
++ "\n"
++ "Rettelser som er med: "
++
++ msgid ""
++ "\n"
++ "Extra patches: "
++ msgstr ""
++ "\n"
++ "Ekstra rettelser: "
++
++ msgid "Modified by "
++ msgstr "Ændret af "
++
++ msgid ""
++ "\n"
++ "Compiled "
++ msgstr ""
++ "\n"
++ "Kompileret "
++
++ msgid "by "
++ msgstr "af "
++
++ msgid ""
++ "\n"
++ "Huge version "
++ msgstr ""
++ "\n"
++ "Huge-version "
++
++ msgid ""
++ "\n"
++ "Big version "
++ msgstr ""
++ "\n"
++ "Big-version "
++
++ msgid ""
++ "\n"
++ "Normal version "
++ msgstr ""
++ "\n"
++ "Normal-version "
++
++ msgid ""
++ "\n"
++ "Small version "
++ msgstr ""
++ "\n"
++ "Small-version "
++
++ msgid ""
++ "\n"
++ "Tiny version "
++ msgstr ""
++ "\n"
++ "Tiny-version "
++
++ msgid "without GUI."
++ msgstr "uden GUI."
++
++ msgid "with GTK3 GUI."
++ msgstr "med GTK3-GUI."
++
++ msgid "with GTK2-GNOME GUI."
++ msgstr "med GTK2-GNOME-GUI."
++
++ msgid "with GTK2 GUI."
++ msgstr "med GTK2-GUI."
++
++ msgid "with X11-Motif GUI."
++ msgstr "med X11-Motif-GUI."
++
++ msgid "with X11-neXtaw GUI."
++ msgstr "med X11-neXtaw-GUI."
++
++ msgid "with X11-Athena GUI."
++ msgstr "med X11-Athena-GUI."
++
++ msgid "with Photon GUI."
++ msgstr "med Photon-GUI."
++
++ msgid "with GUI."
++ msgstr "med GUI."
++
++ msgid "with Carbon GUI."
++ msgstr "med Carbon-GUI."
++
++ msgid "with Cocoa GUI."
++ msgstr "med Cocoa-GUI."
++
++ msgid " Features included (+) or not (-):\n"
++ msgstr " Funktionaliteter som er med (+) eller ikke (-):\n"
++
++ msgid " system vimrc file: \""
++ msgstr " system vimrc-fil: \""
++
++ msgid " user vimrc file: \""
++ msgstr " bruger vimrc-fil: \""
++
++ msgid " 2nd user vimrc file: \""
++ msgstr " 2. bruger vimrc-fil: \""
++
++ msgid " 3rd user vimrc file: \""
++ msgstr " 3. bruger vimrc-fil: \""
++
++ msgid " user exrc file: \""
++ msgstr " bruger exrc-fil: \""
++
++ msgid " 2nd user exrc file: \""
++ msgstr " 2. bruger exrc-fil: \""
++
++ msgid " system gvimrc file: \""
++ msgstr " system gvimrc-fil: \""
++
++ msgid " user gvimrc file: \""
++ msgstr " bruger gvimrc-fil: \""
++
++ msgid "2nd user gvimrc file: \""
++ msgstr "2. bruger gvimrc-fil: \""
++
++ msgid "3rd user gvimrc file: \""
++ msgstr "3. bruger gvimrc-fil: \""
++
++ msgid " defaults file: \""
++ msgstr " defaults-fil: \""
++
++ msgid " system menu file: \""
++ msgstr " system menu-fil: \""
++
++ msgid " fall-back for $VIM: \""
++ msgstr " fall-back for $VIM: \""
++
++ msgid " f-b for $VIMRUNTIME: \""
++ msgstr " f-b for $VIMRUNTIME: \""
++
++ msgid "Compilation: "
++ msgstr "Kompilering: "
++
++ msgid "Compiler: "
++ msgstr "Kompiler: "
++
++ msgid "Linking: "
++ msgstr "Linking: "
++
++ msgid " DEBUG BUILD"
++ msgstr " FEJLRETNINGSBYG"
++
++ msgid "VIM - Vi IMproved"
++ msgstr "VIM - Vi IMproved"
++
++ msgid "version "
++ msgstr "version "
++
++ msgid "by Bram Moolenaar et al."
++ msgstr "af Bram Moolenaar og andre"
++
++ msgid "Vim is open source and freely distributable"
++ msgstr "Vim er open source og kan frit distribueres"
++
++ msgid "Help poor children in Uganda!"
++ msgstr "Hjælp fattige børn i Uganda!"
++
++ msgid "type :help iccf<Enter> for information "
++ msgstr "skriv :help iccf<Enter> for information "
++
++ msgid "type :q<Enter> to exit "
++ msgstr "skriv :q<Enter> for at afslutte "
++
++ msgid "type :help<Enter> or <F1> for on-line help"
++ msgstr "skriv :help<Enter> eller <F1> for onlinehjælp "
++
++ msgid "type :help version8<Enter> for version info"
++ msgstr "skriv :help version8<Enter> for versionsinfo"
++
++ msgid "Running in Vi compatible mode"
++ msgstr "Kører i Vi-kompatibel-tilstand"
++
++ msgid "type :set nocp<Enter> for Vim defaults"
++ msgstr "skriv :set nocp<Enter> for Vim-standarder"
++
++ msgid "type :help cp-default<Enter> for info on this"
++ msgstr "skriv :help cp-default<Enter> for info om det "
++
++ msgid "menu Help->Orphans for information "
++ msgstr "menu Hjælp->Forældreløse børnfor information "
++
++ msgid "Running modeless, typed text is inserted"
++ msgstr "Kører tilstandsløs, skrevet tekst indsættes"
++
++ msgid "menu Edit->Global Settings->Toggle Insert Mode "
++ msgstr "menu Rediger->Globale indstillinger->Indsæt-tilstand til/fra "
++
++ msgid " for two modes "
++ msgstr " for to-tilstande "
++
++ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
++ msgstr "menu Rediger->Globale indstillinger->Vi-kompatibel til/fra"
++
++ msgid " for Vim defaults "
++ msgstr " for Vim-standarder "
++
++ msgid "Sponsor Vim development!"
++ msgstr "Sponsorer udviklingen af Vim!"
++
++ msgid "Become a registered Vim user!"
++ msgstr "Bliv en registreret Vim-bruger!"
++
++ msgid "type :help sponsor<Enter> for information "
++ msgstr "skriv :help sponsor<Enter> for information "
++
++ msgid "type :help register<Enter> for information "
++ msgstr "skriv :help register<Enter> for information "
++
++ msgid "menu Help->Sponsor/Register for information "
++ msgstr "menu Hjælp->Sponsorer/registrer for information "
++
++ msgid "Already only one window"
++ msgstr "Allerede kun ét vindue"
++
++ msgid "E441: There is no preview window"
++ msgstr "E441: Der er ikke noget forhåndsvisningsvindue"
++
++ msgid "E442: Can't split topleft and botright at the same time"
++ msgstr "E442: Kan ikke opdele øverste venstre og nederste højre på samme tid"
++
++ msgid "E443: Cannot rotate when another window is split"
++ msgstr "E443: Kan ikke rotere når et andet vindue er opdelt"
++
++ msgid "E444: Cannot close last window"
++ msgstr "E444: Kan ikke lukke sidste vindue"
++
++ msgid "E813: Cannot close autocmd window"
++ msgstr "E813: Kan ikke lukke autocmd-vindue"
++
++ msgid "E814: Cannot close window, only autocmd window would remain"
++ msgstr "E814: Kan ikke lukke vindue, kun autocmd-vindue ville være tilbage"
++
++ msgid "E445: Other window contains changes"
++ msgstr "E445: Et andet vindue indeholder ændringer"
++
++ msgid "E446: No file name under cursor"
++ msgstr "E446: Intet filnavn under markør"
++
++ #, c-format
++ msgid "E447: Can't find file \"%s\" in path"
++ msgstr "E447: Kan ikke finde filen \"%s\" i sti"
++
++ #, c-format
++ msgid "E799: Invalid ID: %ld (must be greater than or equal to 1)"
++ msgstr "E799: Ugyldigt ID: %ld (skal være større end eller lig med 1)"
++
++ #, c-format
++ msgid "E801: ID already taken: %ld"
++ msgstr "E801: ID allerede taget: %ld"
++
++ msgid "List or number required"
++ msgstr "Liste eller nummer kræves"
++
++ #, c-format
++ msgid "E802: Invalid ID: %ld (must be greater than or equal to 1)"
++ msgstr "E802: Ugyldigt ID: %ld (skal være større end eller lig med 1)"
++
++ #, c-format
++ msgid "E803: ID not found: %ld"
++ msgstr "E803: ID ikke fundet: %ld"
++
++ #, c-format
++ msgid "E370: Could not load library %s"
++ msgstr "E370: Kunne ikke indlæse biblioteket %s"
++
++ msgid "Sorry, this command is disabled: the Perl library could not be loaded."
++ msgstr ""
++ "Beklager, kommandoen er deaktiveret: Perl-biblioteket kunne ikke indlæses."
++
++ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
++ msgstr "E299: Perl-evaluering forbudt i sandbox uden Safe-modulet"
++
++ msgid "Edit with &multiple Vims"
++ msgstr "Rediger med &flere Vim'er"
++
++ msgid "Edit with single &Vim"
++ msgstr "Rediger med én &Vim"
++
++ msgid "Diff with Vim"
++ msgstr "Diff med Vim"
++
++ msgid "Edit with &Vim"
++ msgstr "Rediger med &Vim"
++
++ msgid "Edit with existing Vim - "
++ msgstr "Rediger med eksisterende Vim - "
++
++ msgid "Edits the selected file(s) with Vim"
++ msgstr "Redigerer den valgt fil(er) med Vim"
++
++ msgid "Error creating process: Check if gvim is in your path!"
++ msgstr "Fejl ved oprettelse af proces: Tjek om gvim er i din sti!"
++
++ msgid "gvimext.dll error"
++ msgstr "fejl ved gvimext.dll"
++
++ msgid "Path length too long!"
++ msgstr "Stiens længde er for lang!"
++
++ msgid "--No lines in buffer--"
++ msgstr "--Ingen linjer i buffer--"
++
++ msgid "E470: Command aborted"
++ msgstr "E470: Kommando afbrudt"
++
++ msgid "E471: Argument required"
++ msgstr "E471: Argument kræves"
++
++ msgid "E10: \\ should be followed by /, ? or &"
++ msgstr "E10: \\ skal efterføles af /, ? eller &"
++
++ msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
++ msgstr "E11: Ugyldig i kommandolinjevindue; <CR> udfører, CTRL-C afslutter"
++
++ msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
++ msgstr ""
++ "E12: Kommando ikke tilladt fra exrc/vimrc i nuværende mappe- eller "
++ "tagsøgning"
++
++ msgid "E171: Missing :endif"
++ msgstr "E171: Manglende :endif"
++
++ msgid "E600: Missing :endtry"
++ msgstr "E600: Manglende :endtry"
++
++ msgid "E170: Missing :endwhile"
++ msgstr "E170: Manglende :endwhile"
++
++ msgid "E170: Missing :endfor"
++ msgstr "E170: Manglende :endfor"
++
++ msgid "E588: :endwhile without :while"
++ msgstr "E588: :endwhile uden :while"
++
++ msgid "E588: :endfor without :for"
++ msgstr "E588: :endfor uden :for"
++
++ msgid "E13: File exists (add ! to override)"
++ msgstr "E13: Filen findes (tilføj ! for at tilsidesætte)"
++
++ msgid "E472: Command failed"
++ msgstr "E472: Kommando mislykkede"
++
++ #, c-format
++ msgid "E234: Unknown fontset: %s"
++ msgstr "E234: Ukendt skrifttypesæt: %s"
++
++ #, c-format
++ msgid "E235: Unknown font: %s"
++ msgstr "E235: Ukendt skrifttype: %s"
++
++ #, c-format
++ msgid "E236: Font \"%s\" is not fixed-width"
++ msgstr "E236: Skrifttypen \"%s\" er ikke med fast bredde"
++
++ msgid "E473: Internal error"
++ msgstr "E473: Intern fejl"
++
++ #, c-format
++ msgid "E685: Internal error: %s"
++ msgstr "E685: Intern fejl: %s"
++
++ msgid "Interrupted"
++ msgstr "Afbrudt"
++
++ msgid "E14: Invalid address"
++ msgstr "E14: Ugyldig adresse"
++
++ msgid "E474: Invalid argument"
++ msgstr "E474: Ugyldigt argument"
++
++ #, c-format
++ msgid "E475: Invalid argument: %s"
++ msgstr "E475: Ugyldigt argument: %s"
++
++ #, c-format
++ msgid "E475: Invalid value for argument %s"
++ msgstr "E475: Ugyldig værdi for argumentet %s"
++
++ #, c-format
++ msgid "E475: Invalid value for argument %s: %s"
++ msgstr "E475: Ugyldig værdi for argumentet %s: %s"
++
++ #, c-format
++ msgid "E15: Invalid expression: %s"
++ msgstr "E15: Ugyldigt udtryk: %s"
++
++ msgid "E16: Invalid range"
++ msgstr "E16: Ugyldigt område"
++
++ msgid "E476: Invalid command"
++ msgstr "E476: Ugyldig kommando"
++
++ #, c-format
++ msgid "E17: \"%s\" is a directory"
++ msgstr "E17: \"%s\" er en mappe"
++
++ #, c-format
++ msgid "E364: Library call failed for \"%s()\""
++ msgstr "E364: Kald af bibliotek mislykkedes for \"%s()\""
++
++ msgid "E667: Fsync failed"
++ msgstr "E667: Fsync mislykkedes"
++
++ #, c-format
++ msgid "E448: Could not load library function %s"
++ msgstr "E448: Kunne ikke indlæse biblioteksfunktionen %s"
++
++ msgid "E19: Mark has invalid line number"
++ msgstr "E19: Mærke har ugyldigt linjenummer"
++
++ msgid "E20: Mark not set"
++ msgstr "E20: Mærke ikke sat"
++
++ msgid "E21: Cannot make changes, 'modifiable' is off"
++ msgstr "E21: Kan ikke foretage ændringer, 'modifiable' er slået fra"
++
++ msgid "E22: Scripts nested too deep"
++ msgstr "E22: Scripts indlejret for dybt"
++
++ msgid "E23: No alternate file"
++ msgstr "E23: Ingen alternate-fil"
++
++ msgid "E24: No such abbreviation"
++ msgstr "E24: Ingen sådan forkortelse"
++
++ msgid "E477: No ! allowed"
++ msgstr "E477: Ingen ! tilladt"
++
++ msgid "E25: GUI cannot be used: Not enabled at compile time"
++ msgstr "E25: GUI kan ikke bruges: Ikke aktiveret ved kompileringstid"
++
++ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
++ msgstr "E26: Hebraisk kan ikke bruges: Ikke aktiveret ved kompileringstid\n"
++
++ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
++ msgstr ""
++ "E27: Persisk kan ikke bruges: Ikke aktiveret ved kompileringstid\n"
++ "\n"
++
++ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
++ msgstr "E800: Arabisk kan ikke bruges: Ikke aktiveret ved kompileringstid\n"
++
++ #, c-format
++ msgid "E28: No such highlight group name: %s"
++ msgstr "E28: Intet sådan fremhævningsgruppenavn: %s"
++
++ msgid "E29: No inserted text yet"
++ msgstr "E29: Endnu ingen indsat tekst"
++
++ msgid "E30: No previous command line"
++ msgstr "E30: Ingen tidligere kommandolinje"
++
++ msgid "E31: No such mapping"
++ msgstr "E31: Ingen sådan mapping"
++
++ msgid "E479: No match"
++ msgstr "E479: Intet match"
++
++ #, c-format
++ msgid "E480: No match: %s"
++ msgstr "E480: Intet match: %s"
++
++ msgid "E32: No file name"
++ msgstr "E32: Intet filnavn"
++
++ msgid "E33: No previous substitute regular expression"
++ msgstr "E33: Ingen tidligere erstatnings regulært udtryk"
++
++ msgid "E34: No previous command"
++ msgstr "E34: Ingen tidligere kommando"
++
++ msgid "E35: No previous regular expression"
++ msgstr "E35: Ingen tidligere regulære udtryk"
++
++ msgid "E481: No range allowed"
++ msgstr "E481: Intet område tilladt"
++
++ msgid "E36: Not enough room"
++ msgstr "E36: Ikke plads nok"
++
++ #, c-format
++ msgid "E247: no registered server named \"%s\""
++ msgstr "E247: ingen registreret server ved navn \"%s\""
++
++ #, c-format
++ msgid "E482: Can't create file %s"
++ msgstr "E482: Kan ikke oprette filen %s"
++
++ msgid "E483: Can't get temp file name"
++ msgstr "E483: Kan ikke hente midlertidigt filnavn"
++
++ #, c-format
++ msgid "E484: Can't open file %s"
++ msgstr "E484: Kan ikke åbne filen %s"
++
++ #, c-format
++ msgid "E485: Can't read file %s"
++ msgstr "E485: Kan ikke læse filen %s"
++
++ msgid "E38: Null argument"
++ msgstr "E38: Null-argument"
++
++ msgid "E39: Number expected"
++ msgstr "E39: Nummer ventet"
++
++ #, c-format
++ msgid "E40: Can't open errorfile %s"
++ msgstr "E40: Kan ikke åbne fejlfilen %s"
++
++ msgid "E233: cannot open display"
++ msgstr "E233: kan ikke åbne display"
++
++ msgid "E41: Out of memory!"
++ msgstr "E41: Ikke mere ledig hukommelse!"
++
++ msgid "Pattern not found"
++ msgstr "Mønster ikke fundet"
++
++ #, c-format
++ msgid "E486: Pattern not found: %s"
++ msgstr "E486: Mønster ikke fundet: %s"
++
++ msgid "E487: Argument must be positive"
++ msgstr "E487: Argument skal være positivt"
++
++ msgid "E459: Cannot go back to previous directory"
++ msgstr "E459: Kan ikke gå tilbage til tidligere mappe"
++
++ msgid "E42: No Errors"
++ msgstr "E42: Ingen fejl"
++
++ msgid "E776: No location list"
++ msgstr "E776: Ingen placeringsliste"
++
++ msgid "E43: Damaged match string"
++ msgstr "E43: Beskadiget matchstreng"
++
++ msgid "E44: Corrupted regexp program"
++ msgstr "E44: Korrupt regexp-program"
++
++ msgid "E45: 'readonly' option is set (add ! to override)"
++ msgstr "E45: 'readonly'-tilvalget er sat (tilføj ! for at tilsidesætte)"
++
++ #, c-format
++ msgid "E46: Cannot change read-only variable \"%s\""
++ msgstr "E46: Kan ikke ændre skrivebeskyttet variabel \"%s\""
++
++ #, c-format
++ msgid "E794: Cannot set variable in the sandbox: \"%s\""
++ msgstr "E794: Kan ikke sætte variabel i sandboksen: \"%s\""
++
++ msgid "E713: Cannot use empty key for Dictionary"
++ msgstr "E713: Kan ikke bruge tom nøgle til ordbog"
++
++ msgid "E715: Dictionary required"
++ msgstr "E715: Ordbog kræves"
++
++ #, c-format
++ msgid "E684: list index out of range: %ld"
++ msgstr "E684: listeindeks udenfor område: %ld"
++
++ #, c-format
++ msgid "E118: Too many arguments for function: %s"
++ msgstr "E118: For mange argumenter til funktion: %s"
++
++ #, c-format
++ msgid "E716: Key not present in Dictionary: %s"
++ msgstr "E716: Nøgle findes ikke i ordbog: %s"
++
++ msgid "E714: List required"
++ msgstr "E714: Liste kræves"
++
++ #, c-format
++ msgid "E712: Argument of %s must be a List or Dictionary"
++ msgstr "E712: Argument af %s skal være en liste eller ordbog"
++
++ msgid "E47: Error while reading errorfile"
++ msgstr "E47: Fejl ved læsning af fejlfil"
++
++ msgid "E48: Not allowed in sandbox"
++ msgstr "E48: Ikke tilladt i sandboks"
++
++ msgid "E523: Not allowed here"
++ msgstr "E523: Ikke tilladt her"
++
++ msgid "E359: Screen mode setting not supported"
++ msgstr "E359: Skærmtilstand-indstilling understøttes ikke"
++
++ msgid "E49: Invalid scroll size"
++ msgstr "E49: Ugyldig rullestørrelse"
++
++ msgid "E91: 'shell' option is empty"
++ msgstr "E91: 'shell'-tilvalget er tomt"
++
++ msgid "E255: Couldn't read in sign data!"
++ msgstr "E255: Kunne ikke læse i sign-data!"
++
++ msgid "E72: Close error on swap file"
++ msgstr "E72: Fejl ved lukning af swap-fil"
++
++ msgid "E73: tag stack empty"
++ msgstr "E73: tag-stak tom"
++
++ msgid "E74: Command too complex"
++ msgstr "E74: Kommando for kompleks"
++
++ msgid "E75: Name too long"
++ msgstr "E75: Navn for langt"
++
++ msgid "E76: Too many ["
++ msgstr "E76: For mange ["
++
++ msgid "E77: Too many file names"
++ msgstr "E77: For mange filnavne"
++
++ msgid "E488: Trailing characters"
++ msgstr "E488: Efterstillede tegn"
++
++ msgid "E78: Unknown mark"
++ msgstr "E78: Ukendt mærke"
++
++ msgid "E79: Cannot expand wildcards"
++ msgstr "E79: Kan ikke udvide jokertegn"
++
++ msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
++ msgstr "E591: 'winheight' må ikke være mindre end 'winminheight'"
++
++ msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
++ msgstr "E592: 'winwidth' må ikke være mindre end 'winminwidth'"
++
++ msgid "E80: Error while writing"
++ msgstr "E80: Fejl ved skrivning"
++
++ msgid "E939: Positive count required"
++ msgstr "E939: Positiv tælling kræves"
++
++ msgid "E81: Using <SID> not in a script context"
++ msgstr "E81: Bruger <SID> ikke i et script kontekst"
++
++ msgid "E449: Invalid expression received"
++ msgstr "E449: Ugyldigt udtryk modtaget"
++
++ msgid "E463: Region is guarded, cannot modify"
++ msgstr "E463: Regionen er beskyttet, kan ikke ændre"
++
++ msgid "E744: NetBeans does not allow changes in read-only files"
++ msgstr "E744: NetBeans tillader ikke ændringer i skrivebeskyttede filer"
++
++ msgid "E363: pattern uses more memory than 'maxmempattern'"
++ msgstr "E363: mønster bruger mere hukommelse end 'maxmempattern'"
++
++ msgid "E749: empty buffer"
++ msgstr "E749: tom buffer"
++
++ #, c-format
++ msgid "E86: Buffer %ld does not exist"
++ msgstr "E86: Bufferen %ld findes ikke"
++
++ msgid "E682: Invalid search pattern or delimiter"
++ msgstr "E682: Ugyldigt søgemønster eller -afgrænser"
++
++ msgid "E139: File is loaded in another buffer"
++ msgstr "E139: Filen er indlæst i en anden buffer"
++
++ #, c-format
++ msgid "E764: Option '%s' is not set"
++ msgstr "E764: Tilvalget '%s' er ikke sat"
++
++ msgid "E850: Invalid register name"
++ msgstr "E850: Ugyldigt registernavn"
++
++ #, c-format
++ msgid "E919: Directory not found in '%s': \"%s\""
++ msgstr "E919: Mappe ikke fundet i '%s': \"%s\""
++
++ msgid "E952: Autocommand caused recursive behavior"
++ msgstr "E952: Autokommando forårsagede rekursiv opførsel"
++
++ msgid "search hit TOP, continuing at BOTTOM"
++ msgstr "søgning ramte ØVERST, fortsætter ved NEDERST"
++
++ msgid "search hit BOTTOM, continuing at TOP"
++ msgstr "søgning ramte NEDERST, fortsætter ved ØVERST"
++
++ #, c-format
++ msgid "Need encryption key for \"%s\""
++ msgstr "Behøver krypteringsnøgle til \"%s\""
++
++ msgid "empty keys are not allowed"
++ msgstr "tomme nøgler er ikke tilladt"
++
++ msgid "dictionary is locked"
++ msgstr "ordbog er låst"
++
++ msgid "list is locked"
++ msgstr "liste er låst"
++
++ #, c-format
++ msgid "failed to add key '%s' to dictionary"
++ msgstr "kunne ikke tilføje nøglen '%s' til ordbog"
++
++ #, c-format
++ msgid "index must be int or slice, not %s"
++ msgstr "indeks skal være heltal eller slice, ikke %s"
++
++ #, c-format
++ msgid "expected str() or unicode() instance, but got %s"
++ msgstr "ventede str()- eller unicode()-instans, men fik %s"
++
++ #, c-format
++ msgid "expected bytes() or str() instance, but got %s"
++ msgstr "ventede bytes()- eller str()-instans, min fik %s"
++
++ #, c-format
++ msgid ""
++ "expected int(), long() or something supporting coercing to long(), but got %s"
++ msgstr ""
++ "ventede int(), long() eller noget som understøtter coercing til long(), min "
++ "fik %s"
++
++ #, c-format
++ msgid "expected int() or something supporting coercing to int(), but got %s"
++ msgstr ""
++ "ventede int() eller noget som understøtter coercing til int(), min fik %s"
++
++ msgid "value is too large to fit into C int type"
++ msgstr "værdi er for stor til at passe i C-heltalstype"
++
++ msgid "value is too small to fit into C int type"
++ msgstr "værdi er for lille til at passe i C-heltalstype"
++
++ msgid "number must be greater than zero"
++ msgstr "nummer skal være større end nul"
++
++ msgid "number must be greater or equal to zero"
++ msgstr "nummer skal være større end eller lig med nul"
++
++ msgid "can't delete OutputObject attributes"
++ msgstr "kan ikke slette OutputObject-attributter"
++
++ #, c-format
++ msgid "invalid attribute: %s"
++ msgstr "ugyldig attribut: %s"
++
++ msgid "E264: Python: Error initialising I/O objects"
++ msgstr "E264: Python: Fejl ved initialisering af I/O-objekter"
++
++ msgid "failed to change directory"
++ msgstr "kunne ikke skifte mappe"
++
++ #, c-format
++ msgid "expected 3-tuple as imp.find_module() result, but got %s"
++ msgstr "ventede 3-tuple som imp.find_module() resultat, men fik %s"
++
++ #, c-format
++ msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
++ msgstr ""
++ "ventede 3-tuple som imp.find_module() resultat, men fik tuple af størrelse %"
++ "d"
++
++ msgid "internal error: imp.find_module returned tuple with NULL"
++ msgstr "intern fejl: imp.find_module returnerede tuple med NULL"
++
++ msgid "cannot delete vim.Dictionary attributes"
++ msgstr "kan ikke slette vim.Dictionary-attributter"
++
++ msgid "cannot modify fixed dictionary"
++ msgstr "kan ikke ændre fast ordbog"
++
++ #, c-format
++ msgid "cannot set attribute %s"
++ msgstr "kan ikke sætte attributten %s"
++
++ msgid "hashtab changed during iteration"
++ msgstr "hashtab ændret under gennemløb"
++
++ #, c-format
++ msgid "expected sequence element of size 2, but got sequence of size %d"
++ msgstr "ventede sekvenselement af størrelse 2, men fik sekvens af størrelse %d"
++
++ msgid "list constructor does not accept keyword arguments"
++ msgstr "liste-constructor accepterer ikke nøgleord-argumenter"
++
++ msgid "list index out of range"
++ msgstr "listeindeks udenfor område"
++
++ #, c-format
++ msgid "internal error: failed to get vim list item %d"
++ msgstr "intern fejl: kunne ikke hente vim-listepunkt %d"
++
++ msgid "slice step cannot be zero"
++ msgstr "slice-trin må ikke være nul"
++
++ #, c-format
++ msgid "attempt to assign sequence of size greater than %d to extended slice"
++ msgstr "forsøg på at tildele sekvens som er større end %d til udvidet slice"
++
++ #, c-format
++ msgid "internal error: no vim list item %d"
++ msgstr "intern fejl: intet vim-listepunkt %d"
++
++ msgid "internal error: not enough list items"
++ msgstr "intern fejl: ikke nok listepunkter"
++
++ msgid "internal error: failed to add item to list"
++ msgstr "intern fejl: kunne ikke tilføje punkt til liste"
++
++ #, c-format
++ msgid "attempt to assign sequence of size %d to extended slice of size %d"
++ msgstr ""
++ "forsøg på at tildele sekvens af størrelsen %d til udvidet slice af "
++ "størrelsen %d"
++
++ msgid "failed to add item to list"
++ msgstr "kunne ikke tilføje punkt til liste"
++
++ msgid "cannot delete vim.List attributes"
++ msgstr "kan ikke slette vim.List-attributter"
++
++ msgid "cannot modify fixed list"
++ msgstr "kan ikke ændre fast liste"
++
++ #, c-format
++ msgid "unnamed function %s does not exist"
++ msgstr "unavngivet funktion %s findes ikke"
++
++ #, c-format
++ msgid "function %s does not exist"
++ msgstr "funktionen %s findes ikke"
++
++ #, c-format
++ msgid "failed to run function %s"
++ msgstr "kunne ikke køre funktionen %s"
++
++ msgid "unable to get option value"
++ msgstr "kan ikke hente tilvalgsværdi"
++
++ msgid "internal error: unknown option type"
++ msgstr "intern fejl: ukendt tilvalgstype"
++
++ msgid "problem while switching windows"
++ msgstr "problem ved skift af vinduer"
++
++ #, c-format
++ msgid "unable to unset global option %s"
++ msgstr "kan ikke fjerne det globale tilvalg %s"
++
++ #, c-format
++ msgid "unable to unset option %s which does not have global value"
++ msgstr "kan ikke fjerne tilvalget %s som ikke har global værdi"
++
++ msgid "attempt to refer to deleted tab page"
++ msgstr "forsøg på at referere til slettet fanebladsside"
++
++ msgid "no such tab page"
++ msgstr "ingen sådan fanebladsside"
++
++ msgid "attempt to refer to deleted window"
++ msgstr "forsøg på at referere til slettet vindue"
++
++ msgid "readonly attribute: buffer"
++ msgstr "skrivebeskyttet attribut: buffer"
++
++ msgid "cursor position outside buffer"
++ msgstr "markørposition udenfor buffer"
++
++ msgid "no such window"
++ msgstr "intet sådan vindue"
++
++ msgid "attempt to refer to deleted buffer"
++ msgstr "forsøg på at referere til slettet buffer"
++
++ msgid "failed to rename buffer"
++ msgstr "kunne ikke omdøbe bufferen"
++
++ msgid "mark name must be a single character"
++ msgstr "mærkenavn skal være ét tegn"
++
++ #, c-format
++ msgid "expected vim.Buffer object, but got %s"
++ msgstr "ventede vim.Buffer-objekt, men fik %s"
++
++ #, c-format
++ msgid "failed to switch to buffer %d"
++ msgstr "kunne ikke skifte til bufferen %d"
++
++ #, c-format
++ msgid "expected vim.Window object, but got %s"
++ msgstr "ventede vim.Window-objekt, men fik %s"
++
++ msgid "failed to find window in the current tab page"
++ msgstr "kunne ikke finde vindue i den nuværende fanebladsside"
++
++ msgid "did not switch to the specified window"
++ msgstr "skiftede ikke til det angivne vindue"
++
++ #, c-format
++ msgid "expected vim.TabPage object, but got %s"
++ msgstr "ventede vim.TabPage-objekt, men fik %s"
++
++ msgid "did not switch to the specified tab page"
++ msgstr "skiftede ikke til den angivne fanebladsside"
++
++ msgid "failed to run the code"
++ msgstr "kunne ikke køre koden"
++
++ msgid "E858: Eval did not return a valid python object"
++ msgstr "E858: Eval returnerede ikke et gyldigt python-objekt"
++
++ msgid "E859: Failed to convert returned python object to vim value"
++ msgstr "E859: Kunne ikke konvertere returnerede python-objekt til vim-værdi"
++
++ #, c-format
++ msgid "unable to convert %s to vim dictionary"
++ msgstr "kan ikke konvertere %s til vim-ordbog"
++
++ #, c-format
++ msgid "unable to convert %s to vim list"
++ msgstr "kan ikke konvertere %s til vim-liste"
++
++ #, c-format
++ msgid "unable to convert %s to vim structure"
++ msgstr "kan ikke konvertere %s til vim-struktur"
++
++ msgid "internal error: NULL reference passed"
++ msgstr "intern fejl: NULL-reference givet"
++
++ msgid "internal error: invalid value type"
++ msgstr "intern fejl: ugyldig værditype"
++
++ msgid ""
++ "Failed to set path hook: sys.path_hooks is not a list\n"
++ "You should now do the following:\n"
++ "- append vim.path_hook to sys.path_hooks\n"
++ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
++ msgstr ""
++ "Kunne ikke sætte sti-hook: sys.path_hooks er ikke en liste\n"
++ "Du bør nu gøre følgende:\n"
++ "- tilføj vim.path_hook til slutningen af sys.path_hooks\n"
++ "- tilføj vim.VIM_SPECIAL_PATH til slutningen af sys.path\n"
++
++ msgid ""
++ "Failed to set path: sys.path is not a list\n"
++ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
++ msgstr ""
++ "Kunne ikke sætte sti: sys.path er ikke en liste\n"
++ "Du bør nu tilføje vim.VIM_SPECIAL_PATH til slutningen af sys.path"
++
++ msgid ""
++ "Vim macro files (*.vim)\t*.vim\n"
++ "All Files (*.*)\t*.*\n"
++ msgstr ""
++ "Vim-makrofiler (*.vim)\t*.vim\n"
++ "Alle filer (*.*)\t*.*\n"
++
++ msgid "All Files (*.*)\t*.*\n"
++ msgstr "Alle filer (*.*)\t*.*\n"
++
++ msgid ""
++ "All Files (*.*)\t*.*\n"
++ "C source (*.c, *.h)\t*.c;*.h\n"
++ "C++ source (*.cpp, *.hpp)\t*.cpp;*.hpp\n"
++ "VB code (*.bas, *.frm)\t*.bas;*.frm\n"
++ "Vim files (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n"
++ msgstr ""
++ "Alle filer (*.*)\t*.*\n"
++ "C-kildekode (*.c, *.h)\t*.c;*.h\n"
++ "C++-kildekode (*.cpp, *.hpp)\t*.cpp;*.hpp\n"
++ "VB-kode (*.bas, *.frm)\t*.bas;*.frm\n"
++ "Vim-filer (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n"
++
++ msgid ""
++ "Vim macro files (*.vim)\t*.vim\n"
++ "All Files (*)\t*\n"
++ msgstr ""
++ "Vim-makrofiler (*.vim)\t*.vim\n"
++ "Alle filer (*)\t*\n"
++
++ msgid "All Files (*)\t*\n"
++ msgstr "Alle filer (*)\t*\n"
++
++ msgid ""
++ "All Files (*)\t*\n"
++ "C source (*.c, *.h)\t*.c;*.h\n"
++ "C++ source (*.cpp, *.hpp)\t*.cpp;*.hpp\n"
++ "Vim files (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n"
++ msgstr ""
++ "Alle filer (*)\t*\n"
++ "C-kildekode (*.c, *.h)\t*.c;*.h\n"
++ "C++-kildekode (*.cpp, *.hpp)\t*.cpp;*.hpp\n"
++ "Vim-filer (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n"
+*** ../vim-8.1.0107/src/version.c 2018-06-24 15:14:02.224061917 +0200
+--- src/version.c 2018-06-24 15:49:32.812878767 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 108,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+100. The most exciting sporting events you noticed during summer 1996
+ was Netscape vs. Microsoft.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0109 b/data/vim/patches/8.1.0109
new file mode 100644
index 000000000..6199bf1ba
--- /dev/null
+++ b/data/vim/patches/8.1.0109
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0109
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0109
+Problem: New po makefile missing from distribution.
+Solution: Add it to the file list.
+Files: Filelist
+
+
+*** ../vim-8.1.0108/Filelist 2018-04-25 21:35:37.000000000 +0200
+--- Filelist 2018-06-24 15:54:13.943126126 +0200
+***************
+*** 907,912 ****
+--- 907,913 ----
+ src/po/check.vim \
+ src/po/cleanup.vim \
+ src/po/Makefile \
++ src/po/Make_all.mak \
+ src/po/Make_cyg.mak \
+ src/po/Make_ming.mak \
+ src/po/Make_mvc.mak \
+*** ../vim-8.1.0108/src/version.c 2018-06-24 15:52:37.083719389 +0200
+--- src/version.c 2018-06-24 15:55:43.546585056 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 109,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+101. U can read htis w/o ny porblm and cant figur eout Y its evn listd.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0110 b/data/vim/patches/8.1.0110
new file mode 100644
index 000000000..5d074f91d
--- /dev/null
+++ b/data/vim/patches/8.1.0110
@@ -0,0 +1,84 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0110
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0110
+Problem: File name not displayed with ":file" when 'F' is in 'shortmess'.
+Solution: Always display the file name when there is no argument (Christian
+ Brabandt, closes #3070)
+Files: src/ex_cmds.c, src/testdir/test_options.vim
+
+
+*** ../vim-8.1.0109/src/ex_cmds.c 2018-06-23 19:22:45.606486311 +0200
+--- src/ex_cmds.c 2018-06-24 16:53:22.557962803 +0200
+***************
+*** 3094,3104 ****
+ {
+ if (rename_buffer(eap->arg) == FAIL)
+ return;
+ }
+! /* print full file name if :cd used */
+! if (!shortmess(SHM_FILEINFO))
+ fileinfo(FALSE, FALSE, eap->forceit);
+- redraw_tabline = TRUE;
+ }
+
+ /*
+--- 3094,3105 ----
+ {
+ if (rename_buffer(eap->arg) == FAIL)
+ return;
++ redraw_tabline = TRUE;
+ }
+!
+! // print file name if no argument or 'F' is not in 'shortmess'
+! if (*eap->arg == NUL || !shortmess(SHM_FILEINFO))
+ fileinfo(FALSE, FALSE, eap->forceit);
+ }
+
+ /*
+*** ../vim-8.1.0109/src/testdir/test_options.vim 2018-05-13 17:56:20.000000000 +0200
+--- src/testdir/test_options.vim 2018-06-24 16:36:00.704103065 +0200
+***************
+*** 400,402 ****
+--- 400,416 ----
+ call assert_equal(4,&numberwidth)
+ bw!
+ endfunc
++
++ func Test_shortmess_F()
++ new
++ call assert_match('\[No Name\]', execute('file'))
++ set shortmess+=F
++ call assert_match('\[No Name\]', execute('file'))
++ call assert_match('^\s*$', execute('file foo'))
++ call assert_match('foo', execute('file'))
++ set shortmess-=F
++ call assert_match('bar', execute('file bar'))
++ call assert_match('bar', execute('file'))
++ set shortmess&
++ bwipe
++ endfunc
+*** ../vim-8.1.0109/src/version.c 2018-06-24 15:56:20.602363176 +0200
+--- src/version.c 2018-06-24 16:32:41.109320897 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 110,
+ /**/
+
+
+--
+To be rich is not the end, but only a change of worries.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0111 b/data/vim/patches/8.1.0111
new file mode 100644
index 000000000..c8efeab6b
--- /dev/null
+++ b/data/vim/patches/8.1.0111
@@ -0,0 +1,149 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0111
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0111
+Problem: .po files do not use recommended names.
+Solution: Give a warning if the recommended name is not used. Accept the
+ recommended name for conversion. (Christian Brabandt, Ken Takata)
+Files: src/po/Makefile, src/po/sjiscorr.c, src/po/check.vim
+
+
+*** ../vim-8.1.0110/src/po/Makefile 2018-06-24 15:52:37.075719437 +0200
+--- src/po/Makefile 2018-06-24 17:58:04.858324254 +0200
+***************
+*** 87,93 ****
+
+ ja.euc-jp.po: ja.po
+ iconv -f utf-8 -t euc-jp ja.po | \
+! sed -e 's/charset=utf-8/charset=euc-jp/' -e 's/# Original translations/# Generated from ja.po, DO NOT EDIT/' > ja.euc-jp.po
+
+ # Convert cs.po to create cs.cp1250.po.
+ cs.cp1250.po: cs.po
+--- 87,93 ----
+
+ ja.euc-jp.po: ja.po
+ iconv -f utf-8 -t euc-jp ja.po | \
+! sed -e 's/charset=[uU][tT][fF]-8/charset=euc-jp/' -e 's/# Original translations/# Generated from ja.po, DO NOT EDIT/' > ja.euc-jp.po
+
+ # Convert cs.po to create cs.cp1250.po.
+ cs.cp1250.po: cs.po
+***************
+*** 105,111 ****
+ pl.UTF-8.po: pl.po
+ rm -f pl.UTF-8.po
+ iconv -f iso-8859-2 -t utf-8 pl.po | \
+! sed -e 's/charset=ISO-8859-2/charset=utf-8/' -e 's/# Original translations/# Generated from pl.po, DO NOT EDIT/' > pl.UTF-8.po
+
+ # Convert sk.po to create sk.cp1250.po.
+ sk.cp1250.po: sk.po
+--- 105,111 ----
+ pl.UTF-8.po: pl.po
+ rm -f pl.UTF-8.po
+ iconv -f iso-8859-2 -t utf-8 pl.po | \
+! sed -e 's/charset=ISO-8859-2/charset=UTF-8/' -e 's/# Original translations/# Generated from pl.po, DO NOT EDIT/' > pl.UTF-8.po
+
+ # Convert sk.po to create sk.cp1250.po.
+ sk.cp1250.po: sk.po
+***************
+*** 119,125 ****
+ zh_CN.cp936.po: zh_CN.UTF-8.po
+ rm -f zh_CN.cp936.po
+ iconv -f UTF-8 -t cp936 zh_CN.UTF-8.po | \
+! sed -e 's/charset=utf-8/charset=gbk/' -e 's/# Original translations/# Generated from zh_CN.UTF-8.po, DO NOT EDIT/' > zh_CN.cp936.po
+
+ # Convert ko.UTF-8.po to create ko.po.
+ ko.po: ko.UTF-8.po
+--- 119,125 ----
+ zh_CN.cp936.po: zh_CN.UTF-8.po
+ rm -f zh_CN.cp936.po
+ iconv -f UTF-8 -t cp936 zh_CN.UTF-8.po | \
+! sed -e 's/charset=[uU][tT][fF]-8/charset=gbk/' -e 's/# Original translations/# Generated from zh_CN.UTF-8.po, DO NOT EDIT/' > zh_CN.cp936.po
+
+ # Convert ko.UTF-8.po to create ko.po.
+ ko.po: ko.UTF-8.po
+*** ../vim-8.1.0110/src/po/sjiscorr.c 2016-01-31 17:13:47.000000000 +0100
+--- src/po/sjiscorr.c 2018-06-24 17:58:04.858324254 +0200
+***************
+*** 16,22 ****
+ {
+ for (p = buffer; *p != 0; p++)
+ {
+! if (strncmp(p, "charset=utf-8", 13) == 0)
+ {
+ fputs("charset=cp932", stdout);
+ p += 12;
+--- 16,23 ----
+ {
+ for (p = buffer; *p != 0; p++)
+ {
+! if (strncmp(p, "charset=utf-8", 13) == 0
+! || strncmp(p, "charset=UTF-8", 13) == 0)
+ {
+ fputs("charset=cp932", stdout);
+ p += 12;
+*** ../vim-8.1.0110/src/po/check.vim 2018-05-08 16:05:44.000000000 +0200
+--- src/po/check.vim 2018-06-24 17:57:34.634490594 +0200
+***************
+*** 173,184 ****
+--- 173,209 ----
+ " We allow for a stray plural header, msginit adds one.
+ endif
+
++ " Check that 8bit encoding is used instead of 8-bit
++ let cte = search('^"Content-Transfer-Encoding:\s\+8-bit', 'n')
++ let ctc = search('^"Content-Type:.*;\s\+\<charset=[iI][sS][oO]_', 'n')
++ let ctu = search('^"Content-Type:.*;\s\+\<charset=utf-8', 'n')
++ if cte
++ echomsg "Content-Transfer-Encoding should be 8bit instead of 8-bit"
++ " TODO: make this an error
++ " if error == 0
++ " let error = cte
++ " endif
++ elseif ctc
++ echomsg "Content-Type charset should be 'ISO-...' instead of 'ISO_...'"
++ " TODO: make this an error
++ " if error == 0
++ " let error = ct
++ " endif
++ elseif ctu
++ echomsg "Content-Type charset should be 'UTF-8' instead of 'utf-8'"
++ " TODO: make this an error
++ " if error == 0
++ " let error = ct
++ " endif
++ endif
++
+
+ if error == 0
+ " If all was OK restore the view.
+ call winrestview(wsv)
+ echomsg "OK"
+ else
++ " Put the cursor on the line with the error.
+ exe error
+ endif
+
+*** ../vim-8.1.0110/src/version.c 2018-06-24 16:53:31.649909925 +0200
+--- src/version.c 2018-06-24 18:04:11.412305463 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 111,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+104. When people ask about the Presidential Election you ask "Which country?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0112 b/data/vim/patches/8.1.0112
new file mode 100644
index 000000000..e55f3a260
--- /dev/null
+++ b/data/vim/patches/8.1.0112
@@ -0,0 +1,139 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0112
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0112
+Problem: No error when using bad arguments with searchpair().
+Solution: Add error messages.
+Files: src/evalfunc.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0111/src/evalfunc.c 2018-06-23 19:22:45.602486336 +0200
+--- src/evalfunc.c 2018-06-24 18:42:08.826927103 +0200
+***************
+*** 10152,10158 ****
+ long lnum_stop = 0;
+ long time_limit = 0;
+
+! /* Get the three pattern arguments: start, middle, end. */
+ spat = get_tv_string_chk(&argvars[0]);
+ mpat = get_tv_string_buf_chk(&argvars[1], nbuf1);
+ epat = get_tv_string_buf_chk(&argvars[2], nbuf2);
+--- 10152,10159 ----
+ long lnum_stop = 0;
+ long time_limit = 0;
+
+! /* Get the three pattern arguments: start, middle, end. Will result in an
+! * error if not a valid argument. */
+ spat = get_tv_string_chk(&argvars[0]);
+ mpat = get_tv_string_buf_chk(&argvars[1], nbuf1);
+ epat = get_tv_string_buf_chk(&argvars[2], nbuf2);
+***************
+*** 10189,10207 ****
+--- 10190,10215 ----
+ && skip->v_type != VAR_STRING)
+ {
+ /* Type error */
++ EMSG2(_(e_invarg2), get_tv_string(&argvars[4]));
+ goto theend;
+ }
+ if (argvars[5].v_type != VAR_UNKNOWN)
+ {
+ lnum_stop = (long)get_tv_number_chk(&argvars[5], NULL);
+ if (lnum_stop < 0)
++ {
++ EMSG2(_(e_invarg2), get_tv_string(&argvars[5]));
+ goto theend;
++ }
+ #ifdef FEAT_RELTIME
+ if (argvars[6].v_type != VAR_UNKNOWN)
+ {
+ time_limit = (long)get_tv_number_chk(&argvars[6], NULL);
+ if (time_limit < 0)
++ {
++ EMSG2(_(e_invarg2), get_tv_string(&argvars[6]));
+ goto theend;
++ }
+ }
+ #endif
+ }
+*** ../vim-8.1.0111/src/testdir/test_search.vim 2018-04-30 13:22:53.000000000 +0200
+--- src/testdir/test_search.vim 2018-06-24 18:48:30.844524919 +0200
+***************
+*** 287,302 ****
+ new
+ call setline(1, ['other code here', '', '[', '" cursor here', ']'])
+ 4
+! let a=searchpair('\[','',']','bW')
+ call assert_equal(3, a)
+ set nomagic
+ 4
+! let a=searchpair('\[','',']','bW')
+ call assert_equal(3, a)
+ set magic
+ q!
+ endfunc
+
+ func Test_searchpair_skip()
+ func Zero()
+ return 0
+--- 287,312 ----
+ new
+ call setline(1, ['other code here', '', '[', '" cursor here', ']'])
+ 4
+! let a = searchpair('\[','',']','bW')
+ call assert_equal(3, a)
+ set nomagic
+ 4
+! let a = searchpair('\[','',']','bW')
+ call assert_equal(3, a)
+ set magic
+ q!
+ endfunc
+
++ func Test_searchpair_errors()
++ call assert_fails("call searchpair([0], 'middle', 'end', 'bW', 'skip', 99, 100)", 'E730: using List as a String')
++ call assert_fails("call searchpair('start', {-> 0}, 'end', 'bW', 'skip', 99, 100)", 'E729: using Funcref as a String')
++ call assert_fails("call searchpair('start', 'middle', {'one': 1}, 'bW', 'skip', 99, 100)", 'E731: using Dictionary as a String')
++ call assert_fails("call searchpair('start', 'middle', 'end', 'flags', 'skip', 99, 100)", 'E475: Invalid argument: flags')
++ call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 0, 99, 100)", 'E475: Invalid argument: 0')
++ call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', -99, 100)", 'E475: Invalid argument: -99')
++ call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', 99, -100)", 'E475: Invalid argument: -100')
++ endfunc
++
+ func Test_searchpair_skip()
+ func Zero()
+ return 0
+***************
+*** 311,318 ****
+ 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', {-> 0}))
+ 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', function('Zero')))
+ 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', function('Partial', [0])))
+- " invalid argument
+- 3 | call assert_equal(0, searchpair('{', '', '}', 'bWn', 0))
+ bw!
+ endfunc
+
+--- 321,326 ----
+*** ../vim-8.1.0111/src/version.c 2018-06-24 18:04:45.440091103 +0200
+--- src/version.c 2018-06-24 18:10:31.957980576 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 112,
+ /**/
+
+--
+Laughing helps. It's like jogging on the inside.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0113 b/data/vim/patches/8.1.0113
new file mode 100644
index 000000000..b1f9bfca7
--- /dev/null
+++ b/data/vim/patches/8.1.0113
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0113
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0113
+Problem: Compiler warning for unused variable. (Yegappan Lakshmanan)
+Solution: Add UNUSED. (Christian Brabandt)
+Files: src/screen.c
+
+
+*** ../vim-8.1.0112/src/screen.c 2018-06-23 19:22:45.614486258 +0200
+--- src/screen.c 2018-06-24 19:20:57.281940880 +0200
+***************
+*** 6874,6880 ****
+ * displayed.
+ */
+ static void
+! win_redr_status(win_T *wp, int ignore_pum)
+ {
+ int row;
+ char_u *p;
+--- 6879,6885 ----
+ * displayed.
+ */
+ static void
+! win_redr_status(win_T *wp, int ignore_pum UNUSED)
+ {
+ int row;
+ char_u *p;
+*** ../vim-8.1.0112/src/version.c 2018-06-24 19:01:55.411752372 +0200
+--- src/version.c 2018-06-24 19:22:02.657626019 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 113,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+108. While reading a magazine, you look for the Zoom icon for a better
+ look at a photograph.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0114 b/data/vim/patches/8.1.0114
new file mode 100644
index 000000000..d6f78f5ac
--- /dev/null
+++ b/data/vim/patches/8.1.0114
@@ -0,0 +1,218 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0114
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0114
+Problem: Confusing variable name.
+Solution: Rename new_ts to new_vts_array. Change zero to NULL.
+Files: src/ex_cmds.c, src/option.c
+
+
+*** ../vim-8.1.0113/src/ex_cmds.c 2018-06-24 16:53:31.649909925 +0200
+--- src/ex_cmds.c 2018-06-24 22:04:12.929793169 +0200
+***************
+*** 678,684 ****
+ char_u *new_line = (char_u *)1; /* init to non-NULL */
+ int did_undo; /* called u_save for current line */
+ #ifdef FEAT_VARTABS
+! int *new_ts = 0;
+ char_u *new_ts_str; /* string value of tab argument */
+ #else
+ int temp;
+--- 678,684 ----
+ char_u *new_line = (char_u *)1; /* init to non-NULL */
+ int did_undo; /* called u_save for current line */
+ #ifdef FEAT_VARTABS
+! int *new_vts_array = NULL;
+ char_u *new_ts_str; /* string value of tab argument */
+ #else
+ int temp;
+***************
+*** 693,708 ****
+
+ #ifdef FEAT_VARTABS
+ new_ts_str = eap->arg;
+! if (!tabstop_set(eap->arg, &new_ts))
+ return;
+ while (vim_isdigit(*(eap->arg)) || *(eap->arg) == ',')
+ ++(eap->arg);
+
+! // This ensures that either new_ts and new_ts_str are freshly allocated,
+! // or new_ts points to an existing array and new_ts_str is null.
+! if (new_ts == 0)
+ {
+! new_ts = curbuf->b_p_vts_array;
+ new_ts_str = NULL;
+ }
+ else
+--- 693,709 ----
+
+ #ifdef FEAT_VARTABS
+ new_ts_str = eap->arg;
+! if (!tabstop_set(eap->arg, &new_vts_array))
+ return;
+ while (vim_isdigit(*(eap->arg)) || *(eap->arg) == ',')
+ ++(eap->arg);
+
+! // This ensures that either new_vts_array and new_ts_str are freshly
+! // allocated, or new_vts_array points to an existing array and new_ts_str
+! // is null.
+! if (new_vts_array == NULL)
+ {
+! new_vts_array = curbuf->b_p_vts_array;
+ new_ts_str = NULL;
+ }
+ else
+***************
+*** 753,761 ****
+ int t, s;
+
+ tabstop_fromto(start_vcol, vcol,
+! tabstop_count(new_ts)? 0: curbuf->b_p_ts,
+! new_ts,
+! &t, &s);
+ num_tabs = t;
+ num_spaces = s;
+ #else
+--- 754,760 ----
+ int t, s;
+
+ tabstop_fromto(start_vcol, vcol,
+! curbuf->b_p_ts, new_vts_array, &t, &s);
+ num_tabs = t;
+ num_spaces = s;
+ #else
+***************
+*** 829,839 ****
+ // If a single value was given then it can be considered equal to
+ // either the value of 'tabstop' or the value of 'vartabstop'.
+ if (tabstop_count(curbuf->b_p_vts_array) == 0
+! && tabstop_count(new_ts) == 1
+! && curbuf->b_p_ts == tabstop_first(new_ts))
+ ; /* not changed */
+ else if (tabstop_count(curbuf->b_p_vts_array) > 0
+! && tabstop_eq(curbuf->b_p_vts_array, new_ts))
+ ; /* not changed */
+ else
+ redraw_curbuf_later(NOT_VALID);
+--- 828,838 ----
+ // If a single value was given then it can be considered equal to
+ // either the value of 'tabstop' or the value of 'vartabstop'.
+ if (tabstop_count(curbuf->b_p_vts_array) == 0
+! && tabstop_count(new_vts_array) == 1
+! && curbuf->b_p_ts == tabstop_first(new_vts_array))
+ ; /* not changed */
+ else if (tabstop_count(curbuf->b_p_vts_array) > 0
+! && tabstop_eq(curbuf->b_p_vts_array, new_vts_array))
+ ; /* not changed */
+ else
+ redraw_curbuf_later(NOT_VALID);
+***************
+*** 853,872 ****
+ // than one tabstop then update 'vartabstop'.
+ int *old_vts_ary = curbuf->b_p_vts_array;
+
+! if (tabstop_count(old_vts_ary) > 0 || tabstop_count(new_ts) > 1)
+ {
+ set_string_option_direct((char_u *)"vts", -1, new_ts_str,
+ OPT_FREE|OPT_LOCAL, 0);
+ vim_free(new_ts_str);
+! curbuf->b_p_vts_array = new_ts;
+ vim_free(old_vts_ary);
+ }
+ else
+ {
+ // 'vartabstop' wasn't in use and a single value was given to
+ // retab then update 'tabstop'.
+! curbuf->b_p_ts = tabstop_first(new_ts);
+! vim_free(new_ts);
+ }
+ }
+ #else
+--- 852,871 ----
+ // than one tabstop then update 'vartabstop'.
+ int *old_vts_ary = curbuf->b_p_vts_array;
+
+! if (tabstop_count(old_vts_ary) > 0 || tabstop_count(new_vts_array) > 1)
+ {
+ set_string_option_direct((char_u *)"vts", -1, new_ts_str,
+ OPT_FREE|OPT_LOCAL, 0);
+ vim_free(new_ts_str);
+! curbuf->b_p_vts_array = new_vts_array;
+ vim_free(old_vts_ary);
+ }
+ else
+ {
+ // 'vartabstop' wasn't in use and a single value was given to
+ // retab then update 'tabstop'.
+! curbuf->b_p_ts = tabstop_first(new_vts_array);
+! vim_free(new_vts_array);
+ }
+ }
+ #else
+*** ../vim-8.1.0113/src/option.c 2018-06-24 15:14:02.224061917 +0200
+--- src/option.c 2018-06-24 22:03:45.413912296 +0200
+***************
+*** 12844,12850 ****
+ int t;
+ int excess;
+
+! if (vts == 0 || vts[0] == 0)
+ return (col / ts) * ts;
+
+ tabcount = vts[0];
+--- 12844,12850 ----
+ int t;
+ int excess;
+
+! if (vts == NULL || vts[0] == 0)
+ return (col / ts) * ts;
+
+ tabcount = vts[0];
+***************
+*** 12878,12887 ****
+ int tabcount;
+ int t;
+
+! if (vts == 0 || vts[0] == 0)
+ {
+ int tabs = 0;
+ int initspc = ts - (start_col % ts);
+ if (spaces >= initspc)
+ {
+ spaces -= initspc;
+--- 12878,12888 ----
+ int tabcount;
+ int t;
+
+! if (vts == NULL || vts[0] == 0)
+ {
+ int tabs = 0;
+ int initspc = ts - (start_col % ts);
++
+ if (spaces >= initspc)
+ {
+ spaces -= initspc;
+*** ../vim-8.1.0113/src/version.c 2018-06-24 19:23:59.989047923 +0200
+--- src/version.c 2018-06-24 22:05:27.937462580 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 114,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+109. You actually read -- and enjoy -- lists like this.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0115 b/data/vim/patches/8.1.0115
new file mode 100644
index 000000000..046669e75
--- /dev/null
+++ b/data/vim/patches/8.1.0115
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0115
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0115
+Problem: The matchparen plugin may throw an error.
+Solution: Change the skip argument from zero to "0".
+Files: runtime/plugin/matchparen.vim
+
+
+*** ../vim-8.1.0114/runtime/plugin/matchparen.vim 2017-09-30 14:51:57.000000000 +0200
+--- runtime/plugin/matchparen.vim 2018-06-25 00:01:59.103022741 +0200
+***************
+*** 114,120 ****
+ " within those syntax types (i.e., not skip). Otherwise, the cursor is
+ " outside of the syntax types and s_skip should keep its value so we skip any
+ " matching pair inside the syntax types.
+! execute 'if' s_skip '| let s_skip = 0 | endif'
+
+ " Limit the search to lines visible in the window.
+ let stoplinebottom = line('w$')
+--- 114,120 ----
+ " within those syntax types (i.e., not skip). Otherwise, the cursor is
+ " outside of the syntax types and s_skip should keep its value so we skip any
+ " matching pair inside the syntax types.
+! execute 'if' s_skip '| let s_skip = "0" | endif'
+
+ " Limit the search to lines visible in the window.
+ let stoplinebottom = line('w$')
+*** ../vim-8.1.0114/src/version.c 2018-06-24 23:53:25.153526495 +0200
+--- src/version.c 2018-06-25 00:03:27.870567571 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 115,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+110. You actually volunteer to become your employer's webmaster.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0116 b/data/vim/patches/8.1.0116
new file mode 100644
index 000000000..c1fdabebf
--- /dev/null
+++ b/data/vim/patches/8.1.0116
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0116
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0116
+Problem: Display problem with 'vartabstop' and 'linebreak'. (Chauca
+ Fuentes)
+Solution: Call tabstop_padding(). (Christian Brabandt, closes #3076)
+Files: src/screen.c, src/testdir/test_vartabs.vim
+
+
+*** ../vim-8.1.0115/src/screen.c 2018-06-24 19:23:59.989047923 +0200
+--- src/screen.c 2018-06-25 21:21:42.002042548 +0200
+***************
+*** 4753,4760 ****
+--- 4753,4765 ----
+ n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
+ NULL) - 1;
+ if (c == TAB && n_extra + col > wp->w_width)
++ #ifdef FEAT_VARTABS
++ n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts,
++ wp->w_buffer->b_p_vts_array) - 1;
++ #else
+ n_extra = (int)wp->w_buffer->b_p_ts
+ - vcol % (int)wp->w_buffer->b_p_ts - 1;
++ #endif
+
+ # ifdef FEAT_MBYTE
+ c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' ';
+*** ../vim-8.1.0115/src/testdir/test_vartabs.vim 2018-06-23 19:22:45.618486231 +0200
+--- src/testdir/test_vartabs.vim 2018-06-25 21:22:50.237671137 +0200
+***************
+*** 4,9 ****
+--- 4,14 ----
+ finish
+ endif
+
++ source view_util.vim
++ function! s:compare_lines(expect, actual)
++ call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
++ endfunction
++
+ func! Test_vartabs()
+ new
+ %d
+***************
+*** 255,257 ****
+--- 260,282 ----
+
+ bwipeout!
+ endfunc
++
++ func! Test_vartabs_linebreak()
++ if winwidth(0) < 80
++ return
++ endif
++ new
++ 70vnew
++ %d
++ setl linebreak vartabstop=10,15,20,40
++ call setline(1, "\tx\tx\tx\tx")
++
++ let lines = ScreenLines([1, 2], winwidth(0))
++ let expect = [' x x x ',
++ \ ' x ']
++ call s:compare_lines(expect, lines)
++
++ " cleanup
++ bw!
++ bw!
++ endfunc
+*** ../vim-8.1.0115/src/version.c 2018-06-25 00:05:55.901799630 +0200
+--- src/version.c 2018-06-25 21:24:22.389089360 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 116,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+115. You are late picking up your kid from school and try to explain
+ to the teacher you were stuck in Web traffic.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0117 b/data/vim/patches/8.1.0117
new file mode 100644
index 000000000..f102405a0
--- /dev/null
+++ b/data/vim/patches/8.1.0117
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0117
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0117
+Problem: URL in install program still points to SourceForge.
+Solution: Change it to www.vim.org. (closes #3100)
+Files: src/dosinst.c
+
+
+*** ../vim-8.1.0116/src/dosinst.c 2018-05-11 19:52:42.000000000 +0200
+--- src/dosinst.c 2018-06-26 23:09:12.956537417 +0200
+***************
+*** 1878,1884 ****
+ add_pathsep(shell_folder_path);
+ strcat(shell_folder_path, "Vim Online.url");
+ if (!WritePrivateProfileString("InternetShortcut", "URL",
+! "http://vim.sf.net/", shell_folder_path))
+ {
+ printf("Creating the Vim online URL failed\n");
+ return;
+--- 1878,1884 ----
+ add_pathsep(shell_folder_path);
+ strcat(shell_folder_path, "Vim Online.url");
+ if (!WritePrivateProfileString("InternetShortcut", "URL",
+! "https://www.vim.org/", shell_folder_path))
+ {
+ printf("Creating the Vim online URL failed\n");
+ return;
+*** ../vim-8.1.0116/src/version.c 2018-06-25 21:24:47.288934354 +0200
+--- src/version.c 2018-06-26 23:09:53.416289165 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 117,
+ /**/
+
+--
+An actual excerpt from a classified section of a city newspaper:
+"Illiterate? Write today for free help!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0118 b/data/vim/patches/8.1.0118
new file mode 100644
index 000000000..afcdf937e
--- /dev/null
+++ b/data/vim/patches/8.1.0118
@@ -0,0 +1,136 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0118
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0118
+Problem: Duplicate error message for put command.
+Solution: Check return value of u_save(). (Jason Franklin)
+Files: src/ops.c, src/testdir/test_messages.vim src/testdir/test_put.vim
+
+
+*** ../vim-8.1.0117/src/ops.c 2018-06-23 19:22:45.610486284 +0200
+--- src/ops.c 2018-06-27 20:35:21.160021864 +0200
+***************
+*** 3551,3559 ****
+ return;
+ }
+
+! /* Autocommands may be executed when saving lines for undo, which may make
+! * y_array invalid. Start undo now to avoid that. */
+! u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1);
+
+ if (insert_string != NULL)
+ {
+--- 3551,3560 ----
+ return;
+ }
+
+! /* Autocommands may be executed when saving lines for undo. This might
+! * make "y_array" invalid, so we start undo now to avoid that. */
+! if (u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1) == FAIL)
+! goto end;
+
+ if (insert_string != NULL)
+ {
+*** ../vim-8.1.0117/src/testdir/test_messages.vim 2018-05-19 14:43:26.779509715 +0200
+--- src/testdir/test_messages.vim 2018-06-27 20:35:21.160021864 +0200
+***************
+*** 39,45 ****
+ endtry
+ endfunction
+
+! " Patch 7.4.1696 defined the "clearmode()" command for clearing the mode
+ " indicator (e.g., "-- INSERT --") when ":stopinsert" is invoked. Message
+ " output could then be disturbed when 'cmdheight' was greater than one.
+ " This test ensures that the bugfix for this issue remains in place.
+--- 39,45 ----
+ endtry
+ endfunction
+
+! " Patch 7.4.1696 defined the "clearmode()" function for clearing the mode
+ " indicator (e.g., "-- INSERT --") when ":stopinsert" is invoked. Message
+ " output could then be disturbed when 'cmdheight' was greater than one.
+ " This test ensures that the bugfix for this issue remains in place.
+*** ../vim-8.1.0117/src/testdir/test_put.vim 2018-05-23 21:53:48.352478970 +0200
+--- src/testdir/test_put.vim 2018-06-27 20:48:28.788199160 +0200
+***************
+*** 1,3 ****
+--- 1,4 ----
++ " Tests for put commands, e.g. ":put", "p", "gp", "P", "gP", etc.
+
+ func Test_put_block()
+ if !has('multi_byte')
+***************
+*** 58,60 ****
+--- 59,106 ----
+ call assert_equal(['A1','A2','A3','4A','5A','6A'], getline(1,'$'))
+ bw!
+ endfunc
++
++ func Test_put_fails_when_nomodifiable()
++ new
++ set nomodifiable
++
++ normal! yy
++ call assert_fails(':put', 'E21')
++ call assert_fails(':put!', 'E21')
++ call assert_fails(':normal! p', 'E21')
++ call assert_fails(':normal! gp', 'E21')
++ call assert_fails(':normal! P', 'E21')
++ call assert_fails(':normal! gP', 'E21')
++
++ if has('mouse')
++ set mouse=n
++ call assert_fails('execute "normal! \<MiddleMouse>"', 'E21')
++ set mouse&
++ endif
++
++ bwipeout!
++ endfunc
++
++ " A bug was discovered where the Normal mode put commands (e.g., "p") would
++ " output duplicate error messages when invoked in a non-modifiable buffer.
++ func Test_put_p_errmsg_nodup()
++ new
++ set nomodifiable
++
++ normal! yy
++
++ func Capture_p_error()
++ redir => s:p_err
++ normal! p
++ redir END
++ endfunc
++
++ silent! call Capture_p_error()
++
++ " Error message output within a function should be three lines (the function
++ " name, the line number, and the error message).
++ call assert_equal(3, count(s:p_err, "\n"))
++
++ delfunction Capture_p_error
++ bwipeout!
++ endfunc
+*** ../vim-8.1.0117/src/version.c 2018-06-26 23:18:40.593167147 +0200
+--- src/version.c 2018-06-27 20:36:32.259661095 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 118,
+ /**/
+
+--
+Would you care for a drink? I mean, if it were, like,
+disabled and you had to look after it?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0119 b/data/vim/patches/8.1.0119
new file mode 100644
index 000000000..902f0bf7d
--- /dev/null
+++ b/data/vim/patches/8.1.0119
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0119
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0119
+Problem: Failing test goes unnoticed because testdir/messages is not
+ written.
+Solution: Set 'nomodifiable' only local to the buffer.
+Files: src/testdir/test_put.vim
+
+
+*** ../vim-8.1.0118/src/testdir/test_put.vim 2018-06-27 20:49:40.571862365 +0200
+--- src/testdir/test_put.vim 2018-06-27 22:21:37.122498815 +0200
+***************
+*** 62,68 ****
+
+ func Test_put_fails_when_nomodifiable()
+ new
+! set nomodifiable
+
+ normal! yy
+ call assert_fails(':put', 'E21')
+--- 62,68 ----
+
+ func Test_put_fails_when_nomodifiable()
+ new
+! setlocal nomodifiable
+
+ normal! yy
+ call assert_fails(':put', 'E21')
+***************
+*** 85,91 ****
+ " output duplicate error messages when invoked in a non-modifiable buffer.
+ func Test_put_p_errmsg_nodup()
+ new
+! set nomodifiable
+
+ normal! yy
+
+--- 85,91 ----
+ " output duplicate error messages when invoked in a non-modifiable buffer.
+ func Test_put_p_errmsg_nodup()
+ new
+! setlocal nomodifiable
+
+ normal! yy
+
+*** ../vim-8.1.0118/src/version.c 2018-06-27 20:49:40.571862365 +0200
+--- src/version.c 2018-06-27 23:11:22.293187958 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 119,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+125. You begin to wonder how often it REALLY is necessary to get up
+ and shower or bathe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0120 b/data/vim/patches/8.1.0120
new file mode 100644
index 000000000..d16fae336
--- /dev/null
+++ b/data/vim/patches/8.1.0120
@@ -0,0 +1,217 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0120
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0120
+Problem: Buffer 'modified' set even when :sort has no changes.
+Solution: Only set 'modified' when lines are moved. (Jason Franklin)
+Files: src/ex_cmds.c, src/testdir/test_sort.vim
+
+
+*** ../vim-8.1.0119/src/ex_cmds.c 2018-06-24 23:53:25.149526513 +0200
+--- src/ex_cmds.c 2018-06-28 11:22:44.383108832 +0200
+***************
+*** 398,403 ****
+--- 398,404 ----
+ colnr_T end_col;
+ int sort_what = 0;
+ int format_found = 0;
++ int change_occurred = FALSE; // Buffer contents changed.
+
+ /* Sorting one line is really quick! */
+ if (count <= 1)
+***************
+*** 616,627 ****
+ lnum = eap->line2;
+ for (i = 0; i < count; ++i)
+ {
+! s = ml_get(nrs[eap->forceit ? count - i - 1 : i].lnum);
+ if (!unique || i == 0
+ || (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0)
+ {
+! /* Copy the line into a buffer, it may become invalid in
+! * ml_append(). And it's needed for "unique". */
+ STRCPY(sortbuf1, s);
+ if (ml_append(lnum++, sortbuf1, (colnr_T)0, FALSE) == FAIL)
+ break;
+--- 617,635 ----
+ lnum = eap->line2;
+ for (i = 0; i < count; ++i)
+ {
+! linenr_T get_lnum = nrs[eap->forceit ? count - i - 1 : i].lnum;
+!
+! // If the original line number of the line being placed is not the same
+! // as "lnum" (accounting for offset), we know that the buffer changed.
+! if (get_lnum + ((linenr_T)count - 1) != lnum)
+! change_occurred = TRUE;
+!
+! s = ml_get(get_lnum);
+ if (!unique || i == 0
+ || (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0)
+ {
+! // Copy the line into a buffer, it may become invalid in
+! // ml_append(). And it's needed for "unique".
+ STRCPY(sortbuf1, s);
+ if (ml_append(lnum++, sortbuf1, (colnr_T)0, FALSE) == FAIL)
+ break;
+***************
+*** 644,650 ****
+ mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted);
+ else if (deleted < 0)
+ mark_adjust(eap->line2, MAXLNUM, -deleted, 0L);
+! changed_lines(eap->line1, 0, eap->line2 + 1, -deleted);
+
+ curwin->w_cursor.lnum = eap->line1;
+ beginline(BL_WHITE | BL_FIX);
+--- 652,660 ----
+ mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted);
+ else if (deleted < 0)
+ mark_adjust(eap->line2, MAXLNUM, -deleted, 0L);
+!
+! if (change_occurred || deleted != 0)
+! changed_lines(eap->line1, 0, eap->line2 + 1, -deleted);
+
+ curwin->w_cursor.lnum = eap->line1;
+ beginline(BL_WHITE | BL_FIX);
+*** ../vim-8.1.0119/src/testdir/test_sort.vim 2017-09-23 18:58:18.000000000 +0200
+--- src/testdir/test_sort.vim 2018-06-28 11:21:15.071564844 +0200
+***************
+*** 1,13 ****
+! " Test sort()
+
+! :func Compare1(a, b) abort
+ call sort(range(3), 'Compare2')
+ return a:a - a:b
+! :endfunc
+
+! :func Compare2(a, b) abort
+ return a:a - a:b
+! :endfunc
+
+ func Test_sort_strings()
+ " numbers compared as strings
+--- 1,13 ----
+! " Tests for the "sort()" function and for the ":sort" command.
+
+! func Compare1(a, b) abort
+ call sort(range(3), 'Compare2')
+ return a:a - a:b
+! endfunc
+
+! func Compare2(a, b) abort
+ return a:a - a:b
+! endfunc
+
+ func Test_sort_strings()
+ " numbers compared as strings
+***************
+*** 45,51 ****
+ call assert_fails('call sort([3.3, 1, "2"], 3)', "E474")
+ endfunc
+
+! " Tests for the :sort command
+ func Test_sort_cmd()
+ let tests = [
+ \ {
+--- 45,51 ----
+ call assert_fails('call sort([3.3, 1, "2"], 3)', "E474")
+ endfunc
+
+! " Tests for the ":sort" command.
+ func Test_sort_cmd()
+ let tests = [
+ \ {
+***************
+*** 1167,1181 ****
+ \ '1.234',
+ \ '123.456'
+ \ ]
+! \ }
+ \ ]
+
+ for t in tests
+ enew!
+ call append(0, t.input)
+ $delete _
+! exe t.cmd
+ call assert_equal(t.expected, getline(1, '$'), t.name)
+ endfor
+
+ call assert_fails('sort no', 'E474')
+--- 1167,1220 ----
+ \ '1.234',
+ \ '123.456'
+ \ ]
+! \ },
+! \ {
+! \ 'name' : 'alphabetical, sorted input',
+! \ 'cmd' : 'sort',
+! \ 'input' : [
+! \ 'a',
+! \ 'b',
+! \ 'c',
+! \ ],
+! \ 'expected' : [
+! \ 'a',
+! \ 'b',
+! \ 'c',
+! \ ]
+! \ },
+! \ {
+! \ 'name' : 'alphabetical, sorted input, unique at end',
+! \ 'cmd' : 'sort u',
+! \ 'input' : [
+! \ 'aa',
+! \ 'bb',
+! \ 'cc',
+! \ 'cc',
+! \ ],
+! \ 'expected' : [
+! \ 'aa',
+! \ 'bb',
+! \ 'cc',
+! \ ]
+! \ },
+ \ ]
+
+ for t in tests
+ enew!
+ call append(0, t.input)
+ $delete _
+! setlocal nomodified
+! execute t.cmd
+!
+ call assert_equal(t.expected, getline(1, '$'), t.name)
++
++ " Previously, the ":sort" command would set 'modified' even if the buffer
++ " contents did not change. Here, we check that this problem is fixed.
++ if t.input == t.expected
++ call assert_false(&modified, t.name . ': &mod is not correct')
++ else
++ call assert_true(&modified, t.name . ': &mod is not correct')
++ endif
+ endfor
+
+ call assert_fails('sort no', 'E474')
+*** ../vim-8.1.0119/src/version.c 2018-06-27 23:12:30.608811033 +0200
+--- src/version.c 2018-06-28 11:09:56.954947638 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 120,
+ /**/
+
+--
+You cannot have a baby in one month by getting nine women pregnant.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0121 b/data/vim/patches/8.1.0121
new file mode 100644
index 000000000..ee442239c
--- /dev/null
+++ b/data/vim/patches/8.1.0121
@@ -0,0 +1,175 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0121
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0121
+Problem: Crash when using ballooneval related to 'vartabstop'.
+Solution: Initialize balloonEval->vts to NULL. (Markus Braun)
+Files: src/ex_cmds2.c, src/gui_beval.c, src/gui_w32.c, src/gui.c
+
+
+*** ../vim-8.1.0120/src/ex_cmds2.c 2018-05-12 15:36:03.000000000 +0200
+--- src/ex_cmds2.c 2018-06-28 11:54:26.812645846 +0200
+***************
+*** 1419,1425 ****
+ bevalexpr_due_set = FALSE;
+ if (balloonEval == NULL)
+ {
+! balloonEval = (BalloonEval *)alloc(sizeof(BalloonEval));
+ balloonEvalForTerm = TRUE;
+ }
+ if (balloonEval != NULL)
+--- 1419,1425 ----
+ bevalexpr_due_set = FALSE;
+ if (balloonEval == NULL)
+ {
+! balloonEval = (BalloonEval *)alloc_clear(sizeof(BalloonEval));
+ balloonEvalForTerm = TRUE;
+ }
+ if (balloonEval != NULL)
+*** ../vim-8.1.0120/src/gui_beval.c 2018-06-23 19:22:45.606486311 +0200
+--- src/gui_beval.c 2018-06-28 11:58:57.003085639 +0200
+***************
+*** 111,138 ****
+ return NULL;
+ }
+
+! beval = (BalloonEval *)alloc(sizeof(BalloonEval));
+ if (beval != NULL)
+ {
+ #ifdef FEAT_GUI_GTK
+ beval->target = GTK_WIDGET(target);
+- beval->balloonShell = NULL;
+- beval->timerID = 0;
+ #else
+ beval->target = (Widget)target;
+- beval->balloonShell = NULL;
+- beval->timerID = (XtIntervalId)NULL;
+ beval->appContext = XtWidgetToApplicationContext((Widget)target);
+ #endif
+ beval->showState = ShS_NEUTRAL;
+- beval->x = 0;
+- beval->y = 0;
+ beval->msg = mesg;
+ beval->msgCB = mesgCB;
+ beval->clientData = clientData;
+- #ifdef FEAT_VARTABS
+- beval->vts = NULL;
+- #endif
+
+ /*
+ * Set up event handler which will keep its eyes on the pointer,
+--- 111,129 ----
+ return NULL;
+ }
+
+! beval = (BalloonEval *)alloc_clear(sizeof(BalloonEval));
+ if (beval != NULL)
+ {
+ #ifdef FEAT_GUI_GTK
+ beval->target = GTK_WIDGET(target);
+ #else
+ beval->target = (Widget)target;
+ beval->appContext = XtWidgetToApplicationContext((Widget)target);
+ #endif
+ beval->showState = ShS_NEUTRAL;
+ beval->msg = mesg;
+ beval->msgCB = mesgCB;
+ beval->clientData = clientData;
+
+ /*
+ * Set up event handler which will keep its eyes on the pointer,
+*** ../vim-8.1.0120/src/gui_w32.c 2018-06-23 19:22:45.606486311 +0200
+--- src/gui_w32.c 2018-06-28 11:59:35.478867007 +0200
+***************
+*** 8922,8949 ****
+ return NULL;
+ }
+
+! beval = (BalloonEval *)alloc(sizeof(BalloonEval));
+ if (beval != NULL)
+ {
+ beval->target = s_textArea;
+- beval->balloon = NULL;
+
+ beval->showState = ShS_NEUTRAL;
+- beval->x = 0;
+- beval->y = 0;
+ beval->msg = mesg;
+ beval->msgCB = mesgCB;
+ beval->clientData = clientData;
+- #ifdef FEAT_VARTABS
+- beval->vts = NULL;
+- #endif
+
+ InitCommonControls();
+ cur_beval = beval;
+
+ if (p_beval)
+ gui_mch_enable_beval_area(beval);
+-
+ }
+ return beval;
+ }
+--- 8922,8942 ----
+ return NULL;
+ }
+
+! beval = (BalloonEval *)alloc_clear(sizeof(BalloonEval));
+ if (beval != NULL)
+ {
+ beval->target = s_textArea;
+
+ beval->showState = ShS_NEUTRAL;
+ beval->msg = mesg;
+ beval->msgCB = mesgCB;
+ beval->clientData = clientData;
+
+ InitCommonControls();
+ cur_beval = beval;
+
+ if (p_beval)
+ gui_mch_enable_beval_area(beval);
+ }
+ return beval;
+ }
+*** ../vim-8.1.0120/src/gui.c 2018-05-13 17:03:53.000000000 +0200
+--- src/gui.c 2018-06-28 12:01:22.930259972 +0200
+***************
+*** 745,751 ****
+--- 745,756 ----
+ /* Always create the Balloon Evaluation area, but disable it when
+ * 'ballooneval' is off. */
+ if (balloonEval != NULL)
++ {
++ # ifdef FEAT_VARTABS
++ vim_free(balloonEval->vts);
++ # endif
+ vim_free(balloonEval);
++ }
+ balloonEvalForTerm = FALSE;
+ # ifdef FEAT_GUI_GTK
+ balloonEval = gui_mch_create_beval_area(gui.drawarea, NULL,
+*** ../vim-8.1.0120/src/version.c 2018-06-28 11:28:04.797455530 +0200
+--- src/version.c 2018-06-28 12:02:15.657963770 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 121,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+129. You cancel your newspaper subscription.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0122 b/data/vim/patches/8.1.0122
new file mode 100644
index 000000000..62b00d4bc
--- /dev/null
+++ b/data/vim/patches/8.1.0122
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0122
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0122
+Problem: Translators don't always understand the maintainer message.
+Solution: Add a comment that ends up in the generated po file. (Christian
+ Brabandt, closes #3037)
+Files: src/message.c
+
+
+*** ../vim-8.1.0121/src/message.c 2018-06-23 19:22:45.610486284 +0200
+--- src/message.c 2018-06-28 14:52:34.909193468 +0200
+***************
+*** 982,988 ****
+--- 982,992 ----
+ {
+ s = mch_getenv((char_u *)"LANG");
+ if (s != NULL && *s != NUL)
++ // The next comment is extracted by xgettext and put in po file for
++ // translators to read.
+ msg_attr((char_u *)
++ // Translator: Please replace the name and email address
++ // with the appropriate text for your translation.
+ _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"),
+ HL_ATTR(HLF_T));
+ }
+*** ../vim-8.1.0121/src/version.c 2018-06-28 12:05:07.089006904 +0200
+--- src/version.c 2018-06-28 14:53:46.820830021 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 122,
+ /**/
+
+--
+In a world without fences, who needs Gates and Windows?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0123 b/data/vim/patches/8.1.0123
new file mode 100644
index 000000000..e9494588f
--- /dev/null
+++ b/data/vim/patches/8.1.0123
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0123
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0123
+Problem: MS-Windows: colors are wrong after setting 'notgc'.
+Solution: Only call control_console_color_rgb() for the win32 terminal.
+ (Nobuhiro Takasaki, closes #3107)
+Files: src/option.c
+
+
+*** ../vim-8.1.0122/src/option.c 2018-06-24 23:53:25.153526495 +0200
+--- src/option.c 2018-06-28 15:26:10.110799983 +0200
+***************
+*** 8819,8828 ****
+ # endif
+ highlight_gui_started();
+ # ifdef FEAT_VTP
+- control_console_color_rgb();
+ /* reset t_Co */
+ if (is_term_win32())
+ set_termname(T_NAME);
+ # endif
+ }
+ #endif
+--- 8819,8831 ----
+ # endif
+ highlight_gui_started();
+ # ifdef FEAT_VTP
+ /* reset t_Co */
+ if (is_term_win32())
++ {
++ control_console_color_rgb();
+ set_termname(T_NAME);
++ init_highlight(TRUE, FALSE);
++ }
+ # endif
+ }
+ #endif
+*** ../vim-8.1.0122/src/version.c 2018-06-28 14:54:38.764565527 +0200
+--- src/version.c 2018-06-28 15:29:00.809904697 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 123,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+132. You come back and check this list every half-hour.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0124 b/data/vim/patches/8.1.0124
new file mode 100644
index 000000000..48bcf4f6d
--- /dev/null
+++ b/data/vim/patches/8.1.0124
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0124
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0124
+Problem: has('vcon') returns true even for non-win32 terminal.
+Solution: Check the terminal type. (Nobuhiro Takasaki, closes #3106)
+Files: src/evalfunc.c
+
+
+*** ../vim-8.1.0123/src/evalfunc.c 2018-06-24 19:01:55.411752372 +0200
+--- src/evalfunc.c 2018-06-28 15:48:43.199224854 +0200
+***************
+*** 6609,6615 ****
+ #endif
+ #ifdef FEAT_VTP
+ else if (STRICMP(name, "vcon") == 0)
+! n = has_vtp_working();
+ #endif
+ #ifdef FEAT_NETBEANS_INTG
+ else if (STRICMP(name, "netbeans_enabled") == 0)
+--- 6609,6615 ----
+ #endif
+ #ifdef FEAT_VTP
+ else if (STRICMP(name, "vcon") == 0)
+! n = is_term_win32() && has_vtp_working();
+ #endif
+ #ifdef FEAT_NETBEANS_INTG
+ else if (STRICMP(name, "netbeans_enabled") == 0)
+*** ../vim-8.1.0123/src/version.c 2018-06-28 15:29:48.085656078 +0200
+--- src/version.c 2018-06-28 15:49:29.070921349 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 124,
+ /**/
+
+--
+There are three kinds of persons: Those who can count and those who can't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0125 b/data/vim/patches/8.1.0125
new file mode 100644
index 000000000..697ddffba
--- /dev/null
+++ b/data/vim/patches/8.1.0125
@@ -0,0 +1,197 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0125
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0125
+Problem: Virtual edit replace with multi-byte fails at end of line. (Lukas
+ Werling)
+Solution: use ins_char() to add the character. (Christian Brabandt,
+ closes #3114) Rename PCHAR() to PBYTE() to avoid mistakes like
+ this.
+Files: src/ops.c, src/testdir/test_virtualedit.vim, src/macros.h
+
+
+*** ../vim-8.1.0124/src/ops.c 2018-06-27 20:49:40.567862384 +0200
+--- src/ops.c 2018-06-28 19:20:39.671555865 +0200
+***************
+*** 2146,2151 ****
+--- 2146,2170 ----
+ #endif
+
+ #if defined(FEAT_VISUALEXTRA) || defined(PROTO)
++
++ # ifdef FEAT_MBYTE
++ /*
++ * Replace the character under the cursor with "c".
++ * This takes care of multi-byte characters.
++ */
++ static void
++ replace_character(int c)
++ {
++ int n = State;
++
++ State = REPLACE;
++ ins_char(c);
++ State = n;
++ /* Backup to the replaced character. */
++ dec_cursor();
++ }
++
++ # endif
+ /*
+ * Replace a whole area with one character.
+ */
+***************
+*** 2331,2342 ****
+ * with a multi-byte and the other way around. */
+ if (curwin->w_cursor.lnum == oap->end.lnum)
+ oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
+! n = State;
+! State = REPLACE;
+! ins_char(c);
+! State = n;
+! /* Backup to the replaced character. */
+! dec_cursor();
+ }
+ else
+ #endif
+--- 2350,2356 ----
+ * with a multi-byte and the other way around. */
+ if (curwin->w_cursor.lnum == oap->end.lnum)
+ oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
+! replace_character(c);
+ }
+ else
+ #endif
+***************
+*** 2358,2364 ****
+ getvpos(&oap->end, end_vcol);
+ }
+ #endif
+! PCHAR(curwin->w_cursor, c);
+ }
+ }
+ #ifdef FEAT_VIRTUALEDIT
+--- 2372,2378 ----
+ getvpos(&oap->end, end_vcol);
+ }
+ #endif
+! PBYTE(curwin->w_cursor, c);
+ }
+ }
+ #ifdef FEAT_VIRTUALEDIT
+***************
+*** 2377,2385 ****
+ curwin->w_cursor.col -= (virtcols + 1);
+ for (; virtcols >= 0; virtcols--)
+ {
+! PCHAR(curwin->w_cursor, c);
+! if (inc(&curwin->w_cursor) == -1)
+! break;
+ }
+ }
+ #endif
+--- 2391,2404 ----
+ curwin->w_cursor.col -= (virtcols + 1);
+ for (; virtcols >= 0; virtcols--)
+ {
+! #ifdef FEAT_MBYTE
+! if ((*mb_char2len)(c) > 1)
+! replace_character(c);
+! else
+! #endif
+! PBYTE(curwin->w_cursor, c);
+! if (inc(&curwin->w_cursor) == -1)
+! break;
+ }
+ }
+ #endif
+***************
+*** 2619,2625 ****
+ }
+ else
+ #endif
+! PCHAR(*pos, nc);
+ return TRUE;
+ }
+ return FALSE;
+--- 2638,2644 ----
+ }
+ else
+ #endif
+! PBYTE(*pos, nc);
+ return TRUE;
+ }
+ return FALSE;
+*** ../vim-8.1.0124/src/testdir/test_virtualedit.vim 2018-04-25 21:58:46.000000000 +0200
+--- src/testdir/test_virtualedit.vim 2018-06-28 19:12:57.486074037 +0200
+***************
+*** 42,47 ****
+--- 42,63 ----
+ set virtualedit=
+ endfunc
+
++ func Test_replace_end_of_line()
++ new
++ set virtualedit=all
++ call setline(1, range(20))
++ exe "normal! gg2jv10lr-"
++ call assert_equal(["1", "-----------", "3"], getline(2,4))
++ if has('multi_byte')
++ call setline(1, range(20))
++ exe "normal! gg2jv10lr\<c-k>hh"
++ call assert_equal(["1", "───────────", "3"], getline(2,4))
++ endif
++
++ bwipe!
++ set virtualedit=
++ endfunc
++
+ func Test_edit_CTRL_G()
+ new
+ set virtualedit=insert
+*** ../vim-8.1.0124/src/macros.h 2018-04-10 18:37:19.000000000 +0200
+--- src/macros.h 2018-06-28 19:15:50.801135759 +0200
+***************
+*** 14,22 ****
+ */
+
+ /*
+! * PCHAR(lp, c) - put character 'c' at position 'lp'
+ */
+! #define PCHAR(lp, c) (*(ml_get_buf(curbuf, (lp).lnum, TRUE) + (lp).col) = (c))
+
+ /*
+ * Position comparisons
+--- 14,22 ----
+ */
+
+ /*
+! * PBYTE(lp, c) - put byte 'c' at position 'lp'
+ */
+! #define PBYTE(lp, c) (*(ml_get_buf(curbuf, (lp).lnum, TRUE) + (lp).col) = (c))
+
+ /*
+ * Position comparisons
+*** ../vim-8.1.0124/src/version.c 2018-06-28 15:50:23.178568297 +0200
+--- src/version.c 2018-06-28 19:11:53.922415636 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 125,
+ /**/
+
+--
+The coffee just wasn't strong enough to defend itself -- Tom Waits
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0126 b/data/vim/patches/8.1.0126
new file mode 100644
index 000000000..a179307be
--- /dev/null
+++ b/data/vim/patches/8.1.0126
@@ -0,0 +1,213 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0126
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0126
+Problem: Various problems with 'vartabstop'.
+Solution: Fix memory leak. Fix crash. Add a few more tests. (Christian
+ Brabandt, closes #3076)
+Files: src/ex_cmds.c, src/option.c, src/screen.c,
+ src/testdir/test_vartabs.vim
+
+
+*** ../vim-8.1.0125/src/ex_cmds.c 2018-06-28 11:28:04.793455550 +0200
+--- src/ex_cmds.c 2018-06-28 20:37:11.354721386 +0200
+***************
+*** 866,872 ****
+ {
+ set_string_option_direct((char_u *)"vts", -1, new_ts_str,
+ OPT_FREE|OPT_LOCAL, 0);
+- vim_free(new_ts_str);
+ curbuf->b_p_vts_array = new_vts_array;
+ vim_free(old_vts_ary);
+ }
+--- 866,871 ----
+***************
+*** 877,882 ****
+--- 876,882 ----
+ curbuf->b_p_ts = tabstop_first(new_vts_array);
+ vim_free(new_vts_array);
+ }
++ vim_free(new_ts_str);
+ }
+ #else
+ curbuf->b_p_ts = new_ts;
+*** ../vim-8.1.0125/src/option.c 2018-06-28 15:29:48.081656098 +0200
+--- src/option.c 2018-06-28 20:40:51.173370370 +0200
+***************
+*** 12870,12876 ****
+ tabstop_fromto(
+ colnr_T start_col,
+ colnr_T end_col,
+! int ts,
+ int *vts,
+ int *ntabs,
+ int *nspcs)
+--- 12870,12876 ----
+ tabstop_fromto(
+ colnr_T start_col,
+ colnr_T end_col,
+! int ts_arg,
+ int *vts,
+ int *ntabs,
+ int *nspcs)
+***************
+*** 12880,12891 ****
+ int padding = 0;
+ int tabcount;
+ int t;
+
+ if (vts == NULL || vts[0] == 0)
+ {
+ int tabs = 0;
+! int initspc = ts - (start_col % ts);
+
+ if (spaces >= initspc)
+ {
+ spaces -= initspc;
+--- 12880,12893 ----
+ int padding = 0;
+ int tabcount;
+ int t;
++ int ts = ts_arg == 0 ? curbuf->b_p_ts : ts_arg;
+
+ if (vts == NULL || vts[0] == 0)
+ {
+ int tabs = 0;
+! int initspc = 0;
+
++ initspc = ts - (start_col % ts);
+ if (spaces >= initspc)
+ {
+ spaces -= initspc;
+*** ../vim-8.1.0125/src/screen.c 2018-06-25 21:24:47.284934379 +0200
+--- src/screen.c 2018-06-28 20:38:50.538108113 +0200
+***************
+*** 4753,4765 ****
+ n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
+ NULL) - 1;
+ if (c == TAB && n_extra + col > wp->w_width)
+! #ifdef FEAT_VARTABS
+ n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts,
+! wp->w_buffer->b_p_vts_array) - 1;
+! #else
+ n_extra = (int)wp->w_buffer->b_p_ts
+ - vcol % (int)wp->w_buffer->b_p_ts - 1;
+! #endif
+
+ # ifdef FEAT_MBYTE
+ c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' ';
+--- 4753,4765 ----
+ n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
+ NULL) - 1;
+ if (c == TAB && n_extra + col > wp->w_width)
+! # ifdef FEAT_VARTABS
+ n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts,
+! wp->w_buffer->b_p_vts_array) - 1;
+! # else
+ n_extra = (int)wp->w_buffer->b_p_ts
+ - vcol % (int)wp->w_buffer->b_p_ts - 1;
+! # endif
+
+ # ifdef FEAT_MBYTE
+ c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' ';
+***************
+*** 4902,4907 ****
+--- 4902,4912 ----
+ p_extra_free = p;
+ for (i = 0; i < tab_len; i++)
+ {
++ if (*p == NUL)
++ {
++ tab_len = i;
++ break;
++ }
+ #ifdef FEAT_MBYTE
+ mb_char2bytes(lcs_tab2, p);
+ p += mb_char2len(lcs_tab2);
+*** ../vim-8.1.0125/src/testdir/test_vartabs.vim 2018-06-25 21:24:47.284934379 +0200
+--- src/testdir/test_vartabs.vim 2018-06-28 20:42:19.772833210 +0200
+***************
+*** 262,282 ****
+ endfunc
+
+ func! Test_vartabs_linebreak()
+! if winwidth(0) < 80
+ return
+ endif
+ new
+! 70vnew
+ %d
+! setl linebreak vartabstop=10,15,20,40
+ call setline(1, "\tx\tx\tx\tx")
+
+! let lines = ScreenLines([1, 2], winwidth(0))
+! let expect = [' x x x ',
+! \ ' x ']
+ call s:compare_lines(expect, lines)
+
+ " cleanup
+ bw!
+ bw!
+ endfunc
+--- 262,298 ----
+ endfunc
+
+ func! Test_vartabs_linebreak()
+! if winwidth(0) < 40
+ return
+ endif
+ new
+! 40vnew
+ %d
+! setl linebreak vartabstop=10,20,30,40
+ call setline(1, "\tx\tx\tx\tx")
+
+! let expect = [' x ',
+! \ 'x x ',
+! \ 'x ']
+! let lines = ScreenLines([1, 3], winwidth(0))
+! call s:compare_lines(expect, lines)
+! setl list listchars=tab:>-
+! let expect = ['>---------x>------------------ ',
+! \ 'x>------------------x>------------------',
+! \ 'x ']
+! let lines = ScreenLines([1, 3], winwidth(0))
+! call s:compare_lines(expect, lines)
+! setl linebreak vartabstop=40
+! let expect = ['>---------------------------------------',
+! \ 'x>--------------------------------------',
+! \ 'x>--------------------------------------',
+! \ 'x>--------------------------------------',
+! \ 'x ']
+! let lines = ScreenLines([1, 5], winwidth(0))
+ call s:compare_lines(expect, lines)
+
+ " cleanup
+ bw!
+ bw!
++ set nolist listchars&vim
+ endfunc
+*** ../vim-8.1.0125/src/version.c 2018-06-28 19:26:24.321655175 +0200
+--- src/version.c 2018-06-28 20:36:19.043047749 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 126,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+138. You develop a liking for cold coffee.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0127 b/data/vim/patches/8.1.0127
new file mode 100644
index 000000000..48599b5df
--- /dev/null
+++ b/data/vim/patches/8.1.0127
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0127
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0127
+Problem: Build failure when disabling the session feature. (Pawel Slowik)
+Solution: Adjust #ifdef for vim_chdirfile().
+Files: src/misc2.c
+
+
+*** ../vim-8.1.0126/src/misc2.c 2018-04-21 23:24:12.000000000 +0200
+--- src/misc2.c 2018-06-29 20:25:56.182566403 +0200
+***************
+*** 3381,3388 ****
+ && pathcmp((char *)ffname, (char *)f2, (int)(t1 - ffname)) == 0);
+ }
+
+! #if defined(FEAT_SESSION) || defined(MSWIN) || defined(FEAT_GUI_MAC) \
+! || defined(FEAT_GUI_GTK) \
+ || defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \
+ || defined(PROTO)
+ /*
+--- 3381,3388 ----
+ && pathcmp((char *)ffname, (char *)f2, (int)(t1 - ffname)) == 0);
+ }
+
+! #if defined(FEAT_SESSION) || defined(FEAT_AUTOCHDIR) \
+! || defined(MSWIN) || defined(FEAT_GUI_MAC) || defined(FEAT_GUI_GTK) \
+ || defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \
+ || defined(PROTO)
+ /*
+*** ../vim-8.1.0126/src/version.c 2018-06-28 22:22:56.233315600 +0200
+--- src/version.c 2018-06-29 20:28:20.233705119 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 127,
+ /**/
+
+--
+I wish there was a knob on the TV to turn up the intelligence.
+There's a knob called "brightness", but it doesn't seem to work.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0128 b/data/vim/patches/8.1.0128
new file mode 100644
index 000000000..5b9907bda
--- /dev/null
+++ b/data/vim/patches/8.1.0128
@@ -0,0 +1,487 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0128
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0128
+Problem: Building with MinGW does not work out-of-the-box.
+Solution: Add instructions for MSYS2. Set default WINVER. Add batch files
+ to set $PATH for MSYS2.
+Files: src/Make_cyg_ming.mak, src/INSTALLpc.txt, src/msys32.bat,
+ src/msys64.bat, Filelist
+
+
+*** ../vim-8.1.0127/src/Make_cyg_ming.mak 2018-06-19 18:58:04.006489842 +0200
+--- src/Make_cyg_ming.mak 2018-06-30 15:56:42.425768825 +0200
+***************
+*** 75,83 ****
+ # Set to yes to enable OLE support.
+ OLE=no
+
+! # Set the default $(WINVER) to make it work with WinXP.
+ ifndef WINVER
+! WINVER = 0x0501
+ endif
+
+ # Set to yes to enable Cscope support.
+--- 75,84 ----
+ # Set to yes to enable OLE support.
+ OLE=no
+
+! # Set the default $(WINVER). Use 0x0501 to make it work with WinXP.
+ ifndef WINVER
+! # WINVER = 0x0501
+! WINVER = 0x0600
+ endif
+
+ # Set to yes to enable Cscope support.
+*** ../vim-8.1.0127/src/INSTALLpc.txt 2017-12-14 13:07:27.000000000 +0100
+--- src/INSTALLpc.txt 2018-06-30 16:08:36.949674031 +0200
+***************
+*** 22,44 ****
+
+ Contents:
+ 1. Microsoft Visual C++
+! 2. Using MinGW
+! 3. Cygwin
+! 4. Borland
+! 5. Cross compiling for Win32 from a Linux machine
+! 6. Building with Python support
+! 7. Building with Python3 support
+! 8. Building with Racket or MzScheme support
+! 9. Building with Lua support
+! 10. Building with Perl support
+! 11. Building with Ruby support
+! 12. Building with Tcl support
+! 13. Building with Terminal support
+! 14. Building with DirectX (DirectWrite) support
+! 15. Windows 3.1
+! 16. MS-DOS
+
+! 17. Installing after building from sources
+
+
+ The currently recommended way (that means it has been verified to work) is
+--- 22,45 ----
+
+ Contents:
+ 1. Microsoft Visual C++
+! 2. Using MSYS2 with MinGW
+! 3. Using MinGW
+! 4. Cygwin
+! 5. Borland
+! 6. Cross compiling for Win32 from a Linux machine
+! 7. Building with Python support
+! 8. Building with Python3 support
+! 9. Building with Racket or MzScheme support
+! 10. Building with Lua support
+! 11. Building with Perl support
+! 12. Building with Ruby support
+! 13. Building with Tcl support
+! 14. Building with Terminal support
+! 15. Building with DirectX (DirectWrite) support
+! 16. Windows 3.1
+! 17. MS-DOS
+
+! 18. Installing after building from sources
+
+
+ The currently recommended way (that means it has been verified to work) is
+***************
+*** 261,268 ****
+ http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/default.aspx
+
+
+
+! 2. MinGW
+ ========
+
+ (written by Ron Aaron: <ronaharon@yahoo.com>)
+--- 262,348 ----
+ http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/default.aspx
+
+
++ 2. MSYS2 with MinGW
++ ===================
+
+! 2.1. Setup the basic msys2 environment
+!
+! Go to the official page of MSYS2: https://www.msys2.org
+! Download an installer:
+!
+! * msys2-x86_64-YYYYMMDD.exe for 64-bit Windows
+! (Even if you want to build 32-bit Vim)
+! * msys2-i686-YYYYMMDD.exe for 32-bit Windows
+!
+! Execute the installer and follow the instructions to update basic packages.
+! At the end keep the checkbox checked to run msys2 now. If needed, you can
+! open the window from the start menu, MSYS2 64 bit / MSYS2 MSYS
+!
+! Execute:
+! $ pacman -Syu
+!
+! And restart MSYS2 window (select "MSYS2 MSYS" icon from the Start Menu).
+! Then execute:
+! $ pacman -Su
+!
+! If pacman complains that `catgets` and `libcatgets` conflict with another
+! package, select `y` to remove them.
+!
+!
+! 2.2. Install additional packages for building Vim
+!
+! The following package groups are required for building Vim:
+!
+! * base-devel
+! * mingw-w64-i686-toolchain (for building 32-bit Vim)
+! * mingw-w64-x86_64-toolchain (for building 64-bit Vim)
+!
+! Use the following command to install them:
+!
+! $ pacman -S base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
+!
+! Or you can use the `pacboy` command to avoid long package names:
+!
+! $ pacboy -S base-devel: toolchain:m
+!
+! (See `pacboy help` for the help.)
+!
+!
+! 2.3. Keep the build environment up-to-date
+!
+! After you have installed the build environment, you may want to keep it
+! up-to-date (E.g. always use the latest GCC).
+! In that case, you just need to execute the command:
+! $ pacman -Syu
+!
+!
+! # Build Vim
+!
+! Select one of the following icon from the Start Menu:
+!
+! * MSYS2 MinGW 32-bit (To build 32-bit versions of Vim)
+! * MSYS2 MinGW 64-bit (To build 64-bit versions of Vim)
+!
+! Go to the source directory of Vim, then execute the make command. E.g.:
+!
+! make -f Make_ming.mak
+! make -f Make_ming.mak GUI=no
+! make -f Make_ming.mak GUI=no DEBUG=yes
+!
+! NOTE: you can't execute the vim.exe in the MSYS console, open a normal Windows
+! console for that. You need to set $PATH to be able to build there, e.g.:
+!
+! set PATH=c:\msys64\mingw32\bin;c:\msys64\usr\bin;%PATH%
+!
+! This command is in msys32.bat. Or or the 64 bit compiler use msys64.bat:
+!
+! set PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;%PATH%
+!
+! If you have msys64 in another location you will need to adjust the paths for
+! that.
+!
+!
+! 3. MinGW
+ ========
+
+ (written by Ron Aaron: <ronaharon@yahoo.com>)
+***************
+*** 344,350 ****
+ You need to uncomment lines in Make_ming.mak to have NLS defined.
+
+
+! 3. Cygwin
+ =========
+
+ Use Make_cyg.mak with Cygwin's GCC. See
+--- 424,430 ----
+ You need to uncomment lines in Make_ming.mak to have NLS defined.
+
+
+! 4. Cygwin
+ =========
+
+ Use Make_cyg.mak with Cygwin's GCC. See
+***************
+*** 356,369 ****
+ with the other makefiles).
+
+
+! 4. Borland
+ ===========
+
+ Use Make_bc5.mak with Borland C++ 5.x. See
+ http://users.skynet.be/antoine.mechelynck/vim/compile.htm
+
+
+! 5. Cross compiling for Win32 from a Linux machine
+ =================================================
+
+ [Update of 1) needs to be verified]
+--- 436,449 ----
+ with the other makefiles).
+
+
+! 5. Borland
+ ===========
+
+ Use Make_bc5.mak with Borland C++ 5.x. See
+ http://users.skynet.be/antoine.mechelynck/vim/compile.htm
+
+
+! 6. Cross compiling for Win32 from a Linux machine
+ =================================================
+
+ [Update of 1) needs to be verified]
+***************
+*** 383,389 ****
+ Now you have created the Windows binary from your Linux box! Have fun...
+
+
+! 6. Building with Python support
+ ===============================
+
+ For building with MSVC 2008 the "Windows Installer" from www.python.org
+--- 463,469 ----
+ Now you have created the Windows binary from your Linux box! Have fun...
+
+
+! 7. Building with Python support
+ ===============================
+
+ For building with MSVC 2008 the "Windows Installer" from www.python.org
+***************
+*** 435,441 ****
+ You will end up with a Python-enabled, Win32 version. Enjoy!
+
+
+! 7. Building with Python3 support
+ ================================
+
+ For building with MSVC 2008 the "Windows Installer" from www.python.org
+--- 515,521 ----
+ You will end up with a Python-enabled, Win32 version. Enjoy!
+
+
+! 8. Building with Python3 support
+ ================================
+
+ For building with MSVC 2008 the "Windows Installer" from www.python.org
+***************
+*** 466,472 ****
+ (This is for 64-bit builds. For 32-bit builds, replace mingw64 with mingw32.)
+
+
+! 8. Building with Racket or MzScheme support
+ ========================================
+
+ 1) Building with Racket support (newest)
+--- 546,552 ----
+ (This is for 64-bit builds. For 32-bit builds, replace mingw64 with mingw32.)
+
+
+! 9. Building with Racket or MzScheme support
+ ========================================
+
+ 1) Building with Racket support (newest)
+***************
+*** 556,562 ****
+
+
+
+! 9. Building with Lua support
+ ============================
+
+ Vim with Lua support can be built with either MSVC or MinGW (or maybe Cygwin).
+--- 636,642 ----
+
+
+
+! 10. Building with Lua support
+ ============================
+
+ Vim with Lua support can be built with either MSVC or MinGW (or maybe Cygwin).
+***************
+*** 611,617 ****
+ LUA=/cygdrive/c/projects/lua53 DYNAMIC_LUA=yes LUA_VER=53
+
+
+! 10. Building with Perl support
+ ==============================
+
+ Vim with Perl support can be built with either MSVC or MinGW (or Cygwin).
+--- 691,697 ----
+ LUA=/cygdrive/c/projects/lua53 DYNAMIC_LUA=yes LUA_VER=53
+
+
+! 11. Building with Perl support
+ ==============================
+
+ Vim with Perl support can be built with either MSVC or MinGW (or Cygwin).
+***************
+*** 637,643 ****
+ PERL=C:/Perl DYNAMIC_PERL=yes PERL_VER=522
+
+
+! 11. Building with Ruby support
+ ==============================
+
+ Vim with Ruby support can be built with either MSVC or MinGW (or Cygwin).
+--- 717,723 ----
+ PERL=C:/Perl DYNAMIC_PERL=yes PERL_VER=522
+
+
+! 12. Building with Ruby support
+ ==============================
+
+ Vim with Ruby support can be built with either MSVC or MinGW (or Cygwin).
+***************
+*** 745,751 ****
+
+
+
+! 12. Building with Tcl support
+ =============================
+
+ Vim with Tcl support can be built with either MSVC or MinGW (or Cygwin).
+--- 825,831 ----
+
+
+
+! 13. Building with Tcl support
+ =============================
+
+ Vim with Tcl support can be built with either MSVC or MinGW (or Cygwin).
+***************
+*** 777,783 ****
+ TCL=C:/Tcl86 DYNAMIC_TCL=yes TCL_VER=86 TCL_VER_LONG=8.6
+
+
+! 13. Building with Terminal support
+ ==================================
+
+ Vim with Terminal support can be built with either MSVC, MinGW or Cygwin.
+--- 857,863 ----
+ TCL=C:/Tcl86 DYNAMIC_TCL=yes TCL_VER=86 TCL_VER_LONG=8.6
+
+
+! 14. Building with Terminal support
+ ==================================
+
+ Vim with Terminal support can be built with either MSVC, MinGW or Cygwin.
+***************
+*** 793,799 ****
+ mingw32-make -f Make_ming.mak TERMINAL=yes
+
+
+! 14. Building with DirectX (DirectWrite) support
+ ===============================================
+
+ Vim with DirectX (DirectWrite) support can be built with either MSVC or MinGW.
+--- 873,879 ----
+ mingw32-make -f Make_ming.mak TERMINAL=yes
+
+
+! 15. Building with DirectX (DirectWrite) support
+ ===============================================
+
+ Vim with DirectX (DirectWrite) support can be built with either MSVC or MinGW.
+***************
+*** 827,846 ****
+ mingw32-make -f Make_ming.mak DIRECTX=yes
+
+
+! 15. Windows 3.1x
+ ================
+
+ The Windows 3.1x support was removed in patch 7.4.1364.
+
+
+! 16. MS-DOS
+ ==========
+
+ The MS-DOS support was removed in patch 7.4.1399. Only very old Vim versions
+ work on MS-DOS because of the limited amount of memory available.
+
+
+! 17. Installing after building from sources
+ ==========================================
+
+ [provided by Michael Soyka, updated by Ken Takata]
+--- 907,926 ----
+ mingw32-make -f Make_ming.mak DIRECTX=yes
+
+
+! 16. Windows 3.1x
+ ================
+
+ The Windows 3.1x support was removed in patch 7.4.1364.
+
+
+! 17. MS-DOS
+ ==========
+
+ The MS-DOS support was removed in patch 7.4.1399. Only very old Vim versions
+ work on MS-DOS because of the limited amount of memory available.
+
+
+! 18. Installing after building from sources
+ ==========================================
+
+ [provided by Michael Soyka, updated by Ken Takata]
+*** ../vim-8.1.0127/src/msys32.bat 2018-06-30 16:24:02.228096012 +0200
+--- src/msys32.bat 2018-06-30 16:23:34.768256429 +0200
+***************
+*** 0 ****
+--- 1,6 ----
++ @echo off
++ rem To be used on MS-Windows for Msys2 with the 32 bit MinGW compiler.
++ rem Adjust the "c:\msys64" part to match your installation.
++ @echo on
++
++ set PATH=c:\msys64\mingw32\bin;c:\msys64\usr\bin;%PATH%
+*** ../vim-8.1.0127/src/msys64.bat 2018-06-30 16:24:02.236095965 +0200
+--- src/msys64.bat 2018-06-30 16:23:33.832261898 +0200
+***************
+*** 0 ****
+--- 1,6 ----
++ @echo off
++ rem To be used on MS-Windows for Msys2 with the 64 bit MinGW compiler.
++ rem Adjust the "c:\msys64" part to match your installation.
++ @echo on
++
++ set PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;%PATH%
+*** ../vim-8.1.0127/Filelist 2018-06-24 15:56:20.602363176 +0200
+--- Filelist 2018-06-30 16:15:24.499158371 +0200
+***************
+*** 412,417 ****
+--- 412,419 ----
+ src/msvc2008.bat \
+ src/msvc2010.bat \
+ src/msvc2015.bat \
++ src/msys32.bat \
++ src/msys64.bat \
+ src/dimm.idl \
+ src/dlldata.c \
+ src/dosinst.c \
+*** ../vim-8.1.0127/src/version.c 2018-06-29 20:28:27.505661796 +0200
+--- src/version.c 2018-06-30 16:24:09.380054257 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 128,
+ /**/
+
+--
+Fingers not found - Pound head on keyboard to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0129 b/data/vim/patches/8.1.0129
new file mode 100644
index 000000000..8d9c59f1c
--- /dev/null
+++ b/data/vim/patches/8.1.0129
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0129
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0129
+Problem: Still some xterm-like terminals get a stray "p" on startup.
+Solution: Consider all terminals that reply with a version smaller than 95
+ as not an xterm. (James McCoy)
+Files: src/term.c
+
+
+*** ../vim-8.1.0128/src/term.c 2018-05-23 20:30:52.738566360 +0200
+--- src/term.c 2018-06-30 17:02:55.602235946 +0200
+***************
+*** 4690,4695 ****
+--- 4690,4700 ----
+ && STRNCMP(tp + extra - 2, "0;115;0c", 8) == 0)
+ is_not_xterm = TRUE;
+
++ // Xterm first responded to this request at patch level
++ // 95, so assume anything below 95 is not xterm.
++ if (version < 95)
++ is_not_xterm = TRUE;
++
+ /* Only request the cursor style if t_SH and t_RS are
+ * set. Only supported properly by xterm since version
+ * 279 (otherwise it returns 0x18).
+*** ../vim-8.1.0128/src/version.c 2018-06-30 17:09:12.656017847 +0200
+--- src/version.c 2018-06-30 17:04:03.133837926 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 129,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+147. You finally give up smoking...because it made the monitor dirty.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0130 b/data/vim/patches/8.1.0130
new file mode 100644
index 000000000..ba2232eed
--- /dev/null
+++ b/data/vim/patches/8.1.0130
@@ -0,0 +1,169 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0130
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0130
+Problem: ":profdel func" does not work if func was called already.
+ (Dominique Pelle)
+Solution: Reset uf_profiling and add a flag to indicate initialization was
+ done.
+Files: src/structs.h, src/userfunc.c
+
+
+*** ../vim-8.1.0129/src/structs.h 2018-06-23 19:22:45.614486258 +0200
+--- src/structs.h 2018-06-30 18:12:48.678664711 +0200
+***************
+*** 1345,1350 ****
+--- 1345,1351 ----
+ garray_T uf_lines; /* function lines */
+ #ifdef FEAT_PROFILE
+ int uf_profiling; /* TRUE when func is being profiled */
++ int uf_prof_initialized;
+ /* profiling the function as a whole */
+ int uf_tm_count; /* nr of calls */
+ proftime_T uf_tm_total; /* time spent in function + children */
+*** ../vim-8.1.0129/src/userfunc.c 2018-05-22 18:31:30.001365739 +0200
+--- src/userfunc.c 2018-06-30 18:20:15.704075693 +0200
+***************
+*** 293,302 ****
+ fp->uf_scoped = NULL;
+
+ #ifdef FEAT_PROFILE
+- fp->uf_tml_count = NULL;
+- fp->uf_tml_total = NULL;
+- fp->uf_tml_self = NULL;
+- fp->uf_profiling = FALSE;
+ if (prof_def_func())
+ func_do_profile(fp);
+ #endif
+--- 293,298 ----
+***************
+*** 706,711 ****
+--- 702,708 ----
+ #ifdef FEAT_PROFILE
+ proftime_T wait_start;
+ proftime_T call_start;
++ int started_profiling = FALSE;
+ #endif
+
+ /* If depth of calling is getting too high, don't execute the function */
+***************
+*** 921,927 ****
+--- 918,927 ----
+ if (do_profiling == PROF_YES)
+ {
+ if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
++ {
++ started_profiling = TRUE;
+ func_do_profile(fp);
++ }
+ if (fp->uf_profiling
+ || (fc->caller != NULL && fc->caller->func->uf_profiling))
+ {
+***************
+*** 965,970 ****
+--- 965,973 ----
+ profile_add(&fc->caller->func->uf_tm_children, &call_start);
+ profile_add(&fc->caller->func->uf_tml_children, &call_start);
+ }
++ if (started_profiling)
++ // make a ":profdel func" stop profiling the function
++ fp->uf_profiling = FALSE;
+ }
+ #endif
+
+***************
+*** 2522,2544 ****
+ {
+ int len = fp->uf_lines.ga_len;
+
+! if (len == 0)
+! len = 1; /* avoid getting error for allocating zero bytes */
+! fp->uf_tm_count = 0;
+! profile_zero(&fp->uf_tm_self);
+! profile_zero(&fp->uf_tm_total);
+! if (fp->uf_tml_count == NULL)
+! fp->uf_tml_count = (int *)alloc_clear((unsigned) (sizeof(int) * len));
+! if (fp->uf_tml_total == NULL)
+! fp->uf_tml_total = (proftime_T *)alloc_clear((unsigned)
+! (sizeof(proftime_T) * len));
+! if (fp->uf_tml_self == NULL)
+! fp->uf_tml_self = (proftime_T *)alloc_clear((unsigned)
+! (sizeof(proftime_T) * len));
+! fp->uf_tml_idx = -1;
+! if (fp->uf_tml_count == NULL || fp->uf_tml_total == NULL
+! || fp->uf_tml_self == NULL)
+! return; /* out of memory */
+
+ fp->uf_profiling = TRUE;
+ }
+--- 2525,2552 ----
+ {
+ int len = fp->uf_lines.ga_len;
+
+! if (!fp->uf_prof_initialized)
+! {
+! if (len == 0)
+! len = 1; /* avoid getting error for allocating zero bytes */
+! fp->uf_tm_count = 0;
+! profile_zero(&fp->uf_tm_self);
+! profile_zero(&fp->uf_tm_total);
+! if (fp->uf_tml_count == NULL)
+! fp->uf_tml_count = (int *)alloc_clear(
+! (unsigned)(sizeof(int) * len));
+! if (fp->uf_tml_total == NULL)
+! fp->uf_tml_total = (proftime_T *)alloc_clear(
+! (unsigned)(sizeof(proftime_T) * len));
+! if (fp->uf_tml_self == NULL)
+! fp->uf_tml_self = (proftime_T *)alloc_clear(
+! (unsigned)(sizeof(proftime_T) * len));
+! fp->uf_tml_idx = -1;
+! if (fp->uf_tml_count == NULL || fp->uf_tml_total == NULL
+! || fp->uf_tml_self == NULL)
+! return; /* out of memory */
+! fp->uf_prof_initialized = TRUE;
+! }
+
+ fp->uf_profiling = TRUE;
+ }
+***************
+*** 2568,2574 ****
+ {
+ --todo;
+ fp = HI2UF(hi);
+! if (fp->uf_profiling)
+ {
+ if (sorttab != NULL)
+ sorttab[st_len++] = fp;
+--- 2576,2582 ----
+ {
+ --todo;
+ fp = HI2UF(hi);
+! if (fp->uf_prof_initialized)
+ {
+ if (sorttab != NULL)
+ sorttab[st_len++] = fp;
+*** ../vim-8.1.0129/src/version.c 2018-06-30 17:09:23.039956879 +0200
+--- src/version.c 2018-06-30 18:12:14.990860555 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 130,
+ /**/
+
+
+--
+hundred-and-one symptoms of being an internet addict:
+149. You find your computer sexier than your girlfriend
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0131 b/data/vim/patches/8.1.0131
new file mode 100644
index 000000000..c0c0e2335
--- /dev/null
+++ b/data/vim/patches/8.1.0131
@@ -0,0 +1,196 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0131
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0131
+Problem: :profdel is not tested.
+Solution: Add a test. (Dominique Pelle, closes #3123)
+Files: src/testdir/test_profile.vim
+
+
+*** ../vim-8.1.0130/src/testdir/test_profile.vim 2017-12-05 16:42:08.000000000 +0100
+--- src/testdir/test_profile.vim 2018-06-30 21:16:50.974593817 +0200
+***************
+*** 5,10 ****
+--- 5,12 ----
+
+ func Test_profile_func()
+ let lines = [
++ \ 'profile start Xprofile_func.log',
++ \ 'profile func Foo*"',
+ \ "func! Foo1()",
+ \ "endfunc",
+ \ "func! Foo2()",
+***************
+*** 33,41 ****
+
+ call writefile(lines, 'Xprofile_func.vim')
+ call system(v:progpath
+! \ . ' -es -u NONE -U NONE -i NONE --noplugin'
+! \ . ' -c "profile start Xprofile_func.log"'
+! \ . ' -c "profile func Foo*"'
+ \ . ' -c "so Xprofile_func.vim"'
+ \ . ' -c "qall!"')
+ call assert_equal(0, v:shell_error)
+--- 35,41 ----
+
+ call writefile(lines, 'Xprofile_func.vim')
+ call system(v:progpath
+! \ . ' -es --clean'
+ \ . ' -c "so Xprofile_func.vim"'
+ \ . ' -c "qall!"')
+ call assert_equal(0, v:shell_error)
+***************
+*** 97,103 ****
+
+ call writefile(lines, 'Xprofile_file.vim')
+ call system(v:progpath
+! \ . ' -es -u NONE -U NONE -i NONE --noplugin'
+ \ . ' -c "profile start Xprofile_file.log"'
+ \ . ' -c "profile file Xprofile_file.vim"'
+ \ . ' -c "so Xprofile_file.vim"'
+--- 97,103 ----
+
+ call writefile(lines, 'Xprofile_file.vim')
+ call system(v:progpath
+! \ . ' -es --clean'
+ \ . ' -c "profile start Xprofile_file.log"'
+ \ . ' -c "profile file Xprofile_file.vim"'
+ \ . ' -c "so Xprofile_file.vim"'
+***************
+*** 152,168 ****
+ let lines = readfile('Xprofile_file.log')
+ call assert_equal(11, len(lines))
+
+! call assert_match('^SCRIPT .*Xprofile_file.vim$', lines[0])
+! call assert_equal('Sourced 1 time', lines[1])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3])
+! call assert_equal('', lines[4])
+! call assert_equal('count total (s) self (s)', lines[5])
+! call assert_match(' 1 0.\d\+ echo "hello', lines[6])
+! call assert_equal(' \ world"', lines[7])
+! call assert_match(' 1 0.\d\+ echo "foo ', lines[8])
+! call assert_equal(' \bar"', lines[9])
+! call assert_equal('', lines[10])
+
+ call delete('Xprofile_file.vim')
+ call delete('Xprofile_file.log')
+--- 152,168 ----
+ let lines = readfile('Xprofile_file.log')
+ call assert_equal(11, len(lines))
+
+! call assert_match('^SCRIPT .*Xprofile_file.vim$', lines[0])
+! call assert_equal('Sourced 1 time', lines[1])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3])
+! call assert_equal('', lines[4])
+! call assert_equal('count total (s) self (s)', lines[5])
+! call assert_match(' 1 0.\d\+ echo "hello', lines[6])
+! call assert_equal(' \ world"', lines[7])
+! call assert_match(' 1 0.\d\+ echo "foo ', lines[8])
+! call assert_equal(' \bar"', lines[9])
+! call assert_equal('', lines[10])
+
+ call delete('Xprofile_file.vim')
+ call delete('Xprofile_file.log')
+***************
+*** 221,224 ****
+--- 221,294 ----
+
+ call delete('Xprofile_file.vim')
+ call delete('Xprofile_file.log')
++ endfunc
++
++ func Test_profdel_func()
++ let lines = [
++ \ 'profile start Xprofile_file.log',
++ \ 'func! Foo1()',
++ \ 'endfunc',
++ \ 'func! Foo2()',
++ \ 'endfunc',
++ \ 'func! Foo3()',
++ \ 'endfunc',
++ \ '',
++ \ 'profile func Foo1',
++ \ 'profile func Foo2',
++ \ 'call Foo1()',
++ \ 'call Foo2()',
++ \ '',
++ \ 'profile func Foo3',
++ \ 'profdel func Foo2',
++ \ 'profdel func Foo3',
++ \ 'call Foo1()',
++ \ 'call Foo2()',
++ \ 'call Foo3()' ]
++ call writefile(lines, 'Xprofile_file.vim')
++ call system(v:progpath . ' -es --clean -c "so Xprofile_file.vim" -c q')
++ call assert_equal(0, v:shell_error)
++
++ let lines = readfile('Xprofile_file.log')
++ call assert_equal(24, len(lines))
++
++ " Check that:
++ " - Foo1() is called twice (profdel not invoked)
++ " - Foo2() is called once (profdel invoked after it was called)
++ " - Foo3() is not called (profdel invoked before it was called)
++ call assert_equal('FUNCTION Foo1()', lines[0])
++ call assert_equal('Called 2 times', lines[1])
++ call assert_equal('FUNCTION Foo2()', lines[7])
++ call assert_equal('Called 1 time', lines[8])
++ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[14])
++ call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[19])
++
++ call delete('Xprofile_file.vim')
++ call delete('Xprofile_file.log')
++ endfunc
++
++ func Test_profdel_star()
++ " Foo() is invoked once before and once after 'profdel *'.
++ " So profiling should report it only once.
++ let lines = [
++ \ 'profile start Xprofile_file.log',
++ \ 'func! Foo()',
++ \ 'endfunc',
++ \ 'profile func Foo',
++ \ 'call Foo()',
++ \ 'profdel *',
++ \ 'call Foo()' ]
++ call writefile(lines, 'Xprofile_file.vim')
++ call system(v:progpath . ' -es --clean -c "so Xprofile_file.vim" -c q')
++ call assert_equal(0, v:shell_error)
++
++ let lines = readfile('Xprofile_file.log')
++ call assert_equal(15, len(lines))
++
++ call assert_equal('FUNCTION Foo()', lines[0])
++ call assert_equal('Called 1 time', lines[1])
++ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[7])
++ call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[11])
++
++ call delete('Xprofile_file.vim')
++ call delete('Xprofile_file.log')
+ endfunc
+*** ../vim-8.1.0130/src/version.c 2018-06-30 18:27:59.901025116 +0200
+--- src/version.c 2018-06-30 21:16:22.754692467 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 131,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+154. You fondle your mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0132 b/data/vim/patches/8.1.0132
new file mode 100644
index 000000000..2271859db
--- /dev/null
+++ b/data/vim/patches/8.1.0132
@@ -0,0 +1,737 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0132
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0132
+Problem: Lua tests are old style.
+Solution: Convert to new style tests. Improve coverage. (Dominique Pelle,
+ closes #3091)
+Files: src/Makefile, src/testdir/Make_all.mak,
+ src/testdir/Make_amiga.mak, src/testdir/Make_vms.mms,
+ src/testdir/test85.in, src/testdir/test_lua.vim
+
+
+*** ../vim-8.1.0131/src/Makefile 2018-06-23 19:22:45.618486231 +0200
+--- src/Makefile 2018-06-30 21:22:17.965276852 +0200
+***************
+*** 2119,2125 ****
+ test52 test59 \
+ test64 test69 \
+ test70 test72 \
+! test85 test86 test87 test88 \
+ test94 test95 test99 test108:
+ cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+
+--- 2119,2125 ----
+ test52 test59 \
+ test64 test69 \
+ test70 test72 \
+! test86 test87 test88 \
+ test94 test95 test99 test108:
+ cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+
+*** ../vim-8.1.0131/src/testdir/Make_all.mak 2018-06-23 19:22:45.614486258 +0200
+--- src/testdir/Make_all.mak 2018-06-30 21:20:58.605620983 +0200
+***************
+*** 36,42 ****
+ SCRIPTS_MORE1 = \
+ test11.out \
+ test52.out \
+- test85.out \
+ test86.out \
+ test87.out
+
+--- 36,41 ----
+*** ../vim-8.1.0131/src/testdir/Make_amiga.mak 2017-11-02 20:58:54.000000000 +0100
+--- src/testdir/Make_amiga.mak 2018-06-30 21:20:58.605620983 +0200
+***************
+*** 14,20 ****
+ # test10 'errorformat' is different
+ # test11 "cat" doesn't work properly
+ # test52 only for Win32
+- # test85 no Lua interface
+ # test86, 87 no Python interface
+
+ SCRIPTS = $(SCRIPTS_ALL) $(SCRIPTS_MORE4)
+--- 14,19 ----
+*** ../vim-8.1.0131/src/testdir/Make_vms.mms 2018-01-31 19:23:08.000000000 +0100
+--- src/testdir/Make_vms.mms 2018-06-30 21:20:58.605620983 +0200
+***************
+*** 93,99 ****
+ #
+ # test72: bug - Vim hangs at :rename (while rename works well otherwise)
+ # test78: bug - Vim dies at :recover Xtest
+- # test85: no Lua interface
+ # test89: bug - findfile() does not work on VMS (just in the current directory)
+ # test102: Just ODS-5 supports space and special chars in the filename.
+ # On ODS-2 tests fail.
+--- 93,98 ----
+***************
+*** 119,127 ****
+ SCRIPT_MZSCH = test70.out
+ .ENDIF
+
+! .IFDEF HAVE_ODS5
+! SCRIPT_ODS5 = test102.out
+! .ENDIF
+
+ .IFDEF HAVE_GZIP
+ SCRIPT_GZIP = test11.out
+--- 118,126 ----
+ SCRIPT_MZSCH = test70.out
+ .ENDIF
+
+! .IFDEF HAVE_ODS5
+! SCRIPT_ODS5 = test102.out
+! .ENDIF
+
+ .IFDEF HAVE_GZIP
+ SCRIPT_GZIP = test11.out
+***************
+*** 131,140 ****
+ SCRIPT_GDIFF = test47.out
+ .ENDIF
+
+- .IFDEF HAVE_LUA
+- SCRIPT_LUA = test85.out
+- .ENDIF
+-
+ .IFDEF HAVE_PYTHON
+ SCRIPT_PYTHON = test86.out test87.out
+ .ENDIF
+--- 130,135 ----
+*** ../vim-8.1.0131/src/testdir/test85.in 2017-03-08 22:48:59.000000000 +0100
+--- src/testdir/test85.in 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,86 ****
+- Test for Lua interface and luaeval() function
+-
+- STARTTEST
+- :so small.vim
+- :set belloff=all
+- :so lua.vim
+- :set nocompatible viminfo+=nviminfo
+- :lua l = vim.list():add"item0":add"dictionary with list OK":add"item2"
+- :lua h = vim.dict(); h.list = l
+- :call garbagecollect()
+- /^1
+- :" change buffer contents
+- :lua curbuf = vim.buffer()
+- :lua curline = vim.eval"line('.')"
+- :lua curbuf[curline] = "1 changed line 1"
+- :" scalar test
+- :let tmp_string = luaeval('"string"')
+- :let tmp_1000 = luaeval('1000')
+- :if printf("%s%.0f", tmp_string, tmp_1000) == "string1000"
+- :let scalar_res = "OK"
+- :else
+- :let scalar_res = "FAILED"
+- :endif
+- :call append(search("^1"), "scalar test " . scalar_res)
+- :" dictionary containing a list
+- :let tmp = luaeval("h").list[1]
+- :/^2/put =tmp
+- :" circular list (at the same time test lists containing lists)
+- :lua l[2] = l
+- :let l2 = luaeval("h").list
+- :if l2[2] == l2
+- :let res = "OK"
+- :else
+- :let res = "FAILED"
+- :endif
+- :call setline(search("^3"), "circular test " . res)
+-
+- :let l = []
+- :lua l = vim.eval("l")
+- :lua l:add(123)
+- :lua l:add("abc")
+- :lua l:add(vim.eval("[1, 2, 3]"))
+- :lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}"))
+- :lua l:insert(123)
+- :lua l:insert("abc")
+- :lua l:insert(vim.eval("[1, 2, 3]"))
+- :lua l:insert(vim.eval("{'a':1, 'b':2, 'c':3}"))
+- :lua l[0] = l[0]
+- :lua l[1] = l[1]
+- :lua l[2] = l[2]
+- :lua l[3] = l[3]
+- :lua l[0] = 123
+- :lua l[1] = "abc"
+- :lua l[2] = vim.eval("[1, 2, 3]")
+- :lua l[3] = vim.eval("{'a':1, 'b':2, 'c':3}")
+- :lua l[3] = nil
+- :lua l[2] = nil
+- :lua l[1] = nil
+- :lua l[0] = nil
+- :lua l = nil
+- :$put =string(l)
+-
+- :let d = {}
+- :lua d = vim.eval("d")
+- :lua d[0] = 123
+- :lua d[1] = "abc"
+- :lua d[2] = vim.eval("[1, 2, 3]")
+- :lua d[3] = vim.eval("{'a':1, 'b':2, 'c':3}")
+- :lua d[4] = d[0]
+- :lua d[5] = d[1]
+- :lua d[6] = d[2]
+- :lua d[7] = d[3]
+- :lua d[3] = nil
+- :lua d[2] = nil
+- :lua d[1] = nil
+- :lua d[0] = nil
+- :lua d = nil
+- :$put =string(d)
+-
+- :?^1?,$w! test.out
+- :qa!
+- ENDTEST
+-
+- 1 line 1
+- 2 line 2
+- 3 line 3
+--- 0 ----
+*** ../vim-8.1.0131/src/testdir/test_lua.vim 2017-01-29 22:39:50.000000000 +0100
+--- src/testdir/test_lua.vim 2018-06-30 21:20:58.609620966 +0200
+***************
+*** 1,22 ****
+ " Tests for Lua.
+- " TODO: move tests from test85.in here.
+
+ if !has('lua')
+ finish
+ endif
+
+! func Test_luado()
+! new
+! call setline(1, ['one', 'two', 'three'])
+! luado vim.command("%d_")
+! bwipe!
+!
+! " Check switching to another buffer does not trigger ml_get error.
+ new
+ let wincount = winnr('$')
+ call setline(1, ['one', 'two', 'three'])
+ luado vim.command("new")
+ call assert_equal(wincount + 1, winnr('$'))
+ bwipe!
+ bwipe!
+ endfunc
+--- 1,494 ----
+ " Tests for Lua.
+
+ if !has('lua')
+ finish
+ endif
+
+! " Check that switching to another buffer does not trigger ml_get error.
+! func Test_command_new_no_ml_get_error()
+ new
+ let wincount = winnr('$')
+ call setline(1, ['one', 'two', 'three'])
+ luado vim.command("new")
+ call assert_equal(wincount + 1, winnr('$'))
++ %bwipe!
++ endfunc
++
++ " Test vim.command()
++ func Test_command()
++ new
++ call setline(1, ['one', 'two', 'three'])
++ luado vim.command("1,2d_")
++ call assert_equal(['three'], getline(1, '$'))
++ bwipe!
++ endfunc
++
++ " Test vim.eval()
++ func Test_eval()
++ " lua.eval with a number
++ lua v = vim.eval('123')
++ call assert_equal('number', luaeval('vim.type(v)'))
++ call assert_equal(123.0, luaeval('v'))
++
++ " lua.eval with a string
++ lua v = vim.eval('"abc"')
++ call assert_equal('string', luaeval('vim.type(v)'))
++ call assert_equal('abc', luaeval('v'))
++
++ " lua.eval with a list
++ lua v = vim.eval("['a']")
++ call assert_equal('list', luaeval('vim.type(v)'))
++ call assert_equal(['a'], luaeval('v'))
++
++ " lua.eval with a dict
++ lua v = vim.eval("{'a':'b'}")
++ call assert_equal('dict', luaeval('vim.type(v)'))
++ call assert_equal({'a':'b'}, luaeval('v'))
++
++ call assert_fails('lua v = vim.eval(nil)',
++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got nil)")
++ call assert_fails('lua v = vim.eval(true)',
++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got boolean)")
++ call assert_fails('lua v = vim.eval({})',
++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got table)")
++ call assert_fails('lua v = vim.eval(print)',
++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got function)")
++ call assert_fails('lua v = vim.eval(vim.buffer())',
++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got userdata)")
++
++ lua v = nil
++ endfunc
++
++ " Test vim.window()
++ func Test_window()
++ e Xfoo2
++ new Xfoo1
++
++ " Window 1 (top window) contains Xfoo1
++ " Window 2 (bottom window) contains Xfoo2
++ call assert_equal('Xfoo1', luaeval('vim.window(1):buffer().name'))
++ call assert_equal('Xfoo2', luaeval('vim.window(2):buffer().name'))
++
++ " Window 3 does not exist so vim.window(3) should return nil
++ call assert_equal('nil', luaeval('tostring(vim.window(3))'))
++
++ %bwipe!
++ endfunc
++
++ " Test vim.window().height
++ func Test_window_height()
++ new
++ lua vim.window().height = 2
++ call assert_equal(2, winheight(0))
++ lua vim.window().height = vim.window().height + 1
++ call assert_equal(3, winheight(0))
++ bwipe!
++ endfunc
++
++ " Test vim.window().width
++ func Test_window_width()
++ vert new
++ lua vim.window().width = 2
++ call assert_equal(2, winwidth(0))
++ lua vim.window().width = vim.window().width + 1
++ call assert_equal(3, winwidth(0))
++ bwipe!
++ endfunc
++
++ " Test vim.window().line and vim.window.col
++ func Test_window_line_col()
++ new
++ call setline(1, ['line1', 'line2', 'line3'])
++ lua vim.window().line = 2
++ lua vim.window().col = 4
++ call assert_equal([0, 2, 4, 0], getpos('.'))
++ lua vim.window().line = vim.window().line + 1
++ lua vim.window().col = vim.window().col - 1
++ call assert_equal([0, 3, 3, 0], getpos('.'))
++
++ call assert_fails('lua vim.window().line = 10',
++ \ '[string "vim chunk"]:1: line out of range')
++ bwipe!
++ endfunc
++
++ " Test setting the current window
++ func Test_window_set_current()
++ new Xfoo1
++ lua w1 = vim.window()
++ new Xfoo2
++ lua w2 = vim.window()
++
++ call assert_equal('Xfoo2', bufname('%'))
++ lua w1()
++ call assert_equal('Xfoo1', bufname('%'))
++ lua w2()
++ call assert_equal('Xfoo2', bufname('%'))
++
++ lua w1, w2 = nil, nil
++ %bwipe!
++ endfunc
++
++ " Test vim.window().buffer
++ func Test_window_buffer()
++ new Xfoo1
++ lua w1 = vim.window()
++ lua b1 = w1.buffer()
++ new Xfoo2
++ lua w2 = vim.window()
++ lua b2 = w2.buffer()
++
++ lua b1()
++ call assert_equal('Xfoo1', bufname('%'))
++ lua b2()
++ call assert_equal('Xfoo2', bufname('%'))
++
++ lua b1, b2 = nil, nil
++ %bwipe!
++ endfunc
++
++ " Test vim.window():previous() and vim.window():next()
++ func Test_window_next_previous()
++ new Xfoo1
++ new Xfoo2
++ new Xfoo3
++ wincmd j
++
++ call assert_equal('Xfoo2', luaeval('vim.window().buffer().name'))
++ call assert_equal('Xfoo1', luaeval('vim.window():next():buffer().name'))
++ call assert_equal('Xfoo3', luaeval('vim.window():previous():buffer().name'))
++
++ %bwipe!
++ endfunc
++
++ " Test vim.window():isvalid()
++ func Test_window_isvalid()
++ new Xfoo
++ lua w = vim.window()
++ call assert_true(luaeval('w:isvalid()'))
++
++ " FIXME: how to test the case when isvalid() returns v:false?
++ " isvalid() gives errors when the window is deleted. Is it a bug?
++
++ lua w = nil
++ bwipe!
++ endfunc
++
++ " Test vim.buffer() with and without argument
++ func Test_buffer()
++ new Xfoo1
++ let bn1 = bufnr('%')
++ new Xfoo2
++ let bn2 = bufnr('%')
++
++ " Test vim.buffer() without argument.
++ call assert_equal('Xfoo2', luaeval("vim.buffer().name"))
++
++ " Test vim.buffer() with string argument.
++ call assert_equal('Xfoo1', luaeval("vim.buffer('Xfoo1').name"))
++ call assert_equal('Xfoo2', luaeval("vim.buffer('Xfoo2').name"))
++
++ " Test vim.buffer() with integer argument.
++ call assert_equal('Xfoo1', luaeval("vim.buffer(" . bn1 . ").name"))
++ call assert_equal('Xfoo2', luaeval("vim.buffer(" . bn2 . ").name"))
++
++ lua bn1, bn2 = nil, nil
++ %bwipe!
++ endfunc
++
++ " Test vim.buffer().name and vim.buffer().fname
++ func Test_buffer_name()
++ new
++ " FIXME: for an unnamed buffer, I would expect
++ " vim.buffer().name to give an empty string, but
++ " it returns 0. Is it a bug?
++ " so this assert_equal is commented out.
++ " call assert_equal('', luaeval('vim.buffer().name'))
++ bwipe!
++
++ new Xfoo
++ call assert_equal('Xfoo', luaeval('vim.buffer().name'))
++ call assert_equal(expand('%:p'), luaeval('vim.buffer().fname'))
++ bwipe!
++ endfunc
++
++ " Test vim.buffer().number
++ func Test_buffer_number()
++ " All numbers in Lua are floating points number (no integers).
++ call assert_equal(bufnr('%'), float2nr(luaeval('vim.buffer().number')))
++ endfunc
++
++ " Test inserting lines in buffer.
++ func Test_buffer_insert()
++ new
++ lua vim.buffer()[1] = '3'
++ lua vim.buffer():insert('1', 0)
++ lua vim.buffer():insert('2', 1)
++ lua vim.buffer():insert('4', 10)
++
++ call assert_equal(['1', '2', '3', '4'], getline(1, '$'))
++ bwipe!
++ endfunc
++
++ " Test deleting line in buffer
++ func Test_buffer_delete()
++ new
++ call setline(1, ['1', '2', '3'])
++ lua vim.buffer()[2] = nil
++ call assert_equal(['1', '3'], getline(1, '$'))
++
++ call assert_fails('lua vim.buffer()[3] = nil',
++ \ '[string "vim chunk"]:1: invalid line number')
++ bwipe!
++ endfunc
++
++ " Test #vim.buffer() i.e. number of lines in buffer
++ func Test_buffer_number_lines()
++ new
++ call setline(1, ['a', 'b', 'c'])
++ call assert_equal(3.0, luaeval('#vim.buffer()'))
++ bwipe!
++ endfunc
++
++ " Test vim.buffer():next() and vim.buffer():previous()
++ " Note that these functions get the next or previous buffers
++ " but do not switch buffer.
++ func Test_buffer_next_previous()
++ new Xfoo1
++ new Xfoo2
++ new Xfoo3
++ b Xfoo2
++
++ lua bn = vim.buffer():next()
++ lua bp = vim.buffer():previous()
++
++ call assert_equal('Xfoo2', luaeval('vim.buffer().name'))
++ call assert_equal('Xfoo1', luaeval('bp.name'))
++ call assert_equal('Xfoo3', luaeval('bn.name'))
++
++ call assert_equal('Xfoo2', bufname('%'))
++
++ lua bn()
++ call assert_equal('Xfoo3', luaeval('vim.buffer().name'))
++ call assert_equal('Xfoo3', bufname('%'))
++
++ lua bp()
++ call assert_equal('Xfoo1', luaeval('vim.buffer().name'))
++ call assert_equal('Xfoo1', bufname('%'))
++
++ lua bn, bp = nil, nil
++ %bwipe!
++ endfunc
++
++ " Test vim.buffer():isvalid()
++ func Test_buffer_isvalid()
++ new Xfoo
++ lua b = vim.buffer()
++ call assert_true(luaeval('b:isvalid()'))
++
++ " FIXME: how to test the case when isvalid() returns v:false?
++ " isvalid() gives errors when the buffer is wiped. Is it a bug?
++
++ lua b = nil
+ bwipe!
++ endfunc
++
++ func Test_list()
++ call assert_equal([], luaeval('vim.list()'))
++
++ " Same example as in :help lua-vim.
++ " FIXME: test is disabled because it does not work.
++ " See https://github.com/vim/vim/issues/3086
++ " lua t = {math.pi, false, say = 'hi'}
++ " call assert_equal([3.141593, 0], luaeval('vim.list(t)'))
++
++ let l = []
++ lua l = vim.eval('l')
++ lua l:add(123)
++ lua l:add('abc')
++ lua l:add(true)
++ lua l:add(false)
++ lua l:add(vim.eval("[1, 2, 3]"))
++ lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}"))
++ call assert_equal([123.0, 'abc', v:true, v:false, [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}], l)
++ call assert_equal(6.0, luaeval('#l'))
++ call assert_match('^list: 0x\x\+$', luaeval('tostring(l)'))
++
++ lua l[0] = 124
++ lua l[4] = nil
++ lua l:insert('first')
++ lua l:insert('xx', 3)
++ call assert_equal(['first', 124.0, 'abc', 'xx', v:true, v:false, {'a': 1, 'b': 2, 'c': 3}], l)
++
++ lua l = nil
++ endfunc
++
++ " Test l() i.e. iterator on list
++ func Test_list_iter()
++ lua l = vim.list():add('foo'):add('bar')
++ lua str = ''
++ lua for v in l() do str = str .. v end
++ call assert_equal('foobar', luaeval('str'))
++
++ lua str, v, l = nil, nil, nil
++ endfunc
++
++ func Test_recursive_list()
++ lua l = vim.list():add(1):add(2)
++ lua l = l:add(l)
++
++ call assert_equal(1.0, luaeval('l[0]'))
++ call assert_equal(2.0, luaeval('l[1]'))
++
++ call assert_equal(1.0, luaeval('l[2][0]'))
++ call assert_equal(2.0, luaeval('l[2][1]'))
++
++ call assert_equal(1.0, luaeval('l[2][2][0]'))
++ call assert_equal(2.0, luaeval('l[2][2][1]'))
++
++ call assert_equal('[1.0, 2.0, [...]]', string(luaeval('l')))
++
++ call assert_match('^list: 0x\x\+$', luaeval('tostring(l)'))
++ call assert_equal(luaeval('tostring(l)'), luaeval('tostring(l[2])'))
++
++ call assert_equal(luaeval('l'), luaeval('l[2]'))
++ call assert_equal(luaeval('l'), luaeval('l[2][2]'))
++
++ lua l = nil
++ endfunc
++
++ func Test_dict()
++ call assert_equal({}, luaeval('vim.dict()'))
++
++ " Same example as in :help lua-vim.
++ " FIXME: test is disabled because it does not work.
++ " See https://github.com/vim/vim/issues/3086
++ " lua t = {math.pi, false, say = 'hi'}
++ " call assert_equal({'say' : 'hi'}, luaeval('vim.dict(t)'))
++
++ let d = {}
++ lua d = vim.eval('d')
++ lua d[0] = 123
++ lua d[1] = "abc"
++ lua d[2] = true
++ lua d[3] = false
++ lua d[4] = vim.eval("[1, 2, 3]")
++ lua d[5] = vim.eval("{'a':1, 'b':2, 'c':3}")
++ call assert_equal({'0':123.0, '1':'abc', '2':v:true, '3':v:false, '4': [1, 2, 3], '5': {'a':1, 'b':2, 'c':3}}, d)
++ call assert_equal(6.0, luaeval('#d'))
++ call assert_match('^dict: 0x\x\+$', luaeval('tostring(d)'))
++
++ call assert_equal('abc', luaeval('d[1]'))
++
++ lua d[0] = 124
++ lua d[4] = nil
++ call assert_equal({'0':124.0, '1':'abc', '2':v:true, '3':v:false, '5': {'a':1, 'b':2, 'c':3}}, d)
++
++ lua d = nil
++ endfunc
++
++ " Test d() i.e. iterator on dictionary
++ func Test_dict_iter()
++ let d = {'a': 1, 'b':2}
++ lua d = vim.eval('d')
++ lua str = ''
++ lua for k,v in d() do str = str .. k ..':' .. v .. ',' end
++ call assert_equal('a:1,b:2,', luaeval('str'))
++
++ lua str, k, v, d = nil, nil, nil, nil
++ endfunc
++
++ " Test vim.type()
++ func Test_type()
++ " The following values are identical to Lua's type function.
++ call assert_equal('string', luaeval('vim.type("foo")'))
++ call assert_equal('number', luaeval('vim.type(1)'))
++ call assert_equal('number', luaeval('vim.type(1.2)'))
++ call assert_equal('function', luaeval('vim.type(print)'))
++ call assert_equal('table', luaeval('vim.type({})'))
++ call assert_equal('boolean', luaeval('vim.type(true)'))
++ call assert_equal('boolean', luaeval('vim.type(false)'))
++ call assert_equal('nil', luaeval('vim.type(nil)'))
++
++ " The following values are specific to Vim.
++ call assert_equal('window', luaeval('vim.type(vim.window())'))
++ call assert_equal('buffer', luaeval('vim.type(vim.buffer())'))
++ call assert_equal('list', luaeval('vim.type(vim.list())'))
++ call assert_equal('dict', luaeval('vim.type(vim.dict())'))
++ endfunc
++
++ " Test vim.open()
++ func Test_open()
++ call assert_notmatch('XOpen', execute('ls'))
++
++ " Open a buffer XOpen1, but do not jump to it.
++ lua b = vim.open('XOpen1')
++ call assert_equal('XOpen1', luaeval('b.name'))
++ call assert_equal('', bufname('%'))
++
++ call assert_match('XOpen1', execute('ls'))
++ call assert_notequal('XOpen2', bufname('%'))
++
++ " Open a buffer XOpen2 and jump to it.
++ lua b = vim.open('XOpen2')()
++ call assert_equal('XOpen2', luaeval('b.name'))
++ call assert_equal('XOpen2', bufname('%'))
++
++ lua b = nil
++ %bwipe!
++ endfunc
++
++ " Test vim.line()
++ func Test_line()
++ new
++ call setline(1, ['first line', 'second line'])
++ 1
++ call assert_equal('first line', luaeval('vim.line()'))
++ 2
++ call assert_equal('second line', luaeval('vim.line()'))
++ bwipe!
++ endfunc
++
++ " Test vim.beep()
++ func Test_beep()
++ call assert_beeps('lua vim.beep()')
++ endfunc
++
++ " Test errors in luaeval()
++ func Test_luaeval_error()
++ " Compile error
++ call assert_fails("call luaeval('-nil')",
++ \ '[string "luaeval"]:1: attempt to perform arithmetic on a nil value')
++ call assert_fails("call luaeval(']')",
++ \ "[string \"luaeval\"]:1: unexpected symbol near ']'")
++ endfunc
++
++ " Test :luafile foo.lua
++ func Test_luafile()
++ call delete('Xlua_file')
++ call writefile(["str = 'hello'", "num = 123.0" ], 'Xlua_file')
++ call setfperm('Xlua_file', 'r-xr-xr-x')
++
++ luafile Xlua_file
++ call assert_equal('hello', luaeval('str'))
++ call assert_equal(123.0, luaeval('num'))
++
++ lua str, num = nil, nil
++ call delete('Xlua_file')
++ endfunc
++
++ " Test :luafile %
++ func Test_luafile_percent()
++ new Xlua_file
++ append
++ str, num = 'foo', 321.0
++ print(string.format('str=%s, num=%d', str, num))
++ .
++ w!
++ luafile %
++ let msg = split(execute('message'), "\n")[-1]
++ call assert_equal('str=foo, num=321', msg)
++
++ lua str, num = nil, nil
++ call delete('Xlua_file')
+ bwipe!
+ endfunc
+*** ../vim-8.1.0131/src/version.c 2018-06-30 21:18:10.486300954 +0200
+--- src/version.c 2018-06-30 21:22:03.417340889 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 132,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+155. You forget to eat because you're too busy surfing the net.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0133 b/data/vim/patches/8.1.0133
new file mode 100644
index 000000000..b1f6d2253
--- /dev/null
+++ b/data/vim/patches/8.1.0133
@@ -0,0 +1,141 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0133
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0133
+Problem: tagfiles() can have duplicate entries.
+Solution: Simplify the filename to make checking for duplicates work better.
+ Add a test. (Dominique Pelle, closes #2979)
+Files: src/tag.c, src/testdir/test_taglist.vim
+
+
+*** ../vim-8.1.0132/src/tag.c 2018-04-27 22:44:39.000000000 +0200
+--- src/tag.c 2018-06-30 22:40:27.157629813 +0200
+***************
+*** 2595,2601 ****
+ }
+
+ static garray_T tag_fnames = GA_EMPTY;
+- static void found_tagfile_cb(char_u *fname, void *cookie);
+
+ /*
+ * Callback function for finding all "tags" and "tags-??" files in
+--- 2595,2600 ----
+***************
+*** 2605,2612 ****
+ found_tagfile_cb(char_u *fname, void *cookie UNUSED)
+ {
+ if (ga_grow(&tag_fnames, 1) == OK)
+! ((char_u **)(tag_fnames.ga_data))[tag_fnames.ga_len++] =
+! vim_strsave(fname);
+ }
+
+ #if defined(EXITFREE) || defined(PROTO)
+--- 2604,2618 ----
+ found_tagfile_cb(char_u *fname, void *cookie UNUSED)
+ {
+ if (ga_grow(&tag_fnames, 1) == OK)
+! {
+! char_u *tag_fname = vim_strsave(fname);
+!
+! #ifdef BACKSLASH_IN_FILENAME
+! slash_adjust(tag_fname);
+! #endif
+! simplify_filename(tag_fname);
+! ((char_u **)(tag_fnames.ga_data))[tag_fnames.ga_len++] = tag_fname;
+! }
+ }
+
+ #if defined(EXITFREE) || defined(PROTO)
+***************
+*** 2638,2643 ****
+--- 2644,2650 ----
+ {
+ char_u *fname = NULL;
+ char_u *r_ptr;
++ int i;
+
+ if (first)
+ vim_memset(tnp, 0, sizeof(tagname_T));
+***************
+*** 2679,2684 ****
+--- 2686,2699 ----
+ ++tnp->tn_hf_idx;
+ STRCPY(buf, p_hf);
+ STRCPY(gettail(buf), "tags");
++ #ifdef BACKSLASH_IN_FILENAME
++ slash_adjust(buf);
++ #endif
++ simplify_filename(buf);
++
++ for (i = 0; i < tag_fnames.ga_len; ++i)
++ if (STRCMP(buf, ((char_u **)(tag_fnames.ga_data))[i]) == 0)
++ return FAIL; // avoid duplicate file names
+ }
+ else
+ vim_strncpy(buf, ((char_u **)(tag_fnames.ga_data))[
+*** ../vim-8.1.0132/src/testdir/test_taglist.vim 2018-02-09 18:25:21.000000000 +0100
+--- src/testdir/test_taglist.vim 2018-06-30 22:33:05.044664951 +0200
+***************
+*** 1,4 ****
+! " test 'taglist' function and :tags command
+
+ func Test_taglist()
+ call writefile([
+--- 1,4 ----
+! " test taglist(), tagfiles() functions and :tags command
+
+ func Test_taglist()
+ call writefile([
+***************
+*** 61,63 ****
+--- 61,86 ----
+ call assert_fails('tag ' . repeat('x', 1020), 'E426')
+ tags
+ endfunc
++
++ func Test_tagfiles()
++ call assert_equal([], tagfiles())
++
++ call writefile(["FFoo\tXfoo\t1"], 'Xtags1')
++ call writefile(["FBar\tXbar\t1"], 'Xtags2')
++ set tags=Xtags1,Xtags2
++ call assert_equal(['Xtags1', 'Xtags2'], tagfiles())
++
++ help
++ let tf = tagfiles()
++ call assert_equal(1, len(tf))
++ call assert_equal(fnamemodify(expand('$VIMRUNTIME/doc/tags'), ':p:gs?\\?/?'),
++ \ fnamemodify(tf[0], ':p:gs?\\?/?'))
++ helpclose
++ call assert_equal(['Xtags1', 'Xtags2'], tagfiles())
++ set tags&
++ call assert_equal([], tagfiles())
++
++ call delete('Xtags1')
++ call delete('Xtags2')
++ bd
++ endfunc
+*** ../vim-8.1.0132/src/version.c 2018-06-30 21:50:16.856674912 +0200
+--- src/version.c 2018-06-30 22:33:36.756434678 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 133,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+158. You get a tuner card so you can watch TV while surfing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0134 b/data/vim/patches/8.1.0134
new file mode 100644
index 000000000..ff07dfe27
--- /dev/null
+++ b/data/vim/patches/8.1.0134
@@ -0,0 +1,724 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0134
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0134
+Problem: Lua interface does not support funcref.
+Solution: Add funcref support. (Luis Carvalho)
+Files: src/if_lua.c, src/testdir/test_lua.vim
+
+
+*** ../vim-8.1.0133/src/if_lua.c 2017-12-16 18:17:27.000000000 +0100
+--- src/if_lua.c 2018-07-01 14:49:42.013143173 +0200
+***************
+*** 28,37 ****
+--- 28,43 ----
+ typedef win_T *luaV_Window;
+ typedef dict_T *luaV_Dict;
+ typedef list_T *luaV_List;
++ typedef struct {
++ typval_T tv; // funcref
++ typval_T args;
++ dict_T *self; // selfdict
++ } luaV_Funcref;
+ typedef void (*msgfunc_T)(char_u *);
+
+ static const char LUAVIM_DICT[] = "dict";
+ static const char LUAVIM_LIST[] = "list";
++ static const char LUAVIM_FUNCREF[] = "funcref";
+ static const char LUAVIM_BUFFER[] = "buffer";
+ static const char LUAVIM_WINDOW[] = "window";
+ static const char LUAVIM_FREE[] = "luaV_free";
+***************
+*** 55,63 ****
+ if (sandbox) luaL_error((L), "not allowed in sandbox")
+ #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg)
+ #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg)
+!
+! static luaV_List *luaV_pushlist (lua_State *L, list_T *lis);
+! static luaV_Dict *luaV_pushdict (lua_State *L, dict_T *dic);
+
+ #if LUA_VERSION_NUM <= 501
+ #define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n)
+--- 61,75 ----
+ if (sandbox) luaL_error((L), "not allowed in sandbox")
+ #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg)
+ #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg)
+! #define luaV_checktypval(L, a, v, msg) \
+! do { \
+! if (luaV_totypval(L, a, v) == FAIL) \
+! luaL_error(L, msg ": cannot convert value"); \
+! } while (0)
+!
+! static luaV_List *luaV_pushlist(lua_State *L, list_T *lis);
+! static luaV_Dict *luaV_pushdict(lua_State *L, dict_T *dic);
+! static luaV_Funcref *luaV_pushfuncref(lua_State *L, typval_T *tv);
+
+ #if LUA_VERSION_NUM <= 501
+ #define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n)
+***************
+*** 506,521 ****
+ else
+ lua_pushnil(L);
+ break;
+ default:
+ lua_pushnil(L);
+ }
+ }
+
+! /* converts lua value at 'pos' to typval 'tv' */
+! static void
+! luaV_totypval (lua_State *L, int pos, typval_T *tv)
+ {
+! switch(lua_type(L, pos)) {
+ case LUA_TBOOLEAN:
+ tv->v_type = VAR_SPECIAL;
+ tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos);
+--- 518,542 ----
+ else
+ lua_pushnil(L);
+ break;
++ case VAR_FUNC:
++ luaV_pushfuncref(L, tv);
++ break;
+ default:
+ lua_pushnil(L);
+ }
+ }
+
+! /*
+! * Converts lua value at 'pos' to typval 'tv'.
+! * Returns OK or FAIL.
+! */
+! static int
+! luaV_totypval(lua_State *L, int pos, typval_T *tv)
+ {
+! int status = OK;
+!
+! switch (lua_type(L, pos))
+! {
+ case LUA_TBOOLEAN:
+ tv->v_type = VAR_SPECIAL;
+ tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos);
+***************
+*** 533,540 ****
+ tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos);
+ #endif
+ break;
+! case LUA_TUSERDATA: {
+ void *p = lua_touserdata(L, pos);
+ if (lua_getmetatable(L, pos)) /* has metatable? */
+ {
+ /* check list */
+--- 554,563 ----
+ tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos);
+ #endif
+ break;
+! case LUA_TUSERDATA:
+! {
+ void *p = lua_touserdata(L, pos);
++
+ if (lua_getmetatable(L, pos)) /* has metatable? */
+ {
+ /* check list */
+***************
+*** 545,551 ****
+ tv->vval.v_list = *((luaV_List *) p);
+ ++tv->vval.v_list->lv_refcount;
+ lua_pop(L, 2); /* MTs */
+! return;
+ }
+ /* check dict */
+ luaV_getfield(L, LUAVIM_DICT);
+--- 568,574 ----
+ tv->vval.v_list = *((luaV_List *) p);
+ ++tv->vval.v_list->lv_refcount;
+ lua_pop(L, 2); /* MTs */
+! break;
+ }
+ /* check dict */
+ luaV_getfield(L, LUAVIM_DICT);
+***************
+*** 555,570 ****
+ tv->vval.v_dict = *((luaV_Dict *) p);
+ ++tv->vval.v_dict->dv_refcount;
+ lua_pop(L, 3); /* MTs */
+! return;
+ }
+! lua_pop(L, 3); /* MTs */
+ }
+- break;
+ }
+ default:
+ tv->v_type = VAR_NUMBER;
+ tv->vval.v_number = 0;
+ }
+ }
+
+ /* similar to luaL_addlstring, but replaces \0 with \n if toline and
+--- 578,604 ----
+ tv->vval.v_dict = *((luaV_Dict *) p);
+ ++tv->vval.v_dict->dv_refcount;
+ lua_pop(L, 3); /* MTs */
+! break;
+ }
+! /* check funcref */
+! luaV_getfield(L, LUAVIM_FUNCREF);
+! if (lua_rawequal(L, -1, -4))
+! {
+! luaV_Funcref *f = (luaV_Funcref *) p;
+! copy_tv(&f->tv, tv);
+! lua_pop(L, 4); /* MTs */
+! break;
+! }
+! lua_pop(L, 4); /* MTs */
+ }
+ }
++ /* FALLTHROUGH */
+ default:
+ tv->v_type = VAR_NUMBER;
+ tv->vval.v_number = 0;
++ status = FAIL;
+ }
++ return status;
+ }
+
+ /* similar to luaL_addlstring, but replaces \0 with \n if toline and
+***************
+*** 646,652 ****
+
+ #define luaV_pushtype(typ,tname,luatyp) \
+ static luatyp * \
+! luaV_push##tname (lua_State *L, typ *obj) \
+ { \
+ luatyp *o = NULL; \
+ if (obj == NULL) \
+--- 680,686 ----
+
+ #define luaV_pushtype(typ,tname,luatyp) \
+ static luatyp * \
+! luaV_push##tname(lua_State *L, typ *obj) \
+ { \
+ luatyp *o = NULL; \
+ if (obj == NULL) \
+***************
+*** 766,772 ****
+ else
+ {
+ typval_T v;
+! luaV_totypval(L, 3, &v);
+ clear_tv(&li->li_tv);
+ copy_tv(&v, &li->li_tv);
+ clear_tv(&v);
+--- 800,806 ----
+ else
+ {
+ typval_T v;
+! luaV_checktypval(L, 3, &v, "setting list item");
+ clear_tv(&li->li_tv);
+ copy_tv(&v, &li->li_tv);
+ clear_tv(&v);
+***************
+*** 783,793 ****
+ if (l->lv_lock)
+ luaL_error(L, "list is locked");
+ lua_settop(L, 2);
+! luaV_totypval(L, 2, &v);
+ if (list_append_tv(l, &v) == FAIL)
+ {
+ clear_tv(&v);
+! luaL_error(L, "Failed to add item to list");
+ }
+ clear_tv(&v);
+ lua_settop(L, 1);
+--- 817,827 ----
+ if (l->lv_lock)
+ luaL_error(L, "list is locked");
+ lua_settop(L, 2);
+! luaV_checktypval(L, 2, &v, "adding list item");
+ if (list_append_tv(l, &v) == FAIL)
+ {
+ clear_tv(&v);
+! luaL_error(L, "failed to add item to list");
+ }
+ clear_tv(&v);
+ lua_settop(L, 1);
+***************
+*** 811,821 ****
+ luaL_error(L, "invalid position");
+ }
+ lua_settop(L, 2);
+! luaV_totypval(L, 2, &v);
+ if (list_insert_tv(l, &v, li) == FAIL)
+ {
+ clear_tv(&v);
+! luaL_error(L, "Failed to add item to list");
+ }
+ clear_tv(&v);
+ lua_settop(L, 1);
+--- 845,855 ----
+ luaL_error(L, "invalid position");
+ }
+ lua_settop(L, 2);
+! luaV_checktypval(L, 2, &v, "inserting list item");
+ if (list_insert_tv(l, &v, li) == FAIL)
+ {
+ clear_tv(&v);
+! luaL_error(L, "failed to add item to list");
+ }
+ clear_tv(&v);
+ lua_settop(L, 1);
+***************
+*** 894,919 ****
+ }
+
+ static int
+! luaV_dict_index (lua_State *L)
+ {
+ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+ char_u *key = (char_u *) luaL_checkstring(L, 2);
+ dictitem_T *di = dict_find(d, key, -1);
+ if (di == NULL)
+ lua_pushnil(L);
+ else
+ luaV_pushtypval(L, &di->di_tv);
+ return 1;
+ }
+
+ static int
+! luaV_dict_newindex (lua_State *L)
+ {
+ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+ char_u *key = (char_u *) luaL_checkstring(L, 2);
+ dictitem_T *di;
+ if (d->dv_lock)
+ luaL_error(L, "dict is locked");
+ di = dict_find(d, key, -1);
+ if (di == NULL) /* non-existing key? */
+ {
+--- 928,970 ----
+ }
+
+ static int
+! luaV_dict_index(lua_State *L)
+ {
+ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+ char_u *key = (char_u *) luaL_checkstring(L, 2);
+ dictitem_T *di = dict_find(d, key, -1);
++
+ if (di == NULL)
+ lua_pushnil(L);
+ else
++ {
+ luaV_pushtypval(L, &di->di_tv);
++ if (di->di_tv.v_type == VAR_FUNC) /* funcref? */
++ {
++ luaV_Funcref *f = (luaV_Funcref *) lua_touserdata(L, -1);
++ f->self = d; /* keep "self" reference */
++ d->dv_refcount++;
++ }
++ }
+ return 1;
+ }
+
+ static int
+! luaV_dict_newindex(lua_State *L)
+ {
+ dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+ char_u *key = (char_u *) luaL_checkstring(L, 2);
+ dictitem_T *di;
++ typval_T v;
+ if (d->dv_lock)
+ luaL_error(L, "dict is locked");
++ if (key != NULL && *key == NUL)
++ luaL_error(L, "empty key");
++ if (!lua_isnil(L, 3)) { /* read value? */
++ luaV_checktypval(L, 3, &v, "setting dict item");
++ if (d->dv_scope == VAR_DEF_SCOPE && v.v_type == VAR_FUNC)
++ luaL_error(L, "cannot assign funcref to builtin scope");
++ }
+ di = dict_find(d, key, -1);
+ if (di == NULL) /* non-existing key? */
+ {
+***************
+*** 934,942 ****
+ hash_remove(&d->dv_hashtab, hi);
+ dictitem_free(di);
+ }
+! else {
+! typval_T v;
+! luaV_totypval(L, 3, &v);
+ copy_tv(&v, &di->di_tv);
+ clear_tv(&v);
+ }
+--- 985,992 ----
+ hash_remove(&d->dv_hashtab, hi);
+ dictitem_free(di);
+ }
+! else
+! {
+ copy_tv(&v, &di->di_tv);
+ clear_tv(&v);
+ }
+***************
+*** 953,958 ****
+--- 1003,1094 ----
+ };
+
+
++ /* ======= Funcref type ======= */
++
++ static luaV_Funcref *
++ luaV_newfuncref(lua_State *L, char_u *name)
++ {
++ luaV_Funcref *f = (luaV_Funcref *)lua_newuserdata(L, sizeof(luaV_Funcref));
++
++ if (name != NULL)
++ {
++ func_ref(name); /* as in copy_tv */
++ f->tv.vval.v_string = vim_strsave(name);
++ }
++ f->tv.v_type = VAR_FUNC;
++ f->args.v_type = VAR_LIST;
++ f->self = NULL;
++ luaV_getfield(L, LUAVIM_FUNCREF);
++ lua_setmetatable(L, -2);
++ return f;
++ }
++
++ static luaV_Funcref *
++ luaV_pushfuncref(lua_State *L, typval_T *tv)
++ {
++ luaV_Funcref *f = luaV_newfuncref(L, NULL);
++ copy_tv(tv, &f->tv);
++ clear_tv(tv);
++ return f;
++ }
++
++
++ luaV_type_tostring(funcref, LUAVIM_FUNCREF)
++
++ static int
++ luaV_funcref_gc(lua_State *L)
++ {
++ luaV_Funcref *f = (luaV_Funcref *) lua_touserdata(L, 1);
++
++ func_unref(f->tv.vval.v_string);
++ vim_free(f->tv.vval.v_string);
++ dict_unref(f->self);
++ return 0;
++ }
++
++ /* equivalent to string(funcref) */
++ static int
++ luaV_funcref_len(lua_State *L)
++ {
++ luaV_Funcref *f = (luaV_Funcref *) lua_touserdata(L, 1);
++
++ lua_pushstring(L, (const char *) f->tv.vval.v_string);
++ return 1;
++ }
++
++ static int
++ luaV_funcref_call(lua_State *L)
++ {
++ luaV_Funcref *f = (luaV_Funcref *) lua_touserdata(L, 1);
++ int i, n = lua_gettop(L) - 1; /* #args */
++ int status;
++ typval_T v, rettv;
++
++ f->args.vval.v_list = list_alloc();
++ rettv.v_type = VAR_UNKNOWN; /* as in clear_tv */
++ for (i = 0; i < n; i++) {
++ luaV_checktypval(L, i + 2, &v, "calling funcref");
++ list_append_tv(f->args.vval.v_list, &v);
++ }
++ status = func_call(f->tv.vval.v_string, &f->args, NULL, f->self, &rettv);
++ if (status == OK)
++ luaV_pushtypval(L, &rettv);
++ clear_tv(&f->args);
++ clear_tv(&rettv);
++ if (status != OK)
++ luaL_error(L, "cannot call funcref");
++ return 1;
++ }
++
++ static const luaL_Reg luaV_Funcref_mt[] = {
++ {"__tostring", luaV_funcref_tostring},
++ {"__gc", luaV_funcref_gc},
++ {"__len", luaV_funcref_len},
++ {"__call", luaV_funcref_call},
++ {NULL, NULL}
++ };
++
++
+ /* ======= Buffer type ======= */
+
+ luaV_newtype(buf_T, buffer, luaV_Buffer, LUAVIM_BUFFER)
+***************
+*** 1033,1039 ****
+ curbuf = buf;
+ luaL_error(L, "cannot delete line");
+ }
+! else {
+ deleted_lines_mark(n, 1L);
+ if (b == curwin->w_buffer) /* fix cursor in current window? */
+ {
+--- 1169,1176 ----
+ curbuf = buf;
+ luaL_error(L, "cannot delete line");
+ }
+! else
+! {
+ deleted_lines_mark(n, 1L);
+ if (b == curwin->w_buffer) /* fix cursor in current window? */
+ {
+***************
+*** 1371,1392 ****
+ static int
+ luaV_list(lua_State *L)
+ {
+! list_T *l = list_alloc();
+ if (l == NULL)
+ lua_pushnil(L);
+ else
+ luaV_newlist(L, l);
+ return 1;
+ }
+
+ static int
+ luaV_dict(lua_State *L)
+ {
+! dict_T *d = dict_alloc();
+ if (d == NULL)
+ lua_pushnil(L);
+ else
+ luaV_newdict(L, d);
+ return 1;
+ }
+
+--- 1508,1591 ----
+ static int
+ luaV_list(lua_State *L)
+ {
+! list_T *l;
+! int initarg = !lua_isnoneornil(L, 1);
+!
+! if (initarg && lua_type(L, 1) != LUA_TTABLE)
+! luaL_error(L, "table expected, got %s", luaL_typename(L, 1));
+! l = list_alloc();
+ if (l == NULL)
+ lua_pushnil(L);
+ else
++ {
+ luaV_newlist(L, l);
++ if (initarg) { /* traverse table to init dict */
++ int notnil, i = 0;
++ typval_T v;
++ do {
++ lua_rawgeti(L, 1, ++i);
++ notnil = !lua_isnil(L, -1);
++ if (notnil) {
++ luaV_checktypval(L, -1, &v, "vim.list");
++ list_append_tv(l, &v);
++ }
++ lua_pop(L, 1); /* value */
++ } while (notnil);
++ }
++ }
+ return 1;
+ }
+
+ static int
+ luaV_dict(lua_State *L)
+ {
+! dict_T *d;
+! int initarg = !lua_isnoneornil(L, 1);
+!
+! if (initarg && lua_type(L, 1) != LUA_TTABLE)
+! luaL_error(L, "table expected, got %s", luaL_typename(L, 1));
+! d = dict_alloc();
+ if (d == NULL)
+ lua_pushnil(L);
+ else
++ {
+ luaV_newdict(L, d);
++ if (initarg) /* traverse table to init dict */
++ {
++ lua_pushnil(L);
++ while (lua_next(L, 1))
++ {
++ char_u *key;
++ dictitem_T *di;
++ typval_T v;
++ lua_pushvalue(L, -2); /* dup key in case it's a number */
++ key = (char_u *) lua_tostring(L, -1);
++ if (key != NULL && *key == NUL)
++ luaL_error(L, "table has empty key");
++ luaV_checktypval(L, -2, &v, "vim.dict"); /* value */
++ di = dictitem_alloc(key);
++ if (di == NULL || dict_add(d, di) == FAIL) {
++ vim_free(di);
++ lua_pushnil(L);
++ return 1;
++ }
++ copy_tv(&v, &di->di_tv);
++ clear_tv(&v);
++ lua_pop(L, 2); /* key copy and value */
++ }
++ }
++ }
++ return 1;
++ }
++
++ static int
++ luaV_funcref(lua_State *L)
++ {
++ const char *name = luaL_checkstring(L, 1);
++ /* note: not checking if function exists (needs function_exists) */
++ if (name == NULL || *name == NUL || VIM_ISDIGIT(*name))
++ luaL_error(L, "invalid function name: %s", name);
++ luaV_newfuncref(L, (char_u *) name);
+ return 1;
+ }
+
+***************
+*** 1402,1408 ****
+ FOR_ALL_BUFFERS(buf)
+ if (buf->b_fnum == n) break;
+ }
+! else { /* by name */
+ size_t l;
+ const char *s = lua_tolstring(L, 1, &l);
+ FOR_ALL_BUFFERS(buf)
+--- 1601,1608 ----
+ FOR_ALL_BUFFERS(buf)
+ if (buf->b_fnum == n) break;
+ }
+! else // by name
+! {
+ size_t l;
+ const char *s = lua_tolstring(L, 1, &l);
+ FOR_ALL_BUFFERS(buf)
+***************
+*** 1472,1477 ****
+--- 1672,1683 ----
+ lua_pushstring(L, "dict");
+ return 1;
+ }
++ luaV_getfield(L, LUAVIM_FUNCREF);
++ if (lua_rawequal(L, -1, 2))
++ {
++ lua_pushstring(L, "funcref");
++ return 1;
++ }
+ luaV_getfield(L, LUAVIM_BUFFER);
+ if (lua_rawequal(L, -1, 2))
+ {
+***************
+*** 1497,1502 ****
+--- 1703,1709 ----
+ {"line", luaV_line},
+ {"list", luaV_list},
+ {"dict", luaV_dict},
++ {"funcref", luaV_funcref},
+ {"buffer", luaV_buffer},
+ {"window", luaV_window},
+ {"open", luaV_open},
+***************
+*** 1537,1543 ****
+ luaV_emsg(L);
+ return 0;
+ }
+! luaV_totypval(L, -1, rettv);
+ return 0;
+ }
+
+--- 1744,1751 ----
+ luaV_emsg(L);
+ return 0;
+ }
+! if (luaV_totypval(L, -1, rettv) == FAIL)
+! EMSG("luaeval: cannot convert value");
+ return 0;
+ }
+
+***************
+*** 1612,1617 ****
+--- 1820,1828 ----
+ luaV_newmetatable(L, LUAVIM_DICT);
+ lua_pushvalue(L, 1);
+ luaV_openlib(L, luaV_Dict_mt, 1);
++ luaV_newmetatable(L, LUAVIM_FUNCREF);
++ lua_pushvalue(L, 1);
++ luaV_openlib(L, luaV_Funcref_mt, 1);
+ luaV_newmetatable(L, LUAVIM_BUFFER);
+ lua_pushvalue(L, 1); /* cache table */
+ luaV_openlib(L, luaV_Buffer_mt, 1);
+*** ../vim-8.1.0133/src/testdir/test_lua.vim 2018-06-30 21:50:16.856674912 +0200
+--- src/testdir/test_lua.vim 2018-07-01 15:00:55.884371772 +0200
+***************
+*** 397,402 ****
+--- 397,425 ----
+ lua str, k, v, d = nil, nil, nil, nil
+ endfunc
+
++ func Test_funcref()
++ function I(x)
++ return a:x
++ endfunction
++ let R = function('I')
++ lua i1 = vim.funcref"I"
++ lua i2 = vim.eval"R"
++ lua msg = "funcref|test|" .. (#i2(i1) == #i1(i2) and "OK" or "FAIL")
++ lua msg = vim.funcref"tr"(msg, "|", " ")
++ call assert_equal("funcref test OK", luaeval('msg'))
++
++ " dict funcref
++ function Mylen() dict
++ return len(self.data)
++ endfunction
++ let l = [0, 1, 2, 3]
++ let mydict = {'data': l}
++ lua d = vim.eval"mydict"
++ lua d.len = vim.funcref"Mylen" -- assign d as 'self'
++ lua res = (d.len() == vim.funcref"len"(vim.eval"l")) and "OK" or "FAIL"
++ call assert_equal("OK", luaeval('res'))
++ endfunc
++
+ " Test vim.type()
+ func Test_type()
+ " The following values are identical to Lua's type function.
+***************
+*** 414,419 ****
+--- 437,443 ----
+ call assert_equal('buffer', luaeval('vim.type(vim.buffer())'))
+ call assert_equal('list', luaeval('vim.type(vim.list())'))
+ call assert_equal('dict', luaeval('vim.type(vim.dict())'))
++ call assert_equal('funcref', luaeval('vim.type(vim.funcref("Test_type"))'))
+ endfunc
+
+ " Test vim.open()
+*** ../vim-8.1.0133/src/version.c 2018-06-30 22:40:39.097551835 +0200
+--- src/version.c 2018-07-01 15:01:56.939951330 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 134,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+162. You go outside and look for a brightness knob to turn down the sun.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0135 b/data/vim/patches/8.1.0135
new file mode 100644
index 000000000..f12030c9f
--- /dev/null
+++ b/data/vim/patches/8.1.0135
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0135
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0135
+Problem: Undo message delays screen update for CTRL-O u.
+Solution: Add smsg_attr_keep(). (closes #3125)
+Files: src/message.c, src/proto.h, src/undo.c
+
+
+*** ../vim-8.1.0134/src/message.c 2018-06-28 14:54:38.764565527 +0200
+--- src/message.c 2018-07-01 16:35:40.549594202 +0200
+***************
+*** 399,404 ****
+--- 399,418 ----
+ return msg_attr(IObuff, attr);
+ }
+
++ int
++ # ifdef __BORLANDC__
++ _RTLENTRYF
++ # endif
++ smsg_attr_keep(int attr, char_u *s, ...)
++ {
++ va_list arglist;
++
++ va_start(arglist, s);
++ vim_vsnprintf((char *)IObuff, IOSIZE, (char *)s, arglist);
++ va_end(arglist);
++ return msg_attr_keep(IObuff, attr, TRUE);
++ }
++
+ #endif
+
+ /*
+*** ../vim-8.1.0134/src/proto.h 2018-04-10 12:40:16.000000000 +0200
+--- src/proto.h 2018-07-01 16:37:05.753116076 +0200
+***************
+*** 119,124 ****
+--- 119,130 ----
+ # ifdef __BORLANDC__
+ _RTLENTRYF
+ # endif
++ smsg_attr_keep(int, char_u *, ...);
++
++ int
++ # ifdef __BORLANDC__
++ _RTLENTRYF
++ # endif
+ vim_snprintf_add(char *, size_t, char *, ...)
+ #ifdef USE_PRINTF_FORMAT_ATTRIBUTE
+ __attribute__((format(printf, 3, 4)))
+*** ../vim-8.1.0134/src/undo.c 2018-06-20 22:37:52.658911284 +0200
+--- src/undo.c 2018-07-01 16:37:22.233023025 +0200
+***************
+*** 2968,2974 ****
+ }
+ #endif
+
+! smsg((char_u *)_("%ld %s; %s #%ld %s"),
+ u_oldcount < 0 ? -u_oldcount : u_oldcount,
+ _(msgstr),
+ did_undo ? _("before") : _("after"),
+--- 2968,2974 ----
+ }
+ #endif
+
+! smsg_attr_keep(0, (char_u *)_("%ld %s; %s #%ld %s"),
+ u_oldcount < 0 ? -u_oldcount : u_oldcount,
+ _(msgstr),
+ did_undo ? _("before") : _("after"),
+*** ../vim-8.1.0134/src/version.c 2018-07-01 15:12:00.224057865 +0200
+--- src/version.c 2018-07-01 16:43:21.810957974 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 135,
+ /**/
+
+
+--
+hundred-and-one symptoms of being an internet addict:
+164. You got out to buy software, instead of going out for a beer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0136 b/data/vim/patches/8.1.0136
new file mode 100644
index 000000000..659431504
--- /dev/null
+++ b/data/vim/patches/8.1.0136
@@ -0,0 +1,342 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0136
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0136
+Problem: Lua tests don't cover new features.
+Solution: Add more tests. (Dominique Pelle, closes #3130)
+Files: runtime/doc/if_lua.txt, src/testdir/test_lua.vim
+
+
+*** ../vim-8.1.0135/runtime/doc/if_lua.txt 2018-05-17 13:41:41.000000000 +0200
+--- runtime/doc/if_lua.txt 2018-07-01 19:45:39.183210699 +0200
+***************
+*** 127,133 ****
+ rules. Example: >
+ :lua t = {math.pi, false, say = 'hi'}
+ :echo luaeval('vim.list(t)')
+! :" [3.141593, 0], 'say' is ignored
+ <
+ vim.dict([arg]) Returns an empty dictionary or, if "arg" is a
+ Lua table, returns a dict d such that d[k] =
+--- 127,133 ----
+ rules. Example: >
+ :lua t = {math.pi, false, say = 'hi'}
+ :echo luaeval('vim.list(t)')
+! :" [3.141593, v:false], 'say' is ignored
+ <
+ vim.dict([arg]) Returns an empty dictionary or, if "arg" is a
+ Lua table, returns a dict d such that d[k] =
+***************
+*** 141,148 ****
+ :" {'say': 'hi'}, numeric keys ignored
+ <
+ vim.funcref({name}) Returns a Funcref to function {name} (see
+! |Funcref|). It is equivalent to Vim's
+! "function". NOT IMPLEMENTED YET
+
+ vim.buffer([arg]) If "arg" is a number, returns buffer with
+ number "arg" in the buffer list or, if "arg"
+--- 141,147 ----
+ :" {'say': 'hi'}, numeric keys ignored
+ <
+ vim.funcref({name}) Returns a Funcref to function {name} (see
+! |Funcref|). It is equivalent to Vim's function().
+
+ vim.buffer([arg]) If "arg" is a number, returns buffer with
+ number "arg" in the buffer list or, if "arg"
+***************
+*** 166,172 ****
+ or window, respectively. Examples: >
+ :lua l = vim.list()
+ :lua print(type(l), vim.type(l))
+! :" userdata list
+ <
+ vim.command({cmd}) Executes the vim (ex-mode) command {cmd}.
+ Examples: >
+--- 165,171 ----
+ or window, respectively. Examples: >
+ :lua l = vim.list()
+ :lua print(type(l), vim.type(l))
+! :" list
+ <
+ vim.command({cmd}) Executes the vim (ex-mode) command {cmd}.
+ Examples: >
+*** ../vim-8.1.0135/src/testdir/test_lua.vim 2018-07-01 15:12:00.224057865 +0200
+--- src/testdir/test_lua.vim 2018-07-01 19:45:39.183210699 +0200
+***************
+*** 124,130 ****
+ lua w2()
+ call assert_equal('Xfoo2', bufname('%'))
+
+! lua w1, w2 = nil, nil
+ %bwipe!
+ endfunc
+
+--- 124,130 ----
+ lua w2()
+ call assert_equal('Xfoo2', bufname('%'))
+
+! lua w1, w2 = nil
+ %bwipe!
+ endfunc
+
+***************
+*** 142,148 ****
+ lua b2()
+ call assert_equal('Xfoo2', bufname('%'))
+
+! lua b1, b2 = nil, nil
+ %bwipe!
+ endfunc
+
+--- 142,148 ----
+ lua b2()
+ call assert_equal('Xfoo2', bufname('%'))
+
+! lua b1, b2, w1, w2 = nil
+ %bwipe!
+ endfunc
+
+***************
+*** 191,197 ****
+ call assert_equal('Xfoo1', luaeval("vim.buffer(" . bn1 . ").name"))
+ call assert_equal('Xfoo2', luaeval("vim.buffer(" . bn2 . ").name"))
+
+! lua bn1, bn2 = nil, nil
+ %bwipe!
+ endfunc
+
+--- 191,197 ----
+ call assert_equal('Xfoo1', luaeval("vim.buffer(" . bn1 . ").name"))
+ call assert_equal('Xfoo2', luaeval("vim.buffer(" . bn2 . ").name"))
+
+! lua bn1, bn2 = nil
+ %bwipe!
+ endfunc
+
+***************
+*** 275,281 ****
+ call assert_equal('Xfoo1', luaeval('vim.buffer().name'))
+ call assert_equal('Xfoo1', bufname('%'))
+
+! lua bn, bp = nil, nil
+ %bwipe!
+ endfunc
+
+--- 275,281 ----
+ call assert_equal('Xfoo1', luaeval('vim.buffer().name'))
+ call assert_equal('Xfoo1', bufname('%'))
+
+! lua bn, bp = nil
+ %bwipe!
+ endfunc
+
+***************
+*** 295,306 ****
+ func Test_list()
+ call assert_equal([], luaeval('vim.list()'))
+
+- " Same example as in :help lua-vim.
+- " FIXME: test is disabled because it does not work.
+- " See https://github.com/vim/vim/issues/3086
+- " lua t = {math.pi, false, say = 'hi'}
+- " call assert_equal([3.141593, 0], luaeval('vim.list(t)'))
+-
+ let l = []
+ lua l = vim.eval('l')
+ lua l:add(123)
+--- 295,300 ----
+***************
+*** 319,327 ****
+--- 313,338 ----
+ lua l:insert('xx', 3)
+ call assert_equal(['first', 124.0, 'abc', 'xx', v:true, v:false, {'a': 1, 'b': 2, 'c': 3}], l)
+
++ lockvar 1 l
++ call assert_fails('lua l:add("x")', '[string "vim chunk"]:1: list is locked')
++
+ lua l = nil
+ endfunc
+
++ func Test_list_table()
++ " See :help lua-vim
++ " Non-numeric keys should not be used to initialize the list
++ " so say = 'hi' should be ignored.
++ lua t = {3.14, 'hello', false, true, say = 'hi'}
++ call assert_equal([3.14, 'hello', v:false, v:true], luaeval('vim.list(t)'))
++ lua t = nil
++
++ call assert_fails('lua vim.list(1)', '[string "vim chunk"]:1: table expected, got number')
++ call assert_fails('lua vim.list("x")', '[string "vim chunk"]:1: table expected, got string')
++ call assert_fails('lua vim.list(print)', '[string "vim chunk"]:1: table expected, got function')
++ call assert_fails('lua vim.list(true)', '[string "vim chunk"]:1: table expected, got boolean')
++ endfunc
++
+ " Test l() i.e. iterator on list
+ func Test_list_iter()
+ lua l = vim.list():add('foo'):add('bar')
+***************
+*** 329,335 ****
+ lua for v in l() do str = str .. v end
+ call assert_equal('foobar', luaeval('str'))
+
+! lua str, v, l = nil, nil, nil
+ endfunc
+
+ func Test_recursive_list()
+--- 340,346 ----
+ lua for v in l() do str = str .. v end
+ call assert_equal('foobar', luaeval('str'))
+
+! lua str, l = nil
+ endfunc
+
+ func Test_recursive_list()
+***************
+*** 359,370 ****
+ func Test_dict()
+ call assert_equal({}, luaeval('vim.dict()'))
+
+- " Same example as in :help lua-vim.
+- " FIXME: test is disabled because it does not work.
+- " See https://github.com/vim/vim/issues/3086
+- " lua t = {math.pi, false, say = 'hi'}
+- " call assert_equal({'say' : 'hi'}, luaeval('vim.dict(t)'))
+-
+ let d = {}
+ lua d = vim.eval('d')
+ lua d[0] = 123
+--- 370,375 ----
+***************
+*** 383,391 ****
+--- 388,419 ----
+ lua d[4] = nil
+ call assert_equal({'0':124.0, '1':'abc', '2':v:true, '3':v:false, '5': {'a':1, 'b':2, 'c':3}}, d)
+
++ lockvar 1 d
++ call assert_fails('lua d[6] = 1', '[string "vim chunk"]:1: dict is locked')
++
+ lua d = nil
+ endfunc
+
++ func Test_dict_table()
++ lua t = {key1 = 'x', key2 = 3.14, key3 = true, key4 = false}
++ call assert_equal({'key1': 'x', 'key2': 3.14, 'key3': v:true, 'key4': v:false},
++ \ luaeval('vim.dict(t)'))
++
++ " Same example as in :help lua-vim.
++ lua t = {math.pi, false, say = 'hi'}
++ " FIXME: commented out as it currently does not work as documented:
++ " Expected {'say': 'hi'}
++ " but got {'1': 3.141593, '2': v:false, 'say': 'hi'}
++ " Is the documentation or the code wrong?
++ "call assert_equal({'say' : 'hi'}, luaeval('vim.dict(t)'))
++ lua t = nil
++
++ call assert_fails('lua vim.dict(1)', '[string "vim chunk"]:1: table expected, got number')
++ call assert_fails('lua vim.dict("x")', '[string "vim chunk"]:1: table expected, got string')
++ call assert_fails('lua vim.dict(print)', '[string "vim chunk"]:1: table expected, got function')
++ call assert_fails('lua vim.dict(true)', '[string "vim chunk"]:1: table expected, got boolean')
++ endfunc
++
+ " Test d() i.e. iterator on dictionary
+ func Test_dict_iter()
+ let d = {'a': 1, 'b':2}
+***************
+*** 394,400 ****
+ lua for k,v in d() do str = str .. k ..':' .. v .. ',' end
+ call assert_equal('a:1,b:2,', luaeval('str'))
+
+! lua str, k, v, d = nil, nil, nil, nil
+ endfunc
+
+ func Test_funcref()
+--- 422,428 ----
+ lua for k,v in d() do str = str .. k ..':' .. v .. ',' end
+ call assert_equal('a:1,b:2,', luaeval('str'))
+
+! lua str, d = nil
+ endfunc
+
+ func Test_funcref()
+***************
+*** 418,423 ****
+--- 446,453 ----
+ lua d.len = vim.funcref"Mylen" -- assign d as 'self'
+ lua res = (d.len() == vim.funcref"len"(vim.eval"l")) and "OK" or "FAIL"
+ call assert_equal("OK", luaeval('res'))
++
++ lua i1, i2, msg, d, res = nil
+ endfunc
+
+ " Test vim.type()
+***************
+*** 496,502 ****
+ call assert_equal('hello', luaeval('str'))
+ call assert_equal(123.0, luaeval('num'))
+
+! lua str, num = nil, nil
+ call delete('Xlua_file')
+ endfunc
+
+--- 526,532 ----
+ call assert_equal('hello', luaeval('str'))
+ call assert_equal(123.0, luaeval('num'))
+
+! lua str, num = nil
+ call delete('Xlua_file')
+ endfunc
+
+***************
+*** 512,518 ****
+ let msg = split(execute('message'), "\n")[-1]
+ call assert_equal('str=foo, num=321', msg)
+
+! lua str, num = nil, nil
+ call delete('Xlua_file')
+ bwipe!
+ endfunc
+--- 542,560 ----
+ let msg = split(execute('message'), "\n")[-1]
+ call assert_equal('str=foo, num=321', msg)
+
+! lua str, num = nil
+! call delete('Xlua_file')
+! bwipe!
+! endfunc
+!
+! " Test :luafile with syntax error
+! func Test_luafile_error()
+! new Xlua_file
+! call writefile(['nil = 0' ], 'Xlua_file')
+! call setfperm('Xlua_file', 'r-xr-xr-x')
+!
+! call assert_fails('luafile Xlua_file', "Xlua_file:1: unexpected symbol near 'nil'")
+!
+ call delete('Xlua_file')
+ bwipe!
+ endfunc
+*** ../vim-8.1.0135/src/version.c 2018-07-01 16:43:59.850736541 +0200
+--- src/version.c 2018-07-01 19:47:47.126402301 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 136,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+165. You have a web page burned into your glasses
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0137 b/data/vim/patches/8.1.0137
new file mode 100644
index 000000000..22e45b23d
--- /dev/null
+++ b/data/vim/patches/8.1.0137
@@ -0,0 +1,137 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0137
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0137
+Problem: CI does not run with TCL.
+Solution: Add TCL to the travis config. (Dominique Pelle, closes #3133)
+Files: .travis.yml
+
+
+*** ../vim-8.1.0136/.travis.yml 2018-04-12 20:05:02.000000000 +0200
+--- .travis.yml 2018-07-01 21:11:02.830191643 +0200
+***************
+*** 11,28 ****
+
+ env:
+ - BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp'"
+ - BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=normal CONFOPT= SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow CHECK_AUTOCONF=no
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=tiny CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ # Mac OSX build
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'"
+ # ASAN build
+ - BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
+ FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'"
+
+ sudo: false
+
+--- 11,28 ----
+
+ env:
+ - BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+ - BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=normal CONFOPT= SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow CHECK_AUTOCONF=no
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=tiny CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ # Mac OSX build
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+ # ASAN build
+ - BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
+ FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+
+ sudo: false
+
+***************
+*** 39,54 ****
+ env: BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ - os: osx
+ env: BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp'"
+ - os: osx
+ env: BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
+ FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'"
+ - os: linux
+ compiler: clang
+ env: BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
+ FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'"
+ - os: linux
+ compiler: clang
+ env: BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
+--- 39,54 ----
+ env: BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ - os: osx
+ env: BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+ - os: osx
+ env: BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
+ FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+ - os: linux
+ compiler: clang
+ env: BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
+ FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+ - os: linux
+ compiler: clang
+ env: BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
+***************
+*** 57,63 ****
+ env: BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ - os: linux
+ env: BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'"
+
+ branches:
+ except:
+--- 57,63 ----
+ env: BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ - os: linux
+ env: BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+
+ branches:
+ except:
+***************
+*** 75,80 ****
+--- 75,81 ----
+ - liblua5.2-dev
+ - lua5.2
+ - ruby-dev
++ - tcl-dev
+ - cscope
+ - libgtk2.0-dev
+
+*** ../vim-8.1.0136/src/version.c 2018-07-01 19:49:23.605793273 +0200
+--- src/version.c 2018-07-01 21:12:17.361760352 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 137,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+166. You have been on your computer soo long that you didn't realize
+ you had grandchildren.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0138 b/data/vim/patches/8.1.0138
new file mode 100644
index 000000000..14beff0f8
--- /dev/null
+++ b/data/vim/patches/8.1.0138
@@ -0,0 +1,153 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0138
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0138
+Problem: Negative value of 'softtabstop' not used correctly.
+Solution: Use get_sts_value(). (Tom Ryder)
+Files: src/edit.c, src/option.c, src/Makefile, src/testdir/test_tab.vim
+
+
+*** ../vim-8.1.0137/src/edit.c 2018-06-23 19:22:45.602486336 +0200
+--- src/edit.c 2018-07-02 20:48:14.924888068 +0200
+***************
+*** 9373,9379 ****
+ if (p_sta && in_indent)
+ want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw;
+ else
+! want_vcol = tabstop_start(want_vcol, curbuf->b_p_sts,
+ curbuf->b_p_vsts_array);
+ #else
+ want_vcol = (want_vcol / ts) * ts;
+--- 9373,9379 ----
+ if (p_sta && in_indent)
+ want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw;
+ else
+! want_vcol = tabstop_start(want_vcol, get_sts_value(),
+ curbuf->b_p_vsts_array);
+ #else
+ want_vcol = (want_vcol / ts) * ts;
+***************
+*** 10203,10211 ****
+ temp = (int)curbuf->b_p_sw;
+ temp -= get_nolist_virtcol() % temp;
+ }
+! else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts > 0)
+ /* use 'softtabstop' when set */
+! temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_sts,
+ curbuf->b_p_vsts_array);
+ else /* otherwise use 'tabstop' */
+ temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_ts,
+--- 10203,10211 ----
+ temp = (int)curbuf->b_p_sw;
+ temp -= get_nolist_virtcol() % temp;
+ }
+! else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts != 0)
+ /* use 'softtabstop' when set */
+! temp = tabstop_padding(get_nolist_virtcol(), get_sts_value(),
+ curbuf->b_p_vsts_array);
+ else /* otherwise use 'tabstop' */
+ temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_ts,
+*** ../vim-8.1.0137/src/option.c 2018-06-28 22:22:56.229315623 +0200
+--- src/option.c 2018-07-02 20:21:42.957136087 +0200
+***************
+*** 13016,13022 ****
+
+ /*
+ * Return the effective softtabstop value for the current buffer, using the
+! * 'tabstop' value when 'softtabstop' is negative.
+ */
+ long
+ get_sts_value(void)
+--- 13016,13022 ----
+
+ /*
+ * Return the effective softtabstop value for the current buffer, using the
+! * 'shiftwidth' value when 'softtabstop' is negative.
+ */
+ long
+ get_sts_value(void)
+*** ../vim-8.1.0137/src/Makefile 2018-06-30 21:50:16.852674935 +0200
+--- src/Makefile 2018-07-02 20:29:59.606438353 +0200
+***************
+*** 2288,2293 ****
+--- 2288,2294 ----
+ test_syn_attr \
+ test_syntax \
+ test_system \
++ test_tab \
+ test_tabline \
+ test_tabpage \
+ test_tagcase \
+*** ../vim-8.1.0137/src/testdir/test_tab.vim 2017-10-26 19:57:28.000000000 +0200
+--- src/testdir/test_tab.vim 2018-07-02 20:47:37.277090611 +0200
+***************
+*** 1,3 ****
+--- 1,4 ----
++ " Various tests for inserting a Tab.
+
+ " Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
+ " Also test that dv_ works correctly
+***************
+*** 43,45 ****
+--- 44,81 ----
+ enew!
+ set expandtab& smartindent& copyindent& ts& sw& sts&
+ endfunc
++
++ func Test_softtabstop()
++ new
++ set sts=0 sw=0
++ exe "normal ix\<Tab>x\<Esc>"
++ call assert_equal("x\tx", getline(1))
++
++ call setline(1, '')
++ set sts=4
++ exe "normal ix\<Tab>x\<Esc>"
++ call assert_equal("x x", getline(1))
++
++ call setline(1, '')
++ set sts=-1 sw=4
++ exe "normal ix\<Tab>x\<Esc>"
++ call assert_equal("x x", getline(1))
++
++ call setline(1, 'x ')
++ set sts=0 sw=0 backspace=start
++ exe "normal A\<BS>x\<Esc>"
++ call assert_equal("x x", getline(1))
++
++ call setline(1, 'x ')
++ set sts=4
++ exe "normal A\<BS>x\<Esc>"
++ call assert_equal("x x", getline(1))
++
++ call setline(1, 'x ')
++ set sts=-1 sw=4
++ exe "normal A\<BS>x\<Esc>"
++ call assert_equal("x x", getline(1))
++
++ set sts=0 sw=0 backspace&
++ bwipe!
++ endfunc
+*** ../vim-8.1.0137/src/version.c 2018-07-01 21:12:49.765572778 +0200
+--- src/version.c 2018-07-02 20:19:59.125722660 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 138,
+ /**/
+
+--
+"Hit any key to continue" is very confusing when you have two keyboards.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0139 b/data/vim/patches/8.1.0139
new file mode 100644
index 000000000..69bdcfc6f
--- /dev/null
+++ b/data/vim/patches/8.1.0139
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0139
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0139
+Problem: Lua tests fail on some platforms.
+Solution: Accept a hex number with and without "0x". (Ken Takata,
+ closes #3137)
+Files: src/testdir/test_lua.vim
+
+
+*** ../vim-8.1.0138/src/testdir/test_lua.vim 2018-07-01 19:49:23.605793273 +0200
+--- src/testdir/test_lua.vim 2018-07-02 22:51:02.549409377 +0200
+***************
+*** 305,311 ****
+ lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}"))
+ call assert_equal([123.0, 'abc', v:true, v:false, [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}], l)
+ call assert_equal(6.0, luaeval('#l'))
+! call assert_match('^list: 0x\x\+$', luaeval('tostring(l)'))
+
+ lua l[0] = 124
+ lua l[4] = nil
+--- 305,311 ----
+ lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}"))
+ call assert_equal([123.0, 'abc', v:true, v:false, [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}], l)
+ call assert_equal(6.0, luaeval('#l'))
+! call assert_match('^list: \%(0x\)\?\x\+$', luaeval('tostring(l)'))
+
+ lua l[0] = 124
+ lua l[4] = nil
+***************
+*** 358,364 ****
+
+ call assert_equal('[1.0, 2.0, [...]]', string(luaeval('l')))
+
+! call assert_match('^list: 0x\x\+$', luaeval('tostring(l)'))
+ call assert_equal(luaeval('tostring(l)'), luaeval('tostring(l[2])'))
+
+ call assert_equal(luaeval('l'), luaeval('l[2]'))
+--- 358,364 ----
+
+ call assert_equal('[1.0, 2.0, [...]]', string(luaeval('l')))
+
+! call assert_match('^list: \%(0x\)\?\x\+$', luaeval('tostring(l)'))
+ call assert_equal(luaeval('tostring(l)'), luaeval('tostring(l[2])'))
+
+ call assert_equal(luaeval('l'), luaeval('l[2]'))
+***************
+*** 380,386 ****
+ lua d[5] = vim.eval("{'a':1, 'b':2, 'c':3}")
+ call assert_equal({'0':123.0, '1':'abc', '2':v:true, '3':v:false, '4': [1, 2, 3], '5': {'a':1, 'b':2, 'c':3}}, d)
+ call assert_equal(6.0, luaeval('#d'))
+! call assert_match('^dict: 0x\x\+$', luaeval('tostring(d)'))
+
+ call assert_equal('abc', luaeval('d[1]'))
+
+--- 380,386 ----
+ lua d[5] = vim.eval("{'a':1, 'b':2, 'c':3}")
+ call assert_equal({'0':123.0, '1':'abc', '2':v:true, '3':v:false, '4': [1, 2, 3], '5': {'a':1, 'b':2, 'c':3}}, d)
+ call assert_equal(6.0, luaeval('#d'))
+! call assert_match('^dict: \%(0x\)\?\x\+$', luaeval('tostring(d)'))
+
+ call assert_equal('abc', luaeval('d[1]'))
+
+*** ../vim-8.1.0138/src/version.c 2018-07-02 20:51:21.035882093 +0200
+--- src/version.c 2018-07-02 22:52:54.644808570 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 139,
+ /**/
+
+--
+An error has occurred. Hit any user to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0140 b/data/vim/patches/8.1.0140
new file mode 100644
index 000000000..cbf5b77b1
--- /dev/null
+++ b/data/vim/patches/8.1.0140
@@ -0,0 +1,108 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0140
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0140
+Problem: Recording into a register has focus events. (Michael Naumann)
+Solution: Don't record K_FOCUSGAINED and K_FOCUSLOST. (closes #3143)
+Files: src/getchar.c
+
+
+*** ../vim-8.1.0139/src/getchar.c 2018-06-12 21:35:37.518665900 +0200
+--- src/getchar.c 2018-07-03 14:44:36.364310432 +0200
+***************
+*** 1246,1272 ****
+ static void
+ gotchars(char_u *chars, int len)
+ {
+! char_u *s = chars;
+! int c;
+! char_u buf[2];
+! int todo = len;
+
+- /* remember how many chars were last recorded */
+- if (reg_recording != 0)
+- last_recorded_len += len;
+-
+- buf[1] = NUL;
+ while (todo--)
+ {
+ /* Handle one byte at a time; no translation to be done. */
+! c = *s++;
+! updatescript(c);
+
+ if (reg_recording != 0)
+ {
+! buf[0] = c;
+! add_buff(&recordbuff, buf, 1L);
+ }
+ }
+ may_sync_undo();
+
+--- 1246,1288 ----
+ static void
+ gotchars(char_u *chars, int len)
+ {
+! char_u *s = chars;
+! int i;
+! static char_u buf[4];
+! static int buflen = 0;
+! int todo = len;
+
+ while (todo--)
+ {
++ buf[buflen++] = *s++;
++
++ // When receiving a special key sequence, store it until we have all
++ // the bytes and we can decide what to do with it.
++ if (buflen == 1 && buf[0] == K_SPECIAL)
++ continue;
++ if (buflen == 2)
++ continue;
++ if (buflen == 3 && buf[1] == KS_EXTRA
++ && (buf[2] == KE_FOCUSGAINED || buf[2] == KE_FOCUSLOST))
++ {
++ // Drop K_FOCUSGAINED and K_FOCUSLOST, they are not useful in a
++ // recording.
++ buflen = 0;
++ continue;
++ }
++
+ /* Handle one byte at a time; no translation to be done. */
+! for (i = 0; i < buflen; ++i)
+! updatescript(buf[i]);
+
+ if (reg_recording != 0)
+ {
+! buf[buflen] = NUL;
+! add_buff(&recordbuff, buf, (long)buflen);
+! /* remember how many chars were last recorded */
+! last_recorded_len += buflen;
+ }
++ buflen = 0;
+ }
+ may_sync_undo();
+
+*** ../vim-8.1.0139/src/version.c 2018-07-02 22:54:32.488278811 +0200
+--- src/version.c 2018-07-03 14:40:15.567864170 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 140,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+171. You invent another person and chat with yourself in empty chat rooms.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0141 b/data/vim/patches/8.1.0141
new file mode 100644
index 000000000..40b1a6775
--- /dev/null
+++ b/data/vim/patches/8.1.0141
@@ -0,0 +1,558 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0141
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0141
+Problem: :cexpr no longer jumps to the first error.
+Solution: Use the quickfix list identifier. (Yegappan Lakshmanan,
+ closes #3092)
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0140/src/quickfix.c 2018-06-18 21:53:23.514826893 +0200
+--- src/quickfix.c 2018-07-03 16:50:52.302649159 +0200
+***************
+*** 2231,2237 ****
+ }
+
+ /*
+! * When loading a file from the quickfix, the auto commands may modify it.
+ * This may invalidate the current quickfix entry. This function checks
+ * whether an entry is still present in the quickfix list.
+ * Similar to location list.
+--- 2231,2237 ----
+ }
+
+ /*
+! * When loading a file from the quickfix, the autocommands may modify it.
+ * This may invalidate the current quickfix entry. This function checks
+ * whether an entry is still present in the quickfix list.
+ * Similar to location list.
+***************
+*** 2579,2585 ****
+ if (win->w_llist == NULL)
+ {
+ win->w_llist = ll_ref;
+! ll_ref->qf_refcount++;
+ }
+ }
+
+--- 2579,2586 ----
+ if (win->w_llist == NULL)
+ {
+ win->w_llist = ll_ref;
+! if (ll_ref != NULL)
+! ll_ref->qf_refcount++;
+ }
+ }
+
+***************
+*** 2986,2993 ****
+ if (curbuf == old_curbuf)
+ setpcmark();
+
+! qf_jump_goto_line(qf_ptr->qf_lnum, qf_ptr->qf_col, qf_ptr->qf_viscol,
+! qf_ptr->qf_pattern);
+
+ #ifdef FEAT_FOLDING
+ if ((fdo_flags & FDO_QUICKFIX) && old_KeyTyped)
+--- 2987,2995 ----
+ if (curbuf == old_curbuf)
+ setpcmark();
+
+! if (qf_ptr != NULL)
+! qf_jump_goto_line(qf_ptr->qf_lnum, qf_ptr->qf_col,
+! qf_ptr->qf_viscol, qf_ptr->qf_pattern);
+
+ #ifdef FEAT_FOLDING
+ if ((fdo_flags & FDO_QUICKFIX) && old_KeyTyped)
+***************
+*** 4056,4061 ****
+--- 4058,4078 ----
+ }
+
+ /*
++ * Return the quickfix/location list number with the given identifier.
++ * Returns -1 if list is not found.
++ */
++ static int
++ qf_id2nr(qf_info_T *qi, int_u qfid)
++ {
++ int qf_idx;
++
++ for (qf_idx = 0; qf_idx < qi->qf_listcount; qf_idx++)
++ if (qi->qf_lists[qf_idx].qf_id == qfid)
++ return qf_idx;
++ return INVALID_QFIDX;
++ }
++
++ /*
+ * Return TRUE when using ":vimgrep" for ":grep".
+ */
+ int
+***************
+*** 4083,4088 ****
+--- 4100,4106 ----
+ qf_info_T *qi = &ql_info;
+ int res;
+ char_u *au_name = NULL;
++ int_u save_qfid;
+
+ /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
+ if (grep_internal(eap->cmdidx))
+***************
+*** 4161,4181 ****
+ && eap->cmdidx != CMD_lgrepadd),
+ qf_cmdtitle(*eap->cmdlinep), enc);
+ if (wp != NULL)
+ qi = GET_LOC_LIST(wp);
+! if (res >= 0 && qi != NULL)
+ qf_list_changed(qi, qi->qf_curlist);
+ if (au_name != NULL)
+- {
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+! if (qi != NULL && qi->qf_curlist < qi->qf_listcount)
+! res = qi->qf_lists[qi->qf_curlist].qf_count;
+! else
+! res = 0;
+! }
+! if (res > 0 && !eap->forceit)
+ qf_jump(qi, 0, 0, FALSE); /* display first error */
+
+ mch_remove(fname);
+ vim_free(fname);
+ vim_free(cmd);
+--- 4179,4206 ----
+ && eap->cmdidx != CMD_lgrepadd),
+ qf_cmdtitle(*eap->cmdlinep), enc);
+ if (wp != NULL)
++ {
+ qi = GET_LOC_LIST(wp);
+! if (qi == NULL)
+! goto cleanup;
+! }
+! if (res >= 0)
+ qf_list_changed(qi, qi->qf_curlist);
++ // Remember the current quickfix list identifier, so that we can
++ // check for autocommands changing the current quickfix list.
++ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+! if (res > 0 && !eap->forceit && qflist_valid(wp, save_qfid))
+! {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+ qf_jump(qi, 0, 0, FALSE); /* display first error */
++ }
+
++ cleanup:
+ mch_remove(fname);
+ vim_free(fname);
+ vim_free(cmd);
+***************
+*** 4502,4508 ****
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
+ char_u *au_name = NULL;
+! int save_qfid = 0; /* init for gcc */
+ int res;
+
+ switch (eap->cmdidx)
+--- 4527,4533 ----
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
+ char_u *au_name = NULL;
+! int_u save_qfid = 0; /* init for gcc */
+ int res;
+
+ switch (eap->cmdidx)
+***************
+*** 4555,4589 ****
+ && eap->cmdidx != CMD_laddfile),
+ qf_cmdtitle(*eap->cmdlinep), enc);
+ if (wp != NULL)
+ qi = GET_LOC_LIST(wp);
+! if (res >= 0 && qi != NULL)
+ qf_list_changed(qi, qi->qf_curlist);
+! if (qi != NULL)
+! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
+
+! /* An autocmd might have freed the quickfix/location list. Check whether it
+! * is still valid. */
+! if (qi != NULL && !qflist_valid(wp, save_qfid))
+! return;
+! if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile))
+ qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+! }
+!
+! /*
+! * Return the quickfix/location list number with the given identifier.
+! * Returns -1 if list is not found.
+! */
+! static int
+! qf_id2nr(qf_info_T *qi, int_u qfid)
+! {
+! int qf_idx;
+!
+! for (qf_idx = 0; qf_idx < qi->qf_listcount; qf_idx++)
+! if (qi->qf_lists[qf_idx].qf_id == qfid)
+! return qf_idx;
+! return INVALID_QFIDX;
+ }
+
+ /*
+--- 4580,4606 ----
+ && eap->cmdidx != CMD_laddfile),
+ qf_cmdtitle(*eap->cmdlinep), enc);
+ if (wp != NULL)
++ {
+ qi = GET_LOC_LIST(wp);
+! if (qi == NULL)
+! return;
+! }
+! if (res >= 0)
+ qf_list_changed(qi, qi->qf_curlist);
+! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
+
+! // Jump to the first error for a new list and if autocmds didn't
+! // free the list.
+! if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile)
+! && qflist_valid(wp, save_qfid))
+! {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+ qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+! }
+ }
+
+ /*
+***************
+*** 5070,5075 ****
+--- 5087,5096 ----
+ if (!qflist_valid(wp, save_qfid))
+ goto theend;
+
++ // If autocommands changed the current list, then restore it
++ if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
++ qi->qf_curlist = qf_id2nr(qi, save_qfid);
++
+ /* Jump to first match. */
+ if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
+ {
+***************
+*** 5162,5168 ****
+ /* need to open the memfile before putting the buffer in a window */
+ if (ml_open(newbuf) == OK)
+ {
+! /* Make sure this buffer isn't wiped out by auto commands. */
+ ++newbuf->b_locked;
+
+ /* set curwin/curbuf to buf and save a few things */
+--- 5183,5189 ----
+ /* need to open the memfile before putting the buffer in a window */
+ if (ml_open(newbuf) == OK)
+ {
+! /* Make sure this buffer isn't wiped out by autocommands. */
+ ++newbuf->b_locked;
+
+ /* set curwin/curbuf to buf and save a few things */
+***************
+*** 6205,6210 ****
+--- 6226,6233 ----
+ qf_info_T *qi = &ql_info;
+ char_u *au_name = NULL;
+ int res;
++ int_u save_qfid;
++ win_T *wp = NULL;
+
+ switch (eap->cmdidx)
+ {
+***************
+*** 6233,6238 ****
+--- 6256,6262 ----
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+ return;
++ wp = curwin;
+ }
+
+ if (*eap->arg == NUL)
+***************
+*** 6271,6276 ****
+--- 6295,6304 ----
+ qf_title, NULL);
+ if (res >= 0)
+ qf_list_changed(qi, qi->qf_curlist);
++
++ // Remember the current quickfix list identifier, so that we can
++ // check for autocommands changing the current quickfix list.
++ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+ if (au_name != NULL)
+ {
+ buf_T *curbuf_old = curbuf;
+***************
+*** 6282,6290 ****
+ // be invalid.
+ res = 0;
+ }
+ if (res > 0 && (eap->cmdidx == CMD_cbuffer ||
+! eap->cmdidx == CMD_lbuffer))
+ qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+ }
+ }
+ }
+--- 6310,6326 ----
+ // be invalid.
+ res = 0;
+ }
++ // Jump to the first error for a new list and if autocmds didn't
++ // free the list.
+ if (res > 0 && (eap->cmdidx == CMD_cbuffer ||
+! eap->cmdidx == CMD_lbuffer)
+! && qflist_valid(wp, save_qfid))
+! {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+ qf_jump(qi, 0, 0, eap->forceit); /* display first error */
++ }
+ }
+ }
+ }
+***************
+*** 6301,6306 ****
+--- 6337,6344 ----
+ qf_info_T *qi = &ql_info;
+ char_u *au_name = NULL;
+ int res;
++ int_u save_qfid;
++ win_T *wp = NULL;
+
+ switch (eap->cmdidx)
+ {
+***************
+*** 6328,6333 ****
+--- 6366,6372 ----
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+ return;
++ wp = curwin;
+ }
+
+ /* Evaluate the expression. When the result is a string or a list we can
+***************
+*** 6345,6358 ****
+ qf_cmdtitle(*eap->cmdlinep), NULL);
+ if (res >= 0)
+ qf_list_changed(qi, qi->qf_curlist);
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+ if (res > 0 && (eap->cmdidx == CMD_cexpr
+ || eap->cmdidx == CMD_lexpr)
+! && qi == GET_LOC_LIST(curwin))
+! // Jump to the first error if autocmds didn't free the list.
+ qf_jump(qi, 0, 0, eap->forceit);
+ }
+ else
+ EMSG(_("E777: String or List expected"));
+--- 6384,6408 ----
+ qf_cmdtitle(*eap->cmdlinep), NULL);
+ if (res >= 0)
+ qf_list_changed(qi, qi->qf_curlist);
++
++ // Remember the current quickfix list identifier, so that we can
++ // check for autocommands changing the current quickfix list.
++ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
++
++ // Jump to the first error for a new list and if autocmds didn't
++ // free the list.
+ if (res > 0 && (eap->cmdidx == CMD_cexpr
+ || eap->cmdidx == CMD_lexpr)
+! && qflist_valid(wp, save_qfid))
+! {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+ qf_jump(qi, 0, 0, eap->forceit);
++ }
+ }
+ else
+ EMSG(_("E777: String or List expected"));
+*** ../vim-8.1.0140/src/testdir/test_quickfix.vim 2018-06-18 20:52:09.553050181 +0200
+--- src/testdir/test_quickfix.vim 2018-07-03 16:50:52.302649159 +0200
+***************
+*** 3363,3375 ****
+ augroup END
+ endfunc
+
+! func Test_setloclist_in_aucmd()
+ " This was using freed memory.
+ augroup nasty
+! au * * call setloclist(0, [], 'f')
+ augroup END
+! lexpr "x"
+ augroup nasty
+ au!
+ augroup END
+ endfunc
+--- 3363,3486 ----
+ augroup END
+ endfunc
+
+! " Test for an autocmd freeing the quickfix/location list when cexpr/lexpr is
+! " running
+! func Xexpr_acmd_freelist(cchar)
+! call s:setup_commands(a:cchar)
+!
+ " This was using freed memory.
+ augroup nasty
+! au * * call g:Xsetlist([], 'f')
+ augroup END
+! Xexpr "x"
+ augroup nasty
+ au!
+ augroup END
+ endfunc
++
++ func Test_cexpr_acmd_freelist()
++ call Xexpr_acmd_freelist('c')
++ call Xexpr_acmd_freelist('l')
++ endfunc
++
++ " Test for commands that create a new quickfix/location list and jump to the
++ " first error automatically.
++ func Xjumpto_first_error_test(cchar)
++ call s:setup_commands(a:cchar)
++
++ call s:create_test_file('Xtestfile1')
++ call s:create_test_file('Xtestfile2')
++ let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4']
++
++ " Test for cexpr/lexpr
++ enew
++ Xexpr l
++ call assert_equal('Xtestfile1', bufname(''))
++ call assert_equal(2, line('.'))
++
++ " Test for cfile/lfile
++ enew
++ call writefile(l, 'Xerr')
++ Xfile Xerr
++ call assert_equal('Xtestfile1', bufname(''))
++ call assert_equal(2, line('.'))
++
++ " Test for cbuffer/lbuffer
++ edit Xerr
++ Xbuffer
++ call assert_equal('Xtestfile1', bufname(''))
++ call assert_equal(2, line('.'))
++
++ call delete('Xerr')
++ call delete('Xtestfile1')
++ call delete('Xtestfile2')
++ endfunc
++
++ func Test_jumpto_first_error()
++ call Xjumpto_first_error_test('c')
++ call Xjumpto_first_error_test('l')
++ endfunc
++
++ " Test for a quickfix autocmd changing the quickfix/location list before
++ " jumping to the first error in the new list.
++ func Xautocmd_changelist(cchar)
++ call s:setup_commands(a:cchar)
++
++ " Test for cfile/lfile
++ call s:create_test_file('Xtestfile1')
++ call s:create_test_file('Xtestfile2')
++ Xexpr 'Xtestfile1:2:Line2'
++ autocmd QuickFixCmdPost * Xolder
++ call writefile(['Xtestfile2:4:Line4'], 'Xerr')
++ Xfile Xerr
++ call assert_equal('Xtestfile2', bufname(''))
++ call assert_equal(4, line('.'))
++ autocmd! QuickFixCmdPost
++
++ " Test for cbuffer/lbuffer
++ call g:Xsetlist([], 'f')
++ Xexpr 'Xtestfile1:2:Line2'
++ autocmd QuickFixCmdPost * Xolder
++ call writefile(['Xtestfile2:4:Line4'], 'Xerr')
++ edit Xerr
++ Xbuffer
++ call assert_equal('Xtestfile2', bufname(''))
++ call assert_equal(4, line('.'))
++ autocmd! QuickFixCmdPost
++
++ " Test for cexpr/lexpr
++ call g:Xsetlist([], 'f')
++ Xexpr 'Xtestfile1:2:Line2'
++ autocmd QuickFixCmdPost * Xolder
++ Xexpr 'Xtestfile2:4:Line4'
++ call assert_equal('Xtestfile2', bufname(''))
++ call assert_equal(4, line('.'))
++ autocmd! QuickFixCmdPost
++
++ " Test for grep/lgrep
++ call g:Xsetlist([], 'f')
++ Xexpr 'Xtestfile1:2:Line2'
++ autocmd QuickFixCmdPost * Xolder
++ silent Xgrep Line5 Xtestfile2
++ call assert_equal('Xtestfile2', bufname(''))
++ call assert_equal(5, line('.'))
++ autocmd! QuickFixCmdPost
++
++ " Test for vimgrep/lvimgrep
++ call g:Xsetlist([], 'f')
++ Xexpr 'Xtestfile1:2:Line2'
++ autocmd QuickFixCmdPost * Xolder
++ silent Xvimgrep Line5 Xtestfile2
++ call assert_equal('Xtestfile2', bufname(''))
++ call assert_equal(5, line('.'))
++ autocmd! QuickFixCmdPost
++
++ call delete('Xerr')
++ call delete('Xtestfile1')
++ call delete('Xtestfile2')
++ endfunc
++
++ func Test_autocmd_changelist()
++ call Xautocmd_changelist('c')
++ call Xautocmd_changelist('l')
++ endfunc
+*** ../vim-8.1.0140/src/version.c 2018-07-03 14:48:11.877218375 +0200
+--- src/version.c 2018-07-03 16:50:31.718764552 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 141,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+175. You send yourself e-mail before you go to bed to remind you
+ what to do when you wake up.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0142 b/data/vim/patches/8.1.0142
new file mode 100644
index 000000000..c172faa19
--- /dev/null
+++ b/data/vim/patches/8.1.0142
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0142
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0142
+Problem: Xterm and vt320 builtin termcap missing keypad keys.
+Solution: Add the escape sequences. (Kouichi Iwamoto, closes #2973)
+Files: src/term.c
+
+
+*** ../vim-8.1.0141/src/term.c 2018-06-30 17:09:23.039956879 +0200
+--- src/term.c 2018-07-03 17:14:08.563027961 +0200
+***************
+*** 671,677 ****
+ /*
+ * VT320 is working as an ANSI terminal compatible DEC terminal.
+ * (it covers VT1x0, VT2x0 and VT3x0 up to VT320 on VMS as well)
+- * Note: K_F1...K_F5 are for internal use, should not be defined.
+ * TODO:- rewrite ESC[ codes to CSI
+ * - keyboard languages (CSI ? 26 n)
+ */
+--- 671,676 ----
+***************
+*** 723,728 ****
+--- 722,729 ----
+ {K_DOWN, IF_EB("\033[B", ESC_STR "[B")},
+ {K_RIGHT, IF_EB("\033[C", ESC_STR "[C")},
+ {K_LEFT, IF_EB("\033[D", ESC_STR "[D")},
++ // Note: cursor key sequences for application cursor mode are omitted,
++ // because they interfere with typed commands: <Esc>OA.
+ {K_F1, IF_EB("\033[11~", ESC_STR "[11~")},
+ {K_F2, IF_EB("\033[12~", ESC_STR "[12~")},
+ {K_F3, IF_EB("\033[13~", ESC_STR "[13~")},
+***************
+*** 749,759 ****
+--- 750,772 ----
+ {K_END, IF_EB("\033[4~", ESC_STR "[4~")},
+ {K_PAGEUP, IF_EB("\033[5~", ESC_STR "[5~")},
+ {K_PAGEDOWN, IF_EB("\033[6~", ESC_STR "[6~")},
++ // These sequences starting with <Esc> O may interfere with what the user
++ // is typing. Remove these if that bothers you.
+ {K_KPLUS, IF_EB("\033Ok", ESC_STR "Ok")}, /* keypad plus */
+ {K_KMINUS, IF_EB("\033Om", ESC_STR "Om")}, /* keypad minus */
+ {K_KDIVIDE, IF_EB("\033Oo", ESC_STR "Oo")}, /* keypad / */
+ {K_KMULTIPLY, IF_EB("\033Oj", ESC_STR "Oj")}, /* keypad * */
+ {K_KENTER, IF_EB("\033OM", ESC_STR "OM")}, /* keypad Enter */
++ {K_K0, IF_EB("\033Op", ESC_STR "Op")}, /* keypad 0 */
++ {K_K1, IF_EB("\033Oq", ESC_STR "Oq")}, /* keypad 1 */
++ {K_K2, IF_EB("\033Or", ESC_STR "Or")}, /* keypad 2 */
++ {K_K3, IF_EB("\033Os", ESC_STR "Os")}, /* keypad 3 */
++ {K_K4, IF_EB("\033Ot", ESC_STR "Ot")}, /* keypad 4 */
++ {K_K5, IF_EB("\033Ou", ESC_STR "Ou")}, /* keypad 5 */
++ {K_K6, IF_EB("\033Ov", ESC_STR "Ov")}, /* keypad 6 */
++ {K_K7, IF_EB("\033Ow", ESC_STR "Ow")}, /* keypad 7 */
++ {K_K8, IF_EB("\033Ox", ESC_STR "Ox")}, /* keypad 8 */
++ {K_K9, IF_EB("\033Oy", ESC_STR "Oy")}, /* keypad 9 */
+ {K_BS, "\x7f"}, /* for some reason 0177 doesn't work */
+ # endif
+
+***************
+*** 960,965 ****
+--- 973,988 ----
+ {K_KMULTIPLY, IF_EB("\033O*j", ESC_STR "O*j")}, /* keypad * */
+ {K_KENTER, IF_EB("\033O*M", ESC_STR "O*M")}, /* keypad Enter */
+ {K_KPOINT, IF_EB("\033O*n", ESC_STR "O*n")}, /* keypad . */
++ {K_K0, IF_EB("\033O*p", ESC_STR "O*p")}, /* keypad 0 */
++ {K_K1, IF_EB("\033O*q", ESC_STR "O*q")}, /* keypad 1 */
++ {K_K2, IF_EB("\033O*r", ESC_STR "O*r")}, /* keypad 2 */
++ {K_K3, IF_EB("\033O*s", ESC_STR "O*s")}, /* keypad 3 */
++ {K_K4, IF_EB("\033O*t", ESC_STR "O*t")}, /* keypad 4 */
++ {K_K5, IF_EB("\033O*u", ESC_STR "O*u")}, /* keypad 5 */
++ {K_K6, IF_EB("\033O*v", ESC_STR "O*v")}, /* keypad 6 */
++ {K_K7, IF_EB("\033O*w", ESC_STR "O*w")}, /* keypad 7 */
++ {K_K8, IF_EB("\033O*x", ESC_STR "O*x")}, /* keypad 8 */
++ {K_K9, IF_EB("\033O*y", ESC_STR "O*y")}, /* keypad 9 */
+ {K_KDEL, IF_EB("\033[3;*~", ESC_STR "[3;*~")}, /* keypad Del */
+ {K_PS, IF_EB("\033[200~", ESC_STR "[200~")}, /* paste start */
+ {K_PE, IF_EB("\033[201~", ESC_STR "[201~")}, /* paste end */
+*** ../vim-8.1.0141/src/version.c 2018-07-03 16:54:18.241509389 +0200
+--- src/version.c 2018-07-03 17:09:33.568507424 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 142,
+ /**/
+
+--
+If Apple would build a car...
+... it would be powered by the sun, be reliable, five times
+as fast and twice as easy to drive; but would only run on
+five percent of the roads.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0143 b/data/vim/patches/8.1.0143
new file mode 100644
index 000000000..d9d03c15b
--- /dev/null
+++ b/data/vim/patches/8.1.0143
@@ -0,0 +1,163 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0143
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0143
+Problem: Matchit and matchparen don't handle E363.
+Solution: Catch the E363 error. (Christian Brabandt)
+Files: runtime/pack/dist/opt/matchit/plugin/matchit.vim,
+ runtime/plugin/matchparen.vim
+
+
+*** ../vim-8.1.0142/runtime/pack/dist/opt/matchit/plugin/matchit.vim 2017-09-15 22:24:05.000000000 +0200
+--- runtime/pack/dist/opt/matchit/plugin/matchit.vim 2018-07-03 18:08:21.939478130 +0200
+***************
+*** 1,5 ****
+ " matchit.vim: (global plugin) Extended "%" matching
+! " Last Change: 2017 Sep 15
+ " Maintainer: Benji Fisher PhD <benji@member.AMS.org>
+ " Version: 1.13.3, for Vim 6.3+
+ " Fix from Fernando Torres included.
+--- 1,5 ----
+ " matchit.vim: (global plugin) Extended "%" matching
+! " Last Change: 2018 Jul 3 by Christian Brabandt
+ " Maintainer: Benji Fisher PhD <benji@member.AMS.org>
+ " Version: 1.13.3, for Vim 6.3+
+ " Fix from Fernando Torres included.
+***************
+*** 272,278 ****
+ " execute "normal!" . curcol . "l"
+ " endif
+ if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
+! let skip = "0"
+ else
+ execute "if " . skip . "| let skip = '0' | endif"
+ endif
+--- 272,278 ----
+ " execute "normal!" . curcol . "l"
+ " endif
+ if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
+! let skip = '0'
+ else
+ execute "if " . skip . "| let skip = '0' | endif"
+ endif
+***************
+*** 719,728 ****
+ let openpat = substitute(openpat, ',', '\\|', 'g')
+ let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')
+ let closepat = substitute(closepat, ',', '\\|', 'g')
+ if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
+ let skip = '0'
+ else
+! execute "if " . skip . "| let skip = '0' | endif"
+ endif
+ mark '
+ while level
+--- 719,734 ----
+ let openpat = substitute(openpat, ',', '\\|', 'g')
+ let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')
+ let closepat = substitute(closepat, ',', '\\|', 'g')
++
+ if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
+ let skip = '0'
+ else
+! try
+! execute "if " . skip . "| let skip = '0' | endif"
+! catch /^Vim\%((\a\+)\)\=:E363/
+! " We won't find anything, so skip searching, should keep Vim responsive.
+! return
+! endtry
+ endif
+ mark '
+ while level
+*** ../vim-8.1.0142/runtime/plugin/matchparen.vim 2018-06-25 00:05:55.897799652 +0200
+--- runtime/plugin/matchparen.vim 2018-07-03 18:14:30.337154571 +0200
+***************
+*** 1,6 ****
+ " Vim plugin for showing matching parens
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2017 Sep 30
+
+ " Exit quickly when:
+ " - this plugin was already loaded (or disabled)
+--- 1,6 ----
+ " Vim plugin for showing matching parens
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2018 Jul 3
+
+ " Exit quickly when:
+ " - this plugin was already loaded (or disabled)
+***************
+*** 103,120 ****
+ call cursor(c_lnum, c_col - before)
+ endif
+
+! " Build an expression that detects whether the current cursor position is in
+! " certain syntax types (string, comment, etc.), for use as searchpairpos()'s
+! " skip argument.
+! " We match "escape" for special items, such as lispEscapeSpecial.
+! let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' .
+ \ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))'
+! " If executing the expression determines that the cursor is currently in
+! " one of the syntax types, then we want searchpairpos() to find the pair
+! " within those syntax types (i.e., not skip). Otherwise, the cursor is
+! " outside of the syntax types and s_skip should keep its value so we skip any
+! " matching pair inside the syntax types.
+! execute 'if' s_skip '| let s_skip = "0" | endif'
+
+ " Limit the search to lines visible in the window.
+ let stoplinebottom = line('w$')
+--- 103,130 ----
+ call cursor(c_lnum, c_col - before)
+ endif
+
+! if !has("syntax") || !exists("g:syntax_on")
+! let s_skip = "0"
+! else
+! " Build an expression that detects whether the current cursor position is
+! " in certain syntax types (string, comment, etc.), for use as
+! " searchpairpos()'s skip argument.
+! " We match "escape" for special items, such as lispEscapeSpecial.
+! let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' .
+ \ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))'
+! " If executing the expression determines that the cursor is currently in
+! " one of the syntax types, then we want searchpairpos() to find the pair
+! " within those syntax types (i.e., not skip). Otherwise, the cursor is
+! " outside of the syntax types and s_skip should keep its value so we skip
+! " any matching pair inside the syntax types.
+! " Catch if this throws E363: pattern uses more memory than 'maxmempattern'.
+! try
+! execute 'if ' . s_skip . ' | let s_skip = "0" | endif'
+! catch /^Vim\%((\a\+)\)\=:E363/
+! " We won't find anything, so skip searching, should keep Vim responsive.
+! return
+! endtry
+! endif
+
+ " Limit the search to lines visible in the window.
+ let stoplinebottom = line('w$')
+*** ../vim-8.1.0142/src/version.c 2018-07-03 17:16:55.626135028 +0200
+--- src/version.c 2018-07-03 18:16:06.620560417 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 143,
+ /**/
+
+--
+If Microsoft would build a car...
+... Occasionally, executing a maneuver such as a left turn
+would cause your car to shut down and refuse to restart, in
+which case you would have to reinstall the engine.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0144 b/data/vim/patches/8.1.0144
new file mode 100644
index 000000000..d923b9675
--- /dev/null
+++ b/data/vim/patches/8.1.0144
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0144
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0144
+Problem: The :cd command does not have good test coverage.
+Solution: Add more tests. (Dominique Pelle, closes #2972)
+Files: src/testdir/test_cd.vim
+
+
+*** ../vim-8.1.0143/src/testdir/test_cd.vim 2017-03-19 21:32:54.000000000 +0100
+--- src/testdir/test_cd.vim 2018-07-03 18:35:26.589670346 +0200
+***************
+*** 8,13 ****
+--- 8,67 ----
+ func Test_cd_up_and_down()
+ let path = getcwd()
+ cd ..
++ call assert_notequal(path, getcwd())
+ exe 'cd ' . path
+ call assert_equal(path, getcwd())
+ endfunc
++
++ func Test_cd_no_arg()
++ if has('unix')
++ " Test that cd without argument goes to $HOME directory on Unix systems.
++ let path = getcwd()
++ cd
++ call assert_equal($HOME, getcwd())
++ call assert_notequal(path, getcwd())
++ exe 'cd ' . path
++ call assert_equal(path, getcwd())
++ else
++ " Test that cd without argument echoes cwd on non-Unix systems.
++ call assert_match(getcwd(), execute('cd'))
++ endif
++ endfunc
++
++ func Test_cd_minus()
++ " Test the :cd - goes back to the previous directory.
++ let path = getcwd()
++ cd ..
++ let path_dotdot = getcwd()
++ call assert_notequal(path, path_dotdot)
++ cd -
++ call assert_equal(path, getcwd())
++ cd -
++ call assert_equal(path_dotdot, getcwd())
++ cd -
++ call assert_equal(path, getcwd())
++ endfunc
++
++ func Test_cd_with_cpo_chdir()
++ e Xfoo
++ call setline(1, 'foo')
++ let path = getcwd()
++ set cpo+=.
++
++ " :cd should fail when buffer is modified and 'cpo' contains dot.
++ call assert_fails('cd ..', 'E747:')
++ call assert_equal(path, getcwd())
++
++ " :cd with exclamation mark should succeed.
++ cd! ..
++ call assert_notequal(path, getcwd())
++
++ " :cd should succeed when buffer has been written.
++ w!
++ exe 'cd ' . path
++ call assert_equal(path, getcwd())
++
++ call delete('Xfoo')
++ set cpo&
++ bw!
++ endfunc
+*** ../vim-8.1.0143/src/version.c 2018-07-03 18:17:24.664083244 +0200
+--- src/version.c 2018-07-03 18:28:12.884213499 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 144,
+ /**/
+
+--
+I'm so disorganized my keyboard isn't even in alphabetical order!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0145 b/data/vim/patches/8.1.0145
new file mode 100644
index 000000000..2457f5cbd
--- /dev/null
+++ b/data/vim/patches/8.1.0145
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0145
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0145
+Problem: Test with grep is failing on MS-Windows.
+Solution: Skip the test.
+Files: src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0144/src/testdir/test_quickfix.vim 2018-07-03 16:54:18.241509389 +0200
+--- src/testdir/test_quickfix.vim 2018-07-03 19:13:52.523893686 +0200
+***************
+*** 3457,3470 ****
+ call assert_equal(4, line('.'))
+ autocmd! QuickFixCmdPost
+
+! " Test for grep/lgrep
+! call g:Xsetlist([], 'f')
+! Xexpr 'Xtestfile1:2:Line2'
+! autocmd QuickFixCmdPost * Xolder
+! silent Xgrep Line5 Xtestfile2
+! call assert_equal('Xtestfile2', bufname(''))
+! call assert_equal(5, line('.'))
+! autocmd! QuickFixCmdPost
+
+ " Test for vimgrep/lvimgrep
+ call g:Xsetlist([], 'f')
+--- 3457,3473 ----
+ call assert_equal(4, line('.'))
+ autocmd! QuickFixCmdPost
+
+! " The grepprg may not be set on non-Unix systems
+! if has('unix')
+! " Test for grep/lgrep
+! call g:Xsetlist([], 'f')
+! Xexpr 'Xtestfile1:2:Line2'
+! autocmd QuickFixCmdPost * Xolder
+! silent Xgrep Line5 Xtestfile2
+! call assert_equal('Xtestfile2', bufname(''))
+! call assert_equal(5, line('.'))
+! autocmd! QuickFixCmdPost
+! endif
+
+ " Test for vimgrep/lvimgrep
+ call g:Xsetlist([], 'f')
+*** ../vim-8.1.0144/src/version.c 2018-07-03 18:36:23.041340530 +0200
+--- src/version.c 2018-07-03 19:14:29.267677389 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 145,
+ /**/
+
+--
+If Microsoft would build a car...
+... Occasionally your car would die on the freeway for no
+reason. You would have to pull over to the side of the road,
+close all of the car windows, shut it off, restart it, and
+reopen the windows before you could continue. For some reason
+you would simply accept this.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0146 b/data/vim/patches/8.1.0146
new file mode 100644
index 000000000..ac5393501
--- /dev/null
+++ b/data/vim/patches/8.1.0146
@@ -0,0 +1,49 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0146
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0146
+Problem: When $LANG is set the compiler test may fail.
+Solution: Unset $LANG.
+Files: src/testdir/test_compiler.vim
+
+
+*** ../vim-8.1.0145/src/testdir/test_compiler.vim Sat May 19 16:45:12 2018
+--- src/testdir/test_compiler.vim Tue Jul 3 21:24:51 2018
+***************
+*** 5,10 ****
+--- 5,15 ----
+ return
+ endif
+
++ " $LANG changes the output of Perl.
++ if $LANG != ''
++ unlet $LANG
++ endif
++
+ e Xfoo.pl
+ compiler perl
+ call assert_equal('perl', b:current_compiler)
+*** ../vim-8.1.0145/src/version.c Tue Jul 3 19:15:56 2018
+--- src/version.c Tue Jul 3 21:25:38 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 146,
+ /**/
+
+--
+If Microsoft would build a car...
+... You'd have to press the "Start" button to turn the engine off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0147 b/data/vim/patches/8.1.0147
new file mode 100644
index 000000000..dd8b126e0
--- /dev/null
+++ b/data/vim/patches/8.1.0147
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0147
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0147
+Problem: Compiler warning when building with Python 3.7.
+Solution: #undef PySlice_GetIndicesEx before redefining it. (Ozaki Kiichi,
+ closes #3153)
+Files: src/if_python3.c
+
+
+*** ../vim-8.1.0146/src/if_python3.c 2018-04-14 13:54:46.000000000 +0200
+--- src/if_python3.c 2018-07-04 21:55:38.545469805 +0200
+***************
+*** 167,172 ****
+--- 167,177 ----
+ # define PySequence_Fast py3_PySequence_Fast
+ # define PyTuple_Size py3_PyTuple_Size
+ # define PyTuple_GetItem py3_PyTuple_GetItem
++ # if PY_VERSION_HEX >= 0x030601f0
++ # define PySlice_AdjustIndices py3_PySlice_AdjustIndices
++ # define PySlice_Unpack py3_PySlice_Unpack
++ # endif
++ # undef PySlice_GetIndicesEx
+ # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx
+ # define PyImport_ImportModule py3_PyImport_ImportModule
+ # define PyObject_Init py3__PyObject_Init
+***************
+*** 305,310 ****
+--- 310,321 ----
+ static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
+ static int (*py3_PyMapping_Check)(PyObject *);
+ static PyObject* (*py3_PyMapping_Keys)(PyObject *);
++ # if PY_VERSION_HEX >= 0x030601f0
++ static int (*py3_PySlice_AdjustIndices)(Py_ssize_t length,
++ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step);
++ static int (*py3_PySlice_Unpack)(PyObject *slice,
++ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step);
++ # endif
+ static int (*py3_PySlice_GetIndicesEx)(PySliceObject_T *r, Py_ssize_t length,
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
+ Py_ssize_t *slicelen);
+***************
+*** 474,479 ****
+--- 485,494 ----
+ {"PySequence_Fast", (PYTHON_PROC*)&py3_PySequence_Fast},
+ {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size},
+ {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem},
++ # if PY_VERSION_HEX >= 0x030601f0
++ {"PySlice_AdjustIndices", (PYTHON_PROC*)&py3_PySlice_AdjustIndices},
++ {"PySlice_Unpack", (PYTHON_PROC*)&py3_PySlice_Unpack},
++ # endif
+ {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx},
+ {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
+ {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
+*** ../vim-8.1.0146/src/version.c 2018-07-03 21:26:33.820587829 +0200
+--- src/version.c 2018-07-04 22:00:23.391752084 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 147,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+177. You log off of your system because it's time to go to work.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0148 b/data/vim/patches/8.1.0148
new file mode 100644
index 000000000..60e8ef0a5
--- /dev/null
+++ b/data/vim/patches/8.1.0148
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0148
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0148
+Problem: Memory leak when using :tcl expr command.
+Solution: Free the result of expression evaluation. (Dominique Pelle,
+ closes #3150)
+Files: src/if_tcl.c
+
+
+*** ../vim-8.1.0147/src/if_tcl.c 2017-09-16 19:58:18.000000000 +0200
+--- src/if_tcl.c 2018-07-04 22:09:29.189322096 +0200
+***************
+*** 1385,1391 ****
+--- 1385,1394 ----
+ if (str == NULL)
+ Tcl_SetResult(interp, _("invalid expression"), TCL_STATIC);
+ else
++ {
+ Tcl_SetResult(interp, str, TCL_VOLATILE);
++ vim_free(str);
++ }
+ err = vimerror(interp);
+ #else
+ Tcl_SetResult(interp, _("expressions disabled at compile time"), TCL_STATIC);
+*** ../vim-8.1.0147/src/version.c 2018-07-04 22:03:22.110919832 +0200
+--- src/version.c 2018-07-04 22:08:39.721556114 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 148,
+ /**/
+
+--
+Rule #1: Don't give somebody a tool that he's going to hurt himself with.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0149 b/data/vim/patches/8.1.0149
new file mode 100644
index 000000000..af951193b
--- /dev/null
+++ b/data/vim/patches/8.1.0149
@@ -0,0 +1,263 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0149
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0149
+Problem: The generated sessions file does not restore tabs properly if :lcd
+ was used in one of them.
+Solution: Create the tab pages before setting the directory. (Yee Cheng
+ Chin, closes #3152)
+Files: src/ex_docmd.c, src/testdir/test_mksession.vim
+
+
+*** ../vim-8.1.0148/src/ex_docmd.c 2018-06-21 22:10:04.404854396 +0200
+--- src/ex_docmd.c 2018-07-04 22:21:20.461625002 +0200
+***************
+*** 5491,5497 ****
+ ex_autocmd(exarg_T *eap)
+ {
+ /*
+! * Disallow auto commands from .exrc and .vimrc in current
+ * directory for security reasons.
+ */
+ if (secure)
+--- 5491,5497 ----
+ ex_autocmd(exarg_T *eap)
+ {
+ /*
+! * Disallow autocommands from .exrc and .vimrc in current
+ * directory for security reasons.
+ */
+ if (secure)
+***************
+*** 11080,11089 ****
+ #endif
+
+ /*
+! * Close all windows but one.
+ */
+ if (put_line(fd, "silent only") == FAIL)
+ return FAIL;
+
+ /*
+ * Now a :cd command to the session directory or the current directory
+--- 11080,11092 ----
+ #endif
+
+ /*
+! * Close all windows and tabs but one.
+ */
+ if (put_line(fd, "silent only") == FAIL)
+ return FAIL;
++ if ((ssop_flags & SSOP_TABPAGES)
++ && put_line(fd, "silent tabonly") == FAIL)
++ return FAIL;
+
+ /*
+ * Now a :cd command to the session directory or the current directory
+***************
+*** 11193,11201 ****
+ */
+ tab_firstwin = firstwin; /* first window in tab page "tabnr" */
+ tab_topframe = topframe;
+ for (tabnr = 1; ; ++tabnr)
+ {
+! int need_tabnew = FALSE;
+ int cnr = 1;
+
+ if ((ssop_flags & SSOP_TABPAGES))
+--- 11196,11228 ----
+ */
+ tab_firstwin = firstwin; /* first window in tab page "tabnr" */
+ tab_topframe = topframe;
++ if ((ssop_flags & SSOP_TABPAGES))
++ {
++ int num_tabs;
++
++ /*
++ * Similar to ses_win_rec() below, populate the tab pages first so
++ * later local options won't be copied to the new tabs.
++ */
++ for (tabnr = 1; ; ++tabnr)
++ {
++ tabpage_T *tp = find_tabpage(tabnr);
++
++ if (tp == NULL) /* done all tab pages */
++ break;
++
++ if (tabnr > 1 && put_line(fd, "tabnew") == FAIL)
++ return FAIL;
++ }
++
++ num_tabs = tabnr - 1;
++ if (num_tabs > 1 && (fprintf(fd, "tabnext -%d", num_tabs - 1) < 0
++ || put_eol(fd) == FAIL))
++ return FAIL;
++ }
+ for (tabnr = 1; ; ++tabnr)
+ {
+! int need_tabnext = FALSE;
+ int cnr = 1;
+
+ if ((ssop_flags & SSOP_TABPAGES))
+***************
+*** 11215,11221 ****
+ tab_topframe = tp->tp_topframe;
+ }
+ if (tabnr > 1)
+! need_tabnew = TRUE;
+ }
+
+ /*
+--- 11242,11248 ----
+ tab_topframe = tp->tp_topframe;
+ }
+ if (tabnr > 1)
+! need_tabnext = TRUE;
+ }
+
+ /*
+***************
+*** 11233,11243 ****
+ #endif
+ )
+ {
+! if (fputs(need_tabnew ? "tabedit " : "edit ", fd) < 0
+ || ses_fname(fd, wp->w_buffer, &ssop_flags, TRUE)
+ == FAIL)
+ return FAIL;
+- need_tabnew = FALSE;
+ if (!wp->w_arg_idx_invalid)
+ edited_win = wp;
+ break;
+--- 11260,11273 ----
+ #endif
+ )
+ {
+! if (need_tabnext && put_line(fd, "tabnext") == FAIL)
+! return FAIL;
+! need_tabnext = FALSE;
+!
+! if (fputs("edit ", fd) < 0
+ || ses_fname(fd, wp->w_buffer, &ssop_flags, TRUE)
+ == FAIL)
+ return FAIL;
+ if (!wp->w_arg_idx_invalid)
+ edited_win = wp;
+ break;
+***************
+*** 11245,11251 ****
+ }
+
+ /* If no file got edited create an empty tab page. */
+! if (need_tabnew && put_line(fd, "tabnew") == FAIL)
+ return FAIL;
+
+ /*
+--- 11275,11281 ----
+ }
+
+ /* If no file got edited create an empty tab page. */
+! if (need_tabnext && put_line(fd, "tabnext") == FAIL)
+ return FAIL;
+
+ /*
+***************
+*** 11348,11354 ****
+ /*
+ * Wipe out an empty unnamed buffer we started in.
+ */
+! if (put_line(fd, "if exists('s:wipebuf') && s:wipebuf != bufnr('%')")
+ == FAIL)
+ return FAIL;
+ if (put_line(fd, " silent exe 'bwipe ' . s:wipebuf") == FAIL)
+--- 11378,11384 ----
+ /*
+ * Wipe out an empty unnamed buffer we started in.
+ */
+! if (put_line(fd, "if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0")
+ == FAIL)
+ return FAIL;
+ if (put_line(fd, " silent exe 'bwipe ' . s:wipebuf") == FAIL)
+*** ../vim-8.1.0148/src/testdir/test_mksession.vim 2018-06-12 16:49:26.366028607 +0200
+--- src/testdir/test_mksession.vim 2018-07-04 22:15:48.099410298 +0200
+***************
+*** 162,167 ****
+--- 162,214 ----
+ call delete('Xtest_mks.out')
+ endfunc
+
++ func Test_mksession_lcd_multiple_tabs()
++ tabnew
++ tabnew
++ lcd
++ tabfirst
++ lcd
++ mksession! Xtest_mks.out
++ tabonly
++ source Xtest_mks.out
++ call assert_true(haslocaldir(), 'Tab 1 localdir')
++ tabnext 2
++ call assert_true(!haslocaldir(), 'Tab 2 localdir')
++ tabnext 3
++ call assert_true(haslocaldir(), 'Tab 3 localdir')
++ call delete('Xtest_mks.out')
++ endfunc
++
++ func Test_mksession_blank_tabs()
++ tabnew
++ tabnew
++ tabnew
++ tabnext 3
++ mksession! Xtest_mks.out
++ tabnew
++ tabnew
++ tabnext 2
++ source Xtest_mks.out
++ call assert_equal(4, tabpagenr('$'), 'session restore should restore number of tabs')
++ call assert_equal(3, tabpagenr(), 'session restore should restore the active tab')
++ call delete('Xtest_mks.out')
++ endfunc
++
++ func Test_mksession_blank_windows()
++ split
++ split
++ split
++ 3 wincmd w
++ mksession! Xtest_mks.out
++ split
++ split
++ 2 wincmd w
++ source Xtest_mks.out
++ call assert_equal(4, winnr('$'), 'session restore should restore number of windows')
++ call assert_equal(3, winnr(), 'session restore should restore the active window')
++ call delete('Xtest_mks.out')
++ endfunc
++
+ if has('terminal')
+
+ func Test_mksession_terminal_shell()
+*** ../vim-8.1.0148/src/version.c 2018-07-04 22:12:19.880483379 +0200
+--- src/version.c 2018-07-04 22:18:05.734679485 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 149,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+179. You wonder why your household garbage can doesn't have an
+ "empty recycle bin" button.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0150 b/data/vim/patches/8.1.0150
new file mode 100644
index 000000000..a9ee674fe
--- /dev/null
+++ b/data/vim/patches/8.1.0150
@@ -0,0 +1,692 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0150
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0150
+Problem: Insufficient test coverage for Tcl.
+Solution: Add more tests. (Dominique Pelle, closes #3140)
+Files: src/testdir/test_tcl.vim
+
+
+*** ../vim-8.1.0149/src/testdir/test_tcl.vim 2017-01-29 23:18:53.000000000 +0100
+--- src/testdir/test_tcl.vim 2018-07-04 22:33:49.173452418 +0200
+***************
+*** 4,23 ****
+ finish
+ end
+
+! function Test_tcldo()
+ " Check deleting lines does not trigger ml_get error.
+ new
+ call setline(1, ['one', 'two', 'three'])
+ tcldo ::vim::command %d_
+ bwipe!
+
+! " Check switching to another buffer does not trigger ml_get error.
+ new
+ let wincount = winnr('$')
+ call setline(1, ['one', 'two', 'three'])
+ tcldo ::vim::command new
+ call assert_equal(wincount + 1, winnr('$'))
+ bwipe!
+ bwipe!
+ endfunc
+
+--- 4,637 ----
+ finish
+ end
+
+! " Helper function as there is no builtin tcleval() function similar
+! " to perleval, luaevel(), pyeval(), etc.
+! func TclEval(tcl_expr)
+! let s = split(execute('tcl ' . a:tcl_expr), "\n")
+! return (len(s) == 0) ? '' : s[-1]
+! endfunc
+!
+! func Test_tcldo()
+ " Check deleting lines does not trigger ml_get error.
+ new
+ call setline(1, ['one', 'two', 'three'])
+ tcldo ::vim::command %d_
+ bwipe!
+
+! " Check that switching to another buffer does not trigger ml_get error.
+ new
+ let wincount = winnr('$')
+ call setline(1, ['one', 'two', 'three'])
+ tcldo ::vim::command new
+ call assert_equal(wincount + 1, winnr('$'))
++ %bwipe!
++ endfunc
++
++ " Test :tcldo with a range
++ func Test_tcldo_range()
++ new
++ call setline(1, ['line1', 'line2', 'line3', 'line4'])
++ 2,3tcldo set line [string toupper $line]
++ call assert_equal(['line1', 'LINE2', 'LINE3', 'line4'], getline(1, '$'))
++ bwipe!
++ endfunc
++
++ " Test ::vim::beep
++ func Test_vim_beep()
++ call assert_beeps('tcl ::vim::beep')
++ call assert_fails('tcl ::vim::beep x', 'wrong # args: should be "::vim::beep"')
++ endfunc
++
++ " Test ::vim::buffer
++ func Test_vim_buffer()
++ " Test ::vim::buffer {nr}
++ e Xfoo1
++ call setline(1, ['foobar'])
++ let bn1 = bufnr('%')
++ let b1 = TclEval('::vim::buffer ' . bn1)
++ call assert_equal(b1, TclEval('set ::vim::current(buffer)'))
++
++ new Xfoo2
++ call setline(1, ['barfoo'])
++ let bn2 = bufnr('%')
++ let b2 = TclEval('::vim::buffer ' . bn2)
++ call assert_equal(b2, TclEval('set ::vim::current(buffer)'))
++
++ call assert_match('Xfoo1$', TclEval(b1 . ' name'))
++ call assert_match('Xfoo2$', TclEval(b2 . ' name'))
++
++ " Test ::vim::buffer exists {nr}
++ call assert_match('^[1-9]\d*$', TclEval('::vim::buffer exists ' . bn1))
++ call assert_match('^[1-9]\d*$', TclEval('::vim::buffer exists ' . bn2))
++ call assert_equal('0', TclEval('::vim::buffer exists 54321'))
++
++ " Test ::vim::buffer list
++ call assert_equal('2', TclEval('llength [::vim::buffer list]'))
++ call assert_equal(b1.' '.b2, TclEval('::vim::buffer list'))
++ tcl <<EOF
++ proc eachbuf { cmd } {
++ foreach b [::vim::buffer list] { $b command $cmd }
++ }
++ EOF
++ tcl eachbuf %s/foo/FOO/g
++ b! Xfoo1
++ call assert_equal(['FOObar'], getline(1, '$'))
++ b! Xfoo2
++ call assert_equal(['barFOO'], getline(1, '$'))
++
++ call assert_fails('tcl ::vim::buffer',
++ \ 'wrong # args: should be "::vim::buffer option"')
++ call assert_fails('tcl ::vim::buffer ' . bn1 . ' x',
++ \ 'wrong # args: should be "::vim::buffer bufNumber"')
++ call assert_fails('tcl ::vim::buffer 4321', 'invalid buffer number')
++ call assert_fails('tcl ::vim::buffer x',
++ \ 'bad option "x": must be exists or list')
++ call assert_fails('tcl ::vim::buffer exists',
++ \ 'wrong # args: should be "::vim::buffer exists bufNumber"')
++ call assert_fails('tcl ::vim::buffer exists x',
++ \ 'expected integer but got "x"')
++ call assert_fails('tcl ::vim::buffer list x',
++ \ 'wrong # args: should be "::vim::buffer list "')
++
++ tcl rename eachbuf ""
++ %bwipe!
++ endfunc
++
++ " Test ::vim::option
++ func Test_vim_option()
++ set cc=3,5
++
++ " Test getting option 'cc'
++ call assert_equal('3,5', TclEval('::vim::option cc'))
++ call assert_equal('3,5', &cc)
++
++ " Test setting option 'cc' (it returns the old option value)
++ call assert_equal('3,5', TclEval('::vim::option cc +4'))
++ call assert_equal('+4', &cc)
++ call assert_equal('+4', TclEval('::vim::option cc'))
++
++ call assert_fails('tcl ::vim::option xxx', 'unknown vimOption')
++ call assert_fails('tcl ::vim::option',
++ \ 'wrong # args: should be "::vim::option vimOption ?value?"')
++
++ set cc&
++ endfunc
++
++ " Test ::vim::expr
++ func Test_vim_expr()
++ call assert_equal(string(char2nr('X')),
++ \ TclEval('::vim::expr char2nr("X")'))
++
++ call assert_fails('tcl ::vim::expr x y',
++ \ 'wrong # args: should be "::vim::expr vimExpr"')
++ endfunc
++
++ " Test ::vim::command
++ func Test_vim_command()
++ call assert_equal('hello world',
++ \ TclEval('::vim::command {echo "hello world"}'))
++
++ " With the -quiet option, the error should silently be ignored.
++ call assert_equal('', TclEval('::vim::command -quiet xyz'))
++
++ call assert_fails('tcl ::vim::command',
++ \ 'wrong # args: should be "::vim::command ?-quiet? exCommand"')
++ call assert_fails('tcl ::vim::command -foo xyz', 'unknown flag: -foo')
++ call assert_fails('tcl ::vim::command xyz',
++ \ 'E492: Not an editor command: xyz')
++
++ " With the -quiet option, the error should silently be ignored.
++ call assert_equal('', TclEval('::vim::command -quiet xyz'))
++ endfunc
++
++ " Test ::vim::window list
++ func Test_vim_window_list()
++ e Xfoo1
++ new Xfoo2
++ let w2 = TclEval('set ::vim::current(window)')
++ wincmd j
++ let w1 = TclEval('set ::vim::current(window)')
++
++ call assert_equal('2', TclEval('llength [::vim::window list]'))
++ call assert_equal(w2.' '.w1, TclEval('::vim::window list'))
++
++ call assert_fails('tcl ::vim::window x', 'unknown option')
++ call assert_fails('tcl ::vim::window list x',
++ \ 'wrong # args: should be "::vim::window option"')
++
++ %bwipe
++ endfunc
++
++ " Test output messages
++ func Test_output()
++ call assert_fails('tcl puts vimerr "an error"', 'an error')
++ tcl puts vimout "a message"
++ tcl puts "another message"
++ let messages = split(execute('message'), "\n")
++ call assert_equal('a message', messages[-2])
++ call assert_equal('another message', messages[-1])
++
++ call assert_fails('tcl puts',
++ \ 'wrong # args: should be "puts ?-nonewline? ?channelId? string"')
++ endfunc
++
++ " Test $win height (get and set window height)
++ func Test_window_height()
++ new
++
++ " Test setting window height
++ tcl $::vim::current(window) height 2
++ call assert_equal(2, winheight(0))
++
++ " Test getting window height
++ call assert_equal('2', TclEval('$::vim::current(window) height'))
++
++ call assert_fails('tcl $::vim::current(window) height 2 2', 'wrong # args:')
++ call assert_fails('tcl $::vim::current(window) height x',
++ \ 'expected integer but got "x"')
++ bwipe
++ endfunc
++
++ " Test $win cursor (get and set cursor)
++ func Test_window_cursor()
++ new
++ call setline(1, ['line1', 'line2', 'line3', 'line5'])
++ tcl set win $::vim::current(window)
++
++ tcl $win cursor 2 4
++ call assert_equal([0, 2, 4, 0], getpos('.'))
++ call assert_equal('row 2 column 4', TclEval('$win cursor'))
++
++ " When setting ::vim::lbase to 0, line/col are counted from 0
++ " instead of 1.
++ tcl set ::vim::lbase 0
++ call assert_equal([0, 2, 4, 0], getpos('.'))
++ call assert_equal('row 1 column 3', TclEval('$win cursor'))
++ tcl $win cursor 2 4
++ call assert_equal([0, 3, 5, 0], getpos('.'))
++ call assert_equal('row 2 column 4', TclEval('$win cursor'))
++ tcl set ::vim::lbase 1
++ call assert_equal('row 3 column 5', TclEval('$win cursor'))
++ call assert_equal([0, 3, 5, 0], getpos('.'))
++
++ " test $win cursor {$var}
++ call cursor(2, 3)
++ tcl array set here [$win cursor]
++ call assert_equal([0, 2, 3, 0], getpos('.'))
++ call cursor(3, 1)
++ call assert_equal([0, 3, 1, 0], getpos('.'))
++ tcl $win cursor here
++ call assert_equal([0, 2, 3, 0], getpos('.'))
++ call cursor(3, 1)
++ call assert_equal([0, 3, 1, 0], getpos('.'))
++ tcl $win cursor $here(row) $here(column)
++ call assert_equal([0, 2, 3, 0], getpos('.'))
++
++ call assert_fails('tcl $win cursor 1 1 1', 'wrong # args:')
++
++ tcl unset win here
++ bwipe!
++ endfunc
++
++ " Test $win buffer
++ func Test_window_buffer()
++ new Xfoo1
++ new Xfoo2
++ tcl set b2 $::vim::current(buffer)
++ tcl set w2 $::vim::current(window)
++ wincmd j
++ tcl set b1 $::vim::current(buffer)
++ tcl set w1 $::vim::current(window)
++
++ call assert_equal(TclEval('set b1'), TclEval('$w1 buffer'))
++ call assert_equal(TclEval('set b2'), TclEval('$w2 buffer'))
++ call assert_equal(string(bufnr('Xfoo1')), TclEval('[$w1 buffer] number'))
++ call assert_equal(string(bufnr('Xfoo2')), TclEval('[$w2 buffer] number'))
++
++ call assert_fails('tcl $w1 buffer x', 'wrong # args:')
++
++ tcl unset b1 b2 w1 w2
++ %bwipe
++ endfunc
++
++ " Test $win command
++ func Test_window_command()
++ new Xfoo1
++ call setline(1, ['FOObar'])
++ new Xfoo2
++ call setline(1, ['fooBAR'])
++ tcl set w2 $::vim::current(window)
++ wincmd j
++ tcl set w1 $::vim::current(window)
++
++ tcl $w1 command "norm VU"
++ tcl $w2 command "norm Vu"
++ b! Xfoo1
++ call assert_equal('FOOBAR', getline(1))
++ b! Xfoo2
++ call assert_equal('foobar', getline(1))
++
++ call assert_fails('tcl $w1 command xyz',
++ \ 'E492: Not an editor command: xyz')
++ tcl $w1 command -quiet xyz
++
++ tcl unset w1 w2
++ %bwipe!
++ endfunc
++
++ " Test $win expr
++ func Test_window_expr()
++ new Xfoo1
++ new Xfoo2
++ tcl set w2 $::vim::current(window)
++ wincmd j
++ tcl set w1 $::vim::current(window)
++
++ call assert_equal('Xfoo1', TclEval('$w1 expr bufname("%")'))
++ call assert_equal('Xfoo2', TclEval('$w2 expr bufname("%")'))
++
++ call assert_fails('tcl $w1 expr', 'wrong # args:')
++ call assert_fails('tcl $w1 expr x x', 'wrong # args:')
++
++ tcl unset w1 w2
++ %bwipe
++ endfunc
++
++ " Test $win option
++ func Test_window_option()
++ new Xfoo1
++ new Xfoo2
++ tcl set w2 $::vim::current(window)
++ wincmd j
++ tcl set w1 $::vim::current(window)
++
++ " Test setting window option
++ tcl $w1 option syntax java
++ tcl $w2 option syntax rust
++
++ call assert_equal('java', &syntax)
++ wincmd k
++ call assert_equal('rust', &syntax)
++
++ " Test getting window option
++ call assert_equal('java', TclEval('$w1 option syntax'))
++ call assert_equal('rust', TclEval('$w2 option syntax'))
++
++ tcl unset w1 w2
++ %bwipe
++ endfunc
++
++ " Test $win delcmd {cmd}
++ func Test_window_delcmd()
++ new
++ tcl $::vim::current(window) delcmd [list set msg "window deleted"]
++ call assert_fails('tcl set msg', "can't read \"msg\": no such variable")
++ q
++ call assert_equal('window deleted', TclEval('set msg'))
++
++ call assert_fails('tcl $::vim::current(window) delcmd', 'wrong # args')
++
++ tcl unset msg
++ bwipe
++ endfunc
++
++ " Test $buf name
++ func Test_buffer_name()
++ " Test buffer name with a named buffer
++ new Xfoo
++ call assert_equal(expand('%:p'), TclEval('$::vim::current(buffer) name'))
++ bwipe
++
++ " Test buffer name with an unnamed buffer
++ new
++ call assert_equal('', TclEval('$::vim::current(buffer) name'))
++
++ call assert_fails('tcl $::vim::current(buffer) name x', 'wrong # args:')
++
++ bwipe
++ endfunc
++
++ " Test $buf number
++ func Test_buffer_number()
++ new
++ call assert_equal(string(bufnr('%')), TclEval('$::vim::current(buffer) number'))
++ new
++ call assert_equal(string(bufnr('%')), TclEval('$::vim::current(buffer) number'))
++
++ call assert_fails('tcl $::vim::current(buffer) number x', 'wrong # args:')
++
++ %bwipe
++ endfunc
++
++ " Test $buf count and $buf last
++ func Test_buffer_count()
++ new
++ call setline(1, ['one', 'two', 'three'])
++ call assert_equal('3', TclEval('$::vim::current(buffer) count'))
++ call assert_equal('3', TclEval('$::vim::current(buffer) last'))
++
++ " Check that $buf count and $buf last differ when ::vim::lbase is 0.
++ tcl set ::vim::lbase 0
++ call assert_equal('3', TclEval('$::vim::current(buffer) count'))
++ call assert_equal('2', TclEval('$::vim::current(buffer) last'))
++
++ call assert_fails('tcl $::vim::current(buffer) count x', 'wrong # args:')
++ call assert_fails('tcl $::vim::current(buffer) last x', 'wrong # args:')
++
++ tcl set ::vim::lbase 1
++ bwipe!
++ endfunc
++
++ " Test $buf delete (delete line(s) in buffer)
++ func Test_buffer_delete()
++ new
++ call setline(1, ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'])
++ tcl $::vim::current(buffer) delete 4 6
++ tcl $::vim::current(buffer) delete 2
++ call assert_equal(['one', 'three', 'seven', 'eight'], getline(1, '$'))
++
++ call assert_fails('tcl $::vim::current(buffer) delete -1', 'line number out of range')
++ call assert_fails('tcl $::vim::current(buffer) delete 0', 'line number out of range')
++ call assert_fails('tcl $::vim::current(buffer) delete 5', 'line number out of range')
++
++ call assert_fails('tcl $::vim::current(buffer) delete', 'wrong # args:')
++ call assert_fails('tcl $::vim::current(buffer) delete 1 2 3', 'wrong # args:')
++
++ bwipe!
++ endfunc
++
++ " Test $buf insert (insert line(s) in buffer)
++ func Test_buffer_insert()
++ new
++ tcl set buf $::vim::current(buffer)
++ tcl $buf insert 1 "first"
++ tcl $buf insert 2 "second"
++ tcl $buf insert 2 "third"
++ tcl $buf insert 4 "fourth"
++ tcl $buf insert 1 "fifth"
++ call assert_equal(['fifth', 'first', 'third', 'second', 'fourth', ''], getline(1, '$'))
++
++ call assert_fails('tcl $buf insert -1 "x"', 'line number out of range')
++ call assert_fails('tcl $buf insert 0 "x"', 'line number out of range')
++ call assert_fails('tcl $buf insert 7 "x"', 'line number out of range')
++
++ tcl unset buf
++ bwipe!
++ endfunc
++
++ " Test $buf append (append line in buffer)
++ func Test_buffer_append()
++ new
++ tcl set buf $::vim::current(buffer)
++ tcl $buf append 1 "first"
++ tcl $buf append 2 "second"
++ tcl $buf append 2 "third"
++ tcl $buf append 4 "fourth"
++ tcl $buf append 1 "fifth"
++ call assert_equal(['', 'fifth', 'first', 'third', 'second', 'fourth'], getline(1, '$'))
++
++ call assert_fails('tcl $buf append -1 "x"', 'line number out of range')
++ call assert_fails('tcl $buf append 0 "x"', 'line number out of range')
++ call assert_fails('tcl $buf append 7 "x"', 'line number out of range')
++
++ call assert_fails('tcl $buf append', 'wrong # args:')
++ call assert_fails('tcl $buf append 1 x x', 'wrong # args:')
++
++ tcl unset buf
++ bwipe!
++ endfunc
++
++ " Test $buf set (replacing line(s) in a buffer)
++ func Test_buffer_set()
++ new
++ call setline(1, ['line1', 'line2', 'line3', 'line4', 'line5'])
++ tcl $::vim::current(buffer) set 2 a
++ call assert_equal(['line1', 'a', 'line3', 'line4', 'line5'], getline(1, '$'))
++ tcl $::vim::current(buffer) set 3 4 b
++ call assert_equal(['line1', 'a', 'b', 'line5'], getline(1, '$'))
++ tcl $::vim::current(buffer) set 4 3 c
++ call assert_equal(['line1', 'a', 'c'], getline(1, '$'))
++
++ call assert_fails('tcl $::vim::current(buffer) set 0 "x"', 'line number out of range')
++ call assert_fails('tcl $::vim::current(buffer) set 5 "x"', 'line number out of range')
++
++ call assert_fails('tcl $::vim::current(buffer) set', 'wrong # args:')
++ bwipe!
++ endfunc
++
++ " Test $buf get (get line(s) from buffer)
++ func Test_buffer_get()
++ new
++ call setline(1, ['first line', 'two', 'three', 'last line'])
++ tcl set buf $::vim::current(buffer)
++
++ call assert_equal('first line', TclEval('$buf get top'))
++ call assert_equal('first line', TclEval('$buf get begin'))
++ call assert_equal('last line', TclEval('$buf get bottom'))
++ call assert_equal('last line', TclEval('$buf get last'))
++
++ call assert_equal('first line', TclEval('$buf get 1'))
++ call assert_equal('two', TclEval('$buf get 2'))
++ call assert_equal('three', TclEval('$buf get 3'))
++ call assert_equal('last line', TclEval('$buf get 4'))
++
++ call assert_equal('two three', TclEval('$buf get 2 3'))
++ call assert_equal('two three', TclEval('$buf get 3 2'))
++ call assert_equal('three {last line}', TclEval('$buf get 3 last'))
++
++ call assert_fails('tcl $buf get -1', 'line number out of range')
++ call assert_fails('tcl $buf get 0', 'line number out of range')
++ call assert_fails('tcl $buf get 5', 'line number out of range')
++ call assert_fails('tcl $buf get 0 1', 'line number out of range')
++
++ call assert_fails('tcl $::vim::current(buffer) get x', 'expected integer but got "x"')
++ call assert_fails('tcl $::vim::current(buffer) get 1 1 1', 'wrong # args:')
++
++ tcl unset buf
+ bwipe!
++ endfunc
++
++ " Test $buf mark (get position of a mark)
++ func Test_buffer_mark()
++ new
++ call setline(1, ['one', 'two', 'three', 'four'])
++ /three
++ norm! ma
++ norm! jllmB
++
++ call assert_equal('row 3 column 1', TclEval('$::vim::current(buffer) mark a'))
++ call assert_equal('row 4 column 3', TclEval('$::vim::current(buffer) mark B'))
++
++ call assert_fails('tcl $::vim::current(buffer) mark /', 'invalid mark name')
++ call assert_fails('tcl $::vim::current(buffer) mark z', 'mark not set')
++ call assert_fails('tcl $::vim::current(buffer) mark', 'wrong # args:')
++
++ delmarks aB
+ bwipe!
+ endfunc
+
++ " Test $buf option (test and set option in context of a buffer)
++ func Test_buffer_option()
++ new Xfoo1
++ tcl set b1 $::vim::current(buffer)
++ new Xfoo2
++ tcl set b2 $::vim::current(buffer)
++
++ tcl $b1 option foldcolumn 2
++ tcl $b2 option foldcolumn 3
++
++ call assert_equal(3, &foldcolumn)
++ wincmd j
++ call assert_equal(2, &foldcolumn)
++
++ call assert_equal('2', TclEval('$b1 option foldcolumn'))
++ call assert_equal('3', TclEval('$b2 option foldcolumn'))
++
++ call assert_fails('tcl $::vim::current(buffer) option', 'wrong # args:')
++
++ set foldcolumn&
++ tcl unset b1 b2
++ %bwipe
++ endfunc
++
++ " Test $buf expr (evaluate vim expression)
++ func Test_buffer_expr()
++ new Xfoo1
++ norm ifoo1
++ tcl set b1 $::vim::current(buffer)
++
++ new Xfoo2
++ norm ifoo2
++ tcl set b2 $::vim::current(buffer)
++
++ call assert_equal('foo1', TclEval('$b1 expr getline(1)'))
++ call assert_equal('foo2', TclEval('$b2 expr getline(1)'))
++
++ call assert_fails('tcl expr', 'wrong # args:')
++
++ tcl unset b1 b2
++ %bwipe!
++ endfunc
++
++ " Test $buf delcmd {cmd} (command executed when buffer is deleted)
++ func Test_buffer_delcmd()
++ new Xfoo
++ split
++ tcl $::vim::current(buffer) delcmd [list set msg "buffer deleted"]
++ q
++ call assert_fails('tcl set msg', "can't read \"msg\": no such variable")
++ q
++ call assert_equal('buffer deleted', TclEval('set msg'))
++
++ call assert_fails('tcl $::vim::current(window) delcmd', 'wrong # args')
++ call assert_fails('tcl $::vim::current(window) delcmd x x', 'wrong # args')
++
++ tcl unset msg
++ %bwipe
++ endfunc
++
++ func Test_vim_current()
++ " Only test errors as ::vim::current(...) is already indirectly
++ " tested by many other tests.
++ call assert_fails('tcl $::vim::current(buffer)', 'wrong # args:')
++ call assert_fails('tcl $::vim::current(window)', 'wrong # args:')
++ endfunc
++
++ " Test $buf windows (windows list of a buffer)
++ func Test_buffer_windows()
++ new Xfoo
++ split
++ new Xbar
++ split
++ vsplit
++
++ tcl set bar_wl [$::vim::current(buffer) windows]
++ 2wincmd j
++ tcl set foo_wl [$::vim::current(buffer) windows]
++
++ call assert_equal('2', TclEval('llength $foo_wl'))
++ call assert_equal('3', TclEval('llength $bar_wl'))
++
++ call assert_fails('tcl $::vim::current(buffer) windows x', 'wrong # args:')
++
++ tcl unset bar_wl foo_wl
++ %bwipe
++ endfunc
++
++ " Test :tclfile
++ func Test_tclfile()
++ call delete('Xtcl_file')
++ call writefile(['set pi [format "%.2f" [expr acos(-1.0)]]'], 'Xtcl_file')
++ call setfperm('Xtcl_file', 'r-xr-xr-x')
++
++ tclfile Xtcl_file
++ call assert_equal('3.14', TclEval('set pi'))
++
++ tcl unset pi
++ call delete('Xtcl_file')
++ endfunc
++
++ " Test :tclfile with syntax error in tcl script
++ func Test_tclfile_error()
++ call delete('Xtcl_file')
++ call writefile(['xyz'], 'Xtcl_file')
++ call setfperm('Xtcl_file', 'r-xr-xr-x')
++
++ call assert_fails('tclfile Xtcl_file', 'invalid command name "xyz"')
++
++ call delete('Xtcl_file')
++ endfunc
++
++ " Test exiting current Tcl interprepter and re-creating one.
++ func Test_tcl_exit()
++ tcl set foo "foo"
++ call assert_fails('tcl exit 3', 'E572: exit code 3')
++
++ " The Tcl interpreter should have been deleted and a new one
++ " is re-created with the next :tcl command.
++ call assert_fails('tcl set foo', "can't read \"foo\": no such variable")
++ tcl set bar "bar"
++ call assert_equal('bar', TclEval('set bar'))
++
++ tcl unset bar
++ endfunc
+*** ../vim-8.1.0149/src/version.c 2018-07-04 22:26:24.515946368 +0200
+--- src/version.c 2018-07-04 22:36:32.324478980 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 150,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+180. You maintain more than six e-mail addresses.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0151 b/data/vim/patches/8.1.0151
new file mode 100644
index 000000000..34c8d0068
--- /dev/null
+++ b/data/vim/patches/8.1.0151
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0151
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0151
+Problem: Mksession test fails on MS-Windows.
+Solution: Always use an argument for :lcd.
+Files: src/testdir/test_mksession.vim
+
+
+*** ../vim-8.1.0150/src/testdir/test_mksession.vim 2018-07-04 22:26:24.515946368 +0200
+--- src/testdir/test_mksession.vim 2018-07-04 22:42:41.126071782 +0200
+***************
+*** 165,173 ****
+ func Test_mksession_lcd_multiple_tabs()
+ tabnew
+ tabnew
+! lcd
+ tabfirst
+! lcd
+ mksession! Xtest_mks.out
+ tabonly
+ source Xtest_mks.out
+--- 165,173 ----
+ func Test_mksession_lcd_multiple_tabs()
+ tabnew
+ tabnew
+! lcd .
+ tabfirst
+! lcd .
+ mksession! Xtest_mks.out
+ tabonly
+ source Xtest_mks.out
+*** ../vim-8.1.0150/src/version.c 2018-07-04 22:36:42.796407775 +0200
+--- src/version.c 2018-07-04 22:43:33.357743716 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 151,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+181. You still remember the "happy tune" your modem made
+ while dialing your ISP.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0152 b/data/vim/patches/8.1.0152
new file mode 100644
index 000000000..dc4db0b92
--- /dev/null
+++ b/data/vim/patches/8.1.0152
@@ -0,0 +1,512 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0152
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0152
+Problem: Cannot easily run individual tests on MS-Windows.
+Solution: Move the list of tests to a separate file. Add a build rule in
+ the MSVC makefile.
+Files: Filelist, src/Makefile, src/Make_all.mak, src/Make_mvc.mak
+
+
+*** ../vim-8.1.0151/Filelist 2018-06-30 17:08:56.064115274 +0200
+--- Filelist 2018-07-04 22:58:13.976431486 +0200
+***************
+*** 7,12 ****
+--- 7,13 ----
+ .lgtm.yml \
+ .travis.yml \
+ appveyor.yml \
++ src/Make_all.mak \
+ src/appveyor.bat \
+ src/README.txt \
+ src/alloc.h \
+*** ../vim-8.1.0151/src/Makefile 2018-07-02 20:51:21.035882093 +0200
+--- src/Makefile 2018-07-04 23:00:00.671802398 +0200
+***************
+*** 1524,1529 ****
+--- 1524,1532 ----
+ DEST_MAN_RU = $(DEST_MAN_TOP)/ru.KOI8-R$(MAN1DIR)
+ DEST_MAN_RU_U = $(DEST_MAN_TOP)/ru.UTF-8$(MAN1DIR)
+
++ # The list of tests is common to all systems.
++ include Make_all.mak
++
+ # BASIC_SRC: files that are always used
+ # GUI_SRC: extra GUI files for current configuration
+ # ALL_GUI_SRC: all GUI files for Unix
+***************
+*** 2125,2327 ****
+
+ # Run individual NEW style test.
+ # These do not depend on the executable, compile it when needed.
+! test_arglist \
+! test_arabic \
+! test_assert \
+! test_assign \
+! test_autochdir \
+! test_autocmd \
+! test_autoload \
+! test_backspace_opt \
+! test_blockedit \
+! test_breakindent \
+! test_bufline \
+! test_bufwintabinfo \
+! test_cd \
+! test_cdo \
+! test_changedtick \
+! test_changelist \
+! test_channel \
+! test_charsearch \
+! test_charsearch_utf8 \
+! test_cindent \
+! test_clientserver \
+! test_close_count \
+! test_cmdline \
+! test_command_count \
+! test_comparators \
+! test_compiler \
+! test_crypt \
+! test_cscope \
+! test_cursor_func \
+! test_curswant \
+! test_delete \
+! test_diffmode \
+! test_digraph \
+! test_display \
+! test_edit \
+! test_erasebackword \
+! test_escaped_glob \
+! test_eval_stuff \
+! test_ex_undo \
+! test_ex_z \
+! test_exit \
+! test_exec_while_if \
+! test_execute_func \
+! test_exists \
+! test_exists_autocmd \
+! test_expand \
+! test_expand_dllpath \
+! test_expr \
+! test_expr_utf8 \
+! test_farsi \
+! test_feedkeys \
+! test_file_perm \
+! test_file_size \
+! test_fileformat \
+! test_filetype \
+! test_filter_cmd \
+! test_filter_map \
+! test_find_complete \
+! test_findfile \
+! test_fixeol \
+! test_float_func \
+! test_fnameescape \
+! test_fnamemodify \
+! test_fold \
+! test_functions \
+! test_ga \
+! test_getcwd \
+! test_getvar \
+! test_gf \
+! test_glob2regpat \
+! test_global \
+! test_gn \
+! test_goto \
+! test_gui \
+! test_gui_init \
+! test_hardcopy \
+! test_help \
+! test_help_tagjump \
+! test_hide \
+! test_highlight \
+! test_history \
+! test_hlsearch \
+! test_iminsert \
+! test_increment \
+! test_increment_dbcs \
+! test_ins_complete \
+! test_job_fails \
+! test_join \
+! test_json \
+! test_jumplist \
+! test_jumps \
+! test_lambda \
+! test_langmap \
+! test_largefile \
+! test_let \
+! test_lineending \
+! test_lispwords \
+! test_listchars \
+! test_listdict \
+! test_listlbr \
+! test_listlbr_utf8 \
+! test_lua \
+! test_makeencoding \
+! test_man \
+! test_maparg \
+! test_mapping \
+! test_marks \
+! test_match \
+! test_matchadd_conceal \
+! test_matchadd_conceal_utf8 \
+! test_menu \
+! test_messages \
+! test_mksession \
+! test_mksession_utf8 \
+! test_nested_function \
+! test_netbeans \
+! test_normal \
+! test_number \
+! test_options \
+! test_packadd \
+! test_partial \
+! test_paste \
+! test_perl \
+! test_plus_arg_edit \
+! test_popup \
+! test_preview \
+! test_profile \
+! test_prompt_buffer \
+! test_put \
+! test_python2 \
+! test_python3 \
+! test_pyx2 \
+! test_pyx3 \
+! test_quickfix \
+! test_quotestar \
+! test_recover \
+! test_regex_char_classes \
+! test_regexp_latin \
+! test_regexp_utf8 \
+! test_registers \
+! test_reltime \
+! test_retab \
+! test_ruby \
+! test_scroll_opt \
+! test_scrollbind \
+! test_search \
+! test_searchpos \
+! test_set \
+! test_sha256 \
+! test_signs \
+! test_smartindent \
+! test_sort \
+! test_source_utf8 \
+! test_spell \
+! test_startup \
+! test_startup_utf8 \
+! test_stat \
+! test_statusline \
+! test_substitute \
+! test_swap \
+! test_syn_attr \
+! test_syntax \
+! test_system \
+! test_tab \
+! test_tabline \
+! test_tabpage \
+! test_tagcase \
+! test_tagjump \
+! test_taglist \
+! test_tcl \
+! test_terminal \
+! test_terminal_fail \
+! test_textformat \
+! test_textobjects \
+! test_timers \
+! test_true_false \
+! test_undo \
+! test_unlet \
+! test_usercommands \
+! test_utf8 \
+! test_utf8_comparisons \
+! test_vartabs \
+! test_viminfo \
+! test_vimscript \
+! test_virtualedit \
+! test_visual \
+! test_winbar \
+! test_winbuf_close \
+! test_window_cmd \
+! test_window_id \
+! test_windows_home \
+! test_wordcount \
+! test_writefile \
+! test_xxd \
+! test_alot_latin \
+! test_alot_utf8 \
+! test_alot:
+ cd testdir; rm -f $@.res test.log messages; $(MAKE) -f Makefile $@.res VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+ @if test -f testdir/test.log; then \
+ cat testdir/test.log; \
+--- 2128,2134 ----
+
+ # Run individual NEW style test.
+ # These do not depend on the executable, compile it when needed.
+! $(NEW_TESTS):
+ cd testdir; rm -f $@.res test.log messages; $(MAKE) -f Makefile $@.res VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+ @if test -f testdir/test.log; then \
+ cat testdir/test.log; \
+*** ../vim-8.1.0151/src/Make_all.mak 2018-07-04 23:04:22.810262212 +0200
+--- src/Make_all.mak 2018-07-04 22:58:28.564345380 +0200
+***************
+*** 0 ****
+--- 1,203 ----
++ #
++ # Common Makefile, defines the list of tests to run.
++ #
++
++ # Individual tests, including the ones part of test_alot
++ NEW_TESTS = \
++ test_arglist \
++ test_arabic \
++ test_assert \
++ test_assign \
++ test_autochdir \
++ test_autocmd \
++ test_autoload \
++ test_backspace_opt \
++ test_blockedit \
++ test_breakindent \
++ test_bufline \
++ test_bufwintabinfo \
++ test_cd \
++ test_cdo \
++ test_changedtick \
++ test_changelist \
++ test_channel \
++ test_charsearch \
++ test_charsearch_utf8 \
++ test_cindent \
++ test_clientserver \
++ test_close_count \
++ test_cmdline \
++ test_command_count \
++ test_comparators \
++ test_compiler \
++ test_crypt \
++ test_cscope \
++ test_cursor_func \
++ test_curswant \
++ test_delete \
++ test_diffmode \
++ test_digraph \
++ test_display \
++ test_edit \
++ test_erasebackword \
++ test_escaped_glob \
++ test_eval_stuff \
++ test_ex_undo \
++ test_ex_z \
++ test_exit \
++ test_exec_while_if \
++ test_execute_func \
++ test_exists \
++ test_exists_autocmd \
++ test_expand \
++ test_expand_dllpath \
++ test_expr \
++ test_expr_utf8 \
++ test_farsi \
++ test_feedkeys \
++ test_file_perm \
++ test_file_size \
++ test_fileformat \
++ test_filetype \
++ test_filter_cmd \
++ test_filter_map \
++ test_find_complete \
++ test_findfile \
++ test_fixeol \
++ test_float_func \
++ test_fnameescape \
++ test_fnamemodify \
++ test_fold \
++ test_functions \
++ test_ga \
++ test_getcwd \
++ test_getvar \
++ test_gf \
++ test_glob2regpat \
++ test_global \
++ test_gn \
++ test_goto \
++ test_gui \
++ test_gui_init \
++ test_hardcopy \
++ test_help \
++ test_help_tagjump \
++ test_hide \
++ test_highlight \
++ test_history \
++ test_hlsearch \
++ test_iminsert \
++ test_increment \
++ test_increment_dbcs \
++ test_ins_complete \
++ test_job_fails \
++ test_join \
++ test_json \
++ test_jumplist \
++ test_jumps \
++ test_lambda \
++ test_langmap \
++ test_largefile \
++ test_let \
++ test_lineending \
++ test_lispwords \
++ test_listchars \
++ test_listdict \
++ test_listlbr \
++ test_listlbr_utf8 \
++ test_lua \
++ test_makeencoding \
++ test_man \
++ test_maparg \
++ test_mapping \
++ test_marks \
++ test_match \
++ test_matchadd_conceal \
++ test_matchadd_conceal_utf8 \
++ test_menu \
++ test_messages \
++ test_mksession \
++ test_mksession_utf8 \
++ test_nested_function \
++ test_netbeans \
++ test_normal \
++ test_number \
++ test_options \
++ test_packadd \
++ test_partial \
++ test_paste \
++ test_perl \
++ test_plus_arg_edit \
++ test_popup \
++ test_preview \
++ test_profile \
++ test_prompt_buffer \
++ test_put \
++ test_python2 \
++ test_python3 \
++ test_pyx2 \
++ test_pyx3 \
++ test_quickfix \
++ test_quotestar \
++ test_recover \
++ test_regex_char_classes \
++ test_regexp_latin \
++ test_regexp_utf8 \
++ test_registers \
++ test_reltime \
++ test_retab \
++ test_ruby \
++ test_scroll_opt \
++ test_scrollbind \
++ test_search \
++ test_searchpos \
++ test_set \
++ test_sha256 \
++ test_signs \
++ test_smartindent \
++ test_sort \
++ test_source_utf8 \
++ test_spell \
++ test_startup \
++ test_startup_utf8 \
++ test_stat \
++ test_statusline \
++ test_substitute \
++ test_swap \
++ test_syn_attr \
++ test_syntax \
++ test_system \
++ test_tab \
++ test_tabline \
++ test_tabpage \
++ test_tagcase \
++ test_tagjump \
++ test_taglist \
++ test_tcl \
++ test_terminal \
++ test_terminal_fail \
++ test_textformat \
++ test_textobjects \
++ test_timers \
++ test_true_false \
++ test_undo \
++ test_unlet \
++ test_usercommands \
++ test_utf8 \
++ test_utf8_comparisons \
++ test_vartabs \
++ test_viminfo \
++ test_vimscript \
++ test_virtualedit \
++ test_visual \
++ test_winbar \
++ test_winbuf_close \
++ test_window_cmd \
++ test_window_id \
++ test_windows_home \
++ test_wordcount \
++ test_writefile \
++ test_xxd \
++ test_alot_latin \
++ test_alot_utf8 \
++ test_alot
+*** ../vim-8.1.0151/src/Make_mvc.mak 2018-06-19 18:58:04.010489820 +0200
+--- src/Make_mvc.mak 2018-07-04 23:01:41.003212115 +0200
+***************
+*** 693,698 ****
+--- 693,700 ----
+ ! endif
+ !endif # DEBUG
+
++ !include Make_all.mak
++
+ INCL = vim.h alloc.h arabic.h ascii.h ex_cmds.h farsi.h feature.h globals.h \
+ keymap.h macros.h option.h os_dos.h os_win32.h proto.h regexp.h \
+ spell.h structs.h term.h beval.h $(NBDEBUG_INCL)
+***************
+*** 1296,1301 ****
+--- 1298,1311 ----
+ $(MAKE) /NOLOGO -f Make_dos.mak clean
+ cd ..
+
++ $(NEW_TESTS):
++ cd testdir
++ - if exist $@.res del $@.res
++ $(MAKE) /NOLOGO -f Make_dos.mak nolog
++ $(MAKE) /NOLOGO -f Make_dos.mak $@.res
++ $(MAKE) /NOLOGO -f Make_dos.mak report
++ cd ..
++
+ ###########################################################################
+
+ # Create a default rule for transforming .c files to .obj files in $(OUTDIR)
+*** ../vim-8.1.0151/src/version.c 2018-07-04 22:44:05.273544402 +0200
+--- src/version.c 2018-07-04 22:56:31.145039418 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 152,
+ /**/
+
+--
+Wizards had always known that the act of observation changed the thing that
+was observed, and sometimes forgot that it also changed the observer too.
+ Terry Pratchett - Interesting times
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0153 b/data/vim/patches/8.1.0153
new file mode 100644
index 000000000..5d8a2e571
--- /dev/null
+++ b/data/vim/patches/8.1.0153
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0153
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0153 (after 8.1.0152)
+Problem: Build with SHADOWDIR fails. (Elimar Riesebieter)
+Solution: Create a link for Make_all.mak. (Tony Mechelynck)
+Files: src/Makefile
+
+
+*** ../vim-8.1.0152/src/Makefile 2018-07-04 23:05:19.221931527 +0200
+--- src/Makefile 2018-07-05 17:08:32.727810237 +0200
+***************
+*** 2681,2687 ****
+
+ shadow: runtime pixmaps
+ $(MKDIR_P) $(SHADOWDIR)
+! cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../libvterm ../vimtutor ../gvimtutor ../install-sh .
+ mkdir $(SHADOWDIR)/auto
+ cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
+ $(MKDIR_P) $(SHADOWDIR)/po
+--- 2681,2687 ----
+
+ shadow: runtime pixmaps
+ $(MKDIR_P) $(SHADOWDIR)
+! cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../libvterm ../vimtutor ../gvimtutor ../install-sh ../Make_all.mak .
+ mkdir $(SHADOWDIR)/auto
+ cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
+ $(MKDIR_P) $(SHADOWDIR)/po
+*** ../vim-8.1.0152/src/version.c 2018-07-04 23:05:19.221931527 +0200
+--- src/version.c 2018-07-05 17:09:44.847425259 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 153,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+184. You no longer ask prospective dates what their sign is, instead
+ your line is "Hi, what's your URL?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0154 b/data/vim/patches/8.1.0154
new file mode 100644
index 000000000..c22b71b97
--- /dev/null
+++ b/data/vim/patches/8.1.0154
@@ -0,0 +1,132 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0154
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0154
+Problem: Crash with "set smarttab shiftwidth=0 softtabstop=-1".
+Solution: Fall back to using 'tabstop'. (closes #3155)
+Files: src/edit.c, src/testdir/test_tab.vim
+
+
+*** ../vim-8.1.0153/src/edit.c 2018-07-02 20:51:21.031882115 +0200
+--- src/edit.c 2018-07-05 22:23:27.440802276 +0200
+***************
+*** 9347,9366 ****
+ && (!*inserted_space_p
+ || arrow_used))))))
+ {
+- #ifndef FEAT_VARTABS
+ int ts;
+- #endif
+ colnr_T vcol;
+ colnr_T want_vcol;
+ colnr_T start_vcol;
+
+ *inserted_space_p = FALSE;
+- #ifndef FEAT_VARTABS
+- if (p_sta && in_indent)
+- ts = (int)get_sw_value(curbuf);
+- else
+- ts = (int)get_sts_value();
+- #endif
+ /* Compute the virtual column where we want to be. Since
+ * 'showbreak' may get in the way, need to get the last column of
+ * the previous character. */
+--- 9347,9358 ----
+***************
+*** 9371,9381 ****
+ inc_cursor();
+ #ifdef FEAT_VARTABS
+ if (p_sta && in_indent)
+! want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw;
+ else
+ want_vcol = tabstop_start(want_vcol, get_sts_value(),
+ curbuf->b_p_vsts_array);
+ #else
+ want_vcol = (want_vcol / ts) * ts;
+ #endif
+
+--- 9363,9380 ----
+ inc_cursor();
+ #ifdef FEAT_VARTABS
+ if (p_sta && in_indent)
+! {
+! ts = (int)get_sw_value(curbuf);
+! want_vcol = (want_vcol / ts) * ts;
+! }
+ else
+ want_vcol = tabstop_start(want_vcol, get_sts_value(),
+ curbuf->b_p_vsts_array);
+ #else
++ if (p_sta && in_indent)
++ ts = (int)get_sw_value(curbuf);
++ else
++ ts = (int)get_sts_value();
+ want_vcol = (want_vcol / ts) * ts;
+ #endif
+
+***************
+*** 10200,10206 ****
+ #ifdef FEAT_VARTABS
+ if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */
+ {
+! temp = (int)curbuf->b_p_sw;
+ temp -= get_nolist_virtcol() % temp;
+ }
+ else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts != 0)
+--- 10199,10205 ----
+ #ifdef FEAT_VARTABS
+ if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */
+ {
+! temp = (int)get_sw_value(curbuf);
+ temp -= get_nolist_virtcol() % temp;
+ }
+ else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts != 0)
+*** ../vim-8.1.0153/src/testdir/test_tab.vim 2018-07-02 20:51:21.035882093 +0200
+--- src/testdir/test_tab.vim 2018-07-05 22:19:41.994015889 +0200
+***************
+*** 76,81 ****
+ exe "normal A\<BS>x\<Esc>"
+ call assert_equal("x x", getline(1))
+
+! set sts=0 sw=0 backspace&
+ bwipe!
+ endfunc
+--- 76,90 ----
+ exe "normal A\<BS>x\<Esc>"
+ call assert_equal("x x", getline(1))
+
+! call setline(1, 'x')
+! set sts=-1 sw=0 smarttab
+! exe "normal I\<Tab>\<Esc>"
+! call assert_equal("\tx", getline(1))
+!
+! call setline(1, 'x')
+! exe "normal I\<Tab>\<BS>\<Esc>"
+! call assert_equal("x", getline(1))
+!
+! set sts=0 sw=0 backspace& nosmarttab
+ bwipe!
+ endfunc
+*** ../vim-8.1.0153/src/version.c 2018-07-05 17:11:15.726937929 +0200
+--- src/version.c 2018-07-05 22:26:36.351782249 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 154,
+ /**/
+
+--
+A computer program does what you tell it to do, not what you want it to do.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0155 b/data/vim/patches/8.1.0155
new file mode 100644
index 000000000..bda4f000e
--- /dev/null
+++ b/data/vim/patches/8.1.0155
@@ -0,0 +1,44 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0155
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0155
+Problem: Evim.man missing from the distribution.
+Solution: Add it to the list.
+Files: Filelist
+
+
+*** ../vim-8.1.0154/Filelist 2018-07-04 23:05:19.221931527 +0200
+--- Filelist 2018-07-05 22:56:27.346990258 +0200
+***************
+*** 710,715 ****
+--- 710,716 ----
+
+ # runtime for Amiga (also in the extra archive)
+ RT_AMI_DOS = \
++ runtime/doc/evim.man \
+ runtime/doc/vim.man \
+ runtime/doc/vimdiff.man \
+ runtime/doc/vimtutor.man \
+*** ../vim-8.1.0154/src/version.c 2018-07-05 22:27:04.463630279 +0200
+--- src/version.c 2018-07-05 22:57:19.182722612 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 155,
+ /**/
+
+--
+I'm in shape. Round IS a shape.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0156 b/data/vim/patches/8.1.0156
new file mode 100644
index 000000000..6fffda959
--- /dev/null
+++ b/data/vim/patches/8.1.0156
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0156
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0156
+Problem: MS-Windows compiler warning.
+Solution: Add a type cast. (Mike Williams)
+Files: src/version.c
+
+
+*** ../vim-8.1.0155/src/version.c 2018-07-05 22:58:12.658446246 +0200
+--- src/version.c 2018-07-06 22:50:55.951147490 +0200
+***************
+*** 61,67 ****
+ + strlen(VIM_VERSION_DATE_ONLY)
+ + strlen(date_time);
+
+! longVersion = (char *)alloc(len);
+ if (longVersion == NULL)
+ longVersion = VIM_VERSION_LONG;
+ else
+--- 61,67 ----
+ + strlen(VIM_VERSION_DATE_ONLY)
+ + strlen(date_time);
+
+! longVersion = (char *)alloc((unsigned)len);
+ if (longVersion == NULL)
+ longVersion = VIM_VERSION_LONG;
+ else
+*** ../vim-8.1.0155/src/version.c 2018-07-05 22:58:12.658446246 +0200
+--- src/version.c 2018-07-06 22:50:55.951147490 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 156,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+192. Your boss asks you to "go fer" coffee and you come up with 235 FTP sites.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0157 b/data/vim/patches/8.1.0157
new file mode 100644
index 000000000..0608b5cdb
--- /dev/null
+++ b/data/vim/patches/8.1.0157
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.01
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0157
+Problem: Old iTerm2 is not recognized, resulting in stray output.
+Solution: Recognize the termresponse.
+Files: src/term.c
+
+
+*** ../vim-8.1.0156/src/term.c 2018-07-03 17:16:55.626135028 +0200
+--- src/term.c 2018-07-06 23:07:26.257971889 +0200
+***************
+*** 4659,4675 ****
+
+ if (version == 95)
+ {
+! /* Mac Terminal.app sends 1;95;0 */
+ if (STRNCMP(tp + extra - 2, "1;95;0c", 7) == 0)
+ {
+ is_not_xterm = TRUE;
+ is_mac_terminal = TRUE;
+ }
+ # ifdef FEAT_MOUSE_SGR
+! /* iTerm2 sends 0;95;0 */
+ if (STRNCMP(tp + extra - 2, "0;95;0c", 7) == 0)
+ is_iterm2 = TRUE;
+ # endif
+ }
+
+ /* Only set 'ttymouse' automatically if it was not set
+--- 4659,4679 ----
+
+ if (version == 95)
+ {
+! // Mac Terminal.app sends 1;95;0
+ if (STRNCMP(tp + extra - 2, "1;95;0c", 7) == 0)
+ {
+ is_not_xterm = TRUE;
+ is_mac_terminal = TRUE;
+ }
+ # ifdef FEAT_MOUSE_SGR
+! // iTerm2 sends 0;95;0
+ if (STRNCMP(tp + extra - 2, "0;95;0c", 7) == 0)
+ is_iterm2 = TRUE;
++ else
+ # endif
++ // old iTerm2 sends 0;95;
++ if (STRNCMP(tp + extra - 2, "0;95;c", 6) == 0)
++ is_not_xterm = TRUE;
+ }
+
+ /* Only set 'ttymouse' automatically if it was not set
+*** ../vim-8.1.0156/src/version.c 2018-07-06 22:51:58.010808660 +0200
+--- src/version.c 2018-07-06 23:10:48.856915992 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 157,
+ /**/
+
+
+--
+Press any key to continue, press any other key to quit.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0158 b/data/vim/patches/8.1.0158
new file mode 100644
index 000000000..878bf2e15
--- /dev/null
+++ b/data/vim/patches/8.1.0158
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0158
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0158
+Problem: GUI: input() fails if CTRL-C was pressed before. (Michael Naumann)
+Solution: call vpeekc() to drop the CTRL-C from the input stream.
+Files: src/ex_docmd.c
+
+
+*** ../vim-8.1.0157/src/ex_docmd.c 2018-07-04 22:26:24.515946368 +0200
+--- src/ex_docmd.c 2018-07-07 16:11:37.571323580 +0200
+***************
+*** 9157,9162 ****
+--- 9157,9167 ----
+ parse_queued_messages();
+ #endif
+ }
++
++ // If CTRL-C was typed to interrupt the sleep, drop the CTRL-C from the
++ // input buffer, otherwise a following call to input() fails.
++ if (got_int)
++ (void)vpeekc();
+ }
+
+ static void
+*** ../vim-8.1.0157/src/version.c 2018-07-06 23:11:35.484671649 +0200
+--- src/version.c 2018-07-07 16:12:59.190883016 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 158,
+ /**/
+
+--
+Some of the well known MS-Windows errors:
+ EMULTI Multitasking attempted, system confused
+ EKEYBOARD Keyboard locked, try getting out of this one!
+ EXPLAIN Unexplained error, please tell us what happened
+ EFUTURE Reserved for our future mistakes
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0159 b/data/vim/patches/8.1.0159
new file mode 100644
index 000000000..27a8575b1
--- /dev/null
+++ b/data/vim/patches/8.1.0159
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0159
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0159
+Problem: Completion for user names does not work if a prefix is also a full
+ matching name. (Nazri Ramliy)
+Solution: Accept both full and partial matches. (Dominique Pelle)
+Files: src/misc1.c, src/ex_docmd.c
+
+
+*** ../vim-8.1.0158/src/misc1.c 2018-06-23 19:22:45.610486284 +0200
+--- src/misc1.c 2018-07-07 16:35:08.759245918 +0200
+***************
+*** 4827,4833 ****
+ * 1 if name partially matches the beginning of a user name.
+ * 2 is name fully matches a user name.
+ */
+! int match_user(char_u* name)
+ {
+ int i;
+ int n = (int)STRLEN(name);
+--- 4827,4834 ----
+ * 1 if name partially matches the beginning of a user name.
+ * 2 is name fully matches a user name.
+ */
+! int
+! match_user(char_u *name)
+ {
+ int i;
+ int n = (int)STRLEN(name);
+*** ../vim-8.1.0158/src/ex_docmd.c 2018-07-07 16:18:09.345159549 +0200
+--- src/ex_docmd.c 2018-07-07 16:36:53.494751472 +0200
+***************
+*** 3764,3770 ****
+ * A full match ~user<Tab> will be replaced by user's home
+ * directory i.e. something like ~user<Tab> -> /home/user/ */
+ if (*p == NUL && p > xp->xp_pattern + 1
+! && match_user(xp->xp_pattern + 1) == 1)
+ {
+ xp->xp_context = EXPAND_USER;
+ ++xp->xp_pattern;
+--- 3764,3770 ----
+ * A full match ~user<Tab> will be replaced by user's home
+ * directory i.e. something like ~user<Tab> -> /home/user/ */
+ if (*p == NUL && p > xp->xp_pattern + 1
+! && match_user(xp->xp_pattern + 1) >= 1)
+ {
+ xp->xp_context = EXPAND_USER;
+ ++xp->xp_pattern;
+*** ../vim-8.1.0158/src/version.c 2018-07-07 16:18:09.349159526 +0200
+--- src/version.c 2018-07-07 16:40:39.866042630 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 159,
+ /**/
+
+--
+Some of the well known MS-Windows errors:
+ ETIME Wrong time, wait a little while
+ ECRASH Try again...
+ EDETECT Unable to detect errors
+ EOVER You lost! Play another game?
+ ENOCLUE Eh, what did you want?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0160 b/data/vim/patches/8.1.0160
new file mode 100644
index 000000000..4e3a75365
--- /dev/null
+++ b/data/vim/patches/8.1.0160
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0160
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0160
+Problem: No Danish manual translations.
+Solution: Add the Danish manual translations to the file list.
+Files: Filelist
+
+
+*** ../vim-8.1.0159/Filelist 2018-07-05 22:58:12.658446246 +0200
+--- Filelist 2018-07-07 17:20:09.996801627 +0200
+***************
+*** 851,856 ****
+--- 851,858 ----
+
+ # generic language files
+ LANG_GEN = \
++ runtime/doc/*-da.1 \
++ runtime/doc/*-da.UTF-8.1 \
+ runtime/doc/*-de.1 \
+ runtime/doc/*-de.UTF-8.1 \
+ runtime/doc/*-fr.1 \
+*** ../vim-8.1.0159/src/version.c 2018-07-07 16:41:10.153931299 +0200
+--- src/version.c 2018-07-07 17:21:19.424337015 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 160,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+196. Your computer costs more than your car.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0161 b/data/vim/patches/8.1.0161
new file mode 100644
index 000000000..ff88d792f
--- /dev/null
+++ b/data/vim/patches/8.1.0161
@@ -0,0 +1,154 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0161
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0161
+Problem: Buffer not updated with 'autoread' set if file was deleted.
+ (Michael Naumann)
+Solution: Don't set the timestamp to zero. (closes #3165)
+Files: src/fileio.c, src/testdir/test_stat.vim
+
+
+*** ../vim-8.1.0160/src/fileio.c 2018-06-22 21:30:27.351186530 +0200
+--- src/fileio.c 2018-07-07 17:31:23.592491109 +0200
+***************
+*** 6923,6933 ****
+ {
+ retval = 1;
+
+! /* set b_mtime to stop further warnings (e.g., when executing
+! * FileChangedShell autocmd) */
+ if (stat_res < 0)
+ {
+! buf->b_mtime = 0;
+ buf->b_orig_size = 0;
+ buf->b_orig_mode = 0;
+ }
+--- 6923,6935 ----
+ {
+ retval = 1;
+
+! // set b_mtime to stop further warnings (e.g., when executing
+! // FileChangedShell autocmd)
+ if (stat_res < 0)
+ {
+! // When 'autoread' is set we'll check the file again to see if it
+! // re-appears.
+! buf->b_mtime = buf->b_p_ar;
+ buf->b_orig_size = 0;
+ buf->b_orig_mode = 0;
+ }
+*** ../vim-8.1.0160/src/testdir/test_stat.vim 2017-08-17 17:34:06.000000000 +0200
+--- src/testdir/test_stat.vim 2018-07-07 18:27:11.809270986 +0200
+***************
+*** 46,51 ****
+--- 46,60 ----
+ call assert_equal('rwx', getfperm(dname)[0:2])
+ endfunc
+
++ func SleepForTimestamp()
++ " FAT has a granularity of 2 seconds, otherwise it's usually 1 second
++ if has('win32')
++ sleep 2
++ else
++ sleep 1
++ endif
++ endfunc
++
+ func Test_checktime()
+ let fname = 'Xtest.tmp'
+
+***************
+*** 53,64 ****
+ call writefile(fl, fname)
+ set autoread
+ exec 'e' fname
+! " FAT has a granularity of 2 seconds, otherwise it's usually 1 second
+! if has('win32')
+! sleep 2
+! else
+! sleep 1
+! endif
+ let fl = readfile(fname)
+ let fl[0] .= ' - checktime'
+ call writefile(fl, fname)
+--- 62,68 ----
+ call writefile(fl, fname)
+ set autoread
+ exec 'e' fname
+! call SleepForTimestamp()
+ let fl = readfile(fname)
+ let fl[0] .= ' - checktime'
+ call writefile(fl, fname)
+***************
+*** 68,73 ****
+--- 72,117 ----
+ call delete(fname)
+ endfunc
+
++ func Test_autoread_file_deleted()
++ new Xautoread
++ set autoread
++ call setline(1, 'original')
++ w!
++
++ call SleepForTimestamp()
++ if has('win32')
++ silent !echo changed > Xautoread
++ else
++ silent !echo 'changed' > Xautoread
++ endif
++ checktime
++ call assert_equal('changed', trim(getline(1)))
++
++ call SleepForTimestamp()
++ messages clear
++ if has('win32')
++ silent !del Xautoread
++ else
++ silent !rm Xautoread
++ endif
++ checktime
++ call assert_match('E211:', execute('messages'))
++ call assert_equal('changed', trim(getline(1)))
++
++ call SleepForTimestamp()
++ if has('win32')
++ silent !echo recreated > Xautoread
++ else
++ silent !echo 'recreated' > Xautoread
++ endif
++ checktime
++ call assert_equal('recreated', trim(getline(1)))
++
++ call delete('Xautoread')
++ bwipe!
++ endfunc
++
++
+ func Test_nonexistent_file()
+ let fname = 'Xtest.tmp'
+
+*** ../vim-8.1.0160/src/version.c 2018-07-07 17:21:49.120140280 +0200
+--- src/version.c 2018-07-07 17:33:03.899873420 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 161,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+197. Your desk collapses under the weight of your computer peripherals.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0162 b/data/vim/patches/8.1.0162
new file mode 100644
index 000000000..95c3959e7
--- /dev/null
+++ b/data/vim/patches/8.1.0162
@@ -0,0 +1,149 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0162
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0162
+Problem: Danish and German man pages are not installed. (Tony Mechelynck)
+Solution: Adjust the makefile
+Files: src/Makefile
+
+
+*** ../vim-8.1.0161/src/Makefile Thu Jul 5 17:11:15 2018
+--- src/Makefile Sat Jul 7 22:19:17 2018
+***************
+*** 1511,1516 ****
+--- 1511,1522 ----
+ # directory first.
+ # FreeBSD uses ".../man/xx.ISO8859-1/man1" for latin1, use that one too.
+ DEST_MAN = $(DEST_MAN_TOP)$(MAN1DIR)
++ DEST_MAN_DA = $(DEST_MAN_TOP)/da$(MAN1DIR)
++ DEST_MAN_DA_I = $(DEST_MAN_TOP)/da.ISO8859-1$(MAN1DIR)
++ DEST_MAN_DA_U = $(DEST_MAN_TOP)/da.UTF-8$(MAN1DIR)
++ DEST_MAN_DE = $(DEST_MAN_TOP)/de$(MAN1DIR)
++ DEST_MAN_DE_I = $(DEST_MAN_TOP)/de.ISO8859-1$(MAN1DIR)
++ DEST_MAN_DE_U = $(DEST_MAN_TOP)/de.UTF-8$(MAN1DIR)
+ DEST_MAN_FR = $(DEST_MAN_TOP)/fr$(MAN1DIR)
+ DEST_MAN_FR_I = $(DEST_MAN_TOP)/fr.ISO8859-1$(MAN1DIR)
+ DEST_MAN_FR_U = $(DEST_MAN_TOP)/fr.UTF-8$(MAN1DIR)
+***************
+*** 2381,2386 ****
+--- 2387,2398 ----
+
+ # install the language specific files for tools, if they were unpacked
+ install-tool-languages:
++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DA) "-da" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DA_I) "-da" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DA_U) "-da.UTF-8" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DE) "-de" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DE_I) "-de" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DE_U) "-de.UTF-8" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh xxd $(DEST_MAN_FR) "-fr" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh xxd $(DEST_MAN_FR_I) "-fr" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh xxd $(DEST_MAN_FR_U) "-fr.UTF-8" $(INSTALLMANARGS)
+***************
+*** 2396,2401 ****
+--- 2408,2419 ----
+
+ # install the language specific files, if they were unpacked
+ install-languages: languages $(DEST_LANG) $(DEST_KMAP)
++ -$(SHELL) ./installman.sh install $(DEST_MAN_DA) "-da" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh install $(DEST_MAN_DA_I) "-da" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh install $(DEST_MAN_DA_U) "-da.UTF-8" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh install $(DEST_MAN_DE) "-de" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh install $(DEST_MAN_DE_I) "-de" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh install $(DEST_MAN_DE_U) "-de.UTF-8" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh install $(DEST_MAN_FR) "-fr" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh install $(DEST_MAN_FR_I) "-fr" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh install $(DEST_MAN_FR_U) "-fr.UTF-8" $(INSTALLMANARGS)
+***************
+*** 2409,2414 ****
+--- 2427,2444 ----
+ -$(SHELL) ./installman.sh install $(DEST_MAN_RU) "-ru" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh install $(DEST_MAN_RU_U) "-ru.UTF-8" $(INSTALLMANARGS)
+ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DA) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DA_I) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DA_U) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DE) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DE_I) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DE_U) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
+ $(DEST_MAN_FR) $(INSTALLMLARGS)
+ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
+ $(DEST_MAN_FR_I) $(INSTALLMLARGS)
+***************
+*** 2582,2587 ****
+--- 2612,2623 ----
+ # Note: the "rmdir" will fail if any files were added after "make install"
+ uninstall_runtime:
+ -$(SHELL) ./installman.sh uninstall $(DEST_MAN) "" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DA) "" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DA_I) "" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DA_U) "" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DE) "" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DE_I) "" $(INSTALLMANARGS)
++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DE_U) "" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_FR) "" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_FR_I) "" $(INSTALLMANARGS)
+ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_FR_U) "" $(INSTALLMANARGS)
+***************
+*** 2597,2602 ****
+--- 2633,2650 ----
+ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+ $(DEST_MAN) $(INSTALLMLARGS)
+ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DA) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DA_I) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DA_U) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DE) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DE_I) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
++ $(DEST_MAN_DE_U) $(INSTALLMLARGS)
++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+ $(DEST_MAN_FR) $(INSTALLMLARGS)
+ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+ $(DEST_MAN_FR_I) $(INSTALLMLARGS)
+***************
+*** 2621,2626 ****
+--- 2669,2676 ----
+ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+ $(DEST_MAN_RU_U) $(INSTALLMLARGS)
+ -rm -f $(DEST_MAN)/xxd.1
++ -rm -f $(DEST_MAN_DA)/xxd.1 $(DEST_MAN_DA_I)/xxd.1 $(DEST_MAN_DA_U)/xxd.1
++ -rm -f $(DEST_MAN_DE)/xxd.1 $(DEST_MAN_DE_I)/xxd.1 $(DEST_MAN_DE_U)/xxd.1
+ -rm -f $(DEST_MAN_FR)/xxd.1 $(DEST_MAN_FR_I)/xxd.1 $(DEST_MAN_FR_U)/xxd.1
+ -rm -f $(DEST_MAN_IT)/xxd.1 $(DEST_MAN_IT_I)/xxd.1 $(DEST_MAN_IT_U)/xxd.1
+ -rm -f $(DEST_MAN_JA_U)/xxd.1
+*** ../vim-8.1.0161/src/version.c Sat Jul 7 18:34:08 2018
+--- src/version.c Sat Jul 7 22:20:11 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 162,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+199. You read this entire list of symptoms, looking for something
+ that doesn't describe you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0163 b/data/vim/patches/8.1.0163
new file mode 100644
index 000000000..f85411a6b
--- /dev/null
+++ b/data/vim/patches/8.1.0163
@@ -0,0 +1,174 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0163
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0163
+Problem: Insufficient testing for Tcl.
+Solution: Add a few more tests. (Dominique Pelle, closes #3166)
+Files: src/testdir/test_tcl.vim
+
+
+*** ../vim-8.1.0162/src/testdir/test_tcl.vim Wed Jul 4 22:36:42 2018
+--- src/testdir/test_tcl.vim Sat Jul 7 22:39:36 2018
+***************
+*** 110,115 ****
+--- 110,126 ----
+ call assert_equal('+4', &cc)
+ call assert_equal('+4', TclEval('::vim::option cc'))
+
++ " Test boolean option with 'toggle', 'on' and 'off' keywords.
++ call assert_equal('0', TclEval('::vim::option nu toggle'))
++ call assert_equal(1, &nu)
++ call assert_equal('1', TclEval('::vim::option nu toggle'))
++ call assert_equal(0, &nu)
++ call assert_equal('0', TclEval('::vim::option nu on'))
++ call assert_equal(1, &nu)
++ call assert_equal('1', TclEval('::vim::option nu off'))
++ call assert_equal(0, &nu)
++
++ call assert_fails('tcl ::vim::option nu x', 'expected integer but got "x"')
+ call assert_fails('tcl ::vim::option xxx', 'unknown vimOption')
+ call assert_fails('tcl ::vim::option',
+ \ 'wrong # args: should be "::vim::option vimOption ?value?"')
+***************
+*** 124,129 ****
+--- 135,141 ----
+
+ call assert_fails('tcl ::vim::expr x y',
+ \ 'wrong # args: should be "::vim::expr vimExpr"')
++ call assert_fails('tcl ::vim::expr 1-', 'E15: Invalid expression: 1-')
+ endfunc
+
+ " Test ::vim::command
+***************
+*** 131,136 ****
+--- 143,153 ----
+ call assert_equal('hello world',
+ \ TclEval('::vim::command {echo "hello world"}'))
+
++ " Check that if ::vim::command created a new Tcl interpreter, it is removed.
++ tcl set foo 123
++ call assert_equal('321', TclEval('::vim::command "tcl set foo 321"'))
++ call assert_equal('123', TclEval('set foo'))
++
+ " With the -quiet option, the error should silently be ignored.
+ call assert_equal('', TclEval('::vim::command -quiet xyz'))
+
+***************
+*** 142,147 ****
+--- 159,166 ----
+
+ " With the -quiet option, the error should silently be ignored.
+ call assert_equal('', TclEval('::vim::command -quiet xyz'))
++
++ tcl unset foo
+ endfunc
+
+ " Test ::vim::window list
+***************
+*** 164,175 ****
+
+ " Test output messages
+ func Test_output()
+! call assert_fails('tcl puts vimerr "an error"', 'an error')
+! tcl puts vimout "a message"
+! tcl puts "another message"
+ let messages = split(execute('message'), "\n")
+! call assert_equal('a message', messages[-2])
+! call assert_equal('another message', messages[-1])
+
+ call assert_fails('tcl puts',
+ \ 'wrong # args: should be "puts ?-nonewline? ?channelId? string"')
+--- 183,197 ----
+
+ " Test output messages
+ func Test_output()
+! call assert_fails('tcl puts vimerr "error #1"', 'error #1')
+! call assert_fails('tcl puts stderr "error #2"', 'error #2')
+! tcl puts vimout "message #1"
+! tcl puts stdout "message #2"
+! tcl puts "message #3"
+ let messages = split(execute('message'), "\n")
+! call assert_equal('message #3', messages[-1])
+! call assert_equal('message #2', messages[-2])
+! call assert_equal('message #1', messages[-3])
+
+ call assert_fails('tcl puts',
+ \ 'wrong # args: should be "puts ?-nonewline? ?channelId? string"')
+***************
+*** 447,459 ****
+ call setline(1, ['line1', 'line2', 'line3', 'line4', 'line5'])
+ tcl $::vim::current(buffer) set 2 a
+ call assert_equal(['line1', 'a', 'line3', 'line4', 'line5'], getline(1, '$'))
+ tcl $::vim::current(buffer) set 3 4 b
+ call assert_equal(['line1', 'a', 'b', 'line5'], getline(1, '$'))
+ tcl $::vim::current(buffer) set 4 3 c
+ call assert_equal(['line1', 'a', 'c'], getline(1, '$'))
+
+ call assert_fails('tcl $::vim::current(buffer) set 0 "x"', 'line number out of range')
+! call assert_fails('tcl $::vim::current(buffer) set 5 "x"', 'line number out of range')
+
+ call assert_fails('tcl $::vim::current(buffer) set', 'wrong # args:')
+ bwipe!
+--- 469,489 ----
+ call setline(1, ['line1', 'line2', 'line3', 'line4', 'line5'])
+ tcl $::vim::current(buffer) set 2 a
+ call assert_equal(['line1', 'a', 'line3', 'line4', 'line5'], getline(1, '$'))
++
++ " Test with fewer replacing lines than replaced lines: lines get deleted.
+ tcl $::vim::current(buffer) set 3 4 b
+ call assert_equal(['line1', 'a', 'b', 'line5'], getline(1, '$'))
+ tcl $::vim::current(buffer) set 4 3 c
+ call assert_equal(['line1', 'a', 'c'], getline(1, '$'))
+
++ " Test with more replacing lines than replaced lines: lines get added.
++ tcl $::vim::current(buffer) set 2 3 {x y z}
++ call assert_equal(['line1', 'x', 'y', 'z'], getline(1, '$'))
++ tcl $::vim::current(buffer) set 3 2 {X Y Z}
++ call assert_equal(['line1', 'X', 'Y', 'Z', 'z'], getline(1, '$'))
++
+ call assert_fails('tcl $::vim::current(buffer) set 0 "x"', 'line number out of range')
+! call assert_fails('tcl $::vim::current(buffer) set 6 "x"', 'line number out of range')
+
+ call assert_fails('tcl $::vim::current(buffer) set', 'wrong # args:')
+ bwipe!
+***************
+*** 622,628 ****
+ call delete('Xtcl_file')
+ endfunc
+
+! " Test exiting current Tcl interprepter and re-creating one.
+ func Test_tcl_exit()
+ tcl set foo "foo"
+ call assert_fails('tcl exit 3', 'E572: exit code 3')
+--- 652,658 ----
+ call delete('Xtcl_file')
+ endfunc
+
+! " Test exiting current Tcl interpreter and re-creating one.
+ func Test_tcl_exit()
+ tcl set foo "foo"
+ call assert_fails('tcl exit 3', 'E572: exit code 3')
+*** ../vim-8.1.0162/src/version.c Sat Jul 7 22:26:49 2018
+--- src/version.c Sat Jul 7 22:39:52 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 163,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+200. You really believe in the concept of a "paperless" office.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0164 b/data/vim/patches/8.1.0164
new file mode 100644
index 000000000..a4982fcb9
--- /dev/null
+++ b/data/vim/patches/8.1.0164
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0164
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0164
+Problem: luaeval('vim.buffer().name') returns an error.
+Solution: Return an empty string. (Dominique Pelle, closes #3167)
+Files: src/if_lua.c, src/testdir/test_lua.vim
+
+
+*** ../vim-8.1.0163/src/if_lua.c Sun Jul 1 15:12:00 2018
+--- src/if_lua.c Sat Jul 7 23:04:53 2018
+***************
+*** 1123,1131 ****
+ {
+ const char *s = lua_tostring(L, 2);
+ if (strncmp(s, "name", 4) == 0)
+! lua_pushstring(L, (char *) b->b_sfname);
+ else if (strncmp(s, "fname", 5) == 0)
+! lua_pushstring(L, (char *) b->b_ffname);
+ else if (strncmp(s, "number", 6) == 0)
+ lua_pushinteger(L, b->b_fnum);
+ /* methods */
+--- 1123,1133 ----
+ {
+ const char *s = lua_tostring(L, 2);
+ if (strncmp(s, "name", 4) == 0)
+! lua_pushstring(L, (b->b_sfname == NULL)
+! ? "" : (char *) b->b_sfname);
+ else if (strncmp(s, "fname", 5) == 0)
+! lua_pushstring(L, (b->b_ffname == NULL)
+! ? "" : (char *) b->b_ffname);
+ else if (strncmp(s, "number", 6) == 0)
+ lua_pushinteger(L, b->b_fnum);
+ /* methods */
+*** ../vim-8.1.0163/src/testdir/test_lua.vim Mon Jul 2 22:54:32 2018
+--- src/testdir/test_lua.vim Sat Jul 7 23:04:53 2018
+***************
+*** 198,208 ****
+ " Test vim.buffer().name and vim.buffer().fname
+ func Test_buffer_name()
+ new
+! " FIXME: for an unnamed buffer, I would expect
+! " vim.buffer().name to give an empty string, but
+! " it returns 0. Is it a bug?
+! " so this assert_equal is commented out.
+! " call assert_equal('', luaeval('vim.buffer().name'))
+ bwipe!
+
+ new Xfoo
+--- 198,205 ----
+ " Test vim.buffer().name and vim.buffer().fname
+ func Test_buffer_name()
+ new
+! call assert_equal('', luaeval('vim.buffer().name'))
+! call assert_equal('', luaeval('vim.buffer().fname'))
+ bwipe!
+
+ new Xfoo
+*** ../vim-8.1.0163/src/version.c Sat Jul 7 22:41:57 2018
+--- src/version.c Sat Jul 7 23:06:18 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 164,
+ /**/
+
+--
+Spam seems to be something useful to novices. Later you realize that
+it's a bunch of indigestable junk that only clogs your system.
+Applies to both the food and the e-mail!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0165 b/data/vim/patches/8.1.0165
new file mode 100644
index 000000000..39977900c
--- /dev/null
+++ b/data/vim/patches/8.1.0165
@@ -0,0 +1,123 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0165
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0165
+Problem: :clist output can be very long.
+Solution: Support filtering :clist entries. (Yegappan Lakshmanan)
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0164/src/quickfix.c Tue Jul 3 16:54:18 2018
+--- src/quickfix.c Sun Jul 8 15:53:26 2018
+***************
+*** 3051,3056 ****
+--- 3051,3057 ----
+ int qfFileAttr;
+ int qfSepAttr;
+ int qfLineAttr;
++ int filter_entry;
+ int all = eap->forceit; /* if not :cl!, only show
+ recognised errors */
+ qf_info_T *qi = &ql_info;
+***************
+*** 3120,3126 ****
+ {
+ if ((qfp->qf_valid || all) && idx1 <= i && i <= idx2)
+ {
+- msg_putchar('\n');
+ if (got_int)
+ break;
+
+--- 3121,3126 ----
+***************
+*** 3141,3146 ****
+--- 3141,3160 ----
+ vim_snprintf((char *)IObuff, IOSIZE, "%2d %s",
+ i, (char *)fname);
+ }
++
++ // Support for filtering entries using :filter /pat/ clist
++ filter_entry = 1;
++ if (qfp->qf_module != NULL && *qfp->qf_module != NUL)
++ filter_entry &= message_filtered(qfp->qf_module);
++ if (fname != NULL)
++ filter_entry &= message_filtered(fname);
++ if (qfp->qf_pattern != NULL)
++ filter_entry &= message_filtered(qfp->qf_pattern);
++ filter_entry &= message_filtered(qfp->qf_text);
++ if (filter_entry)
++ goto next_entry;
++
++ msg_putchar('\n');
+ msg_outtrans_attr(IObuff, i == qi->qf_lists[qi->qf_curlist].qf_index
+ ? HL_ATTR(HLF_QFL) : qfFileAttr);
+
+***************
+*** 3175,3180 ****
+--- 3189,3195 ----
+ out_flush(); /* show one line at a time */
+ }
+
++ next_entry:
+ qfp = qfp->qf_next;
+ if (qfp == NULL)
+ break;
+***************
+*** 4186,4191 ****
+--- 4201,4207 ----
+ }
+ if (res >= 0)
+ qf_list_changed(qi, qi->qf_curlist);
++
+ // Remember the current quickfix list identifier, so that we can
+ // check for autocommands changing the current quickfix list.
+ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+*** ../vim-8.1.0164/src/testdir/test_quickfix.vim Tue Jul 3 19:15:56 2018
+--- src/testdir/test_quickfix.vim Sun Jul 8 15:53:26 2018
+***************
+*** 3487,3489 ****
+--- 3487,3506 ----
+ call Xautocmd_changelist('c')
+ call Xautocmd_changelist('l')
+ endfunc
++
++ " Tests for the ':filter /pat/ clist' command
++ func Test_filter_clist()
++ cexpr ['Xfile1:10:10:Line 10', 'Xfile2:15:15:Line 15']
++ call assert_equal([' 2 Xfile2:15 col 15: Line 15'],
++ \ split(execute('filter /Line 15/ clist'), "\n"))
++ call assert_equal([' 1 Xfile1:10 col 10: Line 10'],
++ \ split(execute('filter /Xfile1/ clist'), "\n"))
++ call assert_equal([], split(execute('filter /abc/ clist'), "\n"))
++
++ call setqflist([{'module' : 'abc', 'pattern' : 'pat1'},
++ \ {'module' : 'pqr', 'pattern' : 'pat2'}], ' ')
++ call assert_equal([' 2 pqr:pat2: '],
++ \ split(execute('filter /pqr/ clist'), "\n"))
++ call assert_equal([' 1 abc:pat1: '],
++ \ split(execute('filter /pat1/ clist'), "\n"))
++ endfunc
+*** ../vim-8.1.0164/src/version.c Sat Jul 7 23:07:35 2018
+--- src/version.c Sun Jul 8 15:54:40 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 165,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+204. You're being audited because you mailed your tax return to the IRC.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0166 b/data/vim/patches/8.1.0166
new file mode 100644
index 000000000..33266c94e
--- /dev/null
+++ b/data/vim/patches/8.1.0166
@@ -0,0 +1,1183 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0166
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0166
+Problem: Using dict_add_nr_str() is clumsy.
+Solution: Split into two functions. (Ozaki Kiichi, closes #3154)
+Files: src/channel.c, src/dict.c, src/edit.c, src/evalfunc.c,
+ src/ex_cmds2.c, src/ops.c, src/option.c, src/proto/dict.pro,
+ src/quickfix.c, src/tag.c, src/terminal.c, src/undo.c
+
+
+*** ../vim-8.1.0165/src/channel.c Sun Jun 17 19:36:30 2018
+--- src/channel.c Sun Jul 8 16:42:07 2018
+***************
+*** 2809,2815 ****
+ status = "buffered";
+ else
+ status = "closed";
+! dict_add_nr_str(dict, namebuf, 0, (char_u *)status);
+
+ STRCPY(namebuf + tail, "mode");
+ switch (chanpart->ch_mode)
+--- 2809,2815 ----
+ status = "buffered";
+ else
+ status = "closed";
+! dict_add_string(dict, namebuf, (char_u *)status);
+
+ STRCPY(namebuf + tail, "mode");
+ switch (chanpart->ch_mode)
+***************
+*** 2819,2825 ****
+ case MODE_JSON: s = "JSON"; break;
+ case MODE_JS: s = "JS"; break;
+ }
+! dict_add_nr_str(dict, namebuf, 0, (char_u *)s);
+
+ STRCPY(namebuf + tail, "io");
+ if (part == PART_SOCK)
+--- 2819,2825 ----
+ case MODE_JSON: s = "JSON"; break;
+ case MODE_JS: s = "JS"; break;
+ }
+! dict_add_string(dict, namebuf, (char_u *)s);
+
+ STRCPY(namebuf + tail, "io");
+ if (part == PART_SOCK)
+***************
+*** 2832,2853 ****
+ case JIO_BUFFER: s = "buffer"; break;
+ case JIO_OUT: s = "out"; break;
+ }
+! dict_add_nr_str(dict, namebuf, 0, (char_u *)s);
+
+ STRCPY(namebuf + tail, "timeout");
+! dict_add_nr_str(dict, namebuf, chanpart->ch_timeout, NULL);
+ }
+
+ void
+ channel_info(channel_T *channel, dict_T *dict)
+ {
+! dict_add_nr_str(dict, "id", channel->ch_id, NULL);
+! dict_add_nr_str(dict, "status", 0, (char_u *)channel_status(channel, -1));
+
+ if (channel->ch_hostname != NULL)
+ {
+! dict_add_nr_str(dict, "hostname", 0, (char_u *)channel->ch_hostname);
+! dict_add_nr_str(dict, "port", channel->ch_port, NULL);
+ channel_part_info(channel, dict, "sock", PART_SOCK);
+ }
+ else
+--- 2832,2853 ----
+ case JIO_BUFFER: s = "buffer"; break;
+ case JIO_OUT: s = "out"; break;
+ }
+! dict_add_string(dict, namebuf, (char_u *)s);
+
+ STRCPY(namebuf + tail, "timeout");
+! dict_add_number(dict, namebuf, chanpart->ch_timeout);
+ }
+
+ void
+ channel_info(channel_T *channel, dict_T *dict)
+ {
+! dict_add_number(dict, "id", channel->ch_id);
+! dict_add_string(dict, "status", (char_u *)channel_status(channel, -1));
+
+ if (channel->ch_hostname != NULL)
+ {
+! dict_add_string(dict, "hostname", (char_u *)channel->ch_hostname);
+! dict_add_number(dict, "port", channel->ch_port);
+ channel_part_info(channel, dict, "sock", PART_SOCK);
+ }
+ else
+***************
+*** 5737,5743 ****
+ list_T *l;
+ int i;
+
+! dict_add_nr_str(dict, "status", 0L, (char_u *)job_status(job));
+
+ item = dictitem_alloc((char_u *)"channel");
+ if (item == NULL)
+--- 5737,5743 ----
+ list_T *l;
+ int i;
+
+! dict_add_string(dict, "status", (char_u *)job_status(job));
+
+ item = dictitem_alloc((char_u *)"channel");
+ if (item == NULL)
+***************
+*** 5755,5769 ****
+ #else
+ nr = job->jv_proc_info.dwProcessId;
+ #endif
+! dict_add_nr_str(dict, "process", nr, NULL);
+! dict_add_nr_str(dict, "tty_in", 0L,
+! job->jv_tty_in != NULL ? job->jv_tty_in : (char_u *)"");
+! dict_add_nr_str(dict, "tty_out", 0L,
+! job->jv_tty_out != NULL ? job->jv_tty_out : (char_u *)"");
+!
+! dict_add_nr_str(dict, "exitval", job->jv_exitval, NULL);
+! dict_add_nr_str(dict, "exit_cb", 0L, job->jv_exit_cb);
+! dict_add_nr_str(dict, "stoponexit", 0L, job->jv_stoponexit);
+
+ l = list_alloc();
+ if (l != NULL)
+--- 5755,5767 ----
+ #else
+ nr = job->jv_proc_info.dwProcessId;
+ #endif
+! dict_add_number(dict, "process", nr);
+! dict_add_string(dict, "tty_in", job->jv_tty_in);
+! dict_add_string(dict, "tty_out", job->jv_tty_out);
+!
+! dict_add_number(dict, "exitval", job->jv_exitval);
+! dict_add_string(dict, "exit_cb", job->jv_exit_cb);
+! dict_add_string(dict, "stoponexit", job->jv_stoponexit);
+
+ l = list_alloc();
+ if (l != NULL)
+*** ../vim-8.1.0165/src/dict.c Sat Dec 16 18:21:39 2017
+--- src/dict.c Sun Jul 8 16:42:07 2018
+***************
+*** 327,342 ****
+ }
+
+ /*
+! * Add a number or string entry to dictionary "d".
+! * When "str" is NULL use number "nr", otherwise use "str".
+ * Returns FAIL when out of memory and when key already exists.
+ */
+ int
+! dict_add_nr_str(
+! dict_T *d,
+! char *key,
+! varnumber_T nr,
+! char_u *str)
+ {
+ dictitem_T *item;
+
+--- 327,337 ----
+ }
+
+ /*
+! * Add a number entry to dictionary "d".
+ * Returns FAIL when out of memory and when key already exists.
+ */
+ int
+! dict_add_number(dict_T *d, char *key, varnumber_T nr)
+ {
+ dictitem_T *item;
+
+***************
+*** 344,359 ****
+ if (item == NULL)
+ return FAIL;
+ item->di_tv.v_lock = 0;
+! if (str == NULL)
+! {
+! item->di_tv.v_type = VAR_NUMBER;
+! item->di_tv.vval.v_number = nr;
+! }
+! else
+ {
+! item->di_tv.v_type = VAR_STRING;
+! item->di_tv.vval.v_string = vim_strsave(str);
+ }
+ if (dict_add(d, item) == FAIL)
+ {
+ dictitem_free(item);
+--- 339,369 ----
+ if (item == NULL)
+ return FAIL;
+ item->di_tv.v_lock = 0;
+! item->di_tv.v_type = VAR_NUMBER;
+! item->di_tv.vval.v_number = nr;
+! if (dict_add(d, item) == FAIL)
+ {
+! dictitem_free(item);
+! return FAIL;
+ }
++ return OK;
++ }
++
++ /*
++ * Add a string entry to dictionary "d".
++ * Returns FAIL when out of memory and when key already exists.
++ */
++ int
++ dict_add_string(dict_T *d, char *key, char_u *str)
++ {
++ dictitem_T *item;
++
++ item = dictitem_alloc((char_u *)key);
++ if (item == NULL)
++ return FAIL;
++ item->di_tv.v_lock = 0;
++ item->di_tv.v_type = VAR_STRING;
++ item->di_tv.vval.v_string = str != NULL ? vim_strsave(str) : NULL;
+ if (dict_add(d, item) == FAIL)
+ {
+ dictitem_free(item);
+*** ../vim-8.1.0165/src/edit.c Thu Jul 5 22:27:04 2018
+--- src/edit.c Sun Jul 8 16:42:07 2018
+***************
+*** 4884,4901 ****
+ dict = dict_alloc_lock(VAR_FIXED);
+ if (dict != NULL)
+ {
+! dict_add_nr_str(dict, "word", 0L,
+! EMPTY_IF_NULL(compl_shown_match->cp_str));
+! dict_add_nr_str(dict, "abbr", 0L,
+! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_ABBR]));
+! dict_add_nr_str(dict, "menu", 0L,
+! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_MENU]));
+! dict_add_nr_str(dict, "kind", 0L,
+! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_KIND]));
+! dict_add_nr_str(dict, "info", 0L,
+! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_INFO]));
+! dict_add_nr_str(dict, "user_data", 0L,
+! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_USER_DATA]));
+ }
+ set_vim_var_dict(VV_COMPLETED_ITEM, dict);
+ if (!in_compl_func)
+--- 4884,4896 ----
+ dict = dict_alloc_lock(VAR_FIXED);
+ if (dict != NULL)
+ {
+! dict_add_string(dict, "word", compl_shown_match->cp_str);
+! dict_add_string(dict, "abbr", compl_shown_match->cp_text[CPT_ABBR]);
+! dict_add_string(dict, "menu", compl_shown_match->cp_text[CPT_MENU]);
+! dict_add_string(dict, "kind", compl_shown_match->cp_text[CPT_KIND]);
+! dict_add_string(dict, "info", compl_shown_match->cp_text[CPT_INFO]);
+! dict_add_string(dict, "user_data",
+! compl_shown_match->cp_text[CPT_USER_DATA]);
+ }
+ set_vim_var_dict(VV_COMPLETED_ITEM, dict);
+ if (!in_compl_func)
+*** ../vim-8.1.0165/src/evalfunc.c Thu Jun 28 15:50:23 2018
+--- src/evalfunc.c Sun Jul 8 16:42:07 2018
+***************
+*** 4338,4346 ****
+
+ if (d != NULL)
+ {
+! dict_add_nr_str(d, "id", sign->id, NULL);
+! dict_add_nr_str(d, "lnum", sign->lnum, NULL);
+! dict_add_nr_str(d, "name", 0L, sign_typenr2name(sign->typenr));
+
+ list_append_dict(l, d);
+ }
+--- 4338,4346 ----
+
+ if (d != NULL)
+ {
+! dict_add_number(d, "id", sign->id);
+! dict_add_number(d, "lnum", sign->lnum);
+! dict_add_string(d, "name", sign_typenr2name(sign->typenr));
+
+ list_append_dict(l, d);
+ }
+***************
+*** 4363,4380 ****
+ if (dict == NULL)
+ return NULL;
+
+! dict_add_nr_str(dict, "bufnr", buf->b_fnum, NULL);
+! dict_add_nr_str(dict, "name", 0L,
+! buf->b_ffname != NULL ? buf->b_ffname : (char_u *)"");
+! dict_add_nr_str(dict, "lnum", buf == curbuf ? curwin->w_cursor.lnum
+! : buflist_findlnum(buf), NULL);
+! dict_add_nr_str(dict, "loaded", buf->b_ml.ml_mfp != NULL, NULL);
+! dict_add_nr_str(dict, "listed", buf->b_p_bl, NULL);
+! dict_add_nr_str(dict, "changed", bufIsChanged(buf), NULL);
+! dict_add_nr_str(dict, "changedtick", CHANGEDTICK(buf), NULL);
+! dict_add_nr_str(dict, "hidden",
+! buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0,
+! NULL);
+
+ /* Get a reference to buffer variables */
+ dict_add_dict(dict, "variables", buf->b_vars);
+--- 4363,4378 ----
+ if (dict == NULL)
+ return NULL;
+
+! dict_add_number(dict, "bufnr", buf->b_fnum);
+! dict_add_string(dict, "name", buf->b_ffname);
+! dict_add_number(dict, "lnum", buf == curbuf ? curwin->w_cursor.lnum
+! : buflist_findlnum(buf));
+! dict_add_number(dict, "loaded", buf->b_ml.ml_mfp != NULL);
+! dict_add_number(dict, "listed", buf->b_p_bl);
+! dict_add_number(dict, "changed", bufIsChanged(buf));
+! dict_add_number(dict, "changedtick", CHANGEDTICK(buf));
+! dict_add_number(dict, "hidden",
+! buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0);
+
+ /* Get a reference to buffer variables */
+ dict_add_dict(dict, "variables", buf->b_vars);
+***************
+*** 4663,4672 ****
+ return;
+ if (list_append_dict(l, d) == FAIL)
+ return;
+! dict_add_nr_str(d, "lnum", (long)buf->b_changelist[i].lnum, NULL);
+! dict_add_nr_str(d, "col", (long)buf->b_changelist[i].col, NULL);
+ # ifdef FEAT_VIRTUALEDIT
+! dict_add_nr_str(d, "coladd", (long)buf->b_changelist[i].coladd, NULL);
+ # endif
+ }
+ #endif
+--- 4661,4670 ----
+ return;
+ if (list_append_dict(l, d) == FAIL)
+ return;
+! dict_add_number(d, "lnum", (long)buf->b_changelist[i].lnum);
+! dict_add_number(d, "col", (long)buf->b_changelist[i].col);
+ # ifdef FEAT_VIRTUALEDIT
+! dict_add_number(d, "coladd", (long)buf->b_changelist[i].coladd);
+ # endif
+ }
+ #endif
+***************
+*** 4790,4798 ****
+ {
+ dict_T *dict = rettv->vval.v_dict;
+
+! dict_add_nr_str(dict, "char", 0L, last_csearch());
+! dict_add_nr_str(dict, "forward", last_csearch_forward(), NULL);
+! dict_add_nr_str(dict, "until", last_csearch_until(), NULL);
+ }
+ }
+
+--- 4788,4796 ----
+ {
+ dict_T *dict = rettv->vval.v_dict;
+
+! dict_add_string(dict, "char", last_csearch());
+! dict_add_number(dict, "forward", last_csearch_forward());
+! dict_add_number(dict, "until", last_csearch_until());
+ }
+ }
+
+***************
+*** 5193,5209 ****
+ return;
+ if (list_append_dict(l, d) == FAIL)
+ return;
+! dict_add_nr_str(d, "lnum", (long)wp->w_jumplist[i].fmark.mark.lnum,
+! NULL);
+! dict_add_nr_str(d, "col", (long)wp->w_jumplist[i].fmark.mark.col,
+! NULL);
+ # ifdef FEAT_VIRTUALEDIT
+! dict_add_nr_str(d, "coladd", (long)wp->w_jumplist[i].fmark.mark.coladd,
+! NULL);
+ # endif
+! dict_add_nr_str(d, "bufnr", (long)wp->w_jumplist[i].fmark.fnum, NULL);
+ if (wp->w_jumplist[i].fname != NULL)
+! dict_add_nr_str(d, "filename", 0L, wp->w_jumplist[i].fname);
+ }
+ #endif
+ }
+--- 5191,5204 ----
+ return;
+ if (list_append_dict(l, d) == FAIL)
+ return;
+! dict_add_number(d, "lnum", (long)wp->w_jumplist[i].fmark.mark.lnum);
+! dict_add_number(d, "col", (long)wp->w_jumplist[i].fmark.mark.col);
+ # ifdef FEAT_VIRTUALEDIT
+! dict_add_number(d, "coladd", (long)wp->w_jumplist[i].fmark.mark.coladd);
+ # endif
+! dict_add_number(d, "bufnr", (long)wp->w_jumplist[i].fmark.fnum);
+ if (wp->w_jumplist[i].fname != NULL)
+! dict_add_string(d, "filename", wp->w_jumplist[i].fname);
+ }
+ #endif
+ }
+***************
+*** 5321,5338 ****
+ }
+ else
+ {
+! dict_add_nr_str(dict, "pattern", 0L, cur->pattern);
+ }
+! dict_add_nr_str(dict, "group", 0L, syn_id2name(cur->hlg_id));
+! dict_add_nr_str(dict, "priority", (long)cur->priority, NULL);
+! dict_add_nr_str(dict, "id", (long)cur->id, NULL);
+ # if defined(FEAT_CONCEAL) && defined(FEAT_MBYTE)
+ if (cur->conceal_char)
+ {
+ char_u buf[MB_MAXBYTES + 1];
+
+ buf[(*mb_char2bytes)((int)cur->conceal_char, buf)] = NUL;
+! dict_add_nr_str(dict, "conceal", 0L, (char_u *)&buf);
+ }
+ # endif
+ list_append_dict(rettv->vval.v_list, dict);
+--- 5316,5333 ----
+ }
+ else
+ {
+! dict_add_string(dict, "pattern", cur->pattern);
+ }
+! dict_add_string(dict, "group", syn_id2name(cur->hlg_id));
+! dict_add_number(dict, "priority", (long)cur->priority);
+! dict_add_number(dict, "id", (long)cur->id);
+ # if defined(FEAT_CONCEAL) && defined(FEAT_MBYTE)
+ if (cur->conceal_char)
+ {
+ char_u buf[MB_MAXBYTES + 1];
+
+ buf[(*mb_char2bytes)((int)cur->conceal_char, buf)] = NUL;
+! dict_add_string(dict, "conceal", (char_u *)&buf);
+ }
+ # endif
+ list_append_dict(rettv->vval.v_list, dict);
+***************
+*** 5533,5539 ****
+ if (dict == NULL)
+ return NULL;
+
+! dict_add_nr_str(dict, "tabnr", tp_idx, NULL);
+
+ l = list_alloc();
+ if (l != NULL)
+--- 5528,5534 ----
+ if (dict == NULL)
+ return NULL;
+
+! dict_add_number(dict, "tabnr", tp_idx);
+
+ l = list_alloc();
+ if (l != NULL)
+***************
+*** 5649,5671 ****
+ if (dict == NULL)
+ return NULL;
+
+! dict_add_nr_str(dict, "tabnr", tpnr, NULL);
+! dict_add_nr_str(dict, "winnr", winnr, NULL);
+! dict_add_nr_str(dict, "winid", wp->w_id, NULL);
+! dict_add_nr_str(dict, "height", wp->w_height, NULL);
+ #ifdef FEAT_MENU
+! dict_add_nr_str(dict, "winbar", wp->w_winbar_height, NULL);
+ #endif
+! dict_add_nr_str(dict, "width", wp->w_width, NULL);
+! dict_add_nr_str(dict, "bufnr", wp->w_buffer->b_fnum, NULL);
+
+ #ifdef FEAT_TERMINAL
+! dict_add_nr_str(dict, "terminal", bt_terminal(wp->w_buffer), NULL);
+ #endif
+ #ifdef FEAT_QUICKFIX
+! dict_add_nr_str(dict, "quickfix", bt_quickfix(wp->w_buffer), NULL);
+! dict_add_nr_str(dict, "loclist",
+! (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL), NULL);
+ #endif
+
+ /* Add a reference to window variables */
+--- 5644,5666 ----
+ if (dict == NULL)
+ return NULL;
+
+! dict_add_number(dict, "tabnr", tpnr);
+! dict_add_number(dict, "winnr", winnr);
+! dict_add_number(dict, "winid", wp->w_id);
+! dict_add_number(dict, "height", wp->w_height);
+ #ifdef FEAT_MENU
+! dict_add_number(dict, "winbar", wp->w_winbar_height);
+ #endif
+! dict_add_number(dict, "width", wp->w_width);
+! dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum);
+
+ #ifdef FEAT_TERMINAL
+! dict_add_number(dict, "terminal", bt_terminal(wp->w_buffer));
+ #endif
+ #ifdef FEAT_QUICKFIX
+! dict_add_number(dict, "quickfix", bt_quickfix(wp->w_buffer));
+! dict_add_number(dict, "loclist",
+! (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL));
+ #endif
+
+ /* Add a reference to window variables */
+***************
+*** 7652,7666 ****
+ char_u *mapmode = map_mode_to_chars(mp->m_mode);
+ dict_T *dict = rettv->vval.v_dict;
+
+! dict_add_nr_str(dict, "lhs", 0L, lhs);
+! dict_add_nr_str(dict, "rhs", 0L, mp->m_orig_str);
+! dict_add_nr_str(dict, "noremap", mp->m_noremap ? 1L : 0L , NULL);
+! dict_add_nr_str(dict, "expr", mp->m_expr ? 1L : 0L, NULL);
+! dict_add_nr_str(dict, "silent", mp->m_silent ? 1L : 0L, NULL);
+! dict_add_nr_str(dict, "sid", (long)mp->m_script_ID, NULL);
+! dict_add_nr_str(dict, "buffer", (long)buffer_local, NULL);
+! dict_add_nr_str(dict, "nowait", mp->m_nowait ? 1L : 0L, NULL);
+! dict_add_nr_str(dict, "mode", 0L, mapmode);
+
+ vim_free(lhs);
+ vim_free(mapmode);
+--- 7647,7661 ----
+ char_u *mapmode = map_mode_to_chars(mp->m_mode);
+ dict_T *dict = rettv->vval.v_dict;
+
+! dict_add_string(dict, "lhs", lhs);
+! dict_add_string(dict, "rhs", mp->m_orig_str);
+! dict_add_number(dict, "noremap", mp->m_noremap ? 1L : 0L);
+! dict_add_number(dict, "expr", mp->m_expr ? 1L : 0L);
+! dict_add_number(dict, "silent", mp->m_silent ? 1L : 0L);
+! dict_add_number(dict, "sid", (long)mp->m_script_ID);
+! dict_add_number(dict, "buffer", (long)buffer_local);
+! dict_add_number(dict, "nowait", mp->m_nowait ? 1L : 0L);
+! dict_add_string(dict, "mode", mapmode);
+
+ vim_free(lhs);
+ vim_free(mapmode);
+***************
+*** 13652,13664 ****
+ dict_T *dict = rettv->vval.v_dict;
+ list_T *list;
+
+! dict_add_nr_str(dict, "synced", (long)curbuf->b_u_synced, NULL);
+! dict_add_nr_str(dict, "seq_last", curbuf->b_u_seq_last, NULL);
+! dict_add_nr_str(dict, "save_last",
+! (long)curbuf->b_u_save_nr_last, NULL);
+! dict_add_nr_str(dict, "seq_cur", curbuf->b_u_seq_cur, NULL);
+! dict_add_nr_str(dict, "time_cur", (long)curbuf->b_u_time_cur, NULL);
+! dict_add_nr_str(dict, "save_cur", (long)curbuf->b_u_save_nr_cur, NULL);
+
+ list = list_alloc();
+ if (list != NULL)
+--- 13647,13658 ----
+ dict_T *dict = rettv->vval.v_dict;
+ list_T *list;
+
+! dict_add_number(dict, "synced", (long)curbuf->b_u_synced);
+! dict_add_number(dict, "seq_last", curbuf->b_u_seq_last);
+! dict_add_number(dict, "save_last", (long)curbuf->b_u_save_nr_last);
+! dict_add_number(dict, "seq_cur", curbuf->b_u_seq_cur);
+! dict_add_number(dict, "time_cur", (long)curbuf->b_u_time_cur);
+! dict_add_number(dict, "save_cur", (long)curbuf->b_u_save_nr_cur);
+
+ list = list_alloc();
+ if (list != NULL)
+***************
+*** 13882,13901 ****
+ return;
+ dict = rettv->vval.v_dict;
+
+! dict_add_nr_str(dict, "lnum", (long)curwin->w_cursor.lnum, NULL);
+! dict_add_nr_str(dict, "col", (long)curwin->w_cursor.col, NULL);
+ #ifdef FEAT_VIRTUALEDIT
+! dict_add_nr_str(dict, "coladd", (long)curwin->w_cursor.coladd, NULL);
+ #endif
+ update_curswant();
+! dict_add_nr_str(dict, "curswant", (long)curwin->w_curswant, NULL);
+
+! dict_add_nr_str(dict, "topline", (long)curwin->w_topline, NULL);
+ #ifdef FEAT_DIFF
+! dict_add_nr_str(dict, "topfill", (long)curwin->w_topfill, NULL);
+ #endif
+! dict_add_nr_str(dict, "leftcol", (long)curwin->w_leftcol, NULL);
+! dict_add_nr_str(dict, "skipcol", (long)curwin->w_skipcol, NULL);
+ }
+
+ /*
+--- 13876,13895 ----
+ return;
+ dict = rettv->vval.v_dict;
+
+! dict_add_number(dict, "lnum", (long)curwin->w_cursor.lnum);
+! dict_add_number(dict, "col", (long)curwin->w_cursor.col);
+ #ifdef FEAT_VIRTUALEDIT
+! dict_add_number(dict, "coladd", (long)curwin->w_cursor.coladd);
+ #endif
+ update_curswant();
+! dict_add_number(dict, "curswant", (long)curwin->w_curswant);
+
+! dict_add_number(dict, "topline", (long)curwin->w_topline);
+ #ifdef FEAT_DIFF
+! dict_add_number(dict, "topfill", (long)curwin->w_topfill);
+ #endif
+! dict_add_number(dict, "leftcol", (long)curwin->w_leftcol);
+! dict_add_number(dict, "skipcol", (long)curwin->w_skipcol);
+ }
+
+ /*
+*** ../vim-8.1.0165/src/ex_cmds2.c Thu Jun 28 12:05:07 2018
+--- src/ex_cmds2.c Sun Jul 8 16:42:07 2018
+***************
+*** 689,695 ****
+ }
+
+ /*
+! * ":breakadd".
+ */
+ void
+ ex_breakadd(exarg_T *eap)
+--- 689,695 ----
+ }
+
+ /*
+! * ":breakadd". Also used for ":profile".
+ */
+ void
+ ex_breakadd(exarg_T *eap)
+***************
+*** 1497,1512 ****
+ return;
+ list_append_dict(list, dict);
+
+! dict_add_nr_str(dict, "id", timer->tr_id, NULL);
+! dict_add_nr_str(dict, "time", (long)timer->tr_interval, NULL);
+
+ profile_start(&now);
+ remaining = proftime_time_left(&timer->tr_due, &now);
+! dict_add_nr_str(dict, "remaining", (long)remaining, NULL);
+
+! dict_add_nr_str(dict, "repeat",
+! (long)(timer->tr_repeat < 0 ? -1 : timer->tr_repeat + 1), NULL);
+! dict_add_nr_str(dict, "paused", (long)(timer->tr_paused), NULL);
+
+ di = dictitem_alloc((char_u *)"callback");
+ if (di != NULL)
+--- 1497,1512 ----
+ return;
+ list_append_dict(list, dict);
+
+! dict_add_number(dict, "id", timer->tr_id);
+! dict_add_number(dict, "time", (long)timer->tr_interval);
+
+ profile_start(&now);
+ remaining = proftime_time_left(&timer->tr_due, &now);
+! dict_add_number(dict, "remaining", (long)remaining);
+
+! dict_add_number(dict, "repeat",
+! (long)(timer->tr_repeat < 0 ? -1 : timer->tr_repeat + 1));
+! dict_add_number(dict, "paused", (long)(timer->tr_paused));
+
+ di = dictitem_alloc((char_u *)"callback");
+ if (di != NULL)
+*** ../vim-8.1.0165/src/ops.c Thu Jun 28 19:26:24 2018
+--- src/ops.c Sun Jul 8 16:42:07 2018
+***************
+*** 1723,1734 ****
+
+ buf[0] = (char_u)oap->regname;
+ buf[1] = NUL;
+! dict_add_nr_str(v_event, "regname", 0, buf);
+
+ buf[0] = get_op_char(oap->op_type);
+ buf[1] = get_extra_op_char(oap->op_type);
+ buf[2] = NUL;
+! dict_add_nr_str(v_event, "operator", 0, buf);
+
+ buf[0] = NUL;
+ buf[1] = NUL;
+--- 1723,1734 ----
+
+ buf[0] = (char_u)oap->regname;
+ buf[1] = NUL;
+! dict_add_string(v_event, "regname", buf);
+
+ buf[0] = get_op_char(oap->op_type);
+ buf[1] = get_extra_op_char(oap->op_type);
+ buf[2] = NUL;
+! dict_add_string(v_event, "operator", buf);
+
+ buf[0] = NUL;
+ buf[1] = NUL;
+***************
+*** 1741,1747 ****
+ reglen + 1);
+ break;
+ }
+! dict_add_nr_str(v_event, "regtype", 0, buf);
+
+ /* Lock the dictionary and its keys */
+ dict_set_items_ro(v_event);
+--- 1741,1747 ----
+ reglen + 1);
+ break;
+ }
+! dict_add_string(v_event, "regtype", buf);
+
+ /* Lock the dictionary and its keys */
+ dict_set_items_ro(v_event);
+***************
+*** 7641,7659 ****
+ #if defined(FEAT_EVAL)
+ if (dict != NULL)
+ {
+! dict_add_nr_str(dict, "words", word_count, NULL);
+! dict_add_nr_str(dict, "chars", char_count, NULL);
+! dict_add_nr_str(dict, "bytes", byte_count
+ # ifdef FEAT_MBYTE
+ + bom_count
+ # endif
+! , NULL);
+! dict_add_nr_str(dict, VIsual_active ? "visual_bytes" : "cursor_bytes",
+! byte_count_cursor, NULL);
+! dict_add_nr_str(dict, VIsual_active ? "visual_chars" : "cursor_chars",
+! char_count_cursor, NULL);
+! dict_add_nr_str(dict, VIsual_active ? "visual_words" : "cursor_words",
+! word_count_cursor, NULL);
+ }
+ #endif
+ }
+--- 7641,7659 ----
+ #if defined(FEAT_EVAL)
+ if (dict != NULL)
+ {
+! dict_add_number(dict, "words", word_count);
+! dict_add_number(dict, "chars", char_count);
+! dict_add_number(dict, "bytes", byte_count
+ # ifdef FEAT_MBYTE
+ + bom_count
+ # endif
+! );
+! dict_add_number(dict, VIsual_active ? "visual_bytes" : "cursor_bytes",
+! byte_count_cursor);
+! dict_add_number(dict, VIsual_active ? "visual_chars" : "cursor_chars",
+! char_count_cursor);
+! dict_add_number(dict, VIsual_active ? "visual_words" : "cursor_words",
+! word_count_cursor);
+ }
+ #endif
+ }
+*** ../vim-8.1.0165/src/option.c Mon Jul 2 20:51:21 2018
+--- src/option.c Sun Jul 8 16:42:07 2018
+***************
+*** 13222,13232 ****
+ if (varp != NULL)
+ {
+ if (opt->flags & P_STRING)
+! dict_add_nr_str(d, opt->fullname, 0L, *(char_u **)varp);
+ else if (opt->flags & P_NUM)
+! dict_add_nr_str(d, opt->fullname, *(long *)varp, NULL);
+ else
+! dict_add_nr_str(d, opt->fullname, *(int *)varp, NULL);
+ }
+ }
+ }
+--- 13222,13232 ----
+ if (varp != NULL)
+ {
+ if (opt->flags & P_STRING)
+! dict_add_string(d, opt->fullname, *(char_u **)varp);
+ else if (opt->flags & P_NUM)
+! dict_add_number(d, opt->fullname, *(long *)varp);
+ else
+! dict_add_number(d, opt->fullname, *(int *)varp);
+ }
+ }
+ }
+*** ../vim-8.1.0165/src/proto/dict.pro Thu May 17 13:52:31 2018
+--- src/proto/dict.pro Sun Jul 8 16:42:07 2018
+***************
+*** 12,18 ****
+ void dictitem_free(dictitem_T *item);
+ dict_T *dict_copy(dict_T *orig, int deep, int copyID);
+ int dict_add(dict_T *d, dictitem_T *item);
+! int dict_add_nr_str(dict_T *d, char *key, varnumber_T nr, char_u *str);
+ int dict_add_list(dict_T *d, char *key, list_T *list);
+ int dict_add_dict(dict_T *d, char *key, dict_T *dict);
+ long dict_len(dict_T *d);
+--- 12,19 ----
+ void dictitem_free(dictitem_T *item);
+ dict_T *dict_copy(dict_T *orig, int deep, int copyID);
+ int dict_add(dict_T *d, dictitem_T *item);
+! int dict_add_number(dict_T *d, char *key, varnumber_T nr);
+! int dict_add_string(dict_T *d, char *key, char_u *str);
+ int dict_add_list(dict_T *d, char *key, list_T *list);
+ int dict_add_dict(dict_T *d, char *key, dict_T *dict);
+ long dict_len(dict_T *d);
+*** ../vim-8.1.0165/src/quickfix.c Sun Jul 8 16:01:04 2018
+--- src/quickfix.c Sun Jul 8 16:42:07 2018
+***************
+*** 5360,5378 ****
+
+ buf[0] = qfp->qf_type;
+ buf[1] = NUL;
+! if ( dict_add_nr_str(dict, "bufnr", (long)bufnum, NULL) == FAIL
+! || dict_add_nr_str(dict, "lnum", (long)qfp->qf_lnum, NULL) == FAIL
+! || dict_add_nr_str(dict, "col", (long)qfp->qf_col, NULL) == FAIL
+! || dict_add_nr_str(dict, "vcol", (long)qfp->qf_viscol, NULL) == FAIL
+! || dict_add_nr_str(dict, "nr", (long)qfp->qf_nr, NULL) == FAIL
+! || dict_add_nr_str(dict, "module", 0L,
+! qfp->qf_module == NULL ? (char_u *)"" : qfp->qf_module) == FAIL
+! || dict_add_nr_str(dict, "pattern", 0L,
+! qfp->qf_pattern == NULL ? (char_u *)"" : qfp->qf_pattern) == FAIL
+! || dict_add_nr_str(dict, "text", 0L,
+! qfp->qf_text == NULL ? (char_u *)"" : qfp->qf_text) == FAIL
+! || dict_add_nr_str(dict, "type", 0L, buf) == FAIL
+! || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL)
+ return FAIL;
+
+ qfp = qfp->qf_next;
+--- 5360,5375 ----
+
+ buf[0] = qfp->qf_type;
+ buf[1] = NUL;
+! if ( dict_add_number(dict, "bufnr", (long)bufnum) == FAIL
+! || dict_add_number(dict, "lnum", (long)qfp->qf_lnum) == FAIL
+! || dict_add_number(dict, "col", (long)qfp->qf_col) == FAIL
+! || dict_add_number(dict, "vcol", (long)qfp->qf_viscol) == FAIL
+! || dict_add_number(dict, "nr", (long)qfp->qf_nr) == FAIL
+! || dict_add_string(dict, "module", qfp->qf_module) == FAIL
+! || dict_add_string(dict, "pattern", qfp->qf_pattern) == FAIL
+! || dict_add_string(dict, "text", qfp->qf_text) == FAIL
+! || dict_add_string(dict, "type", buf) == FAIL
+! || dict_add_number(dict, "valid", (long)qfp->qf_valid) == FAIL)
+ return FAIL;
+
+ qfp = qfp->qf_next;
+***************
+*** 5576,5582 ****
+ int status = OK;
+
+ if (flags & QF_GETLIST_TITLE)
+! status = dict_add_nr_str(retdict, "title", 0L, (char_u *)"");
+ if ((status == OK) && (flags & QF_GETLIST_ITEMS))
+ {
+ list_T *l = list_alloc();
+--- 5573,5579 ----
+ int status = OK;
+
+ if (flags & QF_GETLIST_TITLE)
+! status = dict_add_string(retdict, "title", (char_u *)"");
+ if ((status == OK) && (flags & QF_GETLIST_ITEMS))
+ {
+ list_T *l = list_alloc();
+***************
+*** 5586,5604 ****
+ status = FAIL;
+ }
+ if ((status == OK) && (flags & QF_GETLIST_NR))
+! status = dict_add_nr_str(retdict, "nr", 0L, NULL);
+ if ((status == OK) && (flags & QF_GETLIST_WINID))
+! status = dict_add_nr_str(retdict, "winid", qf_winid(qi), NULL);
+ if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
+! status = dict_add_nr_str(retdict, "context", 0L, (char_u *)"");
+ if ((status == OK) && (flags & QF_GETLIST_ID))
+! status = dict_add_nr_str(retdict, "id", 0L, NULL);
+ if ((status == OK) && (flags & QF_GETLIST_IDX))
+! status = dict_add_nr_str(retdict, "idx", 0L, NULL);
+ if ((status == OK) && (flags & QF_GETLIST_SIZE))
+! status = dict_add_nr_str(retdict, "size", 0L, NULL);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+! status = dict_add_nr_str(retdict, "changedtick", 0L, NULL);
+
+ return status;
+ }
+--- 5583,5601 ----
+ status = FAIL;
+ }
+ if ((status == OK) && (flags & QF_GETLIST_NR))
+! status = dict_add_number(retdict, "nr", 0);
+ if ((status == OK) && (flags & QF_GETLIST_WINID))
+! status = dict_add_number(retdict, "winid", qf_winid(qi));
+ if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
+! status = dict_add_string(retdict, "context", (char_u *)"");
+ if ((status == OK) && (flags & QF_GETLIST_ID))
+! status = dict_add_number(retdict, "id", 0);
+ if ((status == OK) && (flags & QF_GETLIST_IDX))
+! status = dict_add_number(retdict, "idx", 0);
+ if ((status == OK) && (flags & QF_GETLIST_SIZE))
+! status = dict_add_number(retdict, "size", 0);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+! status = dict_add_number(retdict, "changedtick", 0);
+
+ return status;
+ }
+***************
+*** 5609,5620 ****
+ static int
+ qf_getprop_title(qf_info_T *qi, int qf_idx, dict_T *retdict)
+ {
+! char_u *t;
+!
+! t = qi->qf_lists[qf_idx].qf_title;
+! if (t == NULL)
+! t = (char_u *)"";
+! return dict_add_nr_str(retdict, "title", 0L, t);
+ }
+
+ /*
+--- 5606,5612 ----
+ static int
+ qf_getprop_title(qf_info_T *qi, int qf_idx, dict_T *retdict)
+ {
+! return dict_add_string(retdict, "title", qi->qf_lists[qf_idx].qf_title);
+ }
+
+ /*
+***************
+*** 5659,5665 ****
+ status = FAIL;
+ }
+ else
+! status = dict_add_nr_str(retdict, "context", 0L, (char_u *)"");
+
+ return status;
+ }
+--- 5651,5657 ----
+ status = FAIL;
+ }
+ else
+! status = dict_add_string(retdict, "context", (char_u *)"");
+
+ return status;
+ }
+***************
+*** 5674,5680 ****
+ if (qi->qf_lists[qf_idx].qf_count == 0)
+ /* For empty lists, qf_index is set to 1 */
+ idx = 0;
+! return dict_add_nr_str(retdict, "idx", idx, NULL);
+ }
+
+ /*
+--- 5666,5672 ----
+ if (qi->qf_lists[qf_idx].qf_count == 0)
+ /* For empty lists, qf_index is set to 1 */
+ idx = 0;
+! return dict_add_number(retdict, "idx", idx);
+ }
+
+ /*
+***************
+*** 5709,5732 ****
+ if (flags & QF_GETLIST_TITLE)
+ status = qf_getprop_title(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_NR))
+! status = dict_add_nr_str(retdict, "nr", qf_idx + 1, NULL);
+ if ((status == OK) && (flags & QF_GETLIST_WINID))
+! status = dict_add_nr_str(retdict, "winid", qf_winid(qi), NULL);
+ if ((status == OK) && (flags & QF_GETLIST_ITEMS))
+ status = qf_getprop_items(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
+ status = qf_getprop_ctx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_ID))
+! status = dict_add_nr_str(retdict, "id", qi->qf_lists[qf_idx].qf_id,
+! NULL);
+ if ((status == OK) && (flags & QF_GETLIST_IDX))
+ status = qf_getprop_idx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_SIZE))
+! status = dict_add_nr_str(retdict, "size",
+! qi->qf_lists[qf_idx].qf_count, NULL);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+! status = dict_add_nr_str(retdict, "changedtick",
+! qi->qf_lists[qf_idx].qf_changedtick, NULL);
+
+ return status;
+ }
+--- 5701,5723 ----
+ if (flags & QF_GETLIST_TITLE)
+ status = qf_getprop_title(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_NR))
+! status = dict_add_number(retdict, "nr", qf_idx + 1);
+ if ((status == OK) && (flags & QF_GETLIST_WINID))
+! status = dict_add_number(retdict, "winid", qf_winid(qi));
+ if ((status == OK) && (flags & QF_GETLIST_ITEMS))
+ status = qf_getprop_items(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
+ status = qf_getprop_ctx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_ID))
+! status = dict_add_number(retdict, "id", qi->qf_lists[qf_idx].qf_id);
+ if ((status == OK) && (flags & QF_GETLIST_IDX))
+ status = qf_getprop_idx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_SIZE))
+! status = dict_add_number(retdict, "size",
+! qi->qf_lists[qf_idx].qf_count);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+! status = dict_add_number(retdict, "changedtick",
+! qi->qf_lists[qf_idx].qf_changedtick);
+
+ return status;
+ }
+*** ../vim-8.1.0165/src/tag.c Sat Jun 30 22:40:39 2018
+--- src/tag.c Sun Jul 8 16:42:07 2018
+***************
+*** 905,915 ****
+ continue;
+ }
+
+! dict_add_nr_str(dict, "text", 0L, tag_name);
+! dict_add_nr_str(dict, "filename", 0L, fname);
+! dict_add_nr_str(dict, "lnum", lnum, NULL);
+ if (lnum == 0)
+! dict_add_nr_str(dict, "pattern", 0L, cmd);
+ }
+
+ vim_snprintf((char *)IObuff, IOSIZE, "ltag %s", tag);
+--- 905,915 ----
+ continue;
+ }
+
+! dict_add_string(dict, "text", tag_name);
+! dict_add_string(dict, "filename", fname);
+! dict_add_number(dict, "lnum", lnum);
+ if (lnum == 0)
+! dict_add_string(dict, "pattern", cmd);
+ }
+
+ vim_snprintf((char *)IObuff, IOSIZE, "ltag %s", tag);
+***************
+*** 3923,3929 ****
+ vim_strncpy(buf, start, len);
+ }
+ buf[len] = NUL;
+! retval = dict_add_nr_str(dict, field_name, 0L, buf);
+ vim_free(buf);
+ return retval;
+ }
+--- 3923,3929 ----
+ vim_strncpy(buf, start, len);
+ }
+ buf[len] = NUL;
+! retval = dict_add_string(dict, field_name, buf);
+ vim_free(buf);
+ return retval;
+ }
+***************
+*** 3968,3974 ****
+ tp.command_end) == FAIL
+ || add_tag_field(dict, "kind", tp.tagkind,
+ tp.tagkind_end) == FAIL
+! || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)
+ ret = FAIL;
+
+ vim_free(full_fname);
+--- 3968,3974 ----
+ tp.command_end) == FAIL
+ || add_tag_field(dict, "kind", tp.tagkind,
+ tp.tagkind_end) == FAIL
+! || dict_add_number(dict, "static", is_static) == FAIL)
+ ret = FAIL;
+
+ vim_free(full_fname);
+*** ../vim-8.1.0165/src/terminal.c Tue Jun 19 19:59:15 2018
+--- src/terminal.c Sun Jul 8 16:42:07 2018
+***************
+*** 4729,4739 ****
+ d = dict_alloc();
+ if (d != NULL)
+ {
+! dict_add_nr_str(d, "visible", term->tl_cursor_visible, NULL);
+! dict_add_nr_str(d, "blink", blink_state_is_inverted()
+! ? !term->tl_cursor_blink : term->tl_cursor_blink, NULL);
+! dict_add_nr_str(d, "shape", term->tl_cursor_shape, NULL);
+! dict_add_nr_str(d, "color", 0L, cursor_color_get(term->tl_cursor_color));
+ list_append_dict(l, d);
+ }
+ }
+--- 4729,4739 ----
+ d = dict_alloc();
+ if (d != NULL)
+ {
+! dict_add_number(d, "visible", term->tl_cursor_visible);
+! dict_add_number(d, "blink", blink_state_is_inverted()
+! ? !term->tl_cursor_blink : term->tl_cursor_blink);
+! dict_add_number(d, "shape", term->tl_cursor_shape);
+! dict_add_string(d, "color", cursor_color_get(term->tl_cursor_color));
+ list_append_dict(l, d);
+ }
+ }
+***************
+*** 5059,5076 ****
+ break;
+ list_append_dict(l, dcell);
+
+! dict_add_nr_str(dcell, "chars", 0, mbs);
+
+ vim_snprintf((char *)rgb, 8, "#%02x%02x%02x",
+ fg.red, fg.green, fg.blue);
+! dict_add_nr_str(dcell, "fg", 0, rgb);
+ vim_snprintf((char *)rgb, 8, "#%02x%02x%02x",
+ bg.red, bg.green, bg.blue);
+! dict_add_nr_str(dcell, "bg", 0, rgb);
+
+! dict_add_nr_str(dcell, "attr",
+! cell2attr(attrs, fg, bg), NULL);
+! dict_add_nr_str(dcell, "width", width, NULL);
+
+ ++pos.col;
+ if (width == 2)
+--- 5059,5075 ----
+ break;
+ list_append_dict(l, dcell);
+
+! dict_add_string(dcell, "chars", mbs);
+
+ vim_snprintf((char *)rgb, 8, "#%02x%02x%02x",
+ fg.red, fg.green, fg.blue);
+! dict_add_string(dcell, "fg", rgb);
+ vim_snprintf((char *)rgb, 8, "#%02x%02x%02x",
+ bg.red, bg.green, bg.blue);
+! dict_add_string(dcell, "bg", rgb);
+
+! dict_add_number(dcell, "attr", cell2attr(attrs, fg, bg));
+! dict_add_number(dcell, "width", width);
+
+ ++pos.col;
+ if (width == 2)
+*** ../vim-8.1.0165/src/undo.c Sun Jul 1 16:43:59 2018
+--- src/undo.c Sun Jul 8 16:42:07 2018
+***************
+*** 3567,3580 ****
+ dict = dict_alloc();
+ if (dict == NULL)
+ return;
+! dict_add_nr_str(dict, "seq", uhp->uh_seq, NULL);
+! dict_add_nr_str(dict, "time", (long)uhp->uh_time, NULL);
+ if (uhp == curbuf->b_u_newhead)
+! dict_add_nr_str(dict, "newhead", 1, NULL);
+ if (uhp == curbuf->b_u_curhead)
+! dict_add_nr_str(dict, "curhead", 1, NULL);
+ if (uhp->uh_save_nr > 0)
+! dict_add_nr_str(dict, "save", uhp->uh_save_nr, NULL);
+
+ if (uhp->uh_alt_next.ptr != NULL)
+ {
+--- 3567,3580 ----
+ dict = dict_alloc();
+ if (dict == NULL)
+ return;
+! dict_add_number(dict, "seq", uhp->uh_seq);
+! dict_add_number(dict, "time", (long)uhp->uh_time);
+ if (uhp == curbuf->b_u_newhead)
+! dict_add_number(dict, "newhead", 1);
+ if (uhp == curbuf->b_u_curhead)
+! dict_add_number(dict, "curhead", 1);
+ if (uhp->uh_save_nr > 0)
+! dict_add_number(dict, "save", uhp->uh_save_nr);
+
+ if (uhp->uh_alt_next.ptr != NULL)
+ {
+*** ../vim-8.1.0165/src/version.c Sun Jul 8 16:01:04 2018
+--- src/version.c Sun Jul 8 16:43:50 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 166,
+ /**/
+
+
+--
+hundred-and-one symptoms of being an internet addict:
+207. You're given one phone call in prison and you ask them for a laptop.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0167 b/data/vim/patches/8.1.0167
new file mode 100644
index 000000000..6cdbd2fd8
--- /dev/null
+++ b/data/vim/patches/8.1.0167
@@ -0,0 +1,206 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0167
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0167
+Problem: Lock flag in new dictitem is reset in many places.
+Solution: Always reset the lock flag.
+Files: src/dict.c, src/channel.c, src/ex_cmds2.c, src/userfunc.c,
+ src/if_perl.xs, src/if_py_both.h
+
+
+*** ../vim-8.1.0166/src/dict.c Sun Jul 8 16:50:33 2018
+--- src/dict.c Sun Jul 8 17:06:50 2018
+***************
+*** 188,194 ****
+ /*
+ * Allocate a Dictionary item.
+ * The "key" is copied to the new item.
+! * Note that the value of the item "di_tv" still needs to be initialized!
+ * Returns NULL when out of memory.
+ */
+ dictitem_T *
+--- 188,195 ----
+ /*
+ * Allocate a Dictionary item.
+ * The "key" is copied to the new item.
+! * Note that the type and value of the item "di_tv" still needs to be
+! * initialized!
+ * Returns NULL when out of memory.
+ */
+ dictitem_T *
+***************
+*** 201,206 ****
+--- 202,208 ----
+ {
+ STRCPY(di->di_key, key);
+ di->di_flags = DI_FLAGS_ALLOC;
++ di->di_tv.v_lock = 0;
+ }
+ return di;
+ }
+***************
+*** 338,344 ****
+ item = dictitem_alloc((char_u *)key);
+ if (item == NULL)
+ return FAIL;
+- item->di_tv.v_lock = 0;
+ item->di_tv.v_type = VAR_NUMBER;
+ item->di_tv.vval.v_number = nr;
+ if (dict_add(d, item) == FAIL)
+--- 340,345 ----
+***************
+*** 361,367 ****
+ item = dictitem_alloc((char_u *)key);
+ if (item == NULL)
+ return FAIL;
+- item->di_tv.v_lock = 0;
+ item->di_tv.v_type = VAR_STRING;
+ item->di_tv.vval.v_string = str != NULL ? vim_strsave(str) : NULL;
+ if (dict_add(d, item) == FAIL)
+--- 362,367 ----
+***************
+*** 384,390 ****
+ item = dictitem_alloc((char_u *)key);
+ if (item == NULL)
+ return FAIL;
+- item->di_tv.v_lock = 0;
+ item->di_tv.v_type = VAR_LIST;
+ item->di_tv.vval.v_list = list;
+ ++list->lv_refcount;
+--- 384,389 ----
+***************
+*** 408,414 ****
+ item = dictitem_alloc((char_u *)key);
+ if (item == NULL)
+ return FAIL;
+- item->di_tv.v_lock = 0;
+ item->di_tv.v_type = VAR_DICT;
+ item->di_tv.vval.v_dict = dict;
+ ++dict->dv_refcount;
+--- 407,412 ----
+*** ../vim-8.1.0166/src/channel.c Sun Jul 8 16:50:33 2018
+--- src/channel.c Sun Jul 8 17:05:44 2018
+***************
+*** 5742,5748 ****
+ item = dictitem_alloc((char_u *)"channel");
+ if (item == NULL)
+ return;
+- item->di_tv.v_lock = 0;
+ item->di_tv.v_type = VAR_CHANNEL;
+ item->di_tv.vval.v_channel = job->jv_channel;
+ if (job->jv_channel != NULL)
+--- 5742,5747 ----
+*** ../vim-8.1.0166/src/ex_cmds2.c Sun Jul 8 16:50:33 2018
+--- src/ex_cmds2.c Sun Jul 8 17:07:59 2018
+***************
+*** 1524,1530 ****
+ di->di_tv.v_type = VAR_FUNC;
+ di->di_tv.vval.v_string = vim_strsave(timer->tr_callback);
+ }
+- di->di_tv.v_lock = 0;
+ }
+ }
+
+--- 1524,1529 ----
+*** ../vim-8.1.0166/src/userfunc.c Sat Jun 30 18:27:59 2018
+--- src/userfunc.c Sun Jul 8 17:10:33 2018
+***************
+*** 2390,2396 ****
+ /* overwrite existing dict entry */
+ clear_tv(&fudi.fd_di->di_tv);
+ fudi.fd_di->di_tv.v_type = VAR_FUNC;
+- fudi.fd_di->di_tv.v_lock = 0;
+ fudi.fd_di->di_tv.vval.v_string = vim_strsave(name);
+
+ /* behave like "dict" was used */
+--- 2390,2395 ----
+*** ../vim-8.1.0166/src/if_perl.xs Tue Mar 6 12:22:50 2018
+--- src/if_perl.xs Sun Jul 8 17:11:10 2018
+***************
+*** 1200,1209 ****
+
+ if ((item = dictitem_alloc((char_u *)key)) == NULL)
+ break;
+!
+! item->di_tv.v_type = VAR_NUMBER;
+! item->di_tv.v_lock = 0;
+! item->di_tv.vval.v_number = 0;
+
+ if (dict_add(dict, item) == FAIL) {
+ dictitem_free(item);
+--- 1200,1207 ----
+
+ if ((item = dictitem_alloc((char_u *)key)) == NULL)
+ break;
+! item->di_tv.v_type = VAR_NUMBER;
+! item->di_tv.vval.v_number = 0;
+
+ if (dict_add(dict, item) == FAIL) {
+ dictitem_free(item);
+*** ../vim-8.1.0166/src/if_py_both.h Sun Jun 10 13:55:48 2018
+--- src/if_py_both.h Sun Jul 8 17:12:13 2018
+***************
+*** 1832,1838 ****
+ PyErr_NoMemory();
+ return -1;
+ }
+- di->di_tv.v_lock = 0;
+ di->di_tv.v_type = VAR_UNKNOWN;
+
+ if (dict_add(dict, di) == FAIL)
+--- 1832,1837 ----
+***************
+*** 2038,2044 ****
+ PyErr_NoMemory();
+ return NULL;
+ }
+- di->di_tv.v_lock = 0;
+ di->di_tv.v_type = VAR_UNKNOWN;
+
+ valObject = PySequence_Fast_GET_ITEM(fast, 1);
+--- 2037,2042 ----
+***************
+*** 5852,5858 ****
+ dict_unref(dict);
+ return -1;
+ }
+- di->di_tv.v_lock = 0;
+
+ if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
+ {
+--- 5850,5855 ----
+***************
+*** 5950,5956 ****
+ PyErr_NoMemory();
+ return -1;
+ }
+- di->di_tv.v_lock = 0;
+
+ if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
+ {
+--- 5947,5952 ----
+*** ../vim-8.1.0166/src/version.c Sun Jul 8 16:50:33 2018
+--- src/version.c Sun Jul 8 17:18:05 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 167,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+208. Your goals for the future are obtaining an T1 connection and
+ a 130 gig hard drive.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0168 b/data/vim/patches/8.1.0168
new file mode 100644
index 000000000..caf543f05
--- /dev/null
+++ b/data/vim/patches/8.1.0168
@@ -0,0 +1,138 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0168
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0168
+Problem: Output of :marks is too short with multi-byte chars. (Tony
+ Mechelynck)
+Solution: Get more bytes from the text line.
+Files: src/mark.c, src/testdir/test_marks.vim
+
+
+*** ../vim-8.1.0167/src/mark.c Tue Feb 13 13:31:39 2018
+--- src/mark.c Sun Jul 8 17:51:23 2018
+***************
+*** 686,695 ****
+
+ if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count)
+ return vim_strsave((char_u *)"-invalid-");
+! s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns);
+ if (s == NULL)
+ return NULL;
+! /* Truncate the line to fit it in the window */
+ len = 0;
+ for (p = s; *p != NUL; MB_PTR_ADV(p))
+ {
+--- 686,696 ----
+
+ if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count)
+ return vim_strsave((char_u *)"-invalid-");
+! // Allow for up to 5 bytes per character.
+! s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns * 5);
+ if (s == NULL)
+ return NULL;
+! // Truncate the line to fit it in the window.
+ len = 0;
+ for (p = s; *p != NUL; MB_PTR_ADV(p))
+ {
+*** ../vim-8.1.0167/src/testdir/test_marks.vim Sun Oct 8 21:36:50 2017
+--- src/testdir/test_marks.vim Sun Jul 8 17:50:33 2018
+***************
+*** 80,86 ****
+ w!
+
+ b Xone
+! let a=split(execute('marks'), "\n")
+ call assert_equal(9, len(a))
+ call assert_equal('mark line col file/text', a[0])
+ call assert_equal(" ' 2 0 bbb", a[1])
+--- 80,86 ----
+ w!
+
+ b Xone
+! let a = split(execute('marks'), "\n")
+ call assert_equal(9, len(a))
+ call assert_equal('mark line col file/text', a[0])
+ call assert_equal(" ' 2 0 bbb", a[1])
+***************
+*** 93,99 ****
+ call assert_equal(' . 2 0 bbb', a[8])
+
+ b Xtwo
+! let a=split(execute('marks'), "\n")
+ call assert_equal(9, len(a))
+ call assert_equal('mark line col file/text', a[0])
+ call assert_equal(" ' 1 0 ccc", a[1])
+--- 93,99 ----
+ call assert_equal(' . 2 0 bbb', a[8])
+
+ b Xtwo
+! let a = split(execute('marks'), "\n")
+ call assert_equal(9, len(a))
+ call assert_equal('mark line col file/text', a[0])
+ call assert_equal(" ' 1 0 ccc", a[1])
+***************
+*** 107,113 ****
+
+ b Xone
+ delmarks aB
+! let a=split(execute('marks aBcD'), "\n")
+ call assert_equal(2, len(a))
+ call assert_equal('mark line col file/text', a[0])
+ call assert_equal(' D 2 0 Xtwo', a[1])
+--- 107,113 ----
+
+ b Xone
+ delmarks aB
+! let a = split(execute('marks aBcD'), "\n")
+ call assert_equal(2, len(a))
+ call assert_equal('mark line col file/text', a[0])
+ call assert_equal(' D 2 0 Xtwo', a[1])
+***************
+*** 120,122 ****
+--- 120,141 ----
+ call delete('Xtwo')
+ %bwipe
+ endfunc
++
++ func Test_marks_cmd_multibyte()
++ if !has('multi_byte')
++ return
++ endif
++ new Xone
++ call setline(1, ['ááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá'])
++ norm! ma
++
++ let a = split(execute('marks a'), "\n")
++ call assert_equal(2, len(a))
++ let expected = ' a 1 0 '
++ while strwidth(expected) < &columns - 1
++ let expected .= 'á'
++ endwhile
++ call assert_equal(expected, a[1])
++
++ bwipe!
++ endfunc
+*** ../vim-8.1.0167/src/version.c Sun Jul 8 17:18:58 2018
+--- src/version.c Sun Jul 8 17:51:37 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 168,
+ /**/
+
+--
+Your mouse has moved. Windows must be restarted for the change
+to take effect. Reboot now?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0169 b/data/vim/patches/8.1.0169
new file mode 100644
index 000000000..8b6702b98
--- /dev/null
+++ b/data/vim/patches/8.1.0169
@@ -0,0 +1,110 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0169
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0169 (after 8.1.0165)
+Problem: Calling message_filtered() a bit too often.
+Solution: Only call message_filtered() when filtering is already false.
+Files: src/quickfix.c, runtime/doc/quickfix.txt
+
+
+*** ../vim-8.1.0168/src/quickfix.c Sun Jul 8 16:50:33 2018
+--- src/quickfix.c Sun Jul 8 18:17:59 2018
+***************
+*** 3139,3156 ****
+ sprintf((char *)IObuff, "%2d", i);
+ else
+ vim_snprintf((char *)IObuff, IOSIZE, "%2d %s",
+! i, (char *)fname);
+ }
+
+ // Support for filtering entries using :filter /pat/ clist
+! filter_entry = 1;
+ if (qfp->qf_module != NULL && *qfp->qf_module != NUL)
+ filter_entry &= message_filtered(qfp->qf_module);
+! if (fname != NULL)
+ filter_entry &= message_filtered(fname);
+! if (qfp->qf_pattern != NULL)
+ filter_entry &= message_filtered(qfp->qf_pattern);
+! filter_entry &= message_filtered(qfp->qf_text);
+ if (filter_entry)
+ goto next_entry;
+
+--- 3139,3159 ----
+ sprintf((char *)IObuff, "%2d", i);
+ else
+ vim_snprintf((char *)IObuff, IOSIZE, "%2d %s",
+! i, (char *)fname);
+ }
+
+ // Support for filtering entries using :filter /pat/ clist
+! // Match against the module name, file name, search pattern and
+! // text of the entry.
+! filter_entry = TRUE;
+ if (qfp->qf_module != NULL && *qfp->qf_module != NUL)
+ filter_entry &= message_filtered(qfp->qf_module);
+! if (filter_entry && fname != NULL)
+ filter_entry &= message_filtered(fname);
+! if (filter_entry && qfp->qf_pattern != NULL)
+ filter_entry &= message_filtered(qfp->qf_pattern);
+! if (filter_entry)
+! filter_entry &= message_filtered(qfp->qf_text);
+ if (filter_entry)
+ goto next_entry;
+
+*** ../vim-8.1.0168/runtime/doc/quickfix.txt Thu May 17 13:42:02 2018
+--- runtime/doc/quickfix.txt Sun Jul 8 18:16:55 2018
+***************
+*** 298,303 ****
+--- 298,307 ----
+ from the last error backwards, -1 being the last error.
+ The 'switchbuf' settings are respected when jumping
+ to a buffer.
++ The |:filter| command can be used to display only the
++ quickfix entries matching a supplied pattern. The
++ pattern is matched against the filename, module name,
++ pattern and text of the entry.
+
+ :cl[ist] +{count} List the current and next {count} valid errors. This
+ is similar to ":clist from from+count", where "from"
+***************
+*** 1287,1293 ****
+ Changing directory
+
+ The following uppercase conversion characters specify the type of special
+! format strings. At most one of them may be given as a prefix at the begin
+ of a single comma-separated format pattern.
+ Some compilers produce messages that consist of directory names that have to
+ be prepended to each file name read by %f (example: GNU make). The following
+--- 1291,1297 ----
+ Changing directory
+
+ The following uppercase conversion characters specify the type of special
+! format strings. At most one of them may be given as a prefix at the beginning
+ of a single comma-separated format pattern.
+ Some compilers produce messages that consist of directory names that have to
+ be prepended to each file name read by %f (example: GNU make). The following
+*** ../vim-8.1.0168/src/version.c Sun Jul 8 17:57:30 2018
+--- src/version.c Sun Jul 8 18:16:48 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 169,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+211. Your husband leaves you...taking the computer with him and you
+ call him crying, and beg him to bring the computer back.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0170 b/data/vim/patches/8.1.0170
new file mode 100644
index 000000000..7c6ab3497
--- /dev/null
+++ b/data/vim/patches/8.1.0170
@@ -0,0 +1,296 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0170
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0170
+Problem: Invalid memory use with complicated pattern. (Andy Massimino)
+Solution: Reallocate the list of listids when needed. (closes #3175)
+ Remove unnecessary function prototypes.
+Files: src/regexp_nfa.c
+
+
+*** ../vim-8.1.0169/src/regexp_nfa.c Sat Jun 23 17:14:36 2018
+--- src/regexp_nfa.c Sun Jul 8 19:03:46 2018
+***************
+*** 282,322 ****
+ /* 0 for first call to nfa_regmatch(), 1 for recursive call. */
+ static int nfa_ll_index = 0;
+
+- static int nfa_regcomp_start(char_u *expr, int re_flags);
+- static int nfa_get_reganch(nfa_state_T *start, int depth);
+- static int nfa_get_regstart(nfa_state_T *start, int depth);
+- static char_u *nfa_get_match_text(nfa_state_T *start);
+ static int realloc_post_list(void);
+- static int nfa_recognize_char_class(char_u *start, char_u *end, int extra_newl);
+- static int nfa_emit_equi_class(int c);
+- static int nfa_regatom(void);
+- static int nfa_regpiece(void);
+- static int nfa_regconcat(void);
+- static int nfa_regbranch(void);
+ static int nfa_reg(int paren);
+ #ifdef DEBUG
+- static void nfa_set_code(int c);
+- static void nfa_postfix_dump(char_u *expr, int retval);
+- static void nfa_print_state(FILE *debugf, nfa_state_T *state);
+ static void nfa_print_state2(FILE *debugf, nfa_state_T *state, garray_T *indent);
+- static void nfa_dump(nfa_regprog_T *prog);
+ #endif
+- static int *re2post(void);
+- static nfa_state_T *alloc_state(int c, nfa_state_T *out, nfa_state_T *out1);
+- static void st_error(int *postfix, int *end, int *p);
+- static int nfa_max_width(nfa_state_T *startstate, int depth);
+- static nfa_state_T *post2nfa(int *postfix, int *end, int nfa_calc_size);
+- static void nfa_postprocess(nfa_regprog_T *prog);
+- static int check_char_class(int class, int c);
+- static void nfa_save_listids(nfa_regprog_T *prog, int *list);
+- static void nfa_restore_listids(nfa_regprog_T *prog, int *list);
+- static int nfa_re_num_cmp(long_u val, int op, long_u pos);
+- static long nfa_regtry(nfa_regprog_T *prog, colnr_T col, proftime_T *tm, int *timed_out);
+- static long nfa_regexec_both(char_u *line, colnr_T col, proftime_T *tm, int *timed_out);
+- static regprog_T *nfa_regcomp(char_u *expr, int re_flags);
+- static void nfa_regfree(regprog_T *prog);
+- static int nfa_regexec_nl(regmatch_T *rmp, char_u *line, colnr_T col, int line_lbr);
+- static long nfa_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm, int *timed_out);
+ static int match_follows(nfa_state_T *startstate, int depth);
+ static int failure_chance(nfa_state_T *state, int depth);
+
+--- 282,292 ----
+***************
+*** 2876,2888 ****
+ };
+ typedef struct Frag Frag_T;
+
+- static Frag_T frag(nfa_state_T *start, Ptrlist *out);
+- static Ptrlist *list1(nfa_state_T **outp);
+- static void patch(Ptrlist *l, nfa_state_T *s);
+- static Ptrlist *append(Ptrlist *l1, Ptrlist *l2);
+- static void st_push(Frag_T s, Frag_T **p, Frag_T *stack_end);
+- static Frag_T st_pop(Frag_T **p, Frag_T *stack);
+-
+ /*
+ * Initialize a Frag_T struct and return it.
+ */
+--- 2846,2851 ----
+***************
+*** 3917,3925 ****
+ } nfa_list_T;
+
+ #ifdef ENABLE_LOG
+- static void log_subsexpr(regsubs_T *subs);
+ static void log_subexpr(regsub_T *sub);
+- static char *pim_info(nfa_pim_T *pim);
+
+ static void
+ log_subsexpr(regsubs_T *subs)
+--- 3880,3886 ----
+***************
+*** 3974,3998 ****
+ #endif
+
+ /* Used during execution: whether a match has been found. */
+! static int nfa_match;
+ #ifdef FEAT_RELTIME
+ static proftime_T *nfa_time_limit;
+ static int *nfa_timed_out;
+ static int nfa_time_count;
+ #endif
+
+- static void copy_pim(nfa_pim_T *to, nfa_pim_T *from);
+- static void clear_sub(regsub_T *sub);
+ static void copy_sub(regsub_T *to, regsub_T *from);
+- static void copy_sub_off(regsub_T *to, regsub_T *from);
+- static void copy_ze_off(regsub_T *to, regsub_T *from);
+- static int sub_equal(regsub_T *sub1, regsub_T *sub2);
+- static int match_backref(regsub_T *sub, int subidx, int *bytelen);
+- static int has_state_with_pos(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim);
+ static int pim_equal(nfa_pim_T *one, nfa_pim_T *two);
+- static int state_in_list(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs);
+- static regsubs_T *addstate(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs_arg, nfa_pim_T *pim, int off);
+- static void addstate_here(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim, int *ip);
+
+ /*
+ * Copy postponed invisible match info from "from" to "to".
+--- 3935,3949 ----
+ #endif
+
+ /* Used during execution: whether a match has been found. */
+! static int nfa_match;
+ #ifdef FEAT_RELTIME
+ static proftime_T *nfa_time_limit;
+ static int *nfa_timed_out;
+ static int nfa_time_count;
+ #endif
+
+ static void copy_sub(regsub_T *to, regsub_T *from);
+ static int pim_equal(nfa_pim_T *one, nfa_pim_T *two);
+
+ /*
+ * Copy postponed invisible match info from "from" to "to".
+***************
+*** 5018,5025 ****
+
+ #ifdef FEAT_SYN_HL
+
+- static int match_zref(int subidx, int *bytelen);
+-
+ /*
+ * Check for a match with \z subexpression "subidx".
+ * Return TRUE if it matches.
+--- 4969,4974 ----
+***************
+*** 5095,5101 ****
+ return val == pos;
+ }
+
+- static int recursive_regmatch(nfa_state_T *state, nfa_pim_T *pim, nfa_regprog_T *prog, regsubs_T *submatch, regsubs_T *m, int **listids);
+ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *submatch, regsubs_T *m);
+
+ /*
+--- 5044,5049 ----
+***************
+*** 5110,5116 ****
+ nfa_regprog_T *prog,
+ regsubs_T *submatch,
+ regsubs_T *m,
+! int **listids)
+ {
+ int save_reginput_col = (int)(reginput - regline);
+ int save_reglnum = reglnum;
+--- 5058,5065 ----
+ nfa_regprog_T *prog,
+ regsubs_T *submatch,
+ regsubs_T *m,
+! int **listids,
+! int *listids_len)
+ {
+ int save_reginput_col = (int)(reginput - regline);
+ int save_reglnum = reglnum;
+***************
+*** 5212,5225 ****
+ {
+ /* Already calling nfa_regmatch() recursively. Save the lastlist[1]
+ * values and clear them. */
+! if (*listids == NULL)
+ {
+ *listids = (int *)lalloc(sizeof(int) * nstate, TRUE);
+ if (*listids == NULL)
+ {
+ EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!"));
+ return 0;
+ }
+ }
+ nfa_save_listids(prog, *listids);
+ need_restore = TRUE;
+--- 5161,5176 ----
+ {
+ /* Already calling nfa_regmatch() recursively. Save the lastlist[1]
+ * values and clear them. */
+! if (*listids == NULL || *listids_len < nstate)
+ {
++ vim_free(*listids);
+ *listids = (int *)lalloc(sizeof(int) * nstate, TRUE);
+ if (*listids == NULL)
+ {
+ EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!"));
+ return 0;
+ }
++ *listids_len = nstate;
+ }
+ nfa_save_listids(prog, *listids);
+ need_restore = TRUE;
+***************
+*** 5279,5287 ****
+ return result;
+ }
+
+- static int skip_to_start(int c, colnr_T *colp);
+- static long find_match_text(colnr_T startcol, int regstart, char_u *match_text);
+-
+ /*
+ * Estimate the chance of a match with "state" failing.
+ * empty match: 0
+--- 5230,5235 ----
+***************
+*** 5570,5575 ****
+--- 5518,5524 ----
+ nfa_list_T *thislist;
+ nfa_list_T *nextlist;
+ int *listids = NULL;
++ int listids_len = 0;
+ nfa_state_T *add_state;
+ int add_here;
+ int add_count;
+***************
+*** 5898,5904 ****
+ * follows.
+ */
+ result = recursive_regmatch(t->state, NULL, prog,
+! submatch, m, &listids);
+ if (result == NFA_TOO_EXPENSIVE)
+ {
+ nfa_match = result;
+--- 5847,5853 ----
+ * follows.
+ */
+ result = recursive_regmatch(t->state, NULL, prog,
+! submatch, m, &listids, &listids_len);
+ if (result == NFA_TOO_EXPENSIVE)
+ {
+ nfa_match = result;
+***************
+*** 6016,6022 ****
+
+ /* First try matching the pattern. */
+ result = recursive_regmatch(t->state, NULL, prog,
+! submatch, m, &listids);
+ if (result == NFA_TOO_EXPENSIVE)
+ {
+ nfa_match = result;
+--- 5965,5971 ----
+
+ /* First try matching the pattern. */
+ result = recursive_regmatch(t->state, NULL, prog,
+! submatch, m, &listids, &listids_len);
+ if (result == NFA_TOO_EXPENSIVE)
+ {
+ nfa_match = result;
+***************
+*** 6783,6789 ****
+ fprintf(log_fd, "\n");
+ #endif
+ result = recursive_regmatch(pim->state, pim,
+! prog, submatch, m, &listids);
+ pim->result = result ? NFA_PIM_MATCH : NFA_PIM_NOMATCH;
+ /* for \@! and \@<! it is a match when the result is
+ * FALSE */
+--- 6732,6738 ----
+ fprintf(log_fd, "\n");
+ #endif
+ result = recursive_regmatch(pim->state, pim,
+! prog, submatch, m, &listids, &listids_len);
+ pim->result = result ? NFA_PIM_MATCH : NFA_PIM_NOMATCH;
+ /* for \@! and \@<! it is a match when the result is
+ * FALSE */
+*** ../vim-8.1.0169/src/version.c Sun Jul 8 18:20:18 2018
+--- src/version.c Sun Jul 8 19:06:47 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 170,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+213. Your kids start referring to you as "that guy in front of the monitor."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0171 b/data/vim/patches/8.1.0171
new file mode 100644
index 000000000..3ea192f73
--- /dev/null
+++ b/data/vim/patches/8.1.0171
@@ -0,0 +1,105 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0171
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0171
+Problem: Typing CTRL-W n in a terminal window causes ml_get error.
+Solution: When resizing the terminal outside of terminal_loop() make sure
+ the snapshot is complete.
+Files: src/terminal.c, src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0170/src/terminal.c Sun Jul 8 16:50:33 2018
+--- src/terminal.c Sun Jul 8 20:48:42 2018
+***************
+*** 3134,3146 ****
+
+ if (term->tl_rows != newrows || term->tl_cols != newcols)
+ {
+-
+-
+ term->tl_vterm_size_changed = TRUE;
+ vterm_set_size(vterm, newrows, newcols);
+ ch_log(term->tl_job->jv_channel, "Resizing terminal to %d lines",
+ newrows);
+ term_report_winsize(term, newrows, newcols);
+ }
+
+ /* The cursor may have been moved when resizing. */
+--- 3134,3149 ----
+
+ if (term->tl_rows != newrows || term->tl_cols != newcols)
+ {
+ term->tl_vterm_size_changed = TRUE;
+ vterm_set_size(vterm, newrows, newcols);
+ ch_log(term->tl_job->jv_channel, "Resizing terminal to %d lines",
+ newrows);
+ term_report_winsize(term, newrows, newcols);
++
++ // Updating the terminal size will cause the snapshot to be cleared.
++ // When not in terminal_loop() we need to restore it.
++ if (term != in_terminal_loop)
++ may_move_terminal_to_buffer(term, FALSE);
+ }
+
+ /* The cursor may have been moved when resizing. */
+*** ../vim-8.1.0170/src/testdir/test_terminal.vim Tue Jun 19 20:08:10 2018
+--- src/testdir/test_terminal.vim Sun Jul 8 20:46:08 2018
+***************
+*** 1525,1530 ****
+--- 1525,1556 ----
+ exe buf . 'bwipe!'
+ endfunc
+
++ " Resizing the terminal window caused an ml_get error.
++ " TODO: This does not reproduce the original problem.
++ func Test_terminal_resize()
++ set statusline=x
++ terminal
++ call assert_equal(2, winnr('$'))
++
++ " Fill the terminal with text.
++ if has('win32')
++ call feedkeys("dir\<CR>", 'xt')
++ else
++ call feedkeys("ls\<CR>", 'xt')
++ endif
++ " Go to Terminal-Normal mode for a moment.
++ call feedkeys("\<C-W>N", 'xt')
++ " Open a new window
++ call feedkeys("i\<C-W>n", 'xt')
++ call assert_equal(3, winnr('$'))
++ redraw
++
++ close
++ call assert_equal(2, winnr('$'))
++ call feedkeys("exit\<CR>", 'xt')
++ set statusline&
++ endfunc
++
+ " must be nearly the last, we can't go back from GUI to terminal
+ func Test_zz1_terminal_in_gui()
+ if !CanRunGui()
+*** ../vim-8.1.0170/src/version.c Sun Jul 8 19:07:16 2018
+--- src/version.c Sun Jul 8 20:46:58 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 171,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+215. Your mouse-clicking forearm rivals Popeye's.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0172 b/data/vim/patches/8.1.0172
new file mode 100644
index 000000000..e83559014
--- /dev/null
+++ b/data/vim/patches/8.1.0172
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0172
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0172
+Problem: 'viminfofile' option does not behave like a file name.
+Solution: Add the P_EXPAND flag. (closes #3178)
+Files: src/option.c
+
+
+*** ../vim-8.1.0171/src/option.c Sun Jul 8 16:50:33 2018
+--- src/option.c Sun Jul 8 21:39:50 2018
+***************
+*** 2997,3003 ****
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"viminfofile", "vif", P_STRING|P_ONECOMMA|P_NODUP|P_SECURE|P_VI_DEF,
+ #ifdef FEAT_VIMINFO
+ (char_u *)&p_viminfofile, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+--- 2997,3004 ----
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+ SCRIPTID_INIT},
+! {"viminfofile", "vif", P_STRING|P_EXPAND|P_ONECOMMA|P_NODUP
+! |P_SECURE|P_VI_DEF,
+ #ifdef FEAT_VIMINFO
+ (char_u *)&p_viminfofile, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+*** ../vim-8.1.0171/src/version.c Sun Jul 8 20:49:03 2018
+--- src/version.c Sun Jul 8 21:44:15 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 172,
+ /**/
+
+--
+I noticed my daughter's Disney-net password on a sticky note:
+"MickeyMinnieGoofyPluto". I asked her why it was so long.
+"Because they say it has to have at least four characters."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0173 b/data/vim/patches/8.1.0173
new file mode 100644
index 000000000..9712a07a3
--- /dev/null
+++ b/data/vim/patches/8.1.0173
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0173
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0173
+Problem: Compiler warning on MS-Windows.
+Solution: Add type cast. (Mike Williams)
+Files: src/libvterm/src/state.c
+
+
+*** ../vim-8.1.0172/src/libvterm/src/state.c Tue Apr 24 18:21:11 2018
+--- src/libvterm/src/state.c Mon Jul 9 20:37:34 2018
+***************
+*** 268,274 ****
+ if(!npoints)
+ {
+ vterm_allocator_free(state->vt, codepoints);
+! return eaten;
+ }
+
+ if(state->gsingle_set && npoints)
+--- 268,274 ----
+ if(!npoints)
+ {
+ vterm_allocator_free(state->vt, codepoints);
+! return (int)eaten;
+ }
+
+ if(state->gsingle_set && npoints)
+*** ../vim-8.1.0172/src/version.c Sun Jul 8 21:46:52 2018
+--- src/version.c Mon Jul 9 20:38:11 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 173,
+ /**/
+
+--
+Don't be humble ... you're not that great.
+ -- Golda Meir
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0174 b/data/vim/patches/8.1.0174
new file mode 100644
index 000000000..73011d4b0
--- /dev/null
+++ b/data/vim/patches/8.1.0174
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0174
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0174
+Problem: After paging up and down fold line is wrong.
+Solution: Correct the computation of w_topline and w_botline. (Hirohito
+ Higashi)
+Files: src/move.c, src/testdir/test_fold.vim
+
+
+*** ../vim-8.1.0173/src/move.c Sun Mar 4 20:06:26 2018
+--- src/move.c Tue Jul 10 14:50:55 2018
+***************
+*** 2457,2478 ****
+ beginline(BL_SOL | BL_FIX);
+ curwin->w_valid &= ~(VALID_WCOL|VALID_WROW|VALID_VIRTCOL);
+
+! /*
+! * Avoid the screen jumping up and down when 'scrolloff' is non-zero.
+! * But make sure we scroll at least one line (happens with mix of long
+! * wrapping lines and non-wrapping line).
+! */
+! if (retval == OK && dir == FORWARD && check_top_offset())
+ {
+! scroll_cursor_top(1, FALSE);
+! if (curwin->w_topline <= old_topline
+! && old_topline < curbuf->b_ml.ml_line_count)
+ {
+! curwin->w_topline = old_topline + 1;
+ #ifdef FEAT_FOLDING
+! (void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
+ #endif
+ }
+ }
+
+ redraw_later(VALID);
+--- 2457,2483 ----
+ beginline(BL_SOL | BL_FIX);
+ curwin->w_valid &= ~(VALID_WCOL|VALID_WROW|VALID_VIRTCOL);
+
+! if (retval == OK && dir == FORWARD)
+ {
+! // Avoid the screen jumping up and down when 'scrolloff' is non-zero.
+! // But make sure we scroll at least one line (happens with mix of long
+! // wrapping lines and non-wrapping line).
+! if (check_top_offset())
+ {
+! scroll_cursor_top(1, FALSE);
+! if (curwin->w_topline <= old_topline
+! && old_topline < curbuf->b_ml.ml_line_count)
+! {
+! curwin->w_topline = old_topline + 1;
+ #ifdef FEAT_FOLDING
+! (void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
+ #endif
++ }
+ }
++ #ifdef FEAT_FOLDING
++ else if (curwin->w_botline > curbuf->b_ml.ml_line_count)
++ (void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
++ #endif
+ }
+
+ redraw_later(VALID);
+*** ../vim-8.1.0173/src/testdir/test_fold.vim Sun Nov 5 20:53:03 2017
+--- src/testdir/test_fold.vim Tue Jul 10 14:50:55 2018
+***************
+*** 1,5 ****
+--- 1,7 ----
+ " Test for folding
+
++ source view_util.vim
++
+ func PrepIndent(arg)
+ return [a:arg] + repeat(["\t".a:arg], 5)
+ endfu
+***************
+*** 648,650 ****
+--- 650,676 ----
+ endtry
+ call assert_match('E492:', a)
+ endfunc
++
++ func Test_fold_last_line_with_pagedown()
++ enew!
++ set fdm=manual
++
++ let expect = '+-- 11 lines: 9---'
++ let content = range(1,19)
++ call append(0, content)
++ normal dd9G
++ normal zfG
++ normal zt
++ call assert_equal('9', getline(foldclosed('.')))
++ call assert_equal('19', getline(foldclosedend('.')))
++ call assert_equal(expect, ScreenLines(1, len(expect))[0])
++ call feedkeys("\<C-F>", 'xt')
++ call assert_equal(expect, ScreenLines(1, len(expect))[0])
++ call feedkeys("\<C-F>", 'xt')
++ call assert_equal(expect, ScreenLines(1, len(expect))[0])
++ call feedkeys("\<C-B>\<C-F>\<C-F>", 'xt')
++ call assert_equal(expect, ScreenLines(1, len(expect))[0])
++
++ set fdm&
++ enew!
++ endfunc
+*** ../vim-8.1.0173/src/version.c Mon Jul 9 20:39:12 2018
+--- src/version.c Tue Jul 10 14:52:30 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 174,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+220. Your wife asks for sex and you tell her where to find you on IRC.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0175 b/data/vim/patches/8.1.0175
new file mode 100644
index 000000000..caabae101
--- /dev/null
+++ b/data/vim/patches/8.1.0175
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0175
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0175
+Problem: Marks test fails in very wide window. (Vladimir Lomov)
+Solution: Extend the text to match 'columns'. (closes #3180, closes #3181)
+Files: src/testdir/test_marks.vim
+
+
+*** ../vim-8.1.0174/src/testdir/test_marks.vim Sun Jul 8 17:57:30 2018
+--- src/testdir/test_marks.vim Tue Jul 10 15:18:04 2018
+***************
+*** 126,140 ****
+ return
+ endif
+ new Xone
+! call setline(1, ['ááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá'])
+ norm! ma
+
+ let a = split(execute('marks a'), "\n")
+ call assert_equal(2, len(a))
+! let expected = ' a 1 0 '
+! while strwidth(expected) < &columns - 1
+! let expected .= 'á'
+! endwhile
+ call assert_equal(expected, a[1])
+
+ bwipe!
+--- 126,137 ----
+ return
+ endif
+ new Xone
+! call setline(1, [repeat('á', &columns)])
+ norm! ma
+
+ let a = split(execute('marks a'), "\n")
+ call assert_equal(2, len(a))
+! let expected = ' a 1 0 ' . repeat('á', &columns - 16)
+ call assert_equal(expected, a[1])
+
+ bwipe!
+*** ../vim-8.1.0174/src/version.c Tue Jul 10 15:07:11 2018
+--- src/version.c Tue Jul 10 15:14:07 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 175,
+ /**/
+
+--
+Your fault: core dumped
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0176 b/data/vim/patches/8.1.0176
new file mode 100644
index 000000000..8530810f3
--- /dev/null
+++ b/data/vim/patches/8.1.0176
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0176
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0176
+Problem: Overlapping string argument for strcpy(). (Coverity)
+Solution: Use STRMOVE() instead of STRCPY(). (Dominique Pelle, closes #3187)
+Files: src/term.c
+
+
+*** ../vim-8.1.0175/src/term.c Fri Jul 6 23:11:35 2018
+--- src/term.c Tue Jul 10 17:31:59 2018
+***************
+*** 1483,1489 ****
+ if (term_7to8bit(t))
+ {
+ *t = term_7to8bit(t);
+! STRCPY(t + 1, t + 2);
+ }
+ term_strings[p->bt_entry] = s;
+ set_term_option_alloced(&term_strings[p->bt_entry]);
+--- 1483,1489 ----
+ if (term_7to8bit(t))
+ {
+ *t = term_7to8bit(t);
+! STRMOVE(t + 1, t + 2);
+ }
+ term_strings[p->bt_entry] = s;
+ set_term_option_alloced(&term_strings[p->bt_entry]);
+*** ../vim-8.1.0175/src/version.c Tue Jul 10 15:22:28 2018
+--- src/version.c Tue Jul 10 17:32:50 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 176,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+223. You set up a web-cam as your home's security system.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0177 b/data/vim/patches/8.1.0177
new file mode 100644
index 000000000..7df24e759
--- /dev/null
+++ b/data/vim/patches/8.1.0177
@@ -0,0 +1,146 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0177
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0177
+Problem: Defining function in sandbox is inconsistent, cannot use :function
+ but can define a lambda.
+Solution: Allow defining a function in the sandbox, but also use the sandbox
+ when executing it. (closes #3182)
+Files: src/userfunc.c, src/ex_cmds.h
+
+
+*** ../vim-8.1.0176/src/userfunc.c Sun Jul 8 17:18:58 2018
+--- src/userfunc.c Tue Jul 10 19:30:35 2018
+***************
+*** 14,26 ****
+ #include "vim.h"
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+! /* function flags */
+! #define FC_ABORT 0x01 /* abort function on error */
+! #define FC_RANGE 0x02 /* function accepts range */
+! #define FC_DICT 0x04 /* Dict function, uses "self" */
+! #define FC_CLOSURE 0x08 /* closure, uses outer scope variables */
+! #define FC_DELETED 0x10 /* :delfunction used while uf_refcount > 0 */
+! #define FC_REMOVED 0x20 /* function redefined while uf_refcount > 0 */
+
+ /* From user function to hashitem and back. */
+ #define UF2HIKEY(fp) ((fp)->uf_name)
+--- 14,27 ----
+ #include "vim.h"
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+! // flags used in uf_flags
+! #define FC_ABORT 0x01 // abort function on error
+! #define FC_RANGE 0x02 // function accepts range
+! #define FC_DICT 0x04 // Dict function, uses "self"
+! #define FC_CLOSURE 0x08 // closure, uses outer scope variables
+! #define FC_DELETED 0x10 // :delfunction used while uf_refcount > 0
+! #define FC_REMOVED 0x20 // function redefined while uf_refcount > 0
+! #define FC_SANDBOX 0x40 // function defined in the sandbox
+
+ /* From user function to hashitem and back. */
+ #define UF2HIKEY(fp) ((fp)->uf_name)
+***************
+*** 296,301 ****
+--- 297,304 ----
+ if (prof_def_func())
+ func_do_profile(fp);
+ #endif
++ if (sandbox)
++ flags |= FC_SANDBOX;
+ fp->uf_varargs = TRUE;
+ fp->uf_flags = flags;
+ fp->uf_calls = 0;
+***************
+*** 688,693 ****
+--- 691,697 ----
+ char_u *save_sourcing_name;
+ linenr_T save_sourcing_lnum;
+ scid_T save_current_SID;
++ int using_sandbox = FALSE;
+ funccall_T *fc;
+ int save_did_emsg;
+ static int depth = 0;
+***************
+*** 854,859 ****
+--- 858,870 ----
+ save_sourcing_name = sourcing_name;
+ save_sourcing_lnum = sourcing_lnum;
+ sourcing_lnum = 1;
++
++ if (fp->uf_flags & FC_SANDBOX)
++ {
++ using_sandbox = TRUE;
++ ++sandbox;
++ }
++
+ /* need space for function name + ("function " + 3) or "[number]" */
+ len = (save_sourcing_name == NULL ? 0 : STRLEN(save_sourcing_name))
+ + STRLEN(fp->uf_name) + 20;
+***************
+*** 1020,1025 ****
+--- 1031,1038 ----
+ if (do_profiling == PROF_YES)
+ script_prof_restore(&wait_start);
+ #endif
++ if (using_sandbox)
++ --sandbox;
+
+ if (p_verbose >= 12 && sourcing_name != NULL)
+ {
+***************
+*** 2429,2434 ****
+--- 2442,2449 ----
+ func_do_profile(fp);
+ #endif
+ fp->uf_varargs = varargs;
++ if (sandbox)
++ flags |= FC_SANDBOX;
+ fp->uf_flags = flags;
+ fp->uf_calls = 0;
+ fp->uf_script_ID = current_SID;
+*** ../vim-8.1.0176/src/ex_cmds.h Tue Apr 3 22:07:59 2018
+--- src/ex_cmds.h Tue Jul 10 19:17:05 2018
+***************
+*** 584,590 ****
+ EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
+ ADDR_LINES),
+ EX(CMD_function, "function", ex_function,
+! EXTRA|BANG|CMDWIN,
+ ADDR_LINES),
+ EX(CMD_global, "global", ex_global,
+ RANGE|WHOLEFOLD|BANG|EXTRA|DFLALL|SBOXOK|CMDWIN,
+--- 584,590 ----
+ EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
+ ADDR_LINES),
+ EX(CMD_function, "function", ex_function,
+! EXTRA|BANG|SBOXOK|CMDWIN,
+ ADDR_LINES),
+ EX(CMD_global, "global", ex_global,
+ RANGE|WHOLEFOLD|BANG|EXTRA|DFLALL|SBOXOK|CMDWIN,
+*** ../vim-8.1.0176/src/version.c Tue Jul 10 17:33:41 2018
+--- src/version.c Tue Jul 10 19:38:37 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 177,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+224. You set up your own Web page. You set up a Web page for each
+ of your kids... and your pets.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0178 b/data/vim/patches/8.1.0178
new file mode 100644
index 000000000..fbba187e4
--- /dev/null
+++ b/data/vim/patches/8.1.0178
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0178
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+
+Patch 8.1.0178
+Problem: Warning for passing pointer to non-pointer argument.
+Solution: Use zero instead of NULL.
+Files: src/if_ole.cpp
+
+
+*** ../vim-8.1.0177/src/if_ole.cpp Mon Aug 29 22:42:20 2016
+--- src/if_ole.cpp Wed Jul 11 22:55:56 2018
+***************
+*** 759,765 ****
+ hr = RegisterActiveObject(
+ app,
+ MYCLSID,
+! NULL,
+ &app_id);
+
+ if (FAILED(hr))
+--- 759,765 ----
+ hr = RegisterActiveObject(
+ app,
+ MYCLSID,
+! 0,
+ &app_id);
+
+ if (FAILED(hr))
+*** ../vim-8.1.0177/src/version.c Tue Jul 10 19:39:14 2018
+--- src/version.c Wed Jul 11 22:56:50 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 178,
+ /**/
+
+--
+The term "free software" is defined by Richard M. Stallman as
+being software that isn't necessarily for free. Confusing?
+Let's call it "Stallman software" then!
+ -- Bram Moolenaar
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0179 b/data/vim/patches/8.1.0179
new file mode 100644
index 000000000..e7e4aac00
--- /dev/null
+++ b/data/vim/patches/8.1.0179
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0179
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0179
+Problem: Redundant condition for boundary check.
+Solution: Remove the condition. (Dominique Pelle). Change FALSE to FAIL.
+Files: src/undo.c
+
+
+*** ../vim-8.1.0178/src/undo.c 2018-07-08 16:50:33.111216814 +0200
+--- src/undo.c 2018-07-13 16:27:37.721354663 +0200
+***************
+*** 266,275 ****
+ if (undo_off)
+ return OK;
+
+! if (top > curbuf->b_ml.ml_line_count
+! || top >= bot
+! || bot > curbuf->b_ml.ml_line_count + 1)
+! return FALSE; /* rely on caller to do error messages */
+
+ if (top + 2 == bot)
+ u_saveline((linenr_T)(top + 1));
+--- 266,273 ----
+ if (undo_off)
+ return OK;
+
+! if (top >= bot || bot > curbuf->b_ml.ml_line_count + 1)
+! return FAIL; // rely on caller to give an error message
+
+ if (top + 2 == bot)
+ u_saveline((linenr_T)(top + 1));
+*** ../vim-8.1.0178/src/version.c 2018-07-11 22:57:47.947564638 +0200
+--- src/version.c 2018-07-13 16:29:28.492772093 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 179,
+ /**/
+
+--
+"The amigos also appear to be guilty of not citing the work of others who had
+gone before them. Even worse, they have a chapter about modeling time and
+space without making a single reference to Star Trek!"
+ (Scott Ambler, reviewing the UML User Guide)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0180 b/data/vim/patches/8.1.0180
new file mode 100644
index 000000000..b5494c45b
--- /dev/null
+++ b/data/vim/patches/8.1.0180
@@ -0,0 +1,160 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0180
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0180
+Problem: Static analysis errors in Lua interface. (Coverity)
+Solution: Check for NULL pointers.
+Files: src/if_lua.c
+
+
+*** ../vim-8.1.0179/src/if_lua.c Sat Jul 7 23:07:35 2018
+--- src/if_lua.c Fri Jul 13 22:05:37 2018
+***************
+*** 958,964 ****
+ typval_T v;
+ if (d->dv_lock)
+ luaL_error(L, "dict is locked");
+! if (key != NULL && *key == NUL)
+ luaL_error(L, "empty key");
+ if (!lua_isnil(L, 3)) { /* read value? */
+ luaV_checktypval(L, 3, &v, "setting dict item");
+--- 958,966 ----
+ typval_T v;
+ if (d->dv_lock)
+ luaL_error(L, "dict is locked");
+! if (key == NULL)
+! return 0;
+! if (*key == NUL)
+ luaL_error(L, "empty key");
+ if (!lua_isnil(L, 3)) { /* read value? */
+ luaV_checktypval(L, 3, &v, "setting dict item");
+***************
+*** 968,980 ****
+ di = dict_find(d, key, -1);
+ if (di == NULL) /* non-existing key? */
+ {
+! if (lua_isnil(L, 3)) return 0;
+ di = dictitem_alloc(key);
+! if (di == NULL) return 0;
+ if (dict_add(d, di) == FAIL)
+ {
+! vim_free(di);
+! return 0;
+ }
+ }
+ else
+--- 970,984 ----
+ di = dict_find(d, key, -1);
+ if (di == NULL) /* non-existing key? */
+ {
+! if (lua_isnil(L, 3))
+! return 0;
+ di = dictitem_alloc(key);
+! if (di == NULL)
+! return 0;
+ if (dict_add(d, di) == FAIL)
+ {
+! vim_free(di);
+! return 0;
+ }
+ }
+ else
+***************
+*** 1066,1080 ****
+
+ f->args.vval.v_list = list_alloc();
+ rettv.v_type = VAR_UNKNOWN; /* as in clear_tv */
+! for (i = 0; i < n; i++) {
+! luaV_checktypval(L, i + 2, &v, "calling funcref");
+! list_append_tv(f->args.vval.v_list, &v);
+! }
+! status = func_call(f->tv.vval.v_string, &f->args, NULL, f->self, &rettv);
+! if (status == OK)
+! luaV_pushtypval(L, &rettv);
+! clear_tv(&f->args);
+! clear_tv(&rettv);
+ if (status != OK)
+ luaL_error(L, "cannot call funcref");
+ return 1;
+--- 1070,1090 ----
+
+ f->args.vval.v_list = list_alloc();
+ rettv.v_type = VAR_UNKNOWN; /* as in clear_tv */
+! if (f->args.vval.v_list == NULL)
+! status = FAIL;
+! else
+! {
+! for (i = 0; i < n; i++) {
+! luaV_checktypval(L, i + 2, &v, "calling funcref");
+! list_append_tv(f->args.vval.v_list, &v);
+! }
+! status = func_call(f->tv.vval.v_string, &f->args,
+! NULL, f->self, &rettv);
+! if (status == OK)
+! luaV_pushtypval(L, &rettv);
+! clear_tv(&f->args);
+! clear_tv(&rettv);
+! }
+ if (status != OK)
+ luaL_error(L, "cannot call funcref");
+ return 1;
+***************
+*** 1560,1572 ****
+ char_u *key;
+ dictitem_T *di;
+ typval_T v;
+ lua_pushvalue(L, -2); /* dup key in case it's a number */
+ key = (char_u *) lua_tostring(L, -1);
+! if (key != NULL && *key == NUL)
+ luaL_error(L, "table has empty key");
+ luaV_checktypval(L, -2, &v, "vim.dict"); /* value */
+ di = dictitem_alloc(key);
+! if (di == NULL || dict_add(d, di) == FAIL) {
+ vim_free(di);
+ lua_pushnil(L);
+ return 1;
+--- 1570,1589 ----
+ char_u *key;
+ dictitem_T *di;
+ typval_T v;
++
+ lua_pushvalue(L, -2); /* dup key in case it's a number */
+ key = (char_u *) lua_tostring(L, -1);
+! if (key == NULL)
+! {
+! lua_pushnil(L);
+! return 1;
+! }
+! if (*key == NUL)
+ luaL_error(L, "table has empty key");
+ luaV_checktypval(L, -2, &v, "vim.dict"); /* value */
+ di = dictitem_alloc(key);
+! if (di == NULL || dict_add(d, di) == FAIL)
+! {
+ vim_free(di);
+ lua_pushnil(L);
+ return 1;
+*** ../vim-8.1.0179/src/version.c Fri Jul 13 16:31:11 2018
+--- src/version.c Fri Jul 13 22:05:56 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 180,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+240. You think Webster's Dictionary is a directory of WEB sites.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0181 b/data/vim/patches/8.1.0181
new file mode 100644
index 000000000..5235d20c3
--- /dev/null
+++ b/data/vim/patches/8.1.0181
@@ -0,0 +1,66 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0181
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0181
+Problem: Memory leak with trailing characters in skip expression.
+Solution: Free the return value.
+Files: src/eval.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0180/src/eval.c Tue Jun 12 22:05:10 2018
+--- src/eval.c Sat Jul 14 17:17:35 2018
+***************
+*** 729,734 ****
+--- 729,735 ----
+ return FAIL;
+ if (*s != NUL) /* check for trailing chars after expr */
+ {
++ clear_tv(rettv);
+ EMSG2(_(e_invexpr2), s);
+ return FAIL;
+ }
+*** ../vim-8.1.0180/src/testdir/test_search.vim Sun Jun 24 19:01:55 2018
+--- src/testdir/test_search.vim Sat Jul 14 17:14:23 2018
+***************
+*** 324,329 ****
+--- 324,339 ----
+ bw!
+ endfunc
+
++ func Test_searchpair_leak()
++ new
++ call setline(1, 'if one else another endif')
++
++ " The error in the skip expression caused memory to leak.
++ call assert_fails("call searchpair('\\<if\\>', '\\<else\\>', '\\<endif\\>', '', '\"foo\" 2')", 'E15:')
++
++ bwipe!
++ endfunc
++
+ func Test_searchc()
+ " These commands used to cause memory overflow in searchc().
+ new
+*** ../vim-8.1.0180/src/version.c Fri Jul 13 22:08:19 2018
+--- src/version.c Sat Jul 14 17:02:20 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 181,
+ /**/
+
+--
+"Marriage is when a man and woman become as one; the trouble starts
+when they try to decide which one"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0182 b/data/vim/patches/8.1.0182
new file mode 100644
index 000000000..bc93b8d96
--- /dev/null
+++ b/data/vim/patches/8.1.0182
@@ -0,0 +1,425 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0182
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0182
+Problem: Unicode standard was updated.
+Solution: Include the changes. (Christian Brabandt)
+Files: src/mbyte.c
+
+
+*** ../vim-8.1.0181/src/mbyte.c Wed Jun 13 21:27:20 2018
+--- src/mbyte.c Sat Jul 14 19:27:37 2018
+***************
+*** 1462,1468 ****
+ {0x3000, 0x303e},
+ {0x3041, 0x3096},
+ {0x3099, 0x30ff},
+! {0x3105, 0x312e},
+ {0x3131, 0x318e},
+ {0x3190, 0x31ba},
+ {0x31c0, 0x31e3},
+--- 1462,1468 ----
+ {0x3000, 0x303e},
+ {0x3041, 0x3096},
+ {0x3099, 0x30ff},
+! {0x3105, 0x312f},
+ {0x3131, 0x318e},
+ {0x3190, 0x31ba},
+ {0x31c0, 0x31e3},
+***************
+*** 1482,1488 ****
+ {0xff01, 0xff60},
+ {0xffe0, 0xffe6},
+ {0x16fe0, 0x16fe1},
+! {0x17000, 0x187ec},
+ {0x18800, 0x18af2},
+ {0x1b000, 0x1b11e},
+ {0x1b170, 0x1b2fb},
+--- 1482,1488 ----
+ {0xff01, 0xff60},
+ {0xffe0, 0xffe6},
+ {0x16fe0, 0x16fe1},
+! {0x17000, 0x187f1},
+ {0x18800, 0x18af2},
+ {0x1b000, 0x1b11e},
+ {0x1b170, 0x1b2fb},
+***************
+*** 1517,1529 ****
+ {0x1f6cc, 0x1f6cc},
+ {0x1f6d0, 0x1f6d2},
+ {0x1f6eb, 0x1f6ec},
+! {0x1f6f4, 0x1f6f8},
+ {0x1f910, 0x1f93e},
+! {0x1f940, 0x1f94c},
+! {0x1f950, 0x1f96b},
+! {0x1f980, 0x1f997},
+! {0x1f9c0, 0x1f9c0},
+! {0x1f9d0, 0x1f9e6},
+ {0x20000, 0x2fffd},
+ {0x30000, 0x3fffd}
+ };
+--- 1517,1531 ----
+ {0x1f6cc, 0x1f6cc},
+ {0x1f6d0, 0x1f6d2},
+ {0x1f6eb, 0x1f6ec},
+! {0x1f6f4, 0x1f6f9},
+ {0x1f910, 0x1f93e},
+! {0x1f940, 0x1f970},
+! {0x1f973, 0x1f976},
+! {0x1f97a, 0x1f97a},
+! {0x1f97c, 0x1f9a2},
+! {0x1f9b0, 0x1f9b9},
+! {0x1f9c0, 0x1f9c2},
+! {0x1f9d0, 0x1f9ff},
+ {0x20000, 0x2fffd},
+ {0x30000, 0x3fffd}
+ };
+***************
+*** 2348,2359 ****
+ {0x0730, 0x074a},
+ {0x07a6, 0x07b0},
+ {0x07eb, 0x07f3},
+ {0x0816, 0x0819},
+ {0x081b, 0x0823},
+ {0x0825, 0x0827},
+ {0x0829, 0x082d},
+ {0x0859, 0x085b},
+! {0x08d4, 0x08e1},
+ {0x08e3, 0x0903},
+ {0x093a, 0x093c},
+ {0x093e, 0x094f},
+--- 2350,2362 ----
+ {0x0730, 0x074a},
+ {0x07a6, 0x07b0},
+ {0x07eb, 0x07f3},
++ {0x07fd, 0x07fd},
+ {0x0816, 0x0819},
+ {0x081b, 0x0823},
+ {0x0825, 0x0827},
+ {0x0829, 0x082d},
+ {0x0859, 0x085b},
+! {0x08d3, 0x08e1},
+ {0x08e3, 0x0903},
+ {0x093a, 0x093c},
+ {0x093e, 0x094f},
+***************
+*** 2366,2371 ****
+--- 2369,2375 ----
+ {0x09cb, 0x09cd},
+ {0x09d7, 0x09d7},
+ {0x09e2, 0x09e3},
++ {0x09fe, 0x09fe},
+ {0x0a01, 0x0a03},
+ {0x0a3c, 0x0a3c},
+ {0x0a3e, 0x0a42},
+***************
+*** 2393,2399 ****
+ {0x0bc6, 0x0bc8},
+ {0x0bca, 0x0bcd},
+ {0x0bd7, 0x0bd7},
+! {0x0c00, 0x0c03},
+ {0x0c3e, 0x0c44},
+ {0x0c46, 0x0c48},
+ {0x0c4a, 0x0c4d},
+--- 2397,2403 ----
+ {0x0bc6, 0x0bc8},
+ {0x0bca, 0x0bcd},
+ {0x0bd7, 0x0bd7},
+! {0x0c00, 0x0c04},
+ {0x0c3e, 0x0c44},
+ {0x0c46, 0x0c48},
+ {0x0c4a, 0x0c4d},
+***************
+*** 2493,2498 ****
+--- 2497,2503 ----
+ {0xa880, 0xa881},
+ {0xa8b4, 0xa8c5},
+ {0xa8e0, 0xa8f1},
++ {0xa8ff, 0xa8ff},
+ {0xa926, 0xa92d},
+ {0xa947, 0xa953},
+ {0xa980, 0xa983},
+***************
+*** 2523,2543 ****
+ {0x10a38, 0x10a3a},
+ {0x10a3f, 0x10a3f},
+ {0x10ae5, 0x10ae6},
+ {0x11000, 0x11002},
+ {0x11038, 0x11046},
+ {0x1107f, 0x11082},
+ {0x110b0, 0x110ba},
+ {0x11100, 0x11102},
+ {0x11127, 0x11134},
+ {0x11173, 0x11173},
+ {0x11180, 0x11182},
+ {0x111b3, 0x111c0},
+! {0x111ca, 0x111cc},
+ {0x1122c, 0x11237},
+ {0x1123e, 0x1123e},
+ {0x112df, 0x112ea},
+ {0x11300, 0x11303},
+! {0x1133c, 0x1133c},
+ {0x1133e, 0x11344},
+ {0x11347, 0x11348},
+ {0x1134b, 0x1134d},
+--- 2528,2551 ----
+ {0x10a38, 0x10a3a},
+ {0x10a3f, 0x10a3f},
+ {0x10ae5, 0x10ae6},
++ {0x10d24, 0x10d27},
++ {0x10f46, 0x10f50},
+ {0x11000, 0x11002},
+ {0x11038, 0x11046},
+ {0x1107f, 0x11082},
+ {0x110b0, 0x110ba},
+ {0x11100, 0x11102},
+ {0x11127, 0x11134},
++ {0x11145, 0x11146},
+ {0x11173, 0x11173},
+ {0x11180, 0x11182},
+ {0x111b3, 0x111c0},
+! {0x111c9, 0x111cc},
+ {0x1122c, 0x11237},
+ {0x1123e, 0x1123e},
+ {0x112df, 0x112ea},
+ {0x11300, 0x11303},
+! {0x1133b, 0x1133c},
+ {0x1133e, 0x11344},
+ {0x11347, 0x11348},
+ {0x1134b, 0x1134d},
+***************
+*** 2546,2551 ****
+--- 2554,2560 ----
+ {0x11366, 0x1136c},
+ {0x11370, 0x11374},
+ {0x11435, 0x11446},
++ {0x1145e, 0x1145e},
+ {0x114b0, 0x114c3},
+ {0x115af, 0x115b5},
+ {0x115b8, 0x115c0},
+***************
+*** 2553,2558 ****
+--- 2562,2568 ----
+ {0x11630, 0x11640},
+ {0x116ab, 0x116b7},
+ {0x1171d, 0x1172b},
++ {0x1182c, 0x1183a},
+ {0x11a01, 0x11a0a},
+ {0x11a33, 0x11a39},
+ {0x11a3b, 0x11a3e},
+***************
+*** 2568,2573 ****
+--- 2578,2587 ----
+ {0x11d3c, 0x11d3d},
+ {0x11d3f, 0x11d45},
+ {0x11d47, 0x11d47},
++ {0x11d8a, 0x11d8e},
++ {0x11d90, 0x11d91},
++ {0x11d93, 0x11d97},
++ {0x11ef3, 0x11ef6},
+ {0x16af0, 0x16af4},
+ {0x16b30, 0x16b36},
+ {0x16f51, 0x16f7e},
+***************
+*** 2659,2670 ****
+ {0x2640, 0x2640},
+ {0x2642, 0x2642},
+ {0x2648, 0x2653},
+! {0x2660, 0x2660},
+ {0x2663, 0x2663},
+ {0x2665, 0x2666},
+ {0x2668, 0x2668},
+ {0x267b, 0x267b},
+! {0x267f, 0x267f},
+ {0x2692, 0x2697},
+ {0x2699, 0x2699},
+ {0x269b, 0x269c},
+--- 2673,2684 ----
+ {0x2640, 0x2640},
+ {0x2642, 0x2642},
+ {0x2648, 0x2653},
+! {0x265f, 0x2660},
+ {0x2663, 0x2663},
+ {0x2665, 0x2666},
+ {0x2668, 0x2668},
+ {0x267b, 0x267b},
+! {0x267e, 0x267f},
+ {0x2692, 0x2697},
+ {0x2699, 0x2699},
+ {0x269b, 0x269c},
+***************
+*** 2759,2773 ****
+ {0x1f6e9, 0x1f6e9},
+ {0x1f6eb, 0x1f6ec},
+ {0x1f6f0, 0x1f6f0},
+! {0x1f6f3, 0x1f6f8},
+ {0x1f910, 0x1f93a},
+ {0x1f93c, 0x1f93e},
+ {0x1f940, 0x1f945},
+! {0x1f947, 0x1f94c},
+! {0x1f950, 0x1f96b},
+! {0x1f980, 0x1f997},
+! {0x1f9c0, 0x1f9c0},
+! {0x1f9d0, 0x1f9e6}
+ };
+
+ /*
+--- 2773,2789 ----
+ {0x1f6e9, 0x1f6e9},
+ {0x1f6eb, 0x1f6ec},
+ {0x1f6f0, 0x1f6f0},
+! {0x1f6f3, 0x1f6f9},
+ {0x1f910, 0x1f93a},
+ {0x1f93c, 0x1f93e},
+ {0x1f940, 0x1f945},
+! {0x1f947, 0x1f970},
+! {0x1f973, 0x1f976},
+! {0x1f97a, 0x1f97a},
+! {0x1f97c, 0x1f9a2},
+! {0x1f9b0, 0x1f9b9},
+! {0x1f9c0, 0x1f9c2},
+! {0x1f9d0, 0x1f9ff}
+ };
+
+ /*
+***************
+*** 3034,3039 ****
+--- 3050,3057 ----
+ {0x1c86,0x1c86,-1,-6204},
+ {0x1c87,0x1c87,-1,-6180},
+ {0x1c88,0x1c88,-1,35267},
++ {0x1c90,0x1cba,1,-3008},
++ {0x1cbd,0x1cbf,1,-3008},
+ {0x1e00,0x1e94,2,1},
+ {0x1e9b,0x1e9b,-1,-58},
+ {0x1e9e,0x1e9e,-1,-7615},
+***************
+*** 3104,3116 ****
+ {0xa7b1,0xa7b1,-1,-42282},
+ {0xa7b2,0xa7b2,-1,-42261},
+ {0xa7b3,0xa7b3,-1,928},
+! {0xa7b4,0xa7b6,2,1},
+ {0xab70,0xabbf,1,-38864},
+ {0xff21,0xff3a,1,32},
+ {0x10400,0x10427,1,40},
+ {0x104b0,0x104d3,1,40},
+ {0x10c80,0x10cb2,1,64},
+ {0x118a0,0x118bf,1,32},
+ {0x1e900,0x1e921,1,34}
+ };
+
+--- 3122,3135 ----
+ {0xa7b1,0xa7b1,-1,-42282},
+ {0xa7b2,0xa7b2,-1,-42261},
+ {0xa7b3,0xa7b3,-1,928},
+! {0xa7b4,0xa7b8,2,1},
+ {0xab70,0xabbf,1,-38864},
+ {0xff21,0xff3a,1,32},
+ {0x10400,0x10427,1,40},
+ {0x104b0,0x104d3,1,40},
+ {0x10c80,0x10cb2,1,64},
+ {0x118a0,0x118bf,1,32},
++ {0x16e40,0x16e5f,1,32},
+ {0x1e900,0x1e921,1,34}
+ };
+
+***************
+*** 3256,3261 ****
+--- 3275,3282 ----
+ {0x10c7,0x10cd,6,7264},
+ {0x13a0,0x13ef,1,38864},
+ {0x13f0,0x13f5,1,8},
++ {0x1c90,0x1cba,1,-3008},
++ {0x1cbd,0x1cbf,1,-3008},
+ {0x1e00,0x1e94,2,1},
+ {0x1e9e,0x1e9e,-1,-7615},
+ {0x1ea0,0x1efe,2,1},
+***************
+*** 3324,3335 ****
+ {0xa7b1,0xa7b1,-1,-42282},
+ {0xa7b2,0xa7b2,-1,-42261},
+ {0xa7b3,0xa7b3,-1,928},
+! {0xa7b4,0xa7b6,2,1},
+ {0xff21,0xff3a,1,32},
+ {0x10400,0x10427,1,40},
+ {0x104b0,0x104d3,1,40},
+ {0x10c80,0x10cb2,1,64},
+ {0x118a0,0x118bf,1,32},
+ {0x1e900,0x1e921,1,34}
+ };
+
+--- 3345,3357 ----
+ {0xa7b1,0xa7b1,-1,-42282},
+ {0xa7b2,0xa7b2,-1,-42261},
+ {0xa7b3,0xa7b3,-1,928},
+! {0xa7b4,0xa7b8,2,1},
+ {0xff21,0xff3a,1,32},
+ {0x10400,0x10427,1,40},
+ {0x104b0,0x104d3,1,40},
+ {0x10c80,0x10cb2,1,64},
+ {0x118a0,0x118bf,1,32},
++ {0x16e40,0x16e5f,1,32},
+ {0x1e900,0x1e921,1,34}
+ };
+
+***************
+*** 3443,3448 ****
+--- 3465,3472 ----
+ {0x4cf,0x4cf,-1,-15},
+ {0x4d1,0x52f,2,-1},
+ {0x561,0x586,1,-48},
++ {0x10d0,0x10fa,1,3008},
++ {0x10fd,0x10ff,1,3008},
+ {0x13f8,0x13fd,1,-8},
+ {0x1c80,0x1c80,-1,-6254},
+ {0x1c81,0x1c81,-1,-6253},
+***************
+*** 3505,3511 ****
+ {0xa78c,0xa791,5,-1},
+ {0xa793,0xa797,4,-1},
+ {0xa799,0xa7a9,2,-1},
+! {0xa7b5,0xa7b7,2,-1},
+ {0xab53,0xab53,-1,-928},
+ {0xab70,0xabbf,1,-38864},
+ {0xff41,0xff5a,1,-32},
+--- 3529,3535 ----
+ {0xa78c,0xa791,5,-1},
+ {0xa793,0xa797,4,-1},
+ {0xa799,0xa7a9,2,-1},
+! {0xa7b5,0xa7b9,2,-1},
+ {0xab53,0xab53,-1,-928},
+ {0xab70,0xabbf,1,-38864},
+ {0xff41,0xff5a,1,-32},
+***************
+*** 3513,3518 ****
+--- 3537,3543 ----
+ {0x104d8,0x104fb,1,-40},
+ {0x10cc0,0x10cf2,1,-64},
+ {0x118c0,0x118df,1,-32},
++ {0x16e60,0x16e7f,1,-32},
+ {0x1e922,0x1e943,1,-34}
+ };
+
+*** ../vim-8.1.0181/src/version.c Sat Jul 14 17:24:57 2018
+--- src/version.c Sat Jul 14 19:30:14 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 182,
+ /**/
+
+--
+If you're sending someone Styrofoam, what do you pack it in?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0183 b/data/vim/patches/8.1.0183
new file mode 100644
index 000000000..f21beffc5
--- /dev/null
+++ b/data/vim/patches/8.1.0183
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0183
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0183
+Problem: Lua API changed, breaking the build.
+Solution: Adjust prototype of lua_rawgeti(). (Ken Takata,
+ closes #3157, closes #3144)
+Files: src/if_lua.c
+
+
+*** ../vim-8.1.0182/src/if_lua.c Fri Jul 13 22:08:19 2018
+--- src/if_lua.c Sat Jul 14 20:48:49 2018
+***************
+*** 253,266 ****
+--- 253,275 ----
+ void (*dll_lua_pushboolean) (lua_State *L, int b);
+ void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
+ void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
++ #if LUA_VERSION_NUM <= 502
+ void (*dll_lua_rawget) (lua_State *L, int idx);
+ void (*dll_lua_rawgeti) (lua_State *L, int idx, int n);
++ #else
++ int (*dll_lua_rawget) (lua_State *L, int idx);
++ int (*dll_lua_rawgeti) (lua_State *L, int idx, lua_Integer n);
++ #endif
+ void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
+ void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
+ int (*dll_lua_getmetatable) (lua_State *L, int objindex);
+ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawset) (lua_State *L, int idx);
++ #if LUA_VERSION_NUM <= 502
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
++ #else
++ void (*dll_lua_rawseti) (lua_State *L, int idx, lua_Integer n);
++ #endif
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
+ int (*dll_lua_next) (lua_State *L, int idx);
+ /* libs */
+***************
+*** 962,968 ****
+ return 0;
+ if (*key == NUL)
+ luaL_error(L, "empty key");
+! if (!lua_isnil(L, 3)) { /* read value? */
+ luaV_checktypval(L, 3, &v, "setting dict item");
+ if (d->dv_scope == VAR_DEF_SCOPE && v.v_type == VAR_FUNC)
+ luaL_error(L, "cannot assign funcref to builtin scope");
+--- 971,978 ----
+ return 0;
+ if (*key == NUL)
+ luaL_error(L, "empty key");
+! if (!lua_isnil(L, 3)) /* read value? */
+! {
+ luaV_checktypval(L, 3, &v, "setting dict item");
+ if (d->dv_scope == VAR_DEF_SCOPE && v.v_type == VAR_FUNC)
+ luaL_error(L, "cannot assign funcref to builtin scope");
+***************
+*** 1074,1080 ****
+ status = FAIL;
+ else
+ {
+! for (i = 0; i < n; i++) {
+ luaV_checktypval(L, i + 2, &v, "calling funcref");
+ list_append_tv(f->args.vval.v_list, &v);
+ }
+--- 1084,1091 ----
+ status = FAIL;
+ else
+ {
+! for (i = 0; i < n; i++)
+! {
+ luaV_checktypval(L, i + 2, &v, "calling funcref");
+ list_append_tv(f->args.vval.v_list, &v);
+ }
+***************
+*** 1531,1543 ****
+ else
+ {
+ luaV_newlist(L, l);
+! if (initarg) { /* traverse table to init dict */
+ int notnil, i = 0;
+ typval_T v;
+! do {
+ lua_rawgeti(L, 1, ++i);
+ notnil = !lua_isnil(L, -1);
+! if (notnil) {
+ luaV_checktypval(L, -1, &v, "vim.list");
+ list_append_tv(l, &v);
+ }
+--- 1542,1557 ----
+ else
+ {
+ luaV_newlist(L, l);
+! if (initarg) /* traverse table to init list */
+! {
+ int notnil, i = 0;
+ typval_T v;
+! do
+! {
+ lua_rawgeti(L, 1, ++i);
+ notnil = !lua_isnil(L, -1);
+! if (notnil)
+! {
+ luaV_checktypval(L, -1, &v, "vim.list");
+ list_append_tv(l, &v);
+ }
+*** ../vim-8.1.0182/src/version.c Sat Jul 14 19:30:32 2018
+--- src/version.c Sat Jul 14 20:49:07 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 183,
+ /**/
+
+--
+Hear about the guy who played a blank tape at full blast?
+The mime next door went nuts.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0184 b/data/vim/patches/8.1.0184
new file mode 100644
index 000000000..4d7901174
--- /dev/null
+++ b/data/vim/patches/8.1.0184
@@ -0,0 +1,122 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0184
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0184
+Problem: Not easy to figure out the window layout.
+Solution: Add "wincol" and "winrow" to what getwininfo() returns.
+Files: src/evalfunc.c, src/testdir/test_bufwintabinfo.vim,
+ runtime/doc/eval.txt
+
+
+*** ../vim-8.1.0183/src/evalfunc.c Sun Jul 8 16:50:33 2018
+--- src/evalfunc.c Sat Jul 14 21:17:08 2018
+***************
+*** 5648,5657 ****
+--- 5648,5659 ----
+ dict_add_number(dict, "winnr", winnr);
+ dict_add_number(dict, "winid", wp->w_id);
+ dict_add_number(dict, "height", wp->w_height);
++ dict_add_number(dict, "winrow", wp->w_winrow);
+ #ifdef FEAT_MENU
+ dict_add_number(dict, "winbar", wp->w_winbar_height);
+ #endif
+ dict_add_number(dict, "width", wp->w_width);
++ dict_add_number(dict, "wincol", wp->w_wincol);
+ dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum);
+
+ #ifdef FEAT_TERMINAL
+*** ../vim-8.1.0183/src/testdir/test_bufwintabinfo.vim Sun Dec 10 21:02:56 2017
+--- src/testdir/test_bufwintabinfo.vim Sat Jul 14 21:34:20 2018
+***************
+*** 46,62 ****
+ let w2_id = win_getid()
+ tabnew | let w3_id = win_getid()
+ new | let w4_id = win_getid()
+! new | let w5_id = win_getid()
+ call setwinvar(0, 'signal', 'green')
+ tabfirst
+ let winlist = getwininfo()
+ call assert_equal(5, len(winlist))
+ call assert_equal(winbufnr(2), winlist[1].bufnr)
+ call assert_equal(winheight(2), winlist[1].height)
+ call assert_equal(1, winlist[2].winnr)
+ call assert_equal(2, winlist[3].tabnr)
+ call assert_equal('green', winlist[2].variables.signal)
+- call assert_equal(winwidth(1), winlist[0].width)
+ call assert_equal(w4_id, winlist[3].winid)
+ let winfo = getwininfo(w5_id)[0]
+ call assert_equal(2, winfo.tabnr)
+--- 46,79 ----
+ let w2_id = win_getid()
+ tabnew | let w3_id = win_getid()
+ new | let w4_id = win_getid()
+! vert new | let w5_id = win_getid()
+ call setwinvar(0, 'signal', 'green')
+ tabfirst
+ let winlist = getwininfo()
+ call assert_equal(5, len(winlist))
++ call assert_equal(winwidth(1), winlist[0].width)
++ call assert_equal(0, winlist[0].wincol)
++ call assert_equal(1, winlist[0].winrow) " tabline adds one
++
+ call assert_equal(winbufnr(2), winlist[1].bufnr)
+ call assert_equal(winheight(2), winlist[1].height)
++ call assert_equal(0, winlist[1].wincol)
++ call assert_equal(winheight(1) + 2, winlist[1].winrow)
++
+ call assert_equal(1, winlist[2].winnr)
++ call assert_equal(1, winlist[2].winrow)
++ call assert_equal(0, winlist[2].wincol)
++
++ call assert_equal(winlist[2].width + 1, winlist[3].wincol)
++ call assert_equal(0, winlist[4].wincol)
++
++ call assert_equal(1, winlist[0].tabnr)
++ call assert_equal(1, winlist[1].tabnr)
++ call assert_equal(2, winlist[2].tabnr)
+ call assert_equal(2, winlist[3].tabnr)
++ call assert_equal(2, winlist[4].tabnr)
++
+ call assert_equal('green', winlist[2].variables.signal)
+ call assert_equal(w4_id, winlist[3].winid)
+ let winfo = getwininfo(w5_id)[0]
+ call assert_equal(2, winfo.tabnr)
+*** ../vim-8.1.0183/runtime/doc/eval.txt Sat Jun 23 14:21:38 2018
+--- runtime/doc/eval.txt Sat Jul 14 21:24:39 2018
+***************
+*** 4993,5000 ****
+--- 4994,5003 ----
+ variables a reference to the dictionary with
+ window-local variables
+ width window width
++ wincol leftmost screen column of the window
+ winid |window-ID|
+ winnr window number
++ winrow topmost screen column of the window
+
+ To obtain all window-local variables use: >
+ gettabwinvar({tabnr}, {winnr}, '&')
+*** ../vim-8.1.0183/src/version.c Sat Jul 14 20:49:39 2018
+--- src/version.c Sat Jul 14 21:17:54 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 184,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+246. You use up your free 1 Gbyte in two days.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0185 b/data/vim/patches/8.1.0185
new file mode 100644
index 000000000..7009a25d0
--- /dev/null
+++ b/data/vim/patches/8.1.0185
@@ -0,0 +1,124 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0185
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0185
+Problem: Running tests writes lua.vim even though it is not used.
+Solution: Stop writing lua.vim.
+Files: src/testdir/test1.in, src/testdir/Make_dos.mak,
+ src/testdir/Make_ming.mak, src/testdir/Make_vms.mms,
+ src/testdir/Makefile
+
+
+*** ../vim-8.1.0184/src/testdir/test1.in Sun Sep 22 14:52:43 2013
+--- src/testdir/test1.in Sat Jul 14 21:45:54 2018
+***************
+*** 15,21 ****
+ be set like small.vim above. mbyte.vim is sourced by tests that require the
+ +multi_byte feature.
+ Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
+- Similar logic is applied to the +lua feature, using lua.vim.
+
+ STARTTEST
+ :" If columns or lines are too small, create wrongtermsize.
+--- 15,20 ----
+***************
+*** 33,39 ****
+ qa!
+ :w! mbyte.vim
+ :w! mzscheme.vim
+- :w! lua.vim
+ :"
+ :" If +multi_byte feature supported, make mbyte.vim empty.
+ :if has("multi_byte") | sp another | w! mbyte.vim | q | endif
+--- 32,37 ----
+***************
+*** 41,49 ****
+ :" If +mzscheme feature supported, make mzscheme.vim empty.
+ :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
+ :"
+- :" If +lua feature supported, make lua.vim empty.
+- :if has("lua") | sp another | w! lua.vim | q | endif
+- :"
+ :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
+ :" Otherwise write small.vim to skip the test.
+ :if 1 | q! | endif
+--- 39,44 ----
+*** ../vim-8.1.0184/src/testdir/Make_dos.mak Thu Nov 2 20:58:54 2017
+--- src/testdir/Make_dos.mak Sat Jul 14 21:46:31 2018
+***************
+*** 85,91 ****
+ -if exist tiny.vim del tiny.vim
+ -if exist mbyte.vim del mbyte.vim
+ -if exist mzscheme.vim del mzscheme.vim
+- -if exist lua.vim del lua.vim
+ -if exist Xdir1 rd /s /q Xdir1
+ -if exist Xfind rd /s /q Xfind
+ -if exist XfakeHOME rd /s /q XfakeHOME
+--- 85,90 ----
+*** ../vim-8.1.0184/src/testdir/Make_ming.mak Mon Dec 11 22:41:51 2017
+--- src/testdir/Make_ming.mak Sat Jul 14 21:46:35 2018
+***************
+*** 75,81 ****
+ -@if exist tiny.vim $(DEL) tiny.vim
+ -@if exist mbyte.vim $(DEL) mbyte.vim
+ -@if exist mzscheme.vim $(DEL) mzscheme.vim
+- -@if exist lua.vim $(DEL) lua.vim
+ -@if exist Xdir1 $(DELDIR) Xdir1
+ -@if exist Xfind $(DELDIR) Xfind
+ -@if exist XfakeHOME $(DELDIR) XfakeHOME
+--- 75,80 ----
+*** ../vim-8.1.0184/src/testdir/Make_vms.mms Sat Jun 30 21:50:16 2018
+--- src/testdir/Make_vms.mms Sat Jul 14 21:46:53 2018
+***************
+*** 208,213 ****
+ -@ if "''F$SEARCH("small.vim")'" .NES. "" then delete/noconfirm/nolog small.vim.*
+ -@ if "''F$SEARCH("mbyte.vim")'" .NES. "" then delete/noconfirm/nolog mbyte.vim.*
+ -@ if "''F$SEARCH("mzscheme.vim")'" .NES. "" then delete/noconfirm/nolog mzscheme.vim.*
+- -@ if "''F$SEARCH("lua.vim")'" .NES. "" then delete/noconfirm/nolog lua.vim.*
+ -@ if "''F$SEARCH("viminfo.*")'" .NES. "" then delete/noconfirm/nolog viminfo.*.*
+
+--- 208,212 ----
+*** ../vim-8.1.0184/src/testdir/Makefile Sat May 12 16:42:01 2018
+--- src/testdir/Makefile Sat Jul 14 21:47:13 2018
+***************
+*** 51,57 ****
+ $(SCRIPTS) $(SCRIPTS_GUI) $(NEW_TESTS): $(SCRIPTS_FIRST)
+
+ RM_ON_RUN = test.out X* viminfo
+! RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok benchmark.out
+ RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim $(NO_INITS) -s dotest.in
+
+ clean:
+--- 51,57 ----
+ $(SCRIPTS) $(SCRIPTS_GUI) $(NEW_TESTS): $(SCRIPTS_FIRST)
+
+ RM_ON_RUN = test.out X* viminfo
+! RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim test.ok benchmark.out
+ RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim $(NO_INITS) -s dotest.in
+
+ clean:
+*** ../vim-8.1.0184/src/version.c Sat Jul 14 21:41:38 2018
+--- src/version.c Sat Jul 14 21:47:47 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 185,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+247. You use www.switchboard.com instead of dialing 411 and 555-12-12
+ for directory assistance.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0186 b/data/vim/patches/8.1.0186
new file mode 100644
index 000000000..c2c5353a5
--- /dev/null
+++ b/data/vim/patches/8.1.0186
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0186
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0186
+Problem: Test for getwininfo() fails in GUI.
+Solution: Account for missing tabline.
+Files: src/testdir/test_bufwintabinfo.vim
+
+
+*** ../vim-8.1.0185/src/testdir/test_bufwintabinfo.vim Sat Jul 14 21:41:38 2018
+--- src/testdir/test_bufwintabinfo.vim Sat Jul 14 22:22:09 2018
+***************
+*** 53,67 ****
+ call assert_equal(5, len(winlist))
+ call assert_equal(winwidth(1), winlist[0].width)
+ call assert_equal(0, winlist[0].wincol)
+! call assert_equal(1, winlist[0].winrow) " tabline adds one
+
+ call assert_equal(winbufnr(2), winlist[1].bufnr)
+ call assert_equal(winheight(2), winlist[1].height)
+ call assert_equal(0, winlist[1].wincol)
+! call assert_equal(winheight(1) + 2, winlist[1].winrow)
+
+ call assert_equal(1, winlist[2].winnr)
+! call assert_equal(1, winlist[2].winrow)
+ call assert_equal(0, winlist[2].wincol)
+
+ call assert_equal(winlist[2].width + 1, winlist[3].wincol)
+--- 53,68 ----
+ call assert_equal(5, len(winlist))
+ call assert_equal(winwidth(1), winlist[0].width)
+ call assert_equal(0, winlist[0].wincol)
+! let tablineheight = winlist[0].winrow == 1 ? 1 : 0
+! call assert_equal(tablineheight, winlist[0].winrow) " tabline adds one
+
+ call assert_equal(winbufnr(2), winlist[1].bufnr)
+ call assert_equal(winheight(2), winlist[1].height)
+ call assert_equal(0, winlist[1].wincol)
+! call assert_equal(tablineheight + winheight(1) + 1, winlist[1].winrow)
+
+ call assert_equal(1, winlist[2].winnr)
+! call assert_equal(tablineheight, winlist[2].winrow)
+ call assert_equal(0, winlist[2].wincol)
+
+ call assert_equal(winlist[2].width + 1, winlist[3].wincol)
+*** ../vim-8.1.0185/src/version.c Sat Jul 14 21:48:42 2018
+--- src/version.c Sat Jul 14 22:23:06 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 186,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+248. You sign your letters with your e-mail address instead of your name.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0187 b/data/vim/patches/8.1.0187
new file mode 100644
index 000000000..0403ade73
--- /dev/null
+++ b/data/vim/patches/8.1.0187
@@ -0,0 +1,233 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0184
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0187 (after 8.1.0184)
+Problem: getwininfo() and win_screenpos() return different numbers.
+Solution: Add one to "wincol" and "winrow" from getwininfo().
+Files: src/evalfunc.c, src/testdir/test_bufwintabinfo.vim,
+ runtime/doc/eval.txt
+
+
+*** ../vim-8.1.0186/src/evalfunc.c Sat Jul 14 21:41:38 2018
+--- src/evalfunc.c Sun Jul 15 16:51:34 2018
+***************
+*** 5648,5659 ****
+ dict_add_number(dict, "winnr", winnr);
+ dict_add_number(dict, "winid", wp->w_id);
+ dict_add_number(dict, "height", wp->w_height);
+! dict_add_number(dict, "winrow", wp->w_winrow);
+ #ifdef FEAT_MENU
+ dict_add_number(dict, "winbar", wp->w_winbar_height);
+ #endif
+ dict_add_number(dict, "width", wp->w_width);
+! dict_add_number(dict, "wincol", wp->w_wincol);
+ dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum);
+
+ #ifdef FEAT_TERMINAL
+--- 5648,5659 ----
+ dict_add_number(dict, "winnr", winnr);
+ dict_add_number(dict, "winid", wp->w_id);
+ dict_add_number(dict, "height", wp->w_height);
+! dict_add_number(dict, "winrow", wp->w_winrow + 1);
+ #ifdef FEAT_MENU
+ dict_add_number(dict, "winbar", wp->w_winbar_height);
+ #endif
+ dict_add_number(dict, "width", wp->w_width);
+! dict_add_number(dict, "wincol", wp->w_wincol + 1);
+ dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum);
+
+ #ifdef FEAT_TERMINAL
+*** ../vim-8.1.0186/src/testdir/test_bufwintabinfo.vim Sat Jul 14 22:23:44 2018
+--- src/testdir/test_bufwintabinfo.vim Sun Jul 15 16:57:49 2018
+***************
+*** 52,72 ****
+ let winlist = getwininfo()
+ call assert_equal(5, len(winlist))
+ call assert_equal(winwidth(1), winlist[0].width)
+! call assert_equal(0, winlist[0].wincol)
+! let tablineheight = winlist[0].winrow == 1 ? 1 : 0
+! call assert_equal(tablineheight, winlist[0].winrow) " tabline adds one
+
+ call assert_equal(winbufnr(2), winlist[1].bufnr)
+ call assert_equal(winheight(2), winlist[1].height)
+! call assert_equal(0, winlist[1].wincol)
+! call assert_equal(tablineheight + winheight(1) + 1, winlist[1].winrow)
+
+ call assert_equal(1, winlist[2].winnr)
+! call assert_equal(tablineheight, winlist[2].winrow)
+! call assert_equal(0, winlist[2].wincol)
+
+! call assert_equal(winlist[2].width + 1, winlist[3].wincol)
+! call assert_equal(0, winlist[4].wincol)
+
+ call assert_equal(1, winlist[0].tabnr)
+ call assert_equal(1, winlist[1].tabnr)
+--- 52,73 ----
+ let winlist = getwininfo()
+ call assert_equal(5, len(winlist))
+ call assert_equal(winwidth(1), winlist[0].width)
+! call assert_equal(1, winlist[0].wincol)
+! " tabline adds one row in terminal, not in GUI
+! let tablineheight = winlist[0].winrow == 2 ? 1 : 0
+! call assert_equal(tablineheight + 1, winlist[0].winrow)
+
+ call assert_equal(winbufnr(2), winlist[1].bufnr)
+ call assert_equal(winheight(2), winlist[1].height)
+! call assert_equal(1, winlist[1].wincol)
+! call assert_equal(tablineheight + winheight(1) + 2, winlist[1].winrow)
+
+ call assert_equal(1, winlist[2].winnr)
+! call assert_equal(tablineheight + 1, winlist[2].winrow)
+! call assert_equal(1, winlist[2].wincol)
+
+! call assert_equal(winlist[2].width + 2, winlist[3].wincol)
+! call assert_equal(1, winlist[4].wincol)
+
+ call assert_equal(1, winlist[0].tabnr)
+ call assert_equal(1, winlist[1].tabnr)
+*** ../vim-8.1.0186/runtime/doc/eval.txt Sat Jul 14 21:41:38 2018
+--- runtime/doc/eval.txt Sun Jul 15 16:54:29 2018
+***************
+*** 2196,2202 ****
+ any variable {varname} in tab {nr} or {def}
+ gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
+ any {name} in {winnr} in tab page {tabnr}
+! getwininfo([{winid}]) List list of windows
+ getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
+ getwinposx() Number X coord in pixels of the Vim window
+ getwinposy() Number Y coord in pixels of the Vim window
+--- 2196,2202 ----
+ any variable {varname} in tab {nr} or {def}
+ gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
+ any {name} in {winnr} in tab page {tabnr}
+! getwininfo([{winid}]) List list of info about each window
+ getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
+ getwinposx() Number X coord in pixels of the Vim window
+ getwinposy() Number Y coord in pixels of the Vim window
+***************
+*** 4935,4940 ****
+--- 4936,4976 ----
+ :let list_is_on = gettabwinvar(1, 2, '&list')
+ :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
+ <
++ getwininfo([{winid}]) *getwininfo()*
++ Returns information about windows as a List with Dictionaries.
++
++ If {winid} is given Information about the window with that ID
++ is returned. If the window does not exist the result is an
++ empty list.
++
++ Without {winid} information about all the windows in all the
++ tab pages is returned.
++
++ Each List item is a Dictionary with the following entries:
++ bufnr number of buffer in the window
++ height window height (excluding winbar)
++ winbar 1 if the window has a toolbar, 0
++ otherwise
++ loclist 1 if showing a location list
++ {only with the +quickfix feature}
++ quickfix 1 if quickfix or location list window
++ {only with the +quickfix feature}
++ terminal 1 if a terminal window
++ {only with the +terminal feature}
++ tabnr tab page number
++ variables a reference to the dictionary with
++ window-local variables
++ width window width
++ wincol leftmost screen column of the window,
++ col from |win_screenpos()|
++ winid |window-ID|
++ winnr window number
++ winrow topmost screen column of the window,
++ row from |win_screenpos()|
++
++ To obtain all window-local variables use: >
++ gettabwinvar({tabnr}, {winnr}, '&')
++
+ getwinpos([{timeout}]) *getwinpos()*
+ The result is a list with two numbers, the result of
+ getwinposx() and getwinposy() combined:
+***************
+*** 4968,5006 ****
+ The result will be -1 if the information is not available.
+ The value can be used with `:winpos`.
+
+- getwininfo([{winid}]) *getwininfo()*
+- Returns information about windows as a List with Dictionaries.
+-
+- If {winid} is given Information about the window with that ID
+- is returned. If the window does not exist the result is an
+- empty list.
+-
+- Without {winid} information about all the windows in all the
+- tab pages is returned.
+-
+- Each List item is a Dictionary with the following entries:
+- bufnr number of buffer in the window
+- height window height (excluding winbar)
+- winbar 1 if the window has a toolbar, 0
+- otherwise
+- loclist 1 if showing a location list
+- {only with the +quickfix feature}
+- quickfix 1 if quickfix or location list window
+- {only with the +quickfix feature}
+- terminal 1 if a terminal window
+- {only with the +terminal feature}
+- tabnr tab page number
+- variables a reference to the dictionary with
+- window-local variables
+- width window width
+- wincol leftmost screen column of the window
+- winid |window-ID|
+- winnr window number
+- winrow topmost screen column of the window
+-
+- To obtain all window-local variables use: >
+- gettabwinvar({tabnr}, {winnr}, '&')
+-
+ getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
+ Like |gettabwinvar()| for the current tabpage.
+ Examples: >
+--- 5004,5009 ----
+***************
+*** 9047,9053 ****
+ win_screenpos({nr}) *win_screenpos()*
+ Return the screen position of window {nr} as a list with two
+ numbers: [row, col]. The first window always has position
+! [1, 1].
+ {nr} can be the window number or the |window-ID|.
+ Return [0, 0] if the window cannot be found in the current
+ tabpage.
+--- 9051,9057 ----
+ win_screenpos({nr}) *win_screenpos()*
+ Return the screen position of window {nr} as a list with two
+ numbers: [row, col]. The first window always has position
+! [1, 1], unless there is a tabline, then it is [2, 1].
+ {nr} can be the window number or the |window-ID|.
+ Return [0, 0] if the window cannot be found in the current
+ tabpage.
+*** ../vim-8.1.0186/src/version.c Sat Jul 14 22:23:44 2018
+--- src/version.c Sun Jul 15 17:00:11 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 187,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+251. You've never seen your closest friends who usually live WAY too far away.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0188 b/data/vim/patches/8.1.0188
new file mode 100644
index 000000000..9c6023768
--- /dev/null
+++ b/data/vim/patches/8.1.0188
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0188
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0188
+Problem: No test for ":cscope add".
+Solution: Add a test. (Dominique Pelle, closes #3212)
+Files: src/testdir/test_cscope.vim
+
+
+*** ../vim-8.1.0187/src/testdir/test_cscope.vim Thu Apr 5 19:04:00 2018
+--- src/testdir/test_cscope.vim Sun Jul 15 17:34:34 2018
+***************
+*** 254,260 ****
+--- 254,278 ----
+
+ " CleanUp
+ call CscopeSetupOrClean(0)
++ endfunc
++
++ " Test ":cs add {dir}" (add the {dir}/cscope.out database)
++ func Test_cscope_add_dir()
++ call mkdir('Xcscopedir', 'p')
++ call system('cscope -bk -fXcscopedir/cscope.out ../memfile_test.c')
++ cs add Xcscopedir
++ let a = execute('cscope show')
++ let lines = split(a, "\n", 1)
++ call assert_equal(3, len(lines))
++ call assert_equal(' # pid database name prepend path', lines[0])
++ call assert_equal('', lines[1])
++ call assert_match('^ 0 \d\+.*Xcscopedir/cscope.out\s\+<none>$', lines[2])
++
++ cs kill -1
++ call delete('Xcscopedir/cscope.out')
++ call assert_fails('cs add Xcscopedir', 'E563:')
+
++ call delete('Xcscopedir', 'd')
+ endfunc
+
+ func Test_cscopequickfix()
+*** ../vim-8.1.0187/src/version.c Sun Jul 15 17:01:06 2018
+--- src/version.c Sun Jul 15 17:35:29 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 188,
+ /**/
+
+--
+Emacs is a nice OS - but it lacks a good text editor.
+That's why I am using Vim. --Anonymous
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0189 b/data/vim/patches/8.1.0189
new file mode 100644
index 000000000..bb02fab77
--- /dev/null
+++ b/data/vim/patches/8.1.0189
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0189
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0189
+Problem: Function defined in sandbox not tested.
+Solution: Add a text.
+Files: src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0188/src/testdir/test_functions.vim Tue Jun 19 19:46:01 2018
+--- src/testdir/test_functions.vim Tue Jul 10 19:30:01 2018
+***************
+*** 984,986 ****
+--- 984,1002 ----
+ call assert_fails("call libcall('Xdoesnotexist_', 'getenv', 'HOME')", 'E364:')
+ call assert_fails("call libcallnr('Xdoesnotexist_', 'strlen', 'abcd')", 'E364:')
+ endfunc
++
++ sandbox function Fsandbox()
++ normal ix
++ endfunc
++
++ func Test_func_sandbox()
++ sandbox let F = {-> 'hello'}
++ call assert_equal('hello', F())
++
++ sandbox let F = {-> execute("normal ix\<Esc>")}
++ call assert_fails('call F()', 'E48:')
++ unlet F
++
++ call assert_fails('call Fsandbox()', 'E48:')
++ delfunc Fsandbox
++ endfunc
+*** ../vim-8.1.0188/src/version.c Sun Jul 15 17:36:28 2018
+--- src/version.c Sun Jul 15 20:22:12 2018
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 189,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+252. You vote for foreign officials.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0190 b/data/vim/patches/8.1.0190
new file mode 100644
index 000000000..36f52ad9b
--- /dev/null
+++ b/data/vim/patches/8.1.0190
@@ -0,0 +1,269 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0190
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0190
+Problem: Perl refcounts are wrong.
+Solution: Improve refcounting. Add a test. (Damien)
+Files: src/if_perl.xs, src/testdir/test_perl.vim
+
+
+*** ../vim-8.1.0189/src/if_perl.xs 2018-07-08 17:18:58.416462371 +0200
+--- src/if_perl.xs 2018-07-16 17:34:41.750473682 +0200
+***************
+*** 845,850 ****
+--- 845,858 ----
+ return sv_bless(rv, gv_stashpv("VIBUF", TRUE));
+ }
+
++ #if 0
++ SV *__sv_save[1024];
++ int __sv_save_ix;
++ # define D_Save_Sv(sv) do { if (__sv_save_ix < 1024) __sv_save[__sv_save_ix++] = (sv); } while (0)
++ #else
++ # define D_Save_Sv(sv) NOOP
++ #endif
++
+ /*
+ * perl_win_free
+ * Remove all references to the window to be destroyed
+***************
+*** 852,868 ****
+ void
+ perl_win_free(win_T *wp)
+ {
+! if (wp->w_perl_private)
+! sv_setiv((SV *)wp->w_perl_private, 0);
+! return;
+ }
+
+ void
+ perl_buf_free(buf_T *bp)
+ {
+! if (bp->b_perl_private)
+! sv_setiv((SV *)bp->b_perl_private, 0);
+! return;
+ }
+
+ #ifndef PROTO
+--- 860,886 ----
+ void
+ perl_win_free(win_T *wp)
+ {
+! if (wp->w_perl_private && perl_interp != NULL)
+! {
+! SV *sv = (SV*)wp->w_perl_private;
+! D_Save_Sv(sv);
+! sv_setiv(sv, 0);
+! SvREFCNT_dec(sv);
+! }
+! wp->w_perl_private = NULL;
+ }
+
+ void
+ perl_buf_free(buf_T *bp)
+ {
+! if (bp->b_perl_private && perl_interp != NULL)
+! {
+! SV *sv = (SV *)bp->b_perl_private;
+! D_Save_Sv(sv);
+! sv_setiv(sv, 0);
+! SvREFCNT_dec(sv);
+! }
+! bp->b_perl_private = NULL;
+ }
+
+ #ifndef PROTO
+***************
+*** 885,896 ****
+ # endif
+ {
+ SV *rv;
+ if (iv == 0)
+ rv = newWINrv(newSV(0), curwin);
+ else
+ rv = newBUFrv(newSV(0), curbuf);
+! sv_setsv(sv, rv);
+! SvREFCNT_dec(SvRV(rv));
+ return 0;
+ }
+ #endif /* !PROTO */
+--- 903,921 ----
+ # endif
+ {
+ SV *rv;
++
+ if (iv == 0)
+ rv = newWINrv(newSV(0), curwin);
+ else
+ rv = newBUFrv(newSV(0), curbuf);
+!
+! if (SvRV(sv) == SvRV(rv))
+! SvREFCNT_dec(SvRV(rv));
+! else /* XXX: Not sure if the `else` condition are right
+! * Test_SvREFCNT() pass in all case.
+! */
+! sv_setsv(sv, rv);
+!
+ return 0;
+ }
+ #endif /* !PROTO */
+***************
+*** 1539,1545 ****
+ else
+ {
+ FOR_ALL_BUFFERS(vimbuf)
+! XPUSHs(newBUFrv(newSV(0), vimbuf));
+ }
+ }
+ else
+--- 1564,1570 ----
+ else
+ {
+ FOR_ALL_BUFFERS(vimbuf)
+! XPUSHs(sv_2mortal(newBUFrv(newSV(0), vimbuf)));
+ }
+ }
+ else
+***************
+*** 1564,1570 ****
+ {
+ vimbuf = buflist_findnr(b);
+ if (vimbuf)
+! XPUSHs(newBUFrv(newSV(0), vimbuf));
+ }
+ }
+ }
+--- 1589,1595 ----
+ {
+ vimbuf = buflist_findnr(b);
+ if (vimbuf)
+! XPUSHs(sv_2mortal(newBUFrv(newSV(0), vimbuf)));
+ }
+ }
+ }
+***************
+*** 1584,1590 ****
+ else
+ {
+ FOR_ALL_WINDOWS(vimwin)
+! XPUSHs(newWINrv(newSV(0), vimwin));
+ }
+ }
+ else
+--- 1609,1615 ----
+ else
+ {
+ FOR_ALL_WINDOWS(vimwin)
+! XPUSHs(sv_2mortal(newWINrv(newSV(0), vimwin)));
+ }
+ }
+ else
+***************
+*** 1594,1600 ****
+ w = (int) SvIV(ST(i));
+ vimwin = win_find_nr(w);
+ if (vimwin)
+! XPUSHs(newWINrv(newSV(0), vimwin));
+ }
+ }
+
+--- 1619,1625 ----
+ w = (int) SvIV(ST(i));
+ vimwin = win_find_nr(w);
+ if (vimwin)
+! XPUSHs(sv_2mortal(newWINrv(newSV(0), vimwin)));
+ }
+ }
+
+*** ../vim-8.1.0189/src/testdir/test_perl.vim 2017-03-18 19:45:55.000000000 +0100
+--- src/testdir/test_perl.vim 2018-07-16 17:34:41.754473657 +0200
+***************
+*** 219,238 ****
+ call assert_equal(['&VIM::Msg', 'STDOUT', 'STDERR'], split(l:out, "\n"))
+ endfunc
+
+! func Test_SvREFCNT()
+ new t
+ perl <<--perl
+ my ($b, $w);
+! $b = $curbuf for 0 .. 10;
+! $w = $curwin for 0 .. 10;
+ VIM::DoCommand('bw! t');
+ if (exists &Internals::SvREFCNT) {
+ my $cb = Internals::SvREFCNT($$b);
+ my $cw = Internals::SvREFCNT($$w);
+! VIM::Eval("assert_equal(2, $cb)");
+! VIM::Eval("assert_equal(2, $cw)");
+ }
+ VIM::Eval("assert_false($$b)");
+ VIM::Eval("assert_false($$w)");
+ --perl
+ endfunc
+--- 219,260 ----
+ call assert_equal(['&VIM::Msg', 'STDOUT', 'STDERR'], split(l:out, "\n"))
+ endfunc
+
+! " Run first to get a clean namespace
+! func Test_000_SvREFCNT()
+! for i in range(10)
+! exec 'new X'.i
+! endfor
+ new t
+ perl <<--perl
++ #line 5 "Test_000_SvREFCNT()"
+ my ($b, $w);
+!
+! $b = $curbuf for 0 .. 100;
+! $w = $curwin for 0 .. 100;
+! () = VIM::Buffers for 0 .. 100;
+! () = VIM::Windows for 0 .. 100;
+!
+ VIM::DoCommand('bw! t');
+ if (exists &Internals::SvREFCNT) {
+ my $cb = Internals::SvREFCNT($$b);
+ my $cw = Internals::SvREFCNT($$w);
+! VIM::Eval("assert_equal(2, $cb, 'T1')");
+! VIM::Eval("assert_equal(2, $cw, 'T2')");
+! foreach ( VIM::Buffers, VIM::Windows ) {
+! my $c = Internals::SvREFCNT($_);
+! VIM::Eval("assert_equal(2, $c, 'T3')");
+! $c = Internals::SvREFCNT($$_);
+! # Why only one ref?
+! # Look wrong but work. Maybe not portable...
+! VIM::Eval("assert_equal(1, $c, 'T4')");
+! }
+! $cb = Internals::SvREFCNT($$curbuf);
+! $cw = Internals::SvREFCNT($$curwin);
+! VIM::Eval("assert_equal(3, $cb, 'T5')");
+! VIM::Eval("assert_equal(3, $cw, 'T6')");
+ }
+ VIM::Eval("assert_false($$b)");
+ VIM::Eval("assert_false($$w)");
+ --perl
++ %bw!
+ endfunc
+*** ../vim-8.1.0189/src/version.c 2018-07-15 20:26:37.418459878 +0200
+--- src/version.c 2018-07-16 17:37:41.017344049 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 190,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+255. You work for a newspaper and your editor asks you to write an
+ article about Internet addiction...in the "first person."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0191 b/data/vim/patches/8.1.0191
new file mode 100644
index 000000000..4bfe2a5ad
--- /dev/null
+++ b/data/vim/patches/8.1.0191
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0191
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0191 (after 8.1.0190)
+Problem: Perl test fails in 24 line terminal.
+Solution: Create fewer windows.
+Files: src/testdir/test_perl.vim
+
+
+*** ../vim-8.1.0190/src/testdir/test_perl.vim 2018-07-16 17:45:16.998502685 +0200
+--- src/testdir/test_perl.vim 2018-07-16 18:05:22.631351923 +0200
+***************
+*** 221,227 ****
+
+ " Run first to get a clean namespace
+ func Test_000_SvREFCNT()
+! for i in range(10)
+ exec 'new X'.i
+ endfor
+ new t
+--- 221,227 ----
+
+ " Run first to get a clean namespace
+ func Test_000_SvREFCNT()
+! for i in range(8)
+ exec 'new X'.i
+ endfor
+ new t
+*** ../vim-8.1.0190/src/version.c 2018-07-16 17:45:16.998502685 +0200
+--- src/version.c 2018-07-16 18:08:33.894241240 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 191,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+256. You are able to write down over 250 symptoms of being an internet
+ addict, even though they only asked for 101.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0192 b/data/vim/patches/8.1.0192
new file mode 100644
index 000000000..8dfbf381c
--- /dev/null
+++ b/data/vim/patches/8.1.0192
@@ -0,0 +1,4274 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0192
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0192
+Problem: Executing regexp recursively fails with a crash.
+Solution: Move global variables into "rex".
+Files: src/regexp.c, src/regexp.h, src/regexp_nfa.c
+
+
+*** ../vim-8.1.0191/src/regexp.c 2018-06-23 15:09:02.351412460 +0200
+--- src/regexp.c 2018-07-17 05:32:30.971441868 +0200
+***************
+*** 344,350 ****
+
+ #define MAX_LIMIT (32767L << 16L)
+
+- static int re_multi_type(int);
+ static int cstrncmp(char_u *s1, char_u *s2, int *n);
+ static char_u *cstrchr(char_u *, int);
+
+--- 344,349 ----
+***************
+*** 371,376 ****
+--- 370,377 ----
+ #endif
+ static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%[");
+ static char_u e_empty_sb[] = N_("E70: Empty %s%%[]");
++ static char_u e_recursive[] = N_("E956: Cannot use pattern recursively");
++
+ #define NOT_MULTI 0
+ #define MULTI_ONE 1
+ #define MULTI_MULT 2
+***************
+*** 426,439 ****
+ static char_u REGEXP_INRANGE[] = "]^-n\\";
+ static char_u REGEXP_ABBR[] = "nrtebdoxuU";
+
+- static int backslash_trans(int c);
+- static int get_char_class(char_u **pp);
+- static int get_equi_class(char_u **pp);
+- static void reg_equi_class(int c);
+- static int get_coll_element(char_u **pp);
+- static char_u *skip_anyof(char_u *p);
+- static void init_class_tab(void);
+-
+ /*
+ * Translate '\x' to its control character, except "\n", which is Magic.
+ */
+--- 427,432 ----
+***************
+*** 688,695 ****
+ * Forward declarations for vim_regcomp()'s friends.
+ */
+ static void initchr(char_u *);
+- static void save_parse_state(parse_state_T *ps);
+- static void restore_parse_state(parse_state_T *ps);
+ static int getchr(void);
+ static void skipchr_keepstart(void);
+ static int peekchr(void);
+--- 681,686 ----
+***************
+*** 1171,1177 ****
+ return 0;
+ }
+
+- static void get_cpo_flags(void);
+ static int reg_cpo_lit; /* 'cpoptions' contains 'l' flag */
+ static int reg_cpo_bsl; /* 'cpoptions' contains '\' flag */
+
+--- 1162,1167 ----
+***************
+*** 1322,1330 ****
+ return TRUE;
+ }
+
+- static regprog_T *bt_regcomp(char_u *expr, int re_flags);
+- static void bt_regfree(regprog_T *prog);
+-
+ /*
+ * bt_regcomp() - compile a regular expression into internal code for the
+ * traditional back track matcher.
+--- 1312,1317 ----
+***************
+*** 1373,1378 ****
+--- 1360,1366 ----
+ r = (bt_regprog_T *)lalloc(sizeof(bt_regprog_T) + regsize, TRUE);
+ if (r == NULL)
+ return NULL;
++ r->re_in_use = FALSE;
+
+ /*
+ * Second pass: emit code.
+***************
+*** 1525,1533 ****
+ }
+ #endif
+
+! /* variables for parsing reginput */
+! static int at_start; /* True when on the first character */
+! static int prev_at_start; /* True when on the second character */
+
+ /*
+ * Parse regular expression, i.e. main body or parenthesized thing.
+--- 1513,1521 ----
+ }
+ #endif
+
+! // variables used for parsing
+! static int at_start; // True when on the first character
+! static int prev_at_start; // True when on the second character
+
+ /*
+ * Parse regular expression, i.e. main body or parenthesized thing.
+***************
+*** 3443,3460 ****
+ * Global work variables for vim_regexec().
+ */
+
+- /* The current match-position is remembered with these variables: */
+- static linenr_T reglnum; /* line number, relative to first line */
+- static char_u *regline; /* start of current line */
+- static char_u *reginput; /* current input, points into "regline" */
+-
+- static int need_clear_subexpr; /* subexpressions still need to be
+- * cleared */
+- #ifdef FEAT_SYN_HL
+- static int need_clear_zsubexpr = FALSE; /* extmatch subexpressions
+- * still need to be cleared */
+- #endif
+-
+ /*
+ * Structure used to save the current input state, when it needs to be
+ * restored after trying a match. Used by reg_save() and reg_restore().
+--- 3431,3436 ----
+***************
+*** 3464,3471 ****
+ {
+ union
+ {
+! char_u *ptr; /* reginput pointer, for single-line regexp */
+! lpos_T pos; /* reginput pos, for multi-line regexp */
+ } rs_u;
+ int rs_len;
+ } regsave_T;
+--- 3440,3447 ----
+ {
+ union
+ {
+! char_u *ptr; /* rex.input pointer, for single-line regexp */
+! lpos_T pos; /* rex.input pos, for multi-line regexp */
+ } rs_u;
+ int rs_len;
+ } regsave_T;
+***************
+*** 3564,3576 ****
+ linenr_T reg_maxline;
+ int reg_line_lbr; /* "\n" in string is line break */
+
+ /* Internal copy of 'ignorecase'. It is set at each call to vim_regexec().
+ * Normally it gets the value of "rm_ic" or "rmm_ic", but when the pattern
+ * contains '\c' or '\C' the value is overruled. */
+ int reg_ic;
+
+ #ifdef FEAT_MBYTE
+! /* Similar to rex.reg_ic, but only for 'combining' characters. Set with \Z
+ * flag in the regexp. Defaults to false, always. */
+ int reg_icombine;
+ #endif
+--- 3540,3563 ----
+ linenr_T reg_maxline;
+ int reg_line_lbr; /* "\n" in string is line break */
+
++ // The current match-position is stord in these variables:
++ linenr_T lnum; // line number, relative to first line
++ char_u *line; // start of current line
++ char_u *input; // current input, points into "regline"
++
++ int need_clear_subexpr; // subexpressions still need to be cleared
++ #ifdef FEAT_SYN_HL
++ int need_clear_zsubexpr; // extmatch subexpressions still need to be
++ // cleared
++ #endif
++
+ /* Internal copy of 'ignorecase'. It is set at each call to vim_regexec().
+ * Normally it gets the value of "rm_ic" or "rmm_ic", but when the pattern
+ * contains '\c' or '\C' the value is overruled. */
+ int reg_ic;
+
+ #ifdef FEAT_MBYTE
+! /* Similar to "reg_ic", but only for 'combining' characters. Set with \Z
+ * flag in the regexp. Defaults to false, always. */
+ int reg_icombine;
+ #endif
+***************
+*** 3578,3583 ****
+--- 3565,3586 ----
+ /* Copy of "rmm_maxcol": maximum column to search for a match. Zero when
+ * there is no maximum. */
+ colnr_T reg_maxcol;
++
++ // State for the NFA engine regexec.
++ int nfa_has_zend; // NFA regexp \ze operator encountered.
++ int nfa_has_backref; // NFA regexp \1 .. \9 encountered.
++ int nfa_nsubexpr; // Number of sub expressions actually being used
++ // during execution. 1 if only the whole match
++ // (subexpr 0) is used.
++ // listid is global, so that it increases on recursive calls to
++ // nfa_regmatch(), which means we don't have to clear the lastlist field of
++ // all the states.
++ int nfa_listid;
++ int nfa_alt_listid;
++
++ #ifdef FEAT_SYN_HL
++ int nfa_has_zsubexpr; // NFA regexp has \z( ), set zsubexpr.
++ #endif
+ } regexec_T;
+
+ static regexec_T rex;
+***************
+*** 3619,3625 ****
+ {
+ save_se_T sesave;
+ regsave_T regsave;
+! } rs_un; /* room for saving reginput */
+ short rs_no; /* submatch nr or BEHIND/NOBEHIND */
+ } regitem_T;
+
+--- 3622,3628 ----
+ {
+ save_se_T sesave;
+ regsave_T regsave;
+! } rs_un; /* room for saving rex.input */
+ short rs_no; /* submatch nr or BEHIND/NOBEHIND */
+ } regitem_T;
+
+***************
+*** 3896,3903 ****
+ goto theend;
+ }
+
+! regline = line;
+! reglnum = 0;
+ reg_toolong = FALSE;
+
+ /* Simplest case: Anchored match need be tried only once. */
+--- 3899,3906 ----
+ goto theend;
+ }
+
+! rex.line = line;
+! rex.lnum = 0;
+ reg_toolong = FALSE;
+
+ /* Simplest case: Anchored match need be tried only once. */
+***************
+*** 3907,3916 ****
+
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! c = (*mb_ptr2char)(regline + col);
+ else
+ #endif
+! c = regline[col];
+ if (prog->regstart == NUL
+ || prog->regstart == c
+ || (rex.reg_ic && ((
+--- 3910,3919 ----
+
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! c = (*mb_ptr2char)(rex.line + col);
+ else
+ #endif
+! c = rex.line[col];
+ if (prog->regstart == NUL
+ || prog->regstart == c
+ || (rex.reg_ic && ((
+***************
+*** 3940,3954 ****
+ && !has_mbyte
+ #endif
+ )
+! s = vim_strbyte(regline + col, prog->regstart);
+ else
+! s = cstrchr(regline + col, prog->regstart);
+ if (s == NULL)
+ {
+ retval = 0;
+ break;
+ }
+! col = (int)(s - regline);
+ }
+
+ /* Check for maximum column to try. */
+--- 3943,3957 ----
+ && !has_mbyte
+ #endif
+ )
+! s = vim_strbyte(rex.line + col, prog->regstart);
+ else
+! s = cstrchr(rex.line + col, prog->regstart);
+ if (s == NULL)
+ {
+ retval = 0;
+ break;
+ }
+! col = (int)(s - rex.line);
+ }
+
+ /* Check for maximum column to try. */
+***************
+*** 3963,3978 ****
+ break;
+
+ /* if not currently on the first line, get it again */
+! if (reglnum != 0)
+ {
+! reglnum = 0;
+! regline = reg_getline((linenr_T)0);
+ }
+! if (regline[col] == NUL)
+ break;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! col += (*mb_ptr2len)(regline + col);
+ else
+ #endif
+ ++col;
+--- 3966,3981 ----
+ break;
+
+ /* if not currently on the first line, get it again */
+! if (rex.lnum != 0)
+ {
+! rex.lnum = 0;
+! rex.line = reg_getline((linenr_T)0);
+ }
+! if (rex.line[col] == NUL)
+ break;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! col += (*mb_ptr2len)(rex.line + col);
+ else
+ #endif
+ ++col;
+***************
+*** 4052,4058 ****
+ #endif
+
+ /*
+! * regtry - try match of "prog" with at regline["col"].
+ * Returns 0 for failure, number of lines contained in the match otherwise.
+ */
+ static long
+--- 4055,4061 ----
+ #endif
+
+ /*
+! * regtry - try match of "prog" with at rex.line["col"].
+ * Returns 0 for failure, number of lines contained in the match otherwise.
+ */
+ static long
+***************
+*** 4062,4073 ****
+ proftime_T *tm, /* timeout limit or NULL */
+ int *timed_out) /* flag set on timeout or NULL */
+ {
+! reginput = regline + col;
+! need_clear_subexpr = TRUE;
+ #ifdef FEAT_SYN_HL
+! /* Clear the external match subpointers if necessary. */
+! if (prog->reghasz == REX_SET)
+! need_clear_zsubexpr = TRUE;
+ #endif
+
+ if (regmatch(prog->program + 1, tm, timed_out) == 0)
+--- 4065,4075 ----
+ proftime_T *tm, /* timeout limit or NULL */
+ int *timed_out) /* flag set on timeout or NULL */
+ {
+! rex.input = rex.line + col;
+! rex.need_clear_subexpr = TRUE;
+ #ifdef FEAT_SYN_HL
+! // Clear the external match subpointers if necessary.
+! rex.need_clear_zsubexpr = (prog->reghasz == REX_SET);
+ #endif
+
+ if (regmatch(prog->program + 1, tm, timed_out) == 0)
+***************
+*** 4083,4101 ****
+ }
+ if (rex.reg_endpos[0].lnum < 0)
+ {
+! rex.reg_endpos[0].lnum = reglnum;
+! rex.reg_endpos[0].col = (int)(reginput - regline);
+ }
+ else
+ /* Use line number of "\ze". */
+! reglnum = rex.reg_endpos[0].lnum;
+ }
+ else
+ {
+ if (rex.reg_startp[0] == NULL)
+! rex.reg_startp[0] = regline + col;
+ if (rex.reg_endp[0] == NULL)
+! rex.reg_endp[0] = reginput;
+ }
+ #ifdef FEAT_SYN_HL
+ /* Package any found \z(...\) matches for export. Default is none. */
+--- 4085,4103 ----
+ }
+ if (rex.reg_endpos[0].lnum < 0)
+ {
+! rex.reg_endpos[0].lnum = rex.lnum;
+! rex.reg_endpos[0].col = (int)(rex.input - rex.line);
+ }
+ else
+ /* Use line number of "\ze". */
+! rex.lnum = rex.reg_endpos[0].lnum;
+ }
+ else
+ {
+ if (rex.reg_startp[0] == NULL)
+! rex.reg_startp[0] = rex.line + col;
+ if (rex.reg_endp[0] == NULL)
+! rex.reg_endp[0] = rex.input;
+ }
+ #ifdef FEAT_SYN_HL
+ /* Package any found \z(...\) matches for export. Default is none. */
+***************
+*** 4131,4137 ****
+ }
+ }
+ #endif
+! return 1 + reglnum;
+ }
+
+ #ifdef FEAT_MBYTE
+--- 4133,4139 ----
+ }
+ }
+ #endif
+! return 1 + rex.lnum;
+ }
+
+ #ifdef FEAT_MBYTE
+***************
+*** 4143,4151 ****
+ static int
+ reg_prev_class(void)
+ {
+! if (reginput > regline)
+! return mb_get_class_buf(reginput - 1
+! - (*mb_head_off)(regline, reginput - 1), rex.reg_buf);
+ return -1;
+ }
+ #endif
+--- 4145,4153 ----
+ static int
+ reg_prev_class(void)
+ {
+! if (rex.input > rex.line)
+! return mb_get_class_buf(rex.input - 1
+! - (*mb_head_off)(rex.line, rex.input - 1), rex.reg_buf);
+ return -1;
+ }
+ #endif
+***************
+*** 4153,4159 ****
+ static int reg_match_visual(void);
+
+ /*
+! * Return TRUE if the current reginput position matches the Visual area.
+ */
+ static int
+ reg_match_visual(void)
+--- 4155,4161 ----
+ static int reg_match_visual(void);
+
+ /*
+! * Return TRUE if the current rex.input position matches the Visual area.
+ */
+ static int
+ reg_match_visual(void)
+***************
+*** 4199,4211 ****
+ }
+ mode = curbuf->b_visual.vi_mode;
+ }
+! lnum = reglnum + rex.reg_firstlnum;
+ if (lnum < top.lnum || lnum > bot.lnum)
+ return FALSE;
+
+ if (mode == 'v')
+ {
+! col = (colnr_T)(reginput - regline);
+ if ((lnum == top.lnum && col < top.col)
+ || (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e')))
+ return FALSE;
+--- 4201,4213 ----
+ }
+ mode = curbuf->b_visual.vi_mode;
+ }
+! lnum = rex.lnum + rex.reg_firstlnum;
+ if (lnum < top.lnum || lnum > bot.lnum)
+ return FALSE;
+
+ if (mode == 'v')
+ {
+! col = (colnr_T)(rex.input - rex.line);
+ if ((lnum == top.lnum && col < top.col)
+ || (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e')))
+ return FALSE;
+***************
+*** 4220,4233 ****
+ end = end2;
+ if (top.col == MAXCOL || bot.col == MAXCOL)
+ end = MAXCOL;
+! cols = win_linetabsize(wp, regline, (colnr_T)(reginput - regline));
+ if (cols < start || cols > end - (*p_sel == 'e'))
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+! #define ADVANCE_REGINPUT() MB_PTR_ADV(reginput)
+
+ /*
+ * The arguments from BRACE_LIMITS are stored here. They are actually local
+--- 4222,4235 ----
+ end = end2;
+ if (top.col == MAXCOL || bot.col == MAXCOL)
+ end = MAXCOL;
+! cols = win_linetabsize(wp, rex.line, (colnr_T)(rex.input - rex.line));
+ if (cols < start || cols > end - (*p_sel == 'e'))
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+! #define ADVANCE_REGINPUT() MB_PTR_ADV(rex.input)
+
+ /*
+ * The arguments from BRACE_LIMITS are stored here. They are actually local
+***************
+*** 4247,4255 ****
+ * (that don't need to know whether the rest of the match failed) by a nested
+ * loop.
+ *
+! * Returns TRUE when there is a match. Leaves reginput and reglnum just after
+ * the last matched character.
+! * Returns FALSE when there is no match. Leaves reginput and reglnum in an
+ * undefined state!
+ */
+ static int
+--- 4249,4257 ----
+ * (that don't need to know whether the rest of the match failed) by a nested
+ * loop.
+ *
+! * Returns TRUE when there is a match. Leaves rex.input and rex.lnum just after
+ * the last matched character.
+! * Returns FALSE when there is no match. Leaves rex.input and rex.lnum in an
+ * undefined state!
+ */
+ static int
+***************
+*** 4349,4359 ****
+ op = OP(scan);
+ /* Check for character class with NL added. */
+ if (!rex.reg_line_lbr && WITH_NL(op) && REG_MULTI
+! && *reginput == NUL && reglnum <= rex.reg_maxline)
+ {
+ reg_nextline();
+ }
+! else if (rex.reg_line_lbr && WITH_NL(op) && *reginput == '\n')
+ {
+ ADVANCE_REGINPUT();
+ }
+--- 4351,4361 ----
+ op = OP(scan);
+ /* Check for character class with NL added. */
+ if (!rex.reg_line_lbr && WITH_NL(op) && REG_MULTI
+! && *rex.input == NUL && rex.lnum <= rex.reg_maxline)
+ {
+ reg_nextline();
+ }
+! else if (rex.reg_line_lbr && WITH_NL(op) && *rex.input == '\n')
+ {
+ ADVANCE_REGINPUT();
+ }
+***************
+*** 4363,4376 ****
+ op -= ADD_NL;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! c = (*mb_ptr2char)(reginput);
+ else
+ #endif
+! c = *reginput;
+ switch (op)
+ {
+ case BOL:
+! if (reginput != regline)
+ status = RA_NOMATCH;
+ break;
+
+--- 4365,4378 ----
+ op -= ADD_NL;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! c = (*mb_ptr2char)(rex.input);
+ else
+ #endif
+! c = *rex.input;
+ switch (op)
+ {
+ case BOL:
+! if (rex.input != rex.line)
+ status = RA_NOMATCH;
+ break;
+
+***************
+*** 4383,4395 ****
+ /* We're not at the beginning of the file when below the first
+ * line where we started, not at the start of the line or we
+ * didn't start at the first line of the buffer. */
+! if (reglnum != 0 || reginput != regline
+ || (REG_MULTI && rex.reg_firstlnum > 1))
+ status = RA_NOMATCH;
+ break;
+
+ case RE_EOF:
+! if (reglnum != rex.reg_maxline || c != NUL)
+ status = RA_NOMATCH;
+ break;
+
+--- 4385,4397 ----
+ /* We're not at the beginning of the file when below the first
+ * line where we started, not at the start of the line or we
+ * didn't start at the first line of the buffer. */
+! if (rex.lnum != 0 || rex.input != rex.line
+ || (REG_MULTI && rex.reg_firstlnum > 1))
+ status = RA_NOMATCH;
+ break;
+
+ case RE_EOF:
+! if (rex.lnum != rex.reg_maxline || c != NUL)
+ status = RA_NOMATCH;
+ break;
+
+***************
+*** 4397,4405 ****
+ /* Check if the buffer is in a window and compare the
+ * rex.reg_win->w_cursor position to the match position. */
+ if (rex.reg_win == NULL
+! || (reglnum + rex.reg_firstlnum
+ != rex.reg_win->w_cursor.lnum)
+! || ((colnr_T)(reginput - regline)
+ != rex.reg_win->w_cursor.col))
+ status = RA_NOMATCH;
+ break;
+--- 4399,4407 ----
+ /* Check if the buffer is in a window and compare the
+ * rex.reg_win->w_cursor position to the match position. */
+ if (rex.reg_win == NULL
+! || (rex.lnum + rex.reg_firstlnum
+ != rex.reg_win->w_cursor.lnum)
+! || ((colnr_T)(rex.input - rex.line)
+ != rex.reg_win->w_cursor.col))
+ status = RA_NOMATCH;
+ break;
+***************
+*** 4414,4426 ****
+ pos = getmark_buf(rex.reg_buf, mark, FALSE);
+ if (pos == NULL /* mark doesn't exist */
+ || pos->lnum <= 0 /* mark isn't set in reg_buf */
+! || (pos->lnum == reglnum + rex.reg_firstlnum
+! ? (pos->col == (colnr_T)(reginput - regline)
+ ? (cmp == '<' || cmp == '>')
+! : (pos->col < (colnr_T)(reginput - regline)
+ ? cmp != '>'
+ : cmp != '<'))
+! : (pos->lnum < reglnum + rex.reg_firstlnum
+ ? cmp != '>'
+ : cmp != '<')))
+ status = RA_NOMATCH;
+--- 4416,4428 ----
+ pos = getmark_buf(rex.reg_buf, mark, FALSE);
+ if (pos == NULL /* mark doesn't exist */
+ || pos->lnum <= 0 /* mark isn't set in reg_buf */
+! || (pos->lnum == rex.lnum + rex.reg_firstlnum
+! ? (pos->col == (colnr_T)(rex.input - rex.line)
+ ? (cmp == '<' || cmp == '>')
+! : (pos->col < (colnr_T)(rex.input - rex.line)
+ ? cmp != '>'
+ : cmp != '<'))
+! : (pos->lnum < rex.lnum + rex.reg_firstlnum
+ ? cmp != '>'
+ : cmp != '<')))
+ status = RA_NOMATCH;
+***************
+*** 4433,4456 ****
+ break;
+
+ case RE_LNUM:
+! if (!REG_MULTI || !re_num_cmp((long_u)(reglnum + rex.reg_firstlnum),
+ scan))
+ status = RA_NOMATCH;
+ break;
+
+ case RE_COL:
+! if (!re_num_cmp((long_u)(reginput - regline) + 1, scan))
+ status = RA_NOMATCH;
+ break;
+
+ case RE_VCOL:
+ if (!re_num_cmp((long_u)win_linetabsize(
+ rex.reg_win == NULL ? curwin : rex.reg_win,
+! regline, (colnr_T)(reginput - regline)) + 1, scan))
+ status = RA_NOMATCH;
+ break;
+
+! case BOW: /* \<word; reginput points to w */
+ if (c == NUL) /* Can't match at end of line */
+ status = RA_NOMATCH;
+ #ifdef FEAT_MBYTE
+--- 4435,4458 ----
+ break;
+
+ case RE_LNUM:
+! if (!REG_MULTI || !re_num_cmp((long_u)(rex.lnum + rex.reg_firstlnum),
+ scan))
+ status = RA_NOMATCH;
+ break;
+
+ case RE_COL:
+! if (!re_num_cmp((long_u)(rex.input - rex.line) + 1, scan))
+ status = RA_NOMATCH;
+ break;
+
+ case RE_VCOL:
+ if (!re_num_cmp((long_u)win_linetabsize(
+ rex.reg_win == NULL ? curwin : rex.reg_win,
+! rex.line, (colnr_T)(rex.input - rex.line)) + 1, scan))
+ status = RA_NOMATCH;
+ break;
+
+! case BOW: /* \<word; rex.input points to w */
+ if (c == NUL) /* Can't match at end of line */
+ status = RA_NOMATCH;
+ #ifdef FEAT_MBYTE
+***************
+*** 4459,4465 ****
+ int this_class;
+
+ /* Get class of current and previous char (if it exists). */
+! this_class = mb_get_class_buf(reginput, rex.reg_buf);
+ if (this_class <= 1)
+ status = RA_NOMATCH; /* not on a word at all */
+ else if (reg_prev_class() == this_class)
+--- 4461,4467 ----
+ int this_class;
+
+ /* Get class of current and previous char (if it exists). */
+! this_class = mb_get_class_buf(rex.input, rex.reg_buf);
+ if (this_class <= 1)
+ status = RA_NOMATCH; /* not on a word at all */
+ else if (reg_prev_class() == this_class)
+***************
+*** 4468,4481 ****
+ #endif
+ else
+ {
+! if (!vim_iswordc_buf(c, rex.reg_buf) || (reginput > regline
+! && vim_iswordc_buf(reginput[-1], rex.reg_buf)))
+ status = RA_NOMATCH;
+ }
+ break;
+
+! case EOW: /* word\>; reginput points after d */
+! if (reginput == regline) /* Can't match at start of line */
+ status = RA_NOMATCH;
+ #ifdef FEAT_MBYTE
+ else if (has_mbyte)
+--- 4470,4483 ----
+ #endif
+ else
+ {
+! if (!vim_iswordc_buf(c, rex.reg_buf) || (rex.input > rex.line
+! && vim_iswordc_buf(rex.input[-1], rex.reg_buf)))
+ status = RA_NOMATCH;
+ }
+ break;
+
+! case EOW: /* word\>; rex.input points after d */
+! if (rex.input == rex.line) /* Can't match at start of line */
+ status = RA_NOMATCH;
+ #ifdef FEAT_MBYTE
+ else if (has_mbyte)
+***************
+*** 4483,4489 ****
+ int this_class, prev_class;
+
+ /* Get class of current and previous char (if it exists). */
+! this_class = mb_get_class_buf(reginput, rex.reg_buf);
+ prev_class = reg_prev_class();
+ if (this_class == prev_class
+ || prev_class == 0 || prev_class == 1)
+--- 4485,4491 ----
+ int this_class, prev_class;
+
+ /* Get class of current and previous char (if it exists). */
+! this_class = mb_get_class_buf(rex.input, rex.reg_buf);
+ prev_class = reg_prev_class();
+ if (this_class == prev_class
+ || prev_class == 0 || prev_class == 1)
+***************
+*** 4492,4499 ****
+ #endif
+ else
+ {
+! if (!vim_iswordc_buf(reginput[-1], rex.reg_buf)
+! || (reginput[0] != NUL
+ && vim_iswordc_buf(c, rex.reg_buf)))
+ status = RA_NOMATCH;
+ }
+--- 4494,4501 ----
+ #endif
+ else
+ {
+! if (!vim_iswordc_buf(rex.input[-1], rex.reg_buf)
+! || (rex.input[0] != NUL
+ && vim_iswordc_buf(c, rex.reg_buf)))
+ status = RA_NOMATCH;
+ }
+***************
+*** 4515,4536 ****
+ break;
+
+ case SIDENT:
+! if (VIM_ISDIGIT(*reginput) || !vim_isIDc(c))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+ break;
+
+ case KWORD:
+! if (!vim_iswordp_buf(reginput, rex.reg_buf))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+ break;
+
+ case SKWORD:
+! if (VIM_ISDIGIT(*reginput)
+! || !vim_iswordp_buf(reginput, rex.reg_buf))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+--- 4517,4538 ----
+ break;
+
+ case SIDENT:
+! if (VIM_ISDIGIT(*rex.input) || !vim_isIDc(c))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+ break;
+
+ case KWORD:
+! if (!vim_iswordp_buf(rex.input, rex.reg_buf))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+ break;
+
+ case SKWORD:
+! if (VIM_ISDIGIT(*rex.input)
+! || !vim_iswordp_buf(rex.input, rex.reg_buf))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+***************
+*** 4544,4564 ****
+ break;
+
+ case SFNAME:
+! if (VIM_ISDIGIT(*reginput) || !vim_isfilec(c))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+ break;
+
+ case PRINT:
+! if (!vim_isprintc(PTR2CHAR(reginput)))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+ break;
+
+ case SPRINT:
+! if (VIM_ISDIGIT(*reginput) || !vim_isprintc(PTR2CHAR(reginput)))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+--- 4546,4566 ----
+ break;
+
+ case SFNAME:
+! if (VIM_ISDIGIT(*rex.input) || !vim_isfilec(c))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+ break;
+
+ case PRINT:
+! if (!vim_isprintc(PTR2CHAR(rex.input)))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+ break;
+
+ case SPRINT:
+! if (VIM_ISDIGIT(*rex.input) || !vim_isprintc(PTR2CHAR(rex.input)))
+ status = RA_NOMATCH;
+ else
+ ADVANCE_REGINPUT();
+***************
+*** 4697,4708 ****
+
+ opnd = OPERAND(scan);
+ /* Inline the first byte, for speed. */
+! if (*opnd != *reginput
+ && (!rex.reg_ic || (
+ #ifdef FEAT_MBYTE
+ !enc_utf8 &&
+ #endif
+! MB_TOLOWER(*opnd) != MB_TOLOWER(*reginput))))
+ status = RA_NOMATCH;
+ else if (*opnd == NUL)
+ {
+--- 4699,4710 ----
+
+ opnd = OPERAND(scan);
+ /* Inline the first byte, for speed. */
+! if (*opnd != *rex.input
+ && (!rex.reg_ic || (
+ #ifdef FEAT_MBYTE
+ !enc_utf8 &&
+ #endif
+! MB_TOLOWER(*opnd) != MB_TOLOWER(*rex.input))))
+ status = RA_NOMATCH;
+ else if (*opnd == NUL)
+ {
+***************
+*** 4723,4729 ****
+ {
+ /* Need to match first byte again for multi-byte. */
+ len = (int)STRLEN(opnd);
+! if (cstrncmp(opnd, reginput, &len) != 0)
+ status = RA_NOMATCH;
+ }
+ #ifdef FEAT_MBYTE
+--- 4725,4731 ----
+ {
+ /* Need to match first byte again for multi-byte. */
+ len = (int)STRLEN(opnd);
+! if (cstrncmp(opnd, rex.input, &len) != 0)
+ status = RA_NOMATCH;
+ }
+ #ifdef FEAT_MBYTE
+***************
+*** 4731,4737 ****
+ * follows (skips over all composing chars). */
+ if (status != RA_NOMATCH
+ && enc_utf8
+! && UTF_COMPOSINGLIKE(reginput, reginput + len)
+ && !rex.reg_icombine
+ && OP(next) != RE_COMPOSING)
+ {
+--- 4733,4739 ----
+ * follows (skips over all composing chars). */
+ if (status != RA_NOMATCH
+ && enc_utf8
+! && UTF_COMPOSINGLIKE(rex.input, rex.input + len)
+ && !rex.reg_icombine
+ && OP(next) != RE_COMPOSING)
+ {
+***************
+*** 4742,4748 ****
+ }
+ #endif
+ if (status != RA_NOMATCH)
+! reginput += len;
+ }
+ }
+ break;
+--- 4744,4750 ----
+ }
+ #endif
+ if (status != RA_NOMATCH)
+! rex.input += len;
+ }
+ }
+ break;
+***************
+*** 4780,4789 ****
+ /* When only a composing char is given match at any
+ * position where that composing char appears. */
+ status = RA_NOMATCH;
+! for (i = 0; reginput[i] != NUL;
+! i += utf_ptr2len(reginput + i))
+ {
+! inpc = utf_ptr2char(reginput + i);
+ if (!utf_iscomposing(inpc))
+ {
+ if (i > 0)
+--- 4782,4791 ----
+ /* When only a composing char is given match at any
+ * position where that composing char appears. */
+ status = RA_NOMATCH;
+! for (i = 0; rex.input[i] != NUL;
+! i += utf_ptr2len(rex.input + i))
+ {
+! inpc = utf_ptr2char(rex.input + i);
+ if (!utf_iscomposing(inpc))
+ {
+ if (i > 0)
+***************
+*** 4792,4798 ****
+ else if (opndc == inpc)
+ {
+ /* Include all following composing chars. */
+! len = i + utfc_ptr2len(reginput + i);
+ status = RA_MATCH;
+ break;
+ }
+--- 4794,4800 ----
+ else if (opndc == inpc)
+ {
+ /* Include all following composing chars. */
+! len = i + utfc_ptr2len(rex.input + i);
+ status = RA_MATCH;
+ break;
+ }
+***************
+*** 4800,4811 ****
+ }
+ else
+ for (i = 0; i < len; ++i)
+! if (opnd[i] != reginput[i])
+ {
+ status = RA_NOMATCH;
+ break;
+ }
+! reginput += len;
+ }
+ else
+ status = RA_NOMATCH;
+--- 4802,4813 ----
+ }
+ else
+ for (i = 0; i < len; ++i)
+! if (opnd[i] != rex.input[i])
+ {
+ status = RA_NOMATCH;
+ break;
+ }
+! rex.input += len;
+ }
+ else
+ status = RA_NOMATCH;
+***************
+*** 4816,4823 ****
+ if (enc_utf8)
+ {
+ /* Skip composing characters. */
+! while (utf_iscomposing(utf_ptr2char(reginput)))
+! MB_CPTR_ADV(reginput);
+ }
+ #endif
+ break;
+--- 4818,4825 ----
+ if (enc_utf8)
+ {
+ /* Skip composing characters. */
+! while (utf_iscomposing(utf_ptr2char(rex.input)))
+! MB_CPTR_ADV(rex.input);
+ }
+ #endif
+ break;
+***************
+*** 5003,5009 ****
+ /* Compare current input with back-ref in the same
+ * line. */
+ len = (int)(rex.reg_endp[no] - rex.reg_startp[no]);
+! if (cstrncmp(rex.reg_startp[no], reginput, &len) != 0)
+ status = RA_NOMATCH;
+ }
+ }
+--- 5005,5011 ----
+ /* Compare current input with back-ref in the same
+ * line. */
+ len = (int)(rex.reg_endp[no] - rex.reg_startp[no]);
+! if (cstrncmp(rex.reg_startp[no], rex.input, &len) != 0)
+ status = RA_NOMATCH;
+ }
+ }
+***************
+*** 5017,5030 ****
+ }
+ else
+ {
+! if (rex.reg_startpos[no].lnum == reglnum
+! && rex.reg_endpos[no].lnum == reglnum)
+ {
+ /* Compare back-ref within the current line. */
+ len = rex.reg_endpos[no].col
+ - rex.reg_startpos[no].col;
+! if (cstrncmp(regline + rex.reg_startpos[no].col,
+! reginput, &len) != 0)
+ status = RA_NOMATCH;
+ }
+ else
+--- 5019,5032 ----
+ }
+ else
+ {
+! if (rex.reg_startpos[no].lnum == rex.lnum
+! && rex.reg_endpos[no].lnum == rex.lnum)
+ {
+ /* Compare back-ref within the current line. */
+ len = rex.reg_endpos[no].col
+ - rex.reg_startpos[no].col;
+! if (cstrncmp(rex.line + rex.reg_startpos[no].col,
+! rex.input, &len) != 0)
+ status = RA_NOMATCH;
+ }
+ else
+***************
+*** 5045,5051 ****
+ }
+
+ /* Matched the backref, skip over it. */
+! reginput += len;
+ }
+ break;
+
+--- 5047,5053 ----
+ }
+
+ /* Matched the backref, skip over it. */
+! rex.input += len;
+ }
+ break;
+
+***************
+*** 5069,5078 ****
+ {
+ len = (int)STRLEN(re_extmatch_in->matches[no]);
+ if (cstrncmp(re_extmatch_in->matches[no],
+! reginput, &len) != 0)
+ status = RA_NOMATCH;
+ else
+! reginput += len;
+ }
+ else
+ {
+--- 5071,5080 ----
+ {
+ len = (int)STRLEN(re_extmatch_in->matches[no]);
+ if (cstrncmp(re_extmatch_in->matches[no],
+! rex.input, &len) != 0)
+ status = RA_NOMATCH;
+ else
+! rex.input += len;
+ }
+ else
+ {
+***************
+*** 5319,5334 ****
+ case BHPOS:
+ if (REG_MULTI)
+ {
+! if (behind_pos.rs_u.pos.col != (colnr_T)(reginput - regline)
+! || behind_pos.rs_u.pos.lnum != reglnum)
+ status = RA_NOMATCH;
+ }
+! else if (behind_pos.rs_u.ptr != reginput)
+ status = RA_NOMATCH;
+ break;
+
+ case NEWL:
+! if ((c != NUL || !REG_MULTI || reglnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ && (c != '\n' || !rex.reg_line_lbr))
+ status = RA_NOMATCH;
+--- 5321,5336 ----
+ case BHPOS:
+ if (REG_MULTI)
+ {
+! if (behind_pos.rs_u.pos.col != (colnr_T)(rex.input - rex.line)
+! || behind_pos.rs_u.pos.lnum != rex.lnum)
+ status = RA_NOMATCH;
+ }
+! else if (behind_pos.rs_u.ptr != rex.input)
+ status = RA_NOMATCH;
+ break;
+
+ case NEWL:
+! if ((c != NUL || !REG_MULTI || rex.lnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ && (c != '\n' || !rex.reg_line_lbr))
+ status = RA_NOMATCH;
+***************
+*** 5562,5568 ****
+ if (limit > 0
+ && ((rp->rs_un.regsave.rs_u.pos.lnum
+ < behind_pos.rs_u.pos.lnum
+! ? (colnr_T)STRLEN(regline)
+ : behind_pos.rs_u.pos.col)
+ - rp->rs_un.regsave.rs_u.pos.col >= limit))
+ no = FAIL;
+--- 5564,5570 ----
+ if (limit > 0
+ && ((rp->rs_un.regsave.rs_u.pos.lnum
+ < behind_pos.rs_u.pos.lnum
+! ? (colnr_T)STRLEN(rex.line)
+ : behind_pos.rs_u.pos.col)
+ - rp->rs_un.regsave.rs_u.pos.col >= limit))
+ no = FAIL;
+***************
+*** 5578,5584 ****
+ {
+ reg_restore(&rp->rs_un.regsave, &backpos);
+ rp->rs_un.regsave.rs_u.pos.col =
+! (colnr_T)STRLEN(regline);
+ }
+ }
+ else
+--- 5580,5586 ----
+ {
+ reg_restore(&rp->rs_un.regsave, &backpos);
+ rp->rs_un.regsave.rs_u.pos.col =
+! (colnr_T)STRLEN(rex.line);
+ }
+ }
+ else
+***************
+*** 5600,5610 ****
+ }
+ else
+ {
+! if (rp->rs_un.regsave.rs_u.ptr == regline)
+ no = FAIL;
+ else
+ {
+! MB_PTR_BACK(regline, rp->rs_un.regsave.rs_u.ptr);
+ if (limit > 0 && (long)(behind_pos.rs_u.ptr
+ - rp->rs_un.regsave.rs_u.ptr) > limit)
+ no = FAIL;
+--- 5602,5612 ----
+ }
+ else
+ {
+! if (rp->rs_un.regsave.rs_u.ptr == rex.line)
+ no = FAIL;
+ else
+ {
+! MB_PTR_BACK(rex.line, rp->rs_un.regsave.rs_u.ptr);
+ if (limit > 0 && (long)(behind_pos.rs_u.ptr
+ - rp->rs_un.regsave.rs_u.ptr) > limit)
+ no = FAIL;
+***************
+*** 5678,5697 ****
+ * didn't match -- back up one char. */
+ if (--rst->count < rst->minval)
+ break;
+! if (reginput == regline)
+ {
+ /* backup to last char of previous line */
+! --reglnum;
+! regline = reg_getline(reglnum);
+ /* Just in case regrepeat() didn't count
+ * right. */
+! if (regline == NULL)
+ break;
+! reginput = regline + STRLEN(regline);
+ fast_breakcheck();
+ }
+ else
+! MB_PTR_BACK(regline, reginput);
+ }
+ else
+ {
+--- 5680,5699 ----
+ * didn't match -- back up one char. */
+ if (--rst->count < rst->minval)
+ break;
+! if (rex.input == rex.line)
+ {
+ /* backup to last char of previous line */
+! --rex.lnum;
+! rex.line = reg_getline(rex.lnum);
+ /* Just in case regrepeat() didn't count
+ * right. */
+! if (rex.line == NULL)
+ break;
+! rex.input = rex.line + STRLEN(rex.line);
+ fast_breakcheck();
+ }
+ else
+! MB_PTR_BACK(rex.line, rex.input);
+ }
+ else
+ {
+***************
+*** 5711,5718 ****
+ status = RA_NOMATCH;
+
+ /* If it could match, try it. */
+! if (rst->nextb == NUL || *reginput == rst->nextb
+! || *reginput == rst->nextb_ic)
+ {
+ reg_save(&rp->rs_un.regsave, &backpos);
+ scan = regnext(rp->rs_scan);
+--- 5713,5720 ----
+ status = RA_NOMATCH;
+
+ /* If it could match, try it. */
+! if (rst->nextb == NUL || *rex.input == rst->nextb
+! || *rex.input == rst->nextb_ic)
+ {
+ reg_save(&rp->rs_un.regsave, &backpos);
+ scan = regnext(rp->rs_scan);
+***************
+*** 5807,5813 ****
+
+ /*
+ * regrepeat - repeatedly match something simple, return how many.
+! * Advances reginput (and reglnum) to just after the matched chars.
+ */
+ static int
+ regrepeat(
+--- 5809,5815 ----
+
+ /*
+ * regrepeat - repeatedly match something simple, return how many.
+! * Advances rex.input (and rex.lnum) to just after the matched chars.
+ */
+ static int
+ regrepeat(
+***************
+*** 5820,5826 ****
+ int mask;
+ int testval = 0;
+
+! scan = reginput; /* Make local copy of reginput for speed. */
+ opnd = OPERAND(p);
+ switch (OP(p))
+ {
+--- 5822,5828 ----
+ int mask;
+ int testval = 0;
+
+! scan = rex.input; /* Make local copy of rex.input for speed. */
+ opnd = OPERAND(p);
+ switch (OP(p))
+ {
+***************
+*** 5835,5846 ****
+ ++count;
+ MB_PTR_ADV(scan);
+ }
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline
+ || rex.reg_line_lbr || count == maxcount)
+ break;
+ ++count; /* count the line-break */
+ reg_nextline();
+! scan = reginput;
+ if (got_int)
+ break;
+ }
+--- 5837,5848 ----
+ ++count;
+ MB_PTR_ADV(scan);
+ }
+! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline
+ || rex.reg_line_lbr || count == maxcount)
+ break;
+ ++count; /* count the line-break */
+ reg_nextline();
+! scan = rex.input;
+ if (got_int)
+ break;
+ }
+***************
+*** 5860,5870 ****
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = reginput;
+ if (got_int)
+ break;
+ }
+--- 5862,5872 ----
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = rex.input;
+ if (got_int)
+ break;
+ }
+***************
+*** 5891,5901 ****
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = reginput;
+ if (got_int)
+ break;
+ }
+--- 5893,5903 ----
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = rex.input;
+ if (got_int)
+ break;
+ }
+***************
+*** 5921,5931 ****
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = reginput;
+ if (got_int)
+ break;
+ }
+--- 5923,5933 ----
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = rex.input;
+ if (got_int)
+ break;
+ }
+***************
+*** 5947,5957 ****
+ {
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = reginput;
+ if (got_int)
+ break;
+ }
+--- 5949,5959 ----
+ {
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = rex.input;
+ if (got_int)
+ break;
+ }
+***************
+*** 5979,5989 ****
+ #endif
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = reginput;
+ if (got_int)
+ break;
+ }
+--- 5981,5991 ----
+ #endif
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = rex.input;
+ if (got_int)
+ break;
+ }
+***************
+*** 6144,6154 ****
+ #endif
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = reginput;
+ if (got_int)
+ break;
+ }
+--- 6146,6156 ----
+ #endif
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline
+ || rex.reg_line_lbr)
+ break;
+ reg_nextline();
+! scan = rex.input;
+ if (got_int)
+ break;
+ }
+***************
+*** 6174,6180 ****
+
+ case NEWL:
+ while (count < maxcount
+! && ((*scan == NUL && reglnum <= rex.reg_maxline
+ && !rex.reg_line_lbr && REG_MULTI)
+ || (*scan == '\n' && rex.reg_line_lbr)))
+ {
+--- 6176,6182 ----
+
+ case NEWL:
+ while (count < maxcount
+! && ((*scan == NUL && rex.lnum <= rex.reg_maxline
+ && !rex.reg_line_lbr && REG_MULTI)
+ || (*scan == '\n' && rex.reg_line_lbr)))
+ {
+***************
+*** 6183,6189 ****
+ ADVANCE_REGINPUT();
+ else
+ reg_nextline();
+! scan = reginput;
+ if (got_int)
+ break;
+ }
+--- 6185,6191 ----
+ ADVANCE_REGINPUT();
+ else
+ reg_nextline();
+! scan = rex.input;
+ if (got_int)
+ break;
+ }
+***************
+*** 6197,6203 ****
+ break;
+ }
+
+! reginput = scan;
+
+ return (int)count;
+ }
+--- 6199,6205 ----
+ break;
+ }
+
+! rex.input = scan;
+
+ return (int)count;
+ }
+***************
+*** 6255,6261 ****
+ static void
+ cleanup_subexpr(void)
+ {
+! if (need_clear_subexpr)
+ {
+ if (REG_MULTI)
+ {
+--- 6257,6263 ----
+ static void
+ cleanup_subexpr(void)
+ {
+! if (rex.need_clear_subexpr)
+ {
+ if (REG_MULTI)
+ {
+***************
+*** 6268,6274 ****
+ vim_memset(rex.reg_startp, 0, sizeof(char_u *) * NSUBEXP);
+ vim_memset(rex.reg_endp, 0, sizeof(char_u *) * NSUBEXP);
+ }
+! need_clear_subexpr = FALSE;
+ }
+ }
+
+--- 6270,6276 ----
+ vim_memset(rex.reg_startp, 0, sizeof(char_u *) * NSUBEXP);
+ vim_memset(rex.reg_endp, 0, sizeof(char_u *) * NSUBEXP);
+ }
+! rex.need_clear_subexpr = FALSE;
+ }
+ }
+
+***************
+*** 6276,6282 ****
+ static void
+ cleanup_zsubexpr(void)
+ {
+! if (need_clear_zsubexpr)
+ {
+ if (REG_MULTI)
+ {
+--- 6278,6284 ----
+ static void
+ cleanup_zsubexpr(void)
+ {
+! if (rex.need_clear_zsubexpr)
+ {
+ if (REG_MULTI)
+ {
+***************
+*** 6289,6295 ****
+ vim_memset(reg_startzp, 0, sizeof(char_u *) * NSUBEXP);
+ vim_memset(reg_endzp, 0, sizeof(char_u *) * NSUBEXP);
+ }
+! need_clear_zsubexpr = FALSE;
+ }
+ }
+ #endif
+--- 6291,6297 ----
+ vim_memset(reg_startzp, 0, sizeof(char_u *) * NSUBEXP);
+ vim_memset(reg_endzp, 0, sizeof(char_u *) * NSUBEXP);
+ }
+! rex.need_clear_zsubexpr = FALSE;
+ }
+ }
+ #endif
+***************
+*** 6303,6312 ****
+ {
+ int i;
+
+! /* When "need_clear_subexpr" is set we don't need to save the values, only
+ * remember that this flag needs to be set again when restoring. */
+! bp->save_need_clear_subexpr = need_clear_subexpr;
+! if (!need_clear_subexpr)
+ {
+ for (i = 0; i < NSUBEXP; ++i)
+ {
+--- 6305,6314 ----
+ {
+ int i;
+
+! /* When "rex.need_clear_subexpr" is set we don't need to save the values, only
+ * remember that this flag needs to be set again when restoring. */
+! bp->save_need_clear_subexpr = rex.need_clear_subexpr;
+! if (!rex.need_clear_subexpr)
+ {
+ for (i = 0; i < NSUBEXP; ++i)
+ {
+***************
+*** 6333,6340 ****
+ int i;
+
+ /* Only need to restore saved values when they are not to be cleared. */
+! need_clear_subexpr = bp->save_need_clear_subexpr;
+! if (!need_clear_subexpr)
+ {
+ for (i = 0; i < NSUBEXP; ++i)
+ {
+--- 6335,6342 ----
+ int i;
+
+ /* Only need to restore saved values when they are not to be cleared. */
+! rex.need_clear_subexpr = bp->save_need_clear_subexpr;
+! if (!rex.need_clear_subexpr)
+ {
+ for (i = 0; i < NSUBEXP; ++i)
+ {
+***************
+*** 6353,6365 ****
+ }
+
+ /*
+! * Advance reglnum, regline and reginput to the next line.
+ */
+ static void
+ reg_nextline(void)
+ {
+! regline = reg_getline(++reglnum);
+! reginput = regline;
+ fast_breakcheck();
+ }
+
+--- 6355,6367 ----
+ }
+
+ /*
+! * Advance rex.lnum, rex.line and rex.input to the next line.
+ */
+ static void
+ reg_nextline(void)
+ {
+! rex.line = reg_getline(++rex.lnum);
+! rex.input = rex.line;
+ fast_breakcheck();
+ }
+
+***************
+*** 6371,6381 ****
+ {
+ if (REG_MULTI)
+ {
+! save->rs_u.pos.col = (colnr_T)(reginput - regline);
+! save->rs_u.pos.lnum = reglnum;
+ }
+ else
+! save->rs_u.ptr = reginput;
+ save->rs_len = gap->ga_len;
+ }
+
+--- 6373,6383 ----
+ {
+ if (REG_MULTI)
+ {
+! save->rs_u.pos.col = (colnr_T)(rex.input - rex.line);
+! save->rs_u.pos.lnum = rex.lnum;
+ }
+ else
+! save->rs_u.ptr = rex.input;
+ save->rs_len = gap->ga_len;
+ }
+
+***************
+*** 6387,6403 ****
+ {
+ if (REG_MULTI)
+ {
+! if (reglnum != save->rs_u.pos.lnum)
+ {
+ /* only call reg_getline() when the line number changed to save
+ * a bit of time */
+! reglnum = save->rs_u.pos.lnum;
+! regline = reg_getline(reglnum);
+ }
+! reginput = regline + save->rs_u.pos.col;
+ }
+ else
+! reginput = save->rs_u.ptr;
+ gap->ga_len = save->rs_len;
+ }
+
+--- 6389,6405 ----
+ {
+ if (REG_MULTI)
+ {
+! if (rex.lnum != save->rs_u.pos.lnum)
+ {
+ /* only call reg_getline() when the line number changed to save
+ * a bit of time */
+! rex.lnum = save->rs_u.pos.lnum;
+! rex.line = reg_getline(rex.lnum);
+ }
+! rex.input = rex.line + save->rs_u.pos.col;
+ }
+ else
+! rex.input = save->rs_u.ptr;
+ gap->ga_len = save->rs_len;
+ }
+
+***************
+*** 6408,6416 ****
+ reg_save_equal(regsave_T *save)
+ {
+ if (REG_MULTI)
+! return reglnum == save->rs_u.pos.lnum
+! && reginput == regline + save->rs_u.pos.col;
+! return reginput == save->rs_u.ptr;
+ }
+
+ /*
+--- 6410,6418 ----
+ reg_save_equal(regsave_T *save)
+ {
+ if (REG_MULTI)
+! return rex.lnum == save->rs_u.pos.lnum
+! && rex.input == rex.line + save->rs_u.pos.col;
+! return rex.input == save->rs_u.ptr;
+ }
+
+ /*
+***************
+*** 6424,6438 ****
+ save_se_multi(save_se_T *savep, lpos_T *posp)
+ {
+ savep->se_u.pos = *posp;
+! posp->lnum = reglnum;
+! posp->col = (colnr_T)(reginput - regline);
+ }
+
+ static void
+ save_se_one(save_se_T *savep, char_u **pp)
+ {
+ savep->se_u.ptr = *pp;
+! *pp = reginput;
+ }
+
+ /*
+--- 6426,6440 ----
+ save_se_multi(save_se_T *savep, lpos_T *posp)
+ {
+ savep->se_u.pos = *posp;
+! posp->lnum = rex.lnum;
+! posp->col = (colnr_T)(rex.input - rex.line);
+ }
+
+ static void
+ save_se_one(save_se_T *savep, char_u **pp)
+ {
+ savep->se_u.ptr = *pp;
+! *pp = rex.input;
+ }
+
+ /*
+***************
+*** 6475,6483 ****
+ {
+ /* Since getting one line may invalidate the other, need to make copy.
+ * Slow! */
+! if (regline != reg_tofree)
+ {
+! len = (int)STRLEN(regline);
+ if (reg_tofree == NULL || len >= (int)reg_tofreelen)
+ {
+ len += 50; /* get some extra */
+--- 6477,6485 ----
+ {
+ /* Since getting one line may invalidate the other, need to make copy.
+ * Slow! */
+! if (rex.line != reg_tofree)
+ {
+! len = (int)STRLEN(rex.line);
+ if (reg_tofree == NULL || len >= (int)reg_tofreelen)
+ {
+ len += 50; /* get some extra */
+***************
+*** 6487,6495 ****
+ return RA_FAIL; /* out of memory!*/
+ reg_tofreelen = len;
+ }
+! STRCPY(reg_tofree, regline);
+! reginput = reg_tofree + (reginput - regline);
+! regline = reg_tofree;
+ }
+
+ /* Get the line to compare with. */
+--- 6489,6497 ----
+ return RA_FAIL; /* out of memory!*/
+ reg_tofreelen = len;
+ }
+! STRCPY(reg_tofree, rex.line);
+! rex.input = reg_tofree + (rex.input - rex.line);
+! rex.line = reg_tofree;
+ }
+
+ /* Get the line to compare with. */
+***************
+*** 6499,6511 ****
+ else
+ len = (int)STRLEN(p + ccol);
+
+! if (cstrncmp(p + ccol, reginput, &len) != 0)
+ return RA_NOMATCH; /* doesn't match */
+ if (bytelen != NULL)
+ *bytelen += len;
+ if (clnum == end_lnum)
+ break; /* match and at end! */
+! if (reglnum >= rex.reg_maxline)
+ return RA_NOMATCH; /* text too short */
+
+ /* Advance to next line. */
+--- 6501,6513 ----
+ else
+ len = (int)STRLEN(p + ccol);
+
+! if (cstrncmp(p + ccol, rex.input, &len) != 0)
+ return RA_NOMATCH; /* doesn't match */
+ if (bytelen != NULL)
+ *bytelen += len;
+ if (clnum == end_lnum)
+ break; /* match and at end! */
+! if (rex.lnum >= rex.reg_maxline)
+ return RA_NOMATCH; /* text too short */
+
+ /* Advance to next line. */
+***************
+*** 6518,6524 ****
+ return RA_FAIL;
+ }
+
+! /* found a match! Note that regline may now point to a copy of the line,
+ * that should not matter. */
+ return RA_MATCH;
+ }
+--- 6520,6526 ----
+ return RA_FAIL;
+ }
+
+! /* found a match! Note that rex.line may now point to a copy of the line,
+ * that should not matter. */
+ return RA_MATCH;
+ }
+***************
+*** 8144,8151 ****
+--- 8146,8155 ----
+ regexp_engine = AUTOMATIC_ENGINE;
+ }
+ }
++ #ifdef DEBUG
+ bt_regengine.expr = expr;
+ nfa_regengine.expr = expr;
++ #endif
+
+ /*
+ * First try the NFA engine, unless backtracking was requested.
+***************
+*** 8243,8252 ****
+ regexec_T rex_save;
+ int rex_in_use_save = rex_in_use;
+
+ if (rex_in_use)
+! /* Being called recursively, save the state. */
+ rex_save = rex;
+ rex_in_use = TRUE;
+ rex.reg_startp = NULL;
+ rex.reg_endp = NULL;
+ rex.reg_startpos = NULL;
+--- 8247,8265 ----
+ regexec_T rex_save;
+ int rex_in_use_save = rex_in_use;
+
++ // Cannot use the same prog recursively, it contains state.
++ if (rmp->regprog->re_in_use)
++ {
++ EMSG(_(e_recursive));
++ return FALSE;
++ }
++ rmp->regprog->re_in_use = TRUE;
++
+ if (rex_in_use)
+! // Being called recursively, save the state.
+ rex_save = rex;
+ rex_in_use = TRUE;
++
+ rex.reg_startp = NULL;
+ rex.reg_endp = NULL;
+ rex.reg_startpos = NULL;
+***************
+*** 8281,8286 ****
+--- 8294,8300 ----
+ rex_in_use = rex_in_use_save;
+ if (rex_in_use)
+ rex = rex_save;
++ rmp->regprog->re_in_use = FALSE;
+
+ return result > 0;
+ }
+***************
+*** 8353,8358 ****
+--- 8367,8380 ----
+ regexec_T rex_save;
+ int rex_in_use_save = rex_in_use;
+
++ // Cannot use the same prog recursively, it contains state.
++ if (rmp->regprog->re_in_use)
++ {
++ EMSG(_(e_recursive));
++ return FALSE;
++ }
++ rmp->regprog->re_in_use = TRUE;
++
+ if (rex_in_use)
+ /* Being called recursively, save the state. */
+ rex_save = rex;
+***************
+*** 8397,8402 ****
+--- 8419,8425 ----
+ rex_in_use = rex_in_use_save;
+ if (rex_in_use)
+ rex = rex_save;
++ rmp->regprog->re_in_use = FALSE;
+
+ return result <= 0 ? 0 : result;
+ }
+*** ../vim-8.1.0191/src/regexp.h 2017-06-17 17:52:18.000000000 +0200
+--- src/regexp.h 2018-07-17 05:08:49.564483204 +0200
+***************
+*** 50,57 ****
+ {
+ regengine_T *engine;
+ unsigned regflags;
+! unsigned re_engine; /* automatic, backtracking or nfa engine */
+! unsigned re_flags; /* second argument for vim_regcomp() */
+ } regprog_T;
+
+ /*
+--- 50,58 ----
+ {
+ regengine_T *engine;
+ unsigned regflags;
+! unsigned re_engine; // automatic, backtracking or nfa engine
+! unsigned re_flags; // second argument for vim_regcomp()
+! int re_in_use; // prog is being executed
+ } regprog_T;
+
+ /*
+***************
+*** 65,71 ****
+ regengine_T *engine;
+ unsigned regflags;
+ unsigned re_engine;
+! unsigned re_flags; /* second argument for vim_regcomp() */
+
+ int regstart;
+ char_u reganch;
+--- 66,73 ----
+ regengine_T *engine;
+ unsigned regflags;
+ unsigned re_engine;
+! unsigned re_flags;
+! int re_in_use;
+
+ int regstart;
+ char_u reganch;
+***************
+*** 101,107 ****
+ regengine_T *engine;
+ unsigned regflags;
+ unsigned re_engine;
+! unsigned re_flags; /* second argument for vim_regcomp() */
+
+ nfa_state_T *start; /* points into state[] */
+
+--- 103,110 ----
+ regengine_T *engine;
+ unsigned regflags;
+ unsigned re_engine;
+! unsigned re_flags;
+! int re_in_use;
+
+ nfa_state_T *start; /* points into state[] */
+
+*** ../vim-8.1.0191/src/regexp_nfa.c 2018-07-08 19:07:16.159415508 +0200
+--- src/regexp_nfa.c 2018-07-17 05:08:49.568483181 +0200
+***************
+*** 244,284 ****
+ static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
+ static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld");
+
+! /* re_flags passed to nfa_regcomp() */
+! static int nfa_re_flags;
+!
+! /* NFA regexp \ze operator encountered. */
+! static int nfa_has_zend;
+!
+! /* NFA regexp \1 .. \9 encountered. */
+! static int nfa_has_backref;
+!
+! #ifdef FEAT_SYN_HL
+! /* NFA regexp has \z( ), set zsubexpr. */
+! static int nfa_has_zsubexpr;
+! #endif
+!
+! /* Number of sub expressions actually being used during execution. 1 if only
+! * the whole match (subexpr 0) is used. */
+! static int nfa_nsubexpr;
+!
+! static int *post_start; /* holds the postfix form of r.e. */
+ static int *post_end;
+ static int *post_ptr;
+!
+! static int nstate; /* Number of states in the NFA. Also used when
+! * executing. */
+! static int istate; /* Index in the state vector, used in alloc_state() */
+
+ /* If not NULL match must end at this position */
+ static save_se_T *nfa_endp = NULL;
+
+- /* listid is global, so that it increases on recursive calls to
+- * nfa_regmatch(), which means we don't have to clear the lastlist field of
+- * all the states. */
+- static int nfa_listid;
+- static int nfa_alt_listid;
+-
+ /* 0 for first call to nfa_regmatch(), 1 for recursive call. */
+ static int nfa_ll_index = 0;
+
+--- 244,260 ----
+ static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
+ static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld");
+
+! // Variables only used in nfa_regcomp() and descendants.
+! static int nfa_re_flags; // re_flags passed to nfa_regcomp()
+! static int *post_start; // holds the postfix form of r.e.
+ static int *post_end;
+ static int *post_ptr;
+! static int nstate; // Number of states in the NFA.
+! static int istate; // Index in the state vector, used in alloc_state()
+
+ /* If not NULL match must end at this position */
+ static save_se_T *nfa_endp = NULL;
+
+ /* 0 for first call to nfa_regmatch(), 1 for recursive call. */
+ static int nfa_ll_index = 0;
+
+***************
+*** 326,333 ****
+ return FAIL;
+ post_ptr = post_start;
+ post_end = post_start + nstate_max;
+! nfa_has_zend = FALSE;
+! nfa_has_backref = FALSE;
+
+ /* shared with BT engine */
+ regcomp_start(expr, re_flags);
+--- 302,309 ----
+ return FAIL;
+ post_ptr = post_start;
+ post_end = post_start + nstate_max;
+! rex.nfa_has_zend = FALSE;
+! rex.nfa_has_backref = FALSE;
+
+ /* shared with BT engine */
+ regcomp_start(expr, re_flags);
+***************
+*** 1422,1428 ****
+ if (!seen_endbrace(refnum + 1))
+ return FAIL;
+ EMIT(NFA_BACKREF1 + refnum);
+! nfa_has_backref = TRUE;
+ }
+ break;
+
+--- 1398,1404 ----
+ if (!seen_endbrace(refnum + 1))
+ return FAIL;
+ EMIT(NFA_BACKREF1 + refnum);
+! rex.nfa_has_backref = TRUE;
+ }
+ break;
+
+***************
+*** 1437,1443 ****
+ break;
+ case 'e':
+ EMIT(NFA_ZEND);
+! nfa_has_zend = TRUE;
+ if (re_mult_next("\\ze") == FAIL)
+ return FAIL;
+ break;
+--- 1413,1419 ----
+ break;
+ case 'e':
+ EMIT(NFA_ZEND);
+! rex.nfa_has_zend = TRUE;
+ if (re_mult_next("\\ze") == FAIL)
+ return FAIL;
+ break;
+***************
+*** 1455,1461 ****
+ if ((reg_do_extmatch & REX_USE) == 0)
+ EMSG_RET_FAIL(_(e_z1_not_allowed));
+ EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
+! /* No need to set nfa_has_backref, the sub-matches don't
+ * change when \z1 .. \z9 matches or not. */
+ re_has_z = REX_USE;
+ break;
+--- 1431,1437 ----
+ if ((reg_do_extmatch & REX_USE) == 0)
+ EMSG_RET_FAIL(_(e_z1_not_allowed));
+ EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
+! /* No need to set rex.nfa_has_backref, the sub-matches don't
+ * change when \z1 .. \z9 matches or not. */
+ re_has_z = REX_USE;
+ break;
+***************
+*** 2920,2930 ****
+ if (df)
+ {
+ fprintf(df, "Error popping the stack!\n");
+! #ifdef DEBUG
+ fprintf(df, "Current regexp is \"%s\"\n", nfa_regengine.expr);
+! #endif
+ fprintf(df, "Postfix form is: ");
+! #ifdef DEBUG
+ for (p2 = postfix; p2 < end; p2++)
+ {
+ nfa_set_code(*p2);
+--- 2896,2906 ----
+ if (df)
+ {
+ fprintf(df, "Error popping the stack!\n");
+! # ifdef DEBUG
+ fprintf(df, "Current regexp is \"%s\"\n", nfa_regengine.expr);
+! # endif
+ fprintf(df, "Postfix form is: ");
+! # ifdef DEBUG
+ for (p2 = postfix; p2 < end; p2++)
+ {
+ nfa_set_code(*p2);
+***************
+*** 2937,2943 ****
+ nfa_set_code(*p2);
+ fprintf(df, "%s, ", code);
+ }
+! #else
+ for (p2 = postfix; p2 < end; p2++)
+ {
+ fprintf(df, "%d, ", *p2);
+--- 2913,2919 ----
+ nfa_set_code(*p2);
+ fprintf(df, "%s, ", code);
+ }
+! # else
+ for (p2 = postfix; p2 < end; p2++)
+ {
+ fprintf(df, "%d, ", *p2);
+***************
+*** 2947,2953 ****
+ {
+ fprintf(df, "%d, ", *p2);
+ }
+! #endif
+ fprintf(df, "\n--------------------------\n");
+ fclose(df);
+ }
+--- 2923,2929 ----
+ {
+ fprintf(df, "%d, ", *p2);
+ }
+! # endif
+ fprintf(df, "\n--------------------------\n");
+ fclose(df);
+ }
+***************
+*** 3887,3893 ****
+ {
+ log_subexpr(&subs->norm);
+ # ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ log_subexpr(&subs->synt);
+ # endif
+ }
+--- 3863,3869 ----
+ {
+ log_subexpr(&subs->norm);
+ # ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ log_subexpr(&subs->synt);
+ # endif
+ }
+***************
+*** 3927,3933 ****
+ else
+ {
+ sprintf(buf, " PIM col %d", REG_MULTI ? (int)pim->end.pos.col
+! : (int)(pim->end.ptr - reginput));
+ }
+ return buf;
+ }
+--- 3903,3909 ----
+ else
+ {
+ sprintf(buf, " PIM col %d", REG_MULTI ? (int)pim->end.pos.col
+! : (int)(pim->end.ptr - rex.input));
+ }
+ return buf;
+ }
+***************
+*** 3955,3961 ****
+ to->state = from->state;
+ copy_sub(&to->subs.norm, &from->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub(&to->subs.synt, &from->subs.synt);
+ #endif
+ to->end = from->end;
+--- 3931,3937 ----
+ to->state = from->state;
+ copy_sub(&to->subs.norm, &from->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub(&to->subs.synt, &from->subs.synt);
+ #endif
+ to->end = from->end;
+***************
+*** 3967,3975 ****
+ if (REG_MULTI)
+ /* Use 0xff to set lnum to -1 */
+ vim_memset(sub->list.multi, 0xff,
+! sizeof(struct multipos) * nfa_nsubexpr);
+ else
+! vim_memset(sub->list.line, 0, sizeof(struct linepos) * nfa_nsubexpr);
+ sub->in_use = 0;
+ }
+
+--- 3943,3952 ----
+ if (REG_MULTI)
+ /* Use 0xff to set lnum to -1 */
+ vim_memset(sub->list.multi, 0xff,
+! sizeof(struct multipos) * rex.nfa_nsubexpr);
+ else
+! vim_memset(sub->list.line, 0,
+! sizeof(struct linepos) * rex.nfa_nsubexpr);
+ sub->in_use = 0;
+ }
+
+***************
+*** 4022,4028 ****
+ static void
+ copy_ze_off(regsub_T *to, regsub_T *from)
+ {
+! if (nfa_has_zend)
+ {
+ if (REG_MULTI)
+ {
+--- 3999,4005 ----
+ static void
+ copy_ze_off(regsub_T *to, regsub_T *from)
+ {
+! if (rex.nfa_has_zend)
+ {
+ if (REG_MULTI)
+ {
+***************
+*** 4073,4079 ****
+ != sub2->list.multi[i].start_col)
+ return FALSE;
+
+! if (nfa_has_backref)
+ {
+ if (i < sub1->in_use)
+ s1 = sub1->list.multi[i].end_lnum;
+--- 4050,4056 ----
+ != sub2->list.multi[i].start_col)
+ return FALSE;
+
+! if (rex.nfa_has_backref)
+ {
+ if (i < sub1->in_use)
+ s1 = sub1->list.multi[i].end_lnum;
+***************
+*** 4105,4111 ****
+ sp2 = NULL;
+ if (sp1 != sp2)
+ return FALSE;
+! if (nfa_has_backref)
+ {
+ if (i < sub1->in_use)
+ sp1 = sub1->list.line[i].end;
+--- 4082,4088 ----
+ sp2 = NULL;
+ if (sp1 != sp2)
+ return FALSE;
+! if (rex.nfa_has_backref)
+ {
+ if (i < sub1->in_use)
+ sp1 = sub1->list.line[i].end;
+***************
+*** 4139,4145 ****
+ else if (REG_MULTI)
+ col = sub->list.multi[0].start_col;
+ else
+! col = (int)(sub->list.line[0].start - regline);
+ nfa_set_code(state->c);
+ fprintf(log_fd, "> %s state %d to list %d. char %d: %s (start col %d)%s\n",
+ action, abs(state->id), lid, state->c, code, col,
+--- 4116,4122 ----
+ else if (REG_MULTI)
+ col = sub->list.multi[0].start_col;
+ else
+! col = (int)(sub->list.line[0].start - rex.line);
+ nfa_set_code(state->c);
+ fprintf(log_fd, "> %s state %d to list %d. char %d: %s (start col %d)%s\n",
+ action, abs(state->id), lid, state->c, code, col,
+***************
+*** 4167,4173 ****
+ if (thread->state->id == state->id
+ && sub_equal(&thread->subs.norm, &subs->norm)
+ #ifdef FEAT_SYN_HL
+! && (!nfa_has_zsubexpr
+ || sub_equal(&thread->subs.synt, &subs->synt))
+ #endif
+ && pim_equal(&thread->pim, pim))
+--- 4144,4150 ----
+ if (thread->state->id == state->id
+ && sub_equal(&thread->subs.norm, &subs->norm)
+ #ifdef FEAT_SYN_HL
+! && (!rex.nfa_has_zsubexpr
+ || sub_equal(&thread->subs.synt, &subs->synt))
+ #endif
+ && pim_equal(&thread->pim, pim))
+***************
+*** 4306,4312 ****
+ {
+ if (state->lastlist[nfa_ll_index] == l->id)
+ {
+! if (!nfa_has_backref || has_state_with_pos(l, state, subs, NULL))
+ return TRUE;
+ }
+ return FALSE;
+--- 4283,4289 ----
+ {
+ if (state->lastlist[nfa_ll_index] == l->id)
+ {
+! if (!rex.nfa_has_backref || has_state_with_pos(l, state, subs, NULL))
+ return TRUE;
+ }
+ return FALSE;
+***************
+*** 4390,4400 ****
+ /* "^" won't match past end-of-line, don't bother trying.
+ * Except when at the end of the line, or when we are going to the
+ * next line for a look-behind match. */
+! if (reginput > regline
+! && *reginput != NUL
+ && (nfa_endp == NULL
+ || !REG_MULTI
+! || reglnum == nfa_endp->se_u.pos.lnum))
+ goto skip_add;
+ /* FALLTHROUGH */
+
+--- 4367,4377 ----
+ /* "^" won't match past end-of-line, don't bother trying.
+ * Except when at the end of the line, or when we are going to the
+ * next line for a look-behind match. */
+! if (rex.input > rex.line
+! && *rex.input != NUL
+ && (nfa_endp == NULL
+ || !REG_MULTI
+! || rex.lnum == nfa_endp->se_u.pos.lnum))
+ goto skip_add;
+ /* FALLTHROUGH */
+
+***************
+*** 4432,4438 ****
+ * unless it is an MOPEN that is used for a backreference or
+ * when there is a PIM. For NFA_MATCH check the position,
+ * lower position is preferred. */
+! if (!nfa_has_backref && pim == NULL && !l->has_pim
+ && state->c != NFA_MATCH)
+ {
+ /* When called from addstate_here() do insert before
+--- 4409,4415 ----
+ * unless it is an MOPEN that is used for a backreference or
+ * when there is a PIM. For NFA_MATCH check the position,
+ * lower position is preferred. */
+! if (!rex.nfa_has_backref && pim == NULL && !l->has_pim
+ && state->c != NFA_MATCH)
+ {
+ /* When called from addstate_here() do insert before
+***************
+*** 4477,4483 ****
+ * copy before it becomes invalid. */
+ copy_sub(&temp_subs.norm, &subs->norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub(&temp_subs.synt, &subs->synt);
+ #endif
+ subs = &temp_subs;
+--- 4454,4460 ----
+ * copy before it becomes invalid. */
+ copy_sub(&temp_subs.norm, &subs->norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub(&temp_subs.synt, &subs->synt);
+ #endif
+ subs = &temp_subs;
+***************
+*** 4501,4507 ****
+ }
+ copy_sub(&thread->subs.norm, &subs->norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub(&thread->subs.synt, &subs->synt);
+ #endif
+ #ifdef ENABLE_LOG
+--- 4478,4484 ----
+ }
+ copy_sub(&thread->subs.norm, &subs->norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub(&thread->subs.synt, &subs->synt);
+ #endif
+ #ifdef ENABLE_LOG
+***************
+*** 4597,4610 ****
+ }
+ if (off == -1)
+ {
+! sub->list.multi[subidx].start_lnum = reglnum + 1;
+ sub->list.multi[subidx].start_col = 0;
+ }
+ else
+ {
+! sub->list.multi[subidx].start_lnum = reglnum;
+ sub->list.multi[subidx].start_col =
+! (colnr_T)(reginput - regline + off);
+ }
+ sub->list.multi[subidx].end_lnum = -1;
+ }
+--- 4574,4587 ----
+ }
+ if (off == -1)
+ {
+! sub->list.multi[subidx].start_lnum = rex.lnum + 1;
+ sub->list.multi[subidx].start_col = 0;
+ }
+ else
+ {
+! sub->list.multi[subidx].start_lnum = rex.lnum;
+ sub->list.multi[subidx].start_col =
+! (colnr_T)(rex.input - rex.line + off);
+ }
+ sub->list.multi[subidx].end_lnum = -1;
+ }
+***************
+*** 4625,4631 ****
+ }
+ sub->in_use = subidx + 1;
+ }
+! sub->list.line[subidx].start = reginput + off;
+ }
+
+ subs = addstate(l, state->out, subs, pim, off_arg);
+--- 4602,4608 ----
+ }
+ sub->in_use = subidx + 1;
+ }
+! sub->list.line[subidx].start = rex.input + off;
+ }
+
+ subs = addstate(l, state->out, subs, pim, off_arg);
+***************
+*** 4649,4655 ****
+ break;
+
+ case NFA_MCLOSE:
+! if (nfa_has_zend && (REG_MULTI
+ ? subs->norm.list.multi[0].end_lnum >= 0
+ : subs->norm.list.line[0].end != NULL))
+ {
+--- 4626,4632 ----
+ break;
+
+ case NFA_MCLOSE:
+! if (rex.nfa_has_zend && (REG_MULTI
+ ? subs->norm.list.multi[0].end_lnum >= 0
+ : subs->norm.list.line[0].end != NULL))
+ {
+***************
+*** 4708,4721 ****
+ save_multipos = sub->list.multi[subidx];
+ if (off == -1)
+ {
+! sub->list.multi[subidx].end_lnum = reglnum + 1;
+ sub->list.multi[subidx].end_col = 0;
+ }
+ else
+ {
+! sub->list.multi[subidx].end_lnum = reglnum;
+ sub->list.multi[subidx].end_col =
+! (colnr_T)(reginput - regline + off);
+ }
+ /* avoid compiler warnings */
+ save_ptr = NULL;
+--- 4685,4698 ----
+ save_multipos = sub->list.multi[subidx];
+ if (off == -1)
+ {
+! sub->list.multi[subidx].end_lnum = rex.lnum + 1;
+ sub->list.multi[subidx].end_col = 0;
+ }
+ else
+ {
+! sub->list.multi[subidx].end_lnum = rex.lnum;
+ sub->list.multi[subidx].end_col =
+! (colnr_T)(rex.input - rex.line + off);
+ }
+ /* avoid compiler warnings */
+ save_ptr = NULL;
+***************
+*** 4723,4729 ****
+ else
+ {
+ save_ptr = sub->list.line[subidx].end;
+! sub->list.line[subidx].end = reginput + off;
+ /* avoid compiler warnings */
+ vim_memset(&save_multipos, 0, sizeof(save_multipos));
+ }
+--- 4700,4706 ----
+ else
+ {
+ save_ptr = sub->list.line[subidx].end;
+! sub->list.line[subidx].end = rex.input + off;
+ /* avoid compiler warnings */
+ vim_memset(&save_multipos, 0, sizeof(save_multipos));
+ }
+***************
+*** 4929,4941 ****
+ if (sub->list.multi[subidx].start_lnum < 0
+ || sub->list.multi[subidx].end_lnum < 0)
+ goto retempty;
+! if (sub->list.multi[subidx].start_lnum == reglnum
+! && sub->list.multi[subidx].end_lnum == reglnum)
+ {
+ len = sub->list.multi[subidx].end_col
+ - sub->list.multi[subidx].start_col;
+! if (cstrncmp(regline + sub->list.multi[subidx].start_col,
+! reginput, &len) == 0)
+ {
+ *bytelen = len;
+ return TRUE;
+--- 4906,4918 ----
+ if (sub->list.multi[subidx].start_lnum < 0
+ || sub->list.multi[subidx].end_lnum < 0)
+ goto retempty;
+! if (sub->list.multi[subidx].start_lnum == rex.lnum
+! && sub->list.multi[subidx].end_lnum == rex.lnum)
+ {
+ len = sub->list.multi[subidx].end_col
+ - sub->list.multi[subidx].start_col;
+! if (cstrncmp(rex.line + sub->list.multi[subidx].start_col,
+! rex.input, &len) == 0)
+ {
+ *bytelen = len;
+ return TRUE;
+***************
+*** 4958,4964 ****
+ || sub->list.line[subidx].end == NULL)
+ goto retempty;
+ len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start);
+! if (cstrncmp(sub->list.line[subidx].start, reginput, &len) == 0)
+ {
+ *bytelen = len;
+ return TRUE;
+--- 4935,4941 ----
+ || sub->list.line[subidx].end == NULL)
+ goto retempty;
+ len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start);
+! if (cstrncmp(sub->list.line[subidx].start, rex.input, &len) == 0)
+ {
+ *bytelen = len;
+ return TRUE;
+***************
+*** 4989,4995 ****
+ }
+
+ len = (int)STRLEN(re_extmatch_in->matches[subidx]);
+! if (cstrncmp(re_extmatch_in->matches[subidx], reginput, &len) == 0)
+ {
+ *bytelen = len;
+ return TRUE;
+--- 4966,4972 ----
+ }
+
+ len = (int)STRLEN(re_extmatch_in->matches[subidx]);
+! if (cstrncmp(re_extmatch_in->matches[subidx], rex.input, &len) == 0)
+ {
+ *bytelen = len;
+ return TRUE;
+***************
+*** 5061,5070 ****
+ int **listids,
+ int *listids_len)
+ {
+! int save_reginput_col = (int)(reginput - regline);
+! int save_reglnum = reglnum;
+ int save_nfa_match = nfa_match;
+! int save_nfa_listid = nfa_listid;
+ save_se_T *save_nfa_endp = nfa_endp;
+ save_se_T endpos;
+ save_se_T *endposp = NULL;
+--- 5038,5047 ----
+ int **listids,
+ int *listids_len)
+ {
+! int save_reginput_col = (int)(rex.input - rex.line);
+! int save_reglnum = rex.lnum;
+ int save_nfa_match = nfa_match;
+! int save_nfa_listid = rex.nfa_listid;
+ save_se_T *save_nfa_endp = nfa_endp;
+ save_se_T endpos;
+ save_se_T *endposp = NULL;
+***************
+*** 5075,5083 ****
+ {
+ /* start at the position where the postponed match was */
+ if (REG_MULTI)
+! reginput = regline + pim->end.pos.col;
+ else
+! reginput = pim->end.ptr;
+ }
+
+ if (state->c == NFA_START_INVISIBLE_BEFORE
+--- 5052,5060 ----
+ {
+ /* start at the position where the postponed match was */
+ if (REG_MULTI)
+! rex.input = rex.line + pim->end.pos.col;
+ else
+! rex.input = pim->end.ptr;
+ }
+
+ if (state->c == NFA_START_INVISIBLE_BEFORE
+***************
+*** 5092,5099 ****
+ {
+ if (pim == NULL)
+ {
+! endpos.se_u.pos.col = (int)(reginput - regline);
+! endpos.se_u.pos.lnum = reglnum;
+ }
+ else
+ endpos.se_u.pos = pim->end.pos;
+--- 5069,5076 ----
+ {
+ if (pim == NULL)
+ {
+! endpos.se_u.pos.col = (int)(rex.input - rex.line);
+! endpos.se_u.pos.lnum = rex.lnum;
+ }
+ else
+ endpos.se_u.pos = pim->end.pos;
+***************
+*** 5101,5107 ****
+ else
+ {
+ if (pim == NULL)
+! endpos.se_u.ptr = reginput;
+ else
+ endpos.se_u.ptr = pim->end.ptr;
+ }
+--- 5078,5084 ----
+ else
+ {
+ if (pim == NULL)
+! endpos.se_u.ptr = rex.input;
+ else
+ endpos.se_u.ptr = pim->end.ptr;
+ }
+***************
+*** 5114,5152 ****
+ {
+ if (REG_MULTI)
+ {
+! regline = reg_getline(--reglnum);
+! if (regline == NULL)
+ /* can't go before the first line */
+! regline = reg_getline(++reglnum);
+ }
+! reginput = regline;
+ }
+ else
+ {
+! if (REG_MULTI && (int)(reginput - regline) < state->val)
+ {
+ /* Not enough bytes in this line, go to end of
+ * previous line. */
+! regline = reg_getline(--reglnum);
+! if (regline == NULL)
+ {
+ /* can't go before the first line */
+! regline = reg_getline(++reglnum);
+! reginput = regline;
+ }
+ else
+! reginput = regline + STRLEN(regline);
+ }
+! if ((int)(reginput - regline) >= state->val)
+ {
+! reginput -= state->val;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! reginput -= mb_head_off(regline, reginput);
+ #endif
+ }
+ else
+! reginput = regline;
+ }
+ }
+
+--- 5091,5129 ----
+ {
+ if (REG_MULTI)
+ {
+! rex.line = reg_getline(--rex.lnum);
+! if (rex.line == NULL)
+ /* can't go before the first line */
+! rex.line = reg_getline(++rex.lnum);
+ }
+! rex.input = rex.line;
+ }
+ else
+ {
+! if (REG_MULTI && (int)(rex.input - rex.line) < state->val)
+ {
+ /* Not enough bytes in this line, go to end of
+ * previous line. */
+! rex.line = reg_getline(--rex.lnum);
+! if (rex.line == NULL)
+ {
+ /* can't go before the first line */
+! rex.line = reg_getline(++rex.lnum);
+! rex.input = rex.line;
+ }
+ else
+! rex.input = rex.line + STRLEN(rex.line);
+ }
+! if ((int)(rex.input - rex.line) >= state->val)
+ {
+! rex.input -= state->val;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+! rex.input -= mb_head_off(rex.line, rex.input);
+ #endif
+ }
+ else
+! rex.input = rex.line;
+ }
+ }
+
+***************
+*** 5161,5189 ****
+ {
+ /* Already calling nfa_regmatch() recursively. Save the lastlist[1]
+ * values and clear them. */
+! if (*listids == NULL || *listids_len < nstate)
+ {
+ vim_free(*listids);
+! *listids = (int *)lalloc(sizeof(int) * nstate, TRUE);
+ if (*listids == NULL)
+ {
+ EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!"));
+ return 0;
+ }
+! *listids_len = nstate;
+ }
+ nfa_save_listids(prog, *listids);
+ need_restore = TRUE;
+! /* any value of nfa_listid will do */
+ }
+ else
+ {
+ /* First recursive nfa_regmatch() call, switch to the second lastlist
+! * entry. Make sure nfa_listid is different from a previous recursive
+! * call, because some states may still have this ID. */
+ ++nfa_ll_index;
+! if (nfa_listid <= nfa_alt_listid)
+! nfa_listid = nfa_alt_listid;
+ }
+
+ /* Call nfa_regmatch() to check if the current concat matches at this
+--- 5138,5166 ----
+ {
+ /* Already calling nfa_regmatch() recursively. Save the lastlist[1]
+ * values and clear them. */
+! if (*listids == NULL || *listids_len < prog->nstate)
+ {
+ vim_free(*listids);
+! *listids = (int *)lalloc(sizeof(int) * prog->nstate, TRUE);
+ if (*listids == NULL)
+ {
+ EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!"));
+ return 0;
+ }
+! *listids_len = prog->nstate;
+ }
+ nfa_save_listids(prog, *listids);
+ need_restore = TRUE;
+! /* any value of rex.nfa_listid will do */
+ }
+ else
+ {
+ /* First recursive nfa_regmatch() call, switch to the second lastlist
+! * entry. Make sure rex.nfa_listid is different from a previous
+! * recursive call, because some states may still have this ID. */
+ ++nfa_ll_index;
+! if (rex.nfa_listid <= rex.nfa_alt_listid)
+! rex.nfa_listid = rex.nfa_alt_listid;
+ }
+
+ /* Call nfa_regmatch() to check if the current concat matches at this
+***************
+*** 5196,5213 ****
+ else
+ {
+ --nfa_ll_index;
+! nfa_alt_listid = nfa_listid;
+ }
+
+ /* restore position in input text */
+! reglnum = save_reglnum;
+ if (REG_MULTI)
+! regline = reg_getline(reglnum);
+! reginput = regline + save_reginput_col;
+ if (result != NFA_TOO_EXPENSIVE)
+ {
+ nfa_match = save_nfa_match;
+! nfa_listid = save_nfa_listid;
+ }
+ nfa_endp = save_nfa_endp;
+
+--- 5173,5190 ----
+ else
+ {
+ --nfa_ll_index;
+! rex.nfa_alt_listid = rex.nfa_listid;
+ }
+
+ /* restore position in input text */
+! rex.lnum = save_reglnum;
+ if (REG_MULTI)
+! rex.line = reg_getline(rex.lnum);
+! rex.input = rex.line + save_reginput_col;
+ if (result != NFA_TOO_EXPENSIVE)
+ {
+ nfa_match = save_nfa_match;
+! rex.nfa_listid = save_nfa_listid;
+ }
+ nfa_endp = save_nfa_endp;
+
+***************
+*** 5407,5418 ****
+ && !has_mbyte
+ #endif
+ )
+! s = vim_strbyte(regline + *colp, c);
+ else
+! s = cstrchr(regline + *colp, c);
+ if (s == NULL)
+ return FAIL;
+! *colp = (int)(s - regline);
+ return OK;
+ }
+
+--- 5384,5395 ----
+ && !has_mbyte
+ #endif
+ )
+! s = vim_strbyte(rex.line + *colp, c);
+ else
+! s = cstrchr(rex.line + *colp, c);
+ if (s == NULL)
+ return FAIL;
+! *colp = (int)(s - rex.line);
+ return OK;
+ }
+
+***************
+*** 5436,5442 ****
+ for (len1 = 0; match_text[len1] != NUL; len1 += MB_CHAR2LEN(c1))
+ {
+ c1 = PTR2CHAR(match_text + len1);
+! c2 = PTR2CHAR(regline + col + len2);
+ if (c1 != c2 && (!rex.reg_ic || MB_TOLOWER(c1) != MB_TOLOWER(c2)))
+ {
+ match = FALSE;
+--- 5413,5419 ----
+ for (len1 = 0; match_text[len1] != NUL; len1 += MB_CHAR2LEN(c1))
+ {
+ c1 = PTR2CHAR(match_text + len1);
+! c2 = PTR2CHAR(rex.line + col + len2);
+ if (c1 != c2 && (!rex.reg_ic || MB_TOLOWER(c1) != MB_TOLOWER(c2)))
+ {
+ match = FALSE;
+***************
+*** 5448,5469 ****
+ #ifdef FEAT_MBYTE
+ /* check that no composing char follows */
+ && !(enc_utf8
+! && utf_iscomposing(PTR2CHAR(regline + col + len2)))
+ #endif
+ )
+ {
+ cleanup_subexpr();
+ if (REG_MULTI)
+ {
+! rex.reg_startpos[0].lnum = reglnum;
+ rex.reg_startpos[0].col = col;
+! rex.reg_endpos[0].lnum = reglnum;
+ rex.reg_endpos[0].col = col + len2;
+ }
+ else
+ {
+! rex.reg_startp[0] = regline + col;
+! rex.reg_endp[0] = regline + col + len2;
+ }
+ return 1L;
+ }
+--- 5425,5446 ----
+ #ifdef FEAT_MBYTE
+ /* check that no composing char follows */
+ && !(enc_utf8
+! && utf_iscomposing(PTR2CHAR(rex.line + col + len2)))
+ #endif
+ )
+ {
+ cleanup_subexpr();
+ if (REG_MULTI)
+ {
+! rex.reg_startpos[0].lnum = rex.lnum;
+ rex.reg_startpos[0].col = col;
+! rex.reg_endpos[0].lnum = rex.lnum;
+ rex.reg_endpos[0].col = col + len2;
+ }
+ else
+ {
+! rex.reg_startp[0] = rex.line + col;
+! rex.reg_endp[0] = rex.line + col + len2;
+ }
+ return 1L;
+ }
+***************
+*** 5493,5499 ****
+ /*
+ * Main matching routine.
+ *
+! * Run NFA to determine whether it matches reginput.
+ *
+ * When "nfa_endp" is not NULL it is a required end-of-match position.
+ *
+--- 5470,5476 ----
+ /*
+ * Main matching routine.
+ *
+! * Run NFA to determine whether it matches rex.input.
+ *
+ * When "nfa_endp" is not NULL it is a required end-of-match position.
+ *
+***************
+*** 5549,5560 ****
+ nfa_match = FALSE;
+
+ /* Allocate memory for the lists of nodes. */
+! size = (nstate + 1) * sizeof(nfa_thread_T);
+
+ list[0].t = (nfa_thread_T *)lalloc(size, TRUE);
+! list[0].len = nstate + 1;
+ list[1].t = (nfa_thread_T *)lalloc(size, TRUE);
+! list[1].len = nstate + 1;
+ if (list[0].t == NULL || list[1].t == NULL)
+ goto theend;
+
+--- 5526,5537 ----
+ nfa_match = FALSE;
+
+ /* Allocate memory for the lists of nodes. */
+! size = (prog->nstate + 1) * sizeof(nfa_thread_T);
+
+ list[0].t = (nfa_thread_T *)lalloc(size, TRUE);
+! list[0].len = prog->nstate + 1;
+ list[1].t = (nfa_thread_T *)lalloc(size, TRUE);
+! list[1].len = prog->nstate + 1;
+ if (list[0].t == NULL || list[1].t == NULL)
+ goto theend;
+
+***************
+*** 5584,5590 ****
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "(---) STARTSTATE first\n");
+ #endif
+! thislist->id = nfa_listid + 1;
+
+ /* Inline optimized code for addstate(thislist, start, m, 0) if we know
+ * it's the first MOPEN. */
+--- 5561,5567 ----
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "(---) STARTSTATE first\n");
+ #endif
+! thislist->id = rex.nfa_listid + 1;
+
+ /* Inline optimized code for addstate(thislist, start, m, 0) if we know
+ * it's the first MOPEN. */
+***************
+*** 5592,5602 ****
+ {
+ if (REG_MULTI)
+ {
+! m->norm.list.multi[0].start_lnum = reglnum;
+! m->norm.list.multi[0].start_col = (colnr_T)(reginput - regline);
+ }
+ else
+! m->norm.list.line[0].start = reginput;
+ m->norm.in_use = 1;
+ addstate(thislist, start->out, m, NULL, 0);
+ }
+--- 5569,5579 ----
+ {
+ if (REG_MULTI)
+ {
+! m->norm.list.multi[0].start_lnum = rex.lnum;
+! m->norm.list.multi[0].start_col = (colnr_T)(rex.input - rex.line);
+ }
+ else
+! m->norm.list.line[0].start = rex.input;
+ m->norm.in_use = 1;
+ addstate(thislist, start->out, m, NULL, 0);
+ }
+***************
+*** 5620,5632 ****
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+! curc = (*mb_ptr2char)(reginput);
+! clen = (*mb_ptr2len)(reginput);
+ }
+ else
+ #endif
+ {
+! curc = *reginput;
+ clen = 1;
+ }
+ if (curc == NUL)
+--- 5597,5609 ----
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+! curc = (*mb_ptr2char)(rex.input);
+! clen = (*mb_ptr2len)(rex.input);
+ }
+ else
+ #endif
+ {
+! curc = *rex.input;
+ clen = 1;
+ }
+ if (curc == NUL)
+***************
+*** 5640,5648 ****
+ nextlist = &list[flag ^= 1];
+ nextlist->n = 0; /* clear nextlist */
+ nextlist->has_pim = FALSE;
+! ++nfa_listid;
+ if (prog->re_engine == AUTOMATIC_ENGINE
+! && (nfa_listid >= NFA_MAX_STATES
+ # ifdef FEAT_EVAL
+ || nfa_fail_for_testing
+ # endif
+--- 5617,5625 ----
+ nextlist = &list[flag ^= 1];
+ nextlist->n = 0; /* clear nextlist */
+ nextlist->has_pim = FALSE;
+! ++rex.nfa_listid;
+ if (prog->re_engine == AUTOMATIC_ENGINE
+! && (rex.nfa_listid >= NFA_MAX_STATES
+ # ifdef FEAT_EVAL
+ || nfa_fail_for_testing
+ # endif
+***************
+*** 5653,5664 ****
+ goto theend;
+ }
+
+! thislist->id = nfa_listid;
+! nextlist->id = nfa_listid + 1;
+
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "------------------------------------------\n");
+! fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput);
+ fprintf(log_fd, ">>> Advanced one character... Current char is %c (code %d) \n", curc, (int)curc);
+ fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n);
+ {
+--- 5630,5641 ----
+ goto theend;
+ }
+
+! thislist->id = rex.nfa_listid;
+! nextlist->id = rex.nfa_listid + 1;
+
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "------------------------------------------\n");
+! fprintf(log_fd, ">>> Reginput is \"%s\"\n", rex.input);
+ fprintf(log_fd, ">>> Advanced one character... Current char is %c (code %d) \n", curc, (int)curc);
+ fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n);
+ {
+***************
+*** 5710,5716 ****
+ else if (REG_MULTI)
+ col = t->subs.norm.list.multi[0].start_col;
+ else
+! col = (int)(t->subs.norm.list.line[0].start - regline);
+ nfa_set_code(t->state->c);
+ fprintf(log_fd, "(%d) char %d %s (start col %d)%s... \n",
+ abs(t->state->id), (int)t->state->c, code, col,
+--- 5687,5693 ----
+ else if (REG_MULTI)
+ col = t->subs.norm.list.multi[0].start_col;
+ else
+! col = (int)(t->subs.norm.list.line[0].start - rex.line);
+ nfa_set_code(t->state->c);
+ fprintf(log_fd, "(%d) char %d %s (start col %d)%s... \n",
+ abs(t->state->id), (int)t->state->c, code, col,
+***************
+*** 5738,5744 ****
+ nfa_match = TRUE;
+ copy_sub(&submatch->norm, &t->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub(&submatch->synt, &t->subs.synt);
+ #endif
+ #ifdef ENABLE_LOG
+--- 5715,5721 ----
+ nfa_match = TRUE;
+ copy_sub(&submatch->norm, &t->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub(&submatch->synt, &t->subs.synt);
+ #endif
+ #ifdef ENABLE_LOG
+***************
+*** 5746,5752 ****
+ #endif
+ /* Found the left-most longest match, do not look at any other
+ * states at this position. When the list of states is going
+! * to be empty quit without advancing, so that "reginput" is
+ * correct. */
+ if (nextlist->n == 0)
+ clen = 0;
+--- 5723,5729 ----
+ #endif
+ /* Found the left-most longest match, do not look at any other
+ * states at this position. When the list of states is going
+! * to be empty quit without advancing, so that "rex.input" is
+ * correct. */
+ if (nextlist->n == 0)
+ clen = 0;
+***************
+*** 5772,5794 ****
+ {
+ if (REG_MULTI)
+ fprintf(log_fd, "Current lnum: %d, endp lnum: %d; current col: %d, endp col: %d\n",
+! (int)reglnum,
+ (int)nfa_endp->se_u.pos.lnum,
+! (int)(reginput - regline),
+ nfa_endp->se_u.pos.col);
+ else
+ fprintf(log_fd, "Current col: %d, endp col: %d\n",
+! (int)(reginput - regline),
+! (int)(nfa_endp->se_u.ptr - reginput));
+ }
+ #endif
+ /* If "nfa_endp" is set it's only a match if it ends at
+ * "nfa_endp" */
+ if (nfa_endp != NULL && (REG_MULTI
+! ? (reglnum != nfa_endp->se_u.pos.lnum
+! || (int)(reginput - regline)
+ != nfa_endp->se_u.pos.col)
+! : reginput != nfa_endp->se_u.ptr))
+ break;
+
+ /* do not set submatches for \@! */
+--- 5749,5771 ----
+ {
+ if (REG_MULTI)
+ fprintf(log_fd, "Current lnum: %d, endp lnum: %d; current col: %d, endp col: %d\n",
+! (int)rex.lnum,
+ (int)nfa_endp->se_u.pos.lnum,
+! (int)(rex.input - rex.line),
+ nfa_endp->se_u.pos.col);
+ else
+ fprintf(log_fd, "Current col: %d, endp col: %d\n",
+! (int)(rex.input - rex.line),
+! (int)(nfa_endp->se_u.ptr - rex.input));
+ }
+ #endif
+ /* If "nfa_endp" is set it's only a match if it ends at
+ * "nfa_endp" */
+ if (nfa_endp != NULL && (REG_MULTI
+! ? (rex.lnum != nfa_endp->se_u.pos.lnum
+! || (int)(rex.input - rex.line)
+ != nfa_endp->se_u.pos.col)
+! : rex.input != nfa_endp->se_u.ptr))
+ break;
+
+ /* do not set submatches for \@! */
+***************
+*** 5796,5802 ****
+ {
+ copy_sub(&m->norm, &t->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub(&m->synt, &t->subs.synt);
+ #endif
+ }
+--- 5773,5779 ----
+ {
+ copy_sub(&m->norm, &t->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub(&m->synt, &t->subs.synt);
+ #endif
+ }
+***************
+*** 5838,5844 ****
+ * of what happens on success below. */
+ copy_sub_off(&m->norm, &t->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub_off(&m->synt, &t->subs.synt);
+ #endif
+
+--- 5815,5821 ----
+ * of what happens on success below. */
+ copy_sub_off(&m->norm, &t->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub_off(&m->synt, &t->subs.synt);
+ #endif
+
+***************
+*** 5866,5872 ****
+ /* Copy submatch info from the recursive call */
+ copy_sub_off(&t->subs.norm, &m->norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub_off(&t->subs.synt, &m->synt);
+ #endif
+ /* If the pattern has \ze and it matched in the
+--- 5843,5849 ----
+ /* Copy submatch info from the recursive call */
+ copy_sub_off(&t->subs.norm, &m->norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub_off(&t->subs.synt, &m->synt);
+ #endif
+ /* If the pattern has \ze and it matched in the
+***************
+*** 5899,5909 ****
+ #endif
+ if (REG_MULTI)
+ {
+! pim.end.pos.col = (int)(reginput - regline);
+! pim.end.pos.lnum = reglnum;
+ }
+ else
+! pim.end.ptr = reginput;
+
+ /* t->state->out1 is the corresponding END_INVISIBLE
+ * node; Add its out to the current list (zero-width
+--- 5876,5886 ----
+ #endif
+ if (REG_MULTI)
+ {
+! pim.end.pos.col = (int)(rex.input - rex.line);
+! pim.end.pos.lnum = rex.lnum;
+ }
+ else
+! pim.end.ptr = rex.input;
+
+ /* t->state->out1 is the corresponding END_INVISIBLE
+ * node; Add its out to the current list (zero-width
+***************
+*** 5959,5965 ****
+ * happens afterwards. */
+ copy_sub_off(&m->norm, &t->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub_off(&m->synt, &t->subs.synt);
+ #endif
+
+--- 5936,5942 ----
+ * happens afterwards. */
+ copy_sub_off(&m->norm, &t->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub_off(&m->synt, &t->subs.synt);
+ #endif
+
+***************
+*** 5982,5988 ****
+ /* Copy submatch info from the recursive call */
+ copy_sub_off(&t->subs.norm, &m->norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub_off(&t->subs.synt, &m->synt);
+ #endif
+ /* Now we need to skip over the matched text and then
+--- 5959,5965 ----
+ /* Copy submatch info from the recursive call */
+ copy_sub_off(&t->subs.norm, &m->norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub_off(&t->subs.synt, &m->synt);
+ #endif
+ /* Now we need to skip over the matched text and then
+***************
+*** 5990,5998 ****
+ if (REG_MULTI)
+ /* TODO: multi-line match */
+ bytelen = m->norm.list.multi[0].end_col
+! - (int)(reginput - regline);
+ else
+! bytelen = (int)(m->norm.list.line[0].end - reginput);
+
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "NFA_START_PATTERN length: %d\n", bytelen);
+--- 5967,5975 ----
+ if (REG_MULTI)
+ /* TODO: multi-line match */
+ bytelen = m->norm.list.multi[0].end_col
+! - (int)(rex.input - rex.line);
+ else
+! bytelen = (int)(m->norm.list.line[0].end - rex.input);
+
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "NFA_START_PATTERN length: %d\n", bytelen);
+***************
+*** 6025,6031 ****
+ }
+
+ case NFA_BOL:
+! if (reginput == regline)
+ {
+ add_here = TRUE;
+ add_state = t->state->out;
+--- 6002,6008 ----
+ }
+
+ case NFA_BOL:
+! if (rex.input == rex.line)
+ {
+ add_here = TRUE;
+ add_state = t->state->out;
+***************
+*** 6051,6057 ****
+ int this_class;
+
+ /* Get class of current and previous char (if it exists). */
+! this_class = mb_get_class_buf(reginput, rex.reg_buf);
+ if (this_class <= 1)
+ result = FALSE;
+ else if (reg_prev_class() == this_class)
+--- 6028,6034 ----
+ int this_class;
+
+ /* Get class of current and previous char (if it exists). */
+! this_class = mb_get_class_buf(rex.input, rex.reg_buf);
+ if (this_class <= 1)
+ result = FALSE;
+ else if (reg_prev_class() == this_class)
+***************
+*** 6059,6066 ****
+ }
+ #endif
+ else if (!vim_iswordc_buf(curc, rex.reg_buf)
+! || (reginput > regline
+! && vim_iswordc_buf(reginput[-1], rex.reg_buf)))
+ result = FALSE;
+ if (result)
+ {
+--- 6036,6043 ----
+ }
+ #endif
+ else if (!vim_iswordc_buf(curc, rex.reg_buf)
+! || (rex.input > rex.line
+! && vim_iswordc_buf(rex.input[-1], rex.reg_buf)))
+ result = FALSE;
+ if (result)
+ {
+***************
+*** 6071,6077 ****
+
+ case NFA_EOW:
+ result = TRUE;
+! if (reginput == regline)
+ result = FALSE;
+ #ifdef FEAT_MBYTE
+ else if (has_mbyte)
+--- 6048,6054 ----
+
+ case NFA_EOW:
+ result = TRUE;
+! if (rex.input == rex.line)
+ result = FALSE;
+ #ifdef FEAT_MBYTE
+ else if (has_mbyte)
+***************
+*** 6079,6093 ****
+ int this_class, prev_class;
+
+ /* Get class of current and previous char (if it exists). */
+! this_class = mb_get_class_buf(reginput, rex.reg_buf);
+ prev_class = reg_prev_class();
+ if (this_class == prev_class
+ || prev_class == 0 || prev_class == 1)
+ result = FALSE;
+ }
+ #endif
+! else if (!vim_iswordc_buf(reginput[-1], rex.reg_buf)
+! || (reginput[0] != NUL
+ && vim_iswordc_buf(curc, rex.reg_buf)))
+ result = FALSE;
+ if (result)
+--- 6056,6070 ----
+ int this_class, prev_class;
+
+ /* Get class of current and previous char (if it exists). */
+! this_class = mb_get_class_buf(rex.input, rex.reg_buf);
+ prev_class = reg_prev_class();
+ if (this_class == prev_class
+ || prev_class == 0 || prev_class == 1)
+ result = FALSE;
+ }
+ #endif
+! else if (!vim_iswordc_buf(rex.input[-1], rex.reg_buf)
+! || (rex.input[0] != NUL
+ && vim_iswordc_buf(curc, rex.reg_buf)))
+ result = FALSE;
+ if (result)
+***************
+*** 6098,6104 ****
+ break;
+
+ case NFA_BOF:
+! if (reglnum == 0 && reginput == regline
+ && (!REG_MULTI || rex.reg_firstlnum == 1))
+ {
+ add_here = TRUE;
+--- 6075,6081 ----
+ break;
+
+ case NFA_BOF:
+! if (rex.lnum == 0 && rex.input == rex.line
+ && (!REG_MULTI || rex.reg_firstlnum == 1))
+ {
+ add_here = TRUE;
+***************
+*** 6107,6113 ****
+ break;
+
+ case NFA_EOF:
+! if (reglnum == rex.reg_maxline && curc == NUL)
+ {
+ add_here = TRUE;
+ add_state = t->state->out;
+--- 6084,6090 ----
+ break;
+
+ case NFA_EOF:
+! if (rex.lnum == rex.reg_maxline && curc == NUL)
+ {
+ add_here = TRUE;
+ add_state = t->state->out;
+***************
+*** 6159,6165 ****
+ * Get them into cchars[] first. */
+ while (len < clen)
+ {
+! mc = mb_ptr2char(reginput + len);
+ cchars[ccount++] = mc;
+ len += mb_char2len(mc);
+ if (ccount == MAX_MCO)
+--- 6136,6142 ----
+ * Get them into cchars[] first. */
+ while (len < clen)
+ {
+! mc = mb_ptr2char(rex.input + len);
+ cchars[ccount++] = mc;
+ len += mb_char2len(mc);
+ if (ccount == MAX_MCO)
+***************
+*** 6194,6200 ****
+
+ case NFA_NEWL:
+ if (curc == NUL && !rex.reg_line_lbr && REG_MULTI
+! && reglnum <= rex.reg_maxline)
+ {
+ go_to_nextline = TRUE;
+ /* Pass -1 for the offset, which means taking the position
+--- 6171,6177 ----
+
+ case NFA_NEWL:
+ if (curc == NUL && !rex.reg_line_lbr && REG_MULTI
+! && rex.lnum <= rex.reg_maxline)
+ {
+ go_to_nextline = TRUE;
+ /* Pass -1 for the offset, which means taking the position
+***************
+*** 6323,6335 ****
+ break;
+
+ case NFA_KWORD: /* \k */
+! result = vim_iswordp_buf(reginput, rex.reg_buf);
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+
+ case NFA_SKWORD: /* \K */
+ result = !VIM_ISDIGIT(curc)
+! && vim_iswordp_buf(reginput, rex.reg_buf);
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+
+--- 6300,6312 ----
+ break;
+
+ case NFA_KWORD: /* \k */
+! result = vim_iswordp_buf(rex.input, rex.reg_buf);
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+
+ case NFA_SKWORD: /* \K */
+ result = !VIM_ISDIGIT(curc)
+! && vim_iswordp_buf(rex.input, rex.reg_buf);
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+
+***************
+*** 6344,6355 ****
+ break;
+
+ case NFA_PRINT: /* \p */
+! result = vim_isprintc(PTR2CHAR(reginput));
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+
+ case NFA_SPRINT: /* \P */
+! result = !VIM_ISDIGIT(curc) && vim_isprintc(PTR2CHAR(reginput));
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+
+--- 6321,6332 ----
+ break;
+
+ case NFA_PRINT: /* \p */
+! result = vim_isprintc(PTR2CHAR(rex.input));
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+
+ case NFA_SPRINT: /* \P */
+! result = !VIM_ISDIGIT(curc) && vim_isprintc(PTR2CHAR(rex.input));
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+
+***************
+*** 6552,6558 ****
+ case NFA_LNUM_LT:
+ result = (REG_MULTI &&
+ nfa_re_num_cmp(t->state->val, t->state->c - NFA_LNUM,
+! (long_u)(reglnum + rex.reg_firstlnum)));
+ if (result)
+ {
+ add_here = TRUE;
+--- 6529,6535 ----
+ case NFA_LNUM_LT:
+ result = (REG_MULTI &&
+ nfa_re_num_cmp(t->state->val, t->state->c - NFA_LNUM,
+! (long_u)(rex.lnum + rex.reg_firstlnum)));
+ if (result)
+ {
+ add_here = TRUE;
+***************
+*** 6564,6570 ****
+ case NFA_COL_GT:
+ case NFA_COL_LT:
+ result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_COL,
+! (long_u)(reginput - regline) + 1);
+ if (result)
+ {
+ add_here = TRUE;
+--- 6541,6547 ----
+ case NFA_COL_GT:
+ case NFA_COL_LT:
+ result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_COL,
+! (long_u)(rex.input - rex.line) + 1);
+ if (result)
+ {
+ add_here = TRUE;
+***************
+*** 6577,6583 ****
+ case NFA_VCOL_LT:
+ {
+ int op = t->state->c - NFA_VCOL;
+! colnr_T col = (colnr_T)(reginput - regline);
+ win_T *wp = rex.reg_win == NULL ? curwin : rex.reg_win;
+
+ /* Bail out quickly when there can't be a match, avoid the
+--- 6554,6560 ----
+ case NFA_VCOL_LT:
+ {
+ int op = t->state->c - NFA_VCOL;
+! colnr_T col = (colnr_T)(rex.input - rex.line);
+ win_T *wp = rex.reg_win == NULL ? curwin : rex.reg_win;
+
+ /* Bail out quickly when there can't be a match, avoid the
+***************
+*** 6601,6607 ****
+ }
+ if (!result)
+ result = nfa_re_num_cmp(t->state->val, op,
+! (long_u)win_linetabsize(wp, regline, col) + 1);
+ if (result)
+ {
+ add_here = TRUE;
+--- 6578,6584 ----
+ }
+ if (!result)
+ result = nfa_re_num_cmp(t->state->val, op,
+! (long_u)win_linetabsize(wp, rex.line, col) + 1);
+ if (result)
+ {
+ add_here = TRUE;
+***************
+*** 6619,6631 ****
+ /* Compare the mark position to the match position. */
+ result = (pos != NULL /* mark doesn't exist */
+ && pos->lnum > 0 /* mark isn't set in reg_buf */
+! && (pos->lnum == reglnum + rex.reg_firstlnum
+! ? (pos->col == (colnr_T)(reginput - regline)
+ ? t->state->c == NFA_MARK
+! : (pos->col < (colnr_T)(reginput - regline)
+ ? t->state->c == NFA_MARK_GT
+ : t->state->c == NFA_MARK_LT))
+! : (pos->lnum < reglnum + rex.reg_firstlnum
+ ? t->state->c == NFA_MARK_GT
+ : t->state->c == NFA_MARK_LT)));
+ if (result)
+--- 6596,6608 ----
+ /* Compare the mark position to the match position. */
+ result = (pos != NULL /* mark doesn't exist */
+ && pos->lnum > 0 /* mark isn't set in reg_buf */
+! && (pos->lnum == rex.lnum + rex.reg_firstlnum
+! ? (pos->col == (colnr_T)(rex.input - rex.line)
+ ? t->state->c == NFA_MARK
+! : (pos->col < (colnr_T)(rex.input - rex.line)
+ ? t->state->c == NFA_MARK_GT
+ : t->state->c == NFA_MARK_LT))
+! : (pos->lnum < rex.lnum + rex.reg_firstlnum
+ ? t->state->c == NFA_MARK_GT
+ : t->state->c == NFA_MARK_LT)));
+ if (result)
+***************
+*** 6638,6646 ****
+
+ case NFA_CURSOR:
+ result = (rex.reg_win != NULL
+! && (reglnum + rex.reg_firstlnum
+ == rex.reg_win->w_cursor.lnum)
+! && ((colnr_T)(reginput - regline)
+ == rex.reg_win->w_cursor.col));
+ if (result)
+ {
+--- 6615,6623 ----
+
+ case NFA_CURSOR:
+ result = (rex.reg_win != NULL
+! && (rex.lnum + rex.reg_firstlnum
+ == rex.reg_win->w_cursor.lnum)
+! && ((colnr_T)(rex.input - rex.line)
+ == rex.reg_win->w_cursor.col));
+ if (result)
+ {
+***************
+*** 6701,6707 ****
+ /* If rex.reg_icombine is not set only skip over the character
+ * itself. When it is set skip over composing characters. */
+ if (result && enc_utf8 && !rex.reg_icombine)
+! clen = utf_ptr2len(reginput);
+ #endif
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+--- 6678,6684 ----
+ /* If rex.reg_icombine is not set only skip over the character
+ * itself. When it is set skip over composing characters. */
+ if (result && enc_utf8 && !rex.reg_icombine)
+! clen = utf_ptr2len(rex.input);
+ #endif
+ ADD_STATE_IF_MATCH(t->state);
+ break;
+***************
+*** 6746,6752 ****
+ /* Copy submatch info from the recursive call */
+ copy_sub_off(&pim->subs.norm, &m->norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub_off(&pim->subs.synt, &m->synt);
+ #endif
+ }
+--- 6723,6729 ----
+ /* Copy submatch info from the recursive call */
+ copy_sub_off(&pim->subs.norm, &m->norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub_off(&pim->subs.synt, &m->synt);
+ #endif
+ }
+***************
+*** 6773,6779 ****
+ /* Copy submatch info from the recursive call */
+ copy_sub_off(&t->subs.norm, &pim->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (nfa_has_zsubexpr)
+ copy_sub_off(&t->subs.synt, &pim->subs.synt);
+ #endif
+ }
+--- 6750,6756 ----
+ /* Copy submatch info from the recursive call */
+ copy_sub_off(&t->subs.norm, &pim->subs.norm);
+ #ifdef FEAT_SYN_HL
+! if (rex.nfa_has_zsubexpr)
+ copy_sub_off(&t->subs.synt, &pim->subs.synt);
+ #endif
+ }
+***************
+*** 6817,6833 ****
+ * Also don't start a match past the first line. */
+ if (nfa_match == FALSE
+ && ((toplevel
+! && reglnum == 0
+ && clen != 0
+ && (rex.reg_maxcol == 0
+! || (colnr_T)(reginput - regline) < rex.reg_maxcol))
+ || (nfa_endp != NULL
+ && (REG_MULTI
+! ? (reglnum < nfa_endp->se_u.pos.lnum
+! || (reglnum == nfa_endp->se_u.pos.lnum
+! && (int)(reginput - regline)
+ < nfa_endp->se_u.pos.col))
+! : reginput < nfa_endp->se_u.ptr))))
+ {
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "(---) STARTSTATE\n");
+--- 6794,6810 ----
+ * Also don't start a match past the first line. */
+ if (nfa_match == FALSE
+ && ((toplevel
+! && rex.lnum == 0
+ && clen != 0
+ && (rex.reg_maxcol == 0
+! || (colnr_T)(rex.input - rex.line) < rex.reg_maxcol))
+ || (nfa_endp != NULL
+ && (REG_MULTI
+! ? (rex.lnum < nfa_endp->se_u.pos.lnum
+! || (rex.lnum == nfa_endp->se_u.pos.lnum
+! && (int)(rex.input - rex.line)
+ < nfa_endp->se_u.pos.col))
+! : rex.input < nfa_endp->se_u.ptr))))
+ {
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, "(---) STARTSTATE\n");
+***************
+*** 6843,6849 ****
+ {
+ if (nextlist->n == 0)
+ {
+! colnr_T col = (colnr_T)(reginput - regline) + clen;
+
+ /* Nextlist is empty, we can skip ahead to the
+ * character that must appear at the start. */
+--- 6820,6826 ----
+ {
+ if (nextlist->n == 0)
+ {
+! colnr_T col = (colnr_T)(rex.input - rex.line) + clen;
+
+ /* Nextlist is empty, we can skip ahead to the
+ * character that must appear at the start. */
+***************
+*** 6851,6865 ****
+ break;
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, " Skipping ahead %d bytes to regstart\n",
+! col - ((colnr_T)(reginput - regline) + clen));
+ #endif
+! reginput = regline + col - clen;
+ }
+ else
+ {
+ /* Checking if the required start character matches is
+ * cheaper than adding a state that won't match. */
+! c = PTR2CHAR(reginput + clen);
+ if (c != prog->regstart && (!rex.reg_ic
+ || MB_TOLOWER(c) != MB_TOLOWER(prog->regstart)))
+ {
+--- 6828,6842 ----
+ break;
+ #ifdef ENABLE_LOG
+ fprintf(log_fd, " Skipping ahead %d bytes to regstart\n",
+! col - ((colnr_T)(rex.input - rex.line) + clen));
+ #endif
+! rex.input = rex.line + col - clen;
+ }
+ else
+ {
+ /* Checking if the required start character matches is
+ * cheaper than adding a state that won't match. */
+! c = PTR2CHAR(rex.input + clen);
+ if (c != prog->regstart && (!rex.reg_ic
+ || MB_TOLOWER(c) != MB_TOLOWER(prog->regstart)))
+ {
+***************
+*** 6875,6883 ****
+ {
+ if (REG_MULTI)
+ m->norm.list.multi[0].start_col =
+! (colnr_T)(reginput - regline) + clen;
+ else
+! m->norm.list.line[0].start = reginput + clen;
+ addstate(nextlist, start->out, m, NULL, clen);
+ }
+ }
+--- 6852,6860 ----
+ {
+ if (REG_MULTI)
+ m->norm.list.multi[0].start_col =
+! (colnr_T)(rex.input - rex.line) + clen;
+ else
+! m->norm.list.line[0].start = rex.input + clen;
+ addstate(nextlist, start->out, m, NULL, clen);
+ }
+ }
+***************
+*** 6900,6908 ****
+ /* Advance to the next character, or advance to the next line, or
+ * finish. */
+ if (clen != 0)
+! reginput += clen;
+ else if (go_to_nextline || (nfa_endp != NULL && REG_MULTI
+! && reglnum < nfa_endp->se_u.pos.lnum))
+ reg_nextline();
+ else
+ break;
+--- 6877,6885 ----
+ /* Advance to the next character, or advance to the next line, or
+ * finish. */
+ if (clen != 0)
+! rex.input += clen;
+ else if (go_to_nextline || (nfa_endp != NULL && REG_MULTI
+! && rex.lnum < nfa_endp->se_u.pos.lnum))
+ reg_nextline();
+ else
+ break;
+***************
+*** 6942,6948 ****
+ }
+
+ /*
+! * Try match of "prog" with at regline["col"].
+ * Returns <= 0 for failure, number of lines contained in the match otherwise.
+ */
+ static long
+--- 6919,6925 ----
+ }
+
+ /*
+! * Try match of "prog" with at rex.line["col"].
+ * Returns <= 0 for failure, number of lines contained in the match otherwise.
+ */
+ static long
+***************
+*** 6960,6966 ****
+ FILE *f;
+ #endif
+
+! reginput = regline + col;
+ #ifdef FEAT_RELTIME
+ nfa_time_limit = tm;
+ nfa_timed_out = timed_out;
+--- 6937,6943 ----
+ FILE *f;
+ #endif
+
+! rex.input = rex.line + col;
+ #ifdef FEAT_RELTIME
+ nfa_time_limit = tm;
+ nfa_timed_out = timed_out;
+***************
+*** 6975,6981 ****
+ #ifdef DEBUG
+ fprintf(f, "\tRegexp is \"%s\"\n", nfa_regengine.expr);
+ #endif
+! fprintf(f, "\tInput text is \"%s\" \n", reginput);
+ fprintf(f, "\t=======================================================\n\n");
+ nfa_print_state(f, start);
+ fprintf(f, "\n\n");
+--- 6952,6958 ----
+ #ifdef DEBUG
+ fprintf(f, "\tRegexp is \"%s\"\n", nfa_regengine.expr);
+ #endif
+! fprintf(f, "\tInput text is \"%s\" \n", rex.input);
+ fprintf(f, "\t=======================================================\n\n");
+ nfa_print_state(f, start);
+ fprintf(f, "\n\n");
+***************
+*** 7018,7029 ****
+ if (rex.reg_endpos[0].lnum < 0)
+ {
+ /* pattern has a \ze but it didn't match, use current end */
+! rex.reg_endpos[0].lnum = reglnum;
+! rex.reg_endpos[0].col = (int)(reginput - regline);
+ }
+ else
+ /* Use line number of "\ze". */
+! reglnum = rex.reg_endpos[0].lnum;
+ }
+ else
+ {
+--- 6995,7006 ----
+ if (rex.reg_endpos[0].lnum < 0)
+ {
+ /* pattern has a \ze but it didn't match, use current end */
+! rex.reg_endpos[0].lnum = rex.lnum;
+! rex.reg_endpos[0].col = (int)(rex.input - rex.line);
+ }
+ else
+ /* Use line number of "\ze". */
+! rex.lnum = rex.reg_endpos[0].lnum;
+ }
+ else
+ {
+***************
+*** 7034,7042 ****
+ }
+
+ if (rex.reg_startp[0] == NULL)
+! rex.reg_startp[0] = regline + col;
+ if (rex.reg_endp[0] == NULL)
+! rex.reg_endp[0] = reginput;
+ }
+
+ #ifdef FEAT_SYN_HL
+--- 7011,7019 ----
+ }
+
+ if (rex.reg_startp[0] == NULL)
+! rex.reg_startp[0] = rex.line + col;
+ if (rex.reg_endp[0] == NULL)
+! rex.reg_endp[0] = rex.input;
+ }
+
+ #ifdef FEAT_SYN_HL
+***************
+*** 7077,7083 ****
+ }
+ #endif
+
+! return 1 + reglnum;
+ }
+
+ /*
+--- 7054,7060 ----
+ }
+ #endif
+
+! return 1 + rex.lnum;
+ }
+
+ /*
+***************
+*** 7131,7159 ****
+ rex.reg_icombine = TRUE;
+ #endif
+
+! regline = line;
+! reglnum = 0; /* relative to line */
+
+! nfa_has_zend = prog->has_zend;
+! nfa_has_backref = prog->has_backref;
+! nfa_nsubexpr = prog->nsubexp;
+! nfa_listid = 1;
+! nfa_alt_listid = 2;
+ nfa_regengine.expr = prog->pattern;
+
+ if (prog->reganch && col > 0)
+ return 0L;
+
+! need_clear_subexpr = TRUE;
+ #ifdef FEAT_SYN_HL
+ /* Clear the external match subpointers if necessary. */
+ if (prog->reghasz == REX_SET)
+ {
+! nfa_has_zsubexpr = TRUE;
+! need_clear_zsubexpr = TRUE;
+ }
+ else
+! nfa_has_zsubexpr = FALSE;
+ #endif
+
+ if (prog->regstart != NUL)
+--- 7108,7141 ----
+ rex.reg_icombine = TRUE;
+ #endif
+
+! rex.line = line;
+! rex.lnum = 0; /* relative to line */
+
+! rex.nfa_has_zend = prog->has_zend;
+! rex.nfa_has_backref = prog->has_backref;
+! rex.nfa_nsubexpr = prog->nsubexp;
+! rex.nfa_listid = 1;
+! rex.nfa_alt_listid = 2;
+! #ifdef DEBUG
+ nfa_regengine.expr = prog->pattern;
++ #endif
+
+ if (prog->reganch && col > 0)
+ return 0L;
+
+! rex.need_clear_subexpr = TRUE;
+ #ifdef FEAT_SYN_HL
+ /* Clear the external match subpointers if necessary. */
+ if (prog->reghasz == REX_SET)
+ {
+! rex.nfa_has_zsubexpr = TRUE;
+! rex.need_clear_zsubexpr = TRUE;
+ }
+ else
+! {
+! rex.nfa_has_zsubexpr = FALSE;
+! rex.need_clear_zsubexpr = FALSE;
+! }
+ #endif
+
+ if (prog->regstart != NUL)
+***************
+*** 7177,7184 ****
+ if (rex.reg_maxcol > 0 && col >= rex.reg_maxcol)
+ goto theend;
+
+! nstate = prog->nstate;
+! for (i = 0; i < nstate; ++i)
+ {
+ prog->state[i].id = i;
+ prog->state[i].lastlist[0] = 0;
+--- 7159,7168 ----
+ if (rex.reg_maxcol > 0 && col >= rex.reg_maxcol)
+ goto theend;
+
+! // Set the "nstate" used by nfa_regcomp() to zero to trigger an error when
+! // it's accidentally used during execution.
+! nstate = 0;
+! for (i = 0; i < prog->nstate; ++i)
+ {
+ prog->state[i].id = i;
+ prog->state[i].lastlist[0] = 0;
+***************
+*** 7187,7193 ****
+--- 7171,7179 ----
+
+ retval = nfa_regtry(prog, col, tm, timed_out);
+
++ #ifdef DEBUG
+ nfa_regengine.expr = NULL;
++ #endif
+
+ theend:
+ return retval;
+***************
+*** 7207,7213 ****
+--- 7193,7201 ----
+ if (expr == NULL)
+ return NULL;
+
++ #ifdef DEBUG
+ nfa_regengine.expr = expr;
++ #endif
+ nfa_re_flags = re_flags;
+
+ init_class_tab();
+***************
+*** 7255,7260 ****
+--- 7243,7249 ----
+ if (prog == NULL)
+ goto fail;
+ state_ptr = prog->state;
++ prog->re_in_use = FALSE;
+
+ /*
+ * PASS 2
+***************
+*** 7267,7274 ****
+ prog->regflags = regflags;
+ prog->engine = &nfa_regengine;
+ prog->nstate = nstate;
+! prog->has_zend = nfa_has_zend;
+! prog->has_backref = nfa_has_backref;
+ prog->nsubexp = regnpar;
+
+ nfa_postprocess(prog);
+--- 7256,7263 ----
+ prog->regflags = regflags;
+ prog->engine = &nfa_regengine;
+ prog->nstate = nstate;
+! prog->has_zend = rex.nfa_has_zend;
+! prog->has_backref = rex.nfa_has_backref;
+ prog->nsubexp = regnpar;
+
+ nfa_postprocess(prog);
+***************
+*** 7286,7292 ****
+--- 7275,7283 ----
+ prog->reghasz = re_has_z;
+ #endif
+ prog->pattern = vim_strsave(expr);
++ #ifdef DEBUG
+ nfa_regengine.expr = NULL;
++ #endif
+
+ out:
+ VIM_CLEAR(post_start);
+***************
+*** 7299,7305 ****
+--- 7290,7298 ----
+ #ifdef ENABLE_LOG
+ nfa_postfix_dump(expr, FAIL);
+ #endif
++ #ifdef DEBUG
+ nfa_regengine.expr = NULL;
++ #endif
+ goto out;
+ }
+
+*** ../vim-8.1.0191/src/version.c 2018-07-16 18:08:56.326109917 +0200
+--- src/version.c 2018-07-17 05:10:12.956018803 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 192,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+262. Your computer has it's own phone line - but your daughter doesn't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0193 b/data/vim/patches/8.1.0193
new file mode 100644
index 000000000..4cb55fb6f
--- /dev/null
+++ b/data/vim/patches/8.1.0193
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0193
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0193
+Problem: Terminal debugger buttons don't always work. (Dominique Pelle)
+Solution: Set 'cpo' to its default value.
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0192/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-23 14:36:13.778666585 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-17 05:50:55.632645723 +0200
+***************
+*** 56,61 ****
+--- 56,64 ----
+ finish
+ endif
+
++ let s:keepcpo = &cpo
++ set cpo&vim
++
+ " The command that starts debugging, e.g. ":Termdebug vim".
+ " To end type "quit" in the gdb window.
+ command -nargs=* -complete=file -bang Termdebug call s:StartDebug(<bang>0, <f-args>)
+***************
+*** 943,945 ****
+--- 946,951 ----
+ endif
+ endfor
+ endfunc
++
++ let &cpo = s:keepcpo
++ unlet s:keepcpo
+*** ../vim-8.1.0192/src/version.c 2018-07-17 05:43:50.487214724 +0200
+--- src/version.c 2018-07-17 05:53:02.215885517 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 193,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+264. You turn to the teletext page "surfing report" and are surprised that it
+ is about sizes of waves and a weather forecast for seaside resorts.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0194 b/data/vim/patches/8.1.0194
new file mode 100644
index 000000000..36cb442fa
--- /dev/null
+++ b/data/vim/patches/8.1.0194
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0194
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0194
+Problem: Possibly use of NULL pointer. (Coverity)
+Solution: Reset the re_in_use flag earlier.
+Files: src/regexp.c
+
+
+*** ../vim-8.1.0193/src/regexp.c 2018-07-17 05:43:50.483214748 +0200
+--- src/regexp.c 2018-07-18 06:00:16.581305145 +0200
+***************
+*** 8266,8271 ****
+--- 8266,8272 ----
+ rex.reg_endpos = NULL;
+
+ result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl);
++ rmp->regprog->re_in_use = FALSE;
+
+ /* NFA engine aborted because it's very slow. */
+ if (rmp->regprog->re_engine == AUTOMATIC_ENGINE
+***************
+*** 8284,8290 ****
+--- 8285,8295 ----
+ #endif
+ rmp->regprog = vim_regcomp(pat, re_flags);
+ if (rmp->regprog != NULL)
++ {
++ rmp->regprog->re_in_use = TRUE;
+ result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl);
++ rmp->regprog->re_in_use = FALSE;
++ }
+ vim_free(pat);
+ }
+
+***************
+*** 8294,8300 ****
+ rex_in_use = rex_in_use_save;
+ if (rex_in_use)
+ rex = rex_save;
+- rmp->regprog->re_in_use = FALSE;
+
+ return result > 0;
+ }
+--- 8299,8304 ----
+***************
+*** 8382,8387 ****
+--- 8386,8392 ----
+
+ result = rmp->regprog->engine->regexec_multi(
+ rmp, win, buf, lnum, col, tm, timed_out);
++ rmp->regprog->re_in_use = FALSE;
+
+ /* NFA engine aborted because it's very slow. */
+ if (rmp->regprog->re_engine == AUTOMATIC_ENGINE
+***************
+*** 8409,8416 ****
+--- 8414,8425 ----
+ #endif
+
+ if (rmp->regprog != NULL)
++ {
++ rmp->regprog->re_in_use = TRUE;
+ result = rmp->regprog->engine->regexec_multi(
+ rmp, win, buf, lnum, col, tm, timed_out);
++ rmp->regprog->re_in_use = FALSE;
++ }
+ vim_free(pat);
+ }
+ p_re = save_p_re;
+***************
+*** 8419,8425 ****
+ rex_in_use = rex_in_use_save;
+ if (rex_in_use)
+ rex = rex_save;
+- rmp->regprog->re_in_use = FALSE;
+
+ return result <= 0 ? 0 : result;
+ }
+--- 8428,8433 ----
+*** ../vim-8.1.0193/src/version.c 2018-07-17 05:55:07.031195486 +0200
+--- src/version.c 2018-07-18 06:01:05.753045215 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 194,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+267. You get an extra phone line so you can get phone calls.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0195 b/data/vim/patches/8.1.0195
new file mode 100644
index 000000000..4eeb253ed
--- /dev/null
+++ b/data/vim/patches/8.1.0195
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0195
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0195
+Problem: Terminal debugger commands don't always work. (Dominique Pelle)
+Solution: Set 'cpo' to its default value when defining commands. (Christian
+ Brabandt)
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0194/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-17 05:55:07.031195486 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-19 01:42:45.109411754 +0200
+***************
+*** 566,571 ****
+--- 566,574 ----
+
+ " Install commands in the current window to control the debugger.
+ func s:InstallCommands()
++ let save_cpo = &cpo
++ set cpo&vim
++
+ command Break call s:SetBreakpoint()
+ command Clear call s:ClearBreakpoint()
+ command Step call s:SendCommand('-exec-step')
+***************
+*** 603,608 ****
+--- 606,613 ----
+ an 1.230 PopUp.Evaluate :Evaluate<CR>
+ endif
+ endif
++
++ let &cpo = save_cpo
+ endfunc
+
+ let s:winbar_winids = []
+*** ../vim-8.1.0194/src/version.c 2018-07-18 06:02:04.084736178 +0200
+--- src/version.c 2018-07-19 01:44:14.191196349 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 195,
+ /**/
+
+--
+God made the integers; all else is the work of Man.
+ -- Kronecker
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0196 b/data/vim/patches/8.1.0196
new file mode 100644
index 000000000..5ea32f3a2
--- /dev/null
+++ b/data/vim/patches/8.1.0196
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0196
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0196
+Problem: Terminal debugger error with .gdbinit file.
+Solution: Check two lines for the "new ui" response. (hint from Hirohito
+ Higashi)
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0195/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-19 02:54:56.593615126 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-19 04:00:32.045002542 +0200
+***************
+*** 200,206 ****
+ let response = ''
+ for lnum in range(1,200)
+ if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi '
+! let response = term_getline(s:gdbbuf, lnum + 1)
+ if response =~ 'Undefined command'
+ echoerr 'Sorry, your gdb is too old, gdb 7.12 is required'
+ exe 'bwipe! ' . s:ptybuf
+--- 200,207 ----
+ let response = ''
+ for lnum in range(1,200)
+ if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi '
+! " response can be in the same line or the next line
+! let response = term_getline(s:gdbbuf, lnum) . term_getline(s:gdbbuf, lnum + 1)
+ if response =~ 'Undefined command'
+ echoerr 'Sorry, your gdb is too old, gdb 7.12 is required'
+ exe 'bwipe! ' . s:ptybuf
+*** ../vim-8.1.0195/src/version.c 2018-07-19 02:54:56.597615110 +0200
+--- src/version.c 2018-07-19 04:07:59.074400369 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 196,
+ /**/
+
+--
+GALAHAD: Camelot ...
+LAUNCELOT: Camelot ...
+GAWAIN: It's only a model.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0197 b/data/vim/patches/8.1.0197
new file mode 100644
index 000000000..f8af4058c
--- /dev/null
+++ b/data/vim/patches/8.1.0197
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0197
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0197
+Problem: Windows GUI: title for search/replace is wrong.
+Solution: Remove remark about doubling backslash. (closes #3230)
+Files: src/gui_win32.c
+
+
+*** ../vim-8.1.0196/src/gui_w32.c 2018-06-28 12:05:07.085006926 +0200
+--- src/gui_w32.c 2018-07-20 04:55:11.444216436 +0200
+***************
+*** 2820,2827 ****
+ s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct);
+ }
+
+! set_window_title(s_findrep_hwnd,
+! _("Find string (use '\\\\' to find a '\\')"));
+ (void)SetFocus(s_findrep_hwnd);
+
+ s_findrep_is_find = TRUE;
+--- 2820,2826 ----
+ s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct);
+ }
+
+! set_window_title(s_findrep_hwnd, _("Find string"));
+ (void)SetFocus(s_findrep_hwnd);
+
+ s_findrep_is_find = TRUE;
+***************
+*** 2855,2862 ****
+ (LPFINDREPLACE) &s_findrep_struct);
+ }
+
+! set_window_title(s_findrep_hwnd,
+! _("Find & Replace (use '\\\\' to find a '\\')"));
+ (void)SetFocus(s_findrep_hwnd);
+
+ s_findrep_is_find = FALSE;
+--- 2854,2860 ----
+ (LPFINDREPLACE) &s_findrep_struct);
+ }
+
+! set_window_title(s_findrep_hwnd, _("Find & Replace"));
+ (void)SetFocus(s_findrep_hwnd);
+
+ s_findrep_is_find = FALSE;
+*** ../vim-8.1.0196/src/version.c 2018-07-19 04:13:30.332453051 +0200
+--- src/version.c 2018-07-20 05:00:43.838081685 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 197,
+ /**/
+
+--
+MAN: You don't frighten us, English pig-dog! Go and boil your bottoms,
+ son of a silly person. I blow my nose on you, so-called Arthur-king,
+ you and your silly English K...kaniggets.
+ He puts hands to his ears and blows a raspberry.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0198 b/data/vim/patches/8.1.0198
new file mode 100644
index 000000000..0cac7b146
--- /dev/null
+++ b/data/vim/patches/8.1.0198
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0198
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0198
+Problem: There is no hint that syntax is disabled for 'redrawtime'.
+Solution: Add a message.
+Files: src/syntax.c
+
+
+*** ../vim-8.1.0197/src/syntax.c 2018-06-23 14:21:38.459484976 +0200
+--- src/syntax.c 2018-07-20 19:54:46.527523073 +0200
+***************
+*** 3355,3362 ****
+ }
+ #endif
+ #ifdef FEAT_RELTIME
+! if (timed_out)
+ syn_win->w_s->b_syn_slow = TRUE;
+ #endif
+
+ if (r > 0)
+--- 3355,3365 ----
+ }
+ #endif
+ #ifdef FEAT_RELTIME
+! if (timed_out && !syn_win->w_s->b_syn_slow)
+! {
+ syn_win->w_s->b_syn_slow = TRUE;
++ MSG(_("'redrawtime' exceeded, syntax highlighting disabled"));
++ }
+ #endif
+
+ if (r > 0)
+***************
+*** 3575,3585 ****
+ if (*arg == NUL)
+ {
+ MSG_PUTS("\n");
+- MSG_PUTS(_("syntax iskeyword "));
+ if (curwin->w_s->b_syn_isk != empty_option)
+ msg_outtrans(curwin->w_s->b_syn_isk);
+ else
+! msg_outtrans((char_u *)"not set");
+ }
+ else
+ {
+--- 3578,3590 ----
+ if (*arg == NUL)
+ {
+ MSG_PUTS("\n");
+ if (curwin->w_s->b_syn_isk != empty_option)
++ {
++ MSG_PUTS(_("syntax iskeyword "));
+ msg_outtrans(curwin->w_s->b_syn_isk);
++ }
+ else
+! msg_outtrans((char_u *)_("syntax iskeyword not set"));
+ }
+ else
+ {
+*** ../vim-8.1.0197/src/version.c 2018-07-20 05:03:10.565146691 +0200
+--- src/version.c 2018-07-20 19:49:51.905211855 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 198,
+ /**/
+
+--
+ A KNIGHT rides into shot and hacks him to the ground. He rides off.
+ We stay for a moment on the glade. A MIDDLE-AGED LADY in a C. & A.
+ twin-set emerges from the trees and looks in horror at the body of her
+ HUSBAND.
+MRS HISTORIAN: FRANK!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0199 b/data/vim/patches/8.1.0199
new file mode 100644
index 000000000..643ae3ed7
--- /dev/null
+++ b/data/vim/patches/8.1.0199
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0199
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0199
+Problem: spellbadword() does not check for caps error. (Dominique Pelle)
+Solution: Adjust capcol when advancing.
+Files: src/evalfunc.c
+
+
+*** ../vim-8.1.0198/src/evalfunc.c 2018-07-15 17:01:06.357425513 +0200
+--- src/evalfunc.c 2018-07-20 20:21:30.289814377 +0200
+***************
+*** 11639,11644 ****
+--- 11639,11645 ----
+ break;
+ }
+ str += len;
++ capcol -= len;
+ }
+ }
+ }
+*** ../vim-8.1.0198/src/version.c 2018-07-20 19:56:06.006997358 +0200
+--- src/version.c 2018-07-20 20:27:36.763686510 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 199,
+ /**/
+
+--
+ Bravely bold Sir Robin, rode forth from Camelot,
+ He was not afraid to die, Oh Brave Sir Robin,
+ He was not at all afraid to be killed in nasty ways
+ Brave, brave, brave, brave Sir Robin.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0200 b/data/vim/patches/8.1.0200
new file mode 100644
index 000000000..e02ced27a
--- /dev/null
+++ b/data/vim/patches/8.1.0200
@@ -0,0 +1,93 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0200
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0200
+Problem: spellbadword() not tested.
+Solution: Add a test. (Dominique Pelle, closes #3235)
+Files: src/testdir/test_spell.vim
+
+
+*** ../vim-8.1.0199/src/testdir/test_spell.vim 2017-12-21 20:24:51.000000000 +0100
+--- src/testdir/test_spell.vim 2018-07-20 23:33:17.188338957 +0200
+***************
+*** 68,73 ****
+--- 68,114 ----
+ bwipe!
+ endfunc
+
++ " Test spellbadword() with argument
++ func Test_spellbadword()
++ set spell
++
++ call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.'))
++ call assert_equal(['another', 'caps'], spellbadword('A sentence. another sentence'))
++
++ set spelllang=en
++ call assert_equal(['', ''], spellbadword('centre'))
++ call assert_equal(['', ''], spellbadword('center'))
++ set spelllang=en_us
++ call assert_equal(['centre', 'local'], spellbadword('centre'))
++ call assert_equal(['', ''], spellbadword('center'))
++ set spelllang=en_gb
++ call assert_equal(['', ''], spellbadword('centre'))
++ call assert_equal(['center', 'local'], spellbadword('center'))
++
++ " Create a small word list to test that spellbadword('...')
++ " can return ['...', 'rare'].
++ e Xwords
++ insert
++ foo
++ foobar/?
++ .
++ w!
++ mkspell! Xwords.spl Xwords
++ set spelllang=Xwords.spl
++ call assert_equal(['foobar', 'rare'], spellbadword('foo foobar'))
++
++ " Typo should not be detected without the 'spell' option.
++ set spelllang=en_gb nospell
++ call assert_equal(['', ''], spellbadword('centre'))
++ call assert_equal(['', ''], spellbadword('My bycycle.'))
++ call assert_equal(['', ''], spellbadword('A sentence. another sentence'))
++
++ call delete('Xwords.spl')
++ call delete('Xwords')
++ set spelllang&
++ set spell&
++ endfunc
++
+ func Test_spellreall()
+ new
+ set spell
+*** ../vim-8.1.0199/src/version.c 2018-07-20 20:28:44.855379332 +0200
+--- src/version.c 2018-07-20 23:34:21.732001781 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 200,
+ /**/
+
+--
+The greatest lies of all time:
+ (1) The check is in the mail.
+ (2) We have a really challenging assignment for you.
+ (3) I love you.
+ (4) All bugs have been fixed.
+ (5) This won't hurt a bit.
+ (6) Honey, I just need to debug this program and be home in 5 minutes.
+ (7) I have just sent you an e-mail about that.
+ (8) Of course I'll respect you in the morning.
+ (9) I'm from the government, and I'm here to help you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0201 b/data/vim/patches/8.1.0201
new file mode 100644
index 000000000..b978d9642
--- /dev/null
+++ b/data/vim/patches/8.1.0201
@@ -0,0 +1,332 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0201
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0201
+Problem: Newer Python uses "importlib" instead of "imp".
+Solution: Use "importlib" for newer Python versions. (closes #3163)
+Files: src/if_py_both.h, src/testdir/test87.in
+
+
+*** ../vim-8.1.0200/src/if_py_both.h 2018-07-08 17:18:58.420462346 +0200
+--- src/if_py_both.h 2018-07-22 04:05:36.131054785 +0200
+***************
+*** 88,95 ****
+--- 88,99 ----
+ static PyObject *vim_module;
+ static PyObject *vim_special_path_object;
+
++ #if PY_VERSION_HEX >= 0x030700f0
++ static PyObject *py_find_spec;
++ #else
+ static PyObject *py_find_module;
+ static PyObject *py_load_module;
++ #endif
+
+ static PyObject *VimError;
+
+***************
+*** 539,544 ****
+--- 543,549 ----
+ return 0;
+ }
+
++ #if PY_VERSION_HEX < 0x030700f0
+ typedef struct
+ {
+ PyObject_HEAD
+***************
+*** 567,572 ****
+--- 572,578 ----
+ {"load_module", (PyCFunction)LoaderLoadModule, METH_VARARGS, ""},
+ { NULL, NULL, 0, NULL}
+ };
++ #endif
+
+ /* Check to see whether a Vim error has been reported, or a keyboard
+ * interrupt has been detected.
+***************
+*** 1163,1168 ****
+--- 1169,1205 ----
+ return ret;
+ }
+
++ #if PY_VERSION_HEX >= 0x030700f0
++ static PyObject *
++ FinderFindSpec(PyObject *self, PyObject *args)
++ {
++ char *fullname;
++ PyObject *paths;
++ PyObject *target = Py_None;
++ PyObject *spec;
++
++ if (!PyArg_ParseTuple(args, "s|O", &fullname, &target))
++ return NULL;
++
++ if (!(paths = Vim_GetPaths(self)))
++ return NULL;
++
++ spec = PyObject_CallFunction(py_find_spec, "sNN", fullname, paths, target);
++
++ Py_DECREF(paths);
++
++ if (!spec)
++ {
++ if (PyErr_Occurred())
++ return NULL;
++
++ Py_INCREF(Py_None);
++ return Py_None;
++ }
++
++ return spec;
++ }
++ #else
+ static PyObject *
+ call_load_module(char *name, int len, PyObject *find_module_result)
+ {
+***************
+*** 1305,1310 ****
+--- 1342,1348 ----
+
+ return (PyObject *) loader;
+ }
++ #endif
+
+ static PyObject *
+ VimPathHook(PyObject *self UNUSED, PyObject *args)
+***************
+*** 1336,1342 ****
+--- 1374,1384 ----
+ {"chdir", (PyCFunction)VimChdir, METH_VARARGS|METH_KEYWORDS, "Change directory"},
+ {"fchdir", (PyCFunction)VimFchdir, METH_VARARGS|METH_KEYWORDS, "Change directory"},
+ {"foreach_rtp", VimForeachRTP, METH_O, "Call given callable for each path in &rtp"},
++ #if PY_VERSION_HEX >= 0x030700f0
++ {"find_spec", FinderFindSpec, METH_VARARGS, "Internal use only, returns spec object for any input it receives"},
++ #else
+ {"find_module", FinderFindModule, METH_VARARGS, "Internal use only, returns loader object for any input it receives"},
++ #endif
+ {"path_hook", VimPathHook, METH_VARARGS, "Hook function to install in sys.path_hooks"},
+ {"_get_paths", (PyCFunction)Vim_GetPaths, METH_NOARGS, "Get &rtp-based additions to sys.path"},
+ { NULL, NULL, 0, NULL}
+***************
+*** 6545,6550 ****
+--- 6587,6593 ----
+ OptionsType.tp_traverse = (traverseproc)OptionsTraverse;
+ OptionsType.tp_clear = (inquiry)OptionsClear;
+
++ #if PY_VERSION_HEX < 0x030700f0
+ vim_memset(&LoaderType, 0, sizeof(LoaderType));
+ LoaderType.tp_name = "vim.Loader";
+ LoaderType.tp_basicsize = sizeof(LoaderObject);
+***************
+*** 6552,6557 ****
+--- 6595,6601 ----
+ LoaderType.tp_doc = "vim message object";
+ LoaderType.tp_methods = LoaderMethods;
+ LoaderType.tp_dealloc = (destructor)LoaderDestructor;
++ #endif
+
+ #if PY_MAJOR_VERSION >= 3
+ vim_memset(&vimmodule, 0, sizeof(vimmodule));
+***************
+*** 6583,6589 ****
+--- 6627,6635 ----
+ PYTYPE_READY(FunctionType);
+ PYTYPE_READY(OptionsType);
+ PYTYPE_READY(OutputType);
++ #if PY_VERSION_HEX < 0x030700f0
+ PYTYPE_READY(LoaderType);
++ #endif
+ return 0;
+ }
+
+***************
+*** 6707,6713 ****
+--- 6753,6761 ----
+ {"List", (PyObject *)&ListType},
+ {"Function", (PyObject *)&FunctionType},
+ {"Options", (PyObject *)&OptionsType},
++ #if PY_VERSION_HEX < 0x030700f0
+ {"_Loader", (PyObject *)&LoaderType},
++ #endif
+ };
+
+ #define ADD_OBJECT(m, name, obj) \
+***************
+*** 6729,6734 ****
+--- 6777,6786 ----
+ PyObject *other_module;
+ PyObject *attr;
+ PyObject *imp;
++ #if PY_VERSION_HEX >= 0x030700f0
++ PyObject *dict;
++ PyObject *cls;
++ #endif
+
+ for (i = 0; i < (int)(sizeof(numeric_constants)
+ / sizeof(struct numeric_constant));
+***************
+*** 6801,6806 ****
+--- 6853,6880 ----
+
+ ADD_OBJECT(m, "VIM_SPECIAL_PATH", vim_special_path_object);
+
++ #if PY_VERSION_HEX >= 0x030700f0
++ if (!(imp = PyImport_ImportModule("importlib.machinery")))
++ return -1;
++
++ dict = PyModule_GetDict(imp);
++
++ if (!(cls = PyDict_GetItemString(dict, "PathFinder")))
++ {
++ Py_DECREF(imp);
++ return -1;
++ }
++
++ if (!(py_find_spec = PyObject_GetAttrString(cls, "find_spec")))
++ {
++ Py_DECREF(imp);
++ return -1;
++ }
++
++ Py_DECREF(imp);
++
++ ADD_OBJECT(m, "_find_spec", py_find_spec);
++ #else
+ if (!(imp = PyImport_ImportModule("imp")))
+ return -1;
+
+***************
+*** 6821,6826 ****
+--- 6895,6901 ----
+
+ ADD_OBJECT(m, "_find_module", py_find_module);
+ ADD_OBJECT(m, "_load_module", py_load_module);
++ #endif
+
+ return 0;
+ }
+*** ../vim-8.1.0200/src/testdir/test87.in 2017-03-05 18:33:37.000000000 +0100
+--- src/testdir/test87.in 2018-07-22 04:05:36.131054785 +0200
+***************
+*** 219,224 ****
+--- 219,225 ----
+ import re
+
+ py33_type_error_pattern = re.compile('^__call__\(\) takes (\d+) positional argument but (\d+) were given$')
++ py37_exception_repr = re.compile(r'([^\(\),])(\)+)$')
+
+ def ee(expr, g=globals(), l=locals()):
+ cb = vim.current.buffer
+***************
+*** 227,243 ****
+ exec(expr, g, l)
+ except Exception as e:
+ if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."):
+! cb.append(expr + ':' + repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1]))))
+ elif sys.version_info >= (3, 3) and e.__class__ is ImportError and str(e).find('No module named \'') >= 0:
+! cb.append(expr + ':' + repr((e.__class__, ImportError(str(e).replace("'", '')))))
+ elif sys.version_info >= (3, 6) and e.__class__ is ModuleNotFoundError:
+ # Python 3.6 gives ModuleNotFoundError, change it to an ImportError
+! cb.append(expr + ':' + repr((ImportError, ImportError(str(e).replace("'", '')))))
+ elif sys.version_info >= (3, 3) and e.__class__ is TypeError:
+ m = py33_type_error_pattern.search(str(e))
+ if m:
+ msg = '__call__() takes exactly {0} positional argument ({1} given)'.format(m.group(1), m.group(2))
+! cb.append(expr + ':' + repr((e.__class__, TypeError(msg))))
+ else:
+ msg = repr((e.__class__, e))
+ # Messages changed with Python 3.6, change new to old.
+--- 228,244 ----
+ exec(expr, g, l)
+ except Exception as e:
+ if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."):
+! msg = repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1])))
+ elif sys.version_info >= (3, 3) and e.__class__ is ImportError and str(e).find('No module named \'') >= 0:
+! msg = repr((e.__class__, ImportError(str(e).replace("'", ''))))
+ elif sys.version_info >= (3, 6) and e.__class__ is ModuleNotFoundError:
+ # Python 3.6 gives ModuleNotFoundError, change it to an ImportError
+! msg = repr((ImportError, ImportError(str(e).replace("'", ''))))
+ elif sys.version_info >= (3, 3) and e.__class__ is TypeError:
+ m = py33_type_error_pattern.search(str(e))
+ if m:
+ msg = '__call__() takes exactly {0} positional argument ({1} given)'.format(m.group(1), m.group(2))
+! msg = repr((e.__class__, TypeError(msg)))
+ else:
+ msg = repr((e.__class__, e))
+ # Messages changed with Python 3.6, change new to old.
+***************
+*** 249,257 ****
+ oldmsg2 = '''"Can't convert 'int' object to str implicitly"'''
+ if msg.find(newmsg2) > -1:
+ msg = msg.replace(newmsg2, oldmsg2)
+- cb.append(expr + ':' + msg)
+ elif sys.version_info >= (3, 5) and e.__class__ is ValueError and str(e) == 'embedded null byte':
+! cb.append(expr + ':' + repr((TypeError, TypeError('expected bytes with no null'))))
+ else:
+ msg = repr((e.__class__, e))
+ # Some Python versions say can't, others cannot.
+--- 250,257 ----
+ oldmsg2 = '''"Can't convert 'int' object to str implicitly"'''
+ if msg.find(newmsg2) > -1:
+ msg = msg.replace(newmsg2, oldmsg2)
+ elif sys.version_info >= (3, 5) and e.__class__ is ValueError and str(e) == 'embedded null byte':
+! msg = repr((TypeError, TypeError('expected bytes with no null')))
+ else:
+ msg = repr((e.__class__, e))
+ # Some Python versions say can't, others cannot.
+***************
+*** 262,272 ****
+ msg = msg.replace('"cannot ', '\'cannot ')
+ if msg.find(' attributes"') > -1:
+ msg = msg.replace(' attributes"', ' attributes\'')
+! cb.append(expr + ':' + msg)
+ else:
+ cb.append(expr + ':NOT FAILED')
+ except Exception as e:
+! cb.append(expr + '::' + repr((e.__class__, e)))
+ EOF
+ :fun New(...)
+ : return ['NewStart']+a:000+['NewEnd']
+--- 262,277 ----
+ msg = msg.replace('"cannot ', '\'cannot ')
+ if msg.find(' attributes"') > -1:
+ msg = msg.replace(' attributes"', ' attributes\'')
+! if sys.version_info >= (3, 7):
+! msg = py37_exception_repr.sub(r'\1,\2', msg)
+! cb.append(expr + ':' + msg)
+ else:
+ cb.append(expr + ':NOT FAILED')
+ except Exception as e:
+! msg = repr((e.__class__, e))
+! if sys.version_info >= (3, 7):
+! msg = py37_exception_repr.sub(r'\1,\2', msg)
+! cb.append(expr + '::' + msg)
+ EOF
+ :fun New(...)
+ : return ['NewStart']+a:000+['NewEnd']
+*** ../vim-8.1.0200/src/version.c 2018-07-20 23:36:21.171368602 +0200
+--- src/version.c 2018-07-22 04:24:39.197154869 +0200
+***************
+*** 791,792 ****
+--- 791,794 ----
+ { /* Add new patch number below this line */
++ /**/
++ 201,
+ /**/
+
+--
+FIRST HEAD: All right! All right! We'll kill him first and then have tea and
+ biscuits.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0202 b/data/vim/patches/8.1.0202
new file mode 100644
index 000000000..67523f7c4
--- /dev/null
+++ b/data/vim/patches/8.1.0202
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0202
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0202
+Problem: :version always shows +packages. (Takuya Fujiwara)
+Solution: Add #ifdef (closes #3198) Also for has().
+Files: src/version.c, src/evalfunc.c
+
+
+*** ../vim-8.1.0201/src/version.c 2018-07-22 04:30:16.372005905 +0200
+--- src/version.c 2018-07-22 05:03:36.372998336 +0200
+***************
+*** 493,499 ****
+--- 493,503 ----
+ "-ole",
+ # endif
+ #endif
++ #ifdef FEAT_EVAL
+ "+packages",
++ #else
++ "-packages",
++ #endif
+ #ifdef FEAT_PATH_EXTRA
+ "+path_extra",
+ #else
+*** ../vim-8.1.0201/src/evalfunc.c 2018-07-20 20:28:44.851379341 +0200
+--- src/evalfunc.c 2018-07-22 05:04:06.032807050 +0200
+***************
+*** 6302,6308 ****
+--- 6302,6310 ----
+ #ifdef FEAT_OLE
+ "ole",
+ #endif
++ #ifdef FEAT_EVAL
+ "packages",
++ #endif
+ #ifdef FEAT_PATH_EXTRA
+ "path_extra",
+ #endif
+*** ../vim-8.1.0201/src/version.c 2018-07-22 04:30:16.372005905 +0200
+--- src/version.c 2018-07-22 05:03:36.372998336 +0200
+***************
+*** 791,792 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 202,
+ /**/
+
+--
+ When danger reared its ugly head,
+ He bravely turned his tail and fled
+ Yes, Brave Sir Robin turned about
+ And gallantly he chickened out
+ Bravely taking to his feet
+ He beat a very brave retreat
+ Bravest of the brave Sir Robin
+ Petrified of being dead
+ Soiled his pants then brave Sir Robin
+ Turned away and fled.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0203 b/data/vim/patches/8.1.0203
new file mode 100644
index 000000000..5b07544a8
--- /dev/null
+++ b/data/vim/patches/8.1.0203
@@ -0,0 +1,132 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0203
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0203
+Problem: Building with Perl 5.28 fails on Windows.
+Solution: Define Perl_mg_get. (closes #3196)
+Files: src/if_perl.xs
+
+
+*** ../vim-8.1.0202/src/if_perl.xs 2018-07-16 17:45:16.998502685 +0200
+--- src/if_perl.xs 2018-07-22 06:13:58.852007931 +0200
+***************
+*** 199,204 ****
+--- 199,207 ----
+ # define Perl_gv_stashpv dll_Perl_gv_stashpv
+ # define Perl_markstack_grow dll_Perl_markstack_grow
+ # define Perl_mg_find dll_Perl_mg_find
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 28)
++ # define Perl_mg_get dll_Perl_mg_get
++ # endif
+ # define Perl_newXS dll_Perl_newXS
+ # define Perl_newSV dll_Perl_newSV
+ # define Perl_newSViv dll_Perl_newSViv
+***************
+*** 342,347 ****
+--- 345,353 ----
+ static void (*Perl_markstack_grow)(pTHX);
+ # endif
+ static MAGIC* (*Perl_mg_find)(pTHX_ SV*, int);
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 28)
++ static int (*Perl_mg_get)(pTHX_ SV*);
++ # endif
+ static CV* (*Perl_newXS)(pTHX_ char*, XSUBADDR_t, char*);
+ static SV* (*Perl_newSV)(pTHX_ STRLEN);
+ static SV* (*Perl_newSViv)(pTHX_ IV);
+***************
+*** 494,499 ****
+--- 500,508 ----
+ {"Perl_gv_stashpv", (PERL_PROC*)&Perl_gv_stashpv},
+ {"Perl_markstack_grow", (PERL_PROC*)&Perl_markstack_grow},
+ {"Perl_mg_find", (PERL_PROC*)&Perl_mg_find},
++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 28)
++ {"Perl_mg_get", (PERL_PROC*)&Perl_mg_get},
++ # endif
+ {"Perl_newXS", (PERL_PROC*)&Perl_newXS},
+ {"Perl_newSV", (PERL_PROC*)&Perl_newSV},
+ {"Perl_newSViv", (PERL_PROC*)&Perl_newSViv},
+***************
+*** 862,869 ****
+ {
+ if (wp->w_perl_private && perl_interp != NULL)
+ {
+! SV *sv = (SV*)wp->w_perl_private;
+! D_Save_Sv(sv);
+ sv_setiv(sv, 0);
+ SvREFCNT_dec(sv);
+ }
+--- 871,878 ----
+ {
+ if (wp->w_perl_private && perl_interp != NULL)
+ {
+! SV *sv = (SV*)wp->w_perl_private;
+! D_Save_Sv(sv);
+ sv_setiv(sv, 0);
+ SvREFCNT_dec(sv);
+ }
+***************
+*** 875,882 ****
+ {
+ if (bp->b_perl_private && perl_interp != NULL)
+ {
+! SV *sv = (SV *)bp->b_perl_private;
+! D_Save_Sv(sv);
+ sv_setiv(sv, 0);
+ SvREFCNT_dec(sv);
+ }
+--- 884,891 ----
+ {
+ if (bp->b_perl_private && perl_interp != NULL)
+ {
+! SV *sv = (SV *)bp->b_perl_private;
+! D_Save_Sv(sv);
+ sv_setiv(sv, 0);
+ SvREFCNT_dec(sv);
+ }
+***************
+*** 911,919 ****
+
+ if (SvRV(sv) == SvRV(rv))
+ SvREFCNT_dec(SvRV(rv));
+! else /* XXX: Not sure if the `else` condition are right
+! * Test_SvREFCNT() pass in all case.
+! */
+ sv_setsv(sv, rv);
+
+ return 0;
+--- 920,927 ----
+
+ if (SvRV(sv) == SvRV(rv))
+ SvREFCNT_dec(SvRV(rv));
+! else // XXX: Not sure if the `else` condition are right
+! // Test_SvREFCNT() pass in all case.
+ sv_setsv(sv, rv);
+
+ return 0;
+*** ../vim-8.1.0202/src/version.c 2018-07-22 05:08:06.827299787 +0200
+--- src/version.c 2018-07-22 06:40:39.675217593 +0200
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 203,
+ /**/
+
+--
+ GALAHAD turns back. We see from his POV the lovely ZOOT standing by him
+ smiling enchantingly and a number of equally delectable GIRLIES draped
+ around in the seductively poulticed room. They look at him smilingly and
+ wave.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0204 b/data/vim/patches/8.1.0204
new file mode 100644
index 000000000..1f7766673
--- /dev/null
+++ b/data/vim/patches/8.1.0204
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0204
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0204
+Problem: inputlist() is not tested.
+Solution: Add a test. (Dominique Pelle, closes #3240)
+Files: src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0203/src/testdir/test_functions.vim 2018-07-15 20:24:25.827299588 +0200
+--- src/testdir/test_functions.vim 2018-07-22 19:33:58.235966937 +0200
+***************
+*** 810,815 ****
+--- 810,826 ----
+ bw!
+ endfunc
+
++ func Test_inputlist()
++ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<cr>", 'tx')
++ call assert_equal(1, c)
++ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>2\<cr>", 'tx')
++ call assert_equal(2, c)
++ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>3\<cr>", 'tx')
++ call assert_equal(3, c)
++
++ call assert_fails('call inputlist("")', 'E686:')
++ endfunc
++
+ func Test_balloon_show()
+ if has('balloon_eval')
+ " This won't do anything but must not crash either.
+*** ../vim-8.1.0203/src/version.c 2018-07-22 07:31:04.742472292 +0200
+--- src/version.c 2018-07-22 19:35:05.935590559 +0200
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 204,
+ /**/
+
+--
+DINGO: Wicked wicked Zoot ... she is a bad person and she must pay the
+ penalty. And here in Castle Anthrax, we have but one punishment
+ ... you must tie her down on a bed ... and spank her. Come!
+GIRLS: A spanking! A spanking!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0205 b/data/vim/patches/8.1.0205
new file mode 100644
index 000000000..f7f78afc2
--- /dev/null
+++ b/data/vim/patches/8.1.0205
@@ -0,0 +1,226 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0205
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0205
+Problem: Invalid memory access with invalid modeline.
+Solution: Pass pointer limit. Add a test. (closes #3241)
+Files: src/Make_all.mak, src/testdir/test_alot.vim,
+ src/testdir/test_modeline.vim, src/option.c
+
+
+*** ../vim-8.1.0204/src/Make_all.mak 2018-07-04 23:05:19.221931527 +0200
+--- src/Make_all.mak 2018-07-23 03:54:45.950888854 +0200
+***************
+*** 118,123 ****
+--- 118,124 ----
+ test_messages \
+ test_mksession \
+ test_mksession_utf8 \
++ test_modeline \
+ test_nested_function \
+ test_netbeans \
+ test_normal \
+*** ../vim-8.1.0204/src/testdir/test_alot.vim 2018-05-19 15:00:48.841017887 +0200
+--- src/testdir/test_alot.vim 2018-07-23 03:56:07.742401442 +0200
+***************
+*** 37,42 ****
+--- 37,43 ----
+ source test_match.vim
+ source test_menu.vim
+ source test_messages.vim
++ source test_modeline.vim
+ source test_partial.vim
+ source test_popup.vim
+ source test_put.vim
+*** ../vim-8.1.0204/src/testdir/test_modeline.vim 2018-07-23 04:10:49.533248182 +0200
+--- src/testdir/test_modeline.vim 2018-07-23 04:02:57.055992973 +0200
+***************
+*** 0 ****
+--- 1,8 ----
++ " Tests for parsing the modeline.
++
++ func Test_invalid()
++ " This was reading before allocated memory.
++ call writefile(['vi:0', 'nothing'], 'Xmodeline')
++ call assert_fails('split Xmodeline', 'E518:')
++ bwipe!
++ endfunc
+*** ../vim-8.1.0204/src/option.c 2018-07-08 21:46:52.859037899 +0200
+--- src/option.c 2018-07-23 04:09:28.641716577 +0200
+***************
+*** 3316,3322 ****
+ static char_u *set_num_option(int opt_idx, char_u *varp, long value, char_u *errbuf, size_t errbuflen, int opt_flags);
+ static void check_redraw(long_u flags);
+ static int findoption(char_u *);
+! static int find_key_option(char_u *);
+ static void showoptions(int all, int opt_flags);
+ static int optval_default(struct vimoption *, char_u *varp);
+ static void showoneopt(struct vimoption *, int opt_flags);
+--- 3316,3322 ----
+ static char_u *set_num_option(int opt_idx, char_u *varp, long value, char_u *errbuf, size_t errbuflen, int opt_flags);
+ static void check_redraw(long_u flags);
+ static int findoption(char_u *);
+! static int find_key_option(char_u *arg_arg, int has_lt);
+ static void showoptions(int all, int opt_flags);
+ static int optval_default(struct vimoption *, char_u *varp);
+ static void showoneopt(struct vimoption *, int opt_flags);
+***************
+*** 4492,4498 ****
+ opt_idx = findoption(arg + 1);
+ arg[len++] = '>'; /* restore '>' */
+ if (opt_idx == -1)
+! key = find_key_option(arg + 1);
+ }
+ else
+ {
+--- 4492,4498 ----
+ opt_idx = findoption(arg + 1);
+ arg[len++] = '>'; /* restore '>' */
+ if (opt_idx == -1)
+! key = find_key_option(arg + 1, TRUE);
+ }
+ else
+ {
+***************
+*** 4510,4516 ****
+ opt_idx = findoption(arg);
+ arg[len] = nextchar; /* restore nextchar */
+ if (opt_idx == -1)
+! key = find_key_option(arg);
+ }
+
+ /* remember character after option name */
+--- 4510,4516 ----
+ opt_idx = findoption(arg);
+ arg[len] = nextchar; /* restore nextchar */
+ if (opt_idx == -1)
+! key = find_key_option(arg, FALSE);
+ }
+
+ /* remember character after option name */
+***************
+*** 5362,5368 ****
+ string_to_key(char_u *arg, int multi_byte)
+ {
+ if (*arg == '<')
+! return find_key_option(arg + 1);
+ if (*arg == '^')
+ return Ctrl_chr(arg[1]);
+ if (multi_byte)
+--- 5362,5368 ----
+ string_to_key(char_u *arg, int multi_byte)
+ {
+ if (*arg == '<')
+! return find_key_option(arg + 1, TRUE);
+ if (*arg == '^')
+ return Ctrl_chr(arg[1]);
+ if (multi_byte)
+***************
+*** 9541,9547 ****
+ int key;
+
+ if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_'
+! && (key = find_key_option(name)) != 0)
+ {
+ char_u key_name[2];
+ char_u *p;
+--- 9541,9547 ----
+ int key;
+
+ if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_'
+! && (key = find_key_option(name, FALSE)) != 0)
+ {
+ char_u key_name[2];
+ char_u *p;
+***************
+*** 9831,9837 ****
+ int key;
+
+ if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_'
+! && (key = find_key_option(name)) != 0)
+ {
+ char_u key_name[2];
+
+--- 9831,9837 ----
+ int key;
+
+ if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_'
+! && (key = find_key_option(name, FALSE)) != 0)
+ {
+ char_u key_name[2];
+
+***************
+*** 9952,9963 ****
+
+ /*
+ * Translate a string like "t_xx", "<t_xx>" or "<S-Tab>" to a key number.
+ */
+ static int
+! find_key_option(char_u *arg)
+ {
+! int key;
+ int modifiers;
+
+ /*
+ * Don't use get_special_key_code() for t_xx, we don't want it to call
+--- 9952,9966 ----
+
+ /*
+ * Translate a string like "t_xx", "<t_xx>" or "<S-Tab>" to a key number.
++ * When "has_lt" is true there is a '<' before "*arg_arg".
++ * Returns 0 when the key is not recognized.
+ */
+ static int
+! find_key_option(char_u *arg_arg, int has_lt)
+ {
+! int key = 0;
+ int modifiers;
++ char_u *arg = arg_arg;
+
+ /*
+ * Don't use get_special_key_code() for t_xx, we don't want it to call
+***************
+*** 9965,9971 ****
+ */
+ if (arg[0] == 't' && arg[1] == '_' && arg[2] && arg[3])
+ key = TERMCAP2KEY(arg[2], arg[3]);
+! else
+ {
+ --arg; /* put arg at the '<' */
+ modifiers = 0;
+--- 9968,9974 ----
+ */
+ if (arg[0] == 't' && arg[1] == '_' && arg[2] && arg[3])
+ key = TERMCAP2KEY(arg[2], arg[3]);
+! else if (has_lt)
+ {
+ --arg; /* put arg at the '<' */
+ modifiers = 0;
+*** ../vim-8.1.0204/src/version.c 2018-07-22 19:36:29.255125833 +0200
+--- src/version.c 2018-07-23 03:55:34.482599313 +0200
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 205,
+ /**/
+
+--
+DINGO: You must spank her well and after you have spanked her you
+ may deal with her as you like and then ... spank me.
+AMAZING: And spank me!
+STUNNER: And me.
+LOVELY: And me.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0206 b/data/vim/patches/8.1.0206
new file mode 100644
index 000000000..22faed481
--- /dev/null
+++ b/data/vim/patches/8.1.0206
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0206
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0206 (after 8.1.0205)
+Problem: Duplicate test function name.
+Solution: Rename both functions.
+Files: src/testdir/test_modeline.vim, src/testdir/test_glob2regpat.vim
+
+
+*** ../vim-8.1.0205/src/testdir/test_modeline.vim 2018-07-23 04:11:37.648969780 +0200
+--- src/testdir/test_modeline.vim 2018-07-23 04:27:46.940228868 +0200
+***************
+*** 1,6 ****
+ " Tests for parsing the modeline.
+
+! func Test_invalid()
+ " This was reading before allocated memory.
+ call writefile(['vi:0', 'nothing'], 'Xmodeline')
+ call assert_fails('split Xmodeline', 'E518:')
+--- 1,6 ----
+ " Tests for parsing the modeline.
+
+! func Test_modeline_invalid()
+ " This was reading before allocated memory.
+ call writefile(['vi:0', 'nothing'], 'Xmodeline')
+ call assert_fails('split Xmodeline', 'E518:')
+*** ../vim-8.1.0205/src/testdir/test_glob2regpat.vim 2016-08-10 23:02:33.000000000 +0200
+--- src/testdir/test_glob2regpat.vim 2018-07-23 04:29:20.587735994 +0200
+***************
+*** 1,12 ****
+ " Test glob2regpat()
+
+! func Test_invalid()
+ call assert_fails('call glob2regpat(1.33)', 'E806:')
+ call assert_fails('call glob2regpat("}")', 'E219:')
+ call assert_fails('call glob2regpat("{")', 'E220:')
+ endfunc
+
+! func Test_valid()
+ call assert_equal('^foo\.', glob2regpat('foo.*'))
+ call assert_equal('^foo.$', glob2regpat('foo?'))
+ call assert_equal('\.vim$', glob2regpat('*.vim'))
+--- 1,12 ----
+ " Test glob2regpat()
+
+! func Test_glob2regpat_invalid()
+ call assert_fails('call glob2regpat(1.33)', 'E806:')
+ call assert_fails('call glob2regpat("}")', 'E219:')
+ call assert_fails('call glob2regpat("{")', 'E220:')
+ endfunc
+
+! func Test_glob2regpat_valid()
+ call assert_equal('^foo\.', glob2regpat('foo.*'))
+ call assert_equal('^foo.$', glob2regpat('foo?'))
+ call assert_equal('\.vim$', glob2regpat('*.vim'))
+*** ../vim-8.1.0205/src/version.c 2018-07-23 04:11:37.652969757 +0200
+--- src/version.c 2018-07-23 04:49:06.929104402 +0200
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 206,
+ /**/
+
+--
+GALAHAD: No. Look, I can tackle this lot single-handed!
+GIRLS: Yes, yes, let him Tackle us single-handed!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0207 b/data/vim/patches/8.1.0207
new file mode 100644
index 000000000..e6736dbcd
--- /dev/null
+++ b/data/vim/patches/8.1.0207
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0207
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0207
+Problem: Need many menu translation files to cover regions.
+Solution: When there is no region match, try without. (Christian Brabandt)
+Files: runtime/menu.vim
+
+
+*** ../vim-8.1.0206/runtime/menu.vim 2018-05-17 12:39:14.000000000 +0200
+--- runtime/menu.vim 2018-07-23 05:07:00.697989266 +0200
+***************
+*** 56,61 ****
+--- 56,68 ----
+ let s:lang = substitute(s:lang, '\.[^.]*', "", "")
+ exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
+
++ if !exists("did_menu_trans") && s:lang =~ '_'
++ " If the language includes a region try matching without that region.
++ " (e.g. find menu_de.vim if s:lang == de_DE).
++ let langonly = substitute(s:lang, '_.*', "", "")
++ exe "runtime! lang/menu_" . langonly . "[^a-z]*vim"
++ endif
++
+ if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
+ " On windows locale names are complicated, try using $LANG, it might
+ " have been set by set_init_1(). But don't do this for "en" or "en_us".
+***************
+*** 809,815 ****
+ let name = a:fname
+ if name == ''
+ if !exists("g:menutrans_no_file")
+! let g:menutrans_no_file = "[No file]"
+ endif
+ let name = g:menutrans_no_file
+ else
+--- 816,822 ----
+ let name = a:fname
+ if name == ''
+ if !exists("g:menutrans_no_file")
+! let g:menutrans_no_file = "[No Name]"
+ endif
+ let name = g:menutrans_no_file
+ else
+*** ../vim-8.1.0206/src/version.c 2018-07-23 04:49:17.225024903 +0200
+--- src/version.c 2018-07-23 05:05:44.138454667 +0200
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 207,
+ /**/
+
+--
+ ### Hiroshima 45, Chernobyl 86, Windows 95 ###
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0208 b/data/vim/patches/8.1.0208
new file mode 100644
index 000000000..1ad3c514b
--- /dev/null
+++ b/data/vim/patches/8.1.0208
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0208
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0208 (after 8.1.0205)
+Problem: File left behind after running individual test.
+Solution: Delete the file.
+Files: src/testdir/test_modeline.vim
+
+
+*** ../vim-8.1.0207/src/testdir/test_modeline.vim 2018-07-23 04:49:17.225024903 +0200
+--- src/testdir/test_modeline.vim 2018-07-24 04:43:26.033462800 +0200
+***************
+*** 5,8 ****
+--- 5,9 ----
+ call writefile(['vi:0', 'nothing'], 'Xmodeline')
+ call assert_fails('split Xmodeline', 'E518:')
+ bwipe!
++ call delete('Xmodeline')
+ endfunc
+*** ../vim-8.1.0207/src/version.c 2018-07-23 05:09:05.593235641 +0200
+--- src/version.c 2018-07-24 04:44:21.565053744 +0200
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 208,
+ /**/
+
+--
+E M A C S
+s e l o h
+c t t n i
+a a t f
+p r t
+e o
+ l
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0209 b/data/vim/patches/8.1.0209
new file mode 100644
index 000000000..01f570da6
--- /dev/null
+++ b/data/vim/patches/8.1.0209
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0209
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0209
+Problem: Stderr output from Ruby messes up display.
+Solution: Turn the stderr output into a Vim message. (Masataka Pocke
+ Kuwabara, closes #3238)
+Files: src/if_ruby.c
+
+
+*** ../vim-8.1.0208/src/if_ruby.c 2018-05-17 13:07:54.000000000 +0200
+--- src/if_ruby.c 2018-07-24 05:32:31.520411688 +0200
+***************
+*** 232,237 ****
+--- 232,238 ----
+ # define rb_define_singleton_method dll_rb_define_singleton_method
+ # define rb_define_virtual_variable dll_rb_define_virtual_variable
+ # define rb_stdout (*dll_rb_stdout)
++ # define rb_stderr (*dll_rb_stderr)
+ # define rb_eArgError (*dll_rb_eArgError)
+ # define rb_eIndexError (*dll_rb_eIndexError)
+ # define rb_eRuntimeError (*dll_rb_eRuntimeError)
+***************
+*** 360,365 ****
+--- 361,367 ----
+ static void (*dll_rb_define_singleton_method) (VALUE,const char*,VALUE(*)(),int);
+ static void (*dll_rb_define_virtual_variable) (const char*,VALUE(*)(),void(*)());
+ static VALUE *dll_rb_stdout;
++ static VALUE *dll_rb_stderr;
+ static VALUE *dll_rb_eArgError;
+ static VALUE *dll_rb_eIndexError;
+ static VALUE *dll_rb_eRuntimeError;
+***************
+*** 553,558 ****
+--- 555,561 ----
+ {"rb_define_singleton_method", (RUBY_PROC*)&dll_rb_define_singleton_method},
+ {"rb_define_virtual_variable", (RUBY_PROC*)&dll_rb_define_virtual_variable},
+ {"rb_stdout", (RUBY_PROC*)&dll_rb_stdout},
++ {"rb_stderr", (RUBY_PROC*)&dll_rb_stderr},
+ {"rb_eArgError", (RUBY_PROC*)&dll_rb_eArgError},
+ {"rb_eIndexError", (RUBY_PROC*)&dll_rb_eIndexError},
+ {"rb_eRuntimeError", (RUBY_PROC*)&dll_rb_eRuntimeError},
+***************
+*** 1542,1552 ****
+--- 1545,1559 ----
+ {
+ #ifndef DYNAMIC_RUBY
+ RUBYEXTERN VALUE rb_stdout;
++ RUBYEXTERN VALUE rb_stderr;
+ #endif
+
+ rb_stdout = rb_obj_alloc(rb_cObject);
++ rb_stderr = rb_obj_alloc(rb_cObject);
+ rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
+ rb_define_singleton_method(rb_stdout, "flush", f_nop, 0);
++ rb_define_singleton_method(rb_stderr, "write", vim_message, 1);
++ rb_define_singleton_method(rb_stderr, "flush", f_nop, 0);
+ rb_define_global_function("p", f_p, -1);
+ }
+
+*** ../vim-8.1.0208/src/version.c 2018-07-24 04:51:15.698271642 +0200
+--- src/version.c 2018-07-24 05:33:59.439933605 +0200
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 209,
+ /**/
+
+--
+Back up my hard drive? I can't find the reverse switch!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0210 b/data/vim/patches/8.1.0210
new file mode 100644
index 000000000..3c13732ed
--- /dev/null
+++ b/data/vim/patches/8.1.0210
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0210
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0210
+Problem: Still a few K&R function declarations.
+Solution: Use ANSI function declarations (Hirohito Higashi)
+Files: src/eval.c, src/evalfunc.c, src/list.c
+
+
+*** ../vim-8.1.0209/src/eval.c Sat Jul 14 17:24:57 2018
+--- src/eval.c Wed Jul 25 19:18:42 2018
+***************
+*** 9387,9394 ****
+ }
+
+ char_u *
+! typval_tostring(arg)
+! typval_T *arg;
+ {
+ char_u *tofree;
+ char_u numbuf[NUMBUFLEN];
+--- 9387,9393 ----
+ }
+
+ char_u *
+! typval_tostring(typval_T *arg)
+ {
+ char_u *tofree;
+ char_u numbuf[NUMBUFLEN];
+*** ../vim-8.1.0209/src/evalfunc.c Sun Jul 22 05:08:06 2018
+--- src/evalfunc.c Wed Jul 25 19:18:42 2018
+***************
+*** 2857,2865 ****
+ * "deletebufline()" function
+ */
+ static void
+! f_deletebufline(argvars, rettv)
+! typval_T *argvars;
+! typval_T *rettv;
+ {
+ buf_T *buf;
+ linenr_T first, last;
+--- 2857,2863 ----
+ * "deletebufline()" function
+ */
+ static void
+! f_deletebufline(typval_T *argvars, typval_T *rettv)
+ {
+ buf_T *buf;
+ linenr_T first, last;
+***************
+*** 10502,10510 ****
+ * "setbufline()" function
+ */
+ static void
+! f_setbufline(argvars, rettv)
+! typval_T *argvars;
+! typval_T *rettv;
+ {
+ linenr_T lnum;
+ buf_T *buf;
+--- 10500,10506 ----
+ * "setbufline()" function
+ */
+ static void
+! f_setbufline(typval_T *argvars, typval_T *rettv)
+ {
+ linenr_T lnum;
+ buf_T *buf;
+*** ../vim-8.1.0209/src/list.c Sat Feb 10 19:49:08 2018
+--- src/list.c Wed Jul 25 19:18:42 2018
+***************
+*** 479,487 ****
+ * Return FAIL when out of memory.
+ */
+ int
+! list_append_list(list1, list2)
+! list_T *list1;
+! list_T *list2;
+ {
+ listitem_T *li = listitem_alloc();
+
+--- 479,485 ----
+ * Return FAIL when out of memory.
+ */
+ int
+! list_append_list(list_T *list1, list_T *list2)
+ {
+ listitem_T *li = listitem_alloc();
+
+*** ../vim-8.1.0209/src/version.c Tue Jul 24 05:41:25 2018
+--- src/version.c Wed Jul 25 19:49:06 2018
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 210,
+ /**/
+
+--
+Even got a Datapoint 3600(?) with a DD50 connector instead of the
+usual DB25... what a nightmare trying to figure out the pinout
+for *that* with no spex...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0211 b/data/vim/patches/8.1.0211
new file mode 100644
index 000000000..3ce6e3644
--- /dev/null
+++ b/data/vim/patches/8.1.0211
@@ -0,0 +1,228 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0211
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0211
+Problem: Expanding a file name "~" results in $HOME. (Aidan Shafran)
+Solution: Change "~" to "./~" before expanding. (closes #3072)
+Files: src/testdir/test_expand.vim, src/ex_docmd.c, src/eval.c,
+ src/proto/eval.pro, src/evalfunc.c, src/if_cscope.c, src/misc1.c
+
+
+*** ../vim-8.1.0210/src/testdir/test_expand.vim Sun Jan 17 18:33:03 2016
+--- src/testdir/test_expand.vim Wed Jul 25 21:05:55 2018
+***************
+*** 39,41 ****
+--- 39,49 ----
+ call delete('Xdir ~ dir', 'd')
+ call assert_false(isdirectory('Xdir ~ dir'))
+ endfunc
++
++ func Test_expand_tilde_filename()
++ split ~
++ call assert_equal('~', expand('%'))
++ call assert_notequal(expand('%:p'), expand('~/'))
++ call assert_match('\~', expand('%:p'))
++ bwipe!
++ endfunc
+*** ../vim-8.1.0210/src/ex_docmd.c Sat Jul 7 16:41:10 2018
+--- src/ex_docmd.c Wed Jul 25 21:03:33 2018
+***************
+*** 10654,10659 ****
+--- 10654,10660 ----
+ int resultlen;
+ buf_T *buf;
+ int valid = VALID_HEAD + VALID_PATH; /* assume valid result */
++ int tilde_file = FALSE;
+ int spec_idx;
+ #ifdef FEAT_MODIFY_FNAME
+ int skip_mod = FALSE;
+***************
+*** 10720,10726 ****
+--- 10721,10730 ----
+ valid = 0; /* Must have ":p:h" to be valid */
+ }
+ else
++ {
+ result = curbuf->b_fname;
++ tilde_file = STRCMP(result, "~") == 0;
++ }
+ break;
+
+ case SPEC_HASH: /* '#' or "#99": alternate file */
+***************
+*** 10784,10790 ****
+--- 10788,10797 ----
+ valid = 0; /* Must have ":p:h" to be valid */
+ }
+ else
++ {
+ result = buf->b_fname;
++ tilde_file = STRCMP(result, "~") == 0;
++ }
+ }
+ break;
+
+***************
+*** 10877,10883 ****
+ #ifdef FEAT_MODIFY_FNAME
+ else if (!skip_mod)
+ {
+! valid |= modify_fname(src, usedlen, &result, &resultbuf,
+ &resultlen);
+ if (result == NULL)
+ {
+--- 10884,10890 ----
+ #ifdef FEAT_MODIFY_FNAME
+ else if (!skip_mod)
+ {
+! valid |= modify_fname(src, tilde_file, usedlen, &result, &resultbuf,
+ &resultlen);
+ if (result == NULL)
+ {
+*** ../vim-8.1.0210/src/eval.c Wed Jul 25 19:49:41 2018
+--- src/eval.c Wed Jul 25 21:05:06 2018
+***************
+*** 9690,9700 ****
+ */
+ int
+ modify_fname(
+! char_u *src, /* string with modifiers */
+! int *usedlen, /* characters after src that are used */
+! char_u **fnamep, /* file name so far */
+! char_u **bufp, /* buffer for allocated file name or NULL */
+! int *fnamelen) /* length of fnamep */
+ {
+ int valid = 0;
+ char_u *tail;
+--- 9690,9701 ----
+ */
+ int
+ modify_fname(
+! char_u *src, // string with modifiers
+! int tilde_file, // "~" is a file name, not $HOME
+! int *usedlen, // characters after src that are used
+! char_u **fnamep, // file name so far
+! char_u **bufp, // buffer for allocated file name or NULL
+! int *fnamelen) // length of fnamep
+ {
+ int valid = 0;
+ char_u *tail;
+***************
+*** 9724,9731 ****
+ || (*fnamep)[1] == '\\'
+ # endif
+ || (*fnamep)[1] == NUL)
+-
+ #endif
+ )
+ {
+ *fnamep = expand_env_save(*fnamep);
+--- 9725,9732 ----
+ || (*fnamep)[1] == '\\'
+ # endif
+ || (*fnamep)[1] == NUL)
+ #endif
++ && !(tilde_file && (*fnamep)[1] == NUL)
+ )
+ {
+ *fnamep = expand_env_save(*fnamep);
+*** ../vim-8.1.0210/src/proto/eval.pro Tue Jun 12 22:05:10 2018
+--- src/proto/eval.pro Wed Jul 25 21:03:50 2018
+***************
+*** 136,142 ****
+ int typval_compare(typval_T *typ1, typval_T *typ2, exptype_T type, int type_is, int ic);
+ char_u *typval_tostring(typval_T *arg);
+ int var_exists(char_u *var);
+! int modify_fname(char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen);
+ char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, typval_T *expr, char_u *flags);
+ void filter_map(typval_T *argvars, typval_T *rettv, int map);
+ /* vim: set ft=c : */
+--- 136,142 ----
+ int typval_compare(typval_T *typ1, typval_T *typ2, exptype_T type, int type_is, int ic);
+ char_u *typval_tostring(typval_T *arg);
+ int var_exists(char_u *var);
+! int modify_fname(char_u *src, int tilde_file, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen);
+ char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, typval_T *expr, char_u *flags);
+ void filter_map(typval_T *argvars, typval_T *rettv, int map);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0210/src/evalfunc.c Wed Jul 25 19:49:41 2018
+--- src/evalfunc.c Wed Jul 25 21:01:17 2018
+***************
+*** 3801,3807 ****
+ else
+ {
+ len = (int)STRLEN(fname);
+! (void)modify_fname(mods, &usedlen, &fname, &fbuf, &len);
+ }
+
+ rettv->v_type = VAR_STRING;
+--- 3801,3807 ----
+ else
+ {
+ len = (int)STRLEN(fname);
+! (void)modify_fname(mods, FALSE, &usedlen, &fname, &fbuf, &len);
+ }
+
+ rettv->v_type = VAR_STRING;
+*** ../vim-8.1.0210/src/if_cscope.c Sun Mar 4 16:07:23 2018
+--- src/if_cscope.c Wed Jul 25 21:10:45 2018
+***************
+*** 519,525 ****
+ #ifdef FEAT_MODIFY_FNAME
+ len = (int)STRLEN(fname);
+ fbuf = (char_u *)fname;
+! (void)modify_fname((char_u *)":p", &usedlen,
+ (char_u **)&fname, &fbuf, &len);
+ if (fname == NULL)
+ goto add_err;
+--- 519,525 ----
+ #ifdef FEAT_MODIFY_FNAME
+ len = (int)STRLEN(fname);
+ fbuf = (char_u *)fname;
+! (void)modify_fname((char_u *)":p", FALSE, &usedlen,
+ (char_u **)&fname, &fbuf, &len);
+ if (fname == NULL)
+ goto add_err;
+*** ../vim-8.1.0210/src/misc1.c Sat Jul 7 16:41:10 2018
+--- src/misc1.c Wed Jul 25 21:11:10 2018
+***************
+*** 4908,4914 ****
+ char_u *fbuf = NULL;
+
+ flen = (int)STRLEN(homedir_env);
+! (void)modify_fname((char_u *)":p", &usedlen,
+ &homedir_env, &fbuf, &flen);
+ flen = (int)STRLEN(homedir_env);
+ if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
+--- 4908,4914 ----
+ char_u *fbuf = NULL;
+
+ flen = (int)STRLEN(homedir_env);
+! (void)modify_fname((char_u *)":p", FALSE, &usedlen,
+ &homedir_env, &fbuf, &flen);
+ flen = (int)STRLEN(homedir_env);
+ if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
+*** ../vim-8.1.0210/src/version.c Wed Jul 25 19:49:41 2018
+--- src/version.c Wed Jul 25 21:18:08 2018
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 211,
+ /**/
+
+--
+You were lucky to have a LAKE! There were a hundred and sixty of
+us living in a small shoebox in the middle of the road.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0212 b/data/vim/patches/8.1.0212
new file mode 100644
index 000000000..aed136ba9
--- /dev/null
+++ b/data/vim/patches/8.1.0212
@@ -0,0 +1,253 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0212
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0212
+Problem: Preferred cursor column not set in interfaces.
+Solution: Set w_set_curswant when setting the cursor. (David Hotham,
+ closes #3060)
+Files: src/if_lua.c, src/if_mzsch.c, src/if_perl.xs, src/if_py_both.h,
+ src/if_ruby.c, src/if_tcl.c, src/testdir/test_lua.vim,
+ src/testdir/test_perl.vim, src/testdir/test_python2.vim,
+ src/testdir/test_python3.vim, src/testdir/test_ruby.vim,
+ src/testdir/test_tcl.vim
+
+
+*** ../vim-8.1.0211/src/if_lua.c Sat Jul 14 20:49:39 2018
+--- src/if_lua.c Wed Jul 25 21:55:11 2018
+***************
+*** 1377,1382 ****
+--- 1377,1383 ----
+ luaV_checksandbox(L);
+ #endif
+ w->w_cursor.col = v - 1;
++ w->w_set_curswant = TRUE;
+ update_screen(VALID);
+ }
+ else if (strncmp(s, "width", 5) == 0)
+*** ../vim-8.1.0211/src/if_mzsch.c Sun Oct 8 17:29:02 2017
+--- src/if_mzsch.c Wed Jul 25 21:55:11 2018
+***************
+*** 2132,2137 ****
+--- 2132,2138 ----
+
+ win->win->w_cursor.lnum = lnum;
+ win->win->w_cursor.col = col;
++ win->win->w_set_curswant = TRUE;
+ update_screen(VALID);
+
+ raise_if_error();
+*** ../vim-8.1.0211/src/if_perl.xs Sun Jul 22 07:31:04 2018
+--- src/if_perl.xs Wed Jul 25 21:55:11 2018
+***************
+*** 1691,1696 ****
+--- 1691,1697 ----
+ col = (int) SvIV(ST(2));
+ win->w_cursor.lnum = lnum;
+ win->w_cursor.col = col;
++ win->w_set_curswant = TRUE;
+ check_cursor(); /* put cursor on an existing line */
+ update_screen(NOT_VALID);
+ }
+*** ../vim-8.1.0211/src/if_py_both.h Sun Jul 22 04:30:16 2018
+--- src/if_py_both.h Wed Jul 25 21:55:11 2018
+***************
+*** 3985,3990 ****
+--- 3985,3991 ----
+
+ self->win->w_cursor.lnum = lnum;
+ self->win->w_cursor.col = col;
++ self->win->w_set_curswant = TRUE;
+ #ifdef FEAT_VIRTUALEDIT
+ self->win->w_cursor.coladd = 0;
+ #endif
+*** ../vim-8.1.0211/src/if_ruby.c Tue Jul 24 05:41:25 2018
+--- src/if_ruby.c Wed Jul 25 21:55:11 2018
+***************
+*** 1517,1522 ****
+--- 1517,1523 ----
+ col = RARRAY_PTR(pos)[1];
+ win->w_cursor.lnum = NUM2LONG(lnum);
+ win->w_cursor.col = NUM2UINT(col);
++ win->w_set_curswant = TRUE;
+ check_cursor(); /* put cursor on an existing line */
+ update_screen(NOT_VALID);
+ return Qnil;
+*** ../vim-8.1.0211/src/if_tcl.c Wed Jul 4 22:12:19 2018
+--- src/if_tcl.c Wed Jul 25 21:55:11 2018
+***************
+*** 1091,1096 ****
+--- 1091,1097 ----
+ /* TODO: should check column */
+ win->w_cursor.lnum = val1;
+ win->w_cursor.col = col2vim(val2);
++ win->w_set_curswant = TRUE;
+ flags |= FL_UPDATE_SCREEN;
+ break;
+
+*** ../vim-8.1.0211/src/testdir/test_lua.vim Sat Jul 7 23:07:35 2018
+--- src/testdir/test_lua.vim Wed Jul 25 21:55:11 2018
+***************
+*** 555,557 ****
+--- 555,574 ----
+ call delete('Xlua_file')
+ bwipe!
+ endfunc
++
++ func Test_set_cursor()
++ " Check that setting the cursor position works.
++ new
++ call setline(1, ['first line', 'second line'])
++ normal gg
++ lua << EOF
++ w = vim.window()
++ w.line = 1
++ w.col = 5
++ EOF
++ call assert_equal([1, 5], [line('.'), col('.')])
++
++ " Check that movement after setting cursor position keeps current column.
++ normal j
++ call assert_equal([2, 5], [line('.'), col('.')])
++ endfunc
+*** ../vim-8.1.0211/src/testdir/test_perl.vim Mon Jul 16 18:08:56 2018
+--- src/testdir/test_perl.vim Wed Jul 25 21:55:11 2018
+***************
+*** 258,260 ****
+--- 258,273 ----
+ --perl
+ %bw!
+ endfunc
++
++ func Test_set_cursor()
++ " Check that setting the cursor position works.
++ new
++ call setline(1, ['first line', 'second line'])
++ normal gg
++ perldo $curwin->Cursor(1, 5)
++ call assert_equal([1, 6], [line('.'), col('.')])
++
++ " Check that movement after setting cursor position keeps current column.
++ normal j
++ call assert_equal([2, 6], [line('.'), col('.')])
++ endfunc
+*** ../vim-8.1.0211/src/testdir/test_python2.vim Sun Jan 29 21:20:44 2017
+--- src/testdir/test_python2.vim Wed Jul 25 21:55:11 2018
+***************
+*** 22,24 ****
+--- 22,38 ----
+ bwipe!
+ bwipe!
+ endfunc
++
++ func Test_set_cursor()
++ " Check that setting the cursor position works.
++ py import vim
++ new
++ call setline(1, ['first line', 'second line'])
++ normal gg
++ pydo vim.current.window.cursor = (1, 5)
++ call assert_equal([1, 6], [line('.'), col('.')])
++
++ " Check that movement after setting cursor position keeps current column.
++ normal j
++ call assert_equal([2, 6], [line('.'), col('.')])
++ endfunc
+*** ../vim-8.1.0211/src/testdir/test_python3.vim Sun Jan 29 21:26:04 2017
+--- src/testdir/test_python3.vim Wed Jul 25 21:55:11 2018
+***************
+*** 1,4 ****
+! " Test for python 2 commands.
+ " TODO: move tests from test88.in here.
+
+ if !has('python3')
+--- 1,4 ----
+! " Test for python 3 commands.
+ " TODO: move tests from test88.in here.
+
+ if !has('python3')
+***************
+*** 22,24 ****
+--- 22,38 ----
+ bwipe!
+ bwipe!
+ endfunc
++
++ func Test_set_cursor()
++ " Check that setting the cursor position works.
++ py3 import vim
++ new
++ call setline(1, ['first line', 'second line'])
++ normal gg
++ py3do vim.current.window.cursor = (1, 5)
++ call assert_equal([1, 6], [line('.'), col('.')])
++
++ " Check that movement after setting cursor position keeps current column.
++ normal j
++ call assert_equal([2, 6], [line('.'), col('.')])
++ endfunc
+*** ../vim-8.1.0211/src/testdir/test_ruby.vim Wed Jan 31 20:11:21 2018
+--- src/testdir/test_ruby.vim Wed Jul 25 21:55:11 2018
+***************
+*** 57,59 ****
+--- 57,72 ----
+ call assert_fails('rubyfile ' . tempfile)
+ call delete(tempfile)
+ endfunc
++
++ func Test_set_cursor()
++ " Check that setting the cursor position works.
++ new
++ call setline(1, ['first line', 'second line'])
++ normal gg
++ rubydo $curwin.cursor = [1, 5]
++ call assert_equal([1, 6], [line('.'), col('.')])
++
++ " Check that movement after setting cursor position keeps current column.
++ normal j
++ call assert_equal([2, 6], [line('.'), col('.')])
++ endfunc
+*** ../vim-8.1.0211/src/testdir/test_tcl.vim Sat Jul 7 22:41:57 2018
+--- src/testdir/test_tcl.vim Wed Jul 25 21:58:09 2018
+***************
+*** 665,667 ****
+--- 665,680 ----
+
+ tcl unset bar
+ endfunc
++
++ func Test_set_cursor()
++ " Check that setting the cursor position works.
++ new
++ call setline(1, ['first line', 'second line'])
++ normal gg
++ tcldo $::vim::current(window) cursor 1 5
++ call assert_equal([1, 5], [line('.'), col('.')])
++
++ " Check that movement after setting cursor position keeps current column.
++ normal j
++ call assert_equal([2, 5], [line('.'), col('.')])
++ endfunc
+*** ../vim-8.1.0211/src/version.c Wed Jul 25 21:19:09 2018
+--- src/version.c Wed Jul 25 21:59:58 2018
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 212,
+ /**/
+
+--
+Yah, well, we had to carve our electrons out of driftwood we'd
+find. In the winter. Uphill. Both ways.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0213 b/data/vim/patches/8.1.0213
new file mode 100644
index 000000000..ce975306c
--- /dev/null
+++ b/data/vim/patches/8.1.0213
@@ -0,0 +1,197 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0213
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0213
+Problem: CTRL-W CR does not work properly in a quickfix window.
+Solution: Split the window if needed. (Jason Franklin)
+Files: src/normal.c, src/proto/quickfix.pro, src/quickfix.c,
+ src/testdir/test_quickfix.vim, src/window.c
+
+
+*** ../vim-8.1.0212/src/normal.c Tue Jun 12 22:05:10 2018
+--- src/normal.c Wed Jul 25 22:14:24 2018
+***************
+*** 6202,6219 ****
+ cap->arg = FORWARD;
+ nv_page(cap);
+ }
+- else
+ #if defined(FEAT_QUICKFIX)
+! /* In a quickfix window a <CR> jumps to the error under the cursor. */
+! if (bt_quickfix(curbuf) && cap->cmdchar == CAR)
+! {
+! if (curwin->w_llist_ref == NULL)
+! do_cmdline_cmd((char_u *)".cc"); /* quickfix window */
+! else
+! do_cmdline_cmd((char_u *)".ll"); /* location list window */
+! }
+! else
+ #endif
+ {
+ #ifdef FEAT_CMDWIN
+ /* In the cmdline window a <CR> executes the command. */
+--- 6202,6213 ----
+ cap->arg = FORWARD;
+ nv_page(cap);
+ }
+ #if defined(FEAT_QUICKFIX)
+! /* Quickfix window only: view the result under the cursor. */
+! else if (bt_quickfix(curbuf) && cap->cmdchar == CAR)
+! qf_view_result(FALSE);
+ #endif
++ else
+ {
+ #ifdef FEAT_CMDWIN
+ /* In the cmdline window a <CR> executes the command. */
+*** ../vim-8.1.0212/src/proto/quickfix.pro Thu May 17 13:52:49 2018
+--- src/proto/quickfix.pro Wed Jul 25 22:14:24 2018
+***************
+*** 7,12 ****
+--- 7,13 ----
+ void qf_age(exarg_T *eap);
+ void qf_history(exarg_T *eap);
+ void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after);
++ void qf_view_result(int split);
+ void ex_cwindow(exarg_T *eap);
+ void ex_cclose(exarg_T *eap);
+ void ex_copen(exarg_T *eap);
+*** ../vim-8.1.0212/src/quickfix.c Sun Jul 8 18:20:18 2018
+--- src/quickfix.c Wed Jul 25 22:35:13 2018
+***************
+*** 3490,3495 ****
+--- 3490,3531 ----
+ }
+
+ /*
++ * When "split" is FALSE: Open the entry/result under the cursor.
++ * When "split" is TRUE: Open the entry/result under the cursor in a new window.
++ */
++ void
++ qf_view_result(int split)
++ {
++ qf_info_T *qi = &ql_info;
++
++ if (!bt_quickfix(curbuf))
++ return;
++
++ if (IS_LL_WINDOW(curwin))
++ qi = GET_LOC_LIST(curwin);
++
++ if (qi == NULL || qi->qf_lists[qi->qf_curlist].qf_count == 0)
++ {
++ EMSG(_(e_quickfix));
++ return;
++ }
++
++ if (split)
++ {
++ char_u cmd[32];
++
++ vim_snprintf((char *)cmd, sizeof(cmd), "split +%ld%s",
++ (long)curwin->w_cursor.lnum,
++ IS_LL_WINDOW(curwin) ? "ll" : "cc");
++ if (do_cmdline_cmd(cmd) == OK)
++ do_cmdline_cmd((char_u *) "clearjumps");
++ return;
++ }
++
++ do_cmdline_cmd((char_u *)(IS_LL_WINDOW(curwin) ? ".ll" : ".cc"));
++ }
++
++ /*
+ * ":cwindow": open the quickfix window if we have errors to display,
+ * close it if not.
+ * ":lwindow": open the location list window if we have locations to display,
+*** ../vim-8.1.0212/src/testdir/test_quickfix.vim Sun Jul 8 16:01:04 2018
+--- src/testdir/test_quickfix.vim Wed Jul 25 22:14:24 2018
+***************
+*** 3504,3506 ****
+--- 3504,3524 ----
+ call assert_equal([' 1 abc:pat1: '],
+ \ split(execute('filter /pat1/ clist'), "\n"))
+ endfunc
++
++ " Tests for the "CTRL-W <CR>" command.
++ func Xview_result_split_tests(cchar)
++ call s:setup_commands(a:cchar)
++
++ " Test that "CTRL-W <CR>" in a qf/ll window fails with empty list.
++ call g:Xsetlist([])
++ Xopen
++ let l:win_count = winnr('$')
++ call assert_fails('execute "normal! \<C-W>\<CR>"', 'E42')
++ call assert_equal(l:win_count, winnr('$'))
++ Xclose
++ endfunc
++
++ func Test_view_result_split()
++ call Xview_result_split_tests('c')
++ call Xview_result_split_tests('l')
++ endfunc
+*** ../vim-8.1.0212/src/window.c Sun Jun 17 16:23:29 2018
+--- src/window.c Wed Jul 25 22:14:24 2018
+***************
+*** 520,542 ****
+ break;
+ #endif
+
+ case K_KENTER:
+ case CAR:
+- #if defined(FEAT_QUICKFIX)
+- /*
+- * In a quickfix window a <CR> jumps to the error under the
+- * cursor in a new window.
+- */
+ if (bt_quickfix(curbuf))
+! {
+! sprintf((char *)cbuf, "split +%ld%s",
+! (long)curwin->w_cursor.lnum,
+! (curwin->w_llist_ref == NULL) ? "cc" : "ll");
+! do_cmdline_cmd(cbuf);
+! }
+! #endif
+ break;
+!
+
+ /* CTRL-W g extended commands */
+ case 'g':
+--- 520,533 ----
+ break;
+ #endif
+
++ /* Quickfix window only: view the result under the cursor in a new split. */
++ #if defined(FEAT_QUICKFIX)
+ case K_KENTER:
+ case CAR:
+ if (bt_quickfix(curbuf))
+! qf_view_result(TRUE);
+ break;
+! #endif
+
+ /* CTRL-W g extended commands */
+ case 'g':
+*** ../vim-8.1.0212/src/version.c Wed Jul 25 22:02:32 2018
+--- src/version.c Wed Jul 25 22:23:40 2018
+***************
+*** 795,796 ****
+--- 795,798 ----
+ { /* Add new patch number below this line */
++ /**/
++ 213,
+ /**/
+
+--
+You got to work at a mill? Lucky! I got sent back to work in the
+acid-mines for my daily crust of stale bread... which not even the
+birds would eat.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0214 b/data/vim/patches/8.1.0214
new file mode 100644
index 000000000..6b67d1454
--- /dev/null
+++ b/data/vim/patches/8.1.0214
@@ -0,0 +1,66 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0214
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0214
+Problem: +autochdir feature not reported by has() or :version.
+Solution: Add the feature in the list.
+Files: src/evalfunc.c, src/version.c
+
+
+*** ../vim-8.1.0213/src/evalfunc.c 2018-07-25 21:19:09.363656976 +0200
+--- src/evalfunc.c 2018-07-27 22:01:31.050713281 +0200
+***************
+*** 6045,6050 ****
+--- 6045,6053 ----
+ "arabic",
+ #endif
+ "autocmd",
++ #ifdef FEAT_AUTOCHDIR
++ "autochdir",
++ #endif
+ #ifdef FEAT_AUTOSERVERNAME
+ "autoservername",
+ #endif
+*** ../vim-8.1.0213/src/version.c 2018-07-25 22:36:48.991518559 +0200
+--- src/version.c 2018-07-27 22:04:16.085747831 +0200
+***************
+*** 101,106 ****
+--- 101,111 ----
+ "-arabic",
+ #endif
+ "+autocmd",
++ #ifdef FEAT_AUTOCHDIR
++ "+autochdir",
++ #else
++ "-autochdir",
++ #endif
+ #ifdef FEAT_AUTOSERVERNAME
+ "+autoservername",
+ #else
+*** ../vim-8.1.0213/src/version.c 2018-07-25 22:36:48.991518559 +0200
+--- src/version.c 2018-07-27 22:04:16.085747831 +0200
+***************
+*** 795,796 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 214,
+ /**/
+
+--
+LAUNCELOT: At last! A call! A cry of distress ...
+ (he draws his sword, and turns to CONCORDE)
+ Concorde! Brave, Concorde ... you shall not have died in vain!
+CONCORDE: I'm not quite dead, sir ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0215 b/data/vim/patches/8.1.0215
new file mode 100644
index 000000000..c77c7106d
--- /dev/null
+++ b/data/vim/patches/8.1.0215
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0215
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0215
+Problem: No error if configure --with-x cannot configure X.
+Solution: Check that when --with-x is used X can be configured.
+Files: src/configure.ac, src/auto/configure
+
+
+*** ../vim-8.1.0214/src/configure.ac 2018-05-13 15:37:01.000000000 +0200
+--- src/configure.ac 2018-07-27 22:31:12.914547455 +0200
+***************
+*** 72,77 ****
+--- 72,80 ----
+ [fail_if_missing="no"])
+ AC_MSG_RESULT($fail_if_missing)
+
++ dnl Keep original value to check later.
++ with_x_arg="$with_x"
++
+ dnl Set default value for CFLAGS if none is defined or it's empty
+ if test -z "$CFLAGS"; then
+ CFLAGS="-O"
+***************
+*** 2283,2288 ****
+--- 2286,2296 ----
+ fi
+ fi
+
++ dnl Check if --with-x was given but it doesn't work.
++ if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
++ AC_MSG_ERROR([could not configure X])
++ fi
++
+ test "x$with_x" = xno -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
+
+ AC_MSG_CHECKING(--enable-gui argument)
+*** ../vim-8.1.0214/src/auto/configure 2018-05-13 15:38:02.000000000 +0200
+--- src/auto/configure 2018-07-27 22:31:16.926521603 +0200
+***************
+*** 4466,4471 ****
+--- 4466,4473 ----
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $fail_if_missing" >&5
+ $as_echo "$fail_if_missing" >&6; }
+
++ with_x_arg="$with_x"
++
+ if test -z "$CFLAGS"; then
+ CFLAGS="-O"
+ test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
+***************
+*** 9003,9008 ****
+--- 9005,9014 ----
+ fi
+ fi
+
++ if test "x$with_x" = xno -a "x$with_x_arg" = xyes; then
++ as_fn_error $? "could not configure X" "$LINENO" 5
++ fi
++
+ test "x$with_x" = xno -a "x$MACOS_X" != "xyes" -a "x$QNX" != "xyes" && enable_gui=no
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-gui argument" >&5
+*** ../vim-8.1.0214/src/version.c 2018-07-27 22:08:54.088115090 +0200
+--- src/version.c 2018-07-27 22:34:24.421319751 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 215,
+ /**/
+
+--
+Why doesn't Tarzan have a beard?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0216 b/data/vim/patches/8.1.0216
new file mode 100644
index 000000000..317e0e8ab
--- /dev/null
+++ b/data/vim/patches/8.1.0216
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0216
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0216
+Problem: Part of file not indented properly.
+Solution: Adjust the indent. (Ken Takata)
+Files: src/getchar.c
+
+
+*** ../vim-8.1.0215/src/getchar.c 2018-07-03 14:48:11.877218375 +0200
+--- src/getchar.c 2018-07-27 23:15:01.563375509 +0200
+***************
+*** 1710,1727 ****
+ * its ASCII equivalent */
+ switch (c)
+ {
+! case K_KPLUS: c = '+'; break;
+! case K_KMINUS: c = '-'; break;
+! case K_KDIVIDE: c = '/'; break;
+ case K_KMULTIPLY: c = '*'; break;
+! case K_KENTER: c = CAR; break;
+ case K_KPOINT:
+ #ifdef WIN32
+! /* Can be either '.' or a ',', *
+! * depending on the type of keypad. */
+! c = MapVirtualKey(VK_DECIMAL, 2); break;
+ #else
+! c = '.'; break;
+ #endif
+ case K_K0: c = '0'; break;
+ case K_K1: c = '1'; break;
+--- 1710,1727 ----
+ * its ASCII equivalent */
+ switch (c)
+ {
+! case K_KPLUS: c = '+'; break;
+! case K_KMINUS: c = '-'; break;
+! case K_KDIVIDE: c = '/'; break;
+ case K_KMULTIPLY: c = '*'; break;
+! case K_KENTER: c = CAR; break;
+ case K_KPOINT:
+ #ifdef WIN32
+! // Can be either '.' or a ',',
+! // depending on the type of keypad.
+! c = MapVirtualKey(VK_DECIMAL, 2); break;
+ #else
+! c = '.'; break;
+ #endif
+ case K_K0: c = '0'; break;
+ case K_K1: c = '1'; break;
+*** ../vim-8.1.0215/src/version.c 2018-07-27 22:35:12.309014484 +0200
+--- src/version.c 2018-07-27 23:15:46.891104698 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 216,
+ /**/
+
+--
+FIRST GUARD: Ah! Now ... we're not allowed to ...
+ SIR LAUNCELOT runs him through, grabs his spear and stabs the other
+ guard who collapses in a heap. Hiccoughs quietly.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0217 b/data/vim/patches/8.1.0217
new file mode 100644
index 000000000..c953b8fa2
--- /dev/null
+++ b/data/vim/patches/8.1.0217
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0217
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0217
+Problem: Compiler warning for variable set but not used.
+Solution: Move tilde_file inside #ifdef. (Hirohito Higashi, closes #3255)
+Files: src/ex_docmd.c
+
+
+*** ../vim-8.1.0216/src/ex_docmd.c 2018-07-25 21:19:09.355657022 +0200
+--- src/ex_docmd.c 2018-07-28 16:10:48.740329275 +0200
+***************
+*** 10654,10662 ****
+ int resultlen;
+ buf_T *buf;
+ int valid = VALID_HEAD + VALID_PATH; /* assume valid result */
+- int tilde_file = FALSE;
+ int spec_idx;
+ #ifdef FEAT_MODIFY_FNAME
+ int skip_mod = FALSE;
+ #endif
+ char_u strbuf[30];
+--- 10654,10662 ----
+ int resultlen;
+ buf_T *buf;
+ int valid = VALID_HEAD + VALID_PATH; /* assume valid result */
+ int spec_idx;
+ #ifdef FEAT_MODIFY_FNAME
++ int tilde_file = FALSE;
+ int skip_mod = FALSE;
+ #endif
+ char_u strbuf[30];
+***************
+*** 10723,10729 ****
+--- 10723,10731 ----
+ else
+ {
+ result = curbuf->b_fname;
++ #ifdef FEAT_MODIFY_FNAME
+ tilde_file = STRCMP(result, "~") == 0;
++ #endif
+ }
+ break;
+
+***************
+*** 10790,10796 ****
+--- 10792,10800 ----
+ else
+ {
+ result = buf->b_fname;
++ #ifdef FEAT_MODIFY_FNAME
+ tilde_file = STRCMP(result, "~") == 0;
++ #endif
+ }
+ }
+ break;
+*** ../vim-8.1.0216/src/version.c 2018-07-27 23:16:40.922781670 +0200
+--- src/version.c 2018-07-28 16:12:47.415624995 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 217,
+ /**/
+
+--
+ [clop clop]
+GUARD #1: Halt! Who goes there?
+ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of
+ Camelot. King of the Britons, defeator of the Saxons, sovereign of
+ all England!
+GUARD #1: Pull the other one!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0218 b/data/vim/patches/8.1.0218
new file mode 100644
index 000000000..27d77d5d0
--- /dev/null
+++ b/data/vim/patches/8.1.0218
@@ -0,0 +1,253 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0218
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0218
+Problem: Cannot add matches to another window. (Qiming Zhao)
+Solution: Add the "window" argument to matchadd() and matchaddpos().
+ (closes #3260)
+Files: src/evalfunc.c, runtime/doc/eval.txt, src/testdir/test_match.vim
+
+
+*** ../vim-8.1.0217/src/evalfunc.c 2018-07-27 22:08:54.084115114 +0200
+--- src/evalfunc.c 2018-07-28 16:38:54.045497084 +0200
+***************
+*** 7988,7993 ****
+--- 7988,8023 ----
+ find_some_match(argvars, rettv, MATCH_MATCH);
+ }
+
++ #ifdef FEAT_SEARCH_EXTRA
++ static int
++ matchadd_dict_arg(typval_T *tv, char_u **conceal_char, win_T **win)
++ {
++ dictitem_T *di;
++
++ if (tv->v_type != VAR_DICT)
++ {
++ EMSG(_(e_dictreq));
++ return FAIL;
++ }
++
++ if (dict_find(tv->vval.v_dict, (char_u *)"conceal", -1) != NULL)
++ *conceal_char = get_dict_string(tv->vval.v_dict,
++ (char_u *)"conceal", FALSE);
++
++ if ((di = dict_find(tv->vval.v_dict, (char_u *)"window", -1)) != NULL)
++ {
++ *win = find_win_by_nr(&di->di_tv, NULL);
++ if (*win == NULL)
++ {
++ EMSG(_("E957: Invalid window number"));
++ return FAIL;
++ }
++ }
++
++ return OK;
++ }
++ #endif
++
+ /*
+ * "matchadd()" function
+ */
+***************
+*** 8002,8007 ****
+--- 8032,8038 ----
+ int id = -1;
+ int error = FALSE;
+ char_u *conceal_char = NULL;
++ win_T *win = curwin;
+
+ rettv->vval.v_number = -1;
+
+***************
+*** 8013,8030 ****
+ if (argvars[3].v_type != VAR_UNKNOWN)
+ {
+ id = (int)get_tv_number_chk(&argvars[3], &error);
+! if (argvars[4].v_type != VAR_UNKNOWN)
+! {
+! if (argvars[4].v_type != VAR_DICT)
+! {
+! EMSG(_(e_dictreq));
+! return;
+! }
+! if (dict_find(argvars[4].vval.v_dict,
+! (char_u *)"conceal", -1) != NULL)
+! conceal_char = get_dict_string(argvars[4].vval.v_dict,
+! (char_u *)"conceal", FALSE);
+! }
+ }
+ }
+ if (error == TRUE)
+--- 8044,8052 ----
+ if (argvars[3].v_type != VAR_UNKNOWN)
+ {
+ id = (int)get_tv_number_chk(&argvars[3], &error);
+! if (argvars[4].v_type != VAR_UNKNOWN
+! && matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL)
+! return;
+ }
+ }
+ if (error == TRUE)
+***************
+*** 8035,8041 ****
+ return;
+ }
+
+! rettv->vval.v_number = match_add(curwin, grp, pat, prio, id, NULL,
+ conceal_char);
+ #endif
+ }
+--- 8057,8063 ----
+ return;
+ }
+
+! rettv->vval.v_number = match_add(win, grp, pat, prio, id, NULL,
+ conceal_char);
+ #endif
+ }
+***************
+*** 8054,8059 ****
+--- 8076,8082 ----
+ int error = FALSE;
+ list_T *l;
+ char_u *conceal_char = NULL;
++ win_T *win = curwin;
+
+ rettv->vval.v_number = -1;
+
+***************
+*** 8076,8093 ****
+ if (argvars[3].v_type != VAR_UNKNOWN)
+ {
+ id = (int)get_tv_number_chk(&argvars[3], &error);
+! if (argvars[4].v_type != VAR_UNKNOWN)
+! {
+! if (argvars[4].v_type != VAR_DICT)
+! {
+! EMSG(_(e_dictreq));
+! return;
+! }
+! if (dict_find(argvars[4].vval.v_dict,
+! (char_u *)"conceal", -1) != NULL)
+! conceal_char = get_dict_string(argvars[4].vval.v_dict,
+! (char_u *)"conceal", FALSE);
+! }
+ }
+ }
+ if (error == TRUE)
+--- 8099,8108 ----
+ if (argvars[3].v_type != VAR_UNKNOWN)
+ {
+ id = (int)get_tv_number_chk(&argvars[3], &error);
+!
+! if (argvars[4].v_type != VAR_UNKNOWN
+! && matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL)
+! return;
+ }
+ }
+ if (error == TRUE)
+***************
+*** 8100,8106 ****
+ return;
+ }
+
+! rettv->vval.v_number = match_add(curwin, group, NULL, prio, id, l,
+ conceal_char);
+ #endif
+ }
+--- 8115,8121 ----
+ return;
+ }
+
+! rettv->vval.v_number = match_add(win, group, NULL, prio, id, l,
+ conceal_char);
+ #endif
+ }
+*** ../vim-8.1.0217/runtime/doc/eval.txt 2018-07-15 17:01:06.361425488 +0200
+--- runtime/doc/eval.txt 2018-07-28 16:54:21.839764726 +0200
+***************
+*** 6015,6021 ****
+ the pattern. 'smartcase' is NOT used. The matching is always
+ done like 'magic' is set and 'cpoptions' is empty.
+
+! *matchadd()* *E798* *E799* *E801*
+ matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
+ Defines a pattern to be highlighted in the current window (a
+ "match"). It will be highlighted with {group}. Returns an
+--- 6016,6022 ----
+ the pattern. 'smartcase' is NOT used. The matching is always
+ done like 'magic' is set and 'cpoptions' is empty.
+
+! *matchadd()* *E798* *E799* *E801* *E957*
+ matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
+ Defines a pattern to be highlighted in the current window (a
+ "match"). It will be highlighted with {group}. Returns an
+***************
+*** 6054,6059 ****
+--- 6055,6062 ----
+ conceal Special character to show instead of the
+ match (only for |hl-Conceal| highlighted
+ matches, see |:syn-cchar|)
++ window Instead of the current window use the
++ window with this number or window ID.
+
+ The number of matches is not limited, as it is the case with
+ the |:match| commands.
+*** ../vim-8.1.0217/src/testdir/test_match.vim 2017-09-14 14:16:37.000000000 +0200
+--- src/testdir/test_match.vim 2018-07-28 16:51:59.280637174 +0200
+***************
+*** 192,197 ****
+--- 192,219 ----
+ set hlsearch&
+ endfunc
+
++ func Test_matchaddpos_otherwin()
++ syntax on
++ new
++ call setline(1, ['12345', 'NP'])
++ let winid = win_getid()
++
++ wincmd w
++ call matchadd('Search', '4', 10, -1, {'window': winid})
++ call matchaddpos('Error', [[1,2], [2,2]], 10, -1, {'window': winid})
++ redraw!
++ call assert_notequal(screenattr(1,2), 0)
++ call assert_notequal(screenattr(1,4), 0)
++ call assert_notequal(screenattr(2,2), 0)
++ call assert_equal(screenattr(1,2), screenattr(2,2))
++ call assert_notequal(screenattr(1,2), screenattr(1,4))
++
++ wincmd w
++ bwipe!
++ call clearmatches()
++ syntax off
++ endfunc
++
+ func Test_matchaddpos_using_negative_priority()
+ set hlsearch
+
+*** ../vim-8.1.0217/src/version.c 2018-07-28 16:14:26.131040141 +0200
+--- src/version.c 2018-07-28 16:40:26.416917394 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 218,
+ /**/
+
+--
+'I generally avoid temptation unless I can't resist it."
+ -- Mae West
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0219 b/data/vim/patches/8.1.0219
new file mode 100644
index 000000000..eae18c16a
--- /dev/null
+++ b/data/vim/patches/8.1.0219
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0219
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0219
+Problem: Expanding ## fails to escape backtick.
+Solution: Escape a backtick in a file name. (closes #3257)
+Files: src/ex_docmd.c, src/testdir/test_edit.vim
+
+
+*** ../vim-8.1.0218/src/ex_docmd.c 2018-07-28 16:14:26.131040141 +0200
+--- src/ex_docmd.c 2018-07-28 17:02:45.729605564 +0200
+***************
+*** 10954,10960 ****
+ #ifndef BACKSLASH_IN_FILENAME
+ || *p == '\\'
+ #endif
+! )
+ {
+ /* insert a backslash */
+ if (retval != NULL)
+--- 10954,10960 ----
+ #ifndef BACKSLASH_IN_FILENAME
+ || *p == '\\'
+ #endif
+! || *p == '`')
+ {
+ /* insert a backslash */
+ if (retval != NULL)
+*** ../vim-8.1.0218/src/testdir/test_edit.vim 2018-06-06 21:03:57.780523901 +0200
+--- src/testdir/test_edit.vim 2018-07-28 17:05:00.900978753 +0200
+***************
+*** 1375,1380 ****
+--- 1375,1388 ----
+ set swapfile&
+ endfunc
+
++ func Test_edit_backtick()
++ next a\`b c
++ call assert_equal('a`b', expand('%'))
++ next
++ call assert_equal('c', expand('%'))
++ call assert_equal('a\`b c', expand('##'))
++ endfunc
++
+ func Test_edit_quit()
+ edit foo.txt
+ split
+*** ../vim-8.1.0218/src/version.c 2018-07-28 16:55:51.439217124 +0200
+--- src/version.c 2018-07-28 17:07:37.140211824 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 219,
+ /**/
+
+--
+Veni, Vidi, Video -- I came, I saw, I taped what I saw.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0220 b/data/vim/patches/8.1.0220
new file mode 100644
index 000000000..523cbc277
--- /dev/null
+++ b/data/vim/patches/8.1.0220
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0220
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0220
+Problem: Ruby converts v:true and v:false to a number.
+Solution: Use Qtrue and Qfalse instead. (Masataka Pocke Kuwabara,
+ closes #3259)
+Files: src/if_ruby.c, src/testdir/test_ruby.vim
+
+
+*** ../vim-8.1.0219/src/if_ruby.c 2018-07-25 22:02:32.231966301 +0200
+--- src/if_ruby.c 2018-07-28 17:12:56.698546960 +0200
+***************
+*** 1085,1092 ****
+ }
+ else if (tv->v_type == VAR_SPECIAL)
+ {
+! if (tv->vval.v_number <= VVAL_TRUE)
+! result = INT2NUM(tv->vval.v_number);
+ } /* else return Qnil; */
+
+ return result;
+--- 1085,1094 ----
+ }
+ else if (tv->v_type == VAR_SPECIAL)
+ {
+! if (tv->vval.v_number == VVAL_TRUE)
+! result = Qtrue;
+! else if (tv->vval.v_number == VVAL_FALSE)
+! result = Qfalse;
+ } /* else return Qnil; */
+
+ return result;
+*** ../vim-8.1.0219/src/testdir/test_ruby.vim 2018-07-25 22:02:32.235966277 +0200
+--- src/testdir/test_ruby.vim 2018-07-28 17:12:56.698546960 +0200
+***************
+*** 33,38 ****
+--- 33,46 ----
+ call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
+ endfunc
+
++ func Test_ruby_evaluate_special_var()
++ let l = [v:true, v:false, v:null, v:none]
++ redir => l:out
++ ruby d = Vim.evaluate("l"); print d
++ redir END
++ call assert_equal(['[true, false, nil, nil]'], split(l:out, "\n"))
++ endfunc
++
+ func Test_rubydo()
+ " Check deleting lines does not trigger ml_get error.
+ new
+*** ../vim-8.1.0219/src/version.c 2018-07-28 17:07:48.608154066 +0200
+--- src/version.c 2018-07-28 17:14:20.930093228 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 220,
+ /**/
+
+--
+A real patriot is the fellow who gets a parking ticket and rejoices
+that the system works.
+
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0221 b/data/vim/patches/8.1.0221
new file mode 100644
index 000000000..cef2ca8ce
--- /dev/null
+++ b/data/vim/patches/8.1.0221
@@ -0,0 +1,463 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0221
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0221
+Problem: Not enough testing for the Ruby interface.
+Solution: Add more tests. (Dominique Pelle, closes #3252)
+Files: runtime/doc/if_ruby.txt, src/testdir/test_ruby.vim
+
+
+*** ../vim-8.1.0220/runtime/doc/if_ruby.txt 2018-05-17 13:41:41.000000000 +0200
+--- runtime/doc/if_ruby.txt 2018-07-28 17:20:52.903932857 +0200
+***************
+*** 145,151 ****
+
+ Methods:
+
+! name Returns the name of the buffer.
+ number Returns the number of the buffer.
+ count Returns the number of lines.
+ length Returns the number of lines.
+--- 145,151 ----
+
+ Methods:
+
+! name Returns the full name of the buffer.
+ number Returns the number of the buffer.
+ count Returns the number of lines.
+ length Returns the number of lines.
+***************
+*** 181,186 ****
+--- 181,187 ----
+ width Returns the width of the window.
+ width = {n} Sets the window width to {n}.
+ cursor Returns a [row, col] array for the cursor position.
++ First line number is 1 and first column number is 0.
+ cursor = [{row}, {col}]
+ Sets the cursor position to {row} and {col}.
+
+*** ../vim-8.1.0220/src/testdir/test_ruby.vim 2018-07-28 17:18:05.164865356 +0200
+--- src/testdir/test_ruby.vim 2018-07-28 17:27:53.037565797 +0200
+***************
+*** 4,9 ****
+--- 4,16 ----
+ finish
+ end
+
++ " Helper function as there is no builtin rubyeval() function similar
++ " to perleval, luaevel() or pyeval().
++ func RubyEval(ruby_expr)
++ let s = split(execute('ruby print ' . a:ruby_expr), "\n")
++ return (len(s) == 0) ? '' : s[-1]
++ endfunc
++
+ func Test_ruby_change_buffer()
+ call setline(line('$'), ['1 line 1'])
+ ruby Vim.command("normal /^1\n")
+***************
+*** 11,46 ****
+ call assert_equal('1 changed line 1', getline('$'))
+ endfunc
+
+- func Test_ruby_evaluate_list()
+- call setline(line('$'), ['2 line 2'])
+- ruby Vim.command("normal /^2\n")
+- let l = ["abc", "def"]
+- ruby << EOF
+- curline = $curbuf.line_number
+- l = Vim.evaluate("l");
+- $curbuf.append(curline, l.join("\n"))
+- EOF
+- normal j
+- .rubydo $_ = $_.gsub(/\n/, '/')
+- call assert_equal('abc/def', getline('$'))
+- endfunc
+-
+- func Test_ruby_evaluate_dict()
+- let d = {'a': 'foo', 'b': 123}
+- redir => l:out
+- ruby d = Vim.evaluate("d"); print d
+- redir END
+- call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
+- endfunc
+-
+- func Test_ruby_evaluate_special_var()
+- let l = [v:true, v:false, v:null, v:none]
+- redir => l:out
+- ruby d = Vim.evaluate("l"); print d
+- redir END
+- call assert_equal(['[true, false, nil, nil]'], split(l:out, "\n"))
+- endfunc
+-
+ func Test_rubydo()
+ " Check deleting lines does not trigger ml_get error.
+ new
+--- 18,23 ----
+***************
+*** 54,61 ****
+ call setline(1, ['one', 'two', 'three'])
+ rubydo Vim.command("new")
+ call assert_equal(wincount + 1, winnr('$'))
+! bwipe!
+! bwipe!
+ endfunc
+
+ func Test_rubyfile()
+--- 31,37 ----
+ call setline(1, ['one', 'two', 'three'])
+ rubydo Vim.command("new")
+ call assert_equal(wincount + 1, winnr('$'))
+! %bwipe!
+ endfunc
+
+ func Test_rubyfile()
+***************
+*** 73,80 ****
+--- 49,366 ----
+ normal gg
+ rubydo $curwin.cursor = [1, 5]
+ call assert_equal([1, 6], [line('.'), col('.')])
++ call assert_equal('[1, 5]', RubyEval('$curwin.cursor'))
+
+ " Check that movement after setting cursor position keeps current column.
+ normal j
+ call assert_equal([2, 6], [line('.'), col('.')])
++ call assert_equal('[2, 5]', RubyEval('$curwin.cursor'))
++
++ call assert_fails('ruby $curwin.cursor = [1]',
++ \ 'ArgumentError: array length must be 2')
++ bwipe!
++ endfunc
++
++ " Test buffer.count and buffer.length (number of lines in buffer)
++ func Test_buffer_count()
++ new
++ call setline(1, ['one', 'two', 'three'])
++ call assert_equal('3', RubyEval('$curbuf.count'))
++ call assert_equal('3', RubyEval('$curbuf.length'))
++ bwipe!
++ endfunc
++
++ " Test buffer.name (buffer name)
++ func Test_buffer_name()
++ new Xfoo
++ call assert_equal(expand('%:p'), RubyEval('$curbuf.name'))
++ bwipe
++ call assert_equal('', RubyEval('$curbuf.name'))
++ endfunc
++
++ " Test buffer.number (number of the buffer).
++ func Test_buffer_number()
++ new
++ call assert_equal(string(bufnr('%')), RubyEval('$curbuf.number'))
++ new
++ call assert_equal(string(bufnr('%')), RubyEval('$curbuf.number'))
++
++ %bwipe
++ endfunc
++
++ " Test buffer.delete({n}) (delete line {n})
++ func Test_buffer_delete()
++ new
++ call setline(1, ['one', 'two', 'three'])
++ ruby $curbuf.delete(2)
++ call assert_equal(['one', 'three'], getline(1, '$'))
++
++ call assert_fails('ruby $curbuf.delete(0)', 'IndexError: line number 0 out of range')
++ call assert_fails('ruby $curbuf.delete(3)', 'IndexError: line number 3 out of range')
++
++ bwipe!
++ endfunc
++
++ " Test buffer.append({str}, str) (append line {str} after line {n})
++ func Test_buffer_append()
++ new
++ ruby $curbuf.append(0, 'one')
++ ruby $curbuf.append(1, 'three')
++ ruby $curbuf.append(1, 'two')
++ ruby $curbuf.append(4, 'four')
++
++ call assert_equal(['one', 'two', 'three', '', 'four'], getline(1, '$'))
++
++ call assert_fails('ruby $curbuf.append(-1, "x")',
++ \ 'IndexError: line number -1 out of range')
++ call assert_fails('ruby $curbuf.append(6, "x")',
++ \ 'IndexError: line number 6 out of range')
++
++ bwipe!
++ endfunc
++
++ " Test buffer.line (get or set the current line)
++ func Test_buffer_line()
++ new
++ call setline(1, ['one', 'two', 'three'])
++ 2
++ call assert_equal('two', RubyEval('$curbuf.line'))
++
++ ruby $curbuf.line = 'TWO'
++ call assert_equal(['one', 'TWO', 'three'], getline(1, '$'))
++
++ bwipe!
++ endfunc
++
++ " Test buffer.line_number (get current line number)
++ func Test_buffer_line_number()
++ new
++ call setline(1, ['one', 'two', 'three'])
++ 2
++ call assert_equal('2', RubyEval('$curbuf.line_number'))
++
++ bwipe!
++ endfunc
++
++ func Test_buffer_get()
++ new
++ call setline(1, ['one', 'two'])
++ call assert_equal('one', RubyEval('$curbuf[1]'))
++ call assert_equal('two', RubyEval('$curbuf[2]'))
++
++ call assert_fails('ruby $curbuf[0]',
++ \ 'IndexError: line number 0 out of range')
++ call assert_fails('ruby $curbuf[3]',
++ \ 'IndexError: line number 3 out of range')
++
++ bwipe!
++ endfunc
++
++ func Test_buffer_set()
++ new
++ call setline(1, ['one', 'two'])
++ ruby $curbuf[2] = 'TWO'
++ ruby $curbuf[1] = 'ONE'
++
++ call assert_fails('ruby $curbuf[0] = "ZERO"',
++ \ 'IndexError: line number 0 out of range')
++ call assert_fails('ruby $curbuf[3] = "THREE"',
++ \ 'IndexError: line number 3 out of range')
++ bwipe!
++ endfunc
++
++ " Test window.width (get or set window height).
++ func Test_window_height()
++ new
++
++ " Test setting window height
++ ruby $curwin.height = 2
++ call assert_equal(2, winheight(0))
++
++ " Test getting window height
++ call assert_equal('2', RubyEval('$curwin.height'))
++
++ bwipe
++ endfunc
++
++ " Test window.width (get or set window width).
++ func Test_window_width()
++ vnew
++
++ " Test setting window width
++ ruby $curwin.width = 2
++ call assert_equal(2, winwidth(0))
++
++ " Test getting window width
++ call assert_equal('2', RubyEval('$curwin.width'))
++
++ bwipe
++ endfunc
++
++ " Test window.buffer (get buffer object of a window object).
++ func Test_window_buffer()
++ new Xfoo1
++ new Xfoo2
++ ruby $b2 = $curwin.buffer
++ ruby $w2 = $curwin
++ wincmd j
++ ruby $b1 = $curwin.buffer
++ ruby $w1 = $curwin
++
++ call assert_equal(RubyEval('$b1'), RubyEval('$w1.buffer'))
++ call assert_equal(RubyEval('$b2'), RubyEval('$w2.buffer'))
++ call assert_equal(string(bufnr('Xfoo1')), RubyEval('$w1.buffer.number'))
++ call assert_equal(string(bufnr('Xfoo2')), RubyEval('$w2.buffer.number'))
++
++ ruby $b1, $w1, $b2, $w2 = nil
++ %bwipe
++ endfunc
++
++ " Test Vim::Window.current (get current window object)
++ func Test_Vim_window_current()
++ let cw = RubyEval('$curwin')
++ call assert_equal(cw, RubyEval('Vim::Window.current'))
++ call assert_match('^#<Vim::Window:0x\x\+>$', cw)
++ endfunc
++
++ " Test Vim::Window.count (number of windows)
++ func Test_Vim_window_count()
++ new Xfoo1
++ new Xfoo2
++ split
++ call assert_equal('4', RubyEval('Vim::Window.count'))
++ %bwipe
++ call assert_equal('1', RubyEval('Vim::Window.count'))
++ endfunc
++
++ " Test Vim::Window[n] (get window object of window n)
++ func Test_Vim_window_get()
++ new Xfoo1
++ new Xfoo2
++ call assert_match('Xfoo2$', RubyEval('Vim::Window[0].buffer.name'))
++ wincmd j
++ call assert_match('Xfoo1$', RubyEval('Vim::Window[1].buffer.name'))
++ wincmd j
++ call assert_equal('', RubyEval('Vim::Window[2].buffer.name'))
++ %bwipe
++ endfunc
++
++ " Test Vim::Buffer.current (return the buffer object of current buffer)
++ func Test_Vim_buffer_current()
++ let cb = RubyEval('$curbuf')
++ call assert_equal(cb, RubyEval('Vim::Buffer.current'))
++ call assert_match('^#<Vim::Buffer:0x\x\+>$', cb)
++ endfunc
++
++ " Test Vim::Buffer:.count (return the number of buffers)
++ func Test_Vim_buffer_count()
++ new Xfoo1
++ new Xfoo2
++ call assert_equal('3', RubyEval('Vim::Buffer.count'))
++ %bwipe
++ call assert_equal('1', RubyEval('Vim::Buffer.count'))
++ endfunc
++
++ " Test Vim::buffer[n] (return the buffer object of buffer number n)
++ func Test_Vim_buffer_get()
++ new Xfoo1
++ new Xfoo2
++
++ " Index of Vim::Buffer[n] goes from 0 to the number of buffers.
++ call assert_equal('', RubyEval('Vim::Buffer[0].name'))
++ call assert_match('Xfoo1$', RubyEval('Vim::Buffer[1].name'))
++ call assert_match('Xfoo2$', RubyEval('Vim::Buffer[2].name'))
++ call assert_fails('ruby print Vim::Buffer[3].name',
++ \ "NoMethodError: undefined method `name' for nil:NilClass")
++ %bwipe
++ endfunc
++
++ " Test Vim::command({cmd}) (execute a Ex command))
++ " Test Vim::command({cmd})
++ func Test_Vim_command()
++ new
++ call setline(1, ['one', 'two', 'three', 'four'])
++ ruby Vim::command('2,3d')
++ call assert_equal(['one', 'four'], getline(1, '$'))
++ bwipe!
++ endfunc
++
++ " Test Vim::set_option (set a vim option)
++ func Test_Vim_set_option()
++ call assert_equal(0, &number)
++ ruby Vim::set_option('number')
++ call assert_equal(1, &number)
++ ruby Vim::set_option('nonumber')
++ call assert_equal(0, &number)
++ endfunc
++
++ func Test_Vim_evaluate()
++ call assert_equal('123', RubyEval('Vim::evaluate("123")'))
++ " Vim::evaluate("123").class gives Integer or Fixnum depending
++ " on versions of Ruby.
++ call assert_match('^Integer\|Fixnum$', RubyEval('Vim::evaluate("123").class'))
++
++ call assert_equal('1.23', RubyEval('Vim::evaluate("1.23")'))
++ call assert_equal('Float', RubyEval('Vim::evaluate("1.23").class'))
++
++ call assert_equal('foo', RubyEval('Vim::evaluate("\"foo\"")'))
++ call assert_equal('String', RubyEval('Vim::evaluate("\"foo\"").class'))
++
++ call assert_equal('[1, 2]', RubyEval('Vim::evaluate("[1, 2]")'))
++ call assert_equal('Array', RubyEval('Vim::evaluate("[1, 2]").class'))
++
++ call assert_equal('{"1"=>2}', RubyEval('Vim::evaluate("{1:2}")'))
++ call assert_equal('Hash', RubyEval('Vim::evaluate("{1:2}").class'))
++
++ call assert_equal('', RubyEval('Vim::evaluate("v:null")'))
++ call assert_equal('NilClass', RubyEval('Vim::evaluate("v:null").class'))
++
++ call assert_equal('', RubyEval('Vim::evaluate("v:none")'))
++ call assert_equal('NilClass', RubyEval('Vim::evaluate("v:none").class'))
++
++ call assert_equal('true', RubyEval('Vim::evaluate("v:true")'))
++ call assert_equal('TrueClass', RubyEval('Vim::evaluate("v:true").class'))
++ call assert_equal('false', RubyEval('Vim::evaluate("v:false")'))
++ call assert_equal('FalseClass',RubyEval('Vim::evaluate("v:false").class'))
++ endfunc
++
++ func Test_Vim_evaluate_list()
++ call setline(line('$'), ['2 line 2'])
++ ruby Vim.command("normal /^2\n")
++ let l = ["abc", "def"]
++ ruby << EOF
++ curline = $curbuf.line_number
++ l = Vim.evaluate("l");
++ $curbuf.append(curline, l.join("\n"))
++ EOF
++ normal j
++ .rubydo $_ = $_.gsub(/\n/, '/')
++ call assert_equal('abc/def', getline('$'))
++ endfunc
++
++ func Test_Vim_evaluate_dict()
++ let d = {'a': 'foo', 'b': 123}
++ redir => l:out
++ ruby d = Vim.evaluate("d"); print d
++ redir END
++ call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
++ endfunc
++
++ " Test Vim::message({msg}) (display message {msg})
++ func Test_Vim_message()
++ ruby Vim::message('A message')
++ let messages = split(execute('message'), "\n")
++ call assert_equal('A message', messages[-1])
++ endfunc
++
++ func Test_print()
++ ruby print "Hello World!"
++ let messages = split(execute('message'), "\n")
++ call assert_equal('Hello World!', messages[-1])
++ endfunc
++
++ func Test_p()
++ ruby p 'Just a test'
++ let messages = split(execute('message'), "\n")
++ call assert_equal('"Just a test"', messages[-1])
+ endfunc
+*** ../vim-8.1.0220/src/version.c 2018-07-28 17:18:05.164865356 +0200
+--- src/version.c 2018-07-28 17:22:07.999512544 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 221,
+ /**/
+
+--
+GUARD #1: What, ridden on a horse?
+ARTHUR: Yes!
+GUARD #1: You're using coconuts!
+ARTHUR: What?
+GUARD #1: You've got two empty halves of coconut and you're bangin' 'em
+ together.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0222 b/data/vim/patches/8.1.0222
new file mode 100644
index 000000000..1ee0bfcd5
--- /dev/null
+++ b/data/vim/patches/8.1.0222
@@ -0,0 +1,145 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0222
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0222
+Problem: Errors are reported for "make install".
+Solution: Skip missing language files. (Christian Brabandt, closes #3254)
+Files: src/installman.sh
+
+
+*** ../vim-8.1.0221/src/installman.sh 2017-04-21 22:52:39.000000000 +0200
+--- src/installman.sh 2018-07-28 18:10:51.863723506 +0200
+***************
+*** 48,88 ****
+
+ if test $what = "install"; then
+ # vim.1
+! echo installing $destdir/$exename.1
+! LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+! -e s+$vimloc/doc+$helpsubloc+ \
+! -e s+$vimloc/print+$printsubloc+ \
+! -e s+$vimloc/syntax+$synsubloc+ \
+! -e s+$vimloc/tutor+$tutorsubloc+ \
+! -e s+$vimloc/vimrc+$vimrcloc/vimrc+ \
+! -e s+$vimloc/gvimrc+$vimrcloc/gvimrc+ \
+! -e s+$vimloc/menu.vim+$scriptloc/menu.vim+ \
+! -e s+$vimloc/bugreport.vim+$scriptloc/bugreport.vim+ \
+! -e s+$vimloc/filetype.vim+$scriptloc/filetype.vim+ \
+! -e s+$vimloc/scripts.vim+$scriptloc/scripts.vim+ \
+! -e s+$vimloc/optwin.vim+$scriptloc/optwin.vim+ \
+! -e 's+$vimloc/\*.ps+$scriptloc/\*.ps+' \
+! $helpsource/vim$langadd.1 > $destdir/$exename.1
+! chmod $manmod $destdir/$exename.1
+
+ # vimtutor.1
+! echo installing $destdir/$exename""tutor.1
+! LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+! -e s+$vimloc/tutor+$tutorsubloc+ \
+! $helpsource/vimtutor$langadd.1 > $destdir/$exename""tutor.1
+! chmod $manmod $destdir/$exename""tutor.1
+
+ # vimdiff.1
+! echo installing $destdir/$vimdiffname.1
+! cp $helpsource/vimdiff$langadd.1 $destdir/$vimdiffname.1
+! chmod $manmod $destdir/$vimdiffname.1
+
+ # evim.1
+! echo installing $destdir/$evimname.1
+! LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+! -e s+$vimloc/evim.vim+$scriptloc/evim.vim+ \
+! $helpsource/evim$langadd.1 > $destdir/$evimname.1
+! chmod $manmod $destdir/$evimname.1
+ fi
+
+ if test $what = "uninstall"; then
+--- 48,96 ----
+
+ if test $what = "install"; then
+ # vim.1
+! if test -r $helpsource/vim$langadd.1; then
+! echo installing $destdir/$exename.1
+! LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+! -e s+$vimloc/doc+$helpsubloc+ \
+! -e s+$vimloc/print+$printsubloc+ \
+! -e s+$vimloc/syntax+$synsubloc+ \
+! -e s+$vimloc/tutor+$tutorsubloc+ \
+! -e s+$vimloc/vimrc+$vimrcloc/vimrc+ \
+! -e s+$vimloc/gvimrc+$vimrcloc/gvimrc+ \
+! -e s+$vimloc/menu.vim+$scriptloc/menu.vim+ \
+! -e s+$vimloc/bugreport.vim+$scriptloc/bugreport.vim+ \
+! -e s+$vimloc/filetype.vim+$scriptloc/filetype.vim+ \
+! -e s+$vimloc/scripts.vim+$scriptloc/scripts.vim+ \
+! -e s+$vimloc/optwin.vim+$scriptloc/optwin.vim+ \
+! -e 's+$vimloc/\*.ps+$scriptloc/\*.ps+' \
+! $helpsource/vim$langadd.1 > $destdir/$exename.1
+! chmod $manmod $destdir/$exename.1
+! fi
+
+ # vimtutor.1
+! if test -r $helpsource/vimtutor$langadd.1; then
+! echo installing $destdir/$exename""tutor.1
+! LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+! -e s+$vimloc/tutor+$tutorsubloc+ \
+! $helpsource/vimtutor$langadd.1 > $destdir/$exename""tutor.1
+! chmod $manmod $destdir/$exename""tutor.1
+! fi
+
+ # vimdiff.1
+! if test -r $helpsource/vimdiff$langadd.1; then
+! echo installing $destdir/$vimdiffname.1
+! cp $helpsource/vimdiff$langadd.1 $destdir/$vimdiffname.1
+! chmod $manmod $destdir/$vimdiffname.1
+! fi
+
+ # evim.1
+! if test -r $helpsource/evim$langadd.1; then
+! echo installing $destdir/$evimname.1
+! LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
+! -e s+$vimloc/evim.vim+$scriptloc/evim.vim+ \
+! $helpsource/evim$langadd.1 > $destdir/$evimname.1
+! chmod $manmod $destdir/$evimname.1
+! fi
+ fi
+
+ if test $what = "uninstall"; then
+***************
+*** 105,111 ****
+ fi
+ fi
+
+! if test $what = "xxd"; then
+ echo installing $destdir/xxd.1
+ cp $helpsource/xxd$langadd.1 $destdir/xxd.1
+ chmod $manmod $destdir/xxd.1
+--- 113,119 ----
+ fi
+ fi
+
+! if test $what = "xxd" -a -r "$helpsource/xxd${langadd}.1"; then
+ echo installing $destdir/xxd.1
+ cp $helpsource/xxd$langadd.1 $destdir/xxd.1
+ chmod $manmod $destdir/xxd.1
+*** ../vim-8.1.0221/src/version.c 2018-07-28 17:29:15.757096343 +0200
+--- src/version.c 2018-07-28 18:15:50.441981506 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 222,
+ /**/
+
+--
+"A mouse can be just as dangerous as a bullet or a bomb."
+ (US Representative Lamar Smith, R-Texas)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0223 b/data/vim/patches/8.1.0223
new file mode 100644
index 000000000..febc4715b
--- /dev/null
+++ b/data/vim/patches/8.1.0223
@@ -0,0 +1,142 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0223
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0223
+Problem: Completing shell command finds sub-directories in $PATH.
+Solution: Remove EW_DIR when completing an item in $PATH. (Jason Franklin)
+Files: src/ex_getln.c, src/tetdir/test_cmdline.vim
+
+
+*** ../vim-8.1.0222/src/ex_getln.c 2018-06-12 22:05:10.656251565 +0200
+--- src/ex_getln.c 2018-07-28 19:01:02.150240882 +0200
+***************
+*** 5193,5208 ****
+ hash_init(&found_ht);
+ for (s = path; ; s = e)
+ {
+- if (*s == NUL)
+- {
+- if (did_curdir)
+- break;
+- /* Find directories in the current directory, path is empty. */
+- did_curdir = TRUE;
+- }
+- else if (*s == '.')
+- did_curdir = TRUE;
+-
+ #if defined(MSWIN)
+ e = vim_strchr(s, ';');
+ #else
+--- 5193,5198 ----
+***************
+*** 5211,5216 ****
+--- 5201,5223 ----
+ if (e == NULL)
+ e = s + STRLEN(s);
+
++ if (*s == NUL)
++ {
++ if (did_curdir)
++ break;
++ // Find directories in the current directory, path is empty.
++ did_curdir = TRUE;
++ flags |= EW_DIR;
++ }
++ else if (STRNCMP(s, ".", (int)(e - s)) == 0)
++ {
++ did_curdir = TRUE;
++ flags |= EW_DIR;
++ }
++ else
++ // Do not match directories inside a $PATH item.
++ flags &= ~EW_DIR;
++
+ l = e - s;
+ if (l > MAXPATHL - 5)
+ break;
+***************
+*** 5266,5273 ****
+
+
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+- static void * call_user_expand_func(void *(*user_expand_func)(char_u *, int, typval_T *, int), expand_T *xp, int *num_file, char_u ***file);
+-
+ /*
+ * Call "user_expand_func()" to invoke a user defined Vim script function and
+ * return the result (either a string or a List).
+--- 5273,5278 ----
+*** ../vim-8.1.0222/src/testdir/test_cmdline.vim 2018-06-23 14:55:00.146628803 +0200
+--- src/testdir/test_cmdline.vim 2018-07-28 19:11:04.354676084 +0200
+***************
+*** 231,237 ****
+ call assert_equal([], l)
+
+ let l = getcompletion('.', 'shellcmd')
+! call assert_equal(['./', '../'], l[0:1])
+ call assert_equal(-1, match(l[2:], '^\.\.\?/$'))
+ let root = has('win32') ? 'C:\\' : '/'
+ let l = getcompletion(root, 'shellcmd')
+--- 231,237 ----
+ call assert_equal([], l)
+
+ let l = getcompletion('.', 'shellcmd')
+! call assert_equal(['./', '../'], filter(l, 'v:val =~ "\\./"'))
+ call assert_equal(-1, match(l[2:], '^\.\.\?/$'))
+ let root = has('win32') ? 'C:\\' : '/'
+ let l = getcompletion(root, 'shellcmd')
+***************
+*** 290,295 ****
+--- 290,318 ----
+ call assert_fails('call getcompletion("", "burp")', 'E475:')
+ endfunc
+
++ func Test_shellcmd_completion()
++ let save_path = $PATH
++
++ call mkdir('Xpathdir/Xpathsubdir', 'p')
++ call writefile([''], 'Xpathdir/Xfile.exe')
++ call setfperm('Xpathdir/Xfile.exe', 'rwx------')
++
++ " Set PATH to example directory without trailing slash.
++ let $PATH = getcwd() . '/Xpathdir'
++
++ " Test for the ":!<TAB>" case. Previously, this would include subdirs of
++ " dirs in the PATH, even though they won't be executed. We check that only
++ " subdirs of the PWD and executables from the PATH are included in the
++ " suggestions.
++ let actual = getcompletion('X', 'shellcmd')
++ let expected = map(filter(glob('*', 0, 1), 'isdirectory(v:val) && v:val[0] == "X"'), 'v:val . "/"')
++ call insert(expected, 'Xfile.exe')
++ call assert_equal(expected, actual)
++
++ call delete('Xpathdir', 'rf')
++ let $PATH = save_path
++ endfunc
++
+ func Test_expand_star_star()
+ call mkdir('a/b', 'p')
+ call writefile(['asdfasdf'], 'a/b/fileXname')
+*** ../vim-8.1.0222/src/version.c 2018-07-28 18:16:44.285662961 +0200
+--- src/version.c 2018-07-28 19:09:36.547197615 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 223,
+ /**/
+
+--
+Futility Factor: No experiment is ever a complete failure - it can always
+serve as a negative example.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0224 b/data/vim/patches/8.1.0224
new file mode 100644
index 000000000..814fae06b
--- /dev/null
+++ b/data/vim/patches/8.1.0224
@@ -0,0 +1,110 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0224
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0224
+Problem: Hang in bracketed paste mode when t_PE not encountered.
+Solution: Break out of the loop when got_int is set. (suggested by Christian
+ Brabandt, closes #3146)
+Files: src/edit.c
+
+
+*** ../vim-8.1.0223/src/edit.c 2018-07-08 16:50:33.103216858 +0200
+--- src/edit.c 2018-07-28 23:11:32.282300523 +0200
+***************
+*** 9685,9706 ****
+ int ret_char = -1;
+ int save_allow_keys = allow_keys;
+ int save_paste = p_paste;
+- int save_ai = curbuf->b_p_ai;
+
+ /* If the end code is too long we can't detect it, read everything. */
+ if (STRLEN(end) >= NUMBUFLEN)
+ end = NULL;
+ ++no_mapping;
+ allow_keys = 0;
+! p_paste = TRUE;
+! curbuf->b_p_ai = FALSE;
+
+ for (;;)
+ {
+! /* When the end is not defined read everything. */
+ if (end == NULL && vpeekc() == NUL)
+ break;
+! c = plain_vgetc();
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ idx += (*mb_char2bytes)(c, buf + idx);
+--- 9685,9715 ----
+ int ret_char = -1;
+ int save_allow_keys = allow_keys;
+ int save_paste = p_paste;
+
+ /* If the end code is too long we can't detect it, read everything. */
+ if (STRLEN(end) >= NUMBUFLEN)
+ end = NULL;
+ ++no_mapping;
+ allow_keys = 0;
+! if (!p_paste)
+! // Also have the side effects of setting 'paste' to make it work much
+! // faster.
+! set_option_value((char_u *)"paste", TRUE, NULL, 0);
+
+ for (;;)
+ {
+! // When the end is not defined read everything there is.
+ if (end == NULL && vpeekc() == NUL)
+ break;
+! do
+! {
+! c = vgetc();
+! } while (c == K_IGNORE || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR);
+! if (c == NUL || got_int)
+! // When CTRL-C was encountered the typeahead will be flushed and we
+! // won't get the end sequence.
+! break;
+!
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ idx += (*mb_char2bytes)(c, buf + idx);
+***************
+*** 9763,9770 ****
+
+ --no_mapping;
+ allow_keys = save_allow_keys;
+! p_paste = save_paste;
+! curbuf->b_p_ai = save_ai;
+
+ return ret_char;
+ }
+--- 9772,9779 ----
+
+ --no_mapping;
+ allow_keys = save_allow_keys;
+! if (!save_paste)
+! set_option_value((char_u *)"paste", FALSE, NULL, 0);
+
+ return ret_char;
+ }
+*** ../vim-8.1.0223/src/version.c 2018-07-28 19:20:09.787586245 +0200
+--- src/version.c 2018-07-28 23:08:55.583319931 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 224,
+ /**/
+
+--
+Computers are not intelligent. They only think they are.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0225 b/data/vim/patches/8.1.0225
new file mode 100644
index 000000000..d52a89249
--- /dev/null
+++ b/data/vim/patches/8.1.0225
@@ -0,0 +1,176 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0225
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0225
+Problem: Mode() does not indicate using CTRL-O from Insert mode.
+Solution: Add "niI", "niR" and "niV" to mode() result. (closes #3000)
+Files: runtime/doc/eval.txt, src/evalfunc.c,
+ src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0224/runtime/doc/eval.txt 2018-07-28 16:55:51.435217148 +0200
+--- runtime/doc/eval.txt 2018-07-29 15:22:39.416519885 +0200
+***************
+*** 6223,6254 ****
+ a non-empty String (|non-zero-arg|), then the full mode is
+ returned, otherwise only the first letter is returned.
+
+! n Normal, Terminal-Normal
+! no Operator-pending
+! v Visual by character
+! V Visual by line
+! CTRL-V Visual blockwise
+! s Select by character
+! S Select by line
+! CTRL-S Select blockwise
+! i Insert
+! ic Insert mode completion |compl-generic|
+! ix Insert mode |i_CTRL-X| completion
+! R Replace |R|
+! Rc Replace mode completion |compl-generic|
+! Rv Virtual Replace |gR|
+! Rx Replace mode |i_CTRL-X| completion
+! c Command-line editing
+! cv Vim Ex mode |gQ|
+! ce Normal Ex mode |Q|
+! r Hit-enter prompt
+! rm The -- more -- prompt
+! r? A |:confirm| query of some sort
+! ! Shell or external command is executing
+! t Terminal-Job mode: keys go to the job
+ This is useful in the 'statusline' option or when used
+ with |remote_expr()| In most other places it always returns
+ "c" or "n".
+ Also see |visualmode()|.
+
+ mzeval({expr}) *mzeval()*
+--- 6224,6261 ----
+ a non-empty String (|non-zero-arg|), then the full mode is
+ returned, otherwise only the first letter is returned.
+
+! n Normal, Terminal-Normal
+! no Operator-pending
+! niI Normal using |i_CTRL-O| in |Insert-mode|
+! niR Normal using |i_CTRL-O| in |Replace-mode|
+! niV Normal using |i_CTRL-O| in |Virtual-Replace-mode|
+! v Visual by character
+! V Visual by line
+! CTRL-V Visual blockwise
+! s Select by character
+! S Select by line
+! CTRL-S Select blockwise
+! i Insert
+! ic Insert mode completion |compl-generic|
+! ix Insert mode |i_CTRL-X| completion
+! R Replace |R|
+! Rc Replace mode completion |compl-generic|
+! Rv Virtual Replace |gR|
+! Rx Replace mode |i_CTRL-X| completion
+! c Command-line editing
+! cv Vim Ex mode |gQ|
+! ce Normal Ex mode |Q|
+! r Hit-enter prompt
+! rm The -- more -- prompt
+! r? A |:confirm| query of some sort
+! ! Shell or external command is executing
+! t Terminal-Job mode: keys go to the job
+ This is useful in the 'statusline' option or when used
+ with |remote_expr()| In most other places it always returns
+ "c" or "n".
++ Note that in the future more modes and more specific modes may
++ be added. It's better not to compare the whole string but only
++ the leading character(s).
+ Also see |visualmode()|.
+
+ mzeval({expr}) *mzeval()*
+*** ../vim-8.1.0224/src/evalfunc.c 2018-07-28 16:55:51.435217148 +0200
+--- src/evalfunc.c 2018-07-29 15:23:57.768058068 +0200
+***************
+*** 8366,8375 ****
+ static void
+ f_mode(typval_T *argvars, typval_T *rettv)
+ {
+! char_u buf[3];
+
+! buf[1] = NUL;
+! buf[2] = NUL;
+
+ if (time_for_testing == 93784)
+ {
+--- 8366,8374 ----
+ static void
+ f_mode(typval_T *argvars, typval_T *rettv)
+ {
+! char_u buf[4];
+
+! vim_memset(buf, 0, sizeof(buf));
+
+ if (time_for_testing == 93784)
+ {
+***************
+*** 8435,8440 ****
+--- 8434,8445 ----
+ buf[0] = 'n';
+ if (finish_op)
+ buf[1] = 'o';
++ else if (restart_edit == 'I' || restart_edit == 'R'
++ || restart_edit == 'V')
++ {
++ buf[1] = 'i';
++ buf[2] = restart_edit;
++ }
+ }
+
+ /* Clear out the minor mode when the argument is not a non-zero number or
+*** ../vim-8.1.0224/src/testdir/test_functions.vim 2018-07-22 19:36:29.251125855 +0200
+--- src/testdir/test_functions.vim 2018-07-29 15:31:26.897360022 +0200
+***************
+*** 464,469 ****
+--- 464,481 ----
+ call assert_equal('n', mode(0))
+ call assert_equal('n', mode(1))
+
++ " i_CTRL-O
++ exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>"
++ call assert_equal("n-niI", g:current_modes)
++
++ " R_CTRL-O
++ exe "normal R\<C-O>:call Save_mode()\<Cr>\<Esc>"
++ call assert_equal("n-niR", g:current_modes)
++
++ " gR_CTRL-O
++ exe "normal gR\<C-O>:call Save_mode()\<Cr>\<Esc>"
++ call assert_equal("n-niV", g:current_modes)
++
+ " How to test operator-pending mode?
+
+ call feedkeys("v", 'xt')
+*** ../vim-8.1.0224/src/version.c 2018-07-28 23:12:01.578163697 +0200
+--- src/version.c 2018-07-29 15:17:05.914434445 +0200
+***************
+*** 800,801 ****
+--- 800,803 ----
+ { /* Add new patch number below this line */
++ /**/
++ 225,
+ /**/
+
+--
+MORTICIAN: What?
+CUSTOMER: Nothing -- here's your nine pence.
+DEAD PERSON: I'm not dead!
+MORTICIAN: Here -- he says he's not dead!
+CUSTOMER: Yes, he is.
+DEAD PERSON: I'm not!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0226 b/data/vim/patches/8.1.0226
new file mode 100644
index 000000000..126cfac1f
--- /dev/null
+++ b/data/vim/patches/8.1.0226
@@ -0,0 +1,1135 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0226
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0226
+Problem: Too many #ifdefs.
+Solution: Graduate the +vreplace feature, it's not much code and quite a few
+ #ifdefs.
+Files: runtime/doc/change.txt, runtime/doc/various.txt, src/edit.c,
+ src/evalfunc.c, src/gui.c, src/misc1.c, src/misc2.c, src/normal.c,
+ src/ops.c, src/screen.c, src/version.c, src/feature.h,
+ src/globals.h, src/macros.h, src/vim.h
+
+
+*** ../vim-8.1.0225/runtime/doc/change.txt 2018-06-23 19:22:45.594486390 +0200
+--- runtime/doc/change.txt 2018-07-29 15:38:09.666898986 +0200
+***************
+*** 177,184 ****
+ <Tab> may replace several characters at once.
+ Repeat the entered text [count]-1 times. See
+ |Virtual-Replace-mode| for more details.
+- {not available when compiled without the |+vreplace|
+- feature}
+
+ *c*
+ ["x]c{motion} Delete {motion} text [into register x] and start
+--- 177,182 ----
+***************
+*** 303,310 ****
+ space. See |gR| and |Virtual-Replace-mode| for more
+ details. As with |r| a count may be given.
+ {char} can be entered like with |r|.
+- {not available when compiled without the |+vreplace|
+- feature}
+
+ *digraph-arg*
+ The argument for Normal mode commands like |r| and |t| is a single character.
+--- 301,306 ----
+*** ../vim-8.1.0225/runtime/doc/various.txt 2018-06-23 19:22:45.598486362 +0200
+--- runtime/doc/various.txt 2018-07-29 15:38:59.894590610 +0200
+***************
+*** 461,467 ****
+ N *+virtualedit* |'virtualedit'|
+ S *+visual* Visual mode |Visual-mode| Always enabled since 7.4.200.
+ N *+visualextra* extra Visual mode commands |blockwise-operators|
+! N *+vreplace* |gR| and |gr|
+ *+vtp* on MS-Windows console: support for 'termguicolors'
+ N *+wildignore* |'wildignore'|
+ N *+wildmenu* |'wildmenu'|
+--- 461,467 ----
+ N *+virtualedit* |'virtualedit'|
+ S *+visual* Visual mode |Visual-mode| Always enabled since 7.4.200.
+ N *+visualextra* extra Visual mode commands |blockwise-operators|
+! T *+vreplace* |gR| and |gr|
+ *+vtp* on MS-Windows console: support for 'termguicolors'
+ N *+wildignore* |'wildignore'|
+ N *+wildmenu* |'wildmenu'|
+*** ../vim-8.1.0225/src/edit.c 2018-07-28 23:12:01.578163697 +0200
+--- src/edit.c 2018-07-29 15:43:22.341227944 +0200
+***************
+*** 463,469 ****
+ {
+ ResetRedobuff();
+ AppendNumberToRedobuff(count);
+- #ifdef FEAT_VREPLACE
+ if (cmdchar == 'V' || cmdchar == 'v')
+ {
+ /* "gR" or "gr" command */
+--- 463,468 ----
+***************
+*** 471,477 ****
+ AppendCharToRedobuff((cmdchar == 'v') ? 'r' : 'R');
+ }
+ else
+- #endif
+ {
+ if (cmdchar == K_PS)
+ AppendCharToRedobuff('a');
+--- 470,475 ----
+***************
+*** 497,503 ****
+ #endif
+ State = REPLACE;
+ }
+- #ifdef FEAT_VREPLACE
+ else if (cmdchar == 'V' || cmdchar == 'v')
+ {
+ State = VREPLACE;
+--- 495,500 ----
+***************
+*** 505,511 ****
+ orig_line_count = curbuf->b_ml.ml_line_count;
+ vr_lines_changed = 1;
+ }
+- #endif
+ else
+ State = INSERT;
+
+--- 502,507 ----
+***************
+*** 2042,2048 ****
+ int save_p_list;
+ int start_col;
+ colnr_T vc;
+- #ifdef FEAT_VREPLACE
+ colnr_T orig_col = 0; /* init for GCC */
+ char_u *new_line, *orig_line = NULL; /* init for GCC */
+
+--- 2038,2043 ----
+***************
+*** 2052,2058 ****
+ orig_line = vim_strsave(ml_get_curline()); /* Deal with NULL below */
+ orig_col = curwin->w_cursor.col;
+ }
+- #endif
+
+ /* for the following tricks we don't want list mode */
+ save_p_list = curwin->w_p_list;
+--- 2047,2052 ----
+***************
+*** 2091,2107 ****
+ (void)set_indent(amount, call_changed_bytes ? SIN_CHANGED : 0);
+ else
+ {
+- #ifdef FEAT_VREPLACE
+ int save_State = State;
+
+ /* Avoid being called recursively. */
+ if (State & VREPLACE_FLAG)
+ State = INSERT;
+- #endif
+ shift_line(type == INDENT_DEC, round, 1, call_changed_bytes);
+- #ifdef FEAT_VREPLACE
+ State = save_State;
+- #endif
+ }
+ insstart_less -= curwin->w_cursor.col;
+
+--- 2085,2097 ----
+***************
+*** 2233,2239 ****
+ }
+ }
+
+- #ifdef FEAT_VREPLACE
+ /*
+ * For VREPLACE mode, we also have to fix the replace stack. In this case
+ * it is always possible because we backspace over the whole line and then
+--- 2223,2228 ----
+***************
+*** 2266,2272 ****
+
+ vim_free(new_line);
+ }
+- #endif
+ }
+
+ /*
+--- 2255,2260 ----
+***************
+*** 2288,2295 ****
+ line[i + 1] = NUL;
+ }
+
+- #if defined(FEAT_VREPLACE) || defined(FEAT_INS_EXPAND) \
+- || defined(FEAT_COMMENTS) || defined(PROTO)
+ /*
+ * Backspace the cursor until the given column. Handles REPLACE and VREPLACE
+ * modes correctly. May also be used when not in insert mode at all.
+--- 2276,2281 ----
+***************
+*** 2308,2314 ****
+ break;
+ }
+ }
+- #endif
+
+ /*
+ * Like del_char(), but make sure not to go before column "limit_col".
+--- 2294,2299 ----
+***************
+*** 6224,6232 ****
+ && (force_format
+ || (!VIM_ISWHITE(c)
+ && !((State & REPLACE_FLAG)
+- #ifdef FEAT_VREPLACE
+ && !(State & VREPLACE_FLAG)
+- #endif
+ && *ml_get_cursor() != NUL)
+ && (curwin->w_cursor.lnum != Insstart.lnum
+ || ((!has_format_option(FO_INS_LONG)
+--- 6209,6215 ----
+***************
+*** 6471,6481 ****
+ * When 'ai' is off we don't want a space under the cursor to be
+ * deleted. Replace it with an 'x' temporarily.
+ */
+! if (!curbuf->b_p_ai
+! #ifdef FEAT_VREPLACE
+! && !(State & VREPLACE_FLAG)
+! #endif
+! )
+ {
+ cc = gchar_cursor();
+ if (VIM_ISWHITE(cc))
+--- 6454,6460 ----
+ * When 'ai' is off we don't want a space under the cursor to be
+ * deleted. Replace it with an 'x' temporarily.
+ */
+! if (!curbuf->b_p_ai && !(State & VREPLACE_FLAG))
+ {
+ cc = gchar_cursor();
+ if (VIM_ISWHITE(cc))
+***************
+*** 6496,6505 ****
+ int end_foundcol = 0; /* column for start of word */
+ colnr_T len;
+ colnr_T virtcol;
+- #ifdef FEAT_VREPLACE
+ int orig_col = 0;
+ char_u *saved_text = NULL;
+- #endif
+ colnr_T col;
+ colnr_T end_col;
+
+--- 6475,6482 ----
+***************
+*** 6669,6679 ****
+ * stack functions. VREPLACE does not use this, and backspaces
+ * over the text instead.
+ */
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ orig_col = startcol; /* Will start backspacing from here */
+ else
+- #endif
+ replace_offset = startcol - end_foundcol;
+
+ /*
+--- 6646,6654 ----
+***************
+*** 6688,6694 ****
+ if (startcol < 0)
+ startcol = 0;
+
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ /*
+--- 6663,6668 ----
+***************
+*** 6706,6712 ****
+ backspace_until_column(foundcol);
+ }
+ else
+- #endif
+ {
+ /* put cursor after pos. to break line */
+ if (!fo_white_par)
+--- 6680,6685 ----
+***************
+*** 6744,6755 ****
+ get_number_indent(curwin->w_cursor.lnum - 1);
+ if (second_indent >= 0)
+ {
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ change_indent(INDENT_SET, second_indent,
+ FALSE, NUL, TRUE);
+ else
+- #endif
+ #ifdef FEAT_COMMENTS
+ if (leader_len > 0 && second_indent - leader_len > 0)
+ {
+--- 6717,6726 ----
+***************
+*** 6778,6784 ****
+ first_line = FALSE;
+ }
+
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ /*
+--- 6749,6754 ----
+***************
+*** 6789,6795 ****
+ vim_free(saved_text);
+ }
+ else
+- #endif
+ {
+ /*
+ * Check if cursor is not past the NUL off the line, cindent
+--- 6759,6764 ----
+***************
+*** 7140,7152 ****
+ }
+
+ ai_col = 0;
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ orig_line_count = curbuf->b_ml.ml_line_count;
+ vr_lines_changed = 1;
+ }
+- #endif
+ ResetRedobuff();
+ AppendToRedobuff((char_u *)"1i"); /* pretend we start an insertion */
+ new_insert_skip = 2;
+--- 7109,7119 ----
+***************
+*** 7983,7989 ****
+ replace_do_bs(int limit_col)
+ {
+ int cc;
+- #ifdef FEAT_VREPLACE
+ int orig_len = 0;
+ int ins_len;
+ int orig_vcols = 0;
+--- 7950,7955 ----
+***************
+*** 7991,8002 ****
+ char_u *p;
+ int i;
+ int vcol;
+- #endif
+
+ cc = replace_pop();
+ if (cc > 0)
+ {
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ /* Get the number of screen cells used by the character we are
+--- 7957,7966 ----
+***************
+*** 8004,8032 ****
+ getvcol(curwin, &curwin->w_cursor, NULL, &start_vcol, NULL);
+ orig_vcols = chartabsize(ml_get_cursor(), start_vcol);
+ }
+- #endif
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+ (void)del_char_after_col(limit_col);
+- # ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ orig_len = (int)STRLEN(ml_get_cursor());
+- # endif
+ replace_push(cc);
+ }
+ else
+ #endif
+ {
+ pchar_cursor(cc);
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ orig_len = (int)STRLEN(ml_get_cursor()) - 1;
+- #endif
+ }
+ replace_pop_ins();
+
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ /* Get the number of screen cells used by the inserted characters */
+--- 7968,7990 ----
+***************
+*** 8052,8058 ****
+ }
+ curwin->w_cursor.col -= ins_len;
+ }
+- #endif
+
+ /* mark the buffer as changed and prepare for displaying */
+ changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col);
+--- 8010,8015 ----
+***************
+*** 8966,8976 ****
+
+ # ifdef FEAT_EVAL
+ set_vim_var_string(VV_INSERTMODE,
+! (char_u *)((State & REPLACE_FLAG) ? "i" :
+! # ifdef FEAT_VREPLACE
+! replaceState == VREPLACE ? "v" :
+! # endif
+! "r"), 1);
+ # endif
+ apply_autocmds(EVENT_INSERTCHANGE, NULL, NULL, FALSE, curbuf);
+ if (State & REPLACE_FLAG)
+--- 8923,8931 ----
+
+ # ifdef FEAT_EVAL
+ set_vim_var_string(VV_INSERTMODE,
+! (char_u *)((State & REPLACE_FLAG) ? "i"
+! : replaceState == VREPLACE ? "v"
+! : "r"), 1);
+ # endif
+ apply_autocmds(EVENT_INSERTCHANGE, NULL, NULL, FALSE, curbuf);
+ if (State & REPLACE_FLAG)
+***************
+*** 8990,9000 ****
+ static void
+ ins_ctrl_o(void)
+ {
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ restart_edit = 'V';
+ else
+- #endif
+ if (State & REPLACE_FLAG)
+ restart_edit = 'R';
+ else
+--- 8945,8953 ----
+***************
+*** 9067,9080 ****
+ else
+ {
+ curwin->w_cursor.col = temp;
+- #ifdef FEAT_VREPLACE
+ /* Adjust orig_line_count in case more lines have been deleted than
+ * have been added. That makes sure, that open_line() later
+ * can access all buffer lines correctly */
+ if (State & VREPLACE_FLAG &&
+ orig_line_count > curbuf->b_ml.ml_line_count)
+ orig_line_count = curbuf->b_ml.ml_line_count;
+- #endif
+ }
+ }
+ else if (del_char(FALSE) == FAIL) /* delete char under cursor */
+--- 9020,9031 ----
+***************
+*** 9229,9238 ****
+ }
+ else
+ {
+- #ifdef FEAT_VREPLACE
+ if (!(State & VREPLACE_FLAG)
+ || curwin->w_cursor.lnum > orig_line_count)
+- #endif
+ {
+ temp = gchar_cursor(); /* remember current char */
+ --curwin->w_cursor.lnum;
+--- 9180,9187 ----
+***************
+*** 9256,9265 ****
+ if (temp == NUL && gchar_cursor() != NUL)
+ inc_cursor();
+ }
+- #ifdef FEAT_VREPLACE
+ else
+ dec_cursor();
+- #endif
+
+ /*
+ * In REPLACE mode we have to put back the text that was replaced
+--- 9205,9212 ----
+***************
+*** 9386,9396 ****
+ && curwin->w_cursor.col < Insstart_orig.col)
+ Insstart_orig.col = curwin->w_cursor.col;
+
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ ins_char(' ');
+ else
+- #endif
+ {
+ ins_str((char_u *)" ");
+ if ((State & REPLACE_FLAG))
+--- 9333,9341 ----
+***************
+*** 10231,10241 ****
+ ins_char(' ');
+ while (--temp > 0)
+ {
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ ins_char(' ');
+ else
+- #endif
+ {
+ ins_str((char_u *)" ");
+ if (State & REPLACE_FLAG) /* no char replaced */
+--- 10176,10184 ----
+***************
+*** 10255,10264 ****
+ #endif
+ {
+ char_u *ptr;
+- #ifdef FEAT_VREPLACE
+ char_u *saved_line = NULL; /* init for GCC */
+ pos_T pos;
+- #endif
+ pos_T fpos;
+ pos_T *cursor;
+ colnr_T want_vcol, vcol;
+--- 10198,10205 ----
+***************
+*** 10269,10275 ****
+ * Get the current line. For VREPLACE mode, don't make real changes
+ * yet, just work on a copy of the line.
+ */
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ pos = curwin->w_cursor;
+--- 10210,10215 ----
+***************
+*** 10280,10286 ****
+ ptr = saved_line + pos.col;
+ }
+ else
+- #endif
+ {
+ ptr = ml_get_cursor();
+ cursor = &curwin->w_cursor;
+--- 10220,10225 ----
+***************
+*** 10360,10370 ****
+ {
+ STRMOVE(ptr, ptr + i);
+ /* correct replace stack. */
+! if ((State & REPLACE_FLAG)
+! #ifdef FEAT_VREPLACE
+! && !(State & VREPLACE_FLAG)
+! #endif
+! )
+ for (temp = i; --temp >= 0; )
+ replace_join(repl_off);
+ }
+--- 10299,10305 ----
+ {
+ STRMOVE(ptr, ptr + i);
+ /* correct replace stack. */
+! if ((State & REPLACE_FLAG) && !(State & VREPLACE_FLAG))
+ for (temp = i; --temp >= 0; )
+ replace_join(repl_off);
+ }
+***************
+*** 10378,10384 ****
+ #endif
+ cursor->col -= i;
+
+- #ifdef FEAT_VREPLACE
+ /*
+ * In VREPLACE mode, we haven't changed anything yet. Do it now by
+ * backspacing over the changed spacing and then inserting the new
+--- 10313,10318 ----
+***************
+*** 10394,10406 ****
+ ins_bytes_len(saved_line + change_col,
+ cursor->col - change_col);
+ }
+- #endif
+ }
+
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ vim_free(saved_line);
+- #endif
+ curwin->w_p_list = save_list;
+ }
+
+--- 10328,10337 ----
+***************
+*** 10427,10437 ****
+ * character under the cursor. Only push a NUL on the replace stack,
+ * nothing to put back when the NL is deleted.
+ */
+! if ((State & REPLACE_FLAG)
+! #ifdef FEAT_VREPLACE
+! && !(State & VREPLACE_FLAG)
+! #endif
+! )
+ replace_push(NUL);
+
+ /*
+--- 10358,10364 ----
+ * character under the cursor. Only push a NUL on the replace stack,
+ * nothing to put back when the NL is deleted.
+ */
+! if ((State & REPLACE_FLAG) && !(State & VREPLACE_FLAG))
+ replace_push(NUL);
+
+ /*
+***************
+*** 10700,10710 ****
+ curwin->w_cursor = *pos;
+ i = get_indent();
+ curwin->w_cursor = old_pos;
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ change_indent(INDENT_SET, i, FALSE, NUL, TRUE);
+ else
+- #endif
+ (void)set_indent(i, SIN_CHANGED);
+ }
+ else if (curwin->w_cursor.col > 0)
+--- 10627,10635 ----
+*** ../vim-8.1.0225/src/evalfunc.c 2018-07-29 15:34:20.868300075 +0200
+--- src/evalfunc.c 2018-07-29 15:43:54.165096144 +0200
+***************
+*** 6450,6458 ****
+ #ifdef FEAT_VISUALEXTRA
+ "visualextra",
+ #endif
+- #ifdef FEAT_VREPLACE
+ "vreplace",
+- #endif
+ #ifdef FEAT_VTP
+ "vtp",
+ #endif
+--- 6450,6456 ----
+***************
+*** 8400,8413 ****
+ buf[0] = '!';
+ else if (State & INSERT)
+ {
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ buf[0] = 'R';
+ buf[1] = 'v';
+ }
+ else
+- #endif
+ {
+ if (State & REPLACE_FLAG)
+ buf[0] = 'R';
+--- 8398,8409 ----
+*** ../vim-8.1.0225/src/gui.c 2018-06-28 12:05:07.089006904 +0200
+--- src/gui.c 2018-07-29 15:44:03.357057435 +0200
+***************
+*** 3181,3190 ****
+ case SELECTMODE: checkfor = MOUSE_VISUAL; break;
+ case REPLACE:
+ case REPLACE+LANGMAP:
+- # ifdef FEAT_VREPLACE
+ case VREPLACE:
+ case VREPLACE+LANGMAP:
+- # endif
+ case INSERT:
+ case INSERT+LANGMAP: checkfor = MOUSE_INSERT; break;
+ case ASKMORE:
+--- 3181,3188 ----
+*** ../vim-8.1.0225/src/misc1.c 2018-07-25 21:19:09.363656976 +0200
+--- src/misc1.c 2018-07-29 15:45:58.180552032 +0200
+***************
+*** 784,793 ****
+ char_u *leader = NULL; /* copy of comment leader */
+ #endif
+ char_u *allocated = NULL; /* allocated memory */
+- #if defined(FEAT_SMARTINDENT) || defined(FEAT_VREPLACE) || defined(FEAT_LISP) \
+- || defined(FEAT_CINDENT) || defined(FEAT_COMMENTS)
+ char_u *p;
+- #endif
+ int saved_char = NUL; /* init for GCC */
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_COMMENTS)
+ pos_T *pos;
+--- 784,790 ----
+***************
+*** 804,810 ****
+ int no_si = FALSE; /* reset did_si afterwards */
+ int first_char = NUL; /* init for GCC */
+ #endif
+! #if defined(FEAT_VREPLACE) && (defined(FEAT_LISP) || defined(FEAT_CINDENT))
+ int vreplace_mode;
+ #endif
+ int did_append; /* appended a new line */
+--- 801,807 ----
+ int no_si = FALSE; /* reset did_si afterwards */
+ int first_char = NUL; /* init for GCC */
+ #endif
+! #if defined(FEAT_LISP) || defined(FEAT_CINDENT)
+ int vreplace_mode;
+ #endif
+ int did_append; /* appended a new line */
+***************
+*** 817,823 ****
+ if (saved_line == NULL) /* out of memory! */
+ return FALSE;
+
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ /*
+--- 814,819 ----
+***************
+*** 857,869 ****
+ }
+ saved_line[curwin->w_cursor.col] = NUL;
+ }
+- #endif
+
+! if ((State & INSERT)
+! #ifdef FEAT_VREPLACE
+! && !(State & VREPLACE_FLAG)
+! #endif
+! )
+ {
+ p_extra = saved_line + curwin->w_cursor.col;
+ #ifdef FEAT_SMARTINDENT
+--- 853,860 ----
+ }
+ saved_line[curwin->w_cursor.col] = NUL;
+ }
+
+! if ((State & INSERT) && !(State & VREPLACE_FLAG))
+ {
+ p_extra = saved_line + curwin->w_cursor.col;
+ #ifdef FEAT_SMARTINDENT
+***************
+*** 1601,1609 ****
+ old_cursor = curwin->w_cursor;
+ if (dir == BACKWARD)
+ --curwin->w_cursor.lnum;
+- #ifdef FEAT_VREPLACE
+ if (!(State & VREPLACE_FLAG) || old_cursor.lnum >= orig_line_count)
+- #endif
+ {
+ if (ml_append(curwin->w_cursor.lnum, p_extra, (colnr_T)0, FALSE)
+ == FAIL)
+--- 1592,1598 ----
+***************
+*** 1620,1626 ****
+ mark_adjust(curwin->w_cursor.lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
+ did_append = TRUE;
+ }
+- #ifdef FEAT_VREPLACE
+ else
+ {
+ /*
+--- 1609,1614 ----
+***************
+*** 1640,1646 ****
+ curwin->w_cursor.lnum--;
+ did_append = FALSE;
+ }
+- #endif
+
+ if (newindent
+ #ifdef FEAT_SMARTINDENT
+--- 1628,1633 ----
+***************
+*** 1744,1750 ****
+ curwin->w_cursor.coladd = 0;
+ #endif
+
+! #if defined(FEAT_VREPLACE) && (defined(FEAT_LISP) || defined(FEAT_CINDENT))
+ /*
+ * In VREPLACE mode, we are handling the replace stack ourselves, so stop
+ * fixthisline() from doing it (via change_indent()) by telling it we're in
+--- 1731,1737 ----
+ curwin->w_cursor.coladd = 0;
+ #endif
+
+! #if defined(FEAT_LISP) || defined(FEAT_CINDENT)
+ /*
+ * In VREPLACE mode, we are handling the replace stack ourselves, so stop
+ * fixthisline() from doing it (via change_indent()) by telling it we're in
+***************
+*** 1791,1802 ****
+ ai_col = (colnr_T)getwhitecols_curline();
+ }
+ #endif
+! #if defined(FEAT_VREPLACE) && (defined(FEAT_LISP) || defined(FEAT_CINDENT))
+ if (vreplace_mode != 0)
+ State = vreplace_mode;
+ #endif
+
+- #ifdef FEAT_VREPLACE
+ /*
+ * Finally, VREPLACE gets the stuff on the new line, then puts back the
+ * original line, and inserts the new stuff char by char, pushing old stuff
+--- 1778,1788 ----
+ ai_col = (colnr_T)getwhitecols_curline();
+ }
+ #endif
+! #if defined(FEAT_LISP) || defined(FEAT_CINDENT)
+ if (vreplace_mode != 0)
+ State = vreplace_mode;
+ #endif
+
+ /*
+ * Finally, VREPLACE gets the stuff on the new line, then puts back the
+ * original line, and inserts the new stuff char by char, pushing old stuff
+***************
+*** 1821,1827 ****
+ vim_free(p_extra);
+ next_line = NULL;
+ }
+- #endif
+
+ retval = OK; /* success! */
+ theend:
+--- 1807,1812 ----
+***************
+*** 2307,2313 ****
+ return (count);
+ }
+
+- #if defined(FEAT_VREPLACE) || defined(FEAT_INS_EXPAND) || defined(PROTO)
+ /*
+ * Insert string "p" at the cursor position. Stops at a NUL byte.
+ * Handles Replace mode and multi-byte characters.
+--- 2292,2297 ----
+***************
+*** 2317,2326 ****
+ {
+ ins_bytes_len(p, (int)STRLEN(p));
+ }
+- #endif
+
+- #if defined(FEAT_VREPLACE) || defined(FEAT_INS_EXPAND) \
+- || defined(FEAT_COMMENTS) || defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+ * Insert string "p" with length "len" at the cursor position.
+ * Handles Replace mode and multi-byte characters.
+--- 2301,2307 ----
+***************
+*** 2329,2335 ****
+ ins_bytes_len(char_u *p, int len)
+ {
+ int i;
+! # ifdef FEAT_MBYTE
+ int n;
+
+ if (has_mbyte)
+--- 2310,2316 ----
+ ins_bytes_len(char_u *p, int len)
+ {
+ int i;
+! #ifdef FEAT_MBYTE
+ int n;
+
+ if (has_mbyte)
+***************
+*** 2343,2353 ****
+ ins_char_bytes(p + i, n);
+ }
+ else
+! # endif
+ for (i = 0; i < len; ++i)
+ ins_char(p[i]);
+ }
+- #endif
+
+ /*
+ * Insert or replace a single character at the cursor position.
+--- 2324,2333 ----
+ ins_char_bytes(p + i, n);
+ }
+ else
+! #endif
+ for (i = 0; i < len; ++i)
+ ins_char(p[i]);
+ }
+
+ /*
+ * Insert or replace a single character at the cursor position.
+***************
+*** 2406,2412 ****
+
+ if (State & REPLACE_FLAG)
+ {
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ {
+ colnr_T new_vcol = 0; /* init for GCC */
+--- 2386,2391 ----
+***************
+*** 2456,2462 ****
+ curwin->w_p_list = old_list;
+ }
+ else
+- #endif
+ if (oldp[col] != NUL)
+ {
+ /* normal replace */
+--- 2435,2440 ----
+*** ../vim-8.1.0225/src/misc2.c 2018-06-29 20:28:27.505661796 +0200
+--- src/misc2.c 2018-07-29 15:46:23.876433899 +0200
+***************
+*** 3766,3775 ****
+ #endif
+ if (!mouse && State == SHOWMATCH)
+ return SHAPE_IDX_SM;
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ return SHAPE_IDX_R;
+- #endif
+ if (State & REPLACE_FLAG)
+ return SHAPE_IDX_R;
+ if (State & INSERT)
+--- 3766,3773 ----
+*** ../vim-8.1.0225/src/normal.c 2018-07-25 22:36:48.987518583 +0200
+--- src/normal.c 2018-07-29 15:46:49.824312935 +0200
+***************
+*** 111,119 ****
+ static void nv_undo(cmdarg_T *cap);
+ static void nv_kundo(cmdarg_T *cap);
+ static void nv_Replace(cmdarg_T *cap);
+- #ifdef FEAT_VREPLACE
+ static void nv_vreplace(cmdarg_T *cap);
+- #endif
+ static void v_swap_corners(int cmdchar);
+ static void nv_replace(cmdarg_T *cap);
+ static void n_swapchar(cmdarg_T *cap);
+--- 111,117 ----
+***************
+*** 7300,7306 ****
+ }
+ }
+
+- #ifdef FEAT_VREPLACE
+ /*
+ * "gr".
+ */
+--- 7298,7303 ----
+***************
+*** 7323,7337 ****
+ cap->extra_char = get_literal();
+ stuffcharReadbuff(cap->extra_char);
+ stuffcharReadbuff(ESC);
+! # ifdef FEAT_VIRTUALEDIT
+ if (virtual_active())
+ coladvance(getviscol());
+! # endif
+ invoke_edit(cap, TRUE, 'v', FALSE);
+ }
+ }
+ }
+- #endif
+
+ /*
+ * Swap case for "~" command, when it does not work like an operator.
+--- 7320,7333 ----
+ cap->extra_char = get_literal();
+ stuffcharReadbuff(cap->extra_char);
+ stuffcharReadbuff(ESC);
+! #ifdef FEAT_VIRTUALEDIT
+ if (virtual_active())
+ coladvance(getviscol());
+! #endif
+ invoke_edit(cap, TRUE, 'v', FALSE);
+ }
+ }
+ }
+
+ /*
+ * Swap case for "~" command, when it does not work like an operator.
+***************
+*** 7944,7950 ****
+ clearopbeep(oap);
+ break;
+
+- #ifdef FEAT_VREPLACE
+ /*
+ * "gR": Enter virtual replace mode.
+ */
+--- 7940,7945 ----
+***************
+*** 7956,7962 ****
+ case 'r':
+ nv_vreplace(cap);
+ break;
+- #endif
+
+ case '&':
+ do_cmdline_cmd((char_u *)"%s//~/&");
+--- 7951,7956 ----
+*** ../vim-8.1.0225/src/ops.c 2018-07-08 16:50:33.107216836 +0200
+--- src/ops.c 2018-07-29 15:47:03.452248760 +0200
+***************
+*** 376,386 ****
+ }
+
+ /* Set new indent */
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ change_indent(INDENT_SET, count, FALSE, NUL, call_changed_bytes);
+ else
+- #endif
+ (void)set_indent(count, call_changed_bytes ? SIN_CHANGED : 0);
+ }
+
+--- 376,384 ----
+*** ../vim-8.1.0225/src/screen.c 2018-06-28 22:22:56.233315600 +0200
+--- src/screen.c 2018-07-29 15:47:23.308154491 +0200
+***************
+*** 10375,10386 ****
+ else
+ #endif
+ {
+- #ifdef FEAT_VREPLACE
+ if (State & VREPLACE_FLAG)
+ MSG_PUTS_ATTR(_(" VREPLACE"), attr);
+! else
+! #endif
+! if (State & REPLACE_FLAG)
+ MSG_PUTS_ATTR(_(" REPLACE"), attr);
+ else if (State & INSERT)
+ {
+--- 10375,10383 ----
+ else
+ #endif
+ {
+ if (State & VREPLACE_FLAG)
+ MSG_PUTS_ATTR(_(" VREPLACE"), attr);
+! else if (State & REPLACE_FLAG)
+ MSG_PUTS_ATTR(_(" REPLACE"), attr);
+ else if (State & INSERT)
+ {
+*** ../vim-8.1.0225/src/version.c 2018-07-29 15:34:20.868300075 +0200
+--- src/version.c 2018-07-29 15:50:26.887245482 +0200
+***************
+*** 714,724 ****
+ #else
+ "-viminfo",
+ #endif
+- #ifdef FEAT_VREPLACE
+ "+vreplace",
+- #else
+- "-vreplace",
+- #endif
+ #ifdef WIN3264
+ # ifdef FEAT_VTP
+ "+vtp",
+--- 714,720 ----
+*** ../vim-8.1.0225/src/feature.h 2018-06-23 19:22:45.606486311 +0200
+--- src/feature.h 2018-07-29 15:47:53.028011765 +0200
+***************
+*** 207,219 ****
+ #endif
+
+ /*
+- * +vreplace "gR" and "gr" commands.
+- */
+- #ifdef FEAT_NORMAL
+- # define FEAT_VREPLACE
+- #endif
+-
+- /*
+ * +cmdline_info 'showcmd' and 'ruler' options.
+ */
+ #ifdef FEAT_NORMAL
+--- 207,212 ----
+*** ../vim-8.1.0225/src/globals.h 2018-06-23 16:12:15.780258265 +0200
+--- src/globals.h 2018-07-29 15:48:07.903939623 +0200
+***************
+*** 778,790 ****
+ * op_insert(), to detect correctly where inserting by the user started. */
+ EXTERN pos_T Insstart_orig;
+
+- #ifdef FEAT_VREPLACE
+ /*
+ * Stuff for VREPLACE mode.
+ */
+ EXTERN int orig_line_count INIT(= 0); /* Line count when "gR" started */
+ EXTERN int vr_lines_changed INIT(= 0); /* #Lines changed by "gR" so far */
+- #endif
+
+ #if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
+ /* argument to SETJMP() for handling X IO errors */
+--- 778,788 ----
+*** ../vim-8.1.0225/src/macros.h 2018-06-28 19:26:24.321655175 +0200
+--- src/macros.h 2018-07-29 15:48:34.883807640 +0200
+***************
+*** 235,245 ****
+ # define TIME_MSG(s) do { /**/ } while (0)
+ #endif
+
+! #ifdef FEAT_VREPLACE
+! # define REPLACE_NORMAL(s) (((s) & REPLACE_FLAG) && !((s) & VREPLACE_FLAG))
+! #else
+! # define REPLACE_NORMAL(s) ((s) & REPLACE_FLAG)
+! #endif
+
+ #ifdef FEAT_ARABIC
+ # define UTF_COMPOSINGLIKE(p1, p2) utf_composinglike((p1), (p2))
+--- 235,241 ----
+ # define TIME_MSG(s) do { /**/ } while (0)
+ #endif
+
+! #define REPLACE_NORMAL(s) (((s) & REPLACE_FLAG) && !((s) & VREPLACE_FLAG))
+
+ #ifdef FEAT_ARABIC
+ # define UTF_COMPOSINGLIKE(p1, p2) utf_composinglike((p1), (p2))
+*** ../vim-8.1.0225/src/vim.h 2018-06-23 14:21:38.467484932 +0200
+--- src/vim.h 2018-07-29 15:48:48.695739525 +0200
+***************
+*** 675,684 ****
+
+ #define REPLACE_FLAG 0x40 /* Replace mode flag */
+ #define REPLACE (REPLACE_FLAG + INSERT)
+! #ifdef FEAT_VREPLACE
+! # define VREPLACE_FLAG 0x80 /* Virtual-replace mode flag */
+! # define VREPLACE (REPLACE_FLAG + VREPLACE_FLAG + INSERT)
+! #endif
+ #define LREPLACE (REPLACE_FLAG + LANGMAP)
+
+ #define NORMAL_BUSY (0x100 + NORMAL) /* Normal mode, busy with a command */
+--- 675,682 ----
+
+ #define REPLACE_FLAG 0x40 /* Replace mode flag */
+ #define REPLACE (REPLACE_FLAG + INSERT)
+! #define VREPLACE_FLAG 0x80 /* Virtual-replace mode flag */
+! #define VREPLACE (REPLACE_FLAG + VREPLACE_FLAG + INSERT)
+ #define LREPLACE (REPLACE_FLAG + LANGMAP)
+
+ #define NORMAL_BUSY (0x100 + NORMAL) /* Normal mode, busy with a command */
+*** ../vim-8.1.0225/src/version.c 2018-07-29 15:34:20.868300075 +0200
+--- src/version.c 2018-07-29 15:50:26.887245482 +0200
+***************
+*** 800,801 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 226,
+ /**/
+
+--
+Shit makes the flowers grow and that's beautiful
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0227 b/data/vim/patches/8.1.0227
new file mode 100644
index 000000000..91e81d40d
--- /dev/null
+++ b/data/vim/patches/8.1.0227
@@ -0,0 +1,75 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0227
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0227
+Problem: Spaces instead of tabs in makefile.
+Solution: Use tabs and fix sorting. (Ken Takata)
+Files: src/po/Make_all.mak
+
+
+*** ../vim-8.1.0226/src/po/Make_all.mak 2018-06-24 15:52:37.075719437 +0200
+--- src/po/Make_all.mak 2018-07-29 16:10:57.264347570 +0200
+***************
+*** 21,26 ****
+--- 21,27 ----
+ ja.sjis \
+ ko \
+ ko.UTF-8 \
++ lv \
+ nb \
+ nl \
+ no \
+***************
+*** 42,48 ****
+ zh_CN.cp936 \
+ zh_TW \
+ zh_TW.UTF-8 \
+- lv \
+
+
+ MOFILES = \
+--- 43,48 ----
+***************
+*** 61,66 ****
+--- 61,67 ----
+ ja.mo \
+ ko.UTF-8.mo \
+ ko.mo \
++ lv.mo \
+ nb.mo \
+ nl.mo \
+ no.mo \
+***************
+*** 76,82 ****
+ zh_CN.mo \
+ zh_TW.UTF-8.mo \
+ zh_TW.mo \
+- lv.mo \
+
+
+ MOCONVERTED = \
+--- 77,82 ----
+*** ../vim-8.1.0226/src/version.c 2018-07-29 16:09:14.644945560 +0200
+--- src/version.c 2018-07-29 16:12:16.627884068 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 227,
+ /**/
+
+--
+Have you heard about the new Barbie doll? It's called Divorce
+Barbie. It comes with all of Ken's stuff.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0228 b/data/vim/patches/8.1.0228
new file mode 100644
index 000000000..6c1ab54c7
--- /dev/null
+++ b/data/vim/patches/8.1.0228
@@ -0,0 +1,569 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0228
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0228
+Problem: Dropping files is ignored while Vim is busy.
+Solution: Postpone the effect of dropping files until it's safe.
+Files: src/ex_docmd.c, src/proto/ex_docmd.pro, src/gui.c, src/gui.h,
+ src/screen.c, src/main.c, src/gui_mac.c
+
+
+*** ../vim-8.1.0227/src/ex_docmd.c 2018-07-28 17:07:48.608154066 +0200
+--- src/ex_docmd.c 2018-07-29 17:22:20.940320176 +0200
+***************
+*** 7859,7915 ****
+ do_shell(NULL, 0);
+ }
+
+! #if defined(HAVE_DROP_FILE) \
+! || (defined(FEAT_GUI_GTK) && defined(FEAT_DND)) \
+! || defined(FEAT_GUI_MSWIN) \
+! || defined(FEAT_GUI_MAC) \
+! || defined(PROTO)
+
+! /*
+! * Handle a file drop. The code is here because a drop is *nearly* like an
+! * :args command, but not quite (we have a list of exact filenames, so we
+! * don't want to (a) parse a command line, or (b) expand wildcards. So the
+! * code is very similar to :args and hence needs access to a lot of the static
+! * functions in this file.
+! *
+! * The list should be allocated using alloc(), as should each item in the
+! * list. This function takes over responsibility for freeing the list.
+! *
+! * XXX The list is made into the argument list. This is freed using
+! * FreeWild(), which does a series of vim_free() calls.
+! */
+! void
+! handle_drop(
+! int filec, /* the number of files dropped */
+! char_u **filev, /* the list of files dropped */
+! int split) /* force splitting the window */
+ {
+ exarg_T ea;
+ int save_msg_scroll = msg_scroll;
+
+! /* Postpone this while editing the command line. */
+! if (text_locked())
+! return;
+! if (curbuf_locked())
+! return;
+!
+! /* When the screen is being updated we should not change buffers and
+! * windows structures, it may cause freed memory to be used. */
+! if (updating_screen)
+! return;
+
+ /* Check whether the current buffer is changed. If so, we will need
+ * to split the current window or data could be lost.
+ * We don't need to check if the 'hidden' option is set, as in this
+ * case the buffer won't be lost.
+ */
+! if (!buf_hide(curbuf) && !split)
+ {
+ ++emsg_off;
+! split = check_changed(curbuf, CCGD_AW);
+ --emsg_off;
+ }
+! if (split)
+ {
+ if (win_split(0, 0) == FAIL)
+ return;
+--- 7859,7895 ----
+ do_shell(NULL, 0);
+ }
+
+! #if defined(HAVE_DROP_FILE) || defined(PROTO)
+
+! static int drop_busy = FALSE;
+! static int drop_filec;
+! static char_u **drop_filev = NULL;
+! static int drop_split;
+! static void (*drop_callback)(void *);
+! static void *drop_cookie;
+!
+! static void
+! handle_drop_internal(void)
+ {
+ exarg_T ea;
+ int save_msg_scroll = msg_scroll;
+
+! // Setting the argument list may cause screen updates and being called
+! // recursively. Avoid that by setting drop_busy.
+! drop_busy = TRUE;
+
+ /* Check whether the current buffer is changed. If so, we will need
+ * to split the current window or data could be lost.
+ * We don't need to check if the 'hidden' option is set, as in this
+ * case the buffer won't be lost.
+ */
+! if (!buf_hide(curbuf) && !drop_split)
+ {
+ ++emsg_off;
+! drop_split = check_changed(curbuf, CCGD_AW);
+ --emsg_off;
+ }
+! if (drop_split)
+ {
+ if (win_split(0, 0) == FAIL)
+ return;
+***************
+*** 7924,7930 ****
+ /*
+ * Set up the new argument list.
+ */
+! alist_set(ALIST(curwin), filec, filev, FALSE, NULL, 0);
+
+ /*
+ * Move to the first file.
+--- 7904,7910 ----
+ /*
+ * Set up the new argument list.
+ */
+! alist_set(ALIST(curwin), drop_filec, drop_filev, FALSE, NULL, 0);
+
+ /*
+ * Move to the first file.
+***************
+*** 7942,7947 ****
+--- 7922,7999 ----
+ * unexpectedly. The screen will be redrawn by the caller, thus
+ * msg_scroll being set by displaying a message is irrelevant. */
+ msg_scroll = save_msg_scroll;
++
++ if (drop_callback != NULL)
++ drop_callback(drop_cookie);
++
++ drop_filev = NULL;
++ drop_busy = FALSE;
++ }
++
++ /*
++ * Handle a file drop. The code is here because a drop is *nearly* like an
++ * :args command, but not quite (we have a list of exact filenames, so we
++ * don't want to (a) parse a command line, or (b) expand wildcards. So the
++ * code is very similar to :args and hence needs access to a lot of the static
++ * functions in this file.
++ *
++ * The "filev" list must have been allocated using alloc(), as should each item
++ * in the list. This function takes over responsibility for freeing the "filev"
++ * list.
++ */
++ void
++ handle_drop(
++ int filec, // the number of files dropped
++ char_u **filev, // the list of files dropped
++ int split, // force splitting the window
++ void (*callback)(void *), // to be called after setting the argument
++ // list
++ void *cookie) // argument for "callback" (allocated)
++ {
++ // Cannot handle recursive drops, finish the pending one.
++ if (drop_busy)
++ {
++ FreeWild(filec, filev);
++ vim_free(cookie);
++ return;
++ }
++
++ // When calling handle_drop() more than once in a row we only use the last
++ // one.
++ if (drop_filev != NULL)
++ {
++ FreeWild(drop_filec, drop_filev);
++ vim_free(drop_cookie);
++ }
++
++ drop_filec = filec;
++ drop_filev = filev;
++ drop_split = split;
++ drop_callback = callback;
++ drop_cookie = cookie;
++
++ // Postpone this when:
++ // - editing the command line
++ // - not possible to change the current buffer
++ // - updating the screen
++ // As it may change buffers and window structures that are in use and cause
++ // freed memory to be used.
++ if (text_locked() || curbuf_locked() || updating_screen)
++ return;
++
++ handle_drop_internal();
++ }
++
++ /*
++ * To be called when text is unlocked, curbuf is unlocked or updating_screen is
++ * reset: Handle a postponed drop.
++ */
++ void
++ handle_any_postponed_drop(void)
++ {
++ if (!drop_busy && drop_filev != NULL
++ && !text_locked() && !curbuf_locked() && !updating_screen)
++ handle_drop_internal();
+ }
+ #endif
+
+*** ../vim-8.1.0227/src/proto/ex_docmd.pro 2018-05-17 13:52:34.000000000 +0200
+--- src/proto/ex_docmd.pro 2018-07-29 16:58:19.612440949 +0200
+***************
+*** 31,37 ****
+ void tabpage_close(int forceit);
+ void tabpage_close_other(tabpage_T *tp, int forceit);
+ void ex_all(exarg_T *eap);
+! void handle_drop(int filec, char_u **filev, int split);
+ void alist_clear(alist_T *al);
+ void alist_init(alist_T *al);
+ void alist_unlink(alist_T *al);
+--- 31,38 ----
+ void tabpage_close(int forceit);
+ void tabpage_close_other(tabpage_T *tp, int forceit);
+ void ex_all(exarg_T *eap);
+! void handle_drop(int filec, char_u **filev, int split, void (*callback)(void *), void *cookie);
+! void handle_any_postponed_drop(void);
+ void alist_clear(alist_T *al);
+ void alist_init(alist_T *al);
+ void alist_unlink(alist_T *al);
+*** ../vim-8.1.0227/src/gui.c 2018-07-29 16:09:14.636945607 +0200
+--- src/gui.c 2018-07-29 16:52:45.218249227 +0200
+***************
+*** 5383,5392 ****
+
+ #endif
+
+! #if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
+! || defined(FEAT_GUI_MSWIN) \
+! || defined(FEAT_GUI_MAC) \
+! || defined(PROTO)
+
+ static void gui_wingoto_xy(int x, int y);
+
+--- 5383,5389 ----
+
+ #endif
+
+! #if defined(HAVE_DROP_FILE) || defined(PROTO)
+
+ static void gui_wingoto_xy(int x, int y);
+
+***************
+*** 5409,5414 ****
+--- 5406,5447 ----
+ }
+
+ /*
++ * Function passed to handle_drop() for the actions to be done after the
++ * argument list has been updated.
++ */
++ static void
++ drop_callback(void *cookie)
++ {
++ char_u *p = cookie;
++
++ /* If Shift held down, change to first file's directory. If the first
++ * item is a directory, change to that directory (and let the explorer
++ * plugin show the contents). */
++ if (p != NULL)
++ {
++ if (mch_isdir(p))
++ {
++ if (mch_chdir((char *)p) == 0)
++ shorten_fnames(TRUE);
++ }
++ else if (vim_chdirfile(p, "drop") == OK)
++ shorten_fnames(TRUE);
++ vim_free(p);
++ }
++
++ /* Update the screen display */
++ update_screen(NOT_VALID);
++ # ifdef FEAT_MENU
++ gui_update_menus(0);
++ # endif
++ #ifdef FEAT_TITLE
++ maketitle();
++ #endif
++ setcursor();
++ out_flush_cursor(FALSE, FALSE);
++ }
++
++ /*
+ * Process file drop. Mouse cursor position, key modifiers, name of files
+ * and count of files are given. Argument "fnames[count]" has full pathnames
+ * of dropped files, they will be freed in this function, and caller can't use
+***************
+*** 5488,5520 ****
+ vim_free(fnames);
+ }
+ else
+! handle_drop(count, fnames, (modifiers & MOUSE_CTRL) != 0);
+!
+! /* If Shift held down, change to first file's directory. If the first
+! * item is a directory, change to that directory (and let the explorer
+! * plugin show the contents). */
+! if (p != NULL)
+! {
+! if (mch_isdir(p))
+! {
+! if (mch_chdir((char *)p) == 0)
+! shorten_fnames(TRUE);
+! }
+! else if (vim_chdirfile(p, "drop") == OK)
+! shorten_fnames(TRUE);
+! vim_free(p);
+! }
+!
+! /* Update the screen display */
+! update_screen(NOT_VALID);
+! # ifdef FEAT_MENU
+! gui_update_menus(0);
+! # endif
+! #ifdef FEAT_TITLE
+! maketitle();
+! #endif
+! setcursor();
+! out_flush_cursor(FALSE, FALSE);
+ }
+
+ entered = FALSE;
+--- 5521,5528 ----
+ vim_free(fnames);
+ }
+ else
+! handle_drop(count, fnames, (modifiers & MOUSE_CTRL) != 0,
+! drop_callback, (void *)p);
+ }
+
+ entered = FALSE;
+*** ../vim-8.1.0227/src/gui.h 2018-05-05 18:42:37.000000000 +0200
+--- src/gui.h 2018-07-29 16:52:19.418385701 +0200
+***************
+*** 65,72 ****
+ /*
+ * GUIs that support dropping files on a running Vim.
+ */
+! #if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MAC) \
+! || defined(FEAT_GUI_GTK)
+ # define HAVE_DROP_FILE
+ #endif
+
+--- 65,73 ----
+ /*
+ * GUIs that support dropping files on a running Vim.
+ */
+! #if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
+! || defined(FEAT_GUI_MSWIN) \
+! || defined(FEAT_GUI_MAC)
+ # define HAVE_DROP_FILE
+ #endif
+
+*** ../vim-8.1.0227/src/screen.c 2018-07-29 16:09:14.644945560 +0200
+--- src/screen.c 2018-07-29 16:51:41.606584708 +0200
+***************
+*** 526,531 ****
+--- 526,537 ----
+ #ifdef FEAT_TERMINAL
+ term_check_channel_closed_recently();
+ #endif
++
++ #ifdef HAVE_DROP_FILE
++ // If handle_drop() was called while updating_screen was TRUE need to
++ // handle the drop now.
++ handle_any_postponed_drop();
++ #endif
+ }
+
+ /*
+*** ../vim-8.1.0227/src/main.c 2018-06-23 16:12:15.784258242 +0200
+--- src/main.c 2018-07-29 17:02:36.091020303 +0200
+***************
+*** 911,917 ****
+
+ /*
+ * Call the main command loop. This never returns.
+! */
+ main_loop(FALSE, FALSE);
+
+ #endif /* NO_VIM_MAIN */
+--- 911,917 ----
+
+ /*
+ * Call the main command loop. This never returns.
+! */
+ main_loop(FALSE, FALSE);
+
+ #endif /* NO_VIM_MAIN */
+***************
+*** 1155,1163 ****
+ else if (do_redraw || stuff_empty())
+ {
+ #ifdef FEAT_GUI
+! /* If ui_breakcheck() was used a resize may have been postponed. */
+ gui_may_resize_shell();
+ #endif
+ /* Trigger CursorMoved if the cursor moved. */
+ if (!finish_op && (
+ has_cursormoved()
+--- 1155,1169 ----
+ else if (do_redraw || stuff_empty())
+ {
+ #ifdef FEAT_GUI
+! // If ui_breakcheck() was used a resize may have been postponed.
+ gui_may_resize_shell();
+ #endif
++ #ifdef HAVE_DROP_FILE
++ // If files were dropped while text was locked or the curbuf was
++ // locked, this would be a good time to handle the drop.
++ handle_any_postponed_drop();
++ #endif
++
+ /* Trigger CursorMoved if the cursor moved. */
+ if (!finish_op && (
+ has_cursormoved()
+*** ../vim-8.1.0227/src/gui_mac.c 2018-03-06 18:53:06.000000000 +0100
+--- src/gui_mac.c 2018-07-29 17:33:07.670760672 +0200
+***************
+*** 1007,1012 ****
+--- 1007,1061 ----
+ long theDate; // modification date/time
+ };
+
++ static long drop_numFiles;
++ static short drop_gotPosition;
++ static SelectionRange drop_thePosition;
++
++ static void
++ drop_callback(void *cookie UNUSED)
++ {
++ /* TODO: Handle the goto/select line more cleanly */
++ if ((drop_numFiles == 1) & (drop_gotPosition))
++ {
++ if (drop_thePosition.lineNum >= 0)
++ {
++ lnum = drop_thePosition.lineNum + 1;
++ /* oap->motion_type = MLINE;
++ setpcmark();*/
++ if (lnum < 1L)
++ lnum = 1L;
++ else if (lnum > curbuf->b_ml.ml_line_count)
++ lnum = curbuf->b_ml.ml_line_count;
++ curwin->w_cursor.lnum = lnum;
++ curwin->w_cursor.col = 0;
++ /* beginline(BL_SOL | BL_FIX);*/
++ }
++ else
++ goto_byte(drop_thePosition.startRange + 1);
++ }
++
++ /* Update the screen display */
++ update_screen(NOT_VALID);
++
++ /* Select the text if possible */
++ if (drop_gotPosition)
++ {
++ VIsual_active = TRUE;
++ VIsual_select = FALSE;
++ VIsual = curwin->w_cursor;
++ if (drop_thePosition.lineNum < 0)
++ {
++ VIsual_mode = 'v';
++ goto_byte(drop_thePosition.endRange);
++ }
++ else
++ {
++ VIsual_mode = 'V';
++ VIsual.col = 0;
++ }
++ }
++ }
++
+ /* The IDE uses the optional keyAEPosition parameter to tell the ed-
+ itor the selection range. If lineNum is zero or greater, scroll the text
+ to the specified line. If lineNum is less than zero, use the values in
+***************
+*** 1113,1160 ****
+ }
+
+ /* Handle the drop, :edit to get to the file */
+! handle_drop(numFiles, fnames, FALSE);
+!
+! /* TODO: Handle the goto/select line more cleanly */
+! if ((numFiles == 1) & (gotPosition))
+! {
+! if (thePosition.lineNum >= 0)
+! {
+! lnum = thePosition.lineNum + 1;
+! /* oap->motion_type = MLINE;
+! setpcmark();*/
+! if (lnum < 1L)
+! lnum = 1L;
+! else if (lnum > curbuf->b_ml.ml_line_count)
+! lnum = curbuf->b_ml.ml_line_count;
+! curwin->w_cursor.lnum = lnum;
+! curwin->w_cursor.col = 0;
+! /* beginline(BL_SOL | BL_FIX);*/
+! }
+! else
+! goto_byte(thePosition.startRange + 1);
+! }
+!
+! /* Update the screen display */
+! update_screen(NOT_VALID);
+!
+! /* Select the text if possible */
+! if (gotPosition)
+! {
+! VIsual_active = TRUE;
+! VIsual_select = FALSE;
+! VIsual = curwin->w_cursor;
+! if (thePosition.lineNum < 0)
+! {
+! VIsual_mode = 'v';
+! goto_byte(thePosition.endRange);
+! }
+! else
+! {
+! VIsual_mode = 'V';
+! VIsual.col = 0;
+! }
+! }
+
+ setcursor();
+ out_flush();
+--- 1162,1171 ----
+ }
+
+ /* Handle the drop, :edit to get to the file */
+! drop_numFiles = numFiles;
+! drop_gotPosition = gotPosition;
+! drop_thePosition = thePosition;
+! handle_drop(numFiles, fnames, FALSE, drop_callback, NULL);
+
+ setcursor();
+ out_flush();
+*** ../vim-8.1.0227/src/version.c 2018-07-29 16:13:13.431551849 +0200
+--- src/version.c 2018-07-29 16:44:55.344870301 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 228,
+ /**/
+
+
+--
+We do not stumble over mountains, but over molehills.
+ Confucius
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0229 b/data/vim/patches/8.1.0229
new file mode 100644
index 000000000..089e17bea
--- /dev/null
+++ b/data/vim/patches/8.1.0229
@@ -0,0 +1,124 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0229
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0229
+Problem: Crash when dumping profiling data.
+Solution: Reset flag indicating that initialization was done.
+Files: src/userfunc.c
+
+
+*** ../vim-8.1.0228/src/userfunc.c 2018-07-10 19:39:14.994973018 +0200
+--- src/userfunc.c 2018-07-22 03:43:14.268242302 +0200
+***************
+*** 1102,1107 ****
+--- 1102,1122 ----
+ return FALSE;
+ }
+
++ static void
++ func_clear_items(ufunc_T *fp)
++ {
++ ga_clear_strings(&(fp->uf_args));
++ ga_clear_strings(&(fp->uf_lines));
++ #ifdef FEAT_PROFILE
++ vim_free(fp->uf_tml_count);
++ fp->uf_tml_count = NULL;
++ vim_free(fp->uf_tml_total);
++ fp->uf_tml_total = NULL;
++ vim_free(fp->uf_tml_self);
++ fp->uf_tml_self = NULL;
++ #endif
++ }
++
+ /*
+ * Free all things that a function contains. Does not free the function
+ * itself, use func_free() for that.
+***************
+*** 1115,1127 ****
+ fp->uf_cleared = TRUE;
+
+ /* clear this function */
+! ga_clear_strings(&(fp->uf_args));
+! ga_clear_strings(&(fp->uf_lines));
+! #ifdef FEAT_PROFILE
+! vim_free(fp->uf_tml_count);
+! vim_free(fp->uf_tml_total);
+! vim_free(fp->uf_tml_self);
+! #endif
+ funccal_unref(fp->uf_scoped, fp, force);
+ }
+
+--- 1130,1136 ----
+ fp->uf_cleared = TRUE;
+
+ /* clear this function */
+! func_clear_items(fp);
+ funccal_unref(fp->uf_scoped, fp, force);
+ }
+
+***************
+*** 2312,2320 ****
+ else
+ {
+ /* redefine existing function */
+- ga_clear_strings(&(fp->uf_args));
+- ga_clear_strings(&(fp->uf_lines));
+ VIM_CLEAR(name);
+ }
+ }
+ }
+--- 2321,2332 ----
+ else
+ {
+ /* redefine existing function */
+ VIM_CLEAR(name);
++ func_clear_items(fp);
++ #ifdef FEAT_PROFILE
++ fp->uf_profiling = FALSE;
++ fp->uf_prof_initialized = FALSE;
++ #endif
+ }
+ }
+ }
+***************
+*** 2434,2443 ****
+ fp->uf_scoped = NULL;
+
+ #ifdef FEAT_PROFILE
+- fp->uf_tml_count = NULL;
+- fp->uf_tml_total = NULL;
+- fp->uf_tml_self = NULL;
+- fp->uf_profiling = FALSE;
+ if (prof_def_func())
+ func_do_profile(fp);
+ #endif
+--- 2446,2451 ----
+*** ../vim-8.1.0228/src/version.c 2018-07-29 17:35:19.497750288 +0200
+--- src/version.c 2018-07-29 17:40:20.711582375 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 229,
+ /**/
+
+--
+CUSTOMER: Well, can you hang around a couple of minutes? He won't be
+ long.
+MORTICIAN: Naaah, I got to go on to Robinson's -- they've lost nine today.
+CUSTOMER: Well, when is your next round?
+MORTICIAN: Thursday.
+DEAD PERSON: I think I'll go for a walk.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0230 b/data/vim/patches/8.1.0230
new file mode 100644
index 000000000..315207b0f
--- /dev/null
+++ b/data/vim/patches/8.1.0230
@@ -0,0 +1,156 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0230
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0230
+Problem: Directly checking 'buftype' value.
+Solution: Add the bt_normal() function. (Yegappan Lakshmanan)
+Files: src/buffer.c, src/ex_docmd.c, src/fileio.c, src/proto/buffer.pro,
+ src/quickfix.c
+
+*** ../vim-8.1.0229/src/buffer.c 2018-06-23 19:22:45.598486362 +0200
+--- src/buffer.c 2018-08-01 17:39:05.854918677 +0200
+***************
+*** 5627,5632 ****
+--- 5627,5641 ----
+ #endif
+
+ /*
++ * Return TRUE if "buf" is a normal buffer, 'buftype' is empty.
++ */
++ int
++ bt_normal(buf_T *buf)
++ {
++ return buf != NULL && buf->b_p_bt[0] == NUL;
++ }
++
++ /*
+ * Return TRUE if "buf" is the quickfix buffer.
+ */
+ int
+*** ../vim-8.1.0229/src/ex_docmd.c 2018-07-29 17:35:19.493750319 +0200
+--- src/ex_docmd.c 2018-08-01 17:37:07.895552456 +0200
+***************
+*** 11768,11774 ****
+ */
+ if ((*flagp & SSOP_FOLDS)
+ && wp->w_buffer->b_ffname != NULL
+! && (*wp->w_buffer->b_p_bt == NUL || bt_help(wp->w_buffer)))
+ {
+ if (put_folds(fd, wp) == FAIL)
+ return FAIL;
+--- 11768,11774 ----
+ */
+ if ((*flagp & SSOP_FOLDS)
+ && wp->w_buffer->b_ffname != NULL
+! && (bt_normal(wp->w_buffer) || bt_help(wp->w_buffer)))
+ {
+ if (put_folds(fd, wp) == FAIL)
+ return FAIL;
+*** ../vim-8.1.0229/src/fileio.c 2018-07-07 18:34:08.430551330 +0200
+--- src/fileio.c 2018-08-01 17:37:07.899552434 +0200
+***************
+*** 6897,6903 ****
+ * this buffer. */
+ if (buf->b_ffname == NULL
+ || buf->b_ml.ml_mfp == NULL
+! || *buf->b_p_bt != NUL
+ || buf->b_saving
+ || busy
+ #ifdef FEAT_NETBEANS_INTG
+--- 6897,6903 ----
+ * this buffer. */
+ if (buf->b_ffname == NULL
+ || buf->b_ml.ml_mfp == NULL
+! || !bt_normal(buf)
+ || buf->b_saving
+ || busy
+ #ifdef FEAT_NETBEANS_INTG
+*** ../vim-8.1.0229/src/proto/buffer.pro 2018-06-03 14:42:17.848505102 +0200
+--- src/proto/buffer.pro 2018-08-01 17:39:55.638650591 +0200
+***************
+*** 56,61 ****
+--- 56,62 ----
+ void do_modelines(int flags);
+ int read_viminfo_bufferlist(vir_T *virp, int writing);
+ void write_viminfo_bufferlist(FILE *fp);
++ int bt_normal(buf_T *buf);
+ int bt_quickfix(buf_T *buf);
+ int bt_terminal(buf_T *buf);
+ int bt_help(buf_T *buf);
+*** ../vim-8.1.0229/src/quickfix.c 2018-07-25 22:36:48.991518559 +0200
+--- src/quickfix.c 2018-08-01 17:37:07.899552434 +0200
+***************
+*** 2487,2493 ****
+ win_T *wp;
+
+ FOR_ALL_WINDOWS(wp)
+! if (wp->w_buffer->b_p_bt[0] == NUL)
+ return wp;
+
+ return NULL;
+--- 2487,2493 ----
+ win_T *wp;
+
+ FOR_ALL_WINDOWS(wp)
+! if (bt_normal(wp->w_buffer))
+ return wp;
+
+ return NULL;
+***************
+*** 2563,2569 ****
+ win = curwin;
+ do
+ {
+! if (win->w_buffer->b_p_bt[0] == NUL)
+ break;
+ if (win->w_prev == NULL)
+ win = lastwin; /* wrap around the top */
+--- 2563,2569 ----
+ win = curwin;
+ do
+ {
+! if (bt_normal(win->w_buffer))
+ break;
+ if (win->w_prev == NULL)
+ win = lastwin; /* wrap around the top */
+***************
+*** 2620,2627 ****
+ }
+
+ /* Remember a usable window. */
+! if (altwin == NULL && !win->w_p_pvw
+! && win->w_buffer->b_p_bt[0] == NUL)
+ altwin = win;
+ }
+
+--- 2620,2626 ----
+ }
+
+ /* Remember a usable window. */
+! if (altwin == NULL && !win->w_p_pvw && bt_normal(win->w_buffer))
+ altwin = win;
+ }
+
+*** ../vim-8.1.0229/src/version.c 2018-07-29 17:40:37.239467625 +0200
+--- src/version.c 2018-08-01 17:38:23.335147376 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 230,
+ /**/
+
+--
+Individualists unite!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0231 b/data/vim/patches/8.1.0231
new file mode 100644
index 000000000..00ee879a4
--- /dev/null
+++ b/data/vim/patches/8.1.0231
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0231
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0231
+Problem: :help -? goes to help for -+.
+Solution: Add -? to list of special cases. (Hirohito Higashi)
+Files: src/ex_cmds.c, src/testdir/test_help_tagjump.vim
+
+
+*** ../vim-8.1.0230/src/ex_cmds.c 2018-06-28 22:22:56.225315645 +0200
+--- src/ex_cmds.c 2018-08-01 17:59:36.447037278 +0200
+***************
+*** 6583,6589 ****
+ static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
+ "/*", "/\\*", "\"*", "**",
+ "cpo-*", "/\\(\\)", "/\\%(\\)",
+! "?", ":?", "?<CR>", "g?", "g?g?", "g??",
+ "/\\?", "/\\z(\\)", "\\=", ":s\\=",
+ "[count]", "[quotex]",
+ "[range]", ":[range]",
+--- 6583,6589 ----
+ static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
+ "/*", "/\\*", "\"*", "**",
+ "cpo-*", "/\\(\\)", "/\\%(\\)",
+! "?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??",
+ "/\\?", "/\\z(\\)", "\\=", ":s\\=",
+ "[count]", "[quotex]",
+ "[range]", ":[range]",
+***************
+*** 6593,6599 ****
+ static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
+ "/star", "/\\\\star", "quotestar", "starstar",
+ "cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
+! "?", ":?", "?<CR>", "g?", "g?g?", "g??",
+ "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+ "\\[count]", "\\[quotex]",
+ "\\[range]", ":\\[range]",
+--- 6593,6599 ----
+ static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
+ "/star", "/\\\\star", "quotestar", "starstar",
+ "cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
+! "?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??",
+ "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+ "\\[count]", "\\[quotex]",
+ "\\[range]", ":\\[range]",
+*** ../vim-8.1.0230/src/testdir/test_help_tagjump.vim 2017-03-16 22:15:33.000000000 +0100
+--- src/testdir/test_help_tagjump.vim 2018-08-01 17:59:36.447037278 +0200
+***************
+*** 26,31 ****
+--- 26,36 ----
+ call assert_true(getline('.') =~ '\*:?\*')
+ helpclose
+
++ help -?
++ call assert_equal("help", &filetype)
++ call assert_true(getline('.') =~ '\*-?\*')
++ helpclose
++
+ help FileW*Post
+ call assert_equal("help", &filetype)
+ call assert_true(getline('.') =~ '\*FileWritePost\*')
+*** ../vim-8.1.0230/src/version.c 2018-08-01 17:53:04.693381270 +0200
+--- src/version.c 2018-08-01 18:01:08.102499244 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 231,
+ /**/
+
+--
+ARTHUR: Then who is your lord?
+WOMAN: We don't have a lord.
+ARTHUR: What?
+DENNIS: I told you. We're an anarcho-syndicalist commune. We take it in
+ turns to act as a sort of executive officer for the week.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0232 b/data/vim/patches/8.1.0232
new file mode 100644
index 000000000..b7ae0f036
--- /dev/null
+++ b/data/vim/patches/8.1.0232
@@ -0,0 +1,188 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0232
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0232
+Problem: Ruby error does not include backtrace.
+Solution: Add an error backtrace. (Masataka Pocke Kuwabara, closes #3267)
+Files: src/if_ruby.c
+
+
+*** ../vim-8.1.0231/src/if_ruby.c 2018-07-28 17:18:05.164865356 +0200
+--- src/if_ruby.c 2018-08-01 18:41:37.613550764 +0200
+***************
+*** 93,98 ****
+--- 93,103 ----
+ # define RUBY20_OR_LATER 1
+ #endif
+
++ #if (defined(RUBY_VERSION) && RUBY_VERSION >= 21) \
++ || (defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 21)
++ # define RUBY21_OR_LATER 1
++ #endif
++
+ #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19
+ /* Ruby 1.9 defines a number of static functions which use rb_num2long and
+ * rb_int2big */
+***************
+*** 238,248 ****
+--- 243,263 ----
+ # define rb_eRuntimeError (*dll_rb_eRuntimeError)
+ # define rb_eStandardError (*dll_rb_eStandardError)
+ # define rb_eval_string_protect dll_rb_eval_string_protect
++ # ifdef RUBY21_OR_LATER
++ # define rb_funcallv dll_rb_funcallv
++ # else
++ # define rb_funcall2 dll_rb_funcall2
++ # endif
+ # define rb_global_variable dll_rb_global_variable
+ # define rb_hash_aset dll_rb_hash_aset
+ # define rb_hash_new dll_rb_hash_new
+ # define rb_inspect dll_rb_inspect
+ # define rb_int2inum dll_rb_int2inum
++ # ifdef RUBY19_OR_LATER
++ # define rb_intern2 dll_rb_intern2
++ # else
++ # define rb_intern dll_rb_intern
++ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18
+ # define rb_fix2int dll_rb_fix2int
+***************
+*** 367,377 ****
+--- 382,402 ----
+ static VALUE *dll_rb_eRuntimeError;
+ static VALUE *dll_rb_eStandardError;
+ static VALUE (*dll_rb_eval_string_protect) (const char*, int*);
++ # ifdef RUBY21_OR_LATER
++ static VALUE (*dll_rb_funcallv) (VALUE, ID, int, const VALUE*);
++ # else
++ static VALUE (*dll_rb_funcall2) (VALUE, ID, int, const VALUE*);
++ # endif
+ static void (*dll_rb_global_variable) (VALUE*);
+ static VALUE (*dll_rb_hash_aset) (VALUE, VALUE, VALUE);
+ static VALUE (*dll_rb_hash_new) (void);
+ static VALUE (*dll_rb_inspect) (VALUE);
+ static VALUE (*dll_rb_int2inum) (long);
++ # ifdef RUBY19_OR_LATER
++ static ID (*dll_rb_intern2) (const char*, long);
++ # else
++ static ID (*dll_rb_intern) (const char*);
++ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ static long (*dll_rb_fix2int) (VALUE);
+ static long (*dll_rb_num2int) (VALUE);
+***************
+*** 561,571 ****
+--- 586,606 ----
+ {"rb_eRuntimeError", (RUBY_PROC*)&dll_rb_eRuntimeError},
+ {"rb_eStandardError", (RUBY_PROC*)&dll_rb_eStandardError},
+ {"rb_eval_string_protect", (RUBY_PROC*)&dll_rb_eval_string_protect},
++ # ifdef RUBY21_OR_LATER
++ {"rb_funcallv", (RUBY_PROC*)&dll_rb_funcallv},
++ # else
++ {"rb_funcall2", (RUBY_PROC*)&dll_rb_funcall2},
++ # endif
+ {"rb_global_variable", (RUBY_PROC*)&dll_rb_global_variable},
+ {"rb_hash_aset", (RUBY_PROC*)&dll_rb_hash_aset},
+ {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
+ {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+ {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
++ # ifdef RUBY19_OR_LATER
++ {"rb_intern2", (RUBY_PROC*)&dll_rb_intern2},
++ # else
++ {"rb_intern", (RUBY_PROC*)&dll_rb_intern},
++ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+ {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
+***************
+*** 926,934 ****
+--- 961,973 ----
+ RUBYEXTERN VALUE ruby_errinfo;
+ #endif
+ #endif
++ VALUE error;
+ VALUE eclass;
+ VALUE einfo;
++ VALUE bt;
++ int attr;
+ char buff[BUFSIZ];
++ long i;
+
+ #define TAG_RETURN 0x1
+ #define TAG_BREAK 0x2
+***************
+*** 960,971 ****
+ case TAG_RAISE:
+ case TAG_FATAL:
+ #ifdef RUBY19_OR_LATER
+! eclass = CLASS_OF(rb_errinfo());
+! einfo = rb_obj_as_string(rb_errinfo());
+ #else
+! eclass = CLASS_OF(ruby_errinfo);
+! einfo = rb_obj_as_string(ruby_errinfo);
+ #endif
+ if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0)
+ {
+ EMSG(_("E272: unhandled exception"));
+--- 999,1010 ----
+ case TAG_RAISE:
+ case TAG_FATAL:
+ #ifdef RUBY19_OR_LATER
+! error = rb_errinfo();
+ #else
+! error = ruby_errinfo;
+ #endif
++ eclass = CLASS_OF(error);
++ einfo = rb_obj_as_string(error);
+ if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0)
+ {
+ EMSG(_("E272: unhandled exception"));
+***************
+*** 982,987 ****
+--- 1021,1037 ----
+ if (p) *p = '\0';
+ EMSG(buff);
+ }
++
++ attr = syn_name2attr((char_u *)"Error");
++ # ifdef RUBY21_OR_LATER
++ bt = rb_funcallv(error, rb_intern("backtrace"), 0, 0);
++ for (i = 0; i < RARRAY_LEN(bt); i++)
++ msg_attr((char_u *)RSTRING_PTR(RARRAY_AREF(bt, i)), attr);
++ # else
++ bt = rb_funcall2(error, rb_intern("backtrace"), 0, 0);
++ for (i = 0; i < RARRAY_LEN(bt); i++)
++ msg_attr((char_u *)RSTRING_PTR(RARRAY_PTR(bt)[i]), attr);
++ # endif
+ break;
+ default:
+ vim_snprintf(buff, BUFSIZ, _("E273: unknown longjmp status %d"), state);
+*** ../vim-8.1.0231/src/version.c 2018-08-01 18:02:57.493860532 +0200
+--- src/version.c 2018-08-01 18:39:43.442285284 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 232,
+ /**/
+
+--
+ARTHUR: Be quiet!
+DENNIS: --but by a two-thirds majority in the case of more--
+ARTHUR: Be quiet! I order you to be quiet!
+WOMAN: Order, eh -- who does he think he is?
+ARTHUR: I am your king!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0233 b/data/vim/patches/8.1.0233
new file mode 100644
index 000000000..92eddef3b
--- /dev/null
+++ b/data/vim/patches/8.1.0233
@@ -0,0 +1,317 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0233
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0233
+Problem: "safe" argument of call_vim_function() is always FALSE.
+Solution: Remove the argument.
+Files: src/eval.c, src/proto/eval.pro, src/edit.c, src/mbyte.c,
+ src/normal.c, src/ex_getln.c
+
+
+*** ../vim-8.1.0232/src/eval.c 2018-07-25 21:19:09.359656999 +0200
+--- src/eval.c 2018-08-01 19:01:56.055522006 +0200
+***************
+*** 1021,1049 ****
+ char_u *func,
+ int argc,
+ typval_T *argv,
+! typval_T *rettv,
+! int safe) /* use the sandbox */
+ {
+ int doesrange;
+- void *save_funccalp = NULL;
+ int ret;
+
+- if (safe)
+- {
+- save_funccalp = save_funccal();
+- ++sandbox;
+- }
+-
+ rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */
+ ret = call_func(func, (int)STRLEN(func), rettv, argc, argv, NULL,
+ curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+ &doesrange, TRUE, NULL, NULL);
+- if (safe)
+- {
+- --sandbox;
+- restore_funccal(save_funccalp);
+- }
+-
+ if (ret == FAIL)
+ clear_tv(rettv);
+
+--- 1021,1035 ----
+ char_u *func,
+ int argc,
+ typval_T *argv,
+! typval_T *rettv)
+ {
+ int doesrange;
+ int ret;
+
+ rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */
+ ret = call_func(func, (int)STRLEN(func), rettv, argc, argv, NULL,
+ curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+ &doesrange, TRUE, NULL, NULL);
+ if (ret == FAIL)
+ clear_tv(rettv);
+
+***************
+*** 1060,1072 ****
+ call_func_retnr(
+ char_u *func,
+ int argc,
+! typval_T *argv,
+! int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+ varnumber_T retval;
+
+! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL)
+ return -1;
+
+ retval = get_tv_number_chk(&rettv, NULL);
+--- 1046,1057 ----
+ call_func_retnr(
+ char_u *func,
+ int argc,
+! typval_T *argv)
+ {
+ typval_T rettv;
+ varnumber_T retval;
+
+! if (call_vim_function(func, argc, argv, &rettv) == FAIL)
+ return -1;
+
+ retval = get_tv_number_chk(&rettv, NULL);
+***************
+*** 1088,1100 ****
+ call_func_retstr(
+ char_u *func,
+ int argc,
+! typval_T *argv,
+! int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+ char_u *retval;
+
+! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL)
+ return NULL;
+
+ retval = vim_strsave(get_tv_string(&rettv));
+--- 1073,1084 ----
+ call_func_retstr(
+ char_u *func,
+ int argc,
+! typval_T *argv)
+ {
+ typval_T rettv;
+ char_u *retval;
+
+! if (call_vim_function(func, argc, argv, &rettv) == FAIL)
+ return NULL;
+
+ retval = vim_strsave(get_tv_string(&rettv));
+***************
+*** 1113,1124 ****
+ call_func_retlist(
+ char_u *func,
+ int argc,
+! typval_T *argv,
+! int safe) /* use the sandbox */
+ {
+ typval_T rettv;
+
+! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL)
+ return NULL;
+
+ if (rettv.v_type != VAR_LIST)
+--- 1097,1107 ----
+ call_func_retlist(
+ char_u *func,
+ int argc,
+! typval_T *argv)
+ {
+ typval_T rettv;
+
+! if (call_vim_function(func, argc, argv, &rettv) == FAIL)
+ return NULL;
+
+ if (rettv.v_type != VAR_LIST)
+*** ../vim-8.1.0232/src/proto/eval.pro 2018-07-25 21:19:09.359656999 +0200
+--- src/proto/eval.pro 2018-08-01 19:01:23.155692745 +0200
+***************
+*** 19,28 ****
+ list_T *eval_spell_expr(char_u *badword, char_u *expr);
+ int get_spellword(list_T *list, char_u **pp);
+ typval_T *eval_expr(char_u *arg, char_u **nextcmd);
+! int call_vim_function(char_u *func, int argc, typval_T *argv, typval_T *rettv, int safe);
+! varnumber_T call_func_retnr(char_u *func, int argc, typval_T *argv, int safe);
+! void *call_func_retstr(char_u *func, int argc, typval_T *argv, int safe);
+! void *call_func_retlist(char_u *func, int argc, typval_T *argv, int safe);
+ int eval_foldexpr(char_u *arg, int *cp);
+ void ex_let(exarg_T *eap);
+ void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first);
+--- 19,28 ----
+ list_T *eval_spell_expr(char_u *badword, char_u *expr);
+ int get_spellword(list_T *list, char_u **pp);
+ typval_T *eval_expr(char_u *arg, char_u **nextcmd);
+! int call_vim_function(char_u *func, int argc, typval_T *argv, typval_T *rettv);
+! varnumber_T call_func_retnr(char_u *func, int argc, typval_T *argv);
+! void *call_func_retstr(char_u *func, int argc, typval_T *argv);
+! void *call_func_retlist(char_u *func, int argc, typval_T *argv);
+ int eval_foldexpr(char_u *arg, int *cp);
+ void ex_let(exarg_T *eap);
+ void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first);
+*** ../vim-8.1.0232/src/edit.c 2018-07-29 16:09:14.632945629 +0200
+--- src/edit.c 2018-08-01 19:00:45.703885362 +0200
+***************
+*** 4239,4245 ****
+ curbuf_save = curbuf;
+
+ /* Call a function, which returns a list or dict. */
+! if (call_vim_function(funcname, 2, args, &rettv, FALSE) == OK)
+ {
+ switch (rettv.v_type)
+ {
+--- 4239,4245 ----
+ curbuf_save = curbuf;
+
+ /* Call a function, which returns a list or dict. */
+! if (call_vim_function(funcname, 2, args, &rettv) == OK)
+ {
+ switch (rettv.v_type)
+ {
+***************
+*** 5569,5575 ****
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+! col = call_func_retnr(funcname, 2, args, FALSE);
+ if (curwin_save != curwin || curbuf_save != curbuf)
+ {
+ EMSG(_(e_complwin));
+--- 5569,5575 ----
+ pos = curwin->w_cursor;
+ curwin_save = curwin;
+ curbuf_save = curbuf;
+! col = call_func_retnr(funcname, 2, args);
+ if (curwin_save != curwin || curbuf_save != curbuf)
+ {
+ EMSG(_(e_complwin));
+*** ../vim-8.1.0232/src/mbyte.c 2018-07-14 19:30:32.320395535 +0200
+--- src/mbyte.c 2018-08-01 18:58:55.524439870 +0200
+***************
+*** 4825,4831 ****
+ argv[0].v_type = VAR_NUMBER;
+ argv[0].vval.v_number = active ? 1 : 0;
+ argv[1].v_type = VAR_UNKNOWN;
+! (void)call_func_retnr(p_imaf, 1, argv, FALSE);
+ }
+
+ static int
+--- 4825,4831 ----
+ argv[0].v_type = VAR_NUMBER;
+ argv[0].vval.v_number = active ? 1 : 0;
+ argv[1].v_type = VAR_UNKNOWN;
+! (void)call_func_retnr(p_imaf, 1, argv);
+ }
+
+ static int
+***************
+*** 4839,4845 ****
+ /* FIXME: :py print 'xxx' is shown duplicate result.
+ * Use silent to avoid it. */
+ ++msg_silent;
+! is_active = call_func_retnr(p_imsf, 0, NULL, FALSE);
+ --msg_silent;
+ return (is_active > 0);
+ }
+--- 4839,4845 ----
+ /* FIXME: :py print 'xxx' is shown duplicate result.
+ * Use silent to avoid it. */
+ ++msg_silent;
+! is_active = call_func_retnr(p_imsf, 0, NULL);
+ --msg_silent;
+ return (is_active > 0);
+ }
+*** ../vim-8.1.0232/src/normal.c 2018-07-29 16:09:14.640945583 +0200
+--- src/normal.c 2018-08-01 18:59:09.360371320 +0200
+***************
+*** 2248,2254 ****
+ virtual_op = MAYBE;
+ # endif
+
+! (void)call_func_retnr(p_opfunc, 1, argv, FALSE);
+
+ # ifdef FEAT_VIRTUALEDIT
+ virtual_op = save_virtual_op;
+--- 2248,2254 ----
+ virtual_op = MAYBE;
+ # endif
+
+! (void)call_func_retnr(p_opfunc, 1, argv);
+
+ # ifdef FEAT_VIRTUALEDIT
+ virtual_op = save_virtual_op;
+*** ../vim-8.1.0232/src/ex_getln.c 2018-07-28 19:20:09.787586245 +0200
+--- src/ex_getln.c 2018-08-01 19:00:06.272086002 +0200
+***************
+*** 5279,5285 ****
+ */
+ static void *
+ call_user_expand_func(
+! void *(*user_expand_func)(char_u *, int, typval_T *, int),
+ expand_T *xp,
+ int *num_file,
+ char_u ***file)
+--- 5279,5285 ----
+ */
+ static void *
+ call_user_expand_func(
+! void *(*user_expand_func)(char_u *, int, typval_T *),
+ expand_T *xp,
+ int *num_file,
+ char_u ***file)
+***************
+*** 5318,5324 ****
+ ccline.cmdprompt = NULL;
+ current_SID = xp->xp_scriptID;
+
+! ret = user_expand_func(xp->xp_arg, 3, args, FALSE);
+
+ ccline = save_ccline;
+ current_SID = save_current_SID;
+--- 5318,5324 ----
+ ccline.cmdprompt = NULL;
+ current_SID = xp->xp_scriptID;
+
+! ret = user_expand_func(xp->xp_arg, 3, args);
+
+ ccline = save_ccline;
+ current_SID = save_current_SID;
+*** ../vim-8.1.0232/src/version.c 2018-08-01 18:42:09.837344296 +0200
+--- src/version.c 2018-08-01 19:05:21.534428381 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 233,
+ /**/
+
+--
+Some say the world will end in fire; some say in segfaults.
+I say it will end in a curly bracket.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0234 b/data/vim/patches/8.1.0234
new file mode 100644
index 000000000..bf2ab75e6
--- /dev/null
+++ b/data/vim/patches/8.1.0234
@@ -0,0 +1,160 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0234
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0234
+Problem: Incorrect reference counting in Perl interface.
+Solution: Call SvREFCNT_inc more often, add a test. (Damien)
+Files: src/if_perl.xs, src/testdir/test_perl.vim
+
+
+*** ../vim-8.1.0233/src/if_perl.xs 2018-07-25 22:02:32.231966301 +0200
+--- src/if_perl.xs 2018-08-02 21:43:01.012805454 +0200
+***************
+*** 831,838 ****
+ ptr->w_perl_private = newSV(0);
+ sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
+ }
+! else
+! SvREFCNT_inc_void_NN(ptr->w_perl_private);
+ SvRV(rv) = ptr->w_perl_private;
+ SvROK_on(rv);
+ return sv_bless(rv, gv_stashpv("VIWIN", TRUE));
+--- 831,837 ----
+ ptr->w_perl_private = newSV(0);
+ sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
+ }
+! SvREFCNT_inc_void_NN(ptr->w_perl_private);
+ SvRV(rv) = ptr->w_perl_private;
+ SvROK_on(rv);
+ return sv_bless(rv, gv_stashpv("VIWIN", TRUE));
+***************
+*** 847,854 ****
+ ptr->b_perl_private = newSV(0);
+ sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
+ }
+! else
+! SvREFCNT_inc_void_NN(ptr->b_perl_private);
+ SvRV(rv) = ptr->b_perl_private;
+ SvROK_on(rv);
+ return sv_bless(rv, gv_stashpv("VIBUF", TRUE));
+--- 846,852 ----
+ ptr->b_perl_private = newSV(0);
+ sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
+ }
+! SvREFCNT_inc_void_NN(ptr->b_perl_private);
+ SvRV(rv) = ptr->b_perl_private;
+ SvROK_on(rv);
+ return sv_bless(rv, gv_stashpv("VIBUF", TRUE));
+***************
+*** 918,929 ****
+ else
+ rv = newBUFrv(newSV(0), curbuf);
+
+! if (SvRV(sv) == SvRV(rv))
+! SvREFCNT_dec(SvRV(rv));
+! else // XXX: Not sure if the `else` condition are right
+! // Test_SvREFCNT() pass in all case.
+ sv_setsv(sv, rv);
+
+ return 0;
+ }
+ #endif /* !PROTO */
+--- 916,928 ----
+ else
+ rv = newBUFrv(newSV(0), curbuf);
+
+! if (SvRV(sv) != SvRV(rv))
+! // XXX: This magic variable is a bit confusing...
+! // Is curently refcounted ?
+ sv_setsv(sv, rv);
+
++ SvREFCNT_dec(rv);
++
+ return 0;
+ }
+ #endif /* !PROTO */
+*** ../vim-8.1.0233/src/testdir/test_perl.vim 2018-07-25 22:02:32.235966277 +0200
+--- src/testdir/test_perl.vim 2018-08-02 21:39:46.757852657 +0200
+***************
+*** 4,9 ****
+--- 4,12 ----
+ finish
+ end
+
++ " FIXME: RunTest don't see any error when Perl abort...
++ perl $SIG{__WARN__} = sub { die "Unexpected warnings from perl: @_" };
++
+ func Test_change_buffer()
+ call setline(line('$'), ['1 line 1'])
+ perl VIM::DoCommand("normal /^1\n")
+***************
+*** 229,234 ****
+--- 232,246 ----
+ #line 5 "Test_000_SvREFCNT()"
+ my ($b, $w);
+
++ my $num = 0;
++ for ( 0 .. 100 ) {
++ if ( ++$num >= 8 ) { $num = 0 }
++ VIM::DoCommand("buffer X$num");
++ $b = $curbuf;
++ }
++
++ VIM::DoCommand("buffer t");
++
+ $b = $curbuf for 0 .. 100;
+ $w = $curwin for 0 .. 100;
+ () = VIM::Buffers for 0 .. 100;
+***************
+*** 240,251 ****
+ my $cw = Internals::SvREFCNT($$w);
+ VIM::Eval("assert_equal(2, $cb, 'T1')");
+ VIM::Eval("assert_equal(2, $cw, 'T2')");
+ foreach ( VIM::Buffers, VIM::Windows ) {
+ my $c = Internals::SvREFCNT($_);
+ VIM::Eval("assert_equal(2, $c, 'T3')");
+ $c = Internals::SvREFCNT($$_);
+! # Why only one ref?
+! # Look wrong but work. Maybe not portable...
+ VIM::Eval("assert_equal(1, $c, 'T4')");
+ }
+ $cb = Internals::SvREFCNT($$curbuf);
+--- 252,264 ----
+ my $cw = Internals::SvREFCNT($$w);
+ VIM::Eval("assert_equal(2, $cb, 'T1')");
+ VIM::Eval("assert_equal(2, $cw, 'T2')");
++ my $strongref;
+ foreach ( VIM::Buffers, VIM::Windows ) {
++ VIM::DoCommand("%bw!");
+ my $c = Internals::SvREFCNT($_);
+ VIM::Eval("assert_equal(2, $c, 'T3')");
+ $c = Internals::SvREFCNT($$_);
+! next if $c == 2 && !$strongref++;
+ VIM::Eval("assert_equal(1, $c, 'T4')");
+ }
+ $cb = Internals::SvREFCNT($$curbuf);
+*** ../vim-8.1.0233/src/version.c 2018-08-01 19:05:59.286223185 +0200
+--- src/version.c 2018-08-02 21:44:31.440307634 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 234,
+ /**/
+
+--
+I'm sure that I asked CBuilder to do a "full" install. Looks like I got
+a "fool" install, instead. Charles E Campbell, Jr, PhD
+
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0235 b/data/vim/patches/8.1.0235
new file mode 100644
index 000000000..ecc85a937
--- /dev/null
+++ b/data/vim/patches/8.1.0235
@@ -0,0 +1,171 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0235
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0235 (after 8.1.0231)
+Problem: More help tags that jump to the wrong location.
+Solution: Add more exceptions and a table for "expr-" tags. (Hirohito
+ Higashi)
+Files: src/ex_cmds.c, src/testdir/test_help_tagjump.vim
+
+
+*** ../vim-8.1.0234/src/ex_cmds.c 2018-08-01 18:02:57.493860532 +0200
+--- src/ex_cmds.c 2018-08-02 22:21:56.015278660 +0200
+***************
+*** 6583,6589 ****
+ static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
+ "/*", "/\\*", "\"*", "**",
+ "cpo-*", "/\\(\\)", "/\\%(\\)",
+! "?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??",
+ "/\\?", "/\\z(\\)", "\\=", ":s\\=",
+ "[count]", "[quotex]",
+ "[range]", ":[range]",
+--- 6583,6590 ----
+ static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
+ "/*", "/\\*", "\"*", "**",
+ "cpo-*", "/\\(\\)", "/\\%(\\)",
+! "?", ":?", "?<CR>", "g?", "g?g?", "g??",
+! "-?", "q?", "v_g?",
+ "/\\?", "/\\z(\\)", "\\=", ":s\\=",
+ "[count]", "[quotex]",
+ "[range]", ":[range]",
+***************
+*** 6593,6619 ****
+ static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
+ "/star", "/\\\\star", "quotestar", "starstar",
+ "cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
+! "?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??",
+ "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+ "\\[count]", "\\[quotex]",
+ "\\[range]", ":\\[range]",
+ "\\[pattern]", "\\\\bar", "/\\\\%\\$",
+ "s/\\\\\\~", "s/\\\\U", "s/\\\\L",
+ "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
+ int flags;
+
+ d = IObuff; /* assume IObuff is long enough! */
+
+! /*
+! * Recognize a few exceptions to the rule. Some strings that contain '*'
+! * with "star". Otherwise '*' is recognized as a wildcard.
+! */
+! for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; )
+! if (STRCMP(arg, mtable[i]) == 0)
+! {
+! STRCPY(d, rtable[i]);
+! break;
+! }
+
+ if (i < 0) /* no match in table */
+ {
+--- 6594,6636 ----
+ static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
+ "/star", "/\\\\star", "quotestar", "starstar",
+ "cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
+! "?", ":?", "?<CR>", "g?", "g?g?", "g??",
+! "-?", "q?", "v_g?",
+ "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+ "\\[count]", "\\[quotex]",
+ "\\[range]", ":\\[range]",
+ "\\[pattern]", "\\\\bar", "/\\\\%\\$",
+ "s/\\\\\\~", "s/\\\\U", "s/\\\\L",
+ "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
++ static char *(expr_table[]) = {"!=?", "!~?", "<=?", "<?", "==?", "=~?",
++ ">=?", ">?", "is?", "isnot?"};
+ int flags;
+
+ d = IObuff; /* assume IObuff is long enough! */
+
+! if (STRNICMP(arg, "expr-", 5) == 0)
+! {
+! // When the string starting with "expr-" and containing '?' and matches
+! // the table, it is taken literally. Otherwise '?' is recognized as a
+! // wildcard.
+! for (i = (int)(sizeof(expr_table) / sizeof(char *)); --i >= 0; )
+! if (STRCMP(arg + 5, expr_table[i]) == 0)
+! {
+! STRCPY(d, arg);
+! break;
+! }
+! }
+! else
+! {
+! // Recognize a few exceptions to the rule. Some strings that contain
+! // '*' with "star". Otherwise '*' is recognized as a wildcard.
+! for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; )
+! if (STRCMP(arg, mtable[i]) == 0)
+! {
+! STRCPY(d, rtable[i]);
+! break;
+! }
+! }
+
+ if (i < 0) /* no match in table */
+ {
+*** ../vim-8.1.0234/src/testdir/test_help_tagjump.vim 2018-08-01 18:02:57.493860532 +0200
+--- src/testdir/test_help_tagjump.vim 2018-08-02 22:16:50.581068403 +0200
+***************
+*** 26,36 ****
+--- 26,59 ----
+ call assert_true(getline('.') =~ '\*:?\*')
+ helpclose
+
++ help q?
++ call assert_equal("help", &filetype)
++ call assert_true(getline('.') =~ '\*q?\*')
++ call assert_true(expand('<cword>') == 'q?')
++ helpclose
++
+ help -?
+ call assert_equal("help", &filetype)
+ call assert_true(getline('.') =~ '\*-?\*')
+ helpclose
+
++ help v_g?
++ call assert_equal("help", &filetype)
++ call assert_true(getline('.') =~ '\*v_g?\*')
++ helpclose
++
++ help expr-!=?
++ call assert_equal("help", &filetype)
++ call assert_true(getline('.') =~ '\*expr-!=?\*')
++ call assert_true(expand('<cword>') == 'expr-!=?')
++ helpclose
++
++ help expr-isnot?
++ call assert_equal("help", &filetype)
++ call assert_true(getline('.') =~ '\*expr-isnot?\*')
++ call assert_true(expand('<cword>') == 'expr-isnot?')
++ helpclose
++
+ help FileW*Post
+ call assert_equal("help", &filetype)
+ call assert_true(getline('.') =~ '\*FileWritePost\*')
+*** ../vim-8.1.0234/src/version.c 2018-08-02 21:46:47.579548771 +0200
+--- src/version.c 2018-08-02 22:18:16.740563501 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 235,
+ /**/
+
+--
+ARTHUR: Be quiet!
+DENNIS: Well you can't expect to wield supreme executive power just 'cause
+ some watery tart threw a sword at you!
+ARTHUR: Shut up!
+DENNIS: I mean, if I went around sayin' I was an empereror just because some
+ moistened bint had lobbed a scimitar at me they'd put me away!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0236 b/data/vim/patches/8.1.0236
new file mode 100644
index 000000000..519fda126
--- /dev/null
+++ b/data/vim/patches/8.1.0236
@@ -0,0 +1,108 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0236
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0236 (after 8.1.0232)
+Problem: Ruby build fails when ruby_intern is missing.
+Solution: Do not use ruby_intern2. (Ken Takata)
+Files: src/if_ruby.c
+
+
+*** ../vim-8.1.0235/src/if_ruby.c 2018-08-01 18:42:09.837344296 +0200
+--- src/if_ruby.c 2018-08-03 21:59:40.035744771 +0200
+***************
+*** 253,263 ****
+ # define rb_hash_new dll_rb_hash_new
+ # define rb_inspect dll_rb_inspect
+ # define rb_int2inum dll_rb_int2inum
+! # ifdef RUBY19_OR_LATER
+! # define rb_intern2 dll_rb_intern2
+! # else
+ # define rb_intern dll_rb_intern
+ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18
+ # define rb_fix2int dll_rb_fix2int
+--- 253,264 ----
+ # define rb_hash_new dll_rb_hash_new
+ # define rb_inspect dll_rb_inspect
+ # define rb_int2inum dll_rb_int2inum
+! # ifndef rb_intern
+ # define rb_intern dll_rb_intern
+ # endif
++ # ifdef RUBY_CONST_ID_CACHE
++ # define rb_intern2 dll_rb_intern2
++ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18
+ # define rb_fix2int dll_rb_fix2int
+***************
+*** 392,401 ****
+ static VALUE (*dll_rb_hash_new) (void);
+ static VALUE (*dll_rb_inspect) (VALUE);
+ static VALUE (*dll_rb_int2inum) (long);
+- # ifdef RUBY19_OR_LATER
+- static ID (*dll_rb_intern2) (const char*, long);
+- # else
+ static ID (*dll_rb_intern) (const char*);
+ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ static long (*dll_rb_fix2int) (VALUE);
+--- 393,401 ----
+ static VALUE (*dll_rb_hash_new) (void);
+ static VALUE (*dll_rb_inspect) (VALUE);
+ static VALUE (*dll_rb_int2inum) (long);
+ static ID (*dll_rb_intern) (const char*);
++ # ifdef RUBY_CONST_ID_CACHE
++ static ID (*dll_rb_intern2) (const char*, long);
+ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ static long (*dll_rb_fix2int) (VALUE);
+***************
+*** 596,605 ****
+ {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
+ {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+ {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
+- # ifdef RUBY19_OR_LATER
+- {"rb_intern2", (RUBY_PROC*)&dll_rb_intern2},
+- # else
+ {"rb_intern", (RUBY_PROC*)&dll_rb_intern},
+ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+--- 596,604 ----
+ {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
+ {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+ {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
+ {"rb_intern", (RUBY_PROC*)&dll_rb_intern},
++ # ifdef RUBY_CONST_ID_CACHE
++ {"rb_intern2", (RUBY_PROC*)&dll_rb_intern2},
+ # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+*** ../vim-8.1.0235/src/version.c 2018-08-02 22:23:53.342591238 +0200
+--- src/version.c 2018-08-03 21:51:04.635516492 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 236,
+ /**/
+
+--
+ARTHUR: A scratch? Your arm's off!
+BLACK KNIGHT: No, it isn't.
+ARTHUR: Well, what's that then?
+BLACK KNIGHT: I've had worse.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0237 b/data/vim/patches/8.1.0237
new file mode 100644
index 000000000..35830bc86
--- /dev/null
+++ b/data/vim/patches/8.1.0237
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0237
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0237
+Problem: Ruby on Cygwin doesn't always work.
+Solution: Use LIBRUBY_SO if LIBRUBY_ALIASES isn't set. (Ken Takata)
+Files: src/configure.ac, src/auto/configure
+
+
+*** ../vim-8.1.0236/src/configure.ac 2018-07-27 22:35:12.305014510 +0200
+--- src/configure.ac 2018-08-04 15:10:33.240017113 +0200
+***************
+*** 1956,1961 ****
+--- 1956,1964 ----
+ AC_DEFINE(FEAT_RUBY)
+ if test "$enable_rubyinterp" = "dynamic"; then
+ libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_ALIASES']].split[[0]]"`
++ if test -z "$libruby_soname"; then
++ libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
++ fi
+ AC_DEFINE(DYNAMIC_RUBY)
+ RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+ RUBY_LIBS=
+*** ../vim-8.1.0236/src/auto/configure 2018-07-27 22:35:12.309014484 +0200
+--- src/auto/configure 2018-08-04 15:10:39.099973736 +0200
+***************
+*** 7606,7611 ****
+--- 7606,7614 ----
+
+ if test "$enable_rubyinterp" = "dynamic"; then
+ libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG['LIBRUBY_ALIASES'].split[0]"`
++ if test -z "$libruby_soname"; then
++ libruby_soname=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG['LIBRUBY_SO']"`
++ fi
+ $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
+
+ RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby_soname\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+*** ../vim-8.1.0236/src/version.c 2018-08-03 22:03:13.178295933 +0200
+--- src/version.c 2018-08-04 15:12:44.107057819 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 237,
+ /**/
+
+--
+"It's so simple to be wise. Just think of something stupid to say
+and then don't say it." -- Sam Levenson
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0238 b/data/vim/patches/8.1.0238
new file mode 100644
index 000000000..47ad40e60
--- /dev/null
+++ b/data/vim/patches/8.1.0238
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0238
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0238
+Problem: 'buftype' is cleared when using ":term ++hidden cat". (Marcin
+ Szamotulski)
+Solution: Set the "options initialized" flag earlier. (closes #3278)
+Files: src/terminal.c, src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0237/src/terminal.c 2018-07-08 20:49:03.427359658 +0200
+--- src/terminal.c 2018-08-04 16:52:59.228476711 +0200
+***************
+*** 529,534 ****
+--- 529,536 ----
+
+ set_string_option_direct((char_u *)"buftype", -1,
+ (char_u *)"terminal", OPT_FREE|OPT_LOCAL, 0);
++ // Avoid that 'buftype' is reset when this buffer is entered.
++ curbuf->b_p_initialized = TRUE;
+
+ /* Mark the buffer as not modifiable. It can only be made modifiable after
+ * the job finished. */
+*** ../vim-8.1.0237/src/testdir/test_terminal.vim 2018-07-08 20:49:03.427359658 +0200
+--- src/testdir/test_terminal.vim 2018-08-04 16:51:08.821245793 +0200
+***************
+*** 1605,1607 ****
+--- 1605,1623 ----
+ set guioptions&
+ call delete(filename)
+ endfunc
++
++ func Test_terminal_hidden()
++ if !has('unix')
++ return
++ endif
++ term ++hidden cat
++ let bnr = bufnr('$')
++ call assert_equal('terminal', getbufvar(bnr, '&buftype'))
++ exe 'sbuf ' . bnr
++ call assert_equal('terminal', &buftype)
++ call term_sendkeys(bnr, "asdf\<CR>")
++ call WaitForAssert({-> assert_match('asdf', term_getline(bnr, 2))})
++ call term_sendkeys(bnr, "\<C-D>")
++ call WaitForAssert({-> assert_equal('finished', term_getstatus(bnr))})
++ bwipe!
++ endfunc
+*** ../vim-8.1.0237/src/version.c 2018-08-04 15:13:31.034718130 +0200
+--- src/version.c 2018-08-04 16:53:18.336344327 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 238,
+ /**/
+
+--
+-rwxr-xr-x 1 root 24 Oct 29 1929 /bin/ed
+-rwxr-xr-t 4 root 131720 Jan 1 1970 /usr/ucb/vi
+-rwxr-xr-x 1 root 5.89824e37 Oct 22 1990 /usr/bin/emacs
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0239 b/data/vim/patches/8.1.0239
new file mode 100644
index 000000000..55becc277
--- /dev/null
+++ b/data/vim/patches/8.1.0239
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0239
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0239 (after 8.1.0236)
+Problem: Now Ruby build fails on other systems.
+Solution: Always define rb_intern. (Ken Takata, closes #3275)
+Files: src/if_ruby.c
+
+
+*** ../vim-8.1.0238/src/if_ruby.c 2018-08-03 22:03:13.178295933 +0200
+--- src/if_ruby.c 2018-08-04 17:21:11.448378660 +0200
+***************
+*** 253,264 ****
+ # define rb_hash_new dll_rb_hash_new
+ # define rb_inspect dll_rb_inspect
+ # define rb_int2inum dll_rb_int2inum
+! # ifndef rb_intern
+! # define rb_intern dll_rb_intern
+! # endif
+! # ifdef RUBY_CONST_ID_CACHE
+! # define rb_intern2 dll_rb_intern2
+! # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18
+ # define rb_fix2int dll_rb_fix2int
+--- 253,264 ----
+ # define rb_hash_new dll_rb_hash_new
+ # define rb_inspect dll_rb_inspect
+ # define rb_int2inum dll_rb_int2inum
+!
+! // ruby.h may redefine rb_intern to use RUBY_CONST_ID_CACHE(), but that won't
+! // work. Not using the cache appears to be the best solution.
+! # undef rb_intern
+! # define rb_intern dll_rb_intern
+!
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18
+ # define rb_fix2int dll_rb_fix2int
+***************
+*** 394,402 ****
+ static VALUE (*dll_rb_inspect) (VALUE);
+ static VALUE (*dll_rb_int2inum) (long);
+ static ID (*dll_rb_intern) (const char*);
+- # ifdef RUBY_CONST_ID_CACHE
+- static ID (*dll_rb_intern2) (const char*, long);
+- # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ static long (*dll_rb_fix2int) (VALUE);
+ static long (*dll_rb_num2int) (VALUE);
+--- 394,399 ----
+***************
+*** 597,605 ****
+ {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+ {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
+ {"rb_intern", (RUBY_PROC*)&dll_rb_intern},
+- # ifdef RUBY_CONST_ID_CACHE
+- {"rb_intern2", (RUBY_PROC*)&dll_rb_intern2},
+- # endif
+ # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */
+ {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+ {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
+--- 594,599 ----
+*** ../vim-8.1.0238/src/version.c 2018-08-04 16:54:06.348012520 +0200
+--- src/version.c 2018-08-04 17:22:36.283738635 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 239,
+ /**/
+
+--
+FATHER: You killed eight wedding guests in all!
+LAUNCELOT: Er, Well ... the thing is ... I thought your son was a lady.
+FATHER: I can understand that.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0240 b/data/vim/patches/8.1.0240
new file mode 100644
index 000000000..6ad3a0da8
--- /dev/null
+++ b/data/vim/patches/8.1.0240
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0240
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0240
+Problem: g:actual_curbuf set in wrong scope. (Daniel Hahler)
+Solution: Prepend the "g:" name space. (closes #3279)
+Files: src/buffer.c
+
+
+*** ../vim-8.1.0239/src/buffer.c 2018-08-01 17:53:04.685381319 +0200
+--- src/buffer.c 2018-08-05 13:16:10.469261957 +0200
+***************
+*** 4229,4235 ****
+
+ #ifdef FEAT_EVAL
+ vim_snprintf((char *)tmp, sizeof(tmp), "%d", curbuf->b_fnum);
+! set_internal_string_var((char_u *)"actual_curbuf", tmp);
+
+ save_curbuf = curbuf;
+ save_curwin = curwin;
+--- 4229,4235 ----
+
+ #ifdef FEAT_EVAL
+ vim_snprintf((char *)tmp, sizeof(tmp), "%d", curbuf->b_fnum);
+! set_internal_string_var((char_u *)"g:actual_curbuf", tmp);
+
+ save_curbuf = curbuf;
+ save_curwin = curwin;
+*** ../vim-8.1.0239/src/version.c 2018-08-04 17:24:39.062825210 +0200
+--- src/version.c 2018-08-05 13:21:12.363049597 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 240,
+ /**/
+
+--
+FATHER: You only killed the bride's father - that's all -
+LAUNCELOT: Oh dear, I didn't really mean to...
+FATHER: Didn't mean to? You put your sword right through his head!
+LAUNCELOT: Gosh - Is he all right?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0241 b/data/vim/patches/8.1.0241
new file mode 100644
index 000000000..a22c2e955
--- /dev/null
+++ b/data/vim/patches/8.1.0241
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0241
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0241
+Problem: Effect of ":tabmove N" is not clear.
+Solution: Add a test that shows the behavior. (Christian Brabandt,
+ closes #3288)
+Files: src/testdir/test_tabpage.vim
+
+
+*** ../vim-8.1.0240/src/testdir/test_tabpage.vim 2018-05-20 14:57:19.117429791 +0200
+--- src/testdir/test_tabpage.vim 2018-08-07 13:12:02.469260514 +0200
+***************
+*** 105,110 ****
+--- 105,123 ----
+ call assert_equal(4, tabpagenr())
+ 7tabmove 5
+ call assert_equal(5, tabpagenr())
++
++ " The following are a no-op
++ norm! 2gt
++ call assert_equal(2, tabpagenr())
++ tabmove 2
++ call assert_equal(2, tabpagenr())
++ 2tabmove
++ call assert_equal(2, tabpagenr())
++ tabmove 1
++ call assert_equal(2, tabpagenr())
++ 1tabmove
++ call assert_equal(2, tabpagenr())
++
+ call assert_fails("99tabmove", 'E16:')
+ call assert_fails("+99tabmove", 'E16:')
+ call assert_fails("-99tabmove", 'E16:')
+*** ../vim-8.1.0240/src/version.c 2018-08-05 13:22:22.474562651 +0200
+--- src/version.c 2018-08-07 13:13:11.940836186 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 241,
+ /**/
+
+--
+MESKIMEN'S LAW
+ There's never time to do it right, but always time to do it over.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0242 b/data/vim/patches/8.1.0242
new file mode 100644
index 000000000..2f8d1cc7c
--- /dev/null
+++ b/data/vim/patches/8.1.0242
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0242
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0242
+Problem: Insert mode completion may use an invalid buffer pointer.
+Solution: Check for ins_buf to be valid. (closes #3290)
+Files: src/edit.c
+
+
+*** ../vim-8.1.0241/src/edit.c 2018-08-01 19:05:59.282223206 +0200
+--- src/edit.c 2018-08-07 14:53:05.865949346 +0200
+***************
+*** 4419,4428 ****
+ ? (char_u *)"." : curbuf->b_p_cpt;
+ last_match_pos = first_match_pos = *ini;
+ }
+
+ compl_old_match = compl_curr_match; /* remember the last current match */
+ pos = (compl_direction == FORWARD) ? &last_match_pos : &first_match_pos;
+! /* For ^N/^P loop over all the flags/windows/buffers in 'complete' */
+ for (;;)
+ {
+ found_new_match = FAIL;
+--- 4419,4433 ----
+ ? (char_u *)"." : curbuf->b_p_cpt;
+ last_match_pos = first_match_pos = *ini;
+ }
++ else if (ins_buf != curbuf && !buf_valid(ins_buf))
++ ins_buf = curbuf; // In case the buffer was wiped out.
+
+ compl_old_match = compl_curr_match; /* remember the last current match */
+ pos = (compl_direction == FORWARD) ? &last_match_pos : &first_match_pos;
+!
+! /*
+! * For ^N/^P loop over all the flags/windows/buffers in 'complete'.
+! */
+ for (;;)
+ {
+ found_new_match = FAIL;
+*** ../vim-8.1.0241/src/version.c 2018-08-07 13:14:05.644508497 +0200
+--- src/version.c 2018-08-07 14:54:09.961578224 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 242,
+ /**/
+
+--
+Did you ever stop to think... and forget to start again?
+ -- Steven Wright
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0243 b/data/vim/patches/8.1.0243
new file mode 100644
index 000000000..3a497d139
--- /dev/null
+++ b/data/vim/patches/8.1.0243
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0243
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0243
+Problem: Using :term ++close ++hidden closes a window. (Marcin Szamotulski)
+Solution: Don't close the window if only using it temporarily for unloading
+ the terminal buffer. (closes #3287)
+Files: src/terminal.c, src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0242/src/terminal.c 2018-08-04 16:54:06.348012520 +0200
+--- src/terminal.c 2018-08-07 16:27:03.373988690 +0200
+***************
+*** 2818,2828 ****
+ if (term->tl_finish == TL_FINISH_CLOSE)
+ {
+ aco_save_T aco;
+
+! /* ++close or term_finish == "close" */
+ ch_log(NULL, "terminal job finished, closing window");
+ aucmd_prepbuf(&aco, term->tl_buffer);
+ do_bufdel(DOBUF_WIPE, (char_u *)"", 1, fnum, fnum, FALSE);
+ aucmd_restbuf(&aco);
+ return TRUE;
+ }
+--- 2818,2834 ----
+ if (term->tl_finish == TL_FINISH_CLOSE)
+ {
+ aco_save_T aco;
++ int do_set_w_closing = term->tl_buffer->b_nwindows == 0;
+
+! // ++close or term_finish == "close"
+ ch_log(NULL, "terminal job finished, closing window");
+ aucmd_prepbuf(&aco, term->tl_buffer);
++ // Avoid closing the window if we temporarily use it.
++ if (do_set_w_closing)
++ curwin->w_closing = TRUE;
+ do_bufdel(DOBUF_WIPE, (char_u *)"", 1, fnum, fnum, FALSE);
++ if (do_set_w_closing)
++ curwin->w_closing = FALSE;
+ aucmd_restbuf(&aco);
+ return TRUE;
+ }
+*** ../vim-8.1.0242/src/testdir/test_terminal.vim 2018-08-04 16:54:06.348012520 +0200
+--- src/testdir/test_terminal.vim 2018-08-07 16:32:04.084157368 +0200
+***************
+*** 1621,1623 ****
+--- 1621,1635 ----
+ call WaitForAssert({-> assert_equal('finished', term_getstatus(bnr))})
+ bwipe!
+ endfunc
++
++ func Test_terminal_hidden_and_close()
++ if !has('unix')
++ return
++ endif
++ call assert_equal(1, winnr('$'))
++ term ++hidden ++close ls
++ let bnr = bufnr('$')
++ call assert_equal('terminal', getbufvar(bnr, '&buftype'))
++ call WaitForAssert({-> assert_false(bufexists(bnr))})
++ call assert_equal(1, winnr('$'))
++ endfunc
+*** ../vim-8.1.0242/src/version.c 2018-08-07 14:55:04.905259782 +0200
+--- src/version.c 2018-08-07 16:28:42.681379863 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 243,
+ /**/
+
+--
+ARTHUR: Listen, old crone! Unless you tell us where we can buy a shrubbery,
+ my friend and I will ... we will say "Ni!"
+CRONE: Do your worst!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0244 b/data/vim/patches/8.1.0244
new file mode 100644
index 000000000..bf3231465
--- /dev/null
+++ b/data/vim/patches/8.1.0244
@@ -0,0 +1,245 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0244
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0244
+Problem: No redraw when using a STOP signal on Vim and then a CONT signal.
+Solution: Catch the CONT signal and force a redraw. (closes #3285)
+Files: src/os_unix.c, src/term.c, src/proto/term.pro
+
+
+*** ../vim-8.1.0243/src/os_unix.c 2018-06-19 19:59:15.244704285 +0200
+--- src/os_unix.c 2018-08-07 17:38:27.387722889 +0200
+***************
+*** 1227,1233 ****
+ SIGRETURN;
+ }
+
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ /*
+ * On Solaris with multi-threading, suspending might not work immediately.
+ * Catch the SIGCONT signal, which will be used as an indication whether the
+--- 1227,1249 ----
+ SIGRETURN;
+ }
+
+! static void
+! after_sigcont(void)
+! {
+! # ifdef FEAT_TITLE
+! // Set oldtitle to NULL, so the current title is obtained again.
+! VIM_CLEAR(oldtitle);
+! # endif
+! settmode(TMODE_RAW);
+! need_check_timestamps = TRUE;
+! did_check_timestamps = FALSE;
+! }
+!
+! #if defined(SIGCONT)
+! static RETSIGTYPE sigcont_handler SIGPROTOARG;
+! static int in_mch_suspend = FALSE;
+!
+! # if defined(_REENTRANT) && defined(SIGCONT)
+ /*
+ * On Solaris with multi-threading, suspending might not work immediately.
+ * Catch the SIGCONT signal, which will be used as an indication whether the
+***************
+*** 1239,1245 ****
+ * volatile because it is used in signal handler sigcont_handler().
+ */
+ static volatile int sigcont_received;
+! static RETSIGTYPE sigcont_handler SIGPROTOARG;
+
+ /*
+ * signal handler for SIGCONT
+--- 1255,1261 ----
+ * volatile because it is used in signal handler sigcont_handler().
+ */
+ static volatile int sigcont_received;
+! # endif
+
+ /*
+ * signal handler for SIGCONT
+***************
+*** 1247,1253 ****
+ static RETSIGTYPE
+ sigcont_handler SIGDEFARG(sigarg)
+ {
+! sigcont_received = TRUE;
+ SIGRETURN;
+ }
+ #endif
+--- 1263,1300 ----
+ static RETSIGTYPE
+ sigcont_handler SIGDEFARG(sigarg)
+ {
+! if (in_mch_suspend)
+! {
+! # if defined(_REENTRANT) && defined(SIGCONT)
+! sigcont_received = TRUE;
+! # endif
+! }
+! else
+! {
+! // We didn't suspend ourselves, assume we were stopped by a SIGSTOP
+! // signal (which can't be intercepted) and get a SIGCONT. Need to get
+! // back to a sane mode and redraw.
+! after_sigcont();
+!
+! update_screen(CLEAR);
+! if (State & CMDLINE)
+! redrawcmdline();
+! else if (State == HITRETURN || State == SETWSIZE || State == ASKMORE
+! || State == EXTERNCMD || State == CONFIRM || exmode_active)
+! repeat_message();
+! else if (redrawing())
+! setcursor();
+! #if defined(FEAT_INS_EXPAND)
+! if (pum_visible())
+! {
+! redraw_later(NOT_VALID);
+! ins_compl_show_pum();
+! }
+! #endif
+! cursor_on_force();
+! out_flush();
+! }
+!
+ SIGRETURN;
+ }
+ #endif
+***************
+*** 1330,1335 ****
+--- 1377,1384 ----
+ {
+ /* BeOS does have SIGTSTP, but it doesn't work. */
+ #if defined(SIGTSTP) && !defined(__BEOS__)
++ in_mch_suspend = TRUE;
++
+ out_flush(); /* needed to make cursor visible on some systems */
+ settmode(TMODE_COOK);
+ out_flush(); /* needed to disable mouse on some systems */
+***************
+*** 1361,1376 ****
+ mch_delay(wait_time, FALSE);
+ }
+ # endif
+
+! # ifdef FEAT_TITLE
+! /*
+! * Set oldtitle to NULL, so the current title is obtained again.
+! */
+! VIM_CLEAR(oldtitle);
+! # endif
+! settmode(TMODE_RAW);
+! need_check_timestamps = TRUE;
+! did_check_timestamps = FALSE;
+ #else
+ suspend_shell();
+ #endif
+--- 1410,1418 ----
+ mch_delay(wait_time, FALSE);
+ }
+ # endif
++ in_mch_suspend = FALSE;
+
+! after_sigcont();
+ #else
+ suspend_shell();
+ #endif
+***************
+*** 1410,1416 ****
+ #ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
+ #endif
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ signal(SIGCONT, sigcont_handler);
+ #endif
+
+--- 1452,1458 ----
+ #ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
+ #endif
+! #if defined(SIGCONT)
+ signal(SIGCONT, sigcont_handler);
+ #endif
+
+*** ../vim-8.1.0243/src/term.c 2018-07-10 17:33:41.825155261 +0200
+--- src/term.c 2018-08-07 17:22:23.328496700 +0200
+***************
+*** 3789,3804 ****
+ static int cursor_is_off = FALSE;
+
+ /*
+ * Enable the cursor.
+ */
+ void
+ cursor_on(void)
+ {
+ if (cursor_is_off)
+! {
+! out_str(T_VE);
+! cursor_is_off = FALSE;
+! }
+ }
+
+ /*
+--- 3789,3811 ----
+ static int cursor_is_off = FALSE;
+
+ /*
++ * Enable the cursor without checking if it's already enabled.
++ */
++ void
++ cursor_on_force(void)
++ {
++ out_str(T_VE);
++ cursor_is_off = FALSE;
++ }
++
++ /*
+ * Enable the cursor.
+ */
+ void
+ cursor_on(void)
+ {
+ if (cursor_is_off)
+! cursor_on_force();
+ }
+
+ /*
+*** ../vim-8.1.0243/src/proto/term.pro 2018-05-17 13:52:53.000000000 +0200
+--- src/proto/term.pro 2018-08-07 17:28:27.358277122 +0200
+***************
+*** 50,55 ****
+--- 50,56 ----
+ int mouse_has(int c);
+ int mouse_model_popup(void);
+ void scroll_start(void);
++ void cursor_on_force(void);
+ void cursor_on(void);
+ void cursor_off(void);
+ void term_cursor_mode(int forced);
+*** ../vim-8.1.0243/src/version.c 2018-08-07 16:33:15.255728441 +0200
+--- src/version.c 2018-08-07 17:35:43.784518901 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 244,
+ /**/
+
+--
+When I look deep into your eyes, I see JPEG artifacts.
+I can tell by the pixels that we're wrong for each other. (xkcd)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0245 b/data/vim/patches/8.1.0245
new file mode 100644
index 000000000..04698cb19
--- /dev/null
+++ b/data/vim/patches/8.1.0245
@@ -0,0 +1,114 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0245
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0245
+Problem: Calling setline() in TextChangedI autocmd breaks undo. (Jason
+ Felice)
+Solution: Don't save lines for undo when already saved. (closes #3291)
+Files: src/edit.c, src/testdir/test_autocmd.vim
+
+
+*** ../vim-8.1.0244/src/edit.c 2018-08-07 14:55:04.905259782 +0200
+--- src/edit.c 2018-08-07 18:26:35.026760346 +0200
+***************
+*** 1722,1732 ****
+--- 1722,1740 ----
+ {
+ aco_save_T aco;
+
++ // Sync undo when the autocommand calls setline() or append(), so that
++ // it can be undone separately.
++ u_sync_once = 2;
++
+ // save and restore curwin and curbuf, in case the autocmd changes them
+ aucmd_prepbuf(&aco, curbuf);
+ apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
+ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick = CHANGEDTICK(curbuf);
++
++ if (u_sync_once == 1)
++ ins_need_undo = TRUE;
++ u_sync_once = 0;
+ }
+
+ #ifdef FEAT_INS_EXPAND
+*** ../vim-8.1.0244/src/testdir/test_autocmd.vim 2018-04-28 20:01:18.000000000 +0200
+--- src/testdir/test_autocmd.vim 2018-08-07 18:58:19.655939116 +0200
+***************
+*** 587,593 ****
+ " Cleanup
+ au! OptionSet
+ for opt in ['nu', 'ai', 'acd', 'ar', 'bs', 'backup', 'cul', 'cp']
+! exe printf(":set %s&vi", opt)
+ endfor
+ call test_override('starting', 0)
+ delfunc! AutoCommandOptionSet
+--- 587,593 ----
+ " Cleanup
+ au! OptionSet
+ for opt in ['nu', 'ai', 'acd', 'ar', 'bs', 'backup', 'cul', 'cp']
+! exe printf(":set %s&vim", opt)
+ endfor
+ call test_override('starting', 0)
+ delfunc! AutoCommandOptionSet
+***************
+*** 1313,1318 ****
+--- 1313,1343 ----
+ bw!
+ endfunc
+
++ let g:setline_handled = v:false
++ func! SetLineOne()
++ if !g:setline_handled
++ call setline(1, "(x)")
++ let g:setline_handled = v:true
++ endif
++ endfunc
++
++ func Test_TextChangedI_with_setline()
++ new
++ call test_override('char_avail', 1)
++ autocmd TextChangedI <buffer> call SetLineOne()
++ call feedkeys("i(\<CR>\<Esc>", 'tx')
++ call assert_equal('(', getline(1))
++ call assert_equal('x)', getline(2))
++ undo
++ call assert_equal('(', getline(1))
++ call assert_equal('', getline(2))
++ undo
++ call assert_equal('', getline(1))
++
++ call test_override('starting', 0)
++ bwipe!
++ endfunc
++
+ func Test_Changed_FirstTime()
+ if !has('terminal') || has('gui_running')
+ return
+*** ../vim-8.1.0244/src/version.c 2018-08-07 17:38:36.995674625 +0200
+--- src/version.c 2018-08-07 19:04:25.389813721 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 245,
+ /**/
+
+--
+ARTHUR: Ni!
+BEDEVERE: Nu!
+ARTHUR: No. Ni! More like this. "Ni"!
+BEDEVERE: Ni, ni, ni!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0246 b/data/vim/patches/8.1.0246
new file mode 100644
index 000000000..7b6869270
--- /dev/null
+++ b/data/vim/patches/8.1.0246
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0246
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0246 (after 8.1.0245)
+Problem: Build failure without the +eval feature.
+Solution: Add #ifdef
+Files: src/edit.c
+
+
+*** ../vim-8.1.0245/src/edit.c 2018-08-07 19:04:57.409627129 +0200
+--- src/edit.c 2018-08-07 19:31:01.308285633 +0200
+***************
+*** 1722,1730 ****
+--- 1722,1732 ----
+ {
+ aco_save_T aco;
+
++ #ifdef FEAT_EVAL
+ // Sync undo when the autocommand calls setline() or append(), so that
+ // it can be undone separately.
+ u_sync_once = 2;
++ #endif
+
+ // save and restore curwin and curbuf, in case the autocmd changes them
+ aucmd_prepbuf(&aco, curbuf);
+***************
+*** 1732,1740 ****
+--- 1734,1744 ----
+ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick = CHANGEDTICK(curbuf);
+
++ #ifdef FEAT_EVAL
+ if (u_sync_once == 1)
+ ins_need_undo = TRUE;
+ u_sync_once = 0;
++ #endif
+ }
+
+ #ifdef FEAT_INS_EXPAND
+*** ../vim-8.1.0245/src/version.c 2018-08-07 19:04:57.409627129 +0200
+--- src/version.c 2018-08-07 19:31:44.160031830 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 246,
+ /**/
+
+--
+Michael: There is no such thing as a dump question.
+Bernard: Sure there is. For example "what is a core dump?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0247 b/data/vim/patches/8.1.0247
new file mode 100644
index 000000000..0e481d271
--- /dev/null
+++ b/data/vim/patches/8.1.0247
@@ -0,0 +1,318 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0247
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0247
+Problem: Python: error message for failing import is incorrect.
+Solution: Adjust how modules are loaded. (Ozaki Kiichi, closes #3162)
+Files: src/if_py_both.h, src/testdir/test86.ok, src/testdir/test87.ok
+
+
+*** ../vim-8.1.0246/src/if_py_both.h 2018-07-25 22:02:32.231966301 +0200
+--- src/if_py_both.h 2018-08-07 19:38:33.041613725 +0200
+***************
+*** 544,570 ****
+ }
+
+ #if PY_VERSION_HEX < 0x030700f0
+ typedef struct
+ {
+ PyObject_HEAD
+! PyObject *module;
+ } LoaderObject;
+ static PyTypeObject LoaderType;
+
+ static void
+ LoaderDestructor(LoaderObject *self)
+ {
+! Py_DECREF(self->module);
+ DESTRUCTOR_FINISH(self);
+ }
+
+ static PyObject *
+ LoaderLoadModule(LoaderObject *self, PyObject *args UNUSED)
+ {
+! PyObject *ret = self->module;
+
+! Py_INCREF(ret);
+! return ret;
+ }
+
+ static struct PyMethodDef LoaderMethods[] = {
+--- 544,600 ----
+ }
+
+ #if PY_VERSION_HEX < 0x030700f0
++ static PyObject *call_load_module(char *name, int len, PyObject *find_module_result);
++
+ typedef struct
+ {
+ PyObject_HEAD
+! char *fullname;
+! PyObject *result;
+ } LoaderObject;
+ static PyTypeObject LoaderType;
+
+ static void
+ LoaderDestructor(LoaderObject *self)
+ {
+! vim_free(self->fullname);
+! Py_XDECREF(self->result);
+ DESTRUCTOR_FINISH(self);
+ }
+
+ static PyObject *
+ LoaderLoadModule(LoaderObject *self, PyObject *args UNUSED)
+ {
+! char *fullname = self->fullname;
+! PyObject *result = self->result;
+! PyObject *module;
+
+! if (!fullname)
+! {
+! module = result ? result : Py_None;
+! Py_INCREF(module);
+! return module;
+! }
+!
+! module = call_load_module(fullname, (int)STRLEN(fullname), result);
+!
+! self->fullname = NULL;
+! self->result = module;
+!
+! vim_free(fullname);
+! Py_DECREF(result);
+!
+! if (!module)
+! {
+! if (PyErr_Occurred())
+! return NULL;
+!
+! Py_INCREF(Py_None);
+! return Py_None;
+! }
+!
+! Py_INCREF(module);
+! return module;
+ }
+
+ static struct PyMethodDef LoaderMethods[] = {
+***************
+*** 1252,1258 ****
+--- 1282,1292 ----
+
+ if (!(find_module_result = PyObject_CallFunction(py_find_module,
+ "s#O", tail, partlen, new_path)))
++ {
++ if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_ImportError))
++ PyErr_Clear();
+ return NULL;
++ }
+
+ if (!(module = call_load_module(
+ fullname,
+***************
+*** 1273,1302 ****
+
+ Py_DECREF(module);
+
+! module = find_module(fullname, dot + 1, newest_path);
+
+ Py_DECREF(newest_path);
+
+! return module;
+ }
+ else
+ {
+ if (!(find_module_result = PyObject_CallFunction(py_find_module,
+ "sO", tail, new_path)))
+- return NULL;
+-
+- if (!(module = call_load_module(
+- fullname,
+- (int)STRLEN(fullname),
+- find_module_result)))
+ {
+! Py_DECREF(find_module_result);
+ return NULL;
+ }
+
+! Py_DECREF(find_module_result);
+!
+! return module;
+ }
+ }
+
+--- 1307,1329 ----
+
+ Py_DECREF(module);
+
+! find_module_result = find_module(fullname, dot + 1, newest_path);
+
+ Py_DECREF(newest_path);
+
+! return find_module_result;
+ }
+ else
+ {
+ if (!(find_module_result = PyObject_CallFunction(py_find_module,
+ "sO", tail, new_path)))
+ {
+! if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_ImportError))
+! PyErr_Clear();
+ return NULL;
+ }
+
+! return find_module_result;
+ }
+ }
+
+***************
+*** 1304,1310 ****
+ FinderFindModule(PyObject *self, PyObject *args)
+ {
+ char *fullname;
+! PyObject *module;
+ PyObject *new_path;
+ LoaderObject *loader;
+
+--- 1331,1337 ----
+ FinderFindModule(PyObject *self, PyObject *args)
+ {
+ char *fullname;
+! PyObject *result;
+ PyObject *new_path;
+ LoaderObject *loader;
+
+***************
+*** 1314,1344 ****
+ if (!(new_path = Vim_GetPaths(self)))
+ return NULL;
+
+! module = find_module(fullname, fullname, new_path);
+
+ Py_DECREF(new_path);
+
+! if (!module)
+ {
+ if (PyErr_Occurred())
+! {
+! if (PyErr_ExceptionMatches(PyExc_ImportError))
+! PyErr_Clear();
+! else
+! return NULL;
+! }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ if (!(loader = PyObject_NEW(LoaderObject, &LoaderType)))
+ {
+! Py_DECREF(module);
+ return NULL;
+ }
+
+! loader->module = module;
+
+ return (PyObject *) loader;
+ }
+--- 1341,1375 ----
+ if (!(new_path = Vim_GetPaths(self)))
+ return NULL;
+
+! result = find_module(fullname, fullname, new_path);
+
+ Py_DECREF(new_path);
+
+! if (!result)
+ {
+ if (PyErr_Occurred())
+! return NULL;
+
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
++ if (!(fullname = (char *)vim_strsave((char_u *)fullname)))
++ {
++ Py_DECREF(result);
++ PyErr_NoMemory();
++ return NULL;
++ }
++
+ if (!(loader = PyObject_NEW(LoaderObject, &LoaderType)))
+ {
+! vim_free(fullname);
+! Py_DECREF(result);
+ return NULL;
+ }
+
+! loader->fullname = fullname;
+! loader->result = result;
+
+ return (PyObject *) loader;
+ }
+*** ../vim-8.1.0246/src/testdir/test86.ok 2018-06-10 13:55:48.527949068 +0200
+--- src/testdir/test86.ok 2018-08-07 19:38:33.041613725 +0200
+***************
+*** 701,707 ****
+ vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',)
+ > import
+ import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',)
+! import failing_import:ImportError:('No module named failing_import',)
+ import failing:NotImplementedError:()
+ > Options
+ >> OptionsItem
+--- 701,707 ----
+ vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',)
+ > import
+ import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',)
+! import failing_import:ImportError:()
+ import failing:NotImplementedError:()
+ > Options
+ >> OptionsItem
+*** ../vim-8.1.0246/src/testdir/test87.ok 2018-06-10 13:55:48.527949068 +0200
+--- src/testdir/test87.ok 2018-08-07 19:38:33.045613701 +0200
+***************
+*** 701,707 ****
+ vim.foreach_rtp(int, 2):(<class 'TypeError'>, TypeError('foreach_rtp() takes exactly one argument (2 given)',))
+ > import
+ import xxx_no_such_module_xxx:(<class 'ImportError'>, ImportError('No module named xxx_no_such_module_xxx',))
+! import failing_import:(<class 'ImportError'>, ImportError('No module named failing_import',))
+ import failing:(<class 'NotImplementedError'>, NotImplementedError())
+ > Options
+ >> OptionsItem
+--- 701,707 ----
+ vim.foreach_rtp(int, 2):(<class 'TypeError'>, TypeError('foreach_rtp() takes exactly one argument (2 given)',))
+ > import
+ import xxx_no_such_module_xxx:(<class 'ImportError'>, ImportError('No module named xxx_no_such_module_xxx',))
+! import failing_import:(<class 'ImportError'>, ImportError())
+ import failing:(<class 'NotImplementedError'>, NotImplementedError())
+ > Options
+ >> OptionsItem
+*** ../vim-8.1.0246/src/version.c 2018-08-07 19:32:48.371651690 +0200
+--- src/version.c 2018-08-07 19:41:29.784569837 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 247,
+ /**/
+
+--
+ARTHUR: Did you say shrubberies?
+ROGER: Yes. Shrubberies are my trade. I am a shrubber. My name is Roger
+ the Shrubber. I arrange, design, and sell shrubberies.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0248 b/data/vim/patches/8.1.0248
new file mode 100644
index 000000000..ca371b423
--- /dev/null
+++ b/data/vim/patches/8.1.0248
@@ -0,0 +1,147 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0248
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0248
+Problem: duplicated quickfix code.
+Solution: Move the code to a function.
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0247/src/quickfix.c 2018-08-01 17:53:04.693381270 +0200
+--- src/quickfix.c 2018-08-01 20:00:00.659109066 +0200
+***************
+*** 4126,4131 ****
+--- 4126,4145 ----
+ }
+
+ /*
++ * Jump to the first entry if there is one.
++ */
++ static void
++ qf_jump_first(qf_info_T *qi, int_u save_qfid, int forceit)
++ {
++ // If autocommands changed the current list, then restore it
++ if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
++ qi->qf_curlist = qf_id2nr(qi, save_qfid);
++
++ if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
++ qf_jump(qi, 0, 0, forceit);
++ }
++
++ /*
+ * Return TRUE when using ":vimgrep" for ":grep".
+ */
+ int
+***************
+*** 4247,4258 ****
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+ if (res > 0 && !eap->forceit && qflist_valid(wp, save_qfid))
+! {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+! qf_jump(qi, 0, 0, FALSE); /* display first error */
+! }
+
+ cleanup:
+ mch_remove(fname);
+--- 4261,4268 ----
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+ if (res > 0 && !eap->forceit && qflist_valid(wp, save_qfid))
+! // display the first error
+! qf_jump_first(qi, save_qfid, FALSE);
+
+ cleanup:
+ mch_remove(fname);
+***************
+*** 4650,4659 ****
+ if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile)
+ && qflist_valid(wp, save_qfid))
+ {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+! qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+ }
+ }
+
+--- 4660,4667 ----
+ if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile)
+ && qflist_valid(wp, save_qfid))
+ {
+! // display the first error
+! qf_jump_first(qi, save_qfid, eap->forceit);
+ }
+ }
+
+***************
+*** 6361,6370 ****
+ eap->cmdidx == CMD_lbuffer)
+ && qflist_valid(wp, save_qfid))
+ {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+! qf_jump(qi, 0, 0, eap->forceit); /* display first error */
+ }
+ }
+ }
+--- 6369,6376 ----
+ eap->cmdidx == CMD_lbuffer)
+ && qflist_valid(wp, save_qfid))
+ {
+! // display the first error
+! qf_jump_first(qi, save_qfid, eap->forceit);
+ }
+ }
+ }
+***************
+*** 6443,6452 ****
+ || eap->cmdidx == CMD_lexpr)
+ && qflist_valid(wp, save_qfid))
+ {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+! qf_jump(qi, 0, 0, eap->forceit);
+ }
+ }
+ else
+--- 6449,6456 ----
+ || eap->cmdidx == CMD_lexpr)
+ && qflist_valid(wp, save_qfid))
+ {
+! // display the first error
+! qf_jump_first(qi, save_qfid, eap->forceit);
+ }
+ }
+ else
+*** ../vim-8.1.0247/src/version.c 2018-08-07 19:45:22.623218411 +0200
+--- src/version.c 2018-08-07 19:47:15.006608513 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 248,
+ /**/
+
+--
+TALL KNIGHT: We are now no longer the Knights Who Say Ni!
+ONE KNIGHT: Ni!
+OTHERS: Sh!
+ONE KNIGHT: (whispers) Sorry.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0249 b/data/vim/patches/8.1.0249
new file mode 100644
index 000000000..772cd519e
--- /dev/null
+++ b/data/vim/patches/8.1.0249
@@ -0,0 +1,88 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0249
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0249
+Problem: GTK: when screen DPI changes Vim does not handle it.
+Solution: Handle the gtk-xft-dpi signal. (Roel van de Kraats,
+ closes #2357)
+Files: src/gui_gtk_x11.c
+
+
+*** ../vim-8.1.0248/src/gui_gtk_x11.c 2018-04-14 13:54:46.000000000 +0200
+--- src/gui_gtk_x11.c 2018-08-07 20:00:51.725991750 +0200
+***************
+*** 788,793 ****
+--- 788,816 ----
+ }
+ #endif /* defined(FEAT_CLIENTSERVER) */
+
++ /*
++ * Handle changes to the "Xft/DPI" setting
++ */
++ static void
++ gtk_settings_xft_dpi_changed_cb(GtkSettings *gtk_settings UNUSED,
++ GParamSpec *pspec UNUSED,
++ gpointer data UNUSED)
++ {
++ // Create a new PangoContext for this screen, and initialize it
++ // with the current font if necessary.
++ if (gui.text_context != NULL)
++ g_object_unref(gui.text_context);
++
++ gui.text_context = gtk_widget_create_pango_context(gui.mainwin);
++ pango_context_set_base_dir(gui.text_context, PANGO_DIRECTION_LTR);
++
++ if (gui.norm_font != NULL)
++ {
++ // force default font
++ gui_mch_init_font(*p_guifont == NUL ? NULL : p_guifont, FALSE);
++ gui_set_shellsize(TRUE, FALSE, RESIZE_BOTH);
++ }
++ }
+
+ #if GTK_CHECK_VERSION(3,0,0)
+ typedef gboolean timeout_cb_type;
+***************
+*** 4383,4388 ****
+--- 4406,4420 ----
+ /* Pretend we don't have input focus, we will get an event if we do. */
+ gui.in_focus = FALSE;
+
++ // Handle changes to the "Xft/DPI" setting.
++ {
++ GtkSettings *gtk_settings =
++ gtk_settings_get_for_screen(gdk_screen_get_default());
++
++ g_signal_connect(gtk_settings, "notify::gtk-xft-dpi",
++ G_CALLBACK(gtk_settings_xft_dpi_changed_cb), NULL);
++ }
++
+ return OK;
+ }
+
+*** ../vim-8.1.0248/src/version.c 2018-08-07 19:47:46.746434541 +0200
+--- src/version.c 2018-08-07 19:59:06.534596911 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 249,
+ /**/
+
+--
+TALL KNIGHT: Firstly. You must get us another shrubbery!
+OTHER KNIGHTS: More shrubberies! More shrubberies for the ex-Knights of Ni!
+ARTHUR: Not another shrubbery -
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0250 b/data/vim/patches/8.1.0250
new file mode 100644
index 000000000..50c7f4be1
--- /dev/null
+++ b/data/vim/patches/8.1.0250
@@ -0,0 +1,142 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0250
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0250
+Problem: MS-Windows using VTP: windows size change incorrect.
+Solution: Call SetConsoleScreenBufferSize() first. (Nobuhiro Takasaki,
+ closes #3164)
+Files: src/os_win32.c
+
+
+*** ../vim-8.1.0249/src/os_win32.c 2018-06-19 19:59:15.244704285 +0200
+--- src/os_win32.c 2018-08-07 20:45:29.601418126 +0200
+***************
+*** 3967,3972 ****
+--- 3967,4014 ----
+ }
+
+ /*
++ * Resize console buffer to 'COORD'
++ */
++ static void
++ ResizeConBuf(
++ HANDLE hConsole,
++ COORD coordScreen)
++ {
++ if (!SetConsoleScreenBufferSize(hConsole, coordScreen))
++ {
++ #ifdef MCH_WRITE_DUMP
++ if (fdDump)
++ {
++ fprintf(fdDump, "SetConsoleScreenBufferSize failed: %lx\n",
++ GetLastError());
++ fflush(fdDump);
++ }
++ #endif
++ }
++ }
++
++ /*
++ * Resize console window size to 'srWindowRect'
++ */
++ static void
++ ResizeWindow(
++ HANDLE hConsole,
++ SMALL_RECT srWindowRect)
++ {
++ if (!SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect))
++ {
++ #ifdef MCH_WRITE_DUMP
++ if (fdDump)
++ {
++ fprintf(fdDump, "SetConsoleWindowInfo failed: %lx\n",
++ GetLastError());
++ fflush(fdDump);
++ }
++ #endif
++ }
++ }
++
++ /*
+ * Set a console window to `xSize' * `ySize'
+ */
+ static void
+***************
+*** 4019,4050 ****
+ }
+ }
+
+! if (!SetConsoleWindowInfo(g_hConOut, TRUE, &srWindowRect))
+! {
+! #ifdef MCH_WRITE_DUMP
+! if (fdDump)
+! {
+! fprintf(fdDump, "SetConsoleWindowInfo failed: %lx\n",
+! GetLastError());
+! fflush(fdDump);
+! }
+! #endif
+! }
+!
+! /* define the new console buffer size */
+ coordScreen.X = xSize;
+ coordScreen.Y = ySize;
+
+! if (!SetConsoleScreenBufferSize(hConsole, coordScreen))
+ {
+! #ifdef MCH_WRITE_DUMP
+! if (fdDump)
+! {
+! fprintf(fdDump, "SetConsoleScreenBufferSize failed: %lx\n",
+! GetLastError());
+! fflush(fdDump);
+! }
+! #endif
+ }
+ }
+
+--- 4061,4080 ----
+ }
+ }
+
+! // define the new console buffer size
+ coordScreen.X = xSize;
+ coordScreen.Y = ySize;
+
+! // In the new console call API in reverse order
+! if (!vtp_working)
+ {
+! ResizeWindow(hConsole, srWindowRect);
+! ResizeConBuf(hConsole, coordScreen);
+! }
+! else
+! {
+! ResizeConBuf(hConsole, coordScreen);
+! ResizeWindow(hConsole, srWindowRect);
+ }
+ }
+
+*** ../vim-8.1.0249/src/version.c 2018-08-07 20:01:34.245746660 +0200
+--- src/version.c 2018-08-07 20:44:49.633662912 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 250,
+ /**/
+
+--
+Vi beats Emacs to death, and then again!
+ http://linuxtoday.com/stories/5764.html
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0251 b/data/vim/patches/8.1.0251
new file mode 100644
index 000000000..f5b927a09
--- /dev/null
+++ b/data/vim/patches/8.1.0251
@@ -0,0 +1,365 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0251
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0251
+Problem: Using a full path is supported for 'directory' but not for
+ 'backupdir'. (Mikolaj Machowski)
+Solution: Support 'backupdir' as well. (Christian Brabandt, closes #179)
+Files: runtime/doc/options.txt, src/fileio.c, src/memline.c,
+ src/proto/memline.pro, src/testdir/test_alot.vim,
+ src/testdir/test_backup.vim, src/Make_all.mak
+
+
+*** ../vim-8.1.0250/runtime/doc/options.txt 2018-06-23 19:22:45.598486362 +0200
+--- runtime/doc/options.txt 2018-08-07 21:04:11.238964573 +0200
+***************
+*** 1052,1057 ****
+--- 1054,1067 ----
+ name, precede it with a backslash.
+ - To include a comma in a directory name precede it with a backslash.
+ - A directory name may end in an '/'.
++ - For Unix and Win32, if a directory ends in two path separators "//",
++ the swap file name will be built from the complete path to the file
++ with all path separators changed to percent '%' signs. This will
++ ensure file name uniqueness in the backup directory.
++ On Win32, it is also possible to end with "\\". However, When a
++ separating comma is following, you must use "//", since "\\" will
++ include the comma in the file name. Therefore it is recommended to
++ use '//', instead of '\\'.
+ - Environment variables are expanded |:set_env|.
+ - Careful with '\' characters, type one before a space, type two to
+ get one in the option (see |option-backslash|), for example: >
+***************
+*** 2678,2689 ****
+ - A directory starting with "./" (or ".\" for MS-DOS et al.) means to
+ put the swap file relative to where the edited file is. The leading
+ "." is replaced with the path name of the edited file.
+! - For Unix and Win32, if a directory ends in two path separators "//"
+! or "\\", the swap file name will be built from the complete path to
+! the file with all path separators substituted to percent '%' signs.
+! This will ensure file name uniqueness in the preserve directory.
+! On Win32, when a separating comma is following, you must use "//",
+! since "\\" will include the comma in the file name.
+ - Spaces after the comma are ignored, other spaces are considered part
+ of the directory name. To have a space at the start of a directory
+ name, precede it with a backslash.
+--- 2688,2701 ----
+ - A directory starting with "./" (or ".\" for MS-DOS et al.) means to
+ put the swap file relative to where the edited file is. The leading
+ "." is replaced with the path name of the edited file.
+! - For Unix and Win32, if a directory ends in two path separators "//",
+! the swap file name will be built from the complete path to the file
+! with all path separators substituted to percent '%' signs. This will
+! ensure file name uniqueness in the preserve directory.
+! On Win32, it is also possible to end with "\\". However, When a
+! separating comma is following, you must use "//", since "\\" will
+! include the comma in the file name. Therefore it is recommended to
+! use '//', instead of '\\'.
+ - Spaces after the comma are ignored, other spaces are considered part
+ of the directory name. To have a space at the start of a directory
+ name, precede it with a backslash.
+*** ../vim-8.1.0250/src/fileio.c 2018-08-01 17:53:04.689381294 +0200
+--- src/fileio.c 2018-08-07 21:36:54.903803767 +0200
+***************
+*** 3850,3855 ****
+--- 3850,3858 ----
+ stat_T st_new;
+ char_u *dirp;
+ char_u *rootname;
++ #if defined(UNIX) || defined(WIN3264)
++ char_u *p;
++ #endif
+ #if defined(UNIX)
+ int did_set_shortname;
+ mode_t umask_save;
+***************
+*** 3887,3892 ****
+--- 3890,3906 ----
+ * Isolate one directory name, using an entry in 'bdir'.
+ */
+ (void)copy_option_part(&dirp, copybuf, BUFSIZE, ",");
++
++ #if defined(UNIX) || defined(WIN3264)
++ p = copybuf + STRLEN(copybuf);
++ if (after_pathsep(copybuf, p) && p[-1] == p[-2])
++ // Ends with '//', use full path
++ if ((p = make_percent_swname(copybuf, fname)) != NULL)
++ {
++ backup = modname(p, backup_ext, FALSE);
++ vim_free(p);
++ }
++ #endif
+ rootname = get_file_in_dir(fname, copybuf);
+ if (rootname == NULL)
+ {
+***************
+*** 3904,3912 ****
+ for (;;)
+ {
+ /*
+! * Make backup file name.
+ */
+! backup = buf_modname((buf->b_p_sn || buf->b_shortname),
+ rootname, backup_ext, FALSE);
+ if (backup == NULL)
+ {
+--- 3918,3927 ----
+ for (;;)
+ {
+ /*
+! * Make the backup file name.
+ */
+! if (backup == NULL)
+! backup = buf_modname((buf->b_p_sn || buf->b_shortname),
+ rootname, backup_ext, FALSE);
+ if (backup == NULL)
+ {
+***************
+*** 4108,4121 ****
+ * Isolate one directory name and make the backup file name.
+ */
+ (void)copy_option_part(&dirp, IObuff, IOSIZE, ",");
+! rootname = get_file_in_dir(fname, IObuff);
+! if (rootname == NULL)
+! backup = NULL;
+! else
+ {
+! backup = buf_modname((buf->b_p_sn || buf->b_shortname),
+! rootname, backup_ext, FALSE);
+! vim_free(rootname);
+ }
+
+ if (backup != NULL)
+--- 4123,4151 ----
+ * Isolate one directory name and make the backup file name.
+ */
+ (void)copy_option_part(&dirp, IObuff, IOSIZE, ",");
+!
+! #if defined(UNIX) || defined(WIN3264)
+! p = IObuff + STRLEN(IObuff);
+! if (after_pathsep(IObuff, p) && p[-1] == p[-2])
+! // path ends with '//', use full path
+! if ((p = make_percent_swname(IObuff, fname)) != NULL)
+! {
+! backup = modname(p, backup_ext, FALSE);
+! vim_free(p);
+! }
+! #endif
+! if (backup == NULL)
+ {
+! rootname = get_file_in_dir(fname, IObuff);
+! if (rootname == NULL)
+! backup = NULL;
+! else
+! {
+! backup = buf_modname(
+! (buf->b_p_sn || buf->b_shortname),
+! rootname, backup_ext, FALSE);
+! vim_free(rootname);
+! }
+ }
+
+ if (backup != NULL)
+***************
+*** 6252,6258 ****
+ #endif
+
+ /*
+! * add extension to file name - change path/fo.o.h to path/fo.o.h.ext or
+ * fo_o_h.ext for MSDOS or when shortname option set.
+ *
+ * Assumed that fname is a valid name found in the filesystem we assure that
+--- 6282,6288 ----
+ #endif
+
+ /*
+! * Add extension to file name - change path/fo.o.h to path/fo.o.h.ext or
+ * fo_o_h.ext for MSDOS or when shortname option set.
+ *
+ * Assumed that fname is a valid name found in the filesystem we assure that
+*** ../vim-8.1.0250/src/memline.c 2018-05-26 17:35:19.717625256 +0200
+--- src/memline.c 2018-08-07 21:32:43.441160597 +0200
+***************
+*** 262,270 ****
+ #endif
+ static void long_to_char(long, char_u *);
+ static long char_to_long(char_u *);
+- #if defined(UNIX) || defined(WIN3264)
+- static char_u *make_percent_swname(char_u *dir, char_u *name);
+- #endif
+ #ifdef FEAT_CRYPT
+ static cryptstate_T *ml_crypt_prepare(memfile_T *mfp, off_T offset, int reading);
+ #endif
+--- 262,267 ----
+***************
+*** 2007,2024 ****
+ return file_count;
+ }
+
+! #if defined(UNIX) || defined(WIN3264) /* Need _very_ long file names */
+ /*
+ * Append the full path to name with path separators made into percent
+ * signs, to dir. An unnamed buffer is handled as "" (<currentdir>/"")
+ */
+! static char_u *
+ make_percent_swname(char_u *dir, char_u *name)
+ {
+! char_u *d, *s, *f;
+
+! f = fix_fname(name != NULL ? name : (char_u *) "");
+! d = NULL;
+ if (f != NULL)
+ {
+ s = alloc((unsigned)(STRLEN(f) + 1));
+--- 2004,2021 ----
+ return file_count;
+ }
+
+! #if defined(UNIX) || defined(WIN3264) || defined(PROTO)
+ /*
++ * Need _very_ long file names.
+ * Append the full path to name with path separators made into percent
+ * signs, to dir. An unnamed buffer is handled as "" (<currentdir>/"")
+ */
+! char_u *
+ make_percent_swname(char_u *dir, char_u *name)
+ {
+! char_u *d = NULL, *s, *f;
+
+! f = fix_fname(name != NULL ? name : (char_u *)"");
+ if (f != NULL)
+ {
+ s = alloc((unsigned)(STRLEN(f) + 1));
+***************
+*** 4070,4077 ****
+ }
+
+ #if defined(FEAT_EVAL)
+- static int do_swapexists(buf_T *buf, char_u *fname);
+-
+ /*
+ * Trigger the SwapExists autocommands.
+ * Returns a value for equivalent to do_dialog() (see below):
+--- 4067,4072 ----
+*** ../vim-8.1.0250/src/proto/memline.pro 2018-05-17 13:52:44.000000000 +0200
+--- src/proto/memline.pro 2018-08-07 20:56:46.217467718 +0200
+***************
+*** 34,37 ****
+--- 34,38 ----
+ void ml_decrypt_data(memfile_T *mfp, char_u *data, off_T offset, unsigned size);
+ long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp);
+ void goto_byte(long cnt);
++ char_u *make_percent_swname (char_u *dir, char_u *name);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0250/src/testdir/test_alot.vim 2018-07-23 04:11:37.648969780 +0200
+--- src/testdir/test_alot.vim 2018-08-07 20:57:34.725202003 +0200
+***************
+*** 2,7 ****
+--- 2,8 ----
+ " This makes testing go faster, since Vim doesn't need to restart.
+
+ source test_assign.vim
++ source test_backup.vim
+ source test_bufline.vim
+ source test_cd.vim
+ source test_changedtick.vim
+*** ../vim-8.1.0250/src/testdir/test_backup.vim 2018-08-07 21:37:56.879462014 +0200
+--- src/testdir/test_backup.vim 2018-08-07 21:21:16.656940451 +0200
+***************
+*** 0 ****
+--- 1,58 ----
++ " Tests for the backup function
++
++ func Test_backup()
++ set backup backupdir=.
++ new
++ call setline(1, ['line1', 'line2'])
++ :f Xbackup.txt
++ :w! Xbackup.txt
++ " backup file is only created after
++ " writing a second time (before overwriting)
++ :w! Xbackup.txt
++ let l = readfile('Xbackup.txt~')
++ call assert_equal(['line1', 'line2'], l)
++ bw!
++ set backup&vim backupdir&vim
++ call delete('Xbackup.txt')
++ call delete('Xbackup.txt~')
++ endfunc
++
++ func Test_backup2()
++ set backup backupdir=.//
++ new
++ call setline(1, ['line1', 'line2', 'line3'])
++ :f Xbackup.txt
++ :w! Xbackup.txt
++ " backup file is only created after
++ " writing a second time (before overwriting)
++ :w! Xbackup.txt
++ sp *Xbackup.txt~
++ call assert_equal(['line1', 'line2', 'line3'], getline(1,'$'))
++ let f=expand('%')
++ call assert_match('src%testdir%Xbackup.txt\~', f)
++ bw!
++ bw!
++ call delete('Xbackup.txt')
++ call delete(f)
++ set backup&vim backupdir&vim
++ endfunc
++
++ func Test_backup2_backupcopy()
++ set backup backupdir=.// backupcopy=yes
++ new
++ call setline(1, ['line1', 'line2', 'line3'])
++ :f Xbackup.txt
++ :w! Xbackup.txt
++ " backup file is only created after
++ " writing a second time (before overwriting)
++ :w! Xbackup.txt
++ sp *Xbackup.txt~
++ call assert_equal(['line1', 'line2', 'line3'], getline(1,'$'))
++ let f=expand('%')
++ call assert_match('src%testdir%Xbackup.txt\~', f)
++ bw!
++ bw!
++ call delete('Xbackup.txt')
++ call delete(f)
++ set backup&vim backupdir&vim backupcopy&vim
++ endfunc
+*** ../vim-8.1.0250/src/Make_all.mak 2018-07-23 04:11:37.644969804 +0200
+--- src/Make_all.mak 2018-08-07 21:17:31.690274783 +0200
+***************
+*** 12,17 ****
+--- 12,18 ----
+ test_autocmd \
+ test_autoload \
+ test_backspace_opt \
++ test_backup \
+ test_blockedit \
+ test_breakindent \
+ test_bufline \
+*** ../vim-8.1.0250/src/version.c 2018-08-07 20:47:02.756848221 +0200
+--- src/version.c 2018-08-07 20:59:39.444509393 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 251,
+ /**/
+
+--
+TALL KNIGHT: When you have found the shrubbery, then you must cut down the
+ mightiest tree in the forest ... with a herring.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0252 b/data/vim/patches/8.1.0252
new file mode 100644
index 000000000..f72f55a0d
--- /dev/null
+++ b/data/vim/patches/8.1.0252
@@ -0,0 +1,1540 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0252
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0252
+Problem: Quickfix functions are too long.
+Solution: Refactor. (Yegappan Lakshmanan, closes #2950)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0251/src/quickfix.c 2018-08-07 19:47:46.746434541 +0200
+--- src/quickfix.c 2018-08-07 21:52:51.654369210 +0200
+***************
+*** 201,306 ****
+
+ /*
+ * Convert an errorformat pattern to a regular expression pattern.
+! * See fmt_pat definition above for the list of supported patterns.
+ */
+ static char_u *
+! fmtpat_to_regpat(
+! char_u *efmp,
+! efm_T *fmt_ptr,
+ int idx,
+ int round,
+- char_u *ptr,
+ char_u *errmsg)
+ {
+ char_u *srcptr;
+
+! if (fmt_ptr->addr[idx])
+ {
+ /* Each errorformat pattern can occur only once */
+ sprintf((char *)errmsg,
+! _("E372: Too many %%%c in format string"), *efmp);
+ EMSG(errmsg);
+ return NULL;
+ }
+ if ((idx && idx < 6
+! && vim_strchr((char_u *)"DXOPQ", fmt_ptr->prefix) != NULL)
+ || (idx == 6
+! && vim_strchr((char_u *)"OPQ", fmt_ptr->prefix) == NULL))
+ {
+ sprintf((char *)errmsg,
+! _("E373: Unexpected %%%c in format string"), *efmp);
+ EMSG(errmsg);
+ return NULL;
+ }
+! fmt_ptr->addr[idx] = (char_u)++round;
+! *ptr++ = '\\';
+! *ptr++ = '(';
+ #ifdef BACKSLASH_IN_FILENAME
+! if (*efmp == 'f')
+ {
+ /* Also match "c:" in the file name, even when
+ * checking for a colon next: "%f:".
+ * "\%(\a:\)\=" */
+! STRCPY(ptr, "\\%(\\a:\\)\\=");
+! ptr += 10;
+ }
+ #endif
+! if (*efmp == 'f' && efmp[1] != NUL)
+ {
+! if (efmp[1] != '\\' && efmp[1] != '%')
+ {
+ /* A file name may contain spaces, but this isn't
+ * in "\f". For "%f:%l:%m" there may be a ":" in
+ * the file name. Use ".\{-1,}x" instead (x is
+ * the next character), the requirement that :999:
+ * follows should work. */
+! STRCPY(ptr, ".\\{-1,}");
+! ptr += 7;
+ }
+ else
+ {
+ /* File name followed by '\\' or '%': include as
+ * many file name chars as possible. */
+! STRCPY(ptr, "\\f\\+");
+! ptr += 4;
+ }
+ }
+ else
+ {
+ srcptr = (char_u *)fmt_pat[idx].pattern;
+! while ((*ptr = *srcptr++) != NUL)
+! ++ptr;
+ }
+! *ptr++ = '\\';
+! *ptr++ = ')';
+
+! return ptr;
+ }
+
+ /*
+ * Convert a scanf like format in 'errorformat' to a regular expression.
+ */
+ static char_u *
+ scanf_fmt_to_regpat(
+ char_u *efm,
+ int len,
+! char_u **pefmp,
+! char_u *ptr,
+ char_u *errmsg)
+ {
+ char_u *efmp = *pefmp;
+
+! if (*++efmp == '[' || *efmp == '\\')
+ {
+! if ((*ptr++ = *efmp) == '[') /* %*[^a-z0-9] etc. */
+ {
+ if (efmp[1] == '^')
+! *ptr++ = *++efmp;
+ if (efmp < efm + len)
+ {
+! *ptr++ = *++efmp; /* could be ']' */
+ while (efmp < efm + len
+! && (*ptr++ = *++efmp) != ']')
+ /* skip */;
+ if (efmp == efm + len)
+ {
+--- 201,309 ----
+
+ /*
+ * Convert an errorformat pattern to a regular expression pattern.
+! * See fmt_pat definition above for the list of supported patterns. The
+! * pattern specifier is supplied in "efmpat". The converted pattern is stored
+! * in "regpat". Returns a pointer to the location after the pattern.
+ */
+ static char_u *
+! efmpat_to_regpat(
+! char_u *efmpat,
+! char_u *regpat,
+! efm_T *efminfo,
+ int idx,
+ int round,
+ char_u *errmsg)
+ {
+ char_u *srcptr;
+
+! if (efminfo->addr[idx])
+ {
+ /* Each errorformat pattern can occur only once */
+ sprintf((char *)errmsg,
+! _("E372: Too many %%%c in format string"), *efmpat);
+ EMSG(errmsg);
+ return NULL;
+ }
+ if ((idx && idx < 6
+! && vim_strchr((char_u *)"DXOPQ", efminfo->prefix) != NULL)
+ || (idx == 6
+! && vim_strchr((char_u *)"OPQ", efminfo->prefix) == NULL))
+ {
+ sprintf((char *)errmsg,
+! _("E373: Unexpected %%%c in format string"), *efmpat);
+ EMSG(errmsg);
+ return NULL;
+ }
+! efminfo->addr[idx] = (char_u)++round;
+! *regpat++ = '\\';
+! *regpat++ = '(';
+ #ifdef BACKSLASH_IN_FILENAME
+! if (*efmpat == 'f')
+ {
+ /* Also match "c:" in the file name, even when
+ * checking for a colon next: "%f:".
+ * "\%(\a:\)\=" */
+! STRCPY(regpat, "\\%(\\a:\\)\\=");
+! regpat += 10;
+ }
+ #endif
+! if (*efmpat == 'f' && efmpat[1] != NUL)
+ {
+! if (efmpat[1] != '\\' && efmpat[1] != '%')
+ {
+ /* A file name may contain spaces, but this isn't
+ * in "\f". For "%f:%l:%m" there may be a ":" in
+ * the file name. Use ".\{-1,}x" instead (x is
+ * the next character), the requirement that :999:
+ * follows should work. */
+! STRCPY(regpat, ".\\{-1,}");
+! regpat += 7;
+ }
+ else
+ {
+ /* File name followed by '\\' or '%': include as
+ * many file name chars as possible. */
+! STRCPY(regpat, "\\f\\+");
+! regpat += 4;
+ }
+ }
+ else
+ {
+ srcptr = (char_u *)fmt_pat[idx].pattern;
+! while ((*regpat = *srcptr++) != NUL)
+! ++regpat;
+ }
+! *regpat++ = '\\';
+! *regpat++ = ')';
+
+! return regpat;
+ }
+
+ /*
+ * Convert a scanf like format in 'errorformat' to a regular expression.
++ * Returns a pointer to the location after the pattern.
+ */
+ static char_u *
+ scanf_fmt_to_regpat(
++ char_u **pefmp,
+ char_u *efm,
+ int len,
+! char_u *regpat,
+ char_u *errmsg)
+ {
+ char_u *efmp = *pefmp;
+
+! if (*efmp == '[' || *efmp == '\\')
+ {
+! if ((*regpat++ = *efmp) == '[') /* %*[^a-z0-9] etc. */
+ {
+ if (efmp[1] == '^')
+! *regpat++ = *++efmp;
+ if (efmp < efm + len)
+ {
+! *regpat++ = *++efmp; /* could be ']' */
+ while (efmp < efm + len
+! && (*regpat++ = *++efmp) != ']')
+ /* skip */;
+ if (efmp == efm + len)
+ {
+***************
+*** 310,318 ****
+ }
+ }
+ else if (efmp < efm + len) /* %*\D, %*\s etc. */
+! *ptr++ = *++efmp;
+! *ptr++ = '\\';
+! *ptr++ = '+';
+ }
+ else
+ {
+--- 313,321 ----
+ }
+ }
+ else if (efmp < efm + len) /* %*\D, %*\s etc. */
+! *regpat++ = *++efmp;
+! *regpat++ = '\\';
+! *regpat++ = '+';
+ }
+ else
+ {
+***************
+*** 325,360 ****
+
+ *pefmp = efmp;
+
+! return ptr;
+ }
+
+ /*
+ * Analyze/parse an errorformat prefix.
+ */
+! static int
+! efm_analyze_prefix(char_u **pefmp, efm_T *fmt_ptr, char_u *errmsg)
+ {
+- char_u *efmp = *pefmp;
+-
+ if (vim_strchr((char_u *)"+-", *efmp) != NULL)
+! fmt_ptr->flags = *efmp++;
+ if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL)
+! fmt_ptr->prefix = *efmp;
+ else
+ {
+ sprintf((char *)errmsg,
+ _("E376: Invalid %%%c in format string prefix"), *efmp);
+ EMSG(errmsg);
+! return FAIL;
+ }
+
+! *pefmp = efmp;
+!
+! return OK;
+ }
+
+ /*
+! * Converts a 'errorformat' string to regular expression pattern
+ */
+ static int
+ efm_to_regpat(
+--- 328,362 ----
+
+ *pefmp = efmp;
+
+! return regpat;
+ }
+
+ /*
+ * Analyze/parse an errorformat prefix.
+ */
+! static char_u *
+! efm_analyze_prefix(char_u *efmp, efm_T *efminfo, char_u *errmsg)
+ {
+ if (vim_strchr((char_u *)"+-", *efmp) != NULL)
+! efminfo->flags = *efmp++;
+ if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL)
+! efminfo->prefix = *efmp;
+ else
+ {
+ sprintf((char *)errmsg,
+ _("E376: Invalid %%%c in format string prefix"), *efmp);
+ EMSG(errmsg);
+! return NULL;
+ }
+
+! return efmp;
+ }
+
+ /*
+! * Converts a 'errorformat' string part in 'efm' to a regular expression
+! * pattern. The resulting regex pattern is returned in "regpat". Additional
+! * information about the 'erroformat' pattern is returned in "fmt_ptr".
+! * Returns OK or FAIL.
+ */
+ static int
+ efm_to_regpat(
+***************
+*** 370,376 ****
+ int idx = 0;
+
+ /*
+! * Build regexp pattern from current 'errorformat' option
+ */
+ ptr = regpat;
+ *ptr++ = '^';
+--- 372,378 ----
+ int idx = 0;
+
+ /*
+! * Build a regexp pattern for a 'errorformat' option part
+ */
+ ptr = regpat;
+ *ptr++ = '^';
+***************
+*** 385,401 ****
+ break;
+ if (idx < FMT_PATTERNS)
+ {
+! ptr = fmtpat_to_regpat(efmp, fmt_ptr, idx, round, ptr,
+ errmsg);
+ if (ptr == NULL)
+! return -1;
+ round++;
+ }
+ else if (*efmp == '*')
+ {
+! ptr = scanf_fmt_to_regpat(efm, len, &efmp, ptr, errmsg);
+ if (ptr == NULL)
+! return -1;
+ }
+ else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL)
+ *ptr++ = *efmp; /* regexp magic characters */
+--- 387,404 ----
+ break;
+ if (idx < FMT_PATTERNS)
+ {
+! ptr = efmpat_to_regpat(efmp, ptr, fmt_ptr, idx, round,
+ errmsg);
+ if (ptr == NULL)
+! return FAIL;
+ round++;
+ }
+ else if (*efmp == '*')
+ {
+! ++efmp;
+! ptr = scanf_fmt_to_regpat(&efmp, efm, len, ptr, errmsg);
+ if (ptr == NULL)
+! return FAIL;
+ }
+ else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL)
+ *ptr++ = *efmp; /* regexp magic characters */
+***************
+*** 405,419 ****
+ fmt_ptr->conthere = TRUE;
+ else if (efmp == efm + 1) /* analyse prefix */
+ {
+! if (efm_analyze_prefix(&efmp, fmt_ptr, errmsg) == FAIL)
+! return -1;
+ }
+ else
+ {
+ sprintf((char *)errmsg,
+ _("E377: Invalid %%%c in format string"), *efmp);
+ EMSG(errmsg);
+! return -1;
+ }
+ }
+ else /* copy normal character */
+--- 408,427 ----
+ fmt_ptr->conthere = TRUE;
+ else if (efmp == efm + 1) /* analyse prefix */
+ {
+! /*
+! * prefix is allowed only at the beginning of the errorformat
+! * option part
+! */
+! efmp = efm_analyze_prefix(efmp, fmt_ptr, errmsg);
+! if (efmp == NULL)
+! return FAIL;
+ }
+ else
+ {
+ sprintf((char *)errmsg,
+ _("E377: Invalid %%%c in format string"), *efmp);
+ EMSG(errmsg);
+! return FAIL;
+ }
+ }
+ else /* copy normal character */
+***************
+*** 429,437 ****
+ *ptr++ = '$';
+ *ptr = NUL;
+
+! return 0;
+ }
+
+ static void
+ free_efm_list(efm_T **efm_first)
+ {
+--- 437,448 ----
+ *ptr++ = '$';
+ *ptr = NUL;
+
+! return OK;
+ }
+
++ /*
++ * Free the 'errorformat' information list
++ */
+ static void
+ free_efm_list(efm_T **efm_first)
+ {
+***************
+*** 446,452 ****
+ fmt_start = NULL;
+ }
+
+! /* Parse 'errorformat' option */
+ static efm_T *
+ parse_efm_option(char_u *efm)
+ {
+--- 457,504 ----
+ fmt_start = NULL;
+ }
+
+! /*
+! * Compute the size of the buffer used to convert a 'errorformat' pattern into
+! * a regular expression pattern.
+! */
+! static int
+! efm_regpat_bufsz(char_u *efm)
+! {
+! int sz;
+! int i;
+!
+! sz = (FMT_PATTERNS * 3) + ((int)STRLEN(efm) << 2);
+! for (i = FMT_PATTERNS; i > 0; )
+! sz += (int)STRLEN(fmt_pat[--i].pattern);
+! #ifdef BACKSLASH_IN_FILENAME
+! sz += 12; /* "%f" can become twelve chars longer (see efm_to_regpat) */
+! #else
+! sz += 2; /* "%f" can become two chars longer */
+! #endif
+!
+! return sz;
+! }
+!
+! /*
+! * Return the length of a 'errorformat' option part (separated by ",").
+! */
+! static int
+! efm_option_part_len(char_u *efm)
+! {
+! int len;
+!
+! for (len = 0; efm[len] != NUL && efm[len] != ','; ++len)
+! if (efm[len] == '\\' && efm[len + 1] != NUL)
+! ++len;
+!
+! return len;
+! }
+!
+! /*
+! * Parse the 'errorformat' option. Multiple parts in the 'errorformat' option
+! * are parsed and converted to regular expressions. Returns information about
+! * the parsed 'errorformat' option.
+! */
+ static efm_T *
+ parse_efm_option(char_u *efm)
+ {
+***************
+*** 457,464 ****
+ efm_T *fmt_last = NULL;
+ char_u *fmtstr = NULL;
+ int len;
+! int i;
+! int round;
+
+ errmsglen = CMDBUFFSIZE + 1;
+ errmsg = alloc_id(errmsglen, aid_qf_errmsg);
+--- 509,515 ----
+ efm_T *fmt_last = NULL;
+ char_u *fmtstr = NULL;
+ int len;
+! int sz;
+
+ errmsglen = CMDBUFFSIZE + 1;
+ errmsg = alloc_id(errmsglen, aid_qf_errmsg);
+***************
+*** 473,487 ****
+ /*
+ * Get some space to modify the format string into.
+ */
+! i = (FMT_PATTERNS * 3) + ((int)STRLEN(efm) << 2);
+! for (round = FMT_PATTERNS; round > 0; )
+! i += (int)STRLEN(fmt_pat[--round].pattern);
+! #ifdef BACKSLASH_IN_FILENAME
+! i += 12; /* "%f" can become twelve chars longer (see efm_to_regpat) */
+! #else
+! i += 2; /* "%f" can become two chars longer */
+! #endif
+! if ((fmtstr = alloc(i)) == NULL)
+ goto parse_efm_error;
+
+ while (efm[0] != NUL)
+--- 524,531 ----
+ /*
+ * Get some space to modify the format string into.
+ */
+! sz = efm_regpat_bufsz(efm);
+! if ((fmtstr = alloc(sz)) == NULL)
+ goto parse_efm_error;
+
+ while (efm[0] != NUL)
+***************
+*** 501,511 ****
+ /*
+ * Isolate one part in the 'errorformat' option
+ */
+! for (len = 0; efm[len] != NUL && efm[len] != ','; ++len)
+! if (efm[len] == '\\' && efm[len + 1] != NUL)
+! ++len;
+
+! if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == -1)
+ goto parse_efm_error;
+ if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL)
+ goto parse_efm_error;
+--- 545,553 ----
+ /*
+ * Isolate one part in the 'errorformat' option
+ */
+! len = efm_option_part_len(efm);
+
+! if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == FAIL)
+ goto parse_efm_error;
+ if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL)
+ goto parse_efm_error;
+***************
+*** 539,544 ****
+--- 581,590 ----
+ QF_MULTISCAN = 5,
+ };
+
++ /*
++ * State information used to parse lines and add entries to a quickfix/location
++ * list.
++ */
+ typedef struct {
+ char_u *linebuf;
+ int linelen;
+***************
+*** 554,559 ****
+--- 600,608 ----
+ vimconv_T vc;
+ } qfstate_T;
+
++ /*
++ * Allocate more memory for the line buffer used for parsing lines.
++ */
+ static char_u *
+ qf_grow_linebuf(qfstate_T *state, int newsz)
+ {
+***************
+*** 861,870 ****
+ } qffields_T;
+
+ /*
+! * Parse the error format matches in 'regmatch' and set the values in 'fields'.
+! * fmt_ptr contains the 'efm' format specifiers/prefixes that have a match.
+! * Returns QF_OK if all the matches are successfully parsed. On failure,
+! * returns QF_FAIL or QF_NOMEM.
+ */
+ static int
+ qf_parse_match(
+--- 910,1160 ----
+ } qffields_T;
+
+ /*
+! * Parse the match for filename ('%f') pattern in regmatch.
+! * Return the matched value in "fields->namebuf".
+! */
+! static int
+! qf_parse_fmt_f(regmatch_T *rmp, int midx, qffields_T *fields, int prefix)
+! {
+! int c;
+!
+! if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL)
+! return QF_FAIL;
+!
+! /* Expand ~/file and $HOME/file to full path. */
+! c = *rmp->endp[midx];
+! *rmp->endp[midx] = NUL;
+! expand_env(rmp->startp[midx], fields->namebuf, CMDBUFFSIZE);
+! *rmp->endp[midx] = c;
+!
+! /*
+! * For separate filename patterns (%O, %P and %Q), the specified file
+! * should exist.
+! */
+! if (vim_strchr((char_u *)"OPQ", prefix) != NULL
+! && mch_getperm(fields->namebuf) == -1)
+! return QF_FAIL;
+!
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for error number ('%n') pattern in regmatch.
+! * Return the matched value in "fields->enr".
+! */
+! static int
+! qf_parse_fmt_n(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! if (rmp->startp[midx] == NULL)
+! return QF_FAIL;
+! fields->enr = (int)atol((char *)rmp->startp[midx]);
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for line number (%l') pattern in regmatch.
+! * Return the matched value in "fields->lnum".
+! */
+! static int
+! qf_parse_fmt_l(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! if (rmp->startp[midx] == NULL)
+! return QF_FAIL;
+! fields->lnum = atol((char *)rmp->startp[midx]);
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for column number ('%c') pattern in regmatch.
+! * Return the matched value in "fields->col".
+! */
+! static int
+! qf_parse_fmt_c(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! if (rmp->startp[midx] == NULL)
+! return QF_FAIL;
+! fields->col = (int)atol((char *)rmp->startp[midx]);
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for error type ('%t') pattern in regmatch.
+! * Return the matched value in "fields->type".
+! */
+! static int
+! qf_parse_fmt_t(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! if (rmp->startp[midx] == NULL)
+! return QF_FAIL;
+! fields->type = *rmp->startp[midx];
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for '%+' format pattern. The whole matching line is included
+! * in the error string. Return the matched line in "fields->errmsg".
+! */
+! static int
+! qf_parse_fmt_plus(char_u *linebuf, int linelen, qffields_T *fields)
+! {
+! char_u *p;
+!
+! if (linelen >= fields->errmsglen)
+! {
+! /* linelen + null terminator */
+! if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL)
+! return QF_NOMEM;
+! fields->errmsg = p;
+! fields->errmsglen = linelen + 1;
+! }
+! vim_strncpy(fields->errmsg, linebuf, linelen);
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for error message ('%m') pattern in regmatch.
+! * Return the matched value in "fields->errmsg".
+! */
+! static int
+! qf_parse_fmt_m(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! char_u *p;
+! int len;
+!
+! if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL)
+! return QF_FAIL;
+! len = (int)(rmp->endp[midx] - rmp->startp[midx]);
+! if (len >= fields->errmsglen)
+! {
+! /* len + null terminator */
+! if ((p = vim_realloc(fields->errmsg, len + 1)) == NULL)
+! return QF_NOMEM;
+! fields->errmsg = p;
+! fields->errmsglen = len + 1;
+! }
+! vim_strncpy(fields->errmsg, rmp->startp[midx], len);
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for rest of a single-line file message ('%r') pattern.
+! * Return the matched value in "tail".
+! */
+! static int
+! qf_parse_fmt_r(regmatch_T *rmp, int midx, char_u **tail)
+! {
+! if (rmp->startp[midx] == NULL)
+! return QF_FAIL;
+! *tail = rmp->startp[midx];
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for the pointer line ('%p') pattern in regmatch.
+! * Return the matched value in "fields->col".
+! */
+! static int
+! qf_parse_fmt_p(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! char_u *match_ptr;
+!
+! if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL)
+! return QF_FAIL;
+! fields->col = 0;
+! for (match_ptr = rmp->startp[midx]; match_ptr != rmp->endp[midx];
+! ++match_ptr)
+! {
+! ++fields->col;
+! if (*match_ptr == TAB)
+! {
+! fields->col += 7;
+! fields->col -= fields->col % 8;
+! }
+! }
+! ++fields->col;
+! fields->use_viscol = TRUE;
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for the virtual column number ('%v') pattern in regmatch.
+! * Return the matched value in "fields->col".
+! */
+! static int
+! qf_parse_fmt_v(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! if (rmp->startp[midx] == NULL)
+! return QF_FAIL;
+! fields->col = (int)atol((char *)rmp->startp[midx]);
+! fields->use_viscol = TRUE;
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for the search text ('%s') pattern in regmatch.
+! * Return the matched value in "fields->pattern".
+! */
+! static int
+! qf_parse_fmt_s(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! int len;
+!
+! if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL)
+! return QF_FAIL;
+! len = (int)(rmp->endp[midx] - rmp->startp[midx]);
+! if (len > CMDBUFFSIZE - 5)
+! len = CMDBUFFSIZE - 5;
+! STRCPY(fields->pattern, "^\\V");
+! STRNCAT(fields->pattern, rmp->startp[midx], len);
+! fields->pattern[len + 3] = '\\';
+! fields->pattern[len + 4] = '$';
+! fields->pattern[len + 5] = NUL;
+! return QF_OK;
+! }
+!
+! /*
+! * Parse the match for the module ('%o') pattern in regmatch.
+! * Return the matched value in "fields->module".
+! */
+! static int
+! qf_parse_fmt_o(regmatch_T *rmp, int midx, qffields_T *fields)
+! {
+! int len;
+!
+! if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL)
+! return QF_FAIL;
+! len = (int)(rmp->endp[midx] - rmp->startp[midx]);
+! if (len > CMDBUFFSIZE)
+! len = CMDBUFFSIZE;
+! STRNCAT(fields->module, rmp->startp[midx], len);
+! return QF_OK;
+! }
+!
+! /*
+! * 'errorformat' format pattern parser functions.
+! * The '%f' and '%r' formats are parsed differently from other formats.
+! * See qf_parse_match() for details.
+! */
+! static int (*qf_parse_fmt[FMT_PATTERNS])(regmatch_T *, int, qffields_T *) =
+! {
+! NULL,
+! qf_parse_fmt_n,
+! qf_parse_fmt_l,
+! qf_parse_fmt_c,
+! qf_parse_fmt_t,
+! qf_parse_fmt_m,
+! NULL,
+! qf_parse_fmt_p,
+! qf_parse_fmt_v,
+! qf_parse_fmt_s,
+! qf_parse_fmt_o
+! };
+!
+! /*
+! * Parse the error format pattern matches in "regmatch" and set the values in
+! * "fields". fmt_ptr contains the 'efm' format specifiers/prefixes that have a
+! * match. Returns QF_OK if all the matches are successfully parsed. On
+! * failure, returns QF_FAIL or QF_NOMEM.
+ */
+ static int
+ qf_parse_match(
+***************
+*** 877,886 ****
+ int qf_multiscan,
+ char_u **tail)
+ {
+- char_u *p;
+ int idx = fmt_ptr->prefix;
+ int i;
+! int len;
+
+ if ((idx == 'C' || idx == 'Z') && !qf_multiline)
+ return QF_FAIL;
+--- 1167,1176 ----
+ int qf_multiscan,
+ char_u **tail)
+ {
+ int idx = fmt_ptr->prefix;
+ int i;
+! int midx;
+! int status;
+
+ if ((idx == 'C' || idx == 'Z') && !qf_multiline)
+ return QF_FAIL;
+***************
+*** 893,1020 ****
+ * We check for an actual submatch, because "\[" and "\]" in
+ * the 'errorformat' may cause the wrong submatch to be used.
+ */
+! if ((i = (int)fmt_ptr->addr[0]) > 0) /* %f */
+ {
+! int c;
+
+! if (regmatch->startp[i] == NULL || regmatch->endp[i] == NULL)
+! return QF_FAIL;
+!
+! /* Expand ~/file and $HOME/file to full path. */
+! c = *regmatch->endp[i];
+! *regmatch->endp[i] = NUL;
+! expand_env(regmatch->startp[i], fields->namebuf, CMDBUFFSIZE);
+! *regmatch->endp[i] = c;
+!
+! if (vim_strchr((char_u *)"OPQ", idx) != NULL
+! && mch_getperm(fields->namebuf) == -1)
+! return QF_FAIL;
+! }
+! if ((i = (int)fmt_ptr->addr[1]) > 0) /* %n */
+! {
+! if (regmatch->startp[i] == NULL)
+! return QF_FAIL;
+! fields->enr = (int)atol((char *)regmatch->startp[i]);
+! }
+! if ((i = (int)fmt_ptr->addr[2]) > 0) /* %l */
+! {
+! if (regmatch->startp[i] == NULL)
+! return QF_FAIL;
+! fields->lnum = atol((char *)regmatch->startp[i]);
+! }
+! if ((i = (int)fmt_ptr->addr[3]) > 0) /* %c */
+! {
+! if (regmatch->startp[i] == NULL)
+! return QF_FAIL;
+! fields->col = (int)atol((char *)regmatch->startp[i]);
+! }
+! if ((i = (int)fmt_ptr->addr[4]) > 0) /* %t */
+! {
+! if (regmatch->startp[i] == NULL)
+! return QF_FAIL;
+! fields->type = *regmatch->startp[i];
+! }
+! if (fmt_ptr->flags == '+' && !qf_multiscan) /* %+ */
+! {
+! if (linelen >= fields->errmsglen)
+! {
+! /* linelen + null terminator */
+! if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL)
+! return QF_NOMEM;
+! fields->errmsg = p;
+! fields->errmsglen = linelen + 1;
+! }
+! vim_strncpy(fields->errmsg, linebuf, linelen);
+! }
+! else if ((i = (int)fmt_ptr->addr[5]) > 0) /* %m */
+! {
+! if (regmatch->startp[i] == NULL || regmatch->endp[i] == NULL)
+! return QF_FAIL;
+! len = (int)(regmatch->endp[i] - regmatch->startp[i]);
+! if (len >= fields->errmsglen)
+! {
+! /* len + null terminator */
+! if ((p = vim_realloc(fields->errmsg, len + 1)) == NULL)
+! return QF_NOMEM;
+! fields->errmsg = p;
+! fields->errmsglen = len + 1;
+! }
+! vim_strncpy(fields->errmsg, regmatch->startp[i], len);
+! }
+! if ((i = (int)fmt_ptr->addr[6]) > 0) /* %r */
+! {
+! if (regmatch->startp[i] == NULL)
+! return QF_FAIL;
+! *tail = regmatch->startp[i];
+! }
+! if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
+! {
+! char_u *match_ptr;
+!
+! if (regmatch->startp[i] == NULL || regmatch->endp[i] == NULL)
+! return QF_FAIL;
+! fields->col = 0;
+! for (match_ptr = regmatch->startp[i];
+! match_ptr != regmatch->endp[i]; ++match_ptr)
+! {
+! ++fields->col;
+! if (*match_ptr == TAB)
+! {
+! fields->col += 7;
+! fields->col -= fields->col % 8;
+! }
+! }
+! ++fields->col;
+! fields->use_viscol = TRUE;
+! }
+! if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
+! {
+! if (regmatch->startp[i] == NULL)
+! return QF_FAIL;
+! fields->col = (int)atol((char *)regmatch->startp[i]);
+! fields->use_viscol = TRUE;
+! }
+! if ((i = (int)fmt_ptr->addr[9]) > 0) /* %s */
+! {
+! if (regmatch->startp[i] == NULL || regmatch->endp[i] == NULL)
+! return QF_FAIL;
+! len = (int)(regmatch->endp[i] - regmatch->startp[i]);
+! if (len > CMDBUFFSIZE - 5)
+! len = CMDBUFFSIZE - 5;
+! STRCPY(fields->pattern, "^\\V");
+! STRNCAT(fields->pattern, regmatch->startp[i], len);
+! fields->pattern[len + 3] = '\\';
+! fields->pattern[len + 4] = '$';
+! fields->pattern[len + 5] = NUL;
+! }
+! if ((i = (int)fmt_ptr->addr[10]) > 0) /* %o */
+! {
+! if (regmatch->startp[i] == NULL || regmatch->endp[i] == NULL)
+! return QF_FAIL;
+! len = (int)(regmatch->endp[i] - regmatch->startp[i]);
+! if (len > CMDBUFFSIZE)
+! len = CMDBUFFSIZE;
+! STRNCAT(fields->module, regmatch->startp[i], len);
+ }
+
+ return QF_OK;
+--- 1183,1208 ----
+ * We check for an actual submatch, because "\[" and "\]" in
+ * the 'errorformat' may cause the wrong submatch to be used.
+ */
+! for (i = 0; i < FMT_PATTERNS; i++)
+ {
+! status = QF_OK;
+! midx = (int)fmt_ptr->addr[i];
+! if (i == 0 && midx > 0) /* %f */
+! status = qf_parse_fmt_f(regmatch, midx, fields, idx);
+! else if (i == 5)
+! {
+! if (fmt_ptr->flags == '+' && !qf_multiscan) /* %+ */
+! status = qf_parse_fmt_plus(linebuf, linelen, fields);
+! else if (midx > 0) /* %m */
+! status = qf_parse_fmt_m(regmatch, midx, fields);
+! }
+! else if (i == 6 && midx > 0) /* %r */
+! status = qf_parse_fmt_r(regmatch, midx, tail);
+! else if (midx > 0) /* others */
+! status = (qf_parse_fmt[i])(regmatch, midx, fields);
+
+! if (status != QF_OK)
+! return status;
+ }
+
+ return QF_OK;
+***************
+*** 1308,1313 ****
+--- 1496,1513 ----
+ }
+
+ /*
++ * Returns TRUE if the specified quickfix/location list is empty.
++ */
++ static int
++ qf_list_empty(qf_info_T *qi, int qf_idx)
++ {
++ if (qi == NULL || qf_idx < 0 || qf_idx >= LISTCOUNT)
++ return TRUE;
++ return qi->qf_lists[qf_idx].qf_count <= 0;
++ }
++
++
++ /*
+ * Allocate the fields used for parsing lines and populating a quickfix list.
+ */
+ static int
+***************
+*** 1450,1456 ****
+ {
+ /* Adding to existing list, use last entry. */
+ adding = TRUE;
+! if (qi->qf_lists[qf_idx].qf_count > 0)
+ old_last = qi->qf_lists[qf_idx].qf_last;
+ }
+
+--- 1650,1656 ----
+ {
+ /* Adding to existing list, use last entry. */
+ adding = TRUE;
+! if (!qf_list_empty(qi, qf_idx))
+ old_last = qi->qf_lists[qf_idx].qf_last;
+ }
+
+***************
+*** 1777,1784 ****
+ qfp->qf_valid = valid;
+
+ lastp = &qi->qf_lists[qf_idx].qf_last;
+! if (qi->qf_lists[qf_idx].qf_count == 0)
+! /* first element in the list */
+ {
+ qi->qf_lists[qf_idx].qf_start = qfp;
+ qi->qf_lists[qf_idx].qf_ptr = qfp;
+--- 1977,1983 ----
+ qfp->qf_valid = valid;
+
+ lastp = &qi->qf_lists[qf_idx].qf_last;
+! if (qf_list_empty(qi, qf_idx)) /* first element in the list */
+ {
+ qi->qf_lists[qf_idx].qf_start = qfp;
+ qi->qf_lists[qf_idx].qf_ptr = qfp;
+***************
+*** 1875,1881 ****
+ to->w_llist->qf_listcount = qi->qf_listcount;
+
+ /* Copy the location lists one at a time */
+! for (idx = 0; idx < qi->qf_listcount; idx++)
+ {
+ qf_list_T *from_qfl;
+ qf_list_T *to_qfl;
+--- 2074,2080 ----
+ to->w_llist->qf_listcount = qi->qf_listcount;
+
+ /* Copy the location lists one at a time */
+! for (idx = 0; idx < qi->qf_listcount; ++idx)
+ {
+ qf_list_T *from_qfl;
+ qf_list_T *to_qfl;
+***************
+*** 2907,2913 ****
+ qi = &ql_info;
+
+ if (qi->qf_curlist >= qi->qf_listcount
+! || qi->qf_lists[qi->qf_curlist].qf_count == 0)
+ {
+ EMSG(_(e_quickfix));
+ return;
+--- 3106,3112 ----
+ qi = &ql_info;
+
+ if (qi->qf_curlist >= qi->qf_listcount
+! || qf_list_empty(qi, qi->qf_curlist))
+ {
+ EMSG(_(e_quickfix));
+ return;
+***************
+*** 3033,3056 ****
+ }
+
+ /*
+ * ":clist": list all errors
+ * ":llist": list all locations
+ */
+ void
+ qf_list(exarg_T *eap)
+ {
+- buf_T *buf;
+- char_u *fname;
+ qfline_T *qfp;
+ int i;
+ int idx1 = 1;
+ int idx2 = -1;
+ char_u *arg = eap->arg;
+ int plus = FALSE;
+- int qfFileAttr;
+- int qfSepAttr;
+- int qfLineAttr;
+- int filter_entry;
+ int all = eap->forceit; /* if not :cl!, only show
+ recognised errors */
+ qf_info_T *qi = &ql_info;
+--- 3232,3336 ----
+ }
+
+ /*
++ * Highlight attributes used for displaying entries from the quickfix list.
++ */
++ static int qfFileAttr;
++ static int qfSepAttr;
++ static int qfLineAttr;
++
++ /*
++ * Display information about a single entry from the quickfix/location list.
++ * Used by ":clist/:llist" commands.
++ */
++ static void
++ qf_list_entry(qf_info_T *qi, qfline_T *qfp, int qf_idx)
++ {
++ char_u *fname;
++ buf_T *buf;
++ int filter_entry;
++
++ fname = NULL;
++ if (qfp->qf_module != NULL && *qfp->qf_module != NUL)
++ vim_snprintf((char *)IObuff, IOSIZE, "%2d %s", qf_idx,
++ (char *)qfp->qf_module);
++ else {
++ if (qfp->qf_fnum != 0
++ && (buf = buflist_findnr(qfp->qf_fnum)) != NULL)
++ {
++ fname = buf->b_fname;
++ if (qfp->qf_type == 1) /* :helpgrep */
++ fname = gettail(fname);
++ }
++ if (fname == NULL)
++ sprintf((char *)IObuff, "%2d", qf_idx);
++ else
++ vim_snprintf((char *)IObuff, IOSIZE, "%2d %s",
++ qf_idx, (char *)fname);
++ }
++
++ // Support for filtering entries using :filter /pat/ clist
++ // Match against the module name, file name, search pattern and
++ // text of the entry.
++ filter_entry = TRUE;
++ if (qfp->qf_module != NULL && *qfp->qf_module != NUL)
++ filter_entry &= message_filtered(qfp->qf_module);
++ if (filter_entry && fname != NULL)
++ filter_entry &= message_filtered(fname);
++ if (filter_entry && qfp->qf_pattern != NULL)
++ filter_entry &= message_filtered(qfp->qf_pattern);
++ if (filter_entry)
++ filter_entry &= message_filtered(qfp->qf_text);
++ if (filter_entry)
++ return;
++
++ msg_putchar('\n');
++ msg_outtrans_attr(IObuff, qf_idx == qi->qf_lists[qi->qf_curlist].qf_index
++ ? HL_ATTR(HLF_QFL) : qfFileAttr);
++
++ if (qfp->qf_lnum != 0)
++ msg_puts_attr((char_u *)":", qfSepAttr);
++ if (qfp->qf_lnum == 0)
++ IObuff[0] = NUL;
++ else if (qfp->qf_col == 0)
++ sprintf((char *)IObuff, "%ld", qfp->qf_lnum);
++ else
++ sprintf((char *)IObuff, "%ld col %d",
++ qfp->qf_lnum, qfp->qf_col);
++ sprintf((char *)IObuff + STRLEN(IObuff), "%s",
++ (char *)qf_types(qfp->qf_type, qfp->qf_nr));
++ msg_puts_attr(IObuff, qfLineAttr);
++ msg_puts_attr((char_u *)":", qfSepAttr);
++ if (qfp->qf_pattern != NULL)
++ {
++ qf_fmt_text(qfp->qf_pattern, IObuff, IOSIZE);
++ msg_puts(IObuff);
++ msg_puts_attr((char_u *)":", qfSepAttr);
++ }
++ msg_puts((char_u *)" ");
++
++ /* Remove newlines and leading whitespace from the text. For an
++ * unrecognized line keep the indent, the compiler may mark a word
++ * with ^^^^. */
++ qf_fmt_text((fname != NULL || qfp->qf_lnum != 0)
++ ? skipwhite(qfp->qf_text) : qfp->qf_text,
++ IObuff, IOSIZE);
++ msg_prt_line(IObuff, FALSE);
++ out_flush(); /* show one line at a time */
++ }
++
++ /*
+ * ":clist": list all errors
+ * ":llist": list all locations
+ */
+ void
+ qf_list(exarg_T *eap)
+ {
+ qfline_T *qfp;
+ int i;
+ int idx1 = 1;
+ int idx2 = -1;
+ char_u *arg = eap->arg;
+ int plus = FALSE;
+ int all = eap->forceit; /* if not :cl!, only show
+ recognised errors */
+ qf_info_T *qi = &ql_info;
+***************
+*** 3066,3072 ****
+ }
+
+ if (qi->qf_curlist >= qi->qf_listcount
+! || qi->qf_lists[qi->qf_curlist].qf_count == 0)
+ {
+ EMSG(_(e_quickfix));
+ return;
+--- 3346,3352 ----
+ }
+
+ if (qi->qf_curlist >= qi->qf_listcount
+! || qf_list_empty(qi, qi->qf_curlist))
+ {
+ EMSG(_(e_quickfix));
+ return;
+***************
+*** 3123,3197 ****
+ if (got_int)
+ break;
+
+! fname = NULL;
+! if (qfp->qf_module != NULL && *qfp->qf_module != NUL)
+! vim_snprintf((char *)IObuff, IOSIZE, "%2d %s", i, (char *)qfp->qf_module);
+! else {
+! if (qfp->qf_fnum != 0
+! && (buf = buflist_findnr(qfp->qf_fnum)) != NULL)
+! {
+! fname = buf->b_fname;
+! if (qfp->qf_type == 1) /* :helpgrep */
+! fname = gettail(fname);
+! }
+! if (fname == NULL)
+! sprintf((char *)IObuff, "%2d", i);
+! else
+! vim_snprintf((char *)IObuff, IOSIZE, "%2d %s",
+! i, (char *)fname);
+! }
+!
+! // Support for filtering entries using :filter /pat/ clist
+! // Match against the module name, file name, search pattern and
+! // text of the entry.
+! filter_entry = TRUE;
+! if (qfp->qf_module != NULL && *qfp->qf_module != NUL)
+! filter_entry &= message_filtered(qfp->qf_module);
+! if (filter_entry && fname != NULL)
+! filter_entry &= message_filtered(fname);
+! if (filter_entry && qfp->qf_pattern != NULL)
+! filter_entry &= message_filtered(qfp->qf_pattern);
+! if (filter_entry)
+! filter_entry &= message_filtered(qfp->qf_text);
+! if (filter_entry)
+! goto next_entry;
+!
+! msg_putchar('\n');
+! msg_outtrans_attr(IObuff, i == qi->qf_lists[qi->qf_curlist].qf_index
+! ? HL_ATTR(HLF_QFL) : qfFileAttr);
+!
+! if (qfp->qf_lnum != 0)
+! msg_puts_attr((char_u *)":", qfSepAttr);
+! if (qfp->qf_lnum == 0)
+! IObuff[0] = NUL;
+! else if (qfp->qf_col == 0)
+! sprintf((char *)IObuff, "%ld", qfp->qf_lnum);
+! else
+! sprintf((char *)IObuff, "%ld col %d",
+! qfp->qf_lnum, qfp->qf_col);
+! sprintf((char *)IObuff + STRLEN(IObuff), "%s",
+! (char *)qf_types(qfp->qf_type, qfp->qf_nr));
+! msg_puts_attr(IObuff, qfLineAttr);
+! msg_puts_attr((char_u *)":", qfSepAttr);
+! if (qfp->qf_pattern != NULL)
+! {
+! qf_fmt_text(qfp->qf_pattern, IObuff, IOSIZE);
+! msg_puts(IObuff);
+! msg_puts_attr((char_u *)":", qfSepAttr);
+! }
+! msg_puts((char_u *)" ");
+!
+! /* Remove newlines and leading whitespace from the text. For an
+! * unrecognized line keep the indent, the compiler may mark a word
+! * with ^^^^. */
+! qf_fmt_text((fname != NULL || qfp->qf_lnum != 0)
+! ? skipwhite(qfp->qf_text) : qfp->qf_text,
+! IObuff, IOSIZE);
+! msg_prt_line(IObuff, FALSE);
+! out_flush(); /* show one line at a time */
+ }
+
+- next_entry:
+ qfp = qfp->qf_next;
+ if (qfp == NULL)
+ break;
+--- 3403,3411 ----
+ if (got_int)
+ break;
+
+! qf_list_entry(qi, qfp, i);
+ }
+
+ qfp = qfp->qf_next;
+ if (qfp == NULL)
+ break;
+***************
+*** 3320,3326 ****
+ if (eap->cmdidx == CMD_lhistory)
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL || (qi->qf_listcount == 0
+! && qi->qf_lists[qi->qf_curlist].qf_count == 0))
+ MSG(_("No entries"));
+ else
+ for (i = 0; i < qi->qf_listcount; ++i)
+--- 3534,3540 ----
+ if (eap->cmdidx == CMD_lhistory)
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL || (qi->qf_listcount == 0
+! && qf_list_empty(qi, qi->qf_curlist)))
+ MSG(_("No entries"));
+ else
+ for (i = 0; i < qi->qf_listcount; ++i)
+***************
+*** 3421,3427 ****
+ }
+
+ for (idx = 0; idx < qi->qf_listcount; ++idx)
+! if (qi->qf_lists[idx].qf_count)
+ for (i = 0, qfp = qi->qf_lists[idx].qf_start;
+ i < qi->qf_lists[idx].qf_count && qfp != NULL;
+ ++i, qfp = qfp->qf_next)
+--- 3635,3641 ----
+ }
+
+ for (idx = 0; idx < qi->qf_listcount; ++idx)
+! if (!qf_list_empty(qi, idx))
+ for (i = 0, qfp = qi->qf_lists[idx].qf_start;
+ i < qi->qf_lists[idx].qf_count && qfp != NULL;
+ ++i, qfp = qfp->qf_next)
+***************
+*** 3552,3558 ****
+ * it if we have errors; otherwise, leave it closed.
+ */
+ if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
+! || qi->qf_lists[qi->qf_curlist].qf_count == 0
+ || qi->qf_curlist >= qi->qf_listcount)
+ {
+ if (win != NULL)
+--- 3766,3772 ----
+ * it if we have errors; otherwise, leave it closed.
+ */
+ if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
+! || qf_list_empty(qi, qi->qf_curlist)
+ || qi->qf_curlist >= qi->qf_listcount)
+ {
+ if (win != NULL)
+***************
+*** 5154,5160 ****
+ qi->qf_curlist = qf_id2nr(qi, save_qfid);
+
+ /* Jump to first match. */
+! if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
+ {
+ if ((flags & VGR_NOJUMP) == 0)
+ vgr_jump_to_match(qi, eap->forceit, &redraw_for_dummy,
+--- 5368,5374 ----
+ qi->qf_curlist = qf_id2nr(qi, save_qfid);
+
+ /* Jump to first match. */
+! if (!qf_list_empty(qi, qi->qf_curlist))
+ {
+ if ((flags & VGR_NOJUMP) == 0)
+ vgr_jump_to_match(qi, eap->forceit, &redraw_for_dummy,
+***************
+*** 5387,5394 ****
+ if (qf_idx == INVALID_QFIDX)
+ qf_idx = qi->qf_curlist;
+
+! if (qf_idx >= qi->qf_listcount
+! || qi->qf_lists[qf_idx].qf_count == 0)
+ return FAIL;
+
+ qfp = qi->qf_lists[qf_idx].qf_start;
+--- 5601,5607 ----
+ if (qf_idx == INVALID_QFIDX)
+ qf_idx = qi->qf_curlist;
+
+! if (qf_idx >= qi->qf_listcount || qf_list_empty(qi, qf_idx))
+ return FAIL;
+
+ qfp = qi->qf_lists[qf_idx].qf_start;
+***************
+*** 5709,5715 ****
+ qf_getprop_idx(qf_info_T *qi, int qf_idx, dict_T *retdict)
+ {
+ int idx = qi->qf_lists[qf_idx].qf_index;
+! if (qi->qf_lists[qf_idx].qf_count == 0)
+ /* For empty lists, qf_index is set to 1 */
+ idx = 0;
+ return dict_add_number(retdict, "idx", idx);
+--- 5922,5928 ----
+ qf_getprop_idx(qf_info_T *qi, int qf_idx, dict_T *retdict)
+ {
+ int idx = qi->qf_lists[qf_idx].qf_index;
+! if (qf_list_empty(qi, qf_idx))
+ /* For empty lists, qf_index is set to 1 */
+ idx = 0;
+ return dict_add_number(retdict, "idx", idx);
+***************
+*** 5798,5804 ****
+ qf_new_list(qi, title);
+ qf_idx = qi->qf_curlist;
+ }
+! else if (action == 'a' && qi->qf_lists[qf_idx].qf_count > 0)
+ /* Adding to existing list, use last entry. */
+ old_last = qi->qf_lists[qf_idx].qf_last;
+ else if (action == 'r')
+--- 6011,6017 ----
+ qf_new_list(qi, title);
+ qf_idx = qi->qf_curlist;
+ }
+! else if (action == 'a' && !qf_list_empty(qi, qf_idx))
+ /* Adding to existing list, use last entry. */
+ old_last = qi->qf_lists[qf_idx].qf_last;
+ else if (action == 'r')
+***************
+*** 5887,5893 ****
+ {
+ qi->qf_lists[qf_idx].qf_ptr =
+ qi->qf_lists[qf_idx].qf_start;
+! if (qi->qf_lists[qf_idx].qf_count > 0)
+ qi->qf_lists[qf_idx].qf_index = 1;
+ }
+
+--- 6100,6106 ----
+ {
+ qi->qf_lists[qf_idx].qf_ptr =
+ qi->qf_lists[qf_idx].qf_start;
+! if (!qf_list_empty(qi, qf_idx))
+ qi->qf_lists[qf_idx].qf_index = 1;
+ }
+
+***************
+*** 6746,6752 ****
+ }
+
+ /* Jump to first match. */
+! if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
+ qf_jump(qi, 0, 0, FALSE);
+ else
+ EMSG2(_(e_nomatch2), eap->arg);
+--- 6959,6965 ----
+ }
+
+ /* Jump to first match. */
+! if (!qf_list_empty(qi, qi->qf_curlist))
+ qf_jump(qi, 0, 0, FALSE);
+ else
+ EMSG2(_(e_nomatch2), eap->arg);
+*** ../vim-8.1.0251/src/version.c 2018-08-07 21:39:09.251060096 +0200
+--- src/version.c 2018-08-07 21:43:08.981711510 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 252,
+ /**/
+
+--
+Q: How do you tell the difference between a female cat and a male cat?
+A: You ask it a question and if HE answers, it's a male but, if SHE
+ answers, it's a female.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0253 b/data/vim/patches/8.1.0253
new file mode 100644
index 000000000..a77bf4f89
--- /dev/null
+++ b/data/vim/patches/8.1.0253
@@ -0,0 +1,475 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0253
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0253
+Problem: Saving and restoring window title does not always work.
+Solution: Use the stack push and pop commands. (Kouichi Iwamoto,
+ closes #3059)
+Files: runtime/doc/term.txt, src/main.c, src/option.c, src/os_unix.c,
+ src/proto/term.pro, src/term.c, src/term.h, src/vim.h,
+ src/buffer.c, src/ex_docmd.c, src/os_amiga.c,
+ src/os_mswin.c, src/os_win32.c
+
+*** ../vim-8.1.0252/runtime/doc/term.txt 2018-05-17 13:42:03.000000000 +0200
+--- runtime/doc/term.txt 2018-08-07 22:02:48.947042241 +0200
+***************
+*** 342,347 ****
+--- 352,361 ----
+ t_SH set cursor shape *t_SH* *'t_SH'*
+ t_RC request terminal cursor blinking *t_RC* *'t_RC'*
+ t_RS request terminal cursor style *t_RS* *'t_RS'*
++ t_ST save window title to stack *t_ST* *'t_ST'*
++ t_RT restore window title from stack *t_RT* *'t_RT'*
++ t_Si save icon text to stack *t_Si* *'t_Si'*
++ t_Ri restore icon text from stack *t_Ri* *'t_Ri'*
+
+ Some codes have a start, middle and end part. The start and end are defined
+ by the termcap option, the middle part is text.
+*** ../vim-8.1.0252/src/main.c 2018-07-29 17:35:19.497750288 +0200
+--- src/main.c 2018-08-07 22:11:50.444370658 +0200
+***************
+*** 706,711 ****
+--- 706,715 ----
+ scroll_region_reset(); /* In case Rows changed */
+ scroll_start(); /* may scroll the screen to the right position */
+
++ #ifdef FEAT_TITLE
++ term_push_title(SAVE_RESTORE_BOTH);
++ #endif
++
+ /*
+ * Don't clear the screen when starting in Ex mode, unless using the GUI.
+ */
+*** ../vim-8.1.0252/src/option.c 2018-07-23 04:11:37.652969757 +0200
+--- src/option.c 2018-08-07 22:26:59.391401674 +0200
+***************
+*** 3192,3198 ****
+--- 3192,3200 ----
+ p_term("t_RB", T_RBG)
+ p_term("t_RC", T_CRC)
+ p_term("t_RI", T_CRI)
++ p_term("t_Ri", T_SRI)
+ p_term("t_RS", T_CRS)
++ p_term("t_RT", T_CRT)
+ p_term("t_RV", T_CRV)
+ p_term("t_Sb", T_CSB)
+ p_term("t_SC", T_CSC)
+***************
+*** 3200,3208 ****
+--- 3202,3212 ----
+ p_term("t_Sf", T_CSF)
+ p_term("t_SH", T_CSH)
+ p_term("t_SI", T_CSI)
++ p_term("t_Si", T_SSI)
+ p_term("t_so", T_SO)
+ p_term("t_SR", T_CSR)
+ p_term("t_sr", T_SR)
++ p_term("t_ST", T_CST)
+ p_term("t_Te", T_STE)
+ p_term("t_te", T_TE)
+ p_term("t_ti", T_TI)
+***************
+*** 10414,10420 ****
+ mch_setmouse(FALSE); /* switch mouse off */
+ #endif
+ #ifdef FEAT_TITLE
+! mch_restore_title(3); /* restore window titles */
+ #endif
+ #if defined(FEAT_XCLIPBOARD) && defined(FEAT_GUI)
+ /* When starting the GUI close the display opened for the clipboard.
+--- 10418,10424 ----
+ mch_setmouse(FALSE); /* switch mouse off */
+ #endif
+ #ifdef FEAT_TITLE
+! mch_restore_title(SAVE_RESTORE_BOTH); /* restore window titles */
+ #endif
+ #if defined(FEAT_XCLIPBOARD) && defined(FEAT_GUI)
+ /* When starting the GUI close the display opened for the clipboard.
+***************
+*** 11219,11226 ****
+ buf->b_p_isk = NULL;
+ }
+ /*
+! * Always free the allocated strings.
+! * If not already initialized, set 'readonly' and copy 'fileformat'.
+ */
+ if (!buf->b_p_initialized)
+ {
+--- 11223,11230 ----
+ buf->b_p_isk = NULL;
+ }
+ /*
+! * Always free the allocated strings. If not already initialized,
+! * reset 'readonly' and copy 'fileformat'.
+ */
+ if (!buf->b_p_initialized)
+ {
+*** ../vim-8.1.0252/src/os_unix.c 2018-08-07 17:38:36.991674646 +0200
+--- src/os_unix.c 2018-08-07 22:15:19.147259744 +0200
+***************
+*** 2336,2352 ****
+ /*
+ * Restore the window/icon title.
+ * "which" is one of:
+! * 1 only restore title
+! * 2 only restore icon
+! * 3 restore title and icon
+ */
+ void
+ mch_restore_title(int which)
+ {
+ /* only restore the title or icon when it has been set */
+! mch_settitle(((which & 1) && did_set_title) ?
+ (oldtitle ? oldtitle : p_titleold) : NULL,
+! ((which & 2) && did_set_icon) ? oldicon : NULL);
+ }
+
+ #endif /* FEAT_TITLE */
+--- 2336,2356 ----
+ /*
+ * Restore the window/icon title.
+ * "which" is one of:
+! * SAVE_RESTORE_TITLE only restore title
+! * SAVE_RESTORE_ICON only restore icon
+! * SAVE_RESTORE_BOTH restore title and icon
+ */
+ void
+ mch_restore_title(int which)
+ {
+ /* only restore the title or icon when it has been set */
+! mch_settitle(((which & SAVE_RESTORE_TITLE) && did_set_title) ?
+ (oldtitle ? oldtitle : p_titleold) : NULL,
+! ((which & SAVE_RESTORE_ICON) && did_set_icon) ? oldicon : NULL);
+!
+! // pop and push from/to the stack
+! term_pop_title(which);
+! term_push_title(which);
+ }
+
+ #endif /* FEAT_TITLE */
+***************
+*** 3412,3418 ****
+ {
+ settmode(TMODE_COOK);
+ #ifdef FEAT_TITLE
+! mch_restore_title(3); /* restore xterm title and icon name */
+ #endif
+ /*
+ * When t_ti is not empty but it doesn't cause swapping terminal
+--- 3416,3424 ----
+ {
+ settmode(TMODE_COOK);
+ #ifdef FEAT_TITLE
+! // restore xterm title and icon name
+! mch_restore_title(SAVE_RESTORE_BOTH);
+! term_pop_title(SAVE_RESTORE_BOTH);
+ #endif
+ /*
+ * When t_ti is not empty but it doesn't cause swapping terminal
+*** ../vim-8.1.0252/src/proto/term.pro 2018-08-07 17:38:36.995674625 +0200
+--- src/proto/term.pro 2018-08-07 22:14:11.971620330 +0200
+***************
+*** 31,36 ****
+--- 31,38 ----
+ void term_fg_rgb_color(guicolor_T rgb);
+ void term_bg_rgb_color(guicolor_T rgb);
+ void term_settitle(char_u *title);
++ void term_push_title(int which);
++ void term_pop_title(int which);
+ void ttest(int pairs);
+ void add_long_to_buf(long_u val, char_u *dst);
+ void check_shellsize(void);
+*** ../vim-8.1.0252/src/term.c 2018-08-07 17:38:36.995674625 +0200
+--- src/term.c 2018-08-07 22:13:41.603782475 +0200
+***************
+*** 922,927 ****
+--- 922,931 ----
+ # endif
+ {(int)KS_CBE, IF_EB("\033[?2004h", ESC_STR "[?2004h")},
+ {(int)KS_CBD, IF_EB("\033[?2004l", ESC_STR "[?2004l")},
++ {(int)KS_CST, IF_EB("\033[22;2t", ESC_STR "[22;2t")},
++ {(int)KS_CRT, IF_EB("\033[23;2t", ESC_STR "[23;2t")},
++ {(int)KS_SSI, IF_EB("\033[22;1t", ESC_STR "[22;1t")},
++ {(int)KS_SRI, IF_EB("\033[23;1t", ESC_STR "[23;1t")},
+
+ {K_UP, IF_EB("\033O*A", ESC_STR "O*A")},
+ {K_DOWN, IF_EB("\033O*B", ESC_STR "O*B")},
+***************
+*** 1600,1605 ****
+--- 1604,1611 ----
+ {KS_8F, "8f"}, {KS_8B, "8b"},
+ {KS_CBE, "BE"}, {KS_CBD, "BD"},
+ {KS_CPS, "PS"}, {KS_CPE, "PE"},
++ {KS_CST, "ST"}, {KS_CRT, "RT"},
++ {KS_SSI, "Si"}, {KS_SRI, "Ri"},
+ {(enum SpecialKey)0, NULL}
+ };
+ int i;
+***************
+*** 2974,2979 ****
+--- 2980,3024 ----
+ out_str(T_FS); /* set title end */
+ out_flush();
+ }
++
++ /*
++ * Tell the terminal to push (save) the title and/or icon, so that it can be
++ * popped (restored) later.
++ */
++ void
++ term_push_title(int which)
++ {
++ if ((which & SAVE_RESTORE_TITLE) && *T_CST != NUL)
++ {
++ OUT_STR(T_CST);
++ out_flush();
++ }
++
++ if ((which & SAVE_RESTORE_ICON) && *T_SSI != NUL)
++ {
++ OUT_STR(T_SSI);
++ out_flush();
++ }
++ }
++
++ /*
++ * Tell the terminal to pop the title and/or icon.
++ */
++ void
++ term_pop_title(int which)
++ {
++ if ((which & SAVE_RESTORE_TITLE) && *T_CRT != NUL)
++ {
++ OUT_STR(T_CRT);
++ out_flush();
++ }
++
++ if ((which & SAVE_RESTORE_ICON) && *T_SRI != NUL)
++ {
++ OUT_STR(T_SRI);
++ out_flush();
++ }
++ }
+ #endif
+
+ /*
+*** ../vim-8.1.0252/src/term.h 2017-10-14 22:14:45.000000000 +0200
+--- src/term.h 2018-08-07 22:02:48.951042224 +0200
+***************
+*** 101,110 ****
+ KS_CBE, /* enable bracketed paste mode */
+ KS_CBD, /* disable bracketed paste mode */
+ KS_CPS, /* start of bracketed paste */
+! KS_CPE /* end of bracketed paste */
+ };
+
+! #define KS_LAST KS_CPE
+
+ /*
+ * the terminal capabilities are stored in this array
+--- 101,114 ----
+ KS_CBE, /* enable bracketed paste mode */
+ KS_CBD, /* disable bracketed paste mode */
+ KS_CPS, /* start of bracketed paste */
+! KS_CPE, /* end of bracketed paste */
+! KS_CST, /* save window title */
+! KS_CRT, /* restore window title */
+! KS_SSI, /* save icon text */
+! KS_SRI /* restore icon text */
+ };
+
+! #define KS_LAST KS_SRI
+
+ /*
+ * the terminal capabilities are stored in this array
+***************
+*** 196,201 ****
+--- 200,209 ----
+ #define T_BD (TERM_STR(KS_CBD)) /* disable bracketed paste mode */
+ #define T_PS (TERM_STR(KS_CPS)) /* start of bracketed paste */
+ #define T_PE (TERM_STR(KS_CPE)) /* end of bracketed paste */
++ #define T_CST (TERM_STR(KS_CST)) /* save window title */
++ #define T_CRT (TERM_STR(KS_CRT)) /* restore window title */
++ #define T_SSI (TERM_STR(KS_SSI)) /* save icon text */
++ #define T_SRI (TERM_STR(KS_SRI)) /* restore icon text */
+
+ #define TMODE_COOK 0 /* terminal mode for external cmds and Ex mode */
+ #define TMODE_SLEEP 1 /* terminal mode for sleeping (cooked but no echo) */
+*** ../vim-8.1.0252/src/vim.h 2018-07-29 16:09:14.644945560 +0200
+--- src/vim.h 2018-08-07 22:14:06.727648372 +0200
+***************
+*** 2548,2551 ****
+--- 2548,2563 ----
+ #define TERM_START_FORCEIT 2
+ #define TERM_START_SYSTEM 4
+
++ #if defined(HAVE_DROP_FILE) \
++ || (defined(FEAT_GUI_GTK) && defined(FEAT_DND)) \
++ || defined(FEAT_GUI_MSWIN) \
++ || defined(FEAT_GUI_MAC)
++ # define HAVE_HANDLE_DROP
++ #endif
++
++ // Used for icon/title save and restore.
++ #define SAVE_RESTORE_TITLE 1
++ #define SAVE_RESTORE_ICON 2
++ #define SAVE_RESTORE_BOTH (SAVE_RESTORE_TITLE | SAVE_RESTORE_ICON)
++
+ #endif /* VIM__H */
+*** ../vim-8.1.0252/src/buffer.c 2018-08-05 13:22:22.474562651 +0200
+--- src/buffer.c 2018-08-07 22:15:46.499112220 +0200
+***************
+*** 3798,3804 ****
+ if (str == NULL)
+ {
+ *last = NULL;
+! mch_restore_title(last == &lasttitle ? 1 : 2);
+ }
+ else
+ {
+--- 3798,3805 ----
+ if (str == NULL)
+ {
+ *last = NULL;
+! mch_restore_title(
+! last == &lasttitle ? SAVE_RESTORE_TITLE : SAVE_RESTORE_ICON);
+ }
+ else
+ {
+*** ../vim-8.1.0252/src/ex_docmd.c 2018-08-01 17:53:04.689381294 +0200
+--- src/ex_docmd.c 2018-08-07 22:16:05.727008287 +0200
+***************
+*** 7750,7756 ****
+ stoptermcap();
+ out_flush(); /* needed for SUN to restore xterm buffer */
+ #ifdef FEAT_TITLE
+! mch_restore_title(3); /* restore window titles */
+ #endif
+ ui_suspend(); /* call machine specific function */
+ #ifdef FEAT_TITLE
+--- 7750,7756 ----
+ stoptermcap();
+ out_flush(); /* needed for SUN to restore xterm buffer */
+ #ifdef FEAT_TITLE
+! mch_restore_title(SAVE_RESTORE_BOTH); /* restore window titles */
+ #endif
+ ui_suspend(); /* call machine specific function */
+ #ifdef FEAT_TITLE
+*** ../vim-8.1.0252/src/os_amiga.c 2018-03-04 16:16:34.000000000 +0100
+--- src/os_amiga.c 2018-08-07 22:17:36.474515466 +0200
+***************
+*** 617,630 ****
+ /*
+ * Restore the window/icon title.
+ * which is one of:
+! * 1 Just restore title
+! * 2 Just restore icon (which we don't have)
+! * 3 Restore title and icon (which we don't have)
+ */
+ void
+ mch_restore_title(int which)
+ {
+! if (which & 1)
+ mch_settitle(oldwindowtitle, NULL);
+ }
+
+--- 617,630 ----
+ /*
+ * Restore the window/icon title.
+ * which is one of:
+! * SAVE_RESTORE_TITLE Just restore title
+! * SAVE_RESTORE_ICON Just restore icon (which we don't have)
+! * SAVE_RESTORE_BOTH Restore title and icon (which we don't have)
+ */
+ void
+ mch_restore_title(int which)
+ {
+! if (which & SAVE_RESTORE_TITLE)
+ mch_settitle(oldwindowtitle, NULL);
+ }
+
+***************
+*** 907,913 ****
+ }
+
+ #ifdef FEAT_TITLE
+! mch_restore_title(3); /* restore window title */
+ #endif
+
+ ml_close_all(TRUE); /* remove all memfiles */
+--- 907,913 ----
+ }
+
+ #ifdef FEAT_TITLE
+! mch_restore_title(SAVE_RESTORE_BOTH); /* restore window title */
+ #endif
+
+ ml_close_all(TRUE); /* remove all memfiles */
+*** ../vim-8.1.0252/src/os_mswin.c 2018-05-13 17:28:51.000000000 +0200
+--- src/os_mswin.c 2018-08-07 22:18:09.022337873 +0200
+***************
+*** 304,312 ****
+ /*
+ * Restore the window/icon title.
+ * which is one of:
+! * 1: Just restore title
+! * 2: Just restore icon (which we don't have)
+! * 3: Restore title and icon (which we don't have)
+ */
+ void
+ mch_restore_title(int which UNUSED)
+--- 304,312 ----
+ /*
+ * Restore the window/icon title.
+ * which is one of:
+! * SAVE_RESTORE_TITLE: Just restore title
+! * SAVE_RESTORE_ICON: Just restore icon (which we don't have)
+! * SAVE_RESTORE_BOTH: Restore title and icon (which we don't have)
+ */
+ void
+ mch_restore_title(int which UNUSED)
+*** ../vim-8.1.0252/src/os_win32.c 2018-08-07 20:47:02.756848221 +0200
+--- src/os_win32.c 2018-08-07 22:18:29.258227246 +0200
+***************
+*** 2695,2701 ****
+ if (g_fWindInitCalled)
+ {
+ #ifdef FEAT_TITLE
+! mch_restore_title(3);
+ /*
+ * Restore both the small and big icons of the console window to
+ * what they were at startup. Don't do this when the window is
+--- 2695,2701 ----
+ if (g_fWindInitCalled)
+ {
+ #ifdef FEAT_TITLE
+! mch_restore_title(SAVE_RESTORE_BOTH);
+ /*
+ * Restore both the small and big icons of the console window to
+ * what they were at startup. Don't do this when the window is
+*** ../vim-8.1.0252/src/version.c 2018-08-07 21:54:27.725813349 +0200
+--- src/version.c 2018-08-07 22:04:25.166600764 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 253,
+ /**/
+
+--
+ [Autumn changed into Winter ... Winter changed into Spring ... Spring
+ changed back into Autumn and Autumn gave Winter and Spring a miss and
+ went straight on into Summer ... Until one day ...]
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0254 b/data/vim/patches/8.1.0254
new file mode 100644
index 000000000..6be43ae0e
--- /dev/null
+++ b/data/vim/patches/8.1.0254
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0254
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0254 (after 8.1.0253)
+Problem: Cannot build on MS-Windows; Unused macro HAVE_HANDLE_DROP.
+Solution: Adjust #ifdef. Delete the macro.
+Files: src/main.c, src/vim.h
+
+
+*** ../vim-8.1.0253/src/main.c 2018-08-07 22:30:26.662240885 +0200
+--- src/main.c 2018-08-07 22:41:19.402019109 +0200
+***************
+*** 706,712 ****
+ scroll_region_reset(); /* In case Rows changed */
+ scroll_start(); /* may scroll the screen to the right position */
+
+! #ifdef FEAT_TITLE
+ term_push_title(SAVE_RESTORE_BOTH);
+ #endif
+
+--- 706,712 ----
+ scroll_region_reset(); /* In case Rows changed */
+ scroll_start(); /* may scroll the screen to the right position */
+
+! #if defined(FEAT_TITLE) && (defined(UNIX) || defined(VMS) || defined(MACOS_X))
+ term_push_title(SAVE_RESTORE_BOTH);
+ #endif
+
+*** ../vim-8.1.0253/src/vim.h 2018-08-07 22:30:26.666240863 +0200
+--- src/vim.h 2018-08-07 22:37:17.179721167 +0200
+***************
+*** 2548,2560 ****
+ #define TERM_START_FORCEIT 2
+ #define TERM_START_SYSTEM 4
+
+- #if defined(HAVE_DROP_FILE) \
+- || (defined(FEAT_GUI_GTK) && defined(FEAT_DND)) \
+- || defined(FEAT_GUI_MSWIN) \
+- || defined(FEAT_GUI_MAC)
+- # define HAVE_HANDLE_DROP
+- #endif
+-
+ // Used for icon/title save and restore.
+ #define SAVE_RESTORE_TITLE 1
+ #define SAVE_RESTORE_ICON 2
+--- 2548,2553 ----
+*** ../vim-8.1.0253/src/version.c 2018-08-07 22:30:26.674240818 +0200
+--- src/version.c 2018-08-07 22:38:21.219258973 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 254,
+ /**/
+
+--
+TIM: To the north there lies a cave, the cave of Caerbannog, wherein, carved
+ in mystic runes, upon the very living rock, the last words of Olfin
+ Bedwere of Rheged make plain the last resting place of the most Holy
+ Grail.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0255 b/data/vim/patches/8.1.0255
new file mode 100644
index 000000000..a4ce7f3c2
--- /dev/null
+++ b/data/vim/patches/8.1.0255
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0255
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0255 (after 8.1.0251)
+Problem: Backup test fails when using shadow directory.
+Solution: Remove check for "src".
+Files: src/testdir/test_backup.vim
+
+
+*** ../vim-8.1.0254/src/testdir/test_backup.vim 2018-08-07 21:39:09.251060096 +0200
+--- src/testdir/test_backup.vim 2018-08-08 11:00:33.345896867 +0200
+***************
+*** 29,35 ****
+ sp *Xbackup.txt~
+ call assert_equal(['line1', 'line2', 'line3'], getline(1,'$'))
+ let f=expand('%')
+! call assert_match('src%testdir%Xbackup.txt\~', f)
+ bw!
+ bw!
+ call delete('Xbackup.txt')
+--- 29,35 ----
+ sp *Xbackup.txt~
+ call assert_equal(['line1', 'line2', 'line3'], getline(1,'$'))
+ let f=expand('%')
+! call assert_match('%testdir%Xbackup.txt\~', f)
+ bw!
+ bw!
+ call delete('Xbackup.txt')
+***************
+*** 49,55 ****
+ sp *Xbackup.txt~
+ call assert_equal(['line1', 'line2', 'line3'], getline(1,'$'))
+ let f=expand('%')
+! call assert_match('src%testdir%Xbackup.txt\~', f)
+ bw!
+ bw!
+ call delete('Xbackup.txt')
+--- 49,55 ----
+ sp *Xbackup.txt~
+ call assert_equal(['line1', 'line2', 'line3'], getline(1,'$'))
+ let f=expand('%')
+! call assert_match('%testdir%Xbackup.txt\~', f)
+ bw!
+ bw!
+ call delete('Xbackup.txt')
+*** ../vim-8.1.0254/src/version.c 2018-08-07 22:42:48.965416564 +0200
+--- src/version.c 2018-08-08 11:01:24.270573213 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 255,
+ /**/
+
+--
+TIM: Too late.
+ARTHUR: What?
+TIM: There he is!
+ [They all turn, and see a large white RABBIT lollop a few yards out of the
+ cave. Accompanied by terrifying chord and jarring metallic monster noise.]
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0256 b/data/vim/patches/8.1.0256
new file mode 100644
index 000000000..55d8eef40
--- /dev/null
+++ b/data/vim/patches/8.1.0256
@@ -0,0 +1,286 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0256
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0256 (after 8.1.0245)
+Problem: Using setline() in TextChangedI splits undo.
+Solution: Use another solution for undo not working properly.
+Files: src/edit.c, src/testdir/test_autocmd.vim
+
+
+*** ../vim-8.1.0255/src/edit.c 2018-08-07 19:32:48.371651690 +0200
+--- src/edit.c 2018-08-08 22:07:51.235091964 +0200
+***************
+*** 279,284 ****
+--- 279,285 ----
+ #if defined(FEAT_EVAL)
+ static char_u *do_insert_char_pre(int c);
+ #endif
++ static int ins_apply_autocmds(event_T event);
+
+ static colnr_T Insstart_textlen; /* length of line when insert started */
+ static colnr_T Insstart_blank_vcol; /* vcol for first inserted blank */
+***************
+*** 411,417 ****
+ set_vim_var_string(VV_INSERTMODE, ptr, 1);
+ set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
+ #endif
+! apply_autocmds(EVENT_INSERTENTER, NULL, NULL, FALSE, curbuf);
+
+ /* Make sure the cursor didn't move. Do call check_cursor_col() in
+ * case the text was modified. Since Insert mode was not started yet
+--- 412,418 ----
+ set_vim_var_string(VV_INSERTMODE, ptr, 1);
+ set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
+ #endif
+! ins_apply_autocmds(EVENT_INSERTENTER);
+
+ /* Make sure the cursor didn't move. Do call check_cursor_col() in
+ * case the text was modified. Since Insert mode was not started yet
+***************
+*** 1061,1068 ****
+ if (ins_esc(&count, cmdchar, nomove))
+ {
+ if (cmdchar != 'r' && cmdchar != 'v')
+! apply_autocmds(EVENT_INSERTLEAVE, NULL, NULL,
+! FALSE, curbuf);
+ did_cursorhold = FALSE;
+ return (c == Ctrl_O);
+ }
+--- 1062,1068 ----
+ if (ins_esc(&count, cmdchar, nomove))
+ {
+ if (cmdchar != 'r' && cmdchar != 'v')
+! ins_apply_autocmds(EVENT_INSERTLEAVE);
+ did_cursorhold = FALSE;
+ return (c == Ctrl_O);
+ }
+***************
+*** 1275,1281 ****
+ break;
+
+ case K_CURSORHOLD: /* Didn't type something for a while. */
+! apply_autocmds(EVENT_CURSORHOLDI, NULL, NULL, FALSE, curbuf);
+ did_cursorhold = TRUE;
+ break;
+
+--- 1275,1281 ----
+ break;
+
+ case K_CURSORHOLD: /* Didn't type something for a while. */
+! ins_apply_autocmds(EVENT_CURSORHOLDI);
+ did_cursorhold = TRUE;
+ break;
+
+***************
+*** 1698,1704 ****
+ /* Make sure curswant is correct, an autocommand may call
+ * getcurpos(). */
+ update_curswant();
+! apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf);
+ }
+ # ifdef FEAT_CONCEAL
+ if (curwin->w_p_cole > 0)
+--- 1698,1704 ----
+ /* Make sure curswant is correct, an autocommand may call
+ * getcurpos(). */
+ update_curswant();
+! ins_apply_autocmds(EVENT_CURSORMOVEDI);
+ }
+ # ifdef FEAT_CONCEAL
+ if (curwin->w_p_cole > 0)
+***************
+*** 1721,1744 ****
+ )
+ {
+ aco_save_T aco;
+!
+! #ifdef FEAT_EVAL
+! // Sync undo when the autocommand calls setline() or append(), so that
+! // it can be undone separately.
+! u_sync_once = 2;
+! #endif
+
+ // save and restore curwin and curbuf, in case the autocmd changes them
+ aucmd_prepbuf(&aco, curbuf);
+ apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
+ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick = CHANGEDTICK(curbuf);
+!
+! #ifdef FEAT_EVAL
+! if (u_sync_once == 1)
+! ins_need_undo = TRUE;
+! u_sync_once = 0;
+! #endif
+ }
+
+ #ifdef FEAT_INS_EXPAND
+--- 1721,1736 ----
+ )
+ {
+ aco_save_T aco;
+! varnumber_T tick = CHANGEDTICK(curbuf);
+
+ // save and restore curwin and curbuf, in case the autocmd changes them
+ aucmd_prepbuf(&aco, curbuf);
+ apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
+ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick = CHANGEDTICK(curbuf);
+! if (tick != CHANGEDTICK(curbuf)) // see ins_apply_autocmds()
+! u_save(curwin->w_cursor.lnum,
+! (linenr_T)(curwin->w_cursor.lnum + 1));
+ }
+
+ #ifdef FEAT_INS_EXPAND
+***************
+*** 1750,1761 ****
+--- 1742,1757 ----
+ && pum_visible())
+ {
+ aco_save_T aco;
++ varnumber_T tick = CHANGEDTICK(curbuf);
+
+ // save and restore curwin and curbuf, in case the autocmd changes them
+ aucmd_prepbuf(&aco, curbuf);
+ apply_autocmds(EVENT_TEXTCHANGEDP, NULL, NULL, FALSE, curbuf);
+ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick_pum = CHANGEDTICK(curbuf);
++ if (tick != CHANGEDTICK(curbuf)) // see ins_apply_autocmds()
++ u_save(curwin->w_cursor.lnum,
++ (linenr_T)(curwin->w_cursor.lnum + 1));
+ }
+ #endif
+
+***************
+*** 4124,4136 ****
+ #endif
+ /* Trigger the CompleteDone event to give scripts a chance to act
+ * upon the completion. */
+! apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
+ }
+ }
+ else if (ctrl_x_mode == CTRL_X_LOCAL_MSG)
+ /* Trigger the CompleteDone event to give scripts a chance to act
+ * upon the (possibly failed) completion. */
+! apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
+
+ /* reset continue_* if we left expansion-mode, if we stay they'll be
+ * (re)set properly in ins_complete() */
+--- 4120,4132 ----
+ #endif
+ /* Trigger the CompleteDone event to give scripts a chance to act
+ * upon the completion. */
+! ins_apply_autocmds(EVENT_COMPLETEDONE);
+ }
+ }
+ else if (ctrl_x_mode == CTRL_X_LOCAL_MSG)
+ /* Trigger the CompleteDone event to give scripts a chance to act
+ * upon the (possibly failed) completion. */
+! ins_apply_autocmds(EVENT_COMPLETEDONE);
+
+ /* reset continue_* if we left expansion-mode, if we stay they'll be
+ * (re)set properly in ins_complete() */
+***************
+*** 8944,8950 ****
+ : replaceState == VREPLACE ? "v"
+ : "r"), 1);
+ # endif
+! apply_autocmds(EVENT_INSERTCHANGE, NULL, NULL, FALSE, curbuf);
+ if (State & REPLACE_FLAG)
+ State = INSERT | (State & LANGMAP);
+ else
+--- 8940,8946 ----
+ : replaceState == VREPLACE ? "v"
+ : "r"), 1);
+ # endif
+! ins_apply_autocmds(EVENT_INSERTCHANGE);
+ if (State & REPLACE_FLAG)
+ State = INSERT | (State & LANGMAP);
+ else
+***************
+*** 10738,10744 ****
+ set_vim_var_string(VV_CHAR, buf, -1); /* set v:char */
+
+ res = NULL;
+! if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
+ {
+ /* Get the value of v:char. It may be empty or more than one
+ * character. Only use it when changed, otherwise continue with the
+--- 10734,10740 ----
+ set_vim_var_string(VV_CHAR, buf, -1); /* set v:char */
+
+ res = NULL;
+! if (ins_apply_autocmds(EVENT_INSERTCHARPRE))
+ {
+ /* Get the value of v:char. It may be empty or more than one
+ * character. Only use it when changed, otherwise continue with the
+***************
+*** 10753,10755 ****
+--- 10749,10770 ----
+ return res;
+ }
+ #endif
++
++ /*
++ * Trigger "event" and take care of fixing undo.
++ */
++ static int
++ ins_apply_autocmds(event_T event)
++ {
++ varnumber_T tick = CHANGEDTICK(curbuf);
++ int r;
++
++ r = apply_autocmds(event, NULL, NULL, FALSE, curbuf);
++
++ // If u_savesub() was called then we are not prepared to start
++ // a new line. Call u_save() with no contents to fix that.
++ if (tick != CHANGEDTICK(curbuf))
++ u_save(curwin->w_cursor.lnum, (linenr_T)(curwin->w_cursor.lnum + 1));
++
++ return r;
++ }
+*** ../vim-8.1.0255/src/testdir/test_autocmd.vim 2018-08-07 19:04:57.409627129 +0200
+--- src/testdir/test_autocmd.vim 2018-08-08 21:43:44.368570016 +0200
+***************
+*** 1329,1338 ****
+ call assert_equal('(', getline(1))
+ call assert_equal('x)', getline(2))
+ undo
+- call assert_equal('(', getline(1))
+- call assert_equal('', getline(2))
+- undo
+ call assert_equal('', getline(1))
+
+ call test_override('starting', 0)
+ bwipe!
+--- 1329,1336 ----
+ call assert_equal('(', getline(1))
+ call assert_equal('x)', getline(2))
+ undo
+ call assert_equal('', getline(1))
++ call assert_equal('', getline(2))
+
+ call test_override('starting', 0)
+ bwipe!
+*** ../vim-8.1.0255/src/version.c 2018-08-08 11:02:26.855415573 +0200
+--- src/version.c 2018-08-08 21:43:06.112860972 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 256,
+ /**/
+
+--
+If "R" is Reverse, how come "D" is FORWARD?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0257 b/data/vim/patches/8.1.0257
new file mode 100644
index 000000000..17f3de197
--- /dev/null
+++ b/data/vim/patches/8.1.0257
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0257
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0257
+Problem: No test for pathshorten().
+Solution: Add a test. (Dominique Pelle, closes #3295)
+Files: src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0256/src/testdir/test_functions.vim 2018-07-29 15:34:20.868300075 +0200
+--- src/testdir/test_functions.vim 2018-08-08 22:26:53.791238105 +0200
+***************
+*** 208,213 ****
+--- 208,228 ----
+ call assert_fails('call simplify(1.2)', 'E806:')
+ endfunc
+
++ func Test_pathshorten()
++ call assert_equal('', pathshorten(''))
++ call assert_equal('foo', pathshorten('foo'))
++ call assert_equal('/foo', pathshorten('/foo'))
++ call assert_equal('f/', pathshorten('foo/'))
++ call assert_equal('f/bar', pathshorten('foo/bar'))
++ call assert_equal('f/b/foobar', pathshorten('foo/bar/foobar'))
++ call assert_equal('/f/b/foobar', pathshorten('/foo/bar/foobar'))
++ call assert_equal('.f/bar', pathshorten('.foo/bar'))
++ call assert_equal('~f/bar', pathshorten('~foo/bar'))
++ call assert_equal('~.f/bar', pathshorten('~.foo/bar'))
++ call assert_equal('.~f/bar', pathshorten('.~foo/bar'))
++ call assert_equal('~/f/bar', pathshorten('~/foo/bar'))
++ endfunc
++
+ func Test_strpart()
+ call assert_equal('de', strpart('abcdefg', 3, 2))
+ call assert_equal('ab', strpart('abcdefg', -2, 4))
+*** ../vim-8.1.0256/src/version.c 2018-08-08 22:08:28.326846653 +0200
+--- src/version.c 2018-08-08 22:24:55.740064770 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 257,
+ /**/
+
+--
+Why isn't there mouse-flavored cat food?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0258 b/data/vim/patches/8.1.0258
new file mode 100644
index 000000000..b1b1e4c70
--- /dev/null
+++ b/data/vim/patches/8.1.0258
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0258
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0258
+Problem: Not enough testing for the CompleteDone event.
+Solution: Add a test. (closes #3297)
+Files: src/testdir/test_ins_complete.vim
+
+
+*** ../vim-8.1.0257/src/testdir/test_ins_complete.vim 2018-06-13 21:27:20.213366293 +0200
+--- src/testdir/test_ins_complete.vim 2018-08-08 22:48:57.633314237 +0200
+***************
+*** 262,267 ****
+--- 262,280 ----
+ au! CompleteDone
+ endfunc
+
++ func Test_CompleteDone_undo()
++ au CompleteDone * call append(0, "prepend1")
++ new
++ call setline(1, ["line1", "line2"])
++ call feedkeys("Go\<C-X>\<C-N>\<CR>\<ESC>", "tx")
++ call assert_equal(["prepend1", "line1", "line2", "line1", ""],
++ \ getline(1, '$'))
++ undo
++ call assert_equal(["line1", "line2"], getline(1, '$'))
++ bwipe!
++ au! CompleteDone
++ endfunc
++
+ " Check that when using feedkeys() typeahead does not interrupt searching for
+ " completions.
+ func Test_compl_feedkeys()
+*** ../vim-8.1.0257/src/version.c 2018-08-08 22:27:27.043005000 +0200
+--- src/version.c 2018-08-08 22:53:55.883157583 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 258,
+ /**/
+
+--
+If cars evolved at the same rate as computers have, they'd cost five euro,
+run for a year on a couple of liters of petrol, and explode once a day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0259 b/data/vim/patches/8.1.0259
new file mode 100644
index 000000000..32e09e50d
--- /dev/null
+++ b/data/vim/patches/8.1.0259
@@ -0,0 +1,161 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0259
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0259
+Problem: No test for fixed quickfix issue.
+Solution: Add a test. Clean up the code a bit. (Yegappan Lakshmanan)
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0258/src/quickfix.c 2018-08-07 21:54:27.725813349 +0200
+--- src/quickfix.c 2018-08-09 21:14:43.248703692 +0200
+***************
+*** 1506,1512 ****
+ return qi->qf_lists[qf_idx].qf_count <= 0;
+ }
+
+-
+ /*
+ * Allocate the fields used for parsing lines and populating a quickfix list.
+ */
+--- 1506,1511 ----
+***************
+*** 3717,3723 ****
+ if (IS_LL_WINDOW(curwin))
+ qi = GET_LOC_LIST(curwin);
+
+! if (qi == NULL || qi->qf_lists[qi->qf_curlist].qf_count == 0)
+ {
+ EMSG(_(e_quickfix));
+ return;
+--- 3716,3722 ----
+ if (IS_LL_WINDOW(curwin))
+ qi = GET_LOC_LIST(curwin);
+
+! if (qf_list_empty(qi, qi->qf_curlist))
+ {
+ EMSG(_(e_quickfix));
+ return;
+***************
+*** 4349,4355 ****
+ if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+ qi->qf_curlist = qf_id2nr(qi, save_qfid);
+
+! if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
+ qf_jump(qi, 0, 0, forceit);
+ }
+
+--- 4348,4355 ----
+ if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+ qi->qf_curlist = qf_id2nr(qi, save_qfid);
+
+! // Autocommands might have cleared the list, check for it
+! if (!qf_list_empty(qi, qi->qf_curlist))
+ qf_jump(qi, 0, 0, forceit);
+ }
+
+***************
+*** 4873,4882 ****
+ // free the list.
+ if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile)
+ && qflist_valid(wp, save_qfid))
+- {
+ // display the first error
+ qf_jump_first(qi, save_qfid, eap->forceit);
+- }
+ }
+
+ /*
+--- 4873,4880 ----
+***************
+*** 6581,6590 ****
+ if (res > 0 && (eap->cmdidx == CMD_cbuffer ||
+ eap->cmdidx == CMD_lbuffer)
+ && qflist_valid(wp, save_qfid))
+- {
+ // display the first error
+ qf_jump_first(qi, save_qfid, eap->forceit);
+- }
+ }
+ }
+ }
+--- 6579,6586 ----
+***************
+*** 6661,6670 ****
+ if (res > 0 && (eap->cmdidx == CMD_cexpr
+ || eap->cmdidx == CMD_lexpr)
+ && qflist_valid(wp, save_qfid))
+- {
+ // display the first error
+ qf_jump_first(qi, save_qfid, eap->forceit);
+- }
+ }
+ else
+ EMSG(_("E777: String or List expected"));
+--- 6657,6664 ----
+*** ../vim-8.1.0258/src/testdir/test_quickfix.vim 2018-07-25 22:36:48.991518559 +0200
+--- src/testdir/test_quickfix.vim 2018-08-09 21:14:43.248703692 +0200
+***************
+*** 3478,3483 ****
+--- 3478,3507 ----
+ call assert_equal(5, line('.'))
+ autocmd! QuickFixCmdPost
+
++ " Test for autocommands clearing the quickfix list before jumping to the
++ " first error. This should not result in an error
++ autocmd QuickFixCmdPost * call g:Xsetlist([], 'r')
++ let v:errmsg = ''
++ " Test for cfile/lfile
++ Xfile Xerr
++ call assert_true(v:errmsg !~# 'E42:')
++ " Test for cbuffer/lbuffer
++ edit Xerr
++ Xbuffer
++ call assert_true(v:errmsg !~# 'E42:')
++ " Test for cexpr/lexpr
++ Xexpr 'Xtestfile2:4:Line4'
++ call assert_true(v:errmsg !~# 'E42:')
++ " Test for grep/lgrep
++ " The grepprg may not be set on non-Unix systems
++ if has('unix')
++ silent Xgrep Line5 Xtestfile2
++ call assert_true(v:errmsg !~# 'E42:')
++ endif
++ " Test for vimgrep/lvimgrep
++ call assert_fails('silent Xvimgrep Line5 Xtestfile2', 'E480:')
++ autocmd! QuickFixCmdPost
++
+ call delete('Xerr')
+ call delete('Xtestfile1')
+ call delete('Xtestfile2')
+*** ../vim-8.1.0258/src/version.c 2018-08-08 22:55:38.034420872 +0200
+--- src/version.c 2018-08-09 21:17:42.991183590 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 259,
+ /**/
+
+--
+BROTHER MAYNARD: Armaments Chapter Two Verses Nine to Twenty One.
+ANOTHER MONK: And St. Attila raised his hand grenade up on high saying "O
+ Lord bless this thy hand grenade that with it thou mayest
+ blow thine enemies to tiny bits, in thy mercy. "and the Lord
+ did grin and people did feast upon the lambs and sloths and
+ carp and anchovies and orang-utans and breakfast cereals and
+ fruit bats and...
+BROTHER MAYNARD: Skip a bit brother ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0260 b/data/vim/patches/8.1.0260
new file mode 100644
index 000000000..6dbc9d1b1
--- /dev/null
+++ b/data/vim/patches/8.1.0260
@@ -0,0 +1,44 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0260
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0260
+Problem: No LGTM logo in README file.
+Solution: Add one. (Bas van Schaik, closes #3305)
+Files: README.md
+
+
+*** ../vim-8.1.0259/README.md 2018-06-18 22:31:07.858573774 +0200
+--- README.md 2018-08-09 21:32:10.016728368 +0200
+***************
+*** 5,10 ****
+--- 5,11 ----
+ [![Coverage Status](https://coveralls.io/repos/vim/vim/badge.svg?branch=master&service=github)](https://coveralls.io/github/vim/vim?branch=master)
+ [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim)
+ [![Coverity Scan](https://scan.coverity.com/projects/241/badge.svg)](https://scan.coverity.com/projects/vim)
++ [![Language Grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/vim/vim.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/vim/vim/context:cpp)
+ [![Debian CI](https://badges.debian.net/badges/debian/testing/vim/version.svg)](https://buildd.debian.org/vim)
+
+
+*** ../vim-8.1.0259/src/version.c 2018-08-09 21:19:15.778436046 +0200
+--- src/version.c 2018-08-09 21:33:01.336368524 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 260,
+ /**/
+
+--
+I wonder, do vegetarians eat fruit bats?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0261 b/data/vim/patches/8.1.0261
new file mode 100644
index 000000000..161598204
--- /dev/null
+++ b/data/vim/patches/8.1.0261
@@ -0,0 +1,177 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0261
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0261
+Problem: Coverity complains about a negative array index.
+Solution: When qf_id2nr() cannot find the list then don't set qf_curlist.
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0260/src/quickfix.c 2018-08-09 21:19:15.774436077 +0200
+--- src/quickfix.c 2018-08-09 21:49:36.929501416 +0200
+***************
+*** 2011,2023 ****
+ {
+ qf_info_T *qi;
+
+! qi = (qf_info_T *)alloc((unsigned)sizeof(qf_info_T));
+ if (qi != NULL)
+- {
+- vim_memset(qi, 0, (size_t)(sizeof(qf_info_T)));
+ qi->qf_refcount++;
+- }
+-
+ return qi;
+ }
+
+--- 2011,2019 ----
+ {
+ qf_info_T *qi;
+
+! qi = (qf_info_T *)alloc_clear((unsigned)sizeof(qf_info_T));
+ if (qi != NULL)
+ qi->qf_refcount++;
+ return qi;
+ }
+
+***************
+*** 4339,4352 ****
+ }
+
+ /*
+ * Jump to the first entry if there is one.
+ */
+ static void
+ qf_jump_first(qf_info_T *qi, int_u save_qfid, int forceit)
+ {
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+
+ // Autocommands might have cleared the list, check for it
+ if (!qf_list_empty(qi, qi->qf_curlist))
+--- 4335,4365 ----
+ }
+
+ /*
++ * If the current list is not "save_qfid" and we can find the list with that ID
++ * then make it the current list.
++ * This is used when autocommands may have changed the current list.
++ */
++ static void
++ qf_restore_list(qf_info_T *qi, int_u save_qfid)
++ {
++ int curlist;
++
++ if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
++ {
++ curlist = qf_id2nr(qi, save_qfid);
++ if (curlist >= 0)
++ qi->qf_curlist = curlist;
++ // else: what if the list can't be found?
++ }
++ }
++
++ /*
+ * Jump to the first entry if there is one.
+ */
+ static void
+ qf_jump_first(qf_info_T *qi, int_u save_qfid, int forceit)
+ {
+! qf_restore_list(qi, save_qfid);
+
+ // Autocommands might have cleared the list, check for it
+ if (!qf_list_empty(qi, qi->qf_curlist))
+***************
+*** 5012,5021 ****
+ }
+ }
+
+! if (qi->qf_lists[qi->qf_curlist].qf_id != qfid)
+! /* Autocommands changed the quickfix list. Find the one we were
+! * using and restore it. */
+! qi->qf_curlist = qf_id2nr(qi, qfid);
+
+ return TRUE;
+ }
+--- 5025,5031 ----
+ }
+ }
+
+! qf_restore_list(qi, qfid);
+
+ return TRUE;
+ }
+***************
+*** 5361,5369 ****
+ if (!qflist_valid(wp, save_qfid))
+ goto theend;
+
+! // If autocommands changed the current list, then restore it
+! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+! qi->qf_curlist = qf_id2nr(qi, save_qfid);
+
+ /* Jump to first match. */
+ if (!qf_list_empty(qi, qi->qf_curlist))
+--- 5371,5377 ----
+ if (!qflist_valid(wp, save_qfid))
+ goto theend;
+
+! qf_restore_list(qi, save_qfid);
+
+ /* Jump to first match. */
+ if (!qf_list_empty(qi, qi->qf_curlist))
+***************
+*** 5684,5695 ****
+ if (l == NULL)
+ return FAIL;
+
+! qi = (qf_info_T *)alloc((unsigned)sizeof(qf_info_T));
+ if (qi != NULL)
+ {
+- vim_memset(qi, 0, (size_t)(sizeof(qf_info_T)));
+- qi->qf_refcount++;
+-
+ if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, errorformat,
+ TRUE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0)
+ {
+--- 5692,5700 ----
+ if (l == NULL)
+ return FAIL;
+
+! qi = ll_new_list();
+ if (qi != NULL)
+ {
+ if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, errorformat,
+ TRUE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0)
+ {
+*** ../vim-8.1.0260/src/version.c 2018-08-09 21:33:34.800134541 +0200
+--- src/version.c 2018-08-09 21:50:45.609022776 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 261,
+ /**/
+
+--
+MONK: ... and the Lord spake, saying, "First shalt thou take out the Holy Pin,
+ then shalt thou count to three, no more, no less. Three shalt be the
+ number thou shalt count, and the number of the counting shalt be three.
+ Four shalt thou not count, neither count thou two, excepting that thou
+ then proceed to three. Five is right out. Once the number three, being
+ the third number, be reached, then lobbest thou thy Holy Hand Grenade of
+ Antioch towards thou foe, who being naughty in my sight, shall snuff it.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0262 b/data/vim/patches/8.1.0262
new file mode 100644
index 000000000..f24c5fffe
--- /dev/null
+++ b/data/vim/patches/8.1.0262
@@ -0,0 +1,100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0262
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0262
+Problem: Not enough testing for getftype().
+Solution: Add a test. (Dominique Pelle, closes #3300)
+Files: src/evalfunc.c, src/testdir/test_stat.vim
+
+
+*** ../vim-8.1.0261/src/evalfunc.c 2018-07-29 16:09:14.632945629 +0200
+--- src/evalfunc.c 2018-08-09 22:00:49.920858612 +0200
+***************
+*** 5111,5117 ****
+ # endif
+ # ifdef S_ISSOCK
+ else if (S_ISSOCK(st.st_mode))
+! t = "fifo";
+ # endif
+ else
+ t = "other";
+--- 5111,5117 ----
+ # endif
+ # ifdef S_ISSOCK
+ else if (S_ISSOCK(st.st_mode))
+! t = "socket";
+ # endif
+ else
+ t = "other";
+*** ../vim-8.1.0261/src/testdir/test_stat.vim 2018-07-07 18:34:08.430551330 +0200
+--- src/testdir/test_stat.vim 2018-08-09 22:00:49.924858584 +0200
+***************
+*** 122,127 ****
+--- 122,162 ----
+ call assert_equal('', getfperm(fname))
+ endfunc
+
++ func Test_getftype()
++ call assert_equal('file', getftype(v:progpath))
++ call assert_equal('dir', getftype('.'))
++
++ if !has('unix')
++ return
++ endif
++
++ silent !ln -s Xfile Xlink
++ call assert_equal('link', getftype('Xlink'))
++ call delete('Xlink')
++
++ if executable('mkfifo')
++ silent !mkfifo Xfifo
++ call assert_equal('fifo', getftype('Xfifo'))
++ call delete('Xfifo')
++ endif
++
++ for cdevfile in systemlist('find /dev -type c -maxdepth 2 2>/dev/null')
++ call assert_equal('cdev', getftype(cdevfile))
++ endfor
++
++ for bdevfile in systemlist('find /dev -type b -maxdepth 2 2>/dev/null')
++ call assert_equal('bdev', getftype(bdevfile))
++ endfor
++
++ " The /run/ directory typically contains socket files.
++ " If it does not, test won't fail but will not test socket files.
++ for socketfile in systemlist('find /run -type s -maxdepth 2 2>/dev/null')
++ call assert_equal('socket', getftype(socketfile))
++ endfor
++
++ " TODO: file type 'other' is not tested. How can we test it?
++ endfunc
++
+ func Test_win32_symlink_dir()
+ " On Windows, non-admin users cannot create symlinks.
+ " So we use an existing symlink for this test.
+*** ../vim-8.1.0261/src/version.c 2018-08-09 21:52:20.716362389 +0200
+--- src/version.c 2018-08-09 22:08:41.385639374 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 262,
+ /**/
+
+--
+User: I'm having problems with my text editor.
+Help desk: Which editor are you using?
+User: I don't know, but it's version VI (pronounced: 6).
+Help desk: Oh, then you should upgrade to version VIM (pronounced: 994).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0263 b/data/vim/patches/8.1.0263
new file mode 100644
index 000000000..0fd56af88
--- /dev/null
+++ b/data/vim/patches/8.1.0263
@@ -0,0 +1,142 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0263
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0263
+Problem: Channel log doesn't show part of channel.
+Solution: Add "sock", "out", "err" or "in". (Ozaki Kiichi, closes #3303)
+Files: src/channel.c
+
+
+*** ../vim-8.1.0262/src/channel.c 2018-07-08 17:18:58.416462371 +0200
+--- src/channel.c 2018-08-09 22:13:36.575628935 +0200
+***************
+*** 138,144 ****
+ }
+
+ static void
+! ch_log_lead(const char *what, channel_T *ch)
+ {
+ if (log_fd != NULL)
+ {
+--- 138,144 ----
+ }
+
+ static void
+! ch_log_lead(const char *what, channel_T *ch, ch_part_T part)
+ {
+ if (log_fd != NULL)
+ {
+***************
+*** 150,156 ****
+ fprintf(log_fd, "%s ", profile_msg(&log_now));
+ #endif
+ if (ch != NULL)
+! fprintf(log_fd, "%son %d: ", what, ch->ch_id);
+ else
+ fprintf(log_fd, "%s: ", what);
+ }
+--- 150,162 ----
+ fprintf(log_fd, "%s ", profile_msg(&log_now));
+ #endif
+ if (ch != NULL)
+! {
+! if (part < PART_COUNT)
+! fprintf(log_fd, "%son %d(%s): ",
+! what, ch->ch_id, part_names[part]);
+! else
+! fprintf(log_fd, "%son %d: ", what, ch->ch_id);
+! }
+ else
+ fprintf(log_fd, "%s: ", what);
+ }
+***************
+*** 166,172 ****
+ {
+ va_list ap;
+
+! ch_log_lead("", ch);
+ va_start(ap, fmt);
+ vfprintf(log_fd, fmt, ap);
+ va_end(ap);
+--- 172,178 ----
+ {
+ va_list ap;
+
+! ch_log_lead("", ch, PART_COUNT);
+ va_start(ap, fmt);
+ vfprintf(log_fd, fmt, ap);
+ va_end(ap);
+***************
+*** 191,197 ****
+ {
+ va_list ap;
+
+! ch_log_lead("ERR ", ch);
+ va_start(ap, fmt);
+ vfprintf(log_fd, fmt, ap);
+ va_end(ap);
+--- 197,203 ----
+ {
+ va_list ap;
+
+! ch_log_lead("ERR ", ch, PART_COUNT);
+ va_start(ap, fmt);
+ vfprintf(log_fd, fmt, ap);
+ va_end(ap);
+***************
+*** 1849,1855 ****
+
+ if (ch_log_active() && lead != NULL)
+ {
+! ch_log_lead(lead, channel);
+ fprintf(log_fd, "'");
+ ignored = (int)fwrite(buf, len, 1, log_fd);
+ fprintf(log_fd, "'\n");
+--- 1855,1861 ----
+
+ if (ch_log_active() && lead != NULL)
+ {
+! ch_log_lead(lead, channel, part);
+ fprintf(log_fd, "'");
+ ignored = (int)fwrite(buf, len, 1, log_fd);
+ fprintf(log_fd, "'\n");
+***************
+*** 3718,3724 ****
+
+ if (ch_log_active())
+ {
+! ch_log_lead("SEND ", channel);
+ fprintf(log_fd, "'");
+ ignored = (int)fwrite(buf_arg, len_arg, 1, log_fd);
+ fprintf(log_fd, "'\n");
+--- 3724,3730 ----
+
+ if (ch_log_active())
+ {
+! ch_log_lead("SEND ", channel, part);
+ fprintf(log_fd, "'");
+ ignored = (int)fwrite(buf_arg, len_arg, 1, log_fd);
+ fprintf(log_fd, "'\n");
+*** ../vim-8.1.0262/src/version.c 2018-08-09 22:08:53.017560100 +0200
+--- src/version.c 2018-08-09 22:14:51.103121696 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 263,
+ /**/
+
+--
+Veni, Vidi, VW -- I came, I saw, I drove around in a little car.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0264 b/data/vim/patches/8.1.0264
new file mode 100644
index 000000000..4c9dc214c
--- /dev/null
+++ b/data/vim/patches/8.1.0264
@@ -0,0 +1,121 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0264
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0264
+Problem: Backup tests fail when CWD is in /tmp.
+Solution: Make 'backupskip' empty. (Christian Brabandt, closes #3301)
+Files: src/testdir/test_backup.vim
+
+
+*** ../vim-8.1.0263/src/testdir/test_backup.vim 2018-08-08 11:02:26.855415573 +0200
+--- src/testdir/test_backup.vim 2018-08-09 22:24:06.808025958 +0200
+***************
+*** 1,7 ****
+ " Tests for the backup function
+
+ func Test_backup()
+! set backup backupdir=.
+ new
+ call setline(1, ['line1', 'line2'])
+ :f Xbackup.txt
+--- 1,7 ----
+ " Tests for the backup function
+
+ func Test_backup()
+! set backup backupdir=. backupskip=
+ new
+ call setline(1, ['line1', 'line2'])
+ :f Xbackup.txt
+***************
+*** 12,24 ****
+ let l = readfile('Xbackup.txt~')
+ call assert_equal(['line1', 'line2'], l)
+ bw!
+! set backup&vim backupdir&vim
+ call delete('Xbackup.txt')
+ call delete('Xbackup.txt~')
+ endfunc
+
+ func Test_backup2()
+! set backup backupdir=.//
+ new
+ call setline(1, ['line1', 'line2', 'line3'])
+ :f Xbackup.txt
+--- 12,24 ----
+ let l = readfile('Xbackup.txt~')
+ call assert_equal(['line1', 'line2'], l)
+ bw!
+! set backup&vim backupdir&vim backupskip&vim
+ call delete('Xbackup.txt')
+ call delete('Xbackup.txt~')
+ endfunc
+
+ func Test_backup2()
+! set backup backupdir=.// backupskip=
+ new
+ call setline(1, ['line1', 'line2', 'line3'])
+ :f Xbackup.txt
+***************
+*** 34,44 ****
+ bw!
+ call delete('Xbackup.txt')
+ call delete(f)
+! set backup&vim backupdir&vim
+ endfunc
+
+ func Test_backup2_backupcopy()
+! set backup backupdir=.// backupcopy=yes
+ new
+ call setline(1, ['line1', 'line2', 'line3'])
+ :f Xbackup.txt
+--- 34,44 ----
+ bw!
+ call delete('Xbackup.txt')
+ call delete(f)
+! set backup&vim backupdir&vim backupskip&vim
+ endfunc
+
+ func Test_backup2_backupcopy()
+! set backup backupdir=.// backupcopy=yes backupskip=
+ new
+ call setline(1, ['line1', 'line2', 'line3'])
+ :f Xbackup.txt
+***************
+*** 54,58 ****
+ bw!
+ call delete('Xbackup.txt')
+ call delete(f)
+! set backup&vim backupdir&vim backupcopy&vim
+ endfunc
+--- 54,58 ----
+ bw!
+ call delete('Xbackup.txt')
+ call delete(f)
+! set backup&vim backupdir&vim backupcopy&vim backupskip&vim
+ endfunc
+*** ../vim-8.1.0263/src/version.c 2018-08-09 22:15:30.042856715 +0200
+--- src/version.c 2018-08-09 22:25:20.839776785 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 264,
+ /**/
+
+--
+BEDEVERE: Oooooh!
+LAUNCELOT: No "Aaaaarrrrrrggghhh ... " at the back of the throat.
+BEDEVERE: No! "Oooooh!" in surprise and alarm!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0265 b/data/vim/patches/8.1.0265
new file mode 100644
index 000000000..bd59897ea
--- /dev/null
+++ b/data/vim/patches/8.1.0265
@@ -0,0 +1,875 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0265
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0265
+Problem: The getcmdline() function is way too big.
+Solution: Factor out the incremental search highlighting.
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0264/src/ex_getln.c 2018-08-01 19:05:59.286223185 +0200
+--- src/ex_getln.c 2018-08-10 22:05:38.646652603 +0200
+***************
+*** 141,149 ****
+ #endif
+ sort_func_compare(const void *s1, const void *s2);
+ #endif
+- #ifdef FEAT_SEARCH_EXTRA
+- static void set_search_match(pos_T *t);
+- #endif
+
+
+ static void
+--- 141,146 ----
+***************
+*** 185,193 ****
+ n -= 2;
+ return n == 0 || (n >= 2 && p[n - 2] == '\\' && p[n - 1] == '|');
+ }
+- #endif
+
+! #ifdef FEAT_SEARCH_EXTRA
+ typedef struct {
+ colnr_T vs_curswant;
+ colnr_T vs_leftcol;
+--- 182,189 ----
+ n -= 2;
+ return n == 0 || (n >= 2 && p[n - 2] == '\\' && p[n - 1] == '|');
+ }
+
+! // Struct to store the viewstate during 'incsearch' highlighting.
+ typedef struct {
+ colnr_T vs_curswant;
+ colnr_T vs_leftcol;
+***************
+*** 224,229 ****
+--- 220,553 ----
+ curwin->w_botline = vs->vs_botline;
+ curwin->w_empty_rows = vs->vs_empty_rows;
+ }
++
++ // Struct to store the state of 'incsearch' highlighting.
++ typedef struct {
++ pos_T search_start; // where 'incsearch' starts searching
++ pos_T save_cursor;
++ viewstate_T init_viewstate;
++ viewstate_T old_viewstate;
++ pos_T match_start;
++ pos_T match_end;
++ int did_incsearch;
++ int incsearch_postponed;
++ } incsearch_state_T;
++
++ static void
++ init_incsearch_state(incsearch_state_T *is_state)
++ {
++ is_state->match_start = curwin->w_cursor;
++ is_state->did_incsearch = FALSE;
++ is_state->incsearch_postponed = FALSE;
++ CLEAR_POS(&is_state->match_end);
++ is_state->save_cursor = curwin->w_cursor; // may be restored later
++ is_state->search_start = curwin->w_cursor;
++ save_viewstate(&is_state->init_viewstate);
++ save_viewstate(&is_state->old_viewstate);
++ }
++
++ /*
++ * First move cursor to end of match, then to the start. This
++ * moves the whole match onto the screen when 'nowrap' is set.
++ */
++ static void
++ set_search_match(pos_T *t)
++ {
++ t->lnum += search_match_lines;
++ t->col = search_match_endcol;
++ if (t->lnum > curbuf->b_ml.ml_line_count)
++ {
++ t->lnum = curbuf->b_ml.ml_line_count;
++ coladvance((colnr_T)MAXCOL);
++ }
++ }
++
++ /*
++ * Return TRUE when 'incsearch' highlighting is to be done.
++ */
++ static int
++ do_incsearch_highlighting(int firstc)
++ {
++ return p_is && !cmd_silent && (firstc == '/' || firstc == '?');
++ }
++
++ /*
++ * Do 'incsearch' highlighting if desired.
++ */
++ static void
++ may_do_incsearch_highlighting(
++ int firstc,
++ long count,
++ incsearch_state_T *is_state)
++ {
++ int i;
++ pos_T end_pos;
++ struct cmdline_info save_ccline;
++ #ifdef FEAT_RELTIME
++ proftime_T tm;
++ #endif
++
++ if (!do_incsearch_highlighting(firstc))
++ return;
++
++ // If there is a character waiting, search and redraw later.
++ if (char_avail())
++ {
++ is_state->incsearch_postponed = TRUE;
++ return;
++ }
++ is_state->incsearch_postponed = FALSE;
++
++ // start at old position
++ curwin->w_cursor = is_state->search_start;
++ save_last_search_pattern();
++
++ // If there is no command line, don't do anything.
++ if (ccline.cmdlen == 0)
++ {
++ i = 0;
++ set_no_hlsearch(TRUE); // turn off previous highlight
++ redraw_all_later(SOME_VALID);
++ }
++ else
++ {
++ int search_flags = SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK;
++
++ cursor_off(); // so the user knows we're busy
++ out_flush();
++ ++emsg_off; // so it doesn't beep if bad expr
++ #ifdef FEAT_RELTIME
++ // Set the time limit to half a second.
++ profile_setlimit(500L, &tm);
++ #endif
++ if (!p_hls)
++ search_flags += SEARCH_KEEP;
++ i = do_search(NULL, firstc, ccline.cmdbuff, count, search_flags,
++ #ifdef FEAT_RELTIME
++ &tm, NULL
++ #else
++ NULL, NULL
++ #endif
++ );
++ --emsg_off;
++
++ // if interrupted while searching, behave like it failed
++ if (got_int)
++ {
++ (void)vpeekc(); // remove <C-C> from input stream
++ got_int = FALSE; // don't abandon the command line
++ i = 0;
++ }
++ else if (char_avail())
++ // cancelled searching because a char was typed
++ is_state->incsearch_postponed = TRUE;
++ }
++ if (i != 0)
++ highlight_match = TRUE; // highlight position
++ else
++ highlight_match = FALSE; // remove highlight
++
++ // First restore the old curwin values, so the screen is positioned in the
++ // same way as the actual search command.
++ restore_viewstate(&is_state->old_viewstate);
++ changed_cline_bef_curs();
++ update_topline();
++
++ if (i != 0)
++ {
++ pos_T save_pos = curwin->w_cursor;
++
++ is_state->match_start = curwin->w_cursor;
++ set_search_match(&curwin->w_cursor);
++ validate_cursor();
++ end_pos = curwin->w_cursor;
++ is_state->match_end = end_pos;
++ curwin->w_cursor = save_pos;
++ }
++ else
++ end_pos = curwin->w_cursor; // shutup gcc 4
++
++ // Disable 'hlsearch' highlighting if the pattern matches everything.
++ // Avoids a flash when typing "foo\|".
++ if (empty_pattern(ccline.cmdbuff))
++ set_no_hlsearch(TRUE);
++
++ validate_cursor();
++ // May redraw the status line to show the cursor position.
++ if (p_ru && curwin->w_status_height > 0)
++ curwin->w_redr_status = TRUE;
++
++ save_cmdline(&save_ccline);
++ update_screen(SOME_VALID);
++ restore_cmdline(&save_ccline);
++ restore_last_search_pattern();
++
++ // Leave it at the end to make CTRL-R CTRL-W work.
++ if (i != 0)
++ curwin->w_cursor = end_pos;
++
++ msg_starthere();
++ redrawcmdline();
++ is_state->did_incsearch = TRUE;
++ }
++
++ /*
++ * May adjust 'incsearch' highlighting for typing CTRL-G and CTRL-T, go to next
++ * or previous match.
++ * Returns FAIL when jumping to cmdline_not_changed;
++ */
++ static int
++ may_adjust_incsearch_highlighting(
++ int firstc,
++ long count,
++ incsearch_state_T *is_state,
++ int c)
++ {
++ pos_T t;
++ char_u *pat;
++ int search_flags = SEARCH_NOOF;
++ int i;
++
++ if (!do_incsearch_highlighting(firstc))
++ return OK;
++ if (ccline.cmdlen == 0)
++ return FAIL;
++
++ if (firstc == ccline.cmdbuff[0])
++ pat = last_search_pattern();
++ else
++ pat = ccline.cmdbuff;
++
++ save_last_search_pattern();
++ cursor_off();
++ out_flush();
++ if (c == Ctrl_G)
++ {
++ t = is_state->match_end;
++ if (LT_POS(is_state->match_start, is_state->match_end))
++ // Start searching at the end of the match not at the beginning of
++ // the next column.
++ (void)decl(&t);
++ search_flags += SEARCH_COL;
++ }
++ else
++ t = is_state->match_start;
++ if (!p_hls)
++ search_flags += SEARCH_KEEP;
++ ++emsg_off;
++ i = searchit(curwin, curbuf, &t,
++ c == Ctrl_G ? FORWARD : BACKWARD,
++ pat, count, search_flags,
++ RE_SEARCH, 0, NULL, NULL);
++ --emsg_off;
++ if (i)
++ {
++ is_state->search_start = is_state->match_start;
++ is_state->match_end = t;
++ is_state->match_start = t;
++ if (c == Ctrl_T && firstc == '/')
++ {
++ // Move just before the current match, so that when nv_search
++ // finishes the cursor will be put back on the match.
++ is_state->search_start = t;
++ (void)decl(&is_state->search_start);
++ }
++ else if (c == Ctrl_G && firstc == '?')
++ {
++ // Move just after the current match, so that when nv_search
++ // finishes the cursor will be put back on the match.
++ is_state->search_start = t;
++ (void)incl(&is_state->search_start);
++ }
++ if (LT_POS(t, is_state->search_start) && c == Ctrl_G)
++ {
++ // wrap around
++ is_state->search_start = t;
++ if (firstc == '?')
++ (void)incl(&is_state->search_start);
++ else
++ (void)decl(&is_state->search_start);
++ }
++
++ set_search_match(&is_state->match_end);
++ curwin->w_cursor = is_state->match_start;
++ changed_cline_bef_curs();
++ update_topline();
++ validate_cursor();
++ highlight_match = TRUE;
++ save_viewstate(&is_state->old_viewstate);
++ update_screen(NOT_VALID);
++ redrawcmdline();
++ }
++ else
++ vim_beep(BO_ERROR);
++ restore_last_search_pattern();
++ return FAIL;
++ }
++
++ /*
++ * When CTRL-L typed: add character from the match to the pattern.
++ * May set "*c" to the added character.
++ * Return OK when jumping to cmdline_not_changed.
++ */
++ static int
++ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
++ {
++ if (!do_incsearch_highlighting(firstc))
++ return FAIL;
++
++ // Add a character from under the cursor for 'incsearch'.
++ if (is_state->did_incsearch)
++ {
++ curwin->w_cursor = is_state->match_end;
++ if (!EQUAL_POS(curwin->w_cursor, is_state->search_start))
++ {
++ *c = gchar_cursor();
++
++ // If 'ignorecase' and 'smartcase' are set and the
++ // command line has no uppercase characters, convert
++ // the character to lowercase.
++ if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff))
++ *c = MB_TOLOWER(*c);
++ if (*c != NUL)
++ {
++ if (*c == firstc || vim_strchr((char_u *)(
++ p_magic ? "\\~^$.*[" : "\\^$"), *c) != NULL)
++ {
++ // put a backslash before special characters
++ stuffcharReadbuff(*c);
++ *c = '\\';
++ }
++ return FAIL;
++ }
++ }
++ }
++ return OK;
++ }
++
++ static void
++ finish_incsearch_highlighting(int gotesc, incsearch_state_T *is_state)
++ {
++ if (is_state->did_incsearch)
++ {
++ if (gotesc)
++ curwin->w_cursor = is_state->save_cursor;
++ else
++ {
++ if (!EQUAL_POS(is_state->save_cursor, is_state->search_start))
++ {
++ // put the '" mark at the original position
++ curwin->w_cursor = is_state->save_cursor;
++ setpcmark();
++ }
++ curwin->w_cursor = is_state->search_start;
++ }
++ restore_viewstate(&is_state->old_viewstate);
++ highlight_match = FALSE;
++ validate_cursor(); /* needed for TAB */
++ redraw_all_later(SOME_VALID);
++ }
++ }
+ #endif
+
+ /*
+***************
+*** 262,275 ****
+ int histype; /* history type to be used */
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+! pos_T search_start; /* where 'incsearch' starts searching */
+! pos_T save_cursor;
+! viewstate_T init_viewstate;
+! viewstate_T old_viewstate;
+! pos_T match_start = curwin->w_cursor;
+! pos_T match_end;
+! int did_incsearch = FALSE;
+! int incsearch_postponed = FALSE;
+ #endif
+ int did_wild_list = FALSE; /* did wild_list() recently */
+ int wim_index = 0; /* index in wim_flags[] */
+--- 586,592 ----
+ int histype; /* history type to be used */
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+! incsearch_state_T is_state;
+ #endif
+ int did_wild_list = FALSE; /* did wild_list() recently */
+ int wim_index = 0; /* index in wim_flags[] */
+***************
+*** 287,293 ****
+ #endif
+ expand_T xpc;
+ long *b_im_ptr = NULL;
+! #if defined(FEAT_WILDMENU) || defined(FEAT_EVAL) || defined(FEAT_SEARCH_EXTRA)
+ /* Everything that may work recursively should save and restore the
+ * current command line in save_ccline. That includes update_screen(), a
+ * custom status line may invoke ":normal". */
+--- 604,610 ----
+ #endif
+ expand_T xpc;
+ long *b_im_ptr = NULL;
+! #if defined(FEAT_WILDMENU) || defined(FEAT_EVAL)
+ /* Everything that may work recursively should save and restore the
+ * current command line in save_ccline. That includes update_screen(), a
+ * custom status line may invoke ":normal". */
+***************
+*** 309,320 ****
+ #endif
+
+ ccline.overstrike = FALSE; /* always start in insert mode */
+ #ifdef FEAT_SEARCH_EXTRA
+! CLEAR_POS(&match_end);
+! save_cursor = curwin->w_cursor; /* may be restored later */
+! search_start = curwin->w_cursor;
+! save_viewstate(&init_viewstate);
+! save_viewstate(&old_viewstate);
+ #endif
+
+ /*
+--- 626,634 ----
+ #endif
+
+ ccline.overstrike = FALSE; /* always start in insert mode */
++
+ #ifdef FEAT_SEARCH_EXTRA
+! init_incsearch_state(&is_state);
+ #endif
+
+ /*
+***************
+*** 1089,1098 ****
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+ {
+! search_start = save_cursor;
+ /* save view settings, so that the screen
+ * won't be restored at the wrong position */
+! old_viewstate = init_viewstate;
+ }
+ #endif
+ redrawcmd();
+--- 1403,1412 ----
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+ {
+! is_state.search_start = is_state.save_cursor;
+ /* save view settings, so that the screen
+ * won't be restored at the wrong position */
+! is_state.old_viewstate = is_state.init_viewstate;
+ }
+ #endif
+ redrawcmd();
+***************
+*** 1121,1127 ****
+ }
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+! search_start = save_cursor;
+ #endif
+ redraw_cmdline = TRUE;
+ goto returncmd; /* back to cmd mode */
+--- 1435,1441 ----
+ }
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+! is_state.search_start = is_state.save_cursor;
+ #endif
+ redraw_cmdline = TRUE;
+ goto returncmd; /* back to cmd mode */
+***************
+*** 1208,1214 ****
+ ccline.cmdbuff[ccline.cmdlen] = NUL;
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+! search_start = save_cursor;
+ #endif
+ redrawcmd();
+ goto cmdline_changed;
+--- 1522,1528 ----
+ ccline.cmdbuff[ccline.cmdlen] = NUL;
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+! is_state.search_start = is_state.save_cursor;
+ #endif
+ redrawcmd();
+ goto cmdline_changed;
+***************
+*** 1545,1582 ****
+
+ case Ctrl_L:
+ #ifdef FEAT_SEARCH_EXTRA
+! if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
+! {
+! /* Add a character from under the cursor for 'incsearch' */
+! if (did_incsearch)
+! {
+! curwin->w_cursor = match_end;
+! if (!EQUAL_POS(curwin->w_cursor, search_start))
+! {
+! c = gchar_cursor();
+! /* If 'ignorecase' and 'smartcase' are set and the
+! * command line has no uppercase characters, convert
+! * the character to lowercase */
+! if (p_ic && p_scs
+! && !pat_has_uppercase(ccline.cmdbuff))
+! c = MB_TOLOWER(c);
+! if (c != NUL)
+! {
+! if (c == firstc || vim_strchr((char_u *)(
+! p_magic ? "\\~^$.*[" : "\\^$"), c)
+! != NULL)
+! {
+! /* put a backslash before special
+! * characters */
+! stuffcharReadbuff(c);
+! c = '\\';
+! }
+! break;
+! }
+! }
+! }
+ goto cmdline_not_changed;
+- }
+ #endif
+
+ /* completion: longest common part */
+--- 1859,1866 ----
+
+ case Ctrl_L:
+ #ifdef FEAT_SEARCH_EXTRA
+! if (may_add_char_to_search(firstc, &c, &is_state) == OK)
+ goto cmdline_not_changed;
+ #endif
+
+ /* completion: longest common part */
+***************
+*** 1742,1829 ****
+ #ifdef FEAT_SEARCH_EXTRA
+ case Ctrl_G: /* next match */
+ case Ctrl_T: /* previous match */
+! if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
+! {
+! pos_T t;
+! char_u *pat;
+! int search_flags = SEARCH_NOOF;
+!
+! if (ccline.cmdlen == 0)
+! goto cmdline_not_changed;
+!
+! if (firstc == ccline.cmdbuff[0])
+! pat = last_search_pattern();
+! else
+! pat = ccline.cmdbuff;
+!
+! save_last_search_pattern();
+! cursor_off();
+! out_flush();
+! if (c == Ctrl_G)
+! {
+! t = match_end;
+! if (LT_POS(match_start, match_end))
+! /* start searching at the end of the match
+! * not at the beginning of the next column */
+! (void)decl(&t);
+! search_flags += SEARCH_COL;
+! }
+! else
+! t = match_start;
+! if (!p_hls)
+! search_flags += SEARCH_KEEP;
+! ++emsg_off;
+! i = searchit(curwin, curbuf, &t,
+! c == Ctrl_G ? FORWARD : BACKWARD,
+! pat, count, search_flags,
+! RE_SEARCH, 0, NULL, NULL);
+! --emsg_off;
+! if (i)
+! {
+! search_start = match_start;
+! match_end = t;
+! match_start = t;
+! if (c == Ctrl_T && firstc == '/')
+! {
+! /* move just before the current match, so that
+! * when nv_search finishes the cursor will be
+! * put back on the match */
+! search_start = t;
+! (void)decl(&search_start);
+! }
+! else if (c == Ctrl_G && firstc == '?')
+! {
+! /* move just after the current match, so that
+! * when nv_search finishes the cursor will be
+! * put back on the match */
+! search_start = t;
+! (void)incl(&search_start);
+! }
+! if (LT_POS(t, search_start) && c == Ctrl_G)
+! {
+! /* wrap around */
+! search_start = t;
+! if (firstc == '?')
+! (void)incl(&search_start);
+! else
+! (void)decl(&search_start);
+! }
+!
+! set_search_match(&match_end);
+! curwin->w_cursor = match_start;
+! changed_cline_bef_curs();
+! update_topline();
+! validate_cursor();
+! highlight_match = TRUE;
+! save_viewstate(&old_viewstate);
+! update_screen(NOT_VALID);
+! redrawcmdline();
+! }
+! else
+! vim_beep(BO_ERROR);
+! restore_last_search_pattern();
+ goto cmdline_not_changed;
+- }
+ break;
+ #endif
+
+--- 2026,2034 ----
+ #ifdef FEAT_SEARCH_EXTRA
+ case Ctrl_G: /* next match */
+ case Ctrl_T: /* previous match */
+! if (may_adjust_incsearch_highlighting(
+! firstc, count, &is_state, c) == FAIL)
+ goto cmdline_not_changed;
+ break;
+ #endif
+
+***************
+*** 1951,1957 ****
+ */
+ cmdline_not_changed:
+ #ifdef FEAT_SEARCH_EXTRA
+! if (!incsearch_postponed)
+ continue;
+ #endif
+
+--- 2156,2162 ----
+ */
+ cmdline_not_changed:
+ #ifdef FEAT_SEARCH_EXTRA
+! if (!is_state.incsearch_postponed)
+ continue;
+ #endif
+
+***************
+*** 1960,2074 ****
+ trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
+
+ #ifdef FEAT_SEARCH_EXTRA
+! /*
+! * 'incsearch' highlighting.
+! */
+! if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
+! {
+! pos_T end_pos;
+! #ifdef FEAT_RELTIME
+! proftime_T tm;
+! #endif
+!
+! /* if there is a character waiting, search and redraw later */
+! if (char_avail())
+! {
+! incsearch_postponed = TRUE;
+! continue;
+! }
+! incsearch_postponed = FALSE;
+! curwin->w_cursor = search_start; /* start at old position */
+! save_last_search_pattern();
+!
+! /* If there is no command line, don't do anything */
+! if (ccline.cmdlen == 0)
+! {
+! i = 0;
+! set_no_hlsearch(TRUE); /* turn off previous highlight */
+! redraw_all_later(SOME_VALID);
+! }
+! else
+! {
+! int search_flags = SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK;
+! cursor_off(); /* so the user knows we're busy */
+! out_flush();
+! ++emsg_off; /* So it doesn't beep if bad expr */
+! #ifdef FEAT_RELTIME
+! /* Set the time limit to half a second. */
+! profile_setlimit(500L, &tm);
+! #endif
+! if (!p_hls)
+! search_flags += SEARCH_KEEP;
+! i = do_search(NULL, firstc, ccline.cmdbuff, count,
+! search_flags,
+! #ifdef FEAT_RELTIME
+! &tm, NULL
+! #else
+! NULL, NULL
+! #endif
+! );
+! --emsg_off;
+! /* if interrupted while searching, behave like it failed */
+! if (got_int)
+! {
+! (void)vpeekc(); /* remove <C-C> from input stream */
+! got_int = FALSE; /* don't abandon the command line */
+! i = 0;
+! }
+! else if (char_avail())
+! /* cancelled searching because a char was typed */
+! incsearch_postponed = TRUE;
+! }
+! if (i != 0)
+! highlight_match = TRUE; /* highlight position */
+! else
+! highlight_match = FALSE; /* remove highlight */
+!
+! /* first restore the old curwin values, so the screen is
+! * positioned in the same way as the actual search command */
+! restore_viewstate(&old_viewstate);
+! changed_cline_bef_curs();
+! update_topline();
+!
+! if (i != 0)
+! {
+! pos_T save_pos = curwin->w_cursor;
+!
+! match_start = curwin->w_cursor;
+! set_search_match(&curwin->w_cursor);
+! validate_cursor();
+! end_pos = curwin->w_cursor;
+! match_end = end_pos;
+! curwin->w_cursor = save_pos;
+! }
+! else
+! end_pos = curwin->w_cursor; /* shutup gcc 4 */
+!
+! /* Disable 'hlsearch' highlighting if the pattern matches
+! * everything. Avoids a flash when typing "foo\|". */
+! if (empty_pattern(ccline.cmdbuff))
+! set_no_hlsearch(TRUE);
+!
+! validate_cursor();
+! /* May redraw the status line to show the cursor position. */
+! if (p_ru && curwin->w_status_height > 0)
+! curwin->w_redr_status = TRUE;
+!
+! save_cmdline(&save_ccline);
+! update_screen(SOME_VALID);
+! restore_cmdline(&save_ccline);
+! restore_last_search_pattern();
+!
+! /* Leave it at the end to make CTRL-R CTRL-W work. */
+! if (i != 0)
+! curwin->w_cursor = end_pos;
+!
+! msg_starthere();
+! redrawcmdline();
+! did_incsearch = TRUE;
+! }
+! #else /* FEAT_SEARCH_EXTRA */
+! ;
+ #endif
+
+ #ifdef FEAT_RIGHTLEFT
+--- 2165,2171 ----
+ trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
+
+ #ifdef FEAT_SEARCH_EXTRA
+! may_do_incsearch_highlighting(firstc, count, &is_state);
+ #endif
+
+ #ifdef FEAT_RIGHTLEFT
+***************
+*** 2100,2124 ****
+ ccline.xpc = NULL;
+
+ #ifdef FEAT_SEARCH_EXTRA
+! if (did_incsearch)
+! {
+! if (gotesc)
+! curwin->w_cursor = save_cursor;
+! else
+! {
+! if (!EQUAL_POS(save_cursor, search_start))
+! {
+! /* put the '" mark at the original position */
+! curwin->w_cursor = save_cursor;
+! setpcmark();
+! }
+! curwin->w_cursor = search_start;
+! }
+! restore_viewstate(&old_viewstate);
+! highlight_match = FALSE;
+! validate_cursor(); /* needed for TAB */
+! redraw_all_later(SOME_VALID);
+! }
+ #endif
+
+ if (ccline.cmdbuff != NULL)
+--- 2197,2203 ----
+ ccline.xpc = NULL;
+
+ #ifdef FEAT_SEARCH_EXTRA
+! finish_incsearch_highlighting(gotesc, &is_state);
+ #endif
+
+ if (ccline.cmdbuff != NULL)
+***************
+*** 7239,7259 ****
+
+ return (char_u *)ga.ga_data;
+ }
+-
+- #ifdef FEAT_SEARCH_EXTRA
+- static void
+- set_search_match(pos_T *t)
+- {
+- /*
+- * First move cursor to end of match, then to the start. This
+- * moves the whole match onto the screen when 'nowrap' is set.
+- */
+- t->lnum += search_match_lines;
+- t->col = search_match_endcol;
+- if (t->lnum > curbuf->b_ml.ml_line_count)
+- {
+- t->lnum = curbuf->b_ml.ml_line_count;
+- coladvance((colnr_T)MAXCOL);
+- }
+- }
+- #endif
+--- 7318,7320 ----
+*** ../vim-8.1.0264/src/version.c 2018-08-09 22:26:34.259501130 +0200
+--- src/version.c 2018-08-10 22:07:22.817944576 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 265,
+ /**/
+
+--
+Sorry, no fortune today.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0266 b/data/vim/patches/8.1.0266
new file mode 100644
index 000000000..5ba3a1286
--- /dev/null
+++ b/data/vim/patches/8.1.0266
@@ -0,0 +1,436 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0266
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0266
+Problem: Parsing Ex address range is not a separate function.
+Solution: Refactor do_one_cmd() to separate address parsing.
+Files: src/ex_docmd.c, src/proto/ex_docmd.pro
+
+
+*** ../vim-8.1.0265/src/ex_docmd.c 2018-08-07 22:30:26.670240840 +0200
+--- src/ex_docmd.c 2018-08-10 23:08:38.139696671 +0200
+***************
+*** 1719,1725 ****
+ cmdmod_T save_cmdmod;
+ int ni; /* set when Not Implemented */
+ char_u *cmd;
+- int address_count = 1;
+
+ vim_memset(&ea, 0, sizeof(ea));
+ ea.line1 = 1;
+--- 1719,1724 ----
+***************
+*** 2045,2212 ****
+ get_wincmd_addr_type(skipwhite(p), &ea);
+ }
+
+- /* repeat for all ',' or ';' separated addresses */
+ ea.cmd = cmd;
+! for (;;)
+! {
+! ea.line1 = ea.line2;
+! switch (ea.addr_type)
+! {
+! case ADDR_LINES:
+! /* default is current line number */
+! ea.line2 = curwin->w_cursor.lnum;
+! break;
+! case ADDR_WINDOWS:
+! ea.line2 = CURRENT_WIN_NR;
+! break;
+! case ADDR_ARGUMENTS:
+! ea.line2 = curwin->w_arg_idx + 1;
+! if (ea.line2 > ARGCOUNT)
+! ea.line2 = ARGCOUNT;
+! break;
+! case ADDR_LOADED_BUFFERS:
+! case ADDR_BUFFERS:
+! ea.line2 = curbuf->b_fnum;
+! break;
+! case ADDR_TABS:
+! ea.line2 = CURRENT_TAB_NR;
+! break;
+! case ADDR_TABS_RELATIVE:
+! ea.line2 = 1;
+! break;
+! #ifdef FEAT_QUICKFIX
+! case ADDR_QUICKFIX:
+! ea.line2 = qf_get_cur_valid_idx(&ea);
+! break;
+! #endif
+! }
+! ea.cmd = skipwhite(ea.cmd);
+! lnum = get_address(&ea, &ea.cmd, ea.addr_type, ea.skip,
+! ea.addr_count == 0, address_count++);
+! if (ea.cmd == NULL) /* error detected */
+! goto doend;
+! if (lnum == MAXLNUM)
+! {
+! if (*ea.cmd == '%') /* '%' - all lines */
+! {
+! ++ea.cmd;
+! switch (ea.addr_type)
+! {
+! case ADDR_LINES:
+! ea.line1 = 1;
+! ea.line2 = curbuf->b_ml.ml_line_count;
+! break;
+! case ADDR_LOADED_BUFFERS:
+! {
+! buf_T *buf = firstbuf;
+!
+! while (buf->b_next != NULL
+! && buf->b_ml.ml_mfp == NULL)
+! buf = buf->b_next;
+! ea.line1 = buf->b_fnum;
+! buf = lastbuf;
+! while (buf->b_prev != NULL
+! && buf->b_ml.ml_mfp == NULL)
+! buf = buf->b_prev;
+! ea.line2 = buf->b_fnum;
+! break;
+! }
+! case ADDR_BUFFERS:
+! ea.line1 = firstbuf->b_fnum;
+! ea.line2 = lastbuf->b_fnum;
+! break;
+! case ADDR_WINDOWS:
+! case ADDR_TABS:
+! if (IS_USER_CMDIDX(ea.cmdidx))
+! {
+! ea.line1 = 1;
+! ea.line2 = ea.addr_type == ADDR_WINDOWS
+! ? LAST_WIN_NR : LAST_TAB_NR;
+! }
+! else
+! {
+! /* there is no Vim command which uses '%' and
+! * ADDR_WINDOWS or ADDR_TABS */
+! errormsg = (char_u *)_(e_invrange);
+! goto doend;
+! }
+! break;
+! case ADDR_TABS_RELATIVE:
+! errormsg = (char_u *)_(e_invrange);
+! goto doend;
+! break;
+! case ADDR_ARGUMENTS:
+! if (ARGCOUNT == 0)
+! ea.line1 = ea.line2 = 0;
+! else
+! {
+! ea.line1 = 1;
+! ea.line2 = ARGCOUNT;
+! }
+! break;
+! #ifdef FEAT_QUICKFIX
+! case ADDR_QUICKFIX:
+! ea.line1 = 1;
+! ea.line2 = qf_get_size(&ea);
+! if (ea.line2 == 0)
+! ea.line2 = 1;
+! break;
+! #endif
+! }
+! ++ea.addr_count;
+! }
+! /* '*' - visual area */
+! else if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
+! {
+! pos_T *fp;
+!
+! if (ea.addr_type != ADDR_LINES)
+! {
+! errormsg = (char_u *)_(e_invrange);
+! goto doend;
+! }
+!
+! ++ea.cmd;
+! if (!ea.skip)
+! {
+! fp = getmark('<', FALSE);
+! if (check_mark(fp) == FAIL)
+! goto doend;
+! ea.line1 = fp->lnum;
+! fp = getmark('>', FALSE);
+! if (check_mark(fp) == FAIL)
+! goto doend;
+! ea.line2 = fp->lnum;
+! ++ea.addr_count;
+! }
+! }
+! }
+! else
+! ea.line2 = lnum;
+! ea.addr_count++;
+!
+! if (*ea.cmd == ';')
+! {
+! if (!ea.skip)
+! {
+! curwin->w_cursor.lnum = ea.line2;
+! /* don't leave the cursor on an illegal line or column */
+! check_cursor();
+! }
+! }
+! else if (*ea.cmd != ',')
+! break;
+! ++ea.cmd;
+! }
+!
+! /* One address given: set start and end lines */
+! if (ea.addr_count == 1)
+! {
+! ea.line1 = ea.line2;
+! /* ... but only implicit: really no address given */
+! if (lnum == MAXLNUM)
+! ea.addr_count = 0;
+! }
+
+ /*
+ * 5. Parse the command.
+--- 2044,2052 ----
+ get_wincmd_addr_type(skipwhite(p), &ea);
+ }
+
+ ea.cmd = cmd;
+! if (parse_cmd_address(&ea, &errormsg) == FAIL)
+! goto doend;
+
+ /*
+ * 5. Parse the command.
+***************
+*** 2989,2994 ****
+--- 2829,3007 ----
+ #endif
+
+ /*
++ * Parse the address range, if any, in "eap".
++ * Return FAIL and set "errormsg" or return OK.
++ */
++ int
++ parse_cmd_address(exarg_T *eap, char_u **errormsg)
++ {
++ int address_count = 1;
++ linenr_T lnum;
++
++ // Repeat for all ',' or ';' separated addresses.
++ for (;;)
++ {
++ eap->line1 = eap->line2;
++ switch (eap->addr_type)
++ {
++ case ADDR_LINES:
++ // default is current line number
++ eap->line2 = curwin->w_cursor.lnum;
++ break;
++ case ADDR_WINDOWS:
++ eap->line2 = CURRENT_WIN_NR;
++ break;
++ case ADDR_ARGUMENTS:
++ eap->line2 = curwin->w_arg_idx + 1;
++ if (eap->line2 > ARGCOUNT)
++ eap->line2 = ARGCOUNT;
++ break;
++ case ADDR_LOADED_BUFFERS:
++ case ADDR_BUFFERS:
++ eap->line2 = curbuf->b_fnum;
++ break;
++ case ADDR_TABS:
++ eap->line2 = CURRENT_TAB_NR;
++ break;
++ case ADDR_TABS_RELATIVE:
++ eap->line2 = 1;
++ break;
++ #ifdef FEAT_QUICKFIX
++ case ADDR_QUICKFIX:
++ eap->line2 = qf_get_cur_valid_idx(eap);
++ break;
++ #endif
++ }
++ eap->cmd = skipwhite(eap->cmd);
++ lnum = get_address(eap, &eap->cmd, eap->addr_type, eap->skip,
++ eap->addr_count == 0, address_count++);
++ if (eap->cmd == NULL) // error detected
++ return FAIL;
++ if (lnum == MAXLNUM)
++ {
++ if (*eap->cmd == '%') // '%' - all lines
++ {
++ ++eap->cmd;
++ switch (eap->addr_type)
++ {
++ case ADDR_LINES:
++ eap->line1 = 1;
++ eap->line2 = curbuf->b_ml.ml_line_count;
++ break;
++ case ADDR_LOADED_BUFFERS:
++ {
++ buf_T *buf = firstbuf;
++
++ while (buf->b_next != NULL
++ && buf->b_ml.ml_mfp == NULL)
++ buf = buf->b_next;
++ eap->line1 = buf->b_fnum;
++ buf = lastbuf;
++ while (buf->b_prev != NULL
++ && buf->b_ml.ml_mfp == NULL)
++ buf = buf->b_prev;
++ eap->line2 = buf->b_fnum;
++ break;
++ }
++ case ADDR_BUFFERS:
++ eap->line1 = firstbuf->b_fnum;
++ eap->line2 = lastbuf->b_fnum;
++ break;
++ case ADDR_WINDOWS:
++ case ADDR_TABS:
++ if (IS_USER_CMDIDX(eap->cmdidx))
++ {
++ eap->line1 = 1;
++ eap->line2 = eap->addr_type == ADDR_WINDOWS
++ ? LAST_WIN_NR : LAST_TAB_NR;
++ }
++ else
++ {
++ // there is no Vim command which uses '%' and
++ // ADDR_WINDOWS or ADDR_TABS
++ *errormsg = (char_u *)_(e_invrange);
++ return FAIL;
++ }
++ break;
++ case ADDR_TABS_RELATIVE:
++ *errormsg = (char_u *)_(e_invrange);
++ return FAIL;
++ case ADDR_ARGUMENTS:
++ if (ARGCOUNT == 0)
++ eap->line1 = eap->line2 = 0;
++ else
++ {
++ eap->line1 = 1;
++ eap->line2 = ARGCOUNT;
++ }
++ break;
++ #ifdef FEAT_QUICKFIX
++ case ADDR_QUICKFIX:
++ eap->line1 = 1;
++ eap->line2 = qf_get_size(eap);
++ if (eap->line2 == 0)
++ eap->line2 = 1;
++ break;
++ #endif
++ }
++ ++eap->addr_count;
++ }
++ else if (*eap->cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
++ {
++ pos_T *fp;
++
++ // '*' - visual area
++ if (eap->addr_type != ADDR_LINES)
++ {
++ *errormsg = (char_u *)_(e_invrange);
++ return FAIL;
++ }
++
++ ++eap->cmd;
++ if (!eap->skip)
++ {
++ fp = getmark('<', FALSE);
++ if (check_mark(fp) == FAIL)
++ return FAIL;
++ eap->line1 = fp->lnum;
++ fp = getmark('>', FALSE);
++ if (check_mark(fp) == FAIL)
++ return FAIL;
++ eap->line2 = fp->lnum;
++ ++eap->addr_count;
++ }
++ }
++ }
++ else
++ eap->line2 = lnum;
++ eap->addr_count++;
++
++ if (*eap->cmd == ';')
++ {
++ if (!eap->skip)
++ {
++ curwin->w_cursor.lnum = eap->line2;
++ // don't leave the cursor on an illegal line or column
++ check_cursor();
++ }
++ }
++ else if (*eap->cmd != ',')
++ break;
++ ++eap->cmd;
++ }
++
++ // One address given: set start and end lines.
++ if (eap->addr_count == 1)
++ {
++ eap->line1 = eap->line2;
++ // ... but only implicit: really no address given
++ if (lnum == MAXLNUM)
++ eap->addr_count = 0;
++ }
++ return OK;
++ }
++
++ /*
+ * Check for an Ex command with optional tail.
+ * If there is a match advance "pp" to the argument and return TRUE.
+ */
+***************
+*** 4292,4298 ****
+ }
+
+ /*
+! * skip a range specifier of the form: addr [,addr] [;addr] ..
+ *
+ * Backslashed delimiters after / or ? will be skipped, and commands will
+ * not be expanded between /'s and ?'s or after "'".
+--- 4305,4311 ----
+ }
+
+ /*
+! * Skip a range specifier of the form: addr [,addr] [;addr] ..
+ *
+ * Backslashed delimiters after / or ? will be skipped, and commands will
+ * not be expanded between /'s and ?'s or after "'".
+*** ../vim-8.1.0265/src/proto/ex_docmd.pro 2018-07-29 17:35:19.493750319 +0200
+--- src/proto/ex_docmd.pro 2018-08-10 23:08:41.983672969 +0200
+***************
+*** 4,9 ****
+--- 4,10 ----
+ int do_cmdline(char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags);
+ int getline_equal(char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int));
+ void *getline_cookie(char_u *(*fgetline)(int, void *, int), void *cookie);
++ int parse_cmd_address(exarg_T *eap, char_u **errormsg);
+ int checkforcmd(char_u **pp, char *cmd, int len);
+ int modifier_len(char_u *cmd);
+ int cmd_exists(char_u *name);
+*** ../vim-8.1.0265/src/version.c 2018-08-10 22:07:28.821903829 +0200
+--- src/version.c 2018-08-10 22:39:25.770183225 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 266,
+ /**/
+
+--
+Permission is granted to read this message out aloud on Kings Cross Road,
+London, under the condition that the orator is properly dressed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0267 b/data/vim/patches/8.1.0267
new file mode 100644
index 000000000..7d332c333
--- /dev/null
+++ b/data/vim/patches/8.1.0267
@@ -0,0 +1,140 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0267
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0267
+Problem: No good check if restoring quickfix list worked.
+Solution: Let qf_restore_list() return OK/FAIL. (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0266/src/quickfix.c 2018-08-09 21:52:20.716362389 +0200
+--- src/quickfix.c 2018-08-11 13:35:15.874757811 +0200
+***************
+*** 4338,4345 ****
+ * If the current list is not "save_qfid" and we can find the list with that ID
+ * then make it the current list.
+ * This is used when autocommands may have changed the current list.
+ */
+! static void
+ qf_restore_list(qf_info_T *qi, int_u save_qfid)
+ {
+ int curlist;
+--- 4338,4347 ----
+ * If the current list is not "save_qfid" and we can find the list with that ID
+ * then make it the current list.
+ * This is used when autocommands may have changed the current list.
++ * Returns OK if successfully restored the list. Returns FAIL if the list with
++ * the specified identifier (save_qfid) is not found in the stack.
+ */
+! static int
+ qf_restore_list(qf_info_T *qi, int_u save_qfid)
+ {
+ int curlist;
+***************
+*** 4347,4356 ****
+ if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+ {
+ curlist = qf_id2nr(qi, save_qfid);
+! if (curlist >= 0)
+! qi->qf_curlist = curlist;
+! // else: what if the list can't be found?
+ }
+ }
+
+ /*
+--- 4349,4360 ----
+ if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
+ {
+ curlist = qf_id2nr(qi, save_qfid);
+! if (curlist < 0)
+! // list is not present
+! return FAIL;
+! qi->qf_curlist = curlist;
+ }
++ return OK;
+ }
+
+ /*
+***************
+*** 4359,4367 ****
+ static void
+ qf_jump_first(qf_info_T *qi, int_u save_qfid, int forceit)
+ {
+! qf_restore_list(qi, save_qfid);
+
+! // Autocommands might have cleared the list, check for it
+ if (!qf_list_empty(qi, qi->qf_curlist))
+ qf_jump(qi, 0, 0, forceit);
+ }
+--- 4363,4372 ----
+ static void
+ qf_jump_first(qf_info_T *qi, int_u save_qfid, int forceit)
+ {
+! if (qf_restore_list(qi, save_qfid) == FAIL)
+! return;
+
+! // Autocommands might have cleared the list, check for that.
+ if (!qf_list_empty(qi, qi->qf_curlist))
+ qf_jump(qi, 0, 0, forceit);
+ }
+***************
+*** 5025,5031 ****
+ }
+ }
+
+! qf_restore_list(qi, qfid);
+
+ return TRUE;
+ }
+--- 5030,5037 ----
+ }
+ }
+
+! if (qf_restore_list(qi, qfid) == FAIL)
+! return FALSE;
+
+ return TRUE;
+ }
+***************
+*** 5371,5377 ****
+ if (!qflist_valid(wp, save_qfid))
+ goto theend;
+
+! qf_restore_list(qi, save_qfid);
+
+ /* Jump to first match. */
+ if (!qf_list_empty(qi, qi->qf_curlist))
+--- 5377,5384 ----
+ if (!qflist_valid(wp, save_qfid))
+ goto theend;
+
+! if (qf_restore_list(qi, save_qfid) == FAIL)
+! goto theend;
+
+ /* Jump to first match. */
+ if (!qf_list_empty(qi, qi->qf_curlist))
+*** ../vim-8.1.0266/src/version.c 2018-08-10 23:13:07.934024645 +0200
+--- src/version.c 2018-08-11 13:32:28.919832152 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 267,
+ /**/
+
+--
+BRIDGEKEEPER: What is your favorite editor?
+GAWAIN: Emacs ... No, Viiiiiiiiiiimmmmmmm!
+ "Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0268 b/data/vim/patches/8.1.0268
new file mode 100644
index 000000000..5776b5d7a
--- /dev/null
+++ b/data/vim/patches/8.1.0268
@@ -0,0 +1,380 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0268
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0268
+Problem: File type checking has too many #ifdef.
+Solution: Always define the S_IF macros. (Ken Takata, closes #3306)
+Files: src/buffer.c, src/evalfunc.c, src/fileio.c, src/if_cscope.c,
+ src/os_unix.c, src/os_unix.h, src/vim.h
+
+
+*** ../vim-8.1.0267/src/buffer.c 2018-08-07 22:30:26.670240840 +0200
+--- src/buffer.c 2018-08-11 13:48:31.531925854 +0200
+***************
+*** 204,216 ****
+ #endif
+ #ifdef UNIX
+ perm = mch_getperm(curbuf->b_ffname);
+! if (perm >= 0 && (0
+! # ifdef S_ISFIFO
+! || S_ISFIFO(perm)
+! # endif
+! # ifdef S_ISSOCK
+ || S_ISSOCK(perm)
+- # endif
+ # ifdef OPEN_CHR_FILES
+ || (S_ISCHR(perm) && is_dev_fd_file(curbuf->b_ffname))
+ # endif
+--- 204,211 ----
+ #endif
+ #ifdef UNIX
+ perm = mch_getperm(curbuf->b_ffname);
+! if (perm >= 0 && (S_ISFIFO(perm)
+ || S_ISSOCK(perm)
+ # ifdef OPEN_CHR_FILES
+ || (S_ISCHR(perm) && is_dev_fd_file(curbuf->b_ffname))
+ # endif
+*** ../vim-8.1.0267/src/evalfunc.c 2018-08-09 22:08:53.017560100 +0200
+--- src/evalfunc.c 2018-08-11 13:48:31.535925823 +0200
+***************
+*** 5088,5150 ****
+ rettv->v_type = VAR_STRING;
+ if (mch_lstat((char *)fname, &st) >= 0)
+ {
+- #ifdef S_ISREG
+ if (S_ISREG(st.st_mode))
+ t = "file";
+ else if (S_ISDIR(st.st_mode))
+ t = "dir";
+- # ifdef S_ISLNK
+ else if (S_ISLNK(st.st_mode))
+ t = "link";
+- # endif
+- # ifdef S_ISBLK
+ else if (S_ISBLK(st.st_mode))
+ t = "bdev";
+- # endif
+- # ifdef S_ISCHR
+ else if (S_ISCHR(st.st_mode))
+ t = "cdev";
+- # endif
+- # ifdef S_ISFIFO
+ else if (S_ISFIFO(st.st_mode))
+ t = "fifo";
+- # endif
+- # ifdef S_ISSOCK
+ else if (S_ISSOCK(st.st_mode))
+ t = "socket";
+- # endif
+ else
+ t = "other";
+- #else
+- # ifdef S_IFMT
+- switch (st.st_mode & S_IFMT)
+- {
+- case S_IFREG: t = "file"; break;
+- case S_IFDIR: t = "dir"; break;
+- # ifdef S_IFLNK
+- case S_IFLNK: t = "link"; break;
+- # endif
+- # ifdef S_IFBLK
+- case S_IFBLK: t = "bdev"; break;
+- # endif
+- # ifdef S_IFCHR
+- case S_IFCHR: t = "cdev"; break;
+- # endif
+- # ifdef S_IFIFO
+- case S_IFIFO: t = "fifo"; break;
+- # endif
+- # ifdef S_IFSOCK
+- case S_IFSOCK: t = "socket"; break;
+- # endif
+- default: t = "other";
+- }
+- # else
+- if (mch_isdir(fname))
+- t = "dir";
+- else
+- t = "file";
+- # endif
+- #endif
+ type = vim_strsave((char_u *)t);
+ }
+ rettv->vval.v_string = type;
+--- 5088,5109 ----
+*** ../vim-8.1.0267/src/fileio.c 2018-08-07 21:39:09.247060119 +0200
+--- src/fileio.c 2018-08-11 13:48:31.535925823 +0200
+***************
+*** 424,435 ****
+ */
+ perm = mch_getperm(fname);
+ if (perm >= 0 && !S_ISREG(perm) /* not a regular file ... */
+- # ifdef S_ISFIFO
+ && !S_ISFIFO(perm) /* ... or fifo */
+- # endif
+- # ifdef S_ISSOCK
+ && !S_ISSOCK(perm) /* ... or socket */
+- # endif
+ # ifdef OPEN_CHR_FILES
+ && !(S_ISCHR(perm) && is_dev_fd_file(fname))
+ /* ... or a character special file named /dev/fd/<n> */
+--- 424,431 ----
+***************
+*** 2497,2524 ****
+ c = FALSE;
+
+ #ifdef UNIX
+! # ifdef S_ISFIFO
+! if (S_ISFIFO(perm)) /* fifo or socket */
+! {
+! STRCAT(IObuff, _("[fifo/socket]"));
+! c = TRUE;
+! }
+! # else
+! # ifdef S_IFIFO
+! if ((perm & S_IFMT) == S_IFIFO) /* fifo */
+ {
+ STRCAT(IObuff, _("[fifo]"));
+ c = TRUE;
+ }
+! # endif
+! # ifdef S_IFSOCK
+! if ((perm & S_IFMT) == S_IFSOCK) /* or socket */
+ {
+ STRCAT(IObuff, _("[socket]"));
+ c = TRUE;
+ }
+- # endif
+- # endif
+ # ifdef OPEN_CHR_FILES
+ if (S_ISCHR(perm)) /* or character special */
+ {
+--- 2493,2508 ----
+ c = FALSE;
+
+ #ifdef UNIX
+! if (S_ISFIFO(perm)) /* fifo */
+ {
+ STRCAT(IObuff, _("[fifo]"));
+ c = TRUE;
+ }
+! if (S_ISSOCK(perm)) /* or socket */
+ {
+ STRCAT(IObuff, _("[socket]"));
+ c = TRUE;
+ }
+ # ifdef OPEN_CHR_FILES
+ if (S_ISCHR(perm)) /* or character special */
+ {
+*** ../vim-8.1.0267/src/if_cscope.c 2018-07-25 21:19:09.363656976 +0200
+--- src/if_cscope.c 2018-08-11 13:48:31.539925791 +0200
+***************
+*** 550,556 ****
+ }
+
+ /* if filename is a directory, append the cscope database name to it */
+! if ((statbuf.st_mode & S_IFMT) == S_IFDIR)
+ {
+ fname2 = (char *)alloc((unsigned)(strlen(CSCOPE_DBFILE) + strlen(fname) + 2));
+ if (fname2 == NULL)
+--- 550,556 ----
+ }
+
+ /* if filename is a directory, append the cscope database name to it */
+! if (S_ISDIR(statbuf.st_mode))
+ {
+ fname2 = (char *)alloc((unsigned)(strlen(CSCOPE_DBFILE) + strlen(fname) + 2));
+ if (fname2 == NULL)
+***************
+*** 581,592 ****
+
+ i = cs_insert_filelist(fname2, ppath, flags, &statbuf);
+ }
+- #if defined(UNIX)
+ else if (S_ISREG(statbuf.st_mode) || S_ISLNK(statbuf.st_mode))
+- #else
+- /* WIN32 - substitute define S_ISREG from os_unix.h */
+- else if (((statbuf.st_mode) & S_IFMT) == S_IFREG)
+- #endif
+ {
+ i = cs_insert_filelist(fname, ppath, flags, &statbuf);
+ }
+--- 581,587 ----
+*** ../vim-8.1.0267/src/os_unix.c 2018-08-07 22:30:26.666240863 +0200
+--- src/os_unix.c 2018-08-11 13:48:31.539925791 +0200
+***************
+*** 3138,3148 ****
+ return FALSE;
+ if (stat((char *)name, &statb))
+ return FALSE;
+- #ifdef _POSIX_SOURCE
+ return (S_ISDIR(statb.st_mode) ? TRUE : FALSE);
+- #else
+- return ((statb.st_mode & S_IFMT) == S_IFDIR ? TRUE : FALSE);
+- #endif
+ }
+
+ /*
+--- 3138,3144 ----
+***************
+*** 3159,3169 ****
+ return FALSE;
+ if (mch_lstat((char *)name, &statb))
+ return FALSE;
+- #ifdef _POSIX_SOURCE
+ return (S_ISDIR(statb.st_mode) ? TRUE : FALSE);
+- #else
+- return ((statb.st_mode & S_IFMT) == S_IFDIR ? TRUE : FALSE);
+- #endif
+ }
+
+ static int executable_file(char_u *name);
+--- 3155,3161 ----
+*** ../vim-8.1.0267/src/os_unix.h 2018-02-28 23:12:59.000000000 +0100
+--- src/os_unix.h 2018-08-11 13:48:31.539925791 +0200
+***************
+*** 458,482 ****
+ # endif
+ #endif
+
+- #if !defined(S_ISDIR) && defined(S_IFDIR)
+- # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+- #endif
+- #if !defined(S_ISREG) && defined(S_IFREG)
+- # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+- #endif
+- #if !defined(S_ISBLK) && defined(S_IFBLK)
+- # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+- #endif
+- #if !defined(S_ISSOCK) && defined(S_IFSOCK)
+- # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+- #endif
+- #if !defined(S_ISFIFO) && defined(S_IFIFO)
+- # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+- #endif
+- #if !defined(S_ISCHR) && defined(S_IFCHR)
+- # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+- #endif
+-
+ /* Note: Some systems need both string.h and strings.h (Savage). However,
+ * some systems can't handle both, only use string.h in that case. */
+ #ifdef HAVE_STRING_H
+--- 458,463 ----
+*** ../vim-8.1.0267/src/vim.h 2018-08-07 22:42:48.965416564 +0200
+--- src/vim.h 2018-08-11 13:48:31.539925791 +0200
+***************
+*** 2290,2304 ****
+
+ #endif
+
+- /* ISSYMLINK(mode) tests if a file is a symbolic link. */
+- #if (defined(S_IFMT) && defined(S_IFLNK)) || defined(S_ISLNK)
+- # define HAVE_ISSYMLINK
+- # if defined(S_IFMT) && defined(S_IFLNK)
+- # define ISSYMLINK(mode) (((mode) & S_IFMT) == S_IFLNK)
+- # else
+- # define ISSYMLINK(mode) S_ISLNK(mode)
+- # endif
+- #endif
+
+ #define SIGN_BYTE 1 /* byte value used where sign is displayed;
+ attribute value is sign type */
+--- 2290,2295 ----
+***************
+*** 2517,2526 ****
+
+ /* BSD is supposed to cover FreeBSD and similar systems. */
+ #if (defined(SUN_SYSTEM) || defined(BSD) || defined(__FreeBSD_kernel__)) \
+! && defined(S_ISCHR)
+ # define OPEN_CHR_FILES
+ #endif
+
+ #if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
+ # define ELAPSED_TIMEVAL
+ # define ELAPSED_INIT(v) gettimeofday(&v, NULL)
+--- 2508,2568 ----
+
+ /* BSD is supposed to cover FreeBSD and similar systems. */
+ #if (defined(SUN_SYSTEM) || defined(BSD) || defined(__FreeBSD_kernel__)) \
+! && (defined(S_ISCHR) || defined(S_IFCHR))
+ # define OPEN_CHR_FILES
+ #endif
+
++ /* stat macros */
++ #ifndef S_ISDIR
++ # ifdef S_IFDIR
++ # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
++ # else
++ # define S_ISDIR(m) 0
++ # endif
++ #endif
++ #ifndef S_ISREG
++ # ifdef S_IFREG
++ # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
++ # else
++ # define S_ISREG(m) 0
++ # endif
++ #endif
++ #ifndef S_ISBLK
++ # ifdef S_IFBLK
++ # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
++ # else
++ # define S_ISBLK(m) 0
++ # endif
++ #endif
++ #ifndef S_ISSOCK
++ # ifdef S_IFSOCK
++ # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
++ # else
++ # define S_ISSOCK(m) 0
++ # endif
++ #endif
++ #ifndef S_ISFIFO
++ # ifdef S_IFIFO
++ # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
++ # else
++ # define S_ISFIFO(m) 0
++ # endif
++ #endif
++ #ifndef S_ISCHR
++ # ifdef S_IFCHR
++ # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
++ # else
++ # define S_ISCHR(m) 0
++ # endif
++ #endif
++ #ifndef S_ISLNK
++ # ifdef S_IFLNK
++ # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
++ # else
++ # define S_ISLNK(m) 0
++ # endif
++ #endif
++
+ #if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
+ # define ELAPSED_TIMEVAL
+ # define ELAPSED_INIT(v) gettimeofday(&v, NULL)
+*** ../vim-8.1.0267/src/version.c 2018-08-11 13:36:51.806140673 +0200
+--- src/version.c 2018-08-11 13:49:48.951318065 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 268,
+ /**/
+
+--
+Q: What kind of stuff do you do?
+A: I collect hobbies.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0269 b/data/vim/patches/8.1.0269
new file mode 100644
index 000000000..d516f7c30
--- /dev/null
+++ b/data/vim/patches/8.1.0269
@@ -0,0 +1,127 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0269
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0269
+Problem: Ruby Kernel.#p method always returns nil.
+Solution: Copy p method implementation from Ruby code. (Masataka Pocke
+ Kuwabara, closes #3315)
+Files: src/if_ruby.c, src/testdir/test_ruby.vim
+
+
+*** ../vim-8.1.0268/src/if_ruby.c 2018-08-04 17:24:39.062825210 +0200
+--- src/if_ruby.c 2018-08-11 14:23:48.613860602 +0200
+***************
+*** 299,304 ****
+--- 299,309 ----
+ # define rb_string_value_ptr dll_rb_string_value_ptr
+ # define rb_float_new dll_rb_float_new
+ # define rb_ary_new dll_rb_ary_new
++ # ifdef rb_ary_new4
++ # define RB_ARY_NEW4_MACRO 1
++ # undef rb_ary_new4
++ # endif
++ # define rb_ary_new4 dll_rb_ary_new4
+ # define rb_ary_push dll_rb_ary_push
+ # if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+ # ifdef __ia64
+***************
+*** 441,446 ****
+--- 446,452 ----
+ static char * (*dll_rb_string_value_ptr) (volatile VALUE*);
+ static VALUE (*dll_rb_float_new) (double);
+ static VALUE (*dll_rb_ary_new) (void);
++ static VALUE (*dll_rb_ary_new4) (long n, const VALUE *elts);
+ static VALUE (*dll_rb_ary_push) (VALUE, VALUE);
+ # if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+ # ifdef __ia64
+***************
+*** 647,652 ****
+--- 653,663 ----
+ {"rb_float_new_in_heap", (RUBY_PROC*)&dll_rb_float_new},
+ # endif
+ {"rb_ary_new", (RUBY_PROC*)&dll_rb_ary_new},
++ # ifdef RB_ARY_NEW4_MACRO
++ {"rb_ary_new_from_values", (RUBY_PROC*)&dll_rb_ary_new4},
++ # else
++ {"rb_ary_new4", (RUBY_PROC*)&dll_rb_ary_new4},
++ # endif
+ {"rb_ary_push", (RUBY_PROC*)&dll_rb_ary_push},
+ # endif
+ # ifdef RUBY19_OR_LATER
+***************
+*** 1577,1582 ****
+--- 1588,1594 ----
+ {
+ int i;
+ VALUE str = rb_str_new("", 0);
++ VALUE ret = Qnil;
+
+ for (i = 0; i < argc; i++)
+ {
+***************
+*** 1584,1590 ****
+ rb_str_concat(str, rb_inspect(argv[i]));
+ }
+ MSG(RSTRING_PTR(str));
+! return Qnil;
+ }
+
+ static void ruby_io_init(void)
+--- 1596,1607 ----
+ rb_str_concat(str, rb_inspect(argv[i]));
+ }
+ MSG(RSTRING_PTR(str));
+!
+! if (argc == 1)
+! ret = argv[0];
+! else if (argc > 1)
+! ret = rb_ary_new4(argc, argv);
+! return ret;
+ }
+
+ static void ruby_io_init(void)
+*** ../vim-8.1.0268/src/testdir/test_ruby.vim 2018-07-28 17:29:15.757096343 +0200
+--- src/testdir/test_ruby.vim 2018-08-11 14:17:07.396211894 +0200
+***************
+*** 363,366 ****
+--- 363,379 ----
+ ruby p 'Just a test'
+ let messages = split(execute('message'), "\n")
+ call assert_equal('"Just a test"', messages[-1])
++
++ " Check return values of p method
++
++ call assert_equal('123', RubyEval('p(123)'))
++ call assert_equal('[1, 2, 3]', RubyEval('p(1, 2, 3)'))
++
++ " Avoid the "message maintainer" line.
++ let $LANG = ''
++ messages clear
++ call assert_equal('true', RubyEval('p() == nil'))
++
++ let messages = split(execute('message'), "\n")
++ call assert_equal(0, len(messages))
+ endfunc
+*** ../vim-8.1.0268/src/version.c 2018-08-11 13:57:16.215969777 +0200
+--- src/version.c 2018-08-11 14:22:56.922175770 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 269,
+ /**/
+
+--
+SIGFUN -- signature too funny (core dumped)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0270 b/data/vim/patches/8.1.0270
new file mode 100644
index 000000000..63d9e3a86
--- /dev/null
+++ b/data/vim/patches/8.1.0270
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0270
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0270
+Problem: Checking for a Tab in a line could be faster.
+Solution: Use strchr() instead of strrchr(). (closes #3312)
+Files: src/ex_cmds.c
+
+
+*** ../vim-8.1.0269/src/ex_cmds.c 2018-08-02 22:23:53.342591238 +0200
+--- src/ex_cmds.c 2018-08-11 14:39:13.611943727 +0200
+***************
+*** 281,287 ****
+ *last = NUL;
+ len = linetabsize(line); /* get line length */
+ if (has_tab != NULL) /* check for embedded TAB */
+! *has_tab = (vim_strrchr(first, TAB) != NULL);
+ *last = save;
+
+ return len;
+--- 281,287 ----
+ *last = NUL;
+ len = linetabsize(line); /* get line length */
+ if (has_tab != NULL) /* check for embedded TAB */
+! *has_tab = (vim_strchr(first, TAB) != NULL);
+ *last = save;
+
+ return len;
+*** ../vim-8.1.0269/src/version.c 2018-08-11 14:24:06.945748177 +0200
+--- src/version.c 2018-08-11 14:41:05.107212697 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 270,
+ /**/
+
+--
+BRIDGEKEEPER: What is the air-speed velocity of an unladen swallow?
+ARTHUR: What do you mean? An African or European swallow?
+BRIDGEKEEPER: Er ... I don't know that ... Aaaaarrrrrrggghhh!
+ BRIDGEKEEPER is cast into the gorge.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0271 b/data/vim/patches/8.1.0271
new file mode 100644
index 000000000..53b7c4942
--- /dev/null
+++ b/data/vim/patches/8.1.0271
@@ -0,0 +1,489 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0271
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0271
+Problem: 'incsearch' doesn't work for :s, :g or :v.
+Solution: Also use 'incsearch' for other commands that use a pattern.
+Files: src/ex_getln.c, src/globals.h, src/screen.c,
+ src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0270/src/ex_getln.c 2018-08-10 22:07:28.821903829 +0200
+--- src/ex_getln.c 2018-08-11 16:16:52.578317070 +0200
+***************
+*** 264,274 ****
+
+ /*
+ * Return TRUE when 'incsearch' highlighting is to be done.
+ */
+ static int
+! do_incsearch_highlighting(int firstc)
+ {
+! return p_is && !cmd_silent && (firstc == '/' || firstc == '?');
+ }
+
+ /*
+--- 264,341 ----
+
+ /*
+ * Return TRUE when 'incsearch' highlighting is to be done.
++ * Sets search_first_line and search_last_line to the address range.
+ */
+ static int
+! do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
+! int *skiplen, int *patlen)
+ {
+! *skiplen = 0;
+! *patlen = ccline.cmdlen;
+!
+! if (p_is && !cmd_silent)
+! {
+! // by default search all lines
+! search_first_line = 0;
+! search_last_line = MAXLNUM;
+!
+! if (firstc == '/' || firstc == '?')
+! return TRUE;
+! if (firstc == ':')
+! {
+! char_u *cmd = skip_range(ccline.cmdbuff, NULL);
+! char_u *p;
+! int delim;
+! char_u *end;
+!
+! if (*cmd == 's' || *cmd == 'g' || *cmd == 'v')
+! {
+! // Skip over "substitute" to find the pattern separator.
+! for (p = cmd; ASCII_ISALPHA(*p); ++p)
+! ;
+! if (*p != NUL)
+! {
+! delim = *p++;
+! end = skip_regexp(p, delim, p_magic, NULL);
+! if (end > p)
+! {
+! char_u *dummy;
+! exarg_T ea;
+! pos_T save_cursor = curwin->w_cursor;
+!
+! // found a non-empty pattern
+! *skiplen = (int)(p - ccline.cmdbuff);
+! *patlen = (int)(end - p);
+!
+! // parse the address range
+! vim_memset(&ea, 0, sizeof(ea));
+! ea.line1 = 1;
+! ea.line2 = 1;
+! ea.cmd = ccline.cmdbuff;
+! ea.addr_type = ADDR_LINES;
+! parse_cmd_address(&ea, &dummy);
+! curwin->w_cursor = is_state->search_start;
+! if (ea.addr_count > 0)
+! {
+! search_first_line = ea.line1;
+! search_last_line = ea.line2;
+! }
+! else if (*cmd == 's')
+! {
+! // :s defaults to the current line
+! search_first_line = curwin->w_cursor.lnum;
+! search_last_line = curwin->w_cursor.lnum;
+! }
+!
+! curwin->w_cursor = save_cursor;
+! return TRUE;
+! }
+! }
+! }
+! }
+! }
+!
+! return FALSE;
+ }
+
+ /*
+***************
+*** 280,293 ****
+ long count,
+ incsearch_state_T *is_state)
+ {
+ int i;
+ pos_T end_pos;
+ struct cmdline_info save_ccline;
+ #ifdef FEAT_RELTIME
+ proftime_T tm;
+ #endif
+
+! if (!do_incsearch_highlighting(firstc))
+ return;
+
+ // If there is a character waiting, search and redraw later.
+--- 347,362 ----
+ long count,
+ incsearch_state_T *is_state)
+ {
++ int skiplen, patlen;
+ int i;
+ pos_T end_pos;
+ struct cmdline_info save_ccline;
+ #ifdef FEAT_RELTIME
+ proftime_T tm;
+ #endif
++ int c;
+
+! if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+ return;
+
+ // If there is a character waiting, search and redraw later.
+***************
+*** 298,309 ****
+ }
+ is_state->incsearch_postponed = FALSE;
+
+! // start at old position
+! curwin->w_cursor = is_state->search_start;
+ save_last_search_pattern();
+
+ // If there is no command line, don't do anything.
+! if (ccline.cmdlen == 0)
+ {
+ i = 0;
+ set_no_hlsearch(TRUE); // turn off previous highlight
+--- 367,385 ----
+ }
+ is_state->incsearch_postponed = FALSE;
+
+! if (search_first_line == 0)
+! // start at the original cursor position
+! curwin->w_cursor = is_state->search_start;
+! else
+! {
+! // start at the first line in the range
+! curwin->w_cursor.lnum = search_first_line;
+! curwin->w_cursor.col = 0;
+! }
+ save_last_search_pattern();
+
+ // If there is no command line, don't do anything.
+! if (patlen == 0)
+ {
+ i = 0;
+ set_no_hlsearch(TRUE); // turn off previous highlight
+***************
+*** 322,336 ****
+ #endif
+ if (!p_hls)
+ search_flags += SEARCH_KEEP;
+! i = do_search(NULL, firstc, ccline.cmdbuff, count, search_flags,
+ #ifdef FEAT_RELTIME
+ &tm, NULL
+ #else
+ NULL, NULL
+ #endif
+ );
+ --emsg_off;
+
+ // if interrupted while searching, behave like it failed
+ if (got_int)
+ {
+--- 398,421 ----
+ #endif
+ if (!p_hls)
+ search_flags += SEARCH_KEEP;
+! c = ccline.cmdbuff[skiplen + patlen];
+! ccline.cmdbuff[skiplen + patlen] = NUL;
+! i = do_search(NULL, firstc == ':' ? '/' : firstc,
+! ccline.cmdbuff + skiplen, count, search_flags,
+ #ifdef FEAT_RELTIME
+ &tm, NULL
+ #else
+ NULL, NULL
+ #endif
+ );
++ ccline.cmdbuff[skiplen + patlen] = c;
+ --emsg_off;
+
++ if (curwin->w_cursor.lnum < search_first_line
++ || curwin->w_cursor.lnum > search_last_line)
++ // match outside of address range
++ i = 0;
++
+ // if interrupted while searching, behave like it failed
+ if (got_int)
+ {
+***************
+*** 369,376 ****
+--- 454,464 ----
+
+ // Disable 'hlsearch' highlighting if the pattern matches everything.
+ // Avoids a flash when typing "foo\|".
++ c = ccline.cmdbuff[skiplen + patlen];
++ ccline.cmdbuff[skiplen + patlen] = NUL;
+ if (empty_pattern(ccline.cmdbuff))
+ set_no_hlsearch(TRUE);
++ ccline.cmdbuff[skiplen + patlen] = c;
+
+ validate_cursor();
+ // May redraw the status line to show the cursor position.
+***************
+*** 398,422 ****
+ */
+ static int
+ may_adjust_incsearch_highlighting(
+! int firstc,
+! long count,
+ incsearch_state_T *is_state,
+! int c)
+ {
+ pos_T t;
+ char_u *pat;
+ int search_flags = SEARCH_NOOF;
+ int i;
+
+! if (!do_incsearch_highlighting(firstc))
+ return OK;
+! if (ccline.cmdlen == 0)
+ return FAIL;
+
+! if (firstc == ccline.cmdbuff[0])
+ pat = last_search_pattern();
+ else
+! pat = ccline.cmdbuff;
+
+ save_last_search_pattern();
+ cursor_off();
+--- 486,512 ----
+ */
+ static int
+ may_adjust_incsearch_highlighting(
+! int firstc,
+! long count,
+ incsearch_state_T *is_state,
+! int c)
+ {
++ int skiplen, patlen;
+ pos_T t;
+ char_u *pat;
+ int search_flags = SEARCH_NOOF;
+ int i;
++ int save;
+
+! if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+ return OK;
+! if (patlen == 0 && ccline.cmdbuff[skiplen] == NUL)
+ return FAIL;
+
+! if (firstc == ccline.cmdbuff[skiplen])
+ pat = last_search_pattern();
+ else
+! pat = ccline.cmdbuff + skiplen;
+
+ save_last_search_pattern();
+ cursor_off();
+***************
+*** 435,451 ****
+ if (!p_hls)
+ search_flags += SEARCH_KEEP;
+ ++emsg_off;
+ i = searchit(curwin, curbuf, &t,
+ c == Ctrl_G ? FORWARD : BACKWARD,
+ pat, count, search_flags,
+ RE_SEARCH, 0, NULL, NULL);
+ --emsg_off;
+ if (i)
+ {
+ is_state->search_start = is_state->match_start;
+ is_state->match_end = t;
+ is_state->match_start = t;
+! if (c == Ctrl_T && firstc == '/')
+ {
+ // Move just before the current match, so that when nv_search
+ // finishes the cursor will be put back on the match.
+--- 525,544 ----
+ if (!p_hls)
+ search_flags += SEARCH_KEEP;
+ ++emsg_off;
++ save = pat[patlen];
++ pat[patlen] = NUL;
+ i = searchit(curwin, curbuf, &t,
+ c == Ctrl_G ? FORWARD : BACKWARD,
+ pat, count, search_flags,
+ RE_SEARCH, 0, NULL, NULL);
+ --emsg_off;
++ pat[patlen] = save;
+ if (i)
+ {
+ is_state->search_start = is_state->match_start;
+ is_state->match_end = t;
+ is_state->match_start = t;
+! if (c == Ctrl_T && firstc != '?')
+ {
+ // Move just before the current match, so that when nv_search
+ // finishes the cursor will be put back on the match.
+***************
+*** 493,499 ****
+ static int
+ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
+ {
+! if (!do_incsearch_highlighting(firstc))
+ return FAIL;
+
+ // Add a character from under the cursor for 'incsearch'.
+--- 586,594 ----
+ static int
+ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
+ {
+! int skiplen, patlen;
+!
+! if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+ return FAIL;
+
+ // Add a character from under the cursor for 'incsearch'.
+***************
+*** 507,513 ****
+ // If 'ignorecase' and 'smartcase' are set and the
+ // command line has no uppercase characters, convert
+ // the character to lowercase.
+! if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff))
+ *c = MB_TOLOWER(*c);
+ if (*c != NUL)
+ {
+--- 602,608 ----
+ // If 'ignorecase' and 'smartcase' are set and the
+ // command line has no uppercase characters, convert
+ // the character to lowercase.
+! if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff + skiplen))
+ *c = MB_TOLOWER(*c);
+ if (*c != NUL)
+ {
+*** ../vim-8.1.0270/src/globals.h 2018-07-29 16:09:14.644945560 +0200
+--- src/globals.h 2018-08-11 15:13:44.359706095 +0200
+***************
+*** 345,353 ****
+ * a match within one line), search_match_endcol the column number of the
+ * character just after the match in the last line.
+ */
+! EXTERN int highlight_match INIT(= FALSE); /* show search match pos */
+! EXTERN linenr_T search_match_lines; /* lines of of matched string */
+! EXTERN colnr_T search_match_endcol; /* col nr of match end */
+
+ EXTERN int no_smartcase INIT(= FALSE); /* don't use 'smartcase' once */
+
+--- 345,357 ----
+ * a match within one line), search_match_endcol the column number of the
+ * character just after the match in the last line.
+ */
+! EXTERN int highlight_match INIT(= FALSE); // show search match pos
+! EXTERN linenr_T search_match_lines; // lines of of matched string
+! EXTERN colnr_T search_match_endcol; // col nr of match end
+! #ifdef FEAT_SEARCH_EXTRA
+! EXTERN linenr_T search_first_line INIT(= 0); // for :{FIRST},{last}s/pat
+! EXTERN linenr_T search_last_line INIT(= MAXLNUM); // for :{first},{LAST}s/pat
+! #endif
+
+ EXTERN int no_smartcase INIT(= FALSE); /* don't use 'smartcase' once */
+
+*** ../vim-8.1.0270/src/screen.c 2018-07-29 17:35:19.493750319 +0200
+--- src/screen.c 2018-08-11 15:26:39.760558152 +0200
+***************
+*** 7892,7897 ****
+--- 7892,7904 ----
+ long nmatched;
+ int save_called_emsg = called_emsg;
+
++ // for :{range}s/pat only highlight inside the range
++ if (lnum < search_first_line || lnum > search_last_line)
++ {
++ shl->lnum = 0;
++ return;
++ }
++
+ if (shl->lnum != 0)
+ {
+ /* Check for three situations:
+*** ../vim-8.1.0270/src/testdir/test_search.vim 2018-07-14 17:24:57.681329029 +0200
+--- src/testdir/test_search.vim 2018-08-11 16:27:47.757683001 +0200
+***************
+*** 362,367 ****
+--- 362,419 ----
+ bw!
+ endfunc
+
++ func Cmdline3_prep()
++ " need to disable char_avail,
++ " so that expansion of commandline works
++ call test_override("char_avail", 1)
++ new
++ call setline(1, [' 1', ' 2 the~e', ' 3 the theother'])
++ set incsearch
++ endfunc
++
++ func Cmdline3_cleanup()
++ set noincsearch
++ call test_override("char_avail", 0)
++ bw!
++ endfunc
++
++ func Test_search_cmdline3s()
++ if !exists('+incsearch')
++ return
++ endif
++ call Cmdline3_prep()
++ 1
++ call feedkeys(":%s/the\<c-l>/xxx\<cr>", 'tx')
++ call assert_equal(' 2 xxxe', getline('.'))
++
++ call Cmdline3_cleanup()
++ endfunc
++
++ func Test_search_cmdline3g()
++ if !exists('+incsearch')
++ return
++ endif
++ call Cmdline3_prep()
++ 1
++ call feedkeys(":g/the\<c-l>/d\<cr>", 'tx')
++ call assert_equal(' 3 the theother', getline(2))
++
++ call Cmdline3_cleanup()
++ endfunc
++
++ func Test_search_cmdline3v()
++ if !exists('+incsearch')
++ return
++ endif
++ call Cmdline3_prep()
++ 1
++ call feedkeys(":v/the\<c-l>/d\<cr>", 'tx')
++ call assert_equal(1, line('$'))
++ call assert_equal(' 2 the~e', getline(1))
++
++ call Cmdline3_cleanup()
++ endfunc
++
+ func Test_search_cmdline4()
+ if !exists('+incsearch')
+ return
+*** ../vim-8.1.0270/src/version.c 2018-08-11 14:41:48.326928864 +0200
+--- src/version.c 2018-08-11 16:29:55.060807807 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 271,
+ /**/
+
+--
+Every exit is an entrance into something else.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0272 b/data/vim/patches/8.1.0272
new file mode 100644
index 000000000..3269f6134
--- /dev/null
+++ b/data/vim/patches/8.1.0272
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0272
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0272
+Problem: Options test fails if temp var ends in slash. (Tom Briden)
+Solution: Check for optional slash. (closes #3308)
+Files: src/testdir/test_options.vim
+
+
+*** ../vim-8.1.0271/src/testdir/test_options.vim 2018-06-24 16:53:31.649909925 +0200
+--- src/testdir/test_options.vim 2018-08-11 17:50:19.189469171 +0200
+***************
+*** 344,350 ****
+ for var in ['$TEMPDIR', '$TMP', '$TEMP']
+ if exists(var)
+ let varvalue = substitute(expand(var), '\\', '/', 'g')
+! call assert_match(varvalue . '.\*', bskvalue)
+ endif
+ endfor
+ endfunc
+--- 344,350 ----
+ for var in ['$TEMPDIR', '$TMP', '$TEMP']
+ if exists(var)
+ let varvalue = substitute(expand(var), '\\', '/', 'g')
+! call assert_match(varvalue . '/\=\*', bskvalue)
+ endif
+ endfor
+ endfunc
+*** ../vim-8.1.0271/src/version.c 2018-08-11 16:40:39.068311966 +0200
+--- src/version.c 2018-08-11 17:51:47.096827991 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 272,
+ /**/
+
+--
+It is illegal for a driver to be blindfolded while operating a vehicle.
+ [real standing law in Alabama, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0273 b/data/vim/patches/8.1.0273
new file mode 100644
index 000000000..afaf1822b
--- /dev/null
+++ b/data/vim/patches/8.1.0273
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0273
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0273
+Problem: Invalid memory access when using 'incsearch'.
+Solution: Reset "patlen" when using previous search pattern.
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0272/src/ex_getln.c 2018-08-11 16:40:39.064311995 +0200
+--- src/ex_getln.c 2018-08-11 18:56:30.997198115 +0200
+***************
+*** 504,510 ****
+--- 504,514 ----
+ return FAIL;
+
+ if (firstc == ccline.cmdbuff[skiplen])
++ {
+ pat = last_search_pattern();
++ skiplen = 0;
++ patlen = STRLEN(pat);
++ }
+ else
+ pat = ccline.cmdbuff + skiplen;
+
+*** ../vim-8.1.0272/src/version.c 2018-08-11 17:52:57.848311971 +0200
+--- src/version.c 2018-08-11 19:01:58.394713331 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 273,
+ /**/
+
+--
+It is illegal for anyone to try and stop a child from playfully jumping over
+puddles of water.
+ [real standing law in California, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0274 b/data/vim/patches/8.1.0274
new file mode 100644
index 000000000..d63003f4d
--- /dev/null
+++ b/data/vim/patches/8.1.0274
@@ -0,0 +1,166 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0274
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0274
+Problem: 'incsearch' triggers on ":source".
+Solution: Check for the whole command name.
+Files: src/ex_getln.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0273/src/ex_getln.c 2018-08-11 19:02:18.038566056 +0200
+--- src/ex_getln.c 2018-08-11 19:08:55.639612407 +0200
+***************
+*** 293,299 ****
+ // Skip over "substitute" to find the pattern separator.
+ for (p = cmd; ASCII_ISALPHA(*p); ++p)
+ ;
+! if (*p != NUL)
+ {
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+--- 293,302 ----
+ // Skip over "substitute" to find the pattern separator.
+ for (p = cmd; ASCII_ISALPHA(*p); ++p)
+ ;
+! if (*p != NUL
+! && (STRNCMP(cmd, "substitute", p - cmd) == 0
+! || STRNCMP(cmd, "global", p - cmd) == 0
+! || STRNCMP(cmd, "vglobal", p - cmd) == 0))
+ {
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+*** ../vim-8.1.0273/src/testdir/test_search.vim 2018-08-11 16:40:39.068311966 +0200
+--- src/testdir/test_search.vim 2018-08-11 19:11:57.066276471 +0200
+***************
+*** 342,367 ****
+ bw!
+ endfunc
+
+- func Test_search_cmdline3()
+- if !exists('+incsearch')
+- return
+- endif
+- " need to disable char_avail,
+- " so that expansion of commandline works
+- call test_override("char_avail", 1)
+- new
+- call setline(1, [' 1', ' 2 the~e', ' 3 the theother'])
+- set incsearch
+- 1
+- " first match
+- call feedkeys("/the\<c-l>\<cr>", 'tx')
+- call assert_equal(' 2 the~e', getline('.'))
+- " clean up
+- set noincsearch
+- call test_override("char_avail", 0)
+- bw!
+- endfunc
+-
+ func Cmdline3_prep()
+ " need to disable char_avail,
+ " so that expansion of commandline works
+--- 342,347 ----
+***************
+*** 377,382 ****
+--- 357,375 ----
+ bw!
+ endfunc
+
++ func Test_search_cmdline3()
++ if !exists('+incsearch')
++ return
++ endif
++ call Cmdline3_prep()
++ 1
++ " first match
++ call feedkeys("/the\<c-l>\<cr>", 'tx')
++ call assert_equal(' 2 the~e', getline('.'))
++
++ call Cmdline3_cleanup()
++ endfunc
++
+ func Test_search_cmdline3s()
+ if !exists('+incsearch')
+ return
+***************
+*** 385,390 ****
+--- 378,389 ----
+ 1
+ call feedkeys(":%s/the\<c-l>/xxx\<cr>", 'tx')
+ call assert_equal(' 2 xxxe', getline('.'))
++ undo
++ call feedkeys(":%subs/the\<c-l>/xxx\<cr>", 'tx')
++ call assert_equal(' 2 xxxe', getline('.'))
++ undo
++ call feedkeys(":%substitute/the\<c-l>/xxx\<cr>", 'tx')
++ call assert_equal(' 2 xxxe', getline('.'))
+
+ call Cmdline3_cleanup()
+ endfunc
+***************
+*** 397,402 ****
+--- 396,404 ----
+ 1
+ call feedkeys(":g/the\<c-l>/d\<cr>", 'tx')
+ call assert_equal(' 3 the theother', getline(2))
++ undo
++ call feedkeys(":global/the\<c-l>/d\<cr>", 'tx')
++ call assert_equal(' 3 the theother', getline(2))
+
+ call Cmdline3_cleanup()
+ endfunc
+***************
+*** 410,415 ****
+--- 412,421 ----
+ call feedkeys(":v/the\<c-l>/d\<cr>", 'tx')
+ call assert_equal(1, line('$'))
+ call assert_equal(' 2 the~e', getline(1))
++ undo
++ call feedkeys(":vglobal/the\<c-l>/d\<cr>", 'tx')
++ call assert_equal(1, line('$'))
++ call assert_equal(' 2 the~e', getline(1))
+
+ call Cmdline3_cleanup()
+ endfunc
+***************
+*** 518,524 ****
+ " so that expansion of commandline works
+ call test_override("char_avail", 1)
+ new
+! let @/='b'
+ call setline(1, [' bbvimb', ''])
+ set incsearch
+ " first match
+--- 524,530 ----
+ " so that expansion of commandline works
+ call test_override("char_avail", 1)
+ new
+! let @/ = 'b'
+ call setline(1, [' bbvimb', ''])
+ set incsearch
+ " first match
+*** ../vim-8.1.0273/src/version.c 2018-08-11 19:02:18.038566056 +0200
+--- src/version.c 2018-08-11 19:11:29.546478790 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 274,
+ /**/
+
+--
+You can be stopped by the police for biking over 65 miles per hour.
+You are not allowed to walk across a street on your hands.
+ [real standing laws in Connecticut, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0275 b/data/vim/patches/8.1.0275
new file mode 100644
index 000000000..6617c72f0
--- /dev/null
+++ b/data/vim/patches/8.1.0275
@@ -0,0 +1,185 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0275
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0275
+Problem: 'incsearch' with :s doesn't start at cursor line.
+Solution: Set cursor before parsing address. (closes #3318)
+ Also accept a match at the start of the first line.
+Files: src/ex_getln.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0274/src/ex_getln.c 2018-08-11 19:20:45.042561404 +0200
+--- src/ex_getln.c 2018-08-12 15:48:20.176044564 +0200
+***************
+*** 316,323 ****
+ ea.line2 = 1;
+ ea.cmd = ccline.cmdbuff;
+ ea.addr_type = ADDR_LINES;
+- parse_cmd_address(&ea, &dummy);
+ curwin->w_cursor = is_state->search_start;
+ if (ea.addr_count > 0)
+ {
+ search_first_line = ea.line1;
+--- 316,323 ----
+ ea.line2 = 1;
+ ea.cmd = ccline.cmdbuff;
+ ea.addr_type = ADDR_LINES;
+ curwin->w_cursor = is_state->search_start;
++ parse_cmd_address(&ea, &dummy);
+ if (ea.addr_count > 0)
+ {
+ search_first_line = ea.line1;
+***************
+*** 401,406 ****
+--- 401,408 ----
+ #endif
+ if (!p_hls)
+ search_flags += SEARCH_KEEP;
++ if (search_first_line != 0)
++ search_flags += SEARCH_START;
+ c = ccline.cmdbuff[skiplen + patlen];
+ ccline.cmdbuff[skiplen + patlen] = NUL;
+ i = do_search(NULL, firstc == ':' ? '/' : firstc,
+*** ../vim-8.1.0274/src/testdir/test_search.vim 2018-08-11 19:20:45.042561404 +0200
+--- src/testdir/test_search.vim 2018-08-12 15:24:06.430745257 +0200
+***************
+*** 351,357 ****
+ set incsearch
+ endfunc
+
+! func Cmdline3_cleanup()
+ set noincsearch
+ call test_override("char_avail", 0)
+ bw!
+--- 351,357 ----
+ set incsearch
+ endfunc
+
+! func Incsearch_cleanup()
+ set noincsearch
+ call test_override("char_avail", 0)
+ bw!
+***************
+*** 367,373 ****
+ call feedkeys("/the\<c-l>\<cr>", 'tx')
+ call assert_equal(' 2 the~e', getline('.'))
+
+! call Cmdline3_cleanup()
+ endfunc
+
+ func Test_search_cmdline3s()
+--- 367,373 ----
+ call feedkeys("/the\<c-l>\<cr>", 'tx')
+ call assert_equal(' 2 the~e', getline('.'))
+
+! call Incsearch_cleanup()
+ endfunc
+
+ func Test_search_cmdline3s()
+***************
+*** 385,391 ****
+ call feedkeys(":%substitute/the\<c-l>/xxx\<cr>", 'tx')
+ call assert_equal(' 2 xxxe', getline('.'))
+
+! call Cmdline3_cleanup()
+ endfunc
+
+ func Test_search_cmdline3g()
+--- 385,391 ----
+ call feedkeys(":%substitute/the\<c-l>/xxx\<cr>", 'tx')
+ call assert_equal(' 2 xxxe', getline('.'))
+
+! call Incsearch_cleanup()
+ endfunc
+
+ func Test_search_cmdline3g()
+***************
+*** 400,406 ****
+ call feedkeys(":global/the\<c-l>/d\<cr>", 'tx')
+ call assert_equal(' 3 the theother', getline(2))
+
+! call Cmdline3_cleanup()
+ endfunc
+
+ func Test_search_cmdline3v()
+--- 400,406 ----
+ call feedkeys(":global/the\<c-l>/d\<cr>", 'tx')
+ call assert_equal(' 3 the theother', getline(2))
+
+! call Incsearch_cleanup()
+ endfunc
+
+ func Test_search_cmdline3v()
+***************
+*** 417,423 ****
+ call assert_equal(1, line('$'))
+ call assert_equal(' 2 the~e', getline(1))
+
+! call Cmdline3_cleanup()
+ endfunc
+
+ func Test_search_cmdline4()
+--- 417,423 ----
+ call assert_equal(1, line('$'))
+ call assert_equal(' 2 the~e', getline(1))
+
+! call Incsearch_cleanup()
+ endfunc
+
+ func Test_search_cmdline4()
+***************
+*** 797,802 ****
+--- 797,823 ----
+ call delete('Xscript')
+ endfunc
+
++ func Test_incsearch_substitute()
++ if !exists('+incsearch')
++ return
++ endif
++ call test_override("char_avail", 1)
++ new
++ set incsearch
++ for n in range(1, 10)
++ call setline(n, 'foo ' . n)
++ endfor
++ 4
++ call feedkeys(":.,.+2s/foo\<BS>o\<BS>o/xxx\<cr>", 'tx')
++ call assert_equal('foo 3', getline(3))
++ call assert_equal('xxx 4', getline(4))
++ call assert_equal('xxx 5', getline(5))
++ call assert_equal('xxx 6', getline(6))
++ call assert_equal('foo 7', getline(7))
++
++ call Incsearch_cleanup()
++ endfunc
++
+ func Test_search_undefined_behaviour()
+ if !has("terminal")
+ return
+*** ../vim-8.1.0274/src/version.c 2018-08-11 19:20:45.042561404 +0200
+--- src/version.c 2018-08-12 15:29:30.772309260 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 275,
+ /**/
+
+--
+Any sufficiently advanced technology is indistinguishable from magic.
+ Arthur C. Clarke
+Any sufficiently advanced bug is indistinguishable from a feature.
+ Rich Kulawiec
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0276 b/data/vim/patches/8.1.0276
new file mode 100644
index 000000000..469907c7a
--- /dev/null
+++ b/data/vim/patches/8.1.0276
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0276
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0276
+Problem: No test for 'incsearch' highlighting with :s.
+Solution: Add a screendump test.
+Files: src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_01.dump
+
+
+*** ../vim-8.1.0275/src/testdir/test_search.vim 2018-08-12 15:49:33.555438382 +0200
+--- src/testdir/test_search.vim 2018-08-12 16:25:27.296040799 +0200
+***************
+*** 818,823 ****
+--- 818,858 ----
+ call Incsearch_cleanup()
+ endfunc
+
++ " Similar to Test_incsearch_substitute() but with a screendump halfway.
++ func Test_incsearch_substitute_dump()
++ if !exists('+incsearch')
++ return
++ endif
++ if !CanRunVimInTerminal()
++ return
++ endif
++ call writefile([
++ \ 'set incsearch hlsearch scrolloff=0',
++ \ 'for n in range(1, 10)',
++ \ ' call setline(n, "foo " . n)',
++ \ 'endfor',
++ \ '3',
++ \ ], 'Xis_subst_script')
++ let buf = RunVimInTerminal('-S Xis_subst_script', {'rows': 9, 'cols': 70})
++ " Give Vim a chance to redraw to get rid of the spaces in line 2 caused by
++ " the 'ambiwidth' check.
++ sleep 100m
++
++ " Need to send one key at a time to force a redraw.
++ call term_sendkeys(buf, ':.,.+2s/')
++ sleep 100m
++ call term_sendkeys(buf, 'f')
++ sleep 100m
++ call term_sendkeys(buf, 'o')
++ sleep 100m
++ call term_sendkeys(buf, 'o')
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_01', {})
++
++ call term_sendkeys(buf, "\<Esc>")
++ call StopVimInTerminal(buf)
++ call delete('Xis_subst_script')
++ endfunc
++
+ func Test_search_undefined_behaviour()
+ if !has("terminal")
+ return
+*** ../vim-8.1.0275/src/testdir/dumps/Test_incsearch_substitute_01.dump 2018-08-12 16:26:20.299815699 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_01.dump 2018-08-12 16:14:00.068277624 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |1| @64
++ |f|o@1| |2| @64
++ |f+1&&|o@1| +0&&|3| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|4| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|5| @64
++ |f|o@1| |6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |:|.|,|.|+|2|s|/|f|o@1> @58
+*** ../vim-8.1.0275/src/version.c 2018-08-12 15:49:33.555438382 +0200
+--- src/version.c 2018-08-12 16:25:53.031933127 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 276,
+ /**/
+
+--
+It is illegal for anyone to give lighted cigars to dogs, cats, and other
+domesticated animal kept as pets.
+ [real standing law in Illinois, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0277 b/data/vim/patches/8.1.0277
new file mode 100644
index 000000000..a084393e4
--- /dev/null
+++ b/data/vim/patches/8.1.0277
@@ -0,0 +1,316 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0277
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0277
+Problem: 'incsearch' highlighting wrong in a few cases.
+Solution: Fix using last search pattern. Restore highlighting when changing
+ command. (issue #3321)
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_02.dump,
+ src/testdir/dumps/Test_incsearch_substitute_03.dump
+
+
+*** ../vim-8.1.0276/src/ex_getln.c 2018-08-12 15:49:33.551438415 +0200
+--- src/ex_getln.c 2018-08-12 17:27:32.113306665 +0200
+***************
+*** 300,306 ****
+ {
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+! if (end > p)
+ {
+ char_u *dummy;
+ exarg_T ea;
+--- 300,306 ----
+ {
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+! if (end > p || *end == delim)
+ {
+ char_u *dummy;
+ exarg_T ea;
+***************
+*** 341,346 ****
+--- 341,377 ----
+ return FALSE;
+ }
+
++ static void
++ finish_incsearch_highlighting(
++ int gotesc,
++ incsearch_state_T *is_state,
++ int call_update_screen)
++ {
++ if (is_state->did_incsearch)
++ {
++ is_state->did_incsearch = FALSE;
++ if (gotesc)
++ curwin->w_cursor = is_state->save_cursor;
++ else
++ {
++ if (!EQUAL_POS(is_state->save_cursor, is_state->search_start))
++ {
++ // put the '" mark at the original position
++ curwin->w_cursor = is_state->save_cursor;
++ setpcmark();
++ }
++ curwin->w_cursor = is_state->search_start;
++ }
++ restore_viewstate(&is_state->old_viewstate);
++ highlight_match = FALSE;
++ validate_cursor(); /* needed for TAB */
++ if (call_update_screen)
++ update_screen(SOME_VALID);
++ else
++ redraw_all_later(SOME_VALID);
++ }
++ }
++
+ /*
+ * Do 'incsearch' highlighting if desired.
+ */
+***************
+*** 357,366 ****
+ #ifdef FEAT_RELTIME
+ proftime_T tm;
+ #endif
+! int c;
+
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+ return;
+
+ // If there is a character waiting, search and redraw later.
+ if (char_avail())
+--- 388,401 ----
+ #ifdef FEAT_RELTIME
+ proftime_T tm;
+ #endif
+! int next_char;
+! int use_last_pat;
+
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
++ {
++ finish_incsearch_highlighting(FALSE, is_state, TRUE);
+ return;
++ }
+
+ // If there is a character waiting, search and redraw later.
+ if (char_avail())
+***************
+*** 381,388 ****
+ }
+ save_last_search_pattern();
+
+! // If there is no command line, don't do anything.
+! if (patlen == 0)
+ {
+ i = 0;
+ set_no_hlsearch(TRUE); // turn off previous highlight
+--- 416,428 ----
+ }
+ save_last_search_pattern();
+
+! // Use the previous pattern for ":s//".
+! next_char = ccline.cmdbuff[skiplen + patlen];
+! use_last_pat = patlen == 0 && skiplen > 0
+! && ccline.cmdbuff[skiplen - 1] == next_char;
+!
+! // If there is no pattern, don't do anything.
+! if (patlen == 0 && !use_last_pat)
+ {
+ i = 0;
+ set_no_hlsearch(TRUE); // turn off previous highlight
+***************
+*** 403,409 ****
+ search_flags += SEARCH_KEEP;
+ if (search_first_line != 0)
+ search_flags += SEARCH_START;
+- c = ccline.cmdbuff[skiplen + patlen];
+ ccline.cmdbuff[skiplen + patlen] = NUL;
+ i = do_search(NULL, firstc == ':' ? '/' : firstc,
+ ccline.cmdbuff + skiplen, count, search_flags,
+--- 443,448 ----
+***************
+*** 413,419 ****
+ NULL, NULL
+ #endif
+ );
+! ccline.cmdbuff[skiplen + patlen] = c;
+ --emsg_off;
+
+ if (curwin->w_cursor.lnum < search_first_line
+--- 452,458 ----
+ NULL, NULL
+ #endif
+ );
+! ccline.cmdbuff[skiplen + patlen] = next_char;
+ --emsg_off;
+
+ if (curwin->w_cursor.lnum < search_first_line
+***************
+*** 459,469 ****
+
+ // Disable 'hlsearch' highlighting if the pattern matches everything.
+ // Avoids a flash when typing "foo\|".
+! c = ccline.cmdbuff[skiplen + patlen];
+! ccline.cmdbuff[skiplen + patlen] = NUL;
+! if (empty_pattern(ccline.cmdbuff))
+! set_no_hlsearch(TRUE);
+! ccline.cmdbuff[skiplen + patlen] = c;
+
+ validate_cursor();
+ // May redraw the status line to show the cursor position.
+--- 498,511 ----
+
+ // Disable 'hlsearch' highlighting if the pattern matches everything.
+ // Avoids a flash when typing "foo\|".
+! if (!use_last_pat)
+! {
+! next_char = ccline.cmdbuff[skiplen + patlen];
+! ccline.cmdbuff[skiplen + patlen] = NUL;
+! if (empty_pattern(ccline.cmdbuff))
+! set_no_hlsearch(TRUE);
+! ccline.cmdbuff[skiplen + patlen] = next_char;
+! }
+
+ validate_cursor();
+ // May redraw the status line to show the cursor position.
+***************
+*** 628,657 ****
+ }
+ return OK;
+ }
+-
+- static void
+- finish_incsearch_highlighting(int gotesc, incsearch_state_T *is_state)
+- {
+- if (is_state->did_incsearch)
+- {
+- if (gotesc)
+- curwin->w_cursor = is_state->save_cursor;
+- else
+- {
+- if (!EQUAL_POS(is_state->save_cursor, is_state->search_start))
+- {
+- // put the '" mark at the original position
+- curwin->w_cursor = is_state->save_cursor;
+- setpcmark();
+- }
+- curwin->w_cursor = is_state->search_start;
+- }
+- restore_viewstate(&is_state->old_viewstate);
+- highlight_match = FALSE;
+- validate_cursor(); /* needed for TAB */
+- redraw_all_later(SOME_VALID);
+- }
+- }
+ #endif
+
+ /*
+--- 670,675 ----
+***************
+*** 2301,2307 ****
+ ccline.xpc = NULL;
+
+ #ifdef FEAT_SEARCH_EXTRA
+! finish_incsearch_highlighting(gotesc, &is_state);
+ #endif
+
+ if (ccline.cmdbuff != NULL)
+--- 2319,2325 ----
+ ccline.xpc = NULL;
+
+ #ifdef FEAT_SEARCH_EXTRA
+! finish_incsearch_highlighting(gotesc, &is_state, FALSE);
+ #endif
+
+ if (ccline.cmdbuff != NULL)
+*** ../vim-8.1.0276/src/testdir/test_search.vim 2018-08-12 16:26:43.427713531 +0200
+--- src/testdir/test_search.vim 2018-08-12 17:33:19.978924077 +0200
+***************
+*** 839,844 ****
+--- 839,845 ----
+ sleep 100m
+
+ " Need to send one key at a time to force a redraw.
++ " Select three lines at the cursor with typed pattern.
+ call term_sendkeys(buf, ':.,.+2s/')
+ sleep 100m
+ call term_sendkeys(buf, 'f')
+***************
+*** 846,852 ****
+--- 847,867 ----
+ call term_sendkeys(buf, 'o')
+ sleep 100m
+ call term_sendkeys(buf, 'o')
++ sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_01', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ " Select three lines at the cursor using previous pattern.
++ call term_sendkeys(buf, "/foo\<CR>")
++ sleep 100m
++ call term_sendkeys(buf, ':.,.+2s//')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_02', {})
++
++ " Deleting last slash should remove the match.
++ call term_sendkeys(buf, "\<BS>")
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_03', {})
+
+ call term_sendkeys(buf, "\<Esc>")
+ call StopVimInTerminal(buf)
+*** ../vim-8.1.0276/src/testdir/dumps/Test_incsearch_substitute_02.dump 2018-08-12 17:37:49.457116653 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_02.dump 2018-08-12 17:02:58.756857477 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |1| @64
++ |f|o@1| |2| @64
++ |f|o@1| |3| @64
++ |f+1&&|o@1| +0&&|4| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|5| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |:|.|,|.|+|2|s|/@1> @60
+*** ../vim-8.1.0276/src/testdir/dumps/Test_incsearch_substitute_03.dump 2018-08-12 17:37:49.465116598 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_03.dump 2018-08-12 17:33:35.062824462 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffff4012|o@1| +0&#ffffff0|1| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|2| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|3| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|4| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|5| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|6| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|7| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|8| @64
++ |:|.|,|.|+|2|s|/> @61
+*** ../vim-8.1.0276/src/version.c 2018-08-12 16:26:43.427713531 +0200
+--- src/version.c 2018-08-12 16:57:04.292430111 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 277,
+ /**/
+
+--
+Citizens are not allowed to attend a movie house or theater nor ride in a
+public streetcar within at least four hours after eating garlic.
+ [real standing law in Indiana, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0278 b/data/vim/patches/8.1.0278
new file mode 100644
index 000000000..e11c7ee2e
--- /dev/null
+++ b/data/vim/patches/8.1.0278
@@ -0,0 +1,95 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0278
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0278
+Problem: 'incsearch' highlighting does not accept reverse range.
+Solution: Swap the range when needed. (issue #3321)
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_04.dump
+
+
+*** ../vim-8.1.0277/src/ex_getln.c 2018-08-12 17:38:50.544700253 +0200
+--- src/ex_getln.c 2018-08-12 21:46:02.876827779 +0200
+***************
+*** 320,327 ****
+ parse_cmd_address(&ea, &dummy);
+ if (ea.addr_count > 0)
+ {
+! search_first_line = ea.line1;
+! search_last_line = ea.line2;
+ }
+ else if (*cmd == 's')
+ {
+--- 320,336 ----
+ parse_cmd_address(&ea, &dummy);
+ if (ea.addr_count > 0)
+ {
+! // Allow for reverse match.
+! if (ea.line2 < ea.line1)
+! {
+! search_first_line = ea.line2;
+! search_last_line = ea.line1;
+! }
+! else
+! {
+! search_first_line = ea.line1;
+! search_last_line = ea.line2;
+! }
+ }
+ else if (*cmd == 's')
+ {
+*** ../vim-8.1.0277/src/testdir/test_search.vim 2018-08-12 17:38:50.544700253 +0200
+--- src/testdir/test_search.vim 2018-08-12 21:47:42.928159249 +0200
+***************
+*** 862,867 ****
+--- 862,873 ----
+ call term_sendkeys(buf, "\<BS>")
+ sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_03', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ " Reverse range is accepted
++ call term_sendkeys(buf, ':5,2s/foo')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_04', {})
+
+ call term_sendkeys(buf, "\<Esc>")
+ call StopVimInTerminal(buf)
+*** ../vim-8.1.0277/src/testdir/dumps/Test_incsearch_substitute_04.dump 2018-08-12 21:51:53.814482196 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_04.dump 2018-08-12 21:48:10.107977608 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |1| @64
++ |f+1&&|o@1| +0&&|2| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|3| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|4| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|5| @64
++ |f|o@1| |6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |:|5|,|2|s|/|f|o@1> @60
+*** ../vim-8.1.0277/src/version.c 2018-08-12 17:38:50.544700253 +0200
+--- src/version.c 2018-08-12 21:50:56.598864724 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 278,
+ /**/
+
+--
+Kisses may last for as much as, but no more than, five minutes.
+ [real standing law in Iowa, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0279 b/data/vim/patches/8.1.0279
new file mode 100644
index 000000000..f34949ad1
--- /dev/null
+++ b/data/vim/patches/8.1.0279
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0279
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0279
+Problem: 'incsearch' highlighting does not skip white space.
+Solution: Skip white space after the command. (issue #3321)
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_05.dump
+
+
+*** ../vim-8.1.0278/src/ex_getln.c 2018-08-12 21:52:56.078065882 +0200
+--- src/ex_getln.c 2018-08-12 21:56:40.340566130 +0200
+***************
+*** 293,303 ****
+ // Skip over "substitute" to find the pattern separator.
+ for (p = cmd; ASCII_ISALPHA(*p); ++p)
+ ;
+! if (*p != NUL
+ && (STRNCMP(cmd, "substitute", p - cmd) == 0
+ || STRNCMP(cmd, "global", p - cmd) == 0
+ || STRNCMP(cmd, "vglobal", p - cmd) == 0))
+ {
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+ if (end > p || *end == delim)
+--- 293,304 ----
+ // Skip over "substitute" to find the pattern separator.
+ for (p = cmd; ASCII_ISALPHA(*p); ++p)
+ ;
+! if (*skipwhite(p) != NUL
+ && (STRNCMP(cmd, "substitute", p - cmd) == 0
+ || STRNCMP(cmd, "global", p - cmd) == 0
+ || STRNCMP(cmd, "vglobal", p - cmd) == 0))
+ {
++ p = skipwhite(p);
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+ if (end > p || *end == delim)
+*** ../vim-8.1.0278/src/testdir/test_search.vim 2018-08-12 21:52:56.078065882 +0200
+--- src/testdir/test_search.vim 2018-08-12 22:00:15.759125243 +0200
+***************
+*** 868,875 ****
+--- 868,881 ----
+ call term_sendkeys(buf, ':5,2s/foo')
+ sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_04', {})
++ call term_sendkeys(buf, "\<Esc>")
+
++ " White space after the command is skipped
++ call term_sendkeys(buf, ':2,3sub /fo')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_05', {})
+ call term_sendkeys(buf, "\<Esc>")
++
+ call StopVimInTerminal(buf)
+ call delete('Xis_subst_script')
+ endfunc
+*** ../vim-8.1.0278/src/testdir/dumps/Test_incsearch_substitute_05.dump 2018-08-12 22:02:46.162119119 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_05.dump 2018-08-12 22:00:31.507019900 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |1| @64
++ |f+1&&|o|o+0&&| |2| @64
++ |f+0&#ffff4012|o|o+0&#ffffff0| |3| @64
++ |f|o@1| |4| @64
++ |f|o@1| |5| @64
++ |f|o@1| |6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |:|2|,|3|s|u|b| @1|/|f|o> @57
+*** ../vim-8.1.0278/src/version.c 2018-08-12 21:52:56.078065882 +0200
+--- src/version.c 2018-08-12 21:58:09.031972919 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 279,
+ /**/
+
+--
+It is illegal to rob a bank and then shoot at the bank teller with a water
+pistol.
+ [real standing law in Louisana, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0280 b/data/vim/patches/8.1.0280
new file mode 100644
index 000000000..0203c3b8f
--- /dev/null
+++ b/data/vim/patches/8.1.0280
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0280
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0280
+Problem: 'incsearch' highlighting does not work for ":g!/".
+Solution: Skip the exclamation mark. (Hirohito Higashi)
+Files: src/ex_getln.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0279/src/ex_getln.c 2018-08-12 22:02:55.494056691 +0200
+--- src/ex_getln.c 2018-08-13 22:53:06.873250045 +0200
+***************
+*** 298,303 ****
+--- 298,310 ----
+ || STRNCMP(cmd, "global", p - cmd) == 0
+ || STRNCMP(cmd, "vglobal", p - cmd) == 0))
+ {
++ // Check for "global!/".
++ if (*cmd == 'g' && *p == '!')
++ {
++ p++;
++ if (*skipwhite(p) == NUL)
++ return FALSE;
++ }
+ p = skipwhite(p);
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+*** ../vim-8.1.0279/src/testdir/test_search.vim 2018-08-12 22:02:55.494056691 +0200
+--- src/testdir/test_search.vim 2018-08-13 22:50:49.374202563 +0200
+***************
+*** 399,404 ****
+--- 399,412 ----
+ undo
+ call feedkeys(":global/the\<c-l>/d\<cr>", 'tx')
+ call assert_equal(' 3 the theother', getline(2))
++ undo
++ call feedkeys(":g!/the\<c-l>/d\<cr>", 'tx')
++ call assert_equal(1, line('$'))
++ call assert_equal(' 2 the~e', getline(1))
++ undo
++ call feedkeys(":global!/the\<c-l>/d\<cr>", 'tx')
++ call assert_equal(1, line('$'))
++ call assert_equal(' 2 the~e', getline(1))
+
+ call Incsearch_cleanup()
+ endfunc
+*** ../vim-8.1.0279/src/version.c 2018-08-12 22:02:55.494056691 +0200
+--- src/version.c 2018-08-13 22:51:49.437786199 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 280,
+ /**/
+
+--
+A parent can be arrested if his child cannot hold back a burp during a church
+service.
+ [real standing law in Nebraska, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0281 b/data/vim/patches/8.1.0281
new file mode 100644
index 000000000..9efb07608
--- /dev/null
+++ b/data/vim/patches/8.1.0281
@@ -0,0 +1,738 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0281
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0281
+Problem: Parsing command modifiers is not separated.
+Solution: Move command modifier parsing to a separate function.
+Files: src/ex_docmd.c, src/proto/ex_docmd.pro, src/ex_cmds.h,
+ src/globals.h, src/feature.h
+
+
+*** ../vim-8.1.0280/src/ex_docmd.c 2018-08-10 23:13:07.934024645 +0200
+--- src/ex_docmd.c 2018-08-13 23:27:03.980298529 +0200
+***************
+*** 1709,1721 ****
+ char_u *errormsg = NULL; /* error message */
+ char_u *after_modifier = NULL;
+ exarg_T ea; /* Ex command arguments */
+- long verbose_save = -1;
+ int save_msg_scroll = msg_scroll;
+- int save_msg_silent = -1;
+- int did_esilent = 0;
+- #ifdef HAVE_SANDBOX
+- int did_sandbox = FALSE;
+- #endif
+ cmdmod_T save_cmdmod;
+ int ni; /* set when Not Implemented */
+ char_u *cmd;
+--- 1709,1715 ----
+***************
+*** 1742,1748 ****
+ * recursive calls.
+ */
+ save_cmdmod = cmdmod;
+- vim_memset(&cmdmod, 0, sizeof(cmdmod));
+
+ /* "#!anything" is handled like a comment. */
+ if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
+--- 1736,1741 ----
+***************
+*** 1750,1977 ****
+
+ /*
+ * Repeat until no more command modifiers are found.
+ */
+ ea.cmd = *cmdlinep;
+! for (;;)
+! {
+! /*
+! * 1. Skip comment lines and leading white space and colons.
+! */
+! while (*ea.cmd == ' ' || *ea.cmd == '\t' || *ea.cmd == ':')
+! ++ea.cmd;
+!
+! /* in ex mode, an empty line works like :+ */
+! if (*ea.cmd == NUL && exmode_active
+! && (getline_equal(fgetline, cookie, getexmodeline)
+! || getline_equal(fgetline, cookie, getexline))
+! && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+! {
+! ea.cmd = (char_u *)"+";
+! ex_pressedreturn = TRUE;
+! }
+!
+! /* ignore comment and empty lines */
+! if (*ea.cmd == '"')
+! goto doend;
+! if (*ea.cmd == NUL)
+! {
+! ex_pressedreturn = TRUE;
+! goto doend;
+! }
+!
+! /*
+! * 2. Handle command modifiers.
+! */
+! p = skip_range(ea.cmd, NULL);
+! switch (*p)
+! {
+! /* When adding an entry, also modify cmd_exists(). */
+! case 'a': if (!checkforcmd(&ea.cmd, "aboveleft", 3))
+! break;
+! cmdmod.split |= WSP_ABOVE;
+! continue;
+!
+! case 'b': if (checkforcmd(&ea.cmd, "belowright", 3))
+! {
+! cmdmod.split |= WSP_BELOW;
+! continue;
+! }
+! if (checkforcmd(&ea.cmd, "browse", 3))
+! {
+! #ifdef FEAT_BROWSE_CMD
+! cmdmod.browse = TRUE;
+! #endif
+! continue;
+! }
+! if (!checkforcmd(&ea.cmd, "botright", 2))
+! break;
+! cmdmod.split |= WSP_BOT;
+! continue;
+!
+! case 'c': if (!checkforcmd(&ea.cmd, "confirm", 4))
+! break;
+! #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+! cmdmod.confirm = TRUE;
+! #endif
+! continue;
+!
+! case 'k': if (checkforcmd(&ea.cmd, "keepmarks", 3))
+! {
+! cmdmod.keepmarks = TRUE;
+! continue;
+! }
+! if (checkforcmd(&ea.cmd, "keepalt", 5))
+! {
+! cmdmod.keepalt = TRUE;
+! continue;
+! }
+! if (checkforcmd(&ea.cmd, "keeppatterns", 5))
+! {
+! cmdmod.keeppatterns = TRUE;
+! continue;
+! }
+! if (!checkforcmd(&ea.cmd, "keepjumps", 5))
+! break;
+! cmdmod.keepjumps = TRUE;
+! continue;
+!
+! case 'f': /* only accept ":filter {pat} cmd" */
+! {
+! char_u *reg_pat;
+!
+! if (!checkforcmd(&p, "filter", 4)
+! || *p == NUL || ends_excmd(*p))
+! break;
+! if (*p == '!')
+! {
+! cmdmod.filter_force = TRUE;
+! p = skipwhite(p + 1);
+! if (*p == NUL || ends_excmd(*p))
+! break;
+! }
+! p = skip_vimgrep_pat(p, &reg_pat, NULL);
+! if (p == NULL || *p == NUL)
+! break;
+! cmdmod.filter_regmatch.regprog =
+! vim_regcomp(reg_pat, RE_MAGIC);
+! if (cmdmod.filter_regmatch.regprog == NULL)
+! break;
+! ea.cmd = p;
+! continue;
+! }
+!
+! /* ":hide" and ":hide | cmd" are not modifiers */
+! case 'h': if (p != ea.cmd || !checkforcmd(&p, "hide", 3)
+! || *p == NUL || ends_excmd(*p))
+! break;
+! ea.cmd = p;
+! cmdmod.hide = TRUE;
+! continue;
+!
+! case 'l': if (checkforcmd(&ea.cmd, "lockmarks", 3))
+! {
+! cmdmod.lockmarks = TRUE;
+! continue;
+! }
+!
+! if (!checkforcmd(&ea.cmd, "leftabove", 5))
+! break;
+! cmdmod.split |= WSP_ABOVE;
+! continue;
+!
+! case 'n': if (checkforcmd(&ea.cmd, "noautocmd", 3))
+! {
+! if (cmdmod.save_ei == NULL)
+! {
+! /* Set 'eventignore' to "all". Restore the
+! * existing option value later. */
+! cmdmod.save_ei = vim_strsave(p_ei);
+! set_string_option_direct((char_u *)"ei", -1,
+! (char_u *)"all", OPT_FREE, SID_NONE);
+! }
+! continue;
+! }
+! if (!checkforcmd(&ea.cmd, "noswapfile", 3))
+! break;
+! cmdmod.noswapfile = TRUE;
+! continue;
+!
+! case 'r': if (!checkforcmd(&ea.cmd, "rightbelow", 6))
+! break;
+! cmdmod.split |= WSP_BELOW;
+! continue;
+!
+! case 's': if (checkforcmd(&ea.cmd, "sandbox", 3))
+! {
+! #ifdef HAVE_SANDBOX
+! if (!did_sandbox)
+! ++sandbox;
+! did_sandbox = TRUE;
+ #endif
+! continue;
+! }
+! if (!checkforcmd(&ea.cmd, "silent", 3))
+! break;
+! if (save_msg_silent == -1)
+! save_msg_silent = msg_silent;
+! ++msg_silent;
+! if (*ea.cmd == '!' && !VIM_ISWHITE(ea.cmd[-1]))
+! {
+! /* ":silent!", but not "silent !cmd" */
+! ea.cmd = skipwhite(ea.cmd + 1);
+! ++emsg_silent;
+! ++did_esilent;
+! }
+! continue;
+!
+! case 't': if (checkforcmd(&p, "tab", 3))
+! {
+! long tabnr = get_address(&ea, &ea.cmd, ADDR_TABS,
+! ea.skip, FALSE, 1);
+! if (tabnr == MAXLNUM)
+! cmdmod.tab = tabpage_index(curtab) + 1;
+! else
+! {
+! if (tabnr < 0 || tabnr > LAST_TAB_NR)
+! {
+! errormsg = (char_u *)_(e_invrange);
+! goto doend;
+! }
+! cmdmod.tab = tabnr + 1;
+! }
+! ea.cmd = p;
+! continue;
+! }
+! if (!checkforcmd(&ea.cmd, "topleft", 2))
+! break;
+! cmdmod.split |= WSP_TOP;
+! continue;
+!
+! case 'u': if (!checkforcmd(&ea.cmd, "unsilent", 3))
+! break;
+! if (save_msg_silent == -1)
+! save_msg_silent = msg_silent;
+! msg_silent = 0;
+! continue;
+
+- case 'v': if (checkforcmd(&ea.cmd, "vertical", 4))
+- {
+- cmdmod.split |= WSP_VERT;
+- continue;
+- }
+- if (!checkforcmd(&p, "verbose", 4))
+- break;
+- if (verbose_save < 0)
+- verbose_save = p_verbose;
+- if (vim_isdigit(*ea.cmd))
+- p_verbose = atoi((char *)ea.cmd);
+- else
+- p_verbose = 1;
+- ea.cmd = p;
+- continue;
+- }
+- break;
+- }
+ after_modifier = ea.cmd;
+
+ #ifdef FEAT_EVAL
+--- 1743,1760 ----
+
+ /*
+ * Repeat until no more command modifiers are found.
++ * The "ea" structure holds the arguments that can be used.
+ */
+ ea.cmd = *cmdlinep;
+! ea.cmdlinep = cmdlinep;
+! ea.getline = fgetline;
+! ea.cookie = cookie;
+! #ifdef FEAT_EVAL
+! ea.cstack = cstack;
+ #endif
+! if (parse_command_modifiers(&ea, &errormsg) == FAIL)
+! goto doend;
+
+ after_modifier = ea.cmd;
+
+ #ifdef FEAT_EVAL
+***************
+*** 2688,2712 ****
+
+ /* The :try command saves the emsg_silent flag, reset it here when
+ * ":silent! try" was used, it should only apply to :try itself. */
+! if (ea.cmdidx == CMD_try && did_esilent > 0)
+ {
+! emsg_silent -= did_esilent;
+ if (emsg_silent < 0)
+ emsg_silent = 0;
+! did_esilent = 0;
+ }
+
+ /*
+ * 7. Execute the command.
+- *
+- * The "ea" structure holds the arguments that can be used.
+ */
+- ea.cmdlinep = cmdlinep;
+- ea.getline = fgetline;
+- ea.cookie = cookie;
+- #ifdef FEAT_EVAL
+- ea.cstack = cstack;
+- #endif
+
+ #ifdef FEAT_USR_CMDS
+ if (IS_USER_CMDIDX(ea.cmdidx))
+--- 2471,2487 ----
+
+ /* The :try command saves the emsg_silent flag, reset it here when
+ * ":silent! try" was used, it should only apply to :try itself. */
+! if (ea.cmdidx == CMD_try && ea.did_esilent > 0)
+ {
+! emsg_silent -= ea.did_esilent;
+ if (emsg_silent < 0)
+ emsg_silent = 0;
+! ea.did_esilent = 0;
+ }
+
+ /*
+ * 7. Execute the command.
+ */
+
+ #ifdef FEAT_USR_CMDS
+ if (IS_USER_CMDIDX(ea.cmdidx))
+***************
+*** 2775,2782 ****
+ ? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
+ #endif
+
+! if (verbose_save >= 0)
+! p_verbose = verbose_save;
+
+ if (cmdmod.save_ei != NULL)
+ {
+--- 2550,2557 ----
+ ? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
+ #endif
+
+! if (ea.verbose_save >= 0)
+! p_verbose = ea.verbose_save;
+
+ if (cmdmod.save_ei != NULL)
+ {
+***************
+*** 2791,2803 ****
+
+ cmdmod = save_cmdmod;
+
+! if (save_msg_silent != -1)
+ {
+ /* messages could be enabled for a serious error, need to check if the
+ * counters don't become negative */
+! if (!did_emsg || msg_silent > save_msg_silent)
+! msg_silent = save_msg_silent;
+! emsg_silent -= did_esilent;
+ if (emsg_silent < 0)
+ emsg_silent = 0;
+ /* Restore msg_scroll, it's set by file I/O commands, even when no
+--- 2566,2578 ----
+
+ cmdmod = save_cmdmod;
+
+! if (ea.save_msg_silent != -1)
+ {
+ /* messages could be enabled for a serious error, need to check if the
+ * counters don't become negative */
+! if (!did_emsg || msg_silent > ea.save_msg_silent)
+! msg_silent = ea.save_msg_silent;
+! emsg_silent -= ea.did_esilent;
+ if (emsg_silent < 0)
+ emsg_silent = 0;
+ /* Restore msg_scroll, it's set by file I/O commands, even when no
+***************
+*** 2811,2817 ****
+ }
+
+ #ifdef HAVE_SANDBOX
+! if (did_sandbox)
+ --sandbox;
+ #endif
+
+--- 2586,2592 ----
+ }
+
+ #ifdef HAVE_SANDBOX
+! if (ea.did_sandbox)
+ --sandbox;
+ #endif
+
+***************
+*** 2829,2834 ****
+--- 2604,2853 ----
+ #endif
+
+ /*
++ * Parse and skip over command modifiers:
++ * - update eap->cmd
++ * - store flags in "cmdmod".
++ * - Set ex_pressedreturn for an empty command line.
++ * - set msg_silent for ":silent"
++ * - set p_verbose for ":verbose"
++ * - Increment "sandbox" for ":sandbox"
++ * Return FAIL when the command is not to be executed.
++ * May set "errormsg" to an error message.
++ */
++ int
++ parse_command_modifiers(exarg_T *eap, char_u **errormsg)
++ {
++ char_u *p;
++
++ vim_memset(&cmdmod, 0, sizeof(cmdmod));
++ eap->verbose_save = -1;
++ eap->save_msg_silent = -1;
++
++ for (;;)
++ {
++ /*
++ * 1. Skip comment lines and leading white space and colons.
++ */
++ while (*eap->cmd == ' ' || *eap->cmd == '\t' || *eap->cmd == ':')
++ ++eap->cmd;
++
++ /* in ex mode, an empty line works like :+ */
++ if (*eap->cmd == NUL && exmode_active
++ && (getline_equal(eap->getline, eap->cookie, getexmodeline)
++ || getline_equal(eap->getline, eap->cookie, getexline))
++ && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
++ {
++ eap->cmd = (char_u *)"+";
++ ex_pressedreturn = TRUE;
++ }
++
++ /* ignore comment and empty lines */
++ if (*eap->cmd == '"')
++ return FAIL;
++ if (*eap->cmd == NUL)
++ {
++ ex_pressedreturn = TRUE;
++ return FAIL;
++ }
++
++ /*
++ * 2. Handle command modifiers.
++ */
++ p = skip_range(eap->cmd, NULL);
++ switch (*p)
++ {
++ /* When adding an entry, also modify cmd_exists(). */
++ case 'a': if (!checkforcmd(&eap->cmd, "aboveleft", 3))
++ break;
++ cmdmod.split |= WSP_ABOVE;
++ continue;
++
++ case 'b': if (checkforcmd(&eap->cmd, "belowright", 3))
++ {
++ cmdmod.split |= WSP_BELOW;
++ continue;
++ }
++ if (checkforcmd(&eap->cmd, "browse", 3))
++ {
++ #ifdef FEAT_BROWSE_CMD
++ cmdmod.browse = TRUE;
++ #endif
++ continue;
++ }
++ if (!checkforcmd(&eap->cmd, "botright", 2))
++ break;
++ cmdmod.split |= WSP_BOT;
++ continue;
++
++ case 'c': if (!checkforcmd(&eap->cmd, "confirm", 4))
++ break;
++ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
++ cmdmod.confirm = TRUE;
++ #endif
++ continue;
++
++ case 'k': if (checkforcmd(&eap->cmd, "keepmarks", 3))
++ {
++ cmdmod.keepmarks = TRUE;
++ continue;
++ }
++ if (checkforcmd(&eap->cmd, "keepalt", 5))
++ {
++ cmdmod.keepalt = TRUE;
++ continue;
++ }
++ if (checkforcmd(&eap->cmd, "keeppatterns", 5))
++ {
++ cmdmod.keeppatterns = TRUE;
++ continue;
++ }
++ if (!checkforcmd(&eap->cmd, "keepjumps", 5))
++ break;
++ cmdmod.keepjumps = TRUE;
++ continue;
++
++ case 'f': /* only accept ":filter {pat} cmd" */
++ {
++ char_u *reg_pat;
++
++ if (!checkforcmd(&p, "filter", 4)
++ || *p == NUL || ends_excmd(*p))
++ break;
++ if (*p == '!')
++ {
++ cmdmod.filter_force = TRUE;
++ p = skipwhite(p + 1);
++ if (*p == NUL || ends_excmd(*p))
++ break;
++ }
++ p = skip_vimgrep_pat(p, &reg_pat, NULL);
++ if (p == NULL || *p == NUL)
++ break;
++ cmdmod.filter_regmatch.regprog =
++ vim_regcomp(reg_pat, RE_MAGIC);
++ if (cmdmod.filter_regmatch.regprog == NULL)
++ break;
++ eap->cmd = p;
++ continue;
++ }
++
++ /* ":hide" and ":hide | cmd" are not modifiers */
++ case 'h': if (p != eap->cmd || !checkforcmd(&p, "hide", 3)
++ || *p == NUL || ends_excmd(*p))
++ break;
++ eap->cmd = p;
++ cmdmod.hide = TRUE;
++ continue;
++
++ case 'l': if (checkforcmd(&eap->cmd, "lockmarks", 3))
++ {
++ cmdmod.lockmarks = TRUE;
++ continue;
++ }
++
++ if (!checkforcmd(&eap->cmd, "leftabove", 5))
++ break;
++ cmdmod.split |= WSP_ABOVE;
++ continue;
++
++ case 'n': if (checkforcmd(&eap->cmd, "noautocmd", 3))
++ {
++ if (cmdmod.save_ei == NULL)
++ {
++ /* Set 'eventignore' to "all". Restore the
++ * existing option value later. */
++ cmdmod.save_ei = vim_strsave(p_ei);
++ set_string_option_direct((char_u *)"ei", -1,
++ (char_u *)"all", OPT_FREE, SID_NONE);
++ }
++ continue;
++ }
++ if (!checkforcmd(&eap->cmd, "noswapfile", 3))
++ break;
++ cmdmod.noswapfile = TRUE;
++ continue;
++
++ case 'r': if (!checkforcmd(&eap->cmd, "rightbelow", 6))
++ break;
++ cmdmod.split |= WSP_BELOW;
++ continue;
++
++ case 's': if (checkforcmd(&eap->cmd, "sandbox", 3))
++ {
++ #ifdef HAVE_SANDBOX
++ if (!eap->did_sandbox)
++ ++sandbox;
++ eap->did_sandbox = TRUE;
++ #endif
++ continue;
++ }
++ if (!checkforcmd(&eap->cmd, "silent", 3))
++ break;
++ if (eap->save_msg_silent == -1)
++ eap->save_msg_silent = msg_silent;
++ ++msg_silent;
++ if (*eap->cmd == '!' && !VIM_ISWHITE(eap->cmd[-1]))
++ {
++ /* ":silent!", but not "silent !cmd" */
++ eap->cmd = skipwhite(eap->cmd + 1);
++ ++emsg_silent;
++ ++eap->did_esilent;
++ }
++ continue;
++
++ case 't': if (checkforcmd(&p, "tab", 3))
++ {
++ long tabnr = get_address(eap, &eap->cmd, ADDR_TABS,
++ eap->skip, FALSE, 1);
++ if (tabnr == MAXLNUM)
++ cmdmod.tab = tabpage_index(curtab) + 1;
++ else
++ {
++ if (tabnr < 0 || tabnr > LAST_TAB_NR)
++ {
++ *errormsg = (char_u *)_(e_invrange);
++ return FAIL;
++ }
++ cmdmod.tab = tabnr + 1;
++ }
++ eap->cmd = p;
++ continue;
++ }
++ if (!checkforcmd(&eap->cmd, "topleft", 2))
++ break;
++ cmdmod.split |= WSP_TOP;
++ continue;
++
++ case 'u': if (!checkforcmd(&eap->cmd, "unsilent", 3))
++ break;
++ if (eap->save_msg_silent == -1)
++ eap->save_msg_silent = msg_silent;
++ msg_silent = 0;
++ continue;
++
++ case 'v': if (checkforcmd(&eap->cmd, "vertical", 4))
++ {
++ cmdmod.split |= WSP_VERT;
++ continue;
++ }
++ if (!checkforcmd(&p, "verbose", 4))
++ break;
++ if (eap->verbose_save < 0)
++ eap->verbose_save = p_verbose;
++ if (vim_isdigit(*eap->cmd))
++ p_verbose = atoi((char *)eap->cmd);
++ else
++ p_verbose = 1;
++ eap->cmd = p;
++ continue;
++ }
++ break;
++ }
++
++ return OK;
++ }
++
++ /*
+ * Parse the address range, if any, in "eap".
+ * Return FAIL and set "errormsg" or return OK.
+ */
+*** ../vim-8.1.0280/src/proto/ex_docmd.pro 2018-08-10 23:13:07.934024645 +0200
+--- src/proto/ex_docmd.pro 2018-08-13 23:24:18.797373050 +0200
+***************
+*** 4,9 ****
+--- 4,10 ----
+ int do_cmdline(char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags);
+ int getline_equal(char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int));
+ void *getline_cookie(char_u *(*fgetline)(int, void *, int), void *cookie);
++ int parse_command_modifiers(exarg_T *eap, char_u **errormsg);
+ int parse_cmd_address(exarg_T *eap, char_u **errormsg);
+ int checkforcmd(char_u **pp, char *cmd, int len);
+ int modifier_len(char_u *cmd);
+*** ../vim-8.1.0280/src/ex_cmds.h 2018-07-10 19:39:14.994973018 +0200
+--- src/ex_cmds.h 2018-08-13 23:25:36.236870329 +0200
+***************
+*** 1792,1797 ****
+--- 1792,1803 ----
+ #ifdef FEAT_EVAL
+ struct condstack *cstack; /* condition stack for ":if" etc. */
+ #endif
++ long verbose_save; // saved value of p_verbose
++ int save_msg_silent; // saved value of msg_silent
++ int did_esilent; // how many times emsg_silent was incremented
++ #ifdef HAVE_SANDBOX
++ int did_sandbox; // when TRUE did ++sandbox
++ #endif
+ };
+
+ #define FORCE_BIN 1 /* ":edit ++bin file" */
+*** ../vim-8.1.0280/src/globals.h 2018-08-11 16:40:39.064311995 +0200
+--- src/globals.h 2018-08-13 23:18:14.323704509 +0200
+***************
+*** 678,685 ****
+ * changed, no buffer can be deleted and
+ * current directory can't be changed.
+ * Used for SwapExists et al. */
+! #ifdef FEAT_EVAL
+! # define HAVE_SANDBOX
+ EXTERN int sandbox INIT(= 0);
+ /* Non-zero when evaluating an expression in a
+ * "sandbox". Several things are not allowed
+--- 678,684 ----
+ * changed, no buffer can be deleted and
+ * current directory can't be changed.
+ * Used for SwapExists et al. */
+! #ifdef HAVE_SANDBOX
+ EXTERN int sandbox INIT(= 0);
+ /* Non-zero when evaluating an expression in a
+ * "sandbox". Several things are not allowed
+*** ../vim-8.1.0280/src/feature.h 2018-07-29 16:09:14.644945560 +0200
+--- src/feature.h 2018-08-13 23:19:07.623368124 +0200
+***************
+*** 355,360 ****
+--- 355,364 ----
+ # endif
+ #endif
+
++ #ifdef FEAT_EVAL
++ # define HAVE_SANDBOX
++ #endif
++
+ /*
+ * +profile Profiling for functions and scripts.
+ */
+*** ../vim-8.1.0280/src/version.c 2018-08-13 22:54:31.456665135 +0200
+--- src/version.c 2018-08-13 23:04:38.032484283 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 281,
+ /**/
+
+--
+Violators can be fined, arrested or jailed for making ugly faces at a dog.
+ [real standing law in Oklahoma, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0282 b/data/vim/patches/8.1.0282
new file mode 100644
index 000000000..7b827f49f
--- /dev/null
+++ b/data/vim/patches/8.1.0282
@@ -0,0 +1,507 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0282
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0282
+Problem: 'incsearch' does not work with command modifiers.
+Solution: Skip command modifiers.
+Files: src/ex_docmd.c, src/proto/ex_docmd.pro, src/ex_getln.c,
+ src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0281/src/ex_docmd.c 2018-08-14 13:38:12.744559267 +0200
+--- src/ex_docmd.c 2018-08-14 16:00:53.341893598 +0200
+***************
+*** 68,73 ****
+--- 68,74 ----
+ static char_u *do_one_cmd(char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie);
+ static int if_level = 0; /* depth in :if */
+ #endif
++ static void free_cmdmod(void);
+ static void append_command(char_u *cmd);
+ static char_u *find_command(exarg_T *eap, int *full);
+
+***************
+*** 1741,1750 ****
+ if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
+ goto doend;
+
+! /*
+! * Repeat until no more command modifiers are found.
+! * The "ea" structure holds the arguments that can be used.
+! */
+ ea.cmd = *cmdlinep;
+ ea.cmdlinep = cmdlinep;
+ ea.getline = fgetline;
+--- 1742,1752 ----
+ if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
+ goto doend;
+
+! /*
+! * 1. Skip comment lines and leading white space and colons.
+! * 2. Handle command modifiers.
+! */
+! // The "ea" structure holds the arguments that can be used.
+ ea.cmd = *cmdlinep;
+ ea.cmdlinep = cmdlinep;
+ ea.getline = fgetline;
+***************
+*** 1752,1758 ****
+ #ifdef FEAT_EVAL
+ ea.cstack = cstack;
+ #endif
+! if (parse_command_modifiers(&ea, &errormsg) == FAIL)
+ goto doend;
+
+ after_modifier = ea.cmd;
+--- 1754,1760 ----
+ #ifdef FEAT_EVAL
+ ea.cstack = cstack;
+ #endif
+! if (parse_command_modifiers(&ea, &errormsg, FALSE) == FAIL)
+ goto doend;
+
+ after_modifier = ea.cmd;
+***************
+*** 2553,2569 ****
+ if (ea.verbose_save >= 0)
+ p_verbose = ea.verbose_save;
+
+! if (cmdmod.save_ei != NULL)
+! {
+! /* Restore 'eventignore' to the value before ":noautocmd". */
+! set_string_option_direct((char_u *)"ei", -1, cmdmod.save_ei,
+! OPT_FREE, SID_NONE);
+! free_string_option(cmdmod.save_ei);
+! }
+!
+! if (cmdmod.filter_regmatch.regprog != NULL)
+! vim_regfree(cmdmod.filter_regmatch.regprog);
+!
+ cmdmod = save_cmdmod;
+
+ if (ea.save_msg_silent != -1)
+--- 2555,2561 ----
+ if (ea.verbose_save >= 0)
+ p_verbose = ea.verbose_save;
+
+! free_cmdmod();
+ cmdmod = save_cmdmod;
+
+ if (ea.save_msg_silent != -1)
+***************
+*** 2609,2621 ****
+ * - store flags in "cmdmod".
+ * - Set ex_pressedreturn for an empty command line.
+ * - set msg_silent for ":silent"
+ * - set p_verbose for ":verbose"
+ * - Increment "sandbox" for ":sandbox"
+ * Return FAIL when the command is not to be executed.
+ * May set "errormsg" to an error message.
+ */
+ int
+! parse_command_modifiers(exarg_T *eap, char_u **errormsg)
+ {
+ char_u *p;
+
+--- 2601,2616 ----
+ * - store flags in "cmdmod".
+ * - Set ex_pressedreturn for an empty command line.
+ * - set msg_silent for ":silent"
++ * - set 'eventignore' to "all" for ":noautocmd"
+ * - set p_verbose for ":verbose"
+ * - Increment "sandbox" for ":sandbox"
++ * When "skip_only" is TRUE the global variables are not changed, except for
++ * "cmdmod".
+ * Return FAIL when the command is not to be executed.
+ * May set "errormsg" to an error message.
+ */
+ int
+! parse_command_modifiers(exarg_T *eap, char_u **errormsg, int skip_only)
+ {
+ char_u *p;
+
+***************
+*** 2623,2633 ****
+ eap->verbose_save = -1;
+ eap->save_msg_silent = -1;
+
+ for (;;)
+ {
+- /*
+- * 1. Skip comment lines and leading white space and colons.
+- */
+ while (*eap->cmd == ' ' || *eap->cmd == '\t' || *eap->cmd == ':')
+ ++eap->cmd;
+
+--- 2618,2626 ----
+ eap->verbose_save = -1;
+ eap->save_msg_silent = -1;
+
++ // Repeat until no more command modifiers are found.
+ for (;;)
+ {
+ while (*eap->cmd == ' ' || *eap->cmd == '\t' || *eap->cmd == ':')
+ ++eap->cmd;
+
+***************
+*** 2638,2644 ****
+ && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+ {
+ eap->cmd = (char_u *)"+";
+! ex_pressedreturn = TRUE;
+ }
+
+ /* ignore comment and empty lines */
+--- 2631,2638 ----
+ && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+ {
+ eap->cmd = (char_u *)"+";
+! if (!skip_only)
+! ex_pressedreturn = TRUE;
+ }
+
+ /* ignore comment and empty lines */
+***************
+*** 2646,2658 ****
+ return FAIL;
+ if (*eap->cmd == NUL)
+ {
+! ex_pressedreturn = TRUE;
+ return FAIL;
+ }
+
+- /*
+- * 2. Handle command modifiers.
+- */
+ p = skip_range(eap->cmd, NULL);
+ switch (*p)
+ {
+--- 2640,2650 ----
+ return FAIL;
+ if (*eap->cmd == NUL)
+ {
+! if (!skip_only)
+! ex_pressedreturn = TRUE;
+ return FAIL;
+ }
+
+ p = skip_range(eap->cmd, NULL);
+ switch (*p)
+ {
+***************
+*** 2720,2732 ****
+ if (*p == NUL || ends_excmd(*p))
+ break;
+ }
+! p = skip_vimgrep_pat(p, &reg_pat, NULL);
+ if (p == NULL || *p == NUL)
+ break;
+! cmdmod.filter_regmatch.regprog =
+ vim_regcomp(reg_pat, RE_MAGIC);
+! if (cmdmod.filter_regmatch.regprog == NULL)
+! break;
+ eap->cmd = p;
+ continue;
+ }
+--- 2712,2731 ----
+ if (*p == NUL || ends_excmd(*p))
+ break;
+ }
+! if (skip_only)
+! p = skip_vimgrep_pat(p, NULL, NULL);
+! else
+! // NOTE: This puts a NUL after the pattern.
+! p = skip_vimgrep_pat(p, &reg_pat, NULL);
+ if (p == NULL || *p == NUL)
+ break;
+! if (!skip_only)
+! {
+! cmdmod.filter_regmatch.regprog =
+ vim_regcomp(reg_pat, RE_MAGIC);
+! if (cmdmod.filter_regmatch.regprog == NULL)
+! break;
+! }
+ eap->cmd = p;
+ continue;
+ }
+***************
+*** 2752,2758 ****
+
+ case 'n': if (checkforcmd(&eap->cmd, "noautocmd", 3))
+ {
+! if (cmdmod.save_ei == NULL)
+ {
+ /* Set 'eventignore' to "all". Restore the
+ * existing option value later. */
+--- 2751,2757 ----
+
+ case 'n': if (checkforcmd(&eap->cmd, "noautocmd", 3))
+ {
+! if (cmdmod.save_ei == NULL && !skip_only)
+ {
+ /* Set 'eventignore' to "all". Restore the
+ * existing option value later. */
+***************
+*** 2775,2797 ****
+ case 's': if (checkforcmd(&eap->cmd, "sandbox", 3))
+ {
+ #ifdef HAVE_SANDBOX
+! if (!eap->did_sandbox)
+! ++sandbox;
+! eap->did_sandbox = TRUE;
+ #endif
+ continue;
+ }
+ if (!checkforcmd(&eap->cmd, "silent", 3))
+ break;
+! if (eap->save_msg_silent == -1)
+! eap->save_msg_silent = msg_silent;
+! ++msg_silent;
+ if (*eap->cmd == '!' && !VIM_ISWHITE(eap->cmd[-1]))
+ {
+ /* ":silent!", but not "silent !cmd" */
+ eap->cmd = skipwhite(eap->cmd + 1);
+! ++emsg_silent;
+! ++eap->did_esilent;
+ }
+ continue;
+
+--- 2774,2805 ----
+ case 's': if (checkforcmd(&eap->cmd, "sandbox", 3))
+ {
+ #ifdef HAVE_SANDBOX
+! if (!skip_only)
+! {
+! if (!eap->did_sandbox)
+! ++sandbox;
+! eap->did_sandbox = TRUE;
+! }
+ #endif
+ continue;
+ }
+ if (!checkforcmd(&eap->cmd, "silent", 3))
+ break;
+! if (!skip_only)
+! {
+! if (eap->save_msg_silent == -1)
+! eap->save_msg_silent = msg_silent;
+! ++msg_silent;
+! }
+ if (*eap->cmd == '!' && !VIM_ISWHITE(eap->cmd[-1]))
+ {
+ /* ":silent!", but not "silent !cmd" */
+ eap->cmd = skipwhite(eap->cmd + 1);
+! if (!skip_only)
+! {
+! ++emsg_silent;
+! ++eap->did_esilent;
+! }
+ }
+ continue;
+
+***************
+*** 2820,2828 ****
+
+ case 'u': if (!checkforcmd(&eap->cmd, "unsilent", 3))
+ break;
+! if (eap->save_msg_silent == -1)
+! eap->save_msg_silent = msg_silent;
+! msg_silent = 0;
+ continue;
+
+ case 'v': if (checkforcmd(&eap->cmd, "vertical", 4))
+--- 2828,2839 ----
+
+ case 'u': if (!checkforcmd(&eap->cmd, "unsilent", 3))
+ break;
+! if (!skip_only)
+! {
+! if (eap->save_msg_silent == -1)
+! eap->save_msg_silent = msg_silent;
+! msg_silent = 0;
+! }
+ continue;
+
+ case 'v': if (checkforcmd(&eap->cmd, "vertical", 4))
+***************
+*** 2832,2843 ****
+ }
+ if (!checkforcmd(&p, "verbose", 4))
+ break;
+! if (eap->verbose_save < 0)
+! eap->verbose_save = p_verbose;
+! if (vim_isdigit(*eap->cmd))
+! p_verbose = atoi((char *)eap->cmd);
+! else
+! p_verbose = 1;
+ eap->cmd = p;
+ continue;
+ }
+--- 2843,2857 ----
+ }
+ if (!checkforcmd(&p, "verbose", 4))
+ break;
+! if (!skip_only)
+! {
+! if (eap->verbose_save < 0)
+! eap->verbose_save = p_verbose;
+! if (vim_isdigit(*eap->cmd))
+! p_verbose = atoi((char *)eap->cmd);
+! else
+! p_verbose = 1;
+! }
+ eap->cmd = p;
+ continue;
+ }
+***************
+*** 2848,2853 ****
+--- 2862,2885 ----
+ }
+
+ /*
++ * Free contents of "cmdmod".
++ */
++ static void
++ free_cmdmod(void)
++ {
++ if (cmdmod.save_ei != NULL)
++ {
++ /* Restore 'eventignore' to the value before ":noautocmd". */
++ set_string_option_direct((char_u *)"ei", -1, cmdmod.save_ei,
++ OPT_FREE, SID_NONE);
++ free_string_option(cmdmod.save_ei);
++ }
++
++ if (cmdmod.filter_regmatch.regprog != NULL)
++ vim_regfree(cmdmod.filter_regmatch.regprog);
++ }
++
++ /*
+ * Parse the address range, if any, in "eap".
+ * Return FAIL and set "errormsg" or return OK.
+ */
+*** ../vim-8.1.0281/src/proto/ex_docmd.pro 2018-08-14 13:38:12.744559267 +0200
+--- src/proto/ex_docmd.pro 2018-08-14 15:27:07.371906192 +0200
+***************
+*** 4,10 ****
+ int do_cmdline(char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags);
+ int getline_equal(char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int));
+ void *getline_cookie(char_u *(*fgetline)(int, void *, int), void *cookie);
+! int parse_command_modifiers(exarg_T *eap, char_u **errormsg);
+ int parse_cmd_address(exarg_T *eap, char_u **errormsg);
+ int checkforcmd(char_u **pp, char *cmd, int len);
+ int modifier_len(char_u *cmd);
+--- 4,10 ----
+ int do_cmdline(char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags);
+ int getline_equal(char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int));
+ void *getline_cookie(char_u *(*fgetline)(int, void *, int), void *cookie);
+! int parse_command_modifiers(exarg_T *eap, char_u **errormsg, int skip_only);
+ int parse_cmd_address(exarg_T *eap, char_u **errormsg);
+ int checkforcmd(char_u **pp, char *cmd, int len);
+ int modifier_len(char_u *cmd);
+*** ../vim-8.1.0281/src/ex_getln.c 2018-08-13 22:54:31.456665135 +0200
+--- src/ex_getln.c 2018-08-14 15:27:03.303934870 +0200
+***************
+*** 283,293 ****
+ return TRUE;
+ if (firstc == ':')
+ {
+! char_u *cmd = skip_range(ccline.cmdbuff, NULL);
+! char_u *p;
+! int delim;
+! char_u *end;
+
+ if (*cmd == 's' || *cmd == 'g' || *cmd == 'v')
+ {
+ // Skip over "substitute" to find the pattern separator.
+--- 283,306 ----
+ return TRUE;
+ if (firstc == ':')
+ {
+! char_u *cmd;
+! cmdmod_T save_cmdmod = cmdmod;
+! char_u *p;
+! int delim;
+! char_u *end;
+! char_u *dummy;
+! exarg_T ea;
+
++ vim_memset(&ea, 0, sizeof(ea));
++ ea.line1 = 1;
++ ea.line2 = 1;
++ ea.cmd = ccline.cmdbuff;
++ ea.addr_type = ADDR_LINES;
++
++ parse_command_modifiers(&ea, &dummy, TRUE);
++ cmdmod = save_cmdmod;
++
++ cmd = skip_range(ea.cmd, NULL);
+ if (*cmd == 's' || *cmd == 'g' || *cmd == 'v')
+ {
+ // Skip over "substitute" to find the pattern separator.
+***************
+*** 310,317 ****
+ end = skip_regexp(p, delim, p_magic, NULL);
+ if (end > p || *end == delim)
+ {
+- char_u *dummy;
+- exarg_T ea;
+ pos_T save_cursor = curwin->w_cursor;
+
+ // found a non-empty pattern
+--- 323,328 ----
+***************
+*** 319,329 ****
+ *patlen = (int)(end - p);
+
+ // parse the address range
+- vim_memset(&ea, 0, sizeof(ea));
+- ea.line1 = 1;
+- ea.line2 = 1;
+- ea.cmd = ccline.cmdbuff;
+- ea.addr_type = ADDR_LINES;
+ curwin->w_cursor = is_state->search_start;
+ parse_cmd_address(&ea, &dummy);
+ if (ea.addr_count > 0)
+--- 330,335 ----
+*** ../vim-8.1.0281/src/testdir/test_search.vim 2018-08-13 22:54:31.456665135 +0200
+--- src/testdir/test_search.vim 2018-08-14 16:01:44.561537663 +0200
+***************
+*** 884,889 ****
+--- 884,895 ----
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_05', {})
+ call term_sendkeys(buf, "\<Esc>")
+
++ " Command modifiers are skipped
++ call term_sendkeys(buf, ':above below browse botr confirm keepmar keepalt keeppat keepjum filter xxx hide lockm leftabove noau noswap rightbel sandbox silent silent! $tab top unsil vert verbose 4,5s/fo.')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_06', {})
++ call term_sendkeys(buf, "\<Esc>")
++
+ call StopVimInTerminal(buf)
+ call delete('Xis_subst_script')
+ endfunc
+*** ../vim-8.1.0281/src/version.c 2018-08-14 13:38:12.748559237 +0200
+--- src/version.c 2018-08-14 16:02:48.537093003 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 282,
+ /**/
+
+--
+It is illegal to take more than three sips of beer at a time while standing.
+ [real standing law in Texas, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0283 b/data/vim/patches/8.1.0283
new file mode 100644
index 000000000..ce5c1081e
--- /dev/null
+++ b/data/vim/patches/8.1.0283
@@ -0,0 +1,48 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0283
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0283 (after 8.1.0282)
+Problem: Missing test dump.
+Solution: Add the dump file
+Files: src/testdir/dumps/Test_incsearch_substitute_06.dump
+
+
+*** ../vim-8.1.0282/src/testdir/dumps/Test_incsearch_substitute_06.dump 2018-08-14 17:28:14.092380326 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_06.dump 2018-08-14 16:01:48.877507668 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |3| @64
++ |f+1&&|o@1| +0&&|4| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|5| @64
++ |f|o@1| |6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |:|a|b|o|v|e| |b|e|l|o|w| |b|r|o|w|s|e| |b|o|t|r| |c|o|n|f|i|r|m| |k|e@1|p|m|a|r| |k|e@1|p|a|l|t| |k|e@1|p@1|a|t| |k|e@1|p|j|u|m| |f|i|l|t|e
++ |r| |x@2| |h|i|d|e| |l|o|c|k|m| |l|e|f|t|a|b|o|v|e| |n|o|a|u| |n|o|s|w|a|p| |r|i|g|h|t|b|e|l| |s|a|n|d|b|o|x| |s|i|l|e|n|t| |s|i|l|e|n|t|!
++ | |$|t|a|b| |t|o|p| |u|n|s|i|l| |v|e|r|t| |v|e|r|b|o|s|e| |4|,|5|s|/|f|o|.> @32
+*** ../vim-8.1.0282/src/version.c 2018-08-14 16:06:09.455696035 +0200
+--- src/version.c 2018-08-14 17:27:02.916917347 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 283,
+ /**/
+
+--
+Lawmakers made it obligatory for everybody to take at least one bath
+each week -- on Saturday night.
+ [real standing law in Vermont, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0284 b/data/vim/patches/8.1.0284
new file mode 100644
index 000000000..a9e230594
--- /dev/null
+++ b/data/vim/patches/8.1.0284
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0284
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0284
+Problem: 'cursorline' highlighting wrong with 'incsearch'.
+Solution: Move the cursor back if the match is outside the range.
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_07.dump
+ src/testdir/dumps/Test_incsearch_substitute_08.dump
+
+
+*** ../vim-8.1.0283/src/ex_getln.c 2018-08-14 16:06:09.455696035 +0200
+--- src/ex_getln.c 2018-08-14 18:14:34.864316635 +0200
+***************
+*** 480,487 ****
+--- 480,490 ----
+
+ if (curwin->w_cursor.lnum < search_first_line
+ || curwin->w_cursor.lnum > search_last_line)
++ {
+ // match outside of address range
+ i = 0;
++ curwin->w_cursor = is_state->search_start;
++ }
+
+ // if interrupted while searching, behave like it failed
+ if (got_int)
+*** ../vim-8.1.0283/src/testdir/test_search.vim 2018-08-14 16:06:09.455696035 +0200
+--- src/testdir/test_search.vim 2018-08-14 18:10:01.346273292 +0200
+***************
+*** 839,844 ****
+--- 839,845 ----
+ \ 'for n in range(1, 10)',
+ \ ' call setline(n, "foo " . n)',
+ \ 'endfor',
++ \ 'call setline(11, "bar 11")',
+ \ '3',
+ \ ], 'Xis_subst_script')
+ let buf = RunVimInTerminal('-S Xis_subst_script', {'rows': 9, 'cols': 70})
+***************
+*** 890,895 ****
+--- 891,910 ----
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_06', {})
+ call term_sendkeys(buf, "\<Esc>")
+
++ " Cursorline highlighting at match
++ call term_sendkeys(buf, ":set cursorline\<CR>")
++ call term_sendkeys(buf, 'G9G')
++ call term_sendkeys(buf, ':9,11s/bar')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_07', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ " Cursorline highlighting at cursor when no match
++ call term_sendkeys(buf, ':9,10s/bar')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_08', {})
++ call term_sendkeys(buf, "\<Esc>")
++
+ call StopVimInTerminal(buf)
+ call delete('Xis_subst_script')
+ endfunc
+*** ../vim-8.1.0283/src/testdir/dumps/Test_incsearch_substitute_07.dump 2018-08-14 18:16:06.747659260 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_07.dump 2018-08-14 18:12:01.497413817 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |4| @64
++ |f|o@1| |5| @64
++ |f|o@1| |6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |f|o@1| |9| @64
++ |f|o@1| |1|0| @63
++ |b+9&&|a|r| +8&&|1@1| @63
++ |:+0&&|9|,|1@1|s|/|b|a|r> @59
+*** ../vim-8.1.0283/src/testdir/dumps/Test_incsearch_substitute_08.dump 2018-08-14 18:16:06.755659202 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_08.dump 2018-08-14 18:14:43.136257456 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |4| @64
++ |f|o@1| |5| @64
++ |f|o@1| |6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |f+8&&|o@1| |9| @64
++ |f+0&&|o@1| |1|0| @63
++ |b|a|r| |1@1| @63
++ |:|9|,|1|0|s|/|b|a|r> @59
+*** ../vim-8.1.0283/src/version.c 2018-08-14 17:28:42.408167699 +0200
+--- src/version.c 2018-08-14 18:11:55.033460059 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 284,
+ /**/
+
+
+--
+If you only have a hammer, you tend to see every problem as a nail.
+If you only have MS-Windows, you tend to solve every problem by rebooting.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0285 b/data/vim/patches/8.1.0285
new file mode 100644
index 000000000..c0eff3b5f
--- /dev/null
+++ b/data/vim/patches/8.1.0285
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0285
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0285
+Problem: Compiler warning for conversion.
+Solution: Add a type cast. (Mike Williams)
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0284/src/ex_getln.c 2018-08-14 18:16:30.683488007 +0200
+--- src/ex_getln.c 2018-08-14 20:12:43.682942699 +0200
+***************
+*** 580,586 ****
+ {
+ pat = last_search_pattern();
+ skiplen = 0;
+! patlen = STRLEN(pat);
+ }
+ else
+ pat = ccline.cmdbuff + skiplen;
+--- 580,586 ----
+ {
+ pat = last_search_pattern();
+ skiplen = 0;
+! patlen = (int)STRLEN(pat);
+ }
+ else
+ pat = ccline.cmdbuff + skiplen;
+*** ../vim-8.1.0284/src/version.c 2018-08-14 18:16:30.683488007 +0200
+--- src/version.c 2018-08-14 20:13:26.694695333 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 285,
+ /**/
+
+--
+Living on Earth includes an annual free trip around the Sun.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0286 b/data/vim/patches/8.1.0286
new file mode 100644
index 000000000..d6507bdf9
--- /dev/null
+++ b/data/vim/patches/8.1.0286
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0286
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0286
+Problem: 'incsearch' does not apply to :smagic and :snomagic.
+Solution: Add support. (Hirohito Higashi)
+Files: src/ex_getln.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0285/src/ex_getln.c 2018-08-14 20:18:22.680907439 +0200
+--- src/ex_getln.c 2018-08-14 21:10:45.311635658 +0200
+***************
+*** 231,236 ****
+--- 231,237 ----
+ pos_T match_end;
+ int did_incsearch;
+ int incsearch_postponed;
++ int magic_save;
+ } incsearch_state_T;
+
+ static void
+***************
+*** 239,244 ****
+--- 240,246 ----
+ is_state->match_start = curwin->w_cursor;
+ is_state->did_incsearch = FALSE;
+ is_state->incsearch_postponed = FALSE;
++ is_state->magic_save = p_magic;
+ CLEAR_POS(&is_state->match_end);
+ is_state->save_cursor = curwin->w_cursor; // may be restored later
+ is_state->search_start = curwin->w_cursor;
+***************
+*** 308,316 ****
+--- 310,325 ----
+ ;
+ if (*skipwhite(p) != NUL
+ && (STRNCMP(cmd, "substitute", p - cmd) == 0
++ || STRNCMP(cmd, "smagic", p - cmd) == 0
++ || STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
+ || STRNCMP(cmd, "global", p - cmd) == 0
+ || STRNCMP(cmd, "vglobal", p - cmd) == 0))
+ {
++ if (*cmd == 's' && cmd[1] == 'm')
++ p_magic = TRUE;
++ else if (*cmd == 's' && cmd[1] == 'n')
++ p_magic = FALSE;
++
+ // Check for "global!/".
+ if (*cmd == 'g' && *p == '!')
+ {
+***************
+*** 392,397 ****
+--- 401,407 ----
+ update_screen(SOME_VALID);
+ else
+ redraw_all_later(SOME_VALID);
++ p_magic = is_state->magic_save;
+ }
+ }
+
+*** ../vim-8.1.0285/src/testdir/test_search.vim 2018-08-14 18:16:30.683488007 +0200
+--- src/testdir/test_search.vim 2018-08-14 21:10:45.315635631 +0200
+***************
+*** 384,389 ****
+--- 384,397 ----
+ undo
+ call feedkeys(":%substitute/the\<c-l>/xxx\<cr>", 'tx')
+ call assert_equal(' 2 xxxe', getline('.'))
++ undo
++ call feedkeys(":%smagic/the.e/xxx\<cr>", 'tx')
++ call assert_equal(' 2 xxx', getline('.'))
++ undo
++ call assert_fails(":%snomagic/the.e/xxx\<cr>", 'E486')
++ "
++ call feedkeys(":%snomagic/the\\.e/xxx\<cr>", 'tx')
++ call assert_equal(' 2 xxx', getline('.'))
+
+ call Incsearch_cleanup()
+ endfunc
+*** ../vim-8.1.0285/src/version.c 2018-08-14 20:18:22.680907439 +0200
+--- src/version.c 2018-08-14 21:11:49.531195730 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 286,
+ /**/
+
+--
+ARTHUR: If you do not open these doors, we will take this castle by force ...
+ [A bucket of slops land on ARTHUR. He tries to retain his dignity.]
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0287 b/data/vim/patches/8.1.0287
new file mode 100644
index 000000000..39b473cf5
--- /dev/null
+++ b/data/vim/patches/8.1.0287
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0287
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0287
+Problem: MAX is not defined everywhere.
+Solution: Define MAX where needed.
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0286/src/ex_getln.c 2018-08-14 21:32:17.618865046 +0200
+--- src/ex_getln.c 2018-08-14 22:06:55.372214929 +0200
+***************
+*** 13,18 ****
+--- 13,22 ----
+
+ #include "vim.h"
+
++ #ifndef MAX
++ # define MAX(x,y) ((x) > (y) ? (x) : (y))
++ #endif
++
+ /*
+ * Variables shared between getcmdline(), redrawcmdline() and others.
+ * These need to be saved when using CTRL-R |, that's why they are in a
+*** ../vim-8.1.0286/src/version.c 2018-08-14 21:32:17.622865020 +0200
+--- src/version.c 2018-08-14 22:07:40.275897998 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 287,
+ /**/
+
+--
+BEDEVERE: Stand by for attack!!
+ [CUT TO enormous army forming up. Trebuchets, rows of PIKEMEN, siege
+ towers, pennants flying, shouts of "Stand by for attack!" Traditional
+ army build-up shots. The shouts echo across the ranks of the army.
+ We see various groups reacting, and stirring themselves in readiness.]
+ARTHUR: Who are they?
+BEDEVERE: Oh, just some friends!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0288 b/data/vim/patches/8.1.0288
new file mode 100644
index 000000000..60c71cca8
--- /dev/null
+++ b/data/vim/patches/8.1.0288
@@ -0,0 +1,498 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0288
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0288
+Problem: Quickfix code uses cmdidx too often.
+Solution: Add is_loclist_cmd(). (Yegappan Lakshmanan)
+Files: src/ex_docmd.c, src/proto/ex_docmd.pro, src/quickfix.c
+
+
+*** ../vim-8.1.0287/src/ex_docmd.c 2018-08-14 16:06:09.451696062 +0200
+--- src/ex_docmd.c 2018-08-15 20:53:22.429089025 +0200
+***************
+*** 12529,12534 ****
+--- 12529,12548 ----
+ }
+ #endif
+
++ #ifdef FEAT_QUICKFIX
++ /*
++ * Returns TRUE if the supplied Ex cmdidx is for a location list command
++ * instead of a quickfix command.
++ */
++ int
++ is_loclist_cmd(int cmdidx)
++ {
++ if (cmdidx < 0 || cmdidx > CMD_SIZE)
++ return FALSE;
++ return cmdnames[cmdidx].cmd_name[0] == 'l';
++ }
++ #endif
++
+ # if defined(FEAT_TIMERS) || defined(PROTO)
+ int
+ get_pressedreturn(void)
+*** ../vim-8.1.0287/src/proto/ex_docmd.pro 2018-08-14 16:06:09.451696062 +0200
+--- src/proto/ex_docmd.pro 2018-08-15 20:50:10.242164053 +0200
+***************
+*** 70,75 ****
+--- 70,76 ----
+ char_u *get_messages_arg(expand_T *xp, int idx);
+ char_u *get_mapclear_arg(expand_T *xp, int idx);
+ void set_no_hlsearch(int flag);
++ int is_loclist_cmd(int cmdidx);
+ int get_pressedreturn(void);
+ void set_pressedreturn(int val);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0287/src/quickfix.c 2018-08-11 13:36:51.806140673 +0200
+--- src/quickfix.c 2018-08-15 20:50:10.242164053 +0200
+***************
+*** 3330,3336 ****
+ recognised errors */
+ qf_info_T *qi = &ql_info;
+
+! if (eap->cmdidx == CMD_llist)
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+--- 3330,3336 ----
+ recognised errors */
+ qf_info_T *qi = &ql_info;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+***************
+*** 3478,3484 ****
+ qf_info_T *qi = &ql_info;
+ int count;
+
+! if (eap->cmdidx == CMD_lolder || eap->cmdidx == CMD_lnewer)
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+--- 3478,3484 ----
+ qf_info_T *qi = &ql_info;
+ int count;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+***************
+*** 3526,3532 ****
+ qf_info_T *qi = &ql_info;
+ int i;
+
+! if (eap->cmdidx == CMD_lhistory)
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL || (qi->qf_listcount == 0
+ && qf_list_empty(qi, qi->qf_curlist)))
+--- 3526,3532 ----
+ qf_info_T *qi = &ql_info;
+ int i;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL || (qi->qf_listcount == 0
+ && qf_list_empty(qi, qi->qf_curlist)))
+***************
+*** 3745,3751 ****
+ qf_info_T *qi = &ql_info;
+ win_T *win;
+
+! if (eap->cmdidx == CMD_lwindow)
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+--- 3745,3751 ----
+ qf_info_T *qi = &ql_info;
+ win_T *win;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+***************
+*** 3781,3787 ****
+ win_T *win = NULL;
+ qf_info_T *qi = &ql_info;
+
+! if (eap->cmdidx == CMD_lclose || eap->cmdidx == CMD_lwindow)
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+--- 3781,3787 ----
+ win_T *win = NULL;
+ qf_info_T *qi = &ql_info;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+***************
+*** 3808,3814 ****
+ buf_T *qf_buf;
+ win_T *oldwin = curwin;
+
+! if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+--- 3808,3814 ----
+ buf_T *qf_buf;
+ win_T *oldwin = curwin;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+***************
+*** 3953,3964 ****
+ * :cbottom/:lbottom commands.
+ */
+ void
+! ex_cbottom(exarg_T *eap UNUSED)
+ {
+ qf_info_T *qi = &ql_info;
+ win_T *win;
+
+! if (eap->cmdidx == CMD_lbottom)
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+--- 3953,3964 ----
+ * :cbottom/:lbottom commands.
+ */
+ void
+! ex_cbottom(exarg_T *eap)
+ {
+ qf_info_T *qi = &ql_info;
+ win_T *win;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+***************
+*** 4430,4437 ****
+ enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
+ #endif
+
+! if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
+! || eap->cmdidx == CMD_lgrepadd)
+ wp = curwin;
+
+ autowrite_all();
+--- 4430,4436 ----
+ enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
+ #endif
+
+! if (is_loclist_cmd(eap->cmdidx))
+ wp = curwin;
+
+ autowrite_all();
+***************
+*** 4570,4576 ****
+ int i, sz = 0;
+ int prev_fnum = 0;
+
+! if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
+ {
+ /* Location list */
+ qi = GET_LOC_LIST(curwin);
+--- 4569,4575 ----
+ int i, sz = 0;
+ int prev_fnum = 0;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ /* Location list */
+ qi = GET_LOC_LIST(curwin);
+***************
+*** 4607,4613 ****
+ {
+ qf_info_T *qi = &ql_info;
+
+! if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
+ {
+ /* Location list */
+ qi = GET_LOC_LIST(curwin);
+--- 4606,4612 ----
+ {
+ qf_info_T *qi = &ql_info;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ /* Location list */
+ qi = GET_LOC_LIST(curwin);
+***************
+*** 4631,4637 ****
+ int i, eidx = 0;
+ int prev_fnum = 0;
+
+! if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
+ {
+ /* Location list */
+ qi = GET_LOC_LIST(curwin);
+--- 4630,4636 ----
+ int i, eidx = 0;
+ int prev_fnum = 0;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ /* Location list */
+ qi = GET_LOC_LIST(curwin);
+***************
+*** 4724,4735 ****
+ qf_info_T *qi = &ql_info;
+ int errornr;
+
+! if (eap->cmdidx == CMD_ll
+! || eap->cmdidx == CMD_lrewind
+! || eap->cmdidx == CMD_lfirst
+! || eap->cmdidx == CMD_llast
+! || eap->cmdidx == CMD_ldo
+! || eap->cmdidx == CMD_lfdo)
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+--- 4723,4729 ----
+ qf_info_T *qi = &ql_info;
+ int errornr;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+***************
+*** 4743,4755 ****
+ errornr = (int)eap->line2;
+ else
+ {
+! if (eap->cmdidx == CMD_cc || eap->cmdidx == CMD_ll)
+! errornr = 0;
+! else if (eap->cmdidx == CMD_crewind || eap->cmdidx == CMD_lrewind
+! || eap->cmdidx == CMD_cfirst || eap->cmdidx == CMD_lfirst)
+! errornr = 1;
+! else
+! errornr = 32767;
+ }
+
+ /* For cdo and ldo commands, jump to the nth valid error.
+--- 4737,4754 ----
+ errornr = (int)eap->line2;
+ else
+ {
+! switch (eap->cmdidx)
+! {
+! case CMD_cc: case CMD_ll:
+! errornr = 0;
+! break;
+! case CMD_crewind: case CMD_lrewind: case CMD_cfirst:
+! case CMD_lfirst:
+! errornr = 1;
+! break;
+! default:
+! errornr = 32767;
+! }
+ }
+
+ /* For cdo and ldo commands, jump to the nth valid error.
+***************
+*** 4774,4788 ****
+ {
+ qf_info_T *qi = &ql_info;
+ int errornr;
+
+! if (eap->cmdidx == CMD_lnext
+! || eap->cmdidx == CMD_lNext
+! || eap->cmdidx == CMD_lprevious
+! || eap->cmdidx == CMD_lnfile
+! || eap->cmdidx == CMD_lNfile
+! || eap->cmdidx == CMD_lpfile
+! || eap->cmdidx == CMD_ldo
+! || eap->cmdidx == CMD_lfdo)
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+--- 4773,4781 ----
+ {
+ qf_info_T *qi = &ql_info;
+ int errornr;
++ int dir;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+***************
+*** 4799,4815 ****
+ else
+ errornr = 1;
+
+! qf_jump(qi, (eap->cmdidx == CMD_cnext || eap->cmdidx == CMD_lnext
+! || eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo)
+! ? FORWARD
+! : (eap->cmdidx == CMD_cnfile || eap->cmdidx == CMD_lnfile
+! || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
+! ? FORWARD_FILE
+! : (eap->cmdidx == CMD_cpfile || eap->cmdidx == CMD_lpfile
+! || eap->cmdidx == CMD_cNfile || eap->cmdidx == CMD_lNfile)
+! ? BACKWARD_FILE
+! : BACKWARD,
+! errornr, eap->forceit);
+ }
+
+ /*
+--- 4792,4819 ----
+ else
+ errornr = 1;
+
+! // Depending on the command jump to either next or previous entry/file.
+! switch (eap->cmdidx)
+! {
+! case CMD_cnext: case CMD_lnext: case CMD_cdo: case CMD_ldo:
+! dir = FORWARD;
+! break;
+! case CMD_cprevious: case CMD_lprevious: case CMD_cNext:
+! case CMD_lNext:
+! dir = BACKWARD;
+! break;
+! case CMD_cnfile: case CMD_lnfile: case CMD_cfdo: case CMD_lfdo:
+! dir = FORWARD_FILE;
+! break;
+! case CMD_cpfile: case CMD_lpfile: case CMD_cNfile: case CMD_lNfile:
+! dir = BACKWARD_FILE;
+! break;
+! default:
+! dir = FORWARD;
+! break;
+! }
+!
+! qf_jump(qi, dir, errornr, eap->forceit);
+ }
+
+ /*
+***************
+*** 4857,4865 ****
+ if (*eap->arg != NUL)
+ set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE, 0);
+
+! if (eap->cmdidx == CMD_lfile
+! || eap->cmdidx == CMD_lgetfile
+! || eap->cmdidx == CMD_laddfile)
+ wp = curwin;
+
+ /*
+--- 4861,4867 ----
+ if (*eap->arg != NUL)
+ set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE, 0);
+
+! if (is_loclist_cmd(eap->cmdidx))
+ wp = curwin;
+
+ /*
+***************
+*** 5178,5187 ****
+ #endif
+ }
+
+! if (eap->cmdidx == CMD_lgrep
+! || eap->cmdidx == CMD_lvimgrep
+! || eap->cmdidx == CMD_lgrepadd
+! || eap->cmdidx == CMD_lvimgrepadd)
+ {
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+--- 5180,5186 ----
+ #endif
+ }
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+***************
+*** 6525,6533 ****
+ }
+
+ /* Must come after autocommands. */
+! if (eap->cmdidx == CMD_lbuffer
+! || eap->cmdidx == CMD_lgetbuffer
+! || eap->cmdidx == CMD_laddbuffer)
+ {
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+--- 6524,6530 ----
+ }
+
+ /* Must come after autocommands. */
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+***************
+*** 6631,6639 ****
+ #endif
+ }
+
+! if (eap->cmdidx == CMD_lexpr
+! || eap->cmdidx == CMD_lgetexpr
+! || eap->cmdidx == CMD_laddexpr)
+ {
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+--- 6628,6634 ----
+ #endif
+ }
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = ll_get_or_alloc_list(curwin);
+ if (qi == NULL)
+***************
+*** 6922,6928 ****
+ save_cpo = p_cpo;
+ p_cpo = empty_option;
+
+! if (eap->cmdidx == CMD_lhelpgrep)
+ {
+ qi = hgr_get_ll(&new_qi);
+ if (qi == NULL)
+--- 6917,6923 ----
+ save_cpo = p_cpo;
+ p_cpo = empty_option;
+
+! if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = hgr_get_ll(&new_qi);
+ if (qi == NULL)
+*** ../vim-8.1.0287/src/version.c 2018-08-14 22:08:20.211616525 +0200
+--- src/version.c 2018-08-15 20:51:09.609828450 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 288,
+ /**/
+
+--
+INSPECTOR END OF FILM: Move along. There's nothing to see! Keep moving!
+ [Suddenly he notices the cameras.]
+INSPECTOR END OF FILM: (to Camera) All right, put that away sonny.
+ [He walks over to it and puts his hand over the lens.]
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0289 b/data/vim/patches/8.1.0289
new file mode 100644
index 000000000..0a3133a45
--- /dev/null
+++ b/data/vim/patches/8.1.0289
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0289
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0289
+Problem: Cursor moves to wrong column after quickfix jump.
+Solution: Set the curswant flag. (Andy Massimino, closes #3331)
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0288/src/quickfix.c 2018-08-15 20:59:44.227025009 +0200
+--- src/quickfix.c 2018-08-15 22:24:24.487511768 +0200
+***************
+*** 3010,3015 ****
+--- 3010,3016 ----
+ ++screen_col;
+ }
+ }
++ curwin->w_set_curswant = TRUE;
+ check_cursor();
+ }
+ else
+*** ../vim-8.1.0288/src/testdir/test_quickfix.vim 2018-08-09 21:19:15.778436046 +0200
+--- src/testdir/test_quickfix.vim 2018-08-15 22:24:24.487511768 +0200
+***************
+*** 3546,3548 ****
+--- 3546,3557 ----
+ call Xview_result_split_tests('c')
+ call Xview_result_split_tests('l')
+ endfunc
++
++ " Test that :cc sets curswant
++ func Test_curswant()
++ helpgrep quickfix
++ normal! llll
++ 1cc
++ call assert_equal(getcurpos()[4], virtcol('.'))
++ cclose | helpclose
++ endfunc
+*** ../vim-8.1.0288/src/version.c 2018-08-15 20:59:44.227025009 +0200
+--- src/version.c 2018-08-15 22:26:32.450753305 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 289,
+ /**/
+
+--
+TERRY GILLIAM PLAYED: PATSY (ARTHUR'S TRUSTY STEED), THE GREEN KNIGHT
+ SOOTHSAYER, BRIDGEKEEPER, SIR GAWAIN (THE FIRST TO BE
+ KILLED BY THE RABBIT)
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0290 b/data/vim/patches/8.1.0290
new file mode 100644
index 000000000..75aea620e
--- /dev/null
+++ b/data/vim/patches/8.1.0290
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0290
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0290
+Problem: "cit" on an empty HTML tag changes the whole tag.
+Solution: Only adjust the area in Visual mode. (Andy Massimino,
+ closes #3332)
+Files: src/search.c, src/testdir/test_textobjects.vim
+
+
+*** ../vim-8.1.0289/src/search.c 2018-06-19 18:27:38.271694008 +0200
+--- src/search.c 2018-08-16 21:29:39.554118770 +0200
+***************
+*** 4106,4114 ****
+ }
+ curwin->w_cursor = end_pos;
+
+! /* If we now have the same text as before reset "do_include" and try
+! * again. */
+! if (EQUAL_POS(start_pos, old_start) && EQUAL_POS(end_pos, old_end))
+ {
+ do_include = TRUE;
+ curwin->w_cursor = old_start;
+--- 4106,4115 ----
+ }
+ curwin->w_cursor = end_pos;
+
+! // If we are in Visual mode and now have the same text as before set
+! // "do_include" and try again.
+! if (VIsual_active && EQUAL_POS(start_pos, old_start)
+! && EQUAL_POS(end_pos, old_end))
+ {
+ do_include = TRUE;
+ curwin->w_cursor = old_start;
+*** ../vim-8.1.0289/src/testdir/test_textobjects.vim 2018-06-19 18:27:38.271694008 +0200
+--- src/testdir/test_textobjects.vim 2018-08-16 21:33:07.376701569 +0200
+***************
+*** 121,126 ****
+--- 121,143 ----
+ enew!
+ endfunc
+
++ func Test_empty_html_tag()
++ new
++ call setline(1, '<div></div>')
++ normal 0citxxx
++ call assert_equal('<div>xxx</div>', getline(1))
++
++ call setline(1, '<div></div>')
++ normal 0f<cityyy
++ call assert_equal('<div>yyy</div>', getline(1))
++
++ call setline(1, '<div></div>')
++ normal 0f<vitsaaa
++ call assert_equal('aaa', getline(1))
++
++ bwipe!
++ endfunc
++
+ " Tests for match() and matchstr()
+ func Test_match()
+ call assert_equal("b", matchstr("abcd", ".", 0, 2))
+*** ../vim-8.1.0289/src/version.c 2018-08-15 22:29:46.977604162 +0200
+--- src/version.c 2018-08-16 21:34:22.102172128 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 290,
+ /**/
+
+--
+NEIL INNES PLAYED: THE FIRST SELF-DESTRUCTIVE MONK, ROBIN'S LEAST FAVORITE
+ MINSTREL, THE PAGE CRUSHED BY A RABBIT, THE OWNER OF A DUCK
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0291 b/data/vim/patches/8.1.0291
new file mode 100644
index 000000000..0ef2f6623
--- /dev/null
+++ b/data/vim/patches/8.1.0291
@@ -0,0 +1,137 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0291
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0291
+Problem: 'incsearch' highlighting not used for :sort.
+Solution: Handle pattern in :sort command.
+Files: src/ex_getln.c, src/testdir/test_search.vim
+ src/testdir/dumps/Test_incsearch_sort_01.dump
+
+
+*** ../vim-8.1.0290/src/ex_getln.c 2018-08-14 22:08:20.211616525 +0200
+--- src/ex_getln.c 2018-08-18 16:02:12.989443789 +0200
+***************
+*** 316,321 ****
+--- 316,322 ----
+ && (STRNCMP(cmd, "substitute", p - cmd) == 0
+ || STRNCMP(cmd, "smagic", p - cmd) == 0
+ || STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
++ || STRNCMP(cmd, "sort", p - cmd) == 0
+ || STRNCMP(cmd, "global", p - cmd) == 0
+ || STRNCMP(cmd, "vglobal", p - cmd) == 0))
+ {
+***************
+*** 331,336 ****
+--- 332,347 ----
+ if (*skipwhite(p) == NUL)
+ return FALSE;
+ }
++
++ // For ":sort" skip over flags.
++ if (cmd[0] == 's' && cmd[1] == 'o')
++ {
++ while (ASCII_ISALPHA(*(p = skipwhite(p))))
++ ++p;
++ if (*p == NUL)
++ return FALSE;
++ }
++
+ p = skipwhite(p);
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+***************
+*** 359,365 ****
+ search_last_line = ea.line2;
+ }
+ }
+! else if (*cmd == 's')
+ {
+ // :s defaults to the current line
+ search_first_line = curwin->w_cursor.lnum;
+--- 370,376 ----
+ search_last_line = ea.line2;
+ }
+ }
+! else if (cmd[0] == 's' && cmd[1] != 'o')
+ {
+ // :s defaults to the current line
+ search_first_line = curwin->w_cursor.lnum;
+*** ../vim-8.1.0290/src/testdir/test_search.vim 2018-08-14 21:32:17.618865046 +0200
+--- src/testdir/test_search.vim 2018-08-18 16:03:40.248302161 +0200
+***************
+*** 917,922 ****
+--- 917,949 ----
+ call delete('Xis_subst_script')
+ endfunc
+
++ " Similar to Test_incsearch_substitute_dump() for :sort
++ func Test_incsearch_ssort_dump()
++ if !exists('+incsearch')
++ return
++ endif
++ if !CanRunVimInTerminal()
++ return
++ endif
++ call writefile([
++ \ 'set incsearch hlsearch scrolloff=0',
++ \ 'call setline(1, ["another one 2", "that one 3", "the one 1"])',
++ \ ], 'Xis_sort_script')
++ let buf = RunVimInTerminal('-S Xis_sort_script', {'rows': 9, 'cols': 70})
++ " Give Vim a chance to redraw to get rid of the spaces in line 2 caused by
++ " the 'ambiwidth' check.
++ sleep 100m
++
++ " Need to send one key at a time to force a redraw.
++ call term_sendkeys(buf, ':sort ni u /on')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_sort_01', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ call StopVimInTerminal(buf)
++ call delete('Xis_sort_script')
++ endfunc
++
+ func Test_search_undefined_behaviour()
+ if !has("terminal")
+ return
+*** ../vim-8.1.0290/src/testdir/dumps/Test_incsearch_sort_01.dump 2018-08-18 16:10:12.014816068 +0200
+--- src/testdir/dumps/Test_incsearch_sort_01.dump 2018-08-18 16:03:45.812228115 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |a+0&#ffffff0|n|o|t|h|e|r| |o+1&&|n|e+0&&| |2| @56
++ |t|h|a|t| |o+0&#ffff4012|n|e+0&#ffffff0| |3| @59
++ |t|h|e| |o+0&#ffff4012|n|e+0&#ffffff0| |1| @60
++ |~+0#4040ff13&| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |:+0#0000000&|s|o|r|t| |n|i| |u| |/|o|n> @55
+*** ../vim-8.1.0290/src/version.c 2018-08-16 21:37:46.389318767 +0200
+--- src/version.c 2018-08-18 16:09:14.599647949 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 291,
+ /**/
+
+--
+The MS-Windows registry is no more hostile than any other bunch of state
+information... that is held in a binary format... a format that nobody
+understands... and is replicated and cached in a complex and largely
+undocumented way... and contains large amounts of duplicate and obfuscated
+information... (Ben Peterson)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0292 b/data/vim/patches/8.1.0292
new file mode 100644
index 000000000..12c55dbfa
--- /dev/null
+++ b/data/vim/patches/8.1.0292
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0292
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0292
+Problem: MS-Windows: the text "self-installing" confuses some users.
+Solution: Remove the text from the uninstall entry. (closes #3337)
+Files: src/dosinst.c
+
+
+*** ../vim-8.1.0291/src/dosinst.c 2018-06-26 23:18:40.593167147 +0200
+--- src/dosinst.c 2018-08-18 18:39:00.554972683 +0200
+***************
+*** 1575,1592 ****
+ }
+
+ printf("Creating an uninstall entry\n");
+
+ /* For the NSIS installer use the generated uninstaller. */
+ if (interactive)
+- {
+- sprintf(display_name, "Vim " VIM_VERSION_SHORT);
+ sprintf(uninstall_string, "%s\\uninstal.exe", installdir);
+- }
+ else
+- {
+- sprintf(display_name, "Vim " VIM_VERSION_SHORT " (self-installing)");
+ sprintf(uninstall_string, "%s\\uninstall-gui.exe", installdir);
+- }
+
+ lRet = register_uninstall(
+ HKEY_LOCAL_MACHINE,
+--- 1575,1587 ----
+ }
+
+ printf("Creating an uninstall entry\n");
++ sprintf(display_name, "Vim " VIM_VERSION_SHORT);
+
+ /* For the NSIS installer use the generated uninstaller. */
+ if (interactive)
+ sprintf(uninstall_string, "%s\\uninstal.exe", installdir);
+ else
+ sprintf(uninstall_string, "%s\\uninstall-gui.exe", installdir);
+
+ lRet = register_uninstall(
+ HKEY_LOCAL_MACHINE,
+*** ../vim-8.1.0291/src/version.c 2018-08-18 16:10:57.086158061 +0200
+--- src/version.c 2018-08-18 18:40:09.909908817 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 292,
+ /**/
+
+--
+A year spent in artificial intelligence is enough to make one
+believe in God.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0293 b/data/vim/patches/8.1.0293
new file mode 100644
index 000000000..f3a45c01e
--- /dev/null
+++ b/data/vim/patches/8.1.0293
@@ -0,0 +1,186 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0293
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0293
+Problem: Checks for type of stack is cryptic.
+Solution: Define IS_QF_STACK() and IS_LL_STACK(). (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0292/src/quickfix.c 2018-08-15 22:29:46.977604162 +0200
+--- src/quickfix.c 2018-08-18 19:51:21.810177230 +0200
+***************
+*** 159,164 ****
+--- 159,169 ----
+ #define IS_QF_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref == NULL)
+ /* Location list window check helper macro */
+ #define IS_LL_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL)
++
++ // Quickfix and location list stack check helper macros
++ #define IS_QF_STACK(qi) (qi == &ql_info)
++ #define IS_LL_STACK(qi) (qi != &ql_info)
++
+ /*
+ * Return location list for window 'wp'
+ * For location list window, return the referenced location list
+***************
+*** 1940,1946 ****
+ qfp->qf_fnum = bufnum;
+ if (buf != NULL)
+ buf->b_has_qf_entry |=
+! (qi == &ql_info) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ }
+ else
+ qfp->qf_fnum = qf_get_fnum(qi, qf_idx, dir, fname);
+--- 1945,1951 ----
+ qfp->qf_fnum = bufnum;
+ if (buf != NULL)
+ buf->b_has_qf_entry |=
+! IS_QF_STACK(qi) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ }
+ else
+ qfp->qf_fnum = qf_get_fnum(qi, qf_idx, dir, fname);
+***************
+*** 2224,2230 ****
+ return 0;
+
+ buf->b_has_qf_entry =
+! (qi == &ql_info) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ return buf->b_fnum;
+ }
+
+--- 2229,2235 ----
+ return 0;
+
+ buf->b_has_qf_entry =
+! IS_QF_STACK(qi) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ return buf->b_fnum;
+ }
+
+***************
+*** 2631,2637 ****
+ if (cmdmod.split == 0 && curwin->w_width != Columns
+ && curwin->w_width < 80)
+ flags |= WSP_TOP;
+! if (qi != &ql_info)
+ flags |= WSP_NEWLOC; /* don't copy the location list */
+
+ if (win_split(0, flags) == FAIL)
+--- 2636,2642 ----
+ if (cmdmod.split == 0 && curwin->w_width != Columns
+ && curwin->w_width < 80)
+ flags |= WSP_TOP;
+! if (IS_LL_STACK(qi))
+ flags |= WSP_NEWLOC; /* don't copy the location list */
+
+ if (win_split(0, flags) == FAIL)
+***************
+*** 2642,2648 ****
+ if (curwin->w_height < p_hh)
+ win_setheight((int)p_hh);
+
+! if (qi != &ql_info) /* not a quickfix list */
+ {
+ /* The new window should use the supplied location list */
+ curwin->w_llist = qi;
+--- 2647,2653 ----
+ if (curwin->w_height < p_hh)
+ win_setheight((int)p_hh);
+
+! if (IS_LL_STACK(qi)) // not a quickfix list
+ {
+ /* The new window should use the supplied location list */
+ curwin->w_llist = qi;
+***************
+*** 2918,2924 ****
+ retval = buflist_getfile(qf_ptr->qf_fnum,
+ (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+
+! if (qi != &ql_info)
+ {
+ /*
+ * Location list. Check whether the associated window is still
+--- 2923,2929 ----
+ retval = buflist_getfile(qf_ptr->qf_fnum,
+ (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+
+! if (IS_LL_STACK(qi))
+ {
+ /*
+ * Location list. Check whether the associated window is still
+***************
+*** 2939,2945 ****
+ else if (old_qf_curlist != qi->qf_curlist
+ || !is_qf_entry_present(qi, qf_ptr))
+ {
+! if (qi == &ql_info)
+ EMSG(_("E925: Current quickfix was changed"));
+ else
+ EMSG(_(e_loc_list_changed));
+--- 2944,2950 ----
+ else if (old_qf_curlist != qi->qf_curlist
+ || !is_qf_entry_present(qi, qf_ptr))
+ {
+! if (IS_QF_STACK(qi))
+ EMSG(_("E925: Current quickfix was changed"));
+ else
+ EMSG(_(e_loc_list_changed));
+***************
+*** 4040,4047 ****
+ * pointing to the location list.
+ */
+ if (bt_quickfix(win->w_buffer))
+! if ((qi == &ql_info && win->w_llist_ref == NULL)
+! || (qi != &ql_info && win->w_llist_ref == qi))
+ return TRUE;
+
+ return FALSE;
+--- 4045,4052 ----
+ * pointing to the location list.
+ */
+ if (bt_quickfix(win->w_buffer))
+! if ((IS_QF_STACK(qi) && win->w_llist_ref == NULL)
+! || (IS_LL_STACK(qi) && win->w_llist_ref == qi))
+ return TRUE;
+
+ return FALSE;
+***************
+*** 6955,6961 ****
+ {
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+! if (!new_qi && qi != &ql_info && qf_find_buf(qi) == NULL)
+ /* autocommands made "qi" invalid */
+ return;
+ }
+--- 6960,6966 ----
+ {
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+! if (!new_qi && IS_LL_STACK(qi) && qf_find_buf(qi) == NULL)
+ /* autocommands made "qi" invalid */
+ return;
+ }
+*** ../vim-8.1.0292/src/version.c 2018-08-18 19:04:32.462231841 +0200
+--- src/version.c 2018-08-18 19:58:34.263431696 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 293,
+ /**/
+
+--
+FATAL ERROR! SYSTEM HALTED! - Press any key to continue doing nothing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0294 b/data/vim/patches/8.1.0294
new file mode 100644
index 000000000..bcd97946c
--- /dev/null
+++ b/data/vim/patches/8.1.0294
@@ -0,0 +1,93 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0294
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0294
+Problem: MS-Windows: sometimes uses short directory name.
+Solution: Expand to long file name with correct caps. (Nobuhiro Takasaki,
+ closes #3334)
+Files: src/os_win32.c
+
+
+*** ../vim-8.1.0293/src/os_win32.c 2018-08-07 22:30:26.674240818 +0200
+--- src/os_win32.c 2018-08-18 20:17:32.174060746 +0200
+***************
+*** 3108,3113 ****
+--- 3108,3115 ----
+ char_u *buf,
+ int len)
+ {
++ char_u abuf[_MAX_PATH + 1];
++
+ /*
+ * Originally this was:
+ * return (getcwd(buf, len) != NULL ? OK : FAIL);
+***************
+*** 3121,3127 ****
+
+ if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
+ {
+! char_u *p = utf16_to_enc(wbuf, NULL);
+
+ if (p != NULL)
+ {
+--- 3123,3135 ----
+
+ if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
+ {
+! WCHAR wcbuf[_MAX_PATH + 1];
+! char_u *p;
+!
+! if (GetLongPathNameW(wbuf, wcbuf, _MAX_PATH) != 0)
+! p = utf16_to_enc(wcbuf, NULL);
+! else
+! p = utf16_to_enc(wbuf, NULL);
+
+ if (p != NULL)
+ {
+***************
+*** 3133,3139 ****
+ return FAIL;
+ }
+ #endif
+! return (GetCurrentDirectory(len, (LPSTR)buf) != 0 ? OK : FAIL);
+ }
+
+ /*
+--- 3141,3154 ----
+ return FAIL;
+ }
+ #endif
+! if (GetCurrentDirectory(len, (LPSTR)buf) == 0)
+! return FAIL;
+! if (GetLongPathNameA((LPSTR)buf, (LPSTR)abuf, _MAX_PATH) == 0)
+! // return the short path name
+! return OK;
+!
+! vim_strncpy(abuf, buf, len - 1);
+! return OK;
+ }
+
+ /*
+*** ../vim-8.1.0293/src/version.c 2018-08-18 19:59:48.418322409 +0200
+--- src/version.c 2018-08-18 20:19:26.912289008 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 294,
+ /**/
+
+--
+A fool must search for a greater fool to find admiration.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0295 b/data/vim/patches/8.1.0295
new file mode 100644
index 000000000..52a56b81e
--- /dev/null
+++ b/data/vim/patches/8.1.0295
@@ -0,0 +1,294 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0295
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0295
+Problem: No 'incsearch' highlighting for :vimgrep and similar commands.
+Solution: Parse the :vimgrep command and similar ones to locate the search
+ pattern. (Hirohito Higashi, closes #3344)
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_vimgrep_01.dump,
+ src/testdir/dumps/Test_incsearch_vimgrep_02.dump,
+ src/testdir/dumps/Test_incsearch_vimgrep_03.dump,
+ src/testdir/dumps/Test_incsearch_vimgrep_04.dump,
+ src/testdir/dumps/Test_incsearch_vimgrep_05.dump
+
+
+*** ../vim-8.1.0294/src/ex_getln.c 2018-08-18 16:10:57.086158061 +0200
+--- src/ex_getln.c 2018-08-18 20:54:23.233372360 +0200
+***************
+*** 307,355 ****
+ cmdmod = save_cmdmod;
+
+ cmd = skip_range(ea.cmd, NULL);
+! if (*cmd == 's' || *cmd == 'g' || *cmd == 'v')
+ {
+ // Skip over "substitute" to find the pattern separator.
+ for (p = cmd; ASCII_ISALPHA(*p); ++p)
+ ;
+! if (*skipwhite(p) != NUL
+! && (STRNCMP(cmd, "substitute", p - cmd) == 0
+! || STRNCMP(cmd, "smagic", p - cmd) == 0
+! || STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "sort", p - cmd) == 0
+! || STRNCMP(cmd, "global", p - cmd) == 0
+! || STRNCMP(cmd, "vglobal", p - cmd) == 0))
+ {
+! if (*cmd == 's' && cmd[1] == 'm')
+! p_magic = TRUE;
+! else if (*cmd == 's' && cmd[1] == 'n')
+! p_magic = FALSE;
+!
+! // Check for "global!/".
+! if (*cmd == 'g' && *p == '!')
+ {
+! p++;
+! if (*skipwhite(p) == NUL)
+! return FALSE;
+ }
+!
+! // For ":sort" skip over flags.
+! if (cmd[0] == 's' && cmd[1] == 'o')
+ {
+! while (ASCII_ISALPHA(*(p = skipwhite(p))))
+! ++p;
+! if (*p == NUL)
+! return FALSE;
+ }
+
+- p = skipwhite(p);
+- delim = *p++;
+- end = skip_regexp(p, delim, p_magic, NULL);
+ if (end > p || *end == delim)
+ {
+ pos_T save_cursor = curwin->w_cursor;
+
+! // found a non-empty pattern
+ *skiplen = (int)(p - ccline.cmdbuff);
+ *patlen = (int)(end - p);
+
+--- 307,379 ----
+ cmdmod = save_cmdmod;
+
+ cmd = skip_range(ea.cmd, NULL);
+! if (*cmd == 's' || *cmd == 'g' || *cmd == 'v' || *cmd == 'l')
+ {
+ // Skip over "substitute" to find the pattern separator.
+ for (p = cmd; ASCII_ISALPHA(*p); ++p)
+ ;
+! if (*skipwhite(p) != NUL)
+ {
+! if (STRNCMP(cmd, "substitute", p - cmd) == 0
+! || STRNCMP(cmd, "smagic", p - cmd) == 0
+! || STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "sort", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "global", p - cmd) == 0
+! || STRNCMP(cmd, "vglobal", p - cmd) == 0)
+ {
+! if (*cmd == 's' && cmd[1] == 'm')
+! p_magic = TRUE;
+! else if (*cmd == 's' && cmd[1] == 'n')
+! p_magic = FALSE;
+!
+! // Check for "global!/".
+! if (*cmd == 'g' && *p == '!')
+! {
+! p++;
+! if (*skipwhite(p) == NUL)
+! return FALSE;
+! }
+!
+! // For ":sort" skip over flags.
+! if (cmd[0] == 's' && cmd[1] == 'o')
+! {
+! while (ASCII_ISALPHA(*(p = skipwhite(p))))
+! ++p;
+! if (*p == NUL)
+! return FALSE;
+! }
+!
+! p = skipwhite(p);
+! delim = *p++;
+! end = skip_regexp(p, delim, p_magic, NULL);
+ }
+! else if (STRNCMP(cmd, "vimgrep", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "vimgrepadd", MAX(p - cmd, 8)) == 0
+! || STRNCMP(cmd, "lvimgrep", MAX(p - cmd, 2)) == 0
+! || STRNCMP(cmd, "lvimgrepadd", MAX(p - cmd, 9)) == 0)
+! {
+! // Check for "!/".
+! if (*p == '!')
+! {
+! p++;
+! if (*skipwhite(p) == NUL)
+! return FALSE;
+! }
+! p = skipwhite(p);
+! delim = (vim_isIDc(*p)) ? ' ' : *p++;
+! end = skip_regexp(p, delim, p_magic, NULL);
+! }
+! else
+ {
+! end = p;
+! delim = -1;
+ }
+
+ if (end > p || *end == delim)
+ {
+ pos_T save_cursor = curwin->w_cursor;
+
+! // found a non-empty pattern or //
+ *skiplen = (int)(p - ccline.cmdbuff);
+ *patlen = (int)(end - p);
+
+*** ../vim-8.1.0294/src/testdir/test_search.vim 2018-08-18 16:10:57.086158061 +0200
+--- src/testdir/test_search.vim 2018-08-18 20:41:36.648615963 +0200
+***************
+*** 944,949 ****
+--- 944,996 ----
+ call delete('Xis_sort_script')
+ endfunc
+
++ " Similar to Test_incsearch_substitute_dump() for :vimgrep famiry
++ func Test_incsearch_vimgrep_dump()
++ if !exists('+incsearch')
++ return
++ endif
++ if !CanRunVimInTerminal()
++ return
++ endif
++ call writefile([
++ \ 'set incsearch hlsearch scrolloff=0',
++ \ 'call setline(1, ["another one 2", "that one 3", "the one 1"])',
++ \ ], 'Xis_vimgrep_script')
++ let buf = RunVimInTerminal('-S Xis_vimgrep_script', {'rows': 9, 'cols': 70})
++ " Give Vim a chance to redraw to get rid of the spaces in line 2 caused by
++ " the 'ambiwidth' check.
++ sleep 100m
++
++ " Need to send one key at a time to force a redraw.
++ call term_sendkeys(buf, ':vimgrep on')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_01', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ call term_sendkeys(buf, ':vimg /on/ *.txt')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_02', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ call term_sendkeys(buf, ':vimgrepadd "\<on')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_03', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ call term_sendkeys(buf, ':lv "tha')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_04', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ call term_sendkeys(buf, ':lvimgrepa "the" **/*.txt')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_05', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ call StopVimInTerminal(buf)
++ call delete('Xis_vimgrep_script')
++ endfunc
++
+ func Test_search_undefined_behaviour()
+ if !has("terminal")
+ return
+*** ../vim-8.1.0294/src/testdir/dumps/Test_incsearch_vimgrep_01.dump 2018-08-18 21:04:47.792014166 +0200
+--- src/testdir/dumps/Test_incsearch_vimgrep_01.dump 2018-08-18 20:41:36.648615963 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |a+0&#ffffff0|n|o|t|h|e|r| |o+1&&|n|e+0&&| |2| @56
++ |t|h|a|t| |o+0&#ffff4012|n|e+0&#ffffff0| |3| @59
++ |t|h|e| |o+0&#ffff4012|n|e+0&#ffffff0| |1| @60
++ |~+0#4040ff13&| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |:+0#0000000&|v|i|m|g|r|e|p| |o|n> @58
+*** ../vim-8.1.0294/src/testdir/dumps/Test_incsearch_vimgrep_02.dump 2018-08-18 21:04:47.796014105 +0200
+--- src/testdir/dumps/Test_incsearch_vimgrep_02.dump 2018-08-18 20:41:36.648615963 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |a+0&#ffffff0|n|o|t|h|e|r| |o+1&&|n|e+0&&| |2| @56
++ |t|h|a|t| |o+0&#ffff4012|n|e+0&#ffffff0| |3| @59
++ |t|h|e| |o+0&#ffff4012|n|e+0&#ffffff0| |1| @60
++ |~+0#4040ff13&| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |:+0#0000000&|v|i|m|g| |/|o|n|/| |*|.|t|x|t> @53
+*** ../vim-8.1.0294/src/testdir/dumps/Test_incsearch_vimgrep_03.dump 2018-08-18 21:04:47.804013985 +0200
+--- src/testdir/dumps/Test_incsearch_vimgrep_03.dump 2018-08-18 20:41:36.648615963 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |a+0&#ffffff0|n|o|t|h|e|r| |o+1&&|n|e+0&&| |2| @56
++ |t|h|a|t| |o+0&#ffff4012|n|e+0&#ffffff0| |3| @59
++ |t|h|e| |o+0&#ffff4012|n|e+0&#ffffff0| |1| @60
++ |~+0#4040ff13&| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |:+0#0000000&|v|i|m|g|r|e|p|a|d@1| |"|\|<|o|n> @52
+*** ../vim-8.1.0294/src/testdir/dumps/Test_incsearch_vimgrep_04.dump 2018-08-18 21:04:47.808013925 +0200
+--- src/testdir/dumps/Test_incsearch_vimgrep_04.dump 2018-08-18 20:41:36.648615963 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |a+0&#ffffff0|n|o|t|h|e|r| |o|n|e| |2| @56
++ |t+1&&|h|a|t+0&&| |o|n|e| |3| @59
++ |t|h|e| |o|n|e| |1| @60
++ |~+0#4040ff13&| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |:+0#0000000&|l|v| |"|t|h|a> @61
+*** ../vim-8.1.0294/src/testdir/dumps/Test_incsearch_vimgrep_05.dump 2018-08-18 21:04:47.816013804 +0200
+--- src/testdir/dumps/Test_incsearch_vimgrep_05.dump 2018-08-18 20:41:36.648615963 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |a+0&#ffffff0|n|o|t+1&&|h|e|r+0&&| |o|n|e| |2| @56
++ |t|h|a|t| |o|n|e| |3| @59
++ |t+0&#ffff4012|h|e| +0&#ffffff0|o|n|e| |1| @60
++ |~+0#4040ff13&| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |~| @68
++ |:+0#0000000&|l|v|i|m|g|r|e|p|a| |"|t|h|e|"| |*@1|/|*|.|t|x|t> @44
+*** ../vim-8.1.0294/src/version.c 2018-08-18 20:20:23.335417254 +0200
+--- src/version.c 2018-08-18 21:01:32.666945603 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 295,
+ /**/
+
+--
+Wi n0t trei a h0liday in Sweden thi yer?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0296 b/data/vim/patches/8.1.0296
new file mode 100644
index 000000000..26acf8115
--- /dev/null
+++ b/data/vim/patches/8.1.0296
@@ -0,0 +1,306 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0296
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0296
+Problem: Command parsing for 'incsearch' is a bit ugly.
+Solution: Return when there is no pattern. Put common checks together.
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0295/src/ex_getln.c 2018-08-18 21:04:57.743864534 +0200
+--- src/ex_getln.c 2018-08-18 21:20:59.041314761 +0200
+***************
+*** 276,415 ****
+ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
+ int *skiplen, int *patlen)
+ {
+ *skiplen = 0;
+ *patlen = ccline.cmdlen;
+
+! if (p_is && !cmd_silent)
+ {
+! // by default search all lines
+! search_first_line = 0;
+! search_last_line = MAXLNUM;
+!
+! if (firstc == '/' || firstc == '?')
+! return TRUE;
+! if (firstc == ':')
+ {
+! char_u *cmd;
+! cmdmod_T save_cmdmod = cmdmod;
+! char_u *p;
+! int delim;
+! char_u *end;
+! char_u *dummy;
+! exarg_T ea;
+!
+! vim_memset(&ea, 0, sizeof(ea));
+! ea.line1 = 1;
+! ea.line2 = 1;
+! ea.cmd = ccline.cmdbuff;
+! ea.addr_type = ADDR_LINES;
+!
+! parse_command_modifiers(&ea, &dummy, TRUE);
+! cmdmod = save_cmdmod;
+!
+! cmd = skip_range(ea.cmd, NULL);
+! if (*cmd == 's' || *cmd == 'g' || *cmd == 'v' || *cmd == 'l')
+! {
+! // Skip over "substitute" to find the pattern separator.
+! for (p = cmd; ASCII_ISALPHA(*p); ++p)
+! ;
+! if (*skipwhite(p) != NUL)
+! {
+! if (STRNCMP(cmd, "substitute", p - cmd) == 0
+! || STRNCMP(cmd, "smagic", p - cmd) == 0
+! || STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "sort", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "global", p - cmd) == 0
+! || STRNCMP(cmd, "vglobal", p - cmd) == 0)
+! {
+! if (*cmd == 's' && cmd[1] == 'm')
+! p_magic = TRUE;
+! else if (*cmd == 's' && cmd[1] == 'n')
+! p_magic = FALSE;
+!
+! // Check for "global!/".
+! if (*cmd == 'g' && *p == '!')
+! {
+! p++;
+! if (*skipwhite(p) == NUL)
+! return FALSE;
+! }
+!
+! // For ":sort" skip over flags.
+! if (cmd[0] == 's' && cmd[1] == 'o')
+! {
+! while (ASCII_ISALPHA(*(p = skipwhite(p))))
+! ++p;
+! if (*p == NUL)
+! return FALSE;
+! }
+!
+! p = skipwhite(p);
+! delim = *p++;
+! end = skip_regexp(p, delim, p_magic, NULL);
+! }
+! else if (STRNCMP(cmd, "vimgrep", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "vimgrepadd", MAX(p - cmd, 8)) == 0
+! || STRNCMP(cmd, "lvimgrep", MAX(p - cmd, 2)) == 0
+! || STRNCMP(cmd, "lvimgrepadd", MAX(p - cmd, 9)) == 0)
+! {
+! // Check for "!/".
+! if (*p == '!')
+! {
+! p++;
+! if (*skipwhite(p) == NUL)
+! return FALSE;
+! }
+! p = skipwhite(p);
+! delim = (vim_isIDc(*p)) ? ' ' : *p++;
+! end = skip_regexp(p, delim, p_magic, NULL);
+! }
+! else
+! {
+! end = p;
+! delim = -1;
+! }
+!
+! if (end > p || *end == delim)
+! {
+! pos_T save_cursor = curwin->w_cursor;
+!
+! // found a non-empty pattern or //
+! *skiplen = (int)(p - ccline.cmdbuff);
+! *patlen = (int)(end - p);
+!
+! // parse the address range
+! curwin->w_cursor = is_state->search_start;
+! parse_cmd_address(&ea, &dummy);
+! if (ea.addr_count > 0)
+! {
+! // Allow for reverse match.
+! if (ea.line2 < ea.line1)
+! {
+! search_first_line = ea.line2;
+! search_last_line = ea.line1;
+! }
+! else
+! {
+! search_first_line = ea.line1;
+! search_last_line = ea.line2;
+! }
+! }
+! else if (cmd[0] == 's' && cmd[1] != 'o')
+! {
+! // :s defaults to the current line
+! search_first_line = curwin->w_cursor.lnum;
+! search_last_line = curwin->w_cursor.lnum;
+! }
+!
+! curwin->w_cursor = save_cursor;
+! return TRUE;
+! }
+! }
+! }
+ }
+ }
+
+! return FALSE;
+ }
+
+ static void
+--- 276,400 ----
+ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
+ int *skiplen, int *patlen)
+ {
++ char_u *cmd;
++ cmdmod_T save_cmdmod = cmdmod;
++ char_u *p;
++ int delim_optional = FALSE;
++ int delim;
++ char_u *end;
++ char_u *dummy;
++ exarg_T ea;
++ pos_T save_cursor;
++
+ *skiplen = 0;
+ *patlen = ccline.cmdlen;
+
+! if (!p_is || cmd_silent)
+! return FALSE;
+!
+! // by default search all lines
+! search_first_line = 0;
+! search_last_line = MAXLNUM;
+!
+! if (firstc == '/' || firstc == '?')
+! return TRUE;
+! if (firstc != ':')
+! return FALSE;
+!
+! vim_memset(&ea, 0, sizeof(ea));
+! ea.line1 = 1;
+! ea.line2 = 1;
+! ea.cmd = ccline.cmdbuff;
+! ea.addr_type = ADDR_LINES;
+!
+! parse_command_modifiers(&ea, &dummy, TRUE);
+! cmdmod = save_cmdmod;
+!
+! cmd = skip_range(ea.cmd, NULL);
+! if (vim_strchr((char_u *)"sgvl", *cmd) == NULL)
+! return FALSE;
+!
+! // Skip over "substitute" to find the pattern separator.
+! for (p = cmd; ASCII_ISALPHA(*p); ++p)
+! ;
+! if (*skipwhite(p) == NUL)
+! return FALSE;
+!
+! if (STRNCMP(cmd, "substitute", p - cmd) == 0
+! || STRNCMP(cmd, "smagic", p - cmd) == 0
+! || STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "vglobal", p - cmd) == 0)
+! {
+! if (*cmd == 's' && cmd[1] == 'm')
+! p_magic = TRUE;
+! else if (*cmd == 's' && cmd[1] == 'n')
+! p_magic = FALSE;
+! }
+! else if (STRNCMP(cmd, "sort", MAX(p - cmd, 3)) == 0)
+ {
+! // skip over flags
+! while (ASCII_ISALPHA(*(p = skipwhite(p))))
+! ++p;
+! if (*p == NUL)
+! return FALSE;
+! }
+! else if (STRNCMP(cmd, "vimgrep", MAX(p - cmd, 3)) == 0
+! || STRNCMP(cmd, "vimgrepadd", MAX(p - cmd, 8)) == 0
+! || STRNCMP(cmd, "lvimgrep", MAX(p - cmd, 2)) == 0
+! || STRNCMP(cmd, "lvimgrepadd", MAX(p - cmd, 9)) == 0
+! || STRNCMP(cmd, "global", p - cmd) == 0)
+! {
+! // skip over "!"
+! if (*p == '!')
+ {
+! p++;
+! if (*skipwhite(p) == NUL)
+! return FALSE;
+ }
++ if (*cmd != 'g')
++ delim_optional = TRUE;
++ }
++ else
++ return FALSE;
++
++ p = skipwhite(p);
++ delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++;
++ end = skip_regexp(p, delim, p_magic, NULL);
++
++ if (end == p && *end != delim)
++ return FALSE;
++ // found a non-empty pattern or //
++
++ *skiplen = (int)(p - ccline.cmdbuff);
++ *patlen = (int)(end - p);
++
++ // parse the address range
++ save_cursor = curwin->w_cursor;
++ curwin->w_cursor = is_state->search_start;
++ parse_cmd_address(&ea, &dummy);
++ if (ea.addr_count > 0)
++ {
++ // Allow for reverse match.
++ if (ea.line2 < ea.line1)
++ {
++ search_first_line = ea.line2;
++ search_last_line = ea.line1;
++ }
++ else
++ {
++ search_first_line = ea.line1;
++ search_last_line = ea.line2;
++ }
++ }
++ else if (cmd[0] == 's' && cmd[1] != 'o')
++ {
++ // :s defaults to the current line
++ search_first_line = curwin->w_cursor.lnum;
++ search_last_line = curwin->w_cursor.lnum;
+ }
+
+! curwin->w_cursor = save_cursor;
+! return TRUE;
+ }
+
+ static void
+*** ../vim-8.1.0295/src/version.c 2018-08-18 21:04:57.743864534 +0200
+--- src/version.c 2018-08-18 21:22:23.748034012 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 296,
+ /**/
+
+--
+The Characters and incidents portrayed and the names used are fictitious and
+any similarity to the names, characters, or history of any person is entirely
+accidental and unintentional.
+ Signed RICHARD M. NIXON
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0297 b/data/vim/patches/8.1.0297
new file mode 100644
index 000000000..c91b19222
--- /dev/null
+++ b/data/vim/patches/8.1.0297
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0297
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0297 (after 8.1.0294)
+Problem: MS-Windows: tests fail, Vim crashes.
+Solution: Fix long file name handling.
+Files: src/os_win32.c
+
+
+*** ../vim-8.1.0296/src/os_win32.c 2018-08-18 20:20:23.335417254 +0200
+--- src/os_win32.c 2018-08-19 14:36:25.032599518 +0200
+***************
+*** 3109,3114 ****
+--- 3109,3115 ----
+ int len)
+ {
+ char_u abuf[_MAX_PATH + 1];
++ DWORD lfnlen;
+
+ /*
+ * Originally this was:
+***************
+*** 3124,3134 ****
+ if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
+ {
+ WCHAR wcbuf[_MAX_PATH + 1];
+! char_u *p;
+
+ if (GetLongPathNameW(wbuf, wcbuf, _MAX_PATH) != 0)
+ p = utf16_to_enc(wcbuf, NULL);
+! else
+ p = utf16_to_enc(wbuf, NULL);
+
+ if (p != NULL)
+--- 3125,3143 ----
+ if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
+ {
+ WCHAR wcbuf[_MAX_PATH + 1];
+! char_u *p = NULL;
+
+ if (GetLongPathNameW(wbuf, wcbuf, _MAX_PATH) != 0)
++ {
+ p = utf16_to_enc(wcbuf, NULL);
+! if (STRLEN(p) >= (size_t)len)
+! {
+! // long path name is too long, fall back to short one
+! vim_free(p);
+! p = NULL;
+! }
+! }
+! if (p == NULL)
+ p = utf16_to_enc(wbuf, NULL);
+
+ if (p != NULL)
+***************
+*** 3143,3153 ****
+ #endif
+ if (GetCurrentDirectory(len, (LPSTR)buf) == 0)
+ return FAIL;
+! if (GetLongPathNameA((LPSTR)buf, (LPSTR)abuf, _MAX_PATH) == 0)
+! // return the short path name
+ return OK;
+
+! vim_strncpy(abuf, buf, len - 1);
+ return OK;
+ }
+
+--- 3152,3164 ----
+ #endif
+ if (GetCurrentDirectory(len, (LPSTR)buf) == 0)
+ return FAIL;
+! lfnlen = GetLongPathNameA((LPCSTR)buf, (LPSTR)abuf, _MAX_PATH);
+! if (lfnlen == 0 || lfnlen >= (DWORD)len)
+! // Failed to get long path name or it's too long: fall back to the
+! // short path name.
+ return OK;
+
+! STRCPY(buf, abuf);
+ return OK;
+ }
+
+*** ../vim-8.1.0296/src/version.c 2018-08-18 21:23:00.787474060 +0200
+--- src/version.c 2018-08-19 14:33:49.277455703 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 297,
+ /**/
+
+--
+The most powerful force in the universe is gossip.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0298 b/data/vim/patches/8.1.0298
new file mode 100644
index 000000000..5e1c59529
--- /dev/null
+++ b/data/vim/patches/8.1.0298
@@ -0,0 +1,44 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0298
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0298
+Problem: Window resize test sometimes fails on Mac.
+Solution: Add Test_popup_and_window_resize() to flaky tests.
+Files: src/testdir/runtest.vim
+
+
+*** ../vim-8.1.0297/src/testdir/runtest.vim 2018-06-12 14:58:35.566840630 +0200
+--- src/testdir/runtest.vim 2018-08-19 15:46:43.666107201 +0200
+***************
+*** 272,277 ****
+--- 272,278 ----
+ \ 'Test_paused()',
+ \ 'Test_pipe_through_sort_all()',
+ \ 'Test_pipe_through_sort_some()',
++ \ 'Test_popup_and_window_resize()', " sometimes fails on Mac
+ \ 'Test_quoteplus()',
+ \ 'Test_quotestar()',
+ \ 'Test_reltime()',
+*** ../vim-8.1.0297/src/version.c 2018-08-19 14:38:38.979859032 +0200
+--- src/version.c 2018-08-19 15:47:31.893813723 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 298,
+ /**/
+
+--
+Mushrooms always grow in damp places and so they look like umbrellas.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0299 b/data/vim/patches/8.1.0299
new file mode 100644
index 000000000..cbb29531f
--- /dev/null
+++ b/data/vim/patches/8.1.0299
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0299
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0299 (after 8.1.0298)
+Problem: misplaced comment
+Solution: Remove comment
+Files: src/testdir/runtest.vim
+
+
+*** ../vim-8.1.0298/src/testdir/runtest.vim 2018-08-19 16:09:15.374103260 +0200
+--- src/testdir/runtest.vim 2018-08-19 16:52:33.834574032 +0200
+***************
+*** 272,278 ****
+ \ 'Test_paused()',
+ \ 'Test_pipe_through_sort_all()',
+ \ 'Test_pipe_through_sort_some()',
+! \ 'Test_popup_and_window_resize()', " sometimes fails on Mac
+ \ 'Test_quoteplus()',
+ \ 'Test_quotestar()',
+ \ 'Test_reltime()',
+--- 272,278 ----
+ \ 'Test_paused()',
+ \ 'Test_pipe_through_sort_all()',
+ \ 'Test_pipe_through_sort_some()',
+! \ 'Test_popup_and_window_resize()',
+ \ 'Test_quoteplus()',
+ \ 'Test_quotestar()',
+ \ 'Test_reltime()',
+*** ../vim-8.1.0298/src/version.c 2018-08-19 16:09:15.378103236 +0200
+--- src/version.c 2018-08-19 16:53:09.818358203 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 299,
+ /**/
+
+--
+To keep milk from turning sour: Keep it in the cow.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0300 b/data/vim/patches/8.1.0300
new file mode 100644
index 000000000..45f5bd25f
--- /dev/null
+++ b/data/vim/patches/8.1.0300
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0300
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0300
+Problem: The old window title might be freed twice. (Dominique Pelle)
+Solution: Do not free "oldtitle" in a signal handler but set a flag to have
+ it freed later.
+Files: src/os_unix.c
+
+
+*** ../vim-8.1.0299/src/os_unix.c 2018-08-11 13:57:16.215969777 +0200
+--- src/os_unix.c 2018-08-19 22:13:19.187362836 +0200
+***************
+*** 161,166 ****
+--- 161,167 ----
+ static int get_x11_icon(int);
+
+ static char_u *oldtitle = NULL;
++ static volatile int oldtitle_outdated = FALSE;
+ static int did_set_title = FALSE;
+ static char_u *oldicon = NULL;
+ static int did_set_icon = FALSE;
+***************
+*** 1231,1238 ****
+ after_sigcont(void)
+ {
+ # ifdef FEAT_TITLE
+! // Set oldtitle to NULL, so the current title is obtained again.
+! VIM_CLEAR(oldtitle);
+ # endif
+ settmode(TMODE_RAW);
+ need_check_timestamps = TRUE;
+--- 1232,1240 ----
+ after_sigcont(void)
+ {
+ # ifdef FEAT_TITLE
+! // Don't change "oldtitle" in a signal handler, set a flag to obtain it
+! // again later.
+! oldtitle_outdated = TRUE;
+ # endif
+ settmode(TMODE_RAW);
+ need_check_timestamps = TRUE;
+***************
+*** 2281,2286 ****
+--- 2283,2293 ----
+ */
+ if ((type || *T_TS != NUL) && title != NULL)
+ {
++ if (oldtitle_outdated)
++ {
++ oldtitle_outdated = FALSE;
++ VIM_CLEAR(oldtitle);
++ }
+ if (oldtitle == NULL
+ #ifdef FEAT_GUI
+ && !gui.in_use
+*** ../vim-8.1.0299/src/version.c 2018-08-19 17:03:57.369405009 +0200
+--- src/version.c 2018-08-19 22:11:53.003778230 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 300,
+ /**/
+
+--
+System administrators are just like women: You can't live with them and you
+can't live without them.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0301 b/data/vim/patches/8.1.0301
new file mode 100644
index 000000000..71730f0a9
--- /dev/null
+++ b/data/vim/patches/8.1.0301
@@ -0,0 +1,261 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0301
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0301
+Problem: GTK: Input method popup displayed on wrong screen.
+Solution: Add the screen position offset. (Ken Takata, closes #3268)
+Files: src/gui_beval.c, src/gui_gtk_x11.c, src/mbyte.c,
+ src/proto/gui_gtk_x11.pro
+
+
+*** ../vim-8.1.0300/src/gui_beval.c 2018-06-28 12:05:07.085006926 +0200
+--- src/gui_beval.c 2018-08-19 22:45:48.731522222 +0200
+***************
+*** 944,949 ****
+--- 944,951 ----
+ GtkRequisition requisition;
+ int screen_w;
+ int screen_h;
++ int screen_x;
++ int screen_y;
+ int x;
+ int y;
+ int x_offset = EVAL_OFFSET_X;
+***************
+*** 956,963 ****
+ screen = gtk_widget_get_screen(beval->target);
+ gtk_window_set_screen(GTK_WINDOW(beval->balloonShell), screen);
+ # endif
+! gui_gtk_get_screen_size_of_win(beval->balloonShell,
+! &screen_w, &screen_h);
+ # if !GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_ensure_style(beval->balloonShell);
+ gtk_widget_ensure_style(beval->balloonLabel);
+--- 958,965 ----
+ screen = gtk_widget_get_screen(beval->target);
+ gtk_window_set_screen(GTK_WINDOW(beval->balloonShell), screen);
+ # endif
+! gui_gtk_get_screen_geom_of_win(beval->balloonShell,
+! &screen_x, &screen_y, &screen_w, &screen_h);
+ # if !GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_ensure_style(beval->balloonShell);
+ gtk_widget_ensure_style(beval->balloonLabel);
+***************
+*** 998,1011 ****
+ y += beval->y;
+
+ /* Get out of the way of the mouse pointer */
+! if (x + x_offset + requisition.width > screen_w)
+ y_offset += 15;
+! if (y + y_offset + requisition.height > screen_h)
+ y_offset = -requisition.height - EVAL_OFFSET_Y;
+
+ /* Sanitize values */
+! x = CLAMP(x + x_offset, 0, MAX(0, screen_w - requisition.width));
+! y = CLAMP(y + y_offset, 0, MAX(0, screen_h - requisition.height));
+
+ /* Show the balloon */
+ # if GTK_CHECK_VERSION(3,0,0)
+--- 1000,1015 ----
+ y += beval->y;
+
+ /* Get out of the way of the mouse pointer */
+! if (x + x_offset + requisition.width > screen_x + screen_w)
+ y_offset += 15;
+! if (y + y_offset + requisition.height > screen_y + screen_h)
+ y_offset = -requisition.height - EVAL_OFFSET_Y;
+
+ /* Sanitize values */
+! x = CLAMP(x + x_offset, 0,
+! MAX(0, screen_x + screen_w - requisition.width));
+! y = CLAMP(y + y_offset, 0,
+! MAX(0, screen_y + screen_h - requisition.height));
+
+ /* Show the balloon */
+ # if GTK_CHECK_VERSION(3,0,0)
+*** ../vim-8.1.0300/src/gui_gtk_x11.c 2018-08-07 20:01:34.245746660 +0200
+--- src/gui_gtk_x11.c 2018-08-19 22:54:38.120976094 +0200
+***************
+*** 5008,5034 ****
+ }
+
+ void
+! gui_gtk_get_screen_size_of_win(GtkWidget *wid, int *width, int *height)
+ {
+ #if GTK_CHECK_VERSION(3,22,0)
+ GdkDisplay *dpy = gtk_widget_get_display(wid);
+- GdkWindow *win = gtk_widget_get_window(wid);
+ GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
+- GdkRectangle geometry;
+
+ gdk_monitor_get_geometry(monitor, &geometry);
+- *width = geometry.width;
+- *height = geometry.height;
+ #else
+ GdkScreen* screen;
+
+ if (wid != NULL && gtk_widget_has_screen(wid))
+ screen = gtk_widget_get_screen(wid);
+ else
+ screen = gdk_screen_get_default();
+! *width = gdk_screen_get_width(screen);
+! *height = gdk_screen_get_height(screen);
+ #endif
+ }
+
+ /*
+--- 5008,5042 ----
+ }
+
+ void
+! gui_gtk_get_screen_geom_of_win(
+! GtkWidget *wid,
+! int *screen_x,
+! int *screen_y,
+! int *width,
+! int *height)
+ {
++ GdkRectangle geometry;
++ GdkWindow *win = gtk_widget_get_window(wid);
+ #if GTK_CHECK_VERSION(3,22,0)
+ GdkDisplay *dpy = gtk_widget_get_display(wid);
+ GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
+
+ gdk_monitor_get_geometry(monitor, &geometry);
+ #else
+ GdkScreen* screen;
++ int monitor;
+
+ if (wid != NULL && gtk_widget_has_screen(wid))
+ screen = gtk_widget_get_screen(wid);
+ else
+ screen = gdk_screen_get_default();
+! monitor = gdk_screen_get_monitor_at_window(screen, win);
+! gdk_screen_get_monitor_geometry(screen, monitor, &geometry);
+ #endif
++ *screen_x = geometry.x;
++ *screen_y = geometry.y;
++ *width = geometry.width;
++ *height = geometry.height;
+ }
+
+ /*
+***************
+*** 5039,5045 ****
+ void
+ gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
+ {
+! gui_gtk_get_screen_size_of_win(gui.mainwin, screen_w, screen_h);
+
+ /* Subtract 'guiheadroom' from the height to allow some room for the
+ * window manager (task list and window title bar). */
+--- 5047,5055 ----
+ void
+ gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
+ {
+! int x, y;
+!
+! gui_gtk_get_screen_geom_of_win(gui.mainwin, &x, &y, screen_w, screen_h);
+
+ /* Subtract 'guiheadroom' from the height to allow some room for the
+ * window manager (task list and window title bar). */
+*** ../vim-8.1.0300/src/mbyte.c 2018-08-01 19:05:59.282223206 +0200
+--- src/mbyte.c 2018-08-19 22:57:01.724150866 +0200
+***************
+*** 4951,4974 ****
+ static void
+ im_preedit_window_set_position(void)
+ {
+! int x, y, w, h, sw, sh;
+
+ if (preedit_window == NULL)
+ return;
+
+! gui_gtk_get_screen_size_of_win(preedit_window, &sw, &sh);
+ #if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_get_origin(gtk_widget_get_window(gui.drawarea), &x, &y);
+ #else
+ gdk_window_get_origin(gui.drawarea->window, &x, &y);
+ #endif
+! gtk_window_get_size(GTK_WINDOW(preedit_window), &w, &h);
+ x = x + FILL_X(gui.col);
+ y = y + FILL_Y(gui.row);
+! if (x + w > sw)
+! x = sw - w;
+! if (y + h > sh)
+! y = sh - h;
+ gtk_window_move(GTK_WINDOW(preedit_window), x, y);
+ }
+
+--- 4951,4976 ----
+ static void
+ im_preedit_window_set_position(void)
+ {
+! int x, y, width, height;
+! int screen_x, screen_y, screen_width, screen_height;
+
+ if (preedit_window == NULL)
+ return;
+
+! gui_gtk_get_screen_geom_of_win(gui.drawarea,
+! &screen_x, &screen_y, &screen_width, &screen_height);
+ #if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_get_origin(gtk_widget_get_window(gui.drawarea), &x, &y);
+ #else
+ gdk_window_get_origin(gui.drawarea->window, &x, &y);
+ #endif
+! gtk_window_get_size(GTK_WINDOW(preedit_window), &width, &height);
+ x = x + FILL_X(gui.col);
+ y = y + FILL_Y(gui.row);
+! if (x + width > screen_x + screen_width)
+! x = screen_x + screen_width - width;
+! if (y + height > screen_y + screen_height)
+! y = screen_y + screen_height - height;
+ gtk_window_move(GTK_WINDOW(preedit_window), x, y);
+ }
+
+*** ../vim-8.1.0300/src/proto/gui_gtk_x11.pro 2018-05-17 13:53:00.000000000 +0200
+--- src/proto/gui_gtk_x11.pro 2018-08-19 22:57:22.476028708 +0200
+***************
+*** 25,31 ****
+ void gui_mch_unmaximize(void);
+ void gui_mch_newfont(void);
+ void gui_mch_set_shellsize(int width, int height, int min_width, int min_height, int base_width, int base_height, int direction);
+! void gui_gtk_get_screen_size_of_win(GtkWidget *wid, int *width, int *height);
+ void gui_mch_get_screen_dimensions(int *screen_w, int *screen_h);
+ void gui_mch_settitle(char_u *title, char_u *icon);
+ void gui_mch_enable_menu(int showit);
+--- 25,31 ----
+ void gui_mch_unmaximize(void);
+ void gui_mch_newfont(void);
+ void gui_mch_set_shellsize(int width, int height, int min_width, int min_height, int base_width, int base_height, int direction);
+! void gui_gtk_get_screen_geom_of_win(GtkWidget *wid, int *screen_x, int *screen_y, int *width, int *height);
+ void gui_mch_get_screen_dimensions(int *screen_w, int *screen_h);
+ void gui_mch_settitle(char_u *title, char_u *icon);
+ void gui_mch_enable_menu(int showit);
+*** ../vim-8.1.0300/src/version.c 2018-08-19 22:20:11.628993678 +0200
+--- src/version.c 2018-08-19 22:48:57.714733757 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 301,
+ /**/
+
+--
+SUPERIMPOSE "England AD 787". After a few more seconds we hear hoofbeats in
+the distance. They come slowly closer. Then out of the mist comes KING
+ARTHUR followed by a SERVANT who is banging two half coconuts together.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0302 b/data/vim/patches/8.1.0302
new file mode 100644
index 000000000..7d44902ca
--- /dev/null
+++ b/data/vim/patches/8.1.0302
@@ -0,0 +1,247 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0302
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0302
+Problem: Crash when using :suspend and "fg".
+Solution: Undo patch 8.1.244.
+Files: src/os_unix.c, src/term.c, src/proto/term.pro
+
+
+*** ../vim-8.1.0301/src/os_unix.c 2018-08-19 22:20:11.628993678 +0200
+--- src/os_unix.c 2018-08-20 21:54:06.847128443 +0200
+***************
+*** 1228,1251 ****
+ SIGRETURN;
+ }
+
+! static void
+! after_sigcont(void)
+! {
+! # ifdef FEAT_TITLE
+! // Don't change "oldtitle" in a signal handler, set a flag to obtain it
+! // again later.
+! oldtitle_outdated = TRUE;
+! # endif
+! settmode(TMODE_RAW);
+! need_check_timestamps = TRUE;
+! did_check_timestamps = FALSE;
+! }
+!
+! #if defined(SIGCONT)
+! static RETSIGTYPE sigcont_handler SIGPROTOARG;
+! static int in_mch_suspend = FALSE;
+!
+! # if defined(_REENTRANT) && defined(SIGCONT)
+ /*
+ * On Solaris with multi-threading, suspending might not work immediately.
+ * Catch the SIGCONT signal, which will be used as an indication whether the
+--- 1228,1234 ----
+ SIGRETURN;
+ }
+
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ /*
+ * On Solaris with multi-threading, suspending might not work immediately.
+ * Catch the SIGCONT signal, which will be used as an indication whether the
+***************
+*** 1257,1263 ****
+ * volatile because it is used in signal handler sigcont_handler().
+ */
+ static volatile int sigcont_received;
+! # endif
+
+ /*
+ * signal handler for SIGCONT
+--- 1240,1246 ----
+ * volatile because it is used in signal handler sigcont_handler().
+ */
+ static volatile int sigcont_received;
+! static RETSIGTYPE sigcont_handler SIGPROTOARG;
+
+ /*
+ * signal handler for SIGCONT
+***************
+*** 1265,1302 ****
+ static RETSIGTYPE
+ sigcont_handler SIGDEFARG(sigarg)
+ {
+! if (in_mch_suspend)
+! {
+! # if defined(_REENTRANT) && defined(SIGCONT)
+! sigcont_received = TRUE;
+! # endif
+! }
+! else
+! {
+! // We didn't suspend ourselves, assume we were stopped by a SIGSTOP
+! // signal (which can't be intercepted) and get a SIGCONT. Need to get
+! // back to a sane mode and redraw.
+! after_sigcont();
+!
+! update_screen(CLEAR);
+! if (State & CMDLINE)
+! redrawcmdline();
+! else if (State == HITRETURN || State == SETWSIZE || State == ASKMORE
+! || State == EXTERNCMD || State == CONFIRM || exmode_active)
+! repeat_message();
+! else if (redrawing())
+! setcursor();
+! #if defined(FEAT_INS_EXPAND)
+! if (pum_visible())
+! {
+! redraw_later(NOT_VALID);
+! ins_compl_show_pum();
+! }
+! #endif
+! cursor_on_force();
+! out_flush();
+! }
+!
+ SIGRETURN;
+ }
+ #endif
+--- 1248,1254 ----
+ static RETSIGTYPE
+ sigcont_handler SIGDEFARG(sigarg)
+ {
+! sigcont_received = TRUE;
+ SIGRETURN;
+ }
+ #endif
+***************
+*** 1379,1386 ****
+ {
+ /* BeOS does have SIGTSTP, but it doesn't work. */
+ #if defined(SIGTSTP) && !defined(__BEOS__)
+- in_mch_suspend = TRUE;
+-
+ out_flush(); /* needed to make cursor visible on some systems */
+ settmode(TMODE_COOK);
+ out_flush(); /* needed to disable mouse on some systems */
+--- 1331,1336 ----
+***************
+*** 1412,1420 ****
+ mch_delay(wait_time, FALSE);
+ }
+ # endif
+- in_mch_suspend = FALSE;
+
+! after_sigcont();
+ #else
+ suspend_shell();
+ #endif
+--- 1362,1377 ----
+ mch_delay(wait_time, FALSE);
+ }
+ # endif
+
+! # ifdef FEAT_TITLE
+! /*
+! * Set oldtitle to NULL, so the current title is obtained again.
+! */
+! VIM_CLEAR(oldtitle);
+! # endif
+! settmode(TMODE_RAW);
+! need_check_timestamps = TRUE;
+! did_check_timestamps = FALSE;
+ #else
+ suspend_shell();
+ #endif
+***************
+*** 1454,1460 ****
+ #ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
+ #endif
+! #if defined(SIGCONT)
+ signal(SIGCONT, sigcont_handler);
+ #endif
+
+--- 1411,1417 ----
+ #ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
+ #endif
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ signal(SIGCONT, sigcont_handler);
+ #endif
+
+*** ../vim-8.1.0301/src/term.c 2018-08-07 22:30:26.666240863 +0200
+--- src/term.c 2018-08-20 21:47:17.833581580 +0200
+***************
+*** 3834,3856 ****
+ static int cursor_is_off = FALSE;
+
+ /*
+- * Enable the cursor without checking if it's already enabled.
+- */
+- void
+- cursor_on_force(void)
+- {
+- out_str(T_VE);
+- cursor_is_off = FALSE;
+- }
+-
+- /*
+ * Enable the cursor.
+ */
+ void
+ cursor_on(void)
+ {
+ if (cursor_is_off)
+! cursor_on_force();
+ }
+
+ /*
+--- 3834,3849 ----
+ static int cursor_is_off = FALSE;
+
+ /*
+ * Enable the cursor.
+ */
+ void
+ cursor_on(void)
+ {
+ if (cursor_is_off)
+! {
+! out_str(T_VE);
+! cursor_is_off = FALSE;
+! }
+ }
+
+ /*
+*** ../vim-8.1.0301/src/proto/term.pro 2018-08-07 22:30:26.666240863 +0200
+--- src/proto/term.pro 2018-08-20 21:47:24.961538793 +0200
+***************
+*** 52,58 ****
+ int mouse_has(int c);
+ int mouse_model_popup(void);
+ void scroll_start(void);
+- void cursor_on_force(void);
+ void cursor_on(void);
+ void cursor_off(void);
+ void term_cursor_mode(int forced);
+--- 52,57 ----
+*** ../vim-8.1.0301/src/version.c 2018-08-19 22:58:39.783568118 +0200
+--- src/version.c 2018-08-20 21:49:38.956734730 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 302,
+ /**/
+
+--
+SOLDIER: What? A swallow carrying a coconut?
+ARTHUR: It could grip it by the husk ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0303 b/data/vim/patches/8.1.0303
new file mode 100644
index 000000000..48d20bf7d
--- /dev/null
+++ b/data/vim/patches/8.1.0303
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0303
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0303
+Problem: line2byte() is wrong for last line with 'noeol' and 'nofixeol'.
+Solution: Fix off-by-one error. (Shane Harper, closes #3351)
+Files: src/memline.c, src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0302/src/memline.c 2018-08-07 21:39:09.251060096 +0200
+--- src/memline.c 2018-08-20 22:49:13.023489795 +0200
+***************
+*** 5267,5273 ****
+ /* Don't count the last line break if 'noeol' and ('bin' or
+ * 'nofixeol'). */
+ if ((!buf->b_p_fixeol || buf->b_p_bin) && !buf->b_p_eol
+! && buf->b_ml.ml_line_count == lnum)
+ size -= ffdos + 1;
+ }
+
+--- 5267,5273 ----
+ /* Don't count the last line break if 'noeol' and ('bin' or
+ * 'nofixeol'). */
+ if ((!buf->b_p_fixeol || buf->b_p_bin) && !buf->b_p_eol
+! && lnum > buf->b_ml.ml_line_count)
+ size -= ffdos + 1;
+ }
+
+*** ../vim-8.1.0302/src/testdir/test_functions.vim 2018-08-08 22:27:27.043005000 +0200
+--- src/testdir/test_functions.vim 2018-08-20 22:48:48.891637382 +0200
+***************
+*** 682,687 ****
+--- 682,688 ----
+
+ func Test_byte2line_line2byte()
+ new
++ set endofline
+ call setline(1, ['a', 'bc', 'd'])
+
+ set fileformat=unix
+***************
+*** 702,708 ****
+ call assert_equal([-1, -1, 1, 4, 8, 11, -1],
+ \ map(range(-1, 5), 'line2byte(v:val)'))
+
+! set fileformat&
+ bw!
+ endfunc
+
+--- 703,718 ----
+ call assert_equal([-1, -1, 1, 4, 8, 11, -1],
+ \ map(range(-1, 5), 'line2byte(v:val)'))
+
+! bw!
+! set noendofline nofixendofline
+! normal a-
+! for ff in ["unix", "mac", "dos"]
+! let &fileformat = ff
+! call assert_equal(1, line2byte(1))
+! call assert_equal(2, line2byte(2)) " line2byte(line("$") + 1) is the buffer size plus one (as per :help line2byte).
+! endfor
+!
+! set endofline& fixendofline& fileformat&
+ bw!
+ endfunc
+
+*** ../vim-8.1.0302/src/version.c 2018-08-20 21:58:53.509410779 +0200
+--- src/version.c 2018-08-20 22:51:02.218823269 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 303,
+ /**/
+
+--
+FIRST SOLDIER: So they wouldn't be able to bring a coconut back anyway.
+SECOND SOLDIER: Wait a minute! Suppose two swallows carried it together?
+FIRST SOLDIER: No, they'd have to have it on a line.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0304 b/data/vim/patches/8.1.0304
new file mode 100644
index 000000000..734e72fa7
--- /dev/null
+++ b/data/vim/patches/8.1.0304
@@ -0,0 +1,315 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0304
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0304
+Problem: No redraw when using a STOP signal on Vim and then a CONT signal.
+Solution: Catch the CONT signal and set the terminal to raw mode. This is
+ like 8.1.0244 but without the screen redraw and a fix for
+ multi-threading suggested by Dominique Pelle.
+Files: src/os_unix.c, src/term.c, src/proto/term.pro
+
+
+*** ../vim-8.1.0303/src/os_unix.c 2018-08-20 21:58:53.505410802 +0200
+--- src/os_unix.c 2018-08-21 13:01:23.341522963 +0200
+***************
+*** 1228,1241 ****
+ SIGRETURN;
+ }
+
+- #if defined(_REENTRANT) && defined(SIGCONT)
+ /*
+! * On Solaris with multi-threading, suspending might not work immediately.
+! * Catch the SIGCONT signal, which will be used as an indication whether the
+! * suspending has been done or not.
+ *
+ * On Linux, signal is not always handled immediately either.
+ * See https://bugs.launchpad.net/bugs/291373
+ *
+ * volatile because it is used in signal handler sigcont_handler().
+ */
+--- 1228,1262 ----
+ SIGRETURN;
+ }
+
+ /*
+! * Invoked after receiving SIGCONT. We don't know what happened while
+! * sleeping, deal with part of that.
+! */
+! static void
+! after_sigcont(void)
+! {
+! # ifdef FEAT_TITLE
+! // Don't change "oldtitle" in a signal handler, set a flag to obtain it
+! // again later.
+! oldtitle_outdated = TRUE;
+! # endif
+! settmode(TMODE_RAW);
+! need_check_timestamps = TRUE;
+! did_check_timestamps = FALSE;
+! }
+!
+! #if defined(SIGCONT)
+! static RETSIGTYPE sigcont_handler SIGPROTOARG;
+! static volatile int in_mch_suspend = FALSE;
+!
+! /*
+! * With multi-threading, suspending might not work immediately. Catch the
+! * SIGCONT signal, which will be used as an indication whether the suspending
+! * has been done or not.
+ *
+ * On Linux, signal is not always handled immediately either.
+ * See https://bugs.launchpad.net/bugs/291373
++ * Probably because the signal is handled in another thread.
+ *
+ * volatile because it is used in signal handler sigcont_handler().
+ */
+***************
+*** 1248,1254 ****
+ static RETSIGTYPE
+ sigcont_handler SIGDEFARG(sigarg)
+ {
+! sigcont_received = TRUE;
+ SIGRETURN;
+ }
+ #endif
+--- 1269,1290 ----
+ static RETSIGTYPE
+ sigcont_handler SIGDEFARG(sigarg)
+ {
+! if (in_mch_suspend)
+! {
+! sigcont_received = TRUE;
+! }
+! else
+! {
+! // We didn't suspend ourselves, assume we were stopped by a SIGSTOP
+! // signal (which can't be intercepted) and get a SIGCONT. Need to get
+! // back to a sane mode. We should redraw, but we can't really do that
+! // in a signal handler, do a redraw later.
+! after_sigcont();
+! redraw_later(CLEAR);
+! cursor_on_force();
+! out_flush();
+! }
+!
+ SIGRETURN;
+ }
+ #endif
+***************
+*** 1331,1336 ****
+--- 1367,1374 ----
+ {
+ /* BeOS does have SIGTSTP, but it doesn't work. */
+ #if defined(SIGTSTP) && !defined(__BEOS__)
++ in_mch_suspend = TRUE;
++
+ out_flush(); /* needed to make cursor visible on some systems */
+ settmode(TMODE_COOK);
+ out_flush(); /* needed to disable mouse on some systems */
+***************
+*** 1338,1377 ****
+ # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+ loose_clipboard();
+ # endif
+!
+! # if defined(_REENTRANT) && defined(SIGCONT)
+ sigcont_received = FALSE;
+ # endif
+ kill(0, SIGTSTP); /* send ourselves a STOP signal */
+! # if defined(_REENTRANT) && defined(SIGCONT)
+ /*
+ * Wait for the SIGCONT signal to be handled. It generally happens
+! * immediately, but somehow not all the time. Do not call pause()
+! * because there would be race condition which would hang Vim if
+! * signal happened in between the test of sigcont_received and the
+! * call to pause(). If signal is not yet received, call sleep(0)
+! * to just yield CPU. Signal should then be received. If somehow
+! * it's still not received, sleep 1, 2, 3 ms. Don't bother waiting
+! * further if signal is not received after 1+2+3+4 ms (not expected
+! * to happen).
+ */
+ {
+ long wait_time;
+ for (wait_time = 0; !sigcont_received && wait_time <= 3L; wait_time++)
+- /* Loop is not entered most of the time */
+ mch_delay(wait_time, FALSE);
+ }
+ # endif
+
+! # ifdef FEAT_TITLE
+! /*
+! * Set oldtitle to NULL, so the current title is obtained again.
+! */
+! VIM_CLEAR(oldtitle);
+! # endif
+! settmode(TMODE_RAW);
+! need_check_timestamps = TRUE;
+! did_check_timestamps = FALSE;
+ #else
+ suspend_shell();
+ #endif
+--- 1376,1407 ----
+ # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+ loose_clipboard();
+ # endif
+! # if defined(SIGCONT)
+ sigcont_received = FALSE;
+ # endif
++
+ kill(0, SIGTSTP); /* send ourselves a STOP signal */
+!
+! # if defined(SIGCONT)
+ /*
+ * Wait for the SIGCONT signal to be handled. It generally happens
+! * immediately, but somehow not all the time, probably because it's handled
+! * in another thread. Do not call pause() because there would be race
+! * condition which would hang Vim if signal happened in between the test of
+! * sigcont_received and the call to pause(). If signal is not yet received,
+! * sleep 0, 1, 2, 3 ms. Don't bother waiting further if signal is not
+! * received after 1+2+3 ms (not expected to happen).
+ */
+ {
+ long wait_time;
++
+ for (wait_time = 0; !sigcont_received && wait_time <= 3L; wait_time++)
+ mch_delay(wait_time, FALSE);
+ }
+ # endif
++ in_mch_suspend = FALSE;
+
+! after_sigcont();
+ #else
+ suspend_shell();
+ #endif
+***************
+*** 1411,1417 ****
+ #ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
+ #endif
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ signal(SIGCONT, sigcont_handler);
+ #endif
+
+--- 1441,1447 ----
+ #ifdef SIGTSTP
+ signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
+ #endif
+! #if defined(SIGCONT)
+ signal(SIGCONT, sigcont_handler);
+ #endif
+
+***************
+*** 1470,1476 ****
+ reset_signals(void)
+ {
+ catch_signals(SIG_DFL, SIG_DFL);
+! #if defined(_REENTRANT) && defined(SIGCONT)
+ /* SIGCONT isn't in the list, because its default action is ignore */
+ signal(SIGCONT, SIG_DFL);
+ #endif
+--- 1500,1506 ----
+ reset_signals(void)
+ {
+ catch_signals(SIG_DFL, SIG_DFL);
+! #if defined(SIGCONT)
+ /* SIGCONT isn't in the list, because its default action is ignore */
+ signal(SIGCONT, SIG_DFL);
+ #endif
+***************
+*** 1533,1539 ****
+ for (i = 0; signal_info[i].sig != -1; i++)
+ sigaddset(&newset, signal_info[i].sig);
+
+! # if defined(_REENTRANT) && defined(SIGCONT)
+ /* SIGCONT isn't in the list, because its default action is ignore */
+ sigaddset(&newset, SIGCONT);
+ # endif
+--- 1563,1569 ----
+ for (i = 0; signal_info[i].sig != -1; i++)
+ sigaddset(&newset, signal_info[i].sig);
+
+! # if defined(SIGCONT)
+ /* SIGCONT isn't in the list, because its default action is ignore */
+ sigaddset(&newset, SIGCONT);
+ # endif
+*** ../vim-8.1.0303/src/term.c 2018-08-20 21:58:53.505410802 +0200
+--- src/term.c 2018-08-21 12:55:46.236289405 +0200
+***************
+*** 3834,3849 ****
+ static int cursor_is_off = FALSE;
+
+ /*
+! * Enable the cursor.
+ */
+ void
+ cursor_on(void)
+ {
+ if (cursor_is_off)
+! {
+! out_str(T_VE);
+! cursor_is_off = FALSE;
+! }
+ }
+
+ /*
+--- 3834,3856 ----
+ static int cursor_is_off = FALSE;
+
+ /*
+! * Enable the cursor without checking if it's already enabled.
+! */
+! void
+! cursor_on_force(void)
+! {
+! out_str(T_VE);
+! cursor_is_off = FALSE;
+! }
+!
+! /*
+! * Enable the cursor if it's currently off.
+ */
+ void
+ cursor_on(void)
+ {
+ if (cursor_is_off)
+! cursor_on_force();
+ }
+
+ /*
+*** ../vim-8.1.0303/src/proto/term.pro 2018-08-20 21:58:53.509410779 +0200
+--- src/proto/term.pro 2018-08-21 12:55:54.468217234 +0200
+***************
+*** 52,57 ****
+--- 52,58 ----
+ int mouse_has(int c);
+ int mouse_model_popup(void);
+ void scroll_start(void);
++ void cursor_on_force(void);
+ void cursor_on(void);
+ void cursor_off(void);
+ void term_cursor_mode(int forced);
+*** ../vim-8.1.0303/src/version.c 2018-08-20 22:53:00.210105086 +0200
+--- src/version.c 2018-08-21 12:40:20.807634438 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 304,
+ /**/
+
+--
+I used to wonder about the meaning of life. But I looked it
+up in the dictionary under "L" and there it was - the meaning
+of life. It was less than I expected. - Dogbert
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0305 b/data/vim/patches/8.1.0305
new file mode 100644
index 000000000..2fd893655
--- /dev/null
+++ b/data/vim/patches/8.1.0305
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0305
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0305
+Problem: Missing support for Lua 5.4 32 bits on Unix.
+Solution: Define lua_newuserdatauv. (Kazunobu Kuriyama)
+Files: src/if_lua.c
+
+
+*** ../vim-8.1.0304/src/if_lua.c 2018-07-25 22:02:32.227966325 +0200
+--- src/if_lua.c 2018-08-21 14:00:16.783006997 +0200
+***************
+*** 164,170 ****
+ #define lua_rawget dll_lua_rawget
+ #define lua_rawgeti dll_lua_rawgeti
+ #define lua_createtable dll_lua_createtable
+! #define lua_newuserdata dll_lua_newuserdata
+ #define lua_getmetatable dll_lua_getmetatable
+ #define lua_setfield dll_lua_setfield
+ #define lua_rawset dll_lua_rawset
+--- 164,174 ----
+ #define lua_rawget dll_lua_rawget
+ #define lua_rawgeti dll_lua_rawgeti
+ #define lua_createtable dll_lua_createtable
+! #if LUA_VERSION_NUM >= 504
+! #define lua_newuserdatauv dll_lua_newuserdatauv
+! #else
+! #define lua_newuserdata dll_lua_newuserdata
+! #endif
+ #define lua_getmetatable dll_lua_getmetatable
+ #define lua_setfield dll_lua_setfield
+ #define lua_rawset dll_lua_rawset
+***************
+*** 261,267 ****
+--- 265,275 ----
+ int (*dll_lua_rawgeti) (lua_State *L, int idx, lua_Integer n);
+ #endif
+ void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
++ #if LUA_VERSION_NUM >= 504
++ void *(*dll_lua_newuserdatauv) (lua_State *L, size_t sz, int nuvalue);
++ #else
+ void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
++ #endif
+ int (*dll_lua_getmetatable) (lua_State *L, int objindex);
+ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+***************
+*** 362,368 ****
+--- 370,380 ----
+ {"lua_rawget", (luaV_function) &dll_lua_rawget},
+ {"lua_rawgeti", (luaV_function) &dll_lua_rawgeti},
+ {"lua_createtable", (luaV_function) &dll_lua_createtable},
++ #if LUA_VERSION_NUM >= 504
++ {"lua_newuserdatauv", (luaV_function) &dll_lua_newuserdatauv},
++ #else
+ {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
++ #endif
+ {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
+ {"lua_setfield", (luaV_function) &dll_lua_setfield},
+ {"lua_rawset", (luaV_function) &dll_lua_rawset},
+*** ../vim-8.1.0304/src/version.c 2018-08-21 13:09:06.254115882 +0200
+--- src/version.c 2018-08-21 14:03:03.910066481 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 305,
+ /**/
+
+--
+Why I like vim:
+> I like VIM because, when I ask a question in this newsgroup, I get a
+> one-line answer. With xemacs, I get a 1Kb lisp script with bugs in it ;-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0306 b/data/vim/patches/8.1.0306
new file mode 100644
index 000000000..e2d9e3079
--- /dev/null
+++ b/data/vim/patches/8.1.0306
@@ -0,0 +1,498 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0306
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0306
+Problem: Plural messages are not translated properly.
+Solution: Add more usage of NGETTEXT(). (Sergey Alyoshin)
+Files: src/vim.h, src/buffer.c, src/ex_cmds.c, src/ex_docmd.c,
+ src/fileio.c, src/misc1.c, src/ops.c
+
+
+*** ../vim-8.1.0305/src/vim.h 2018-08-11 13:57:16.215969777 +0200
+--- src/vim.h 2018-08-21 14:34:37.322333098 +0200
+***************
+*** 553,558 ****
+--- 553,562 ----
+ /*
+ * The _() stuff is for using gettext(). It is a no-op when libintl.h is not
+ * found or the +multilang feature is disabled.
++ * Use NGETTEXT(single, multi, number) to get plural behavior:
++ * - single - message for singular form
++ * - multi - message for plural form
++ * - number - the count
+ */
+ #ifdef FEAT_GETTEXT
+ # ifdef DYNAMIC_GETTEXT
+*** ../vim-8.1.0305/src/buffer.c 2018-08-11 13:57:16.207969835 +0200
+--- src/buffer.c 2018-08-21 14:39:25.584435950 +0200
+***************
+*** 1174,1199 ****
+ else if (deleted >= p_report)
+ {
+ if (command == DOBUF_UNLOAD)
+! {
+! if (deleted == 1)
+! MSG(_("1 buffer unloaded"));
+! else
+! smsg((char_u *)_("%d buffers unloaded"), deleted);
+! }
+ else if (command == DOBUF_DEL)
+! {
+! if (deleted == 1)
+! MSG(_("1 buffer deleted"));
+! else
+! smsg((char_u *)_("%d buffers deleted"), deleted);
+! }
+ else
+! {
+! if (deleted == 1)
+! MSG(_("1 buffer wiped out"));
+! else
+! smsg((char_u *)_("%d buffers wiped out"), deleted);
+! }
+ }
+ }
+
+--- 1174,1187 ----
+ else if (deleted >= p_report)
+ {
+ if (command == DOBUF_UNLOAD)
+! smsg((char_u *)NGETTEXT("%d buffer unloaded",
+! "%d buffers unloaded", deleted), deleted);
+ else if (command == DOBUF_DEL)
+! smsg((char_u *)NGETTEXT("%d buffer deleted",
+! "%d buffers deleted", deleted), deleted);
+ else
+! smsg((char_u *)NGETTEXT("%d buffer wiped out",
+! "%d buffers wiped out", deleted), deleted);
+ }
+ }
+
+***************
+*** 3485,3503 ****
+ n = (int)(((long)curwin->w_cursor.lnum * 100L) /
+ (long)curbuf->b_ml.ml_line_count);
+ if (curbuf->b_ml.ml_flags & ML_EMPTY)
+- {
+ vim_snprintf_add((char *)buffer, IOSIZE, "%s", _(no_lines_msg));
+- }
+ #ifdef FEAT_CMDL_INFO
+ else if (p_ru)
+- {
+ /* Current line and column are already on the screen -- webb */
+! if (curbuf->b_ml.ml_line_count == 1)
+! vim_snprintf_add((char *)buffer, IOSIZE, _("1 line --%d%%--"), n);
+! else
+! vim_snprintf_add((char *)buffer, IOSIZE, _("%ld lines --%d%%--"),
+! (long)curbuf->b_ml.ml_line_count, n);
+! }
+ #endif
+ else
+ {
+--- 3473,3486 ----
+ n = (int)(((long)curwin->w_cursor.lnum * 100L) /
+ (long)curbuf->b_ml.ml_line_count);
+ if (curbuf->b_ml.ml_flags & ML_EMPTY)
+ vim_snprintf_add((char *)buffer, IOSIZE, "%s", _(no_lines_msg));
+ #ifdef FEAT_CMDL_INFO
+ else if (p_ru)
+ /* Current line and column are already on the screen -- webb */
+! vim_snprintf_add((char *)buffer, IOSIZE,
+! NGETTEXT("%ld line --%d%%--", "%ld lines --%d%%--",
+! curbuf->b_ml.ml_line_count),
+! (long)curbuf->b_ml.ml_line_count, n);
+ #endif
+ else
+ {
+*** ../vim-8.1.0305/src/ex_cmds.c 2018-08-11 14:41:48.326928864 +0200
+--- src/ex_cmds.c 2018-08-21 15:09:35.720800340 +0200
+***************
+*** 985,996 ****
+ ml_delete(line1 + extra, TRUE);
+
+ if (!global_busy && num_lines > p_report)
+! {
+! if (num_lines == 1)
+! MSG(_("1 line moved"));
+! else
+! smsg((char_u *)_("%ld lines moved"), num_lines);
+! }
+
+ /*
+ * Leave the cursor on the last of the moved lines.
+--- 985,992 ----
+ ml_delete(line1 + extra, TRUE);
+
+ if (!global_busy && num_lines > p_report)
+! smsg((char_u *)NGETTEXT("%ld line moved", "%ld lines moved", num_lines),
+! (long)num_lines);
+
+ /*
+ * Leave the cursor on the last of the moved lines.
+***************
+*** 5940,5962 ****
+ || count_only)
+ && messaging())
+ {
+ if (got_int)
+ STRCPY(msg_buf, _("(Interrupted) "));
+ else
+ *msg_buf = NUL;
+! if (sub_nsubs == 1)
+! vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
+! "%s", count_only ? _("1 match") : _("1 substitution"));
+! else
+! vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
+! count_only ? _("%ld matches") : _("%ld substitutions"),
+! sub_nsubs);
+! if (sub_nlines == 1)
+! vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
+! "%s", _(" on 1 line"));
+! else
+! vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
+! _(" on %ld lines"), (long)sub_nlines);
+ if (msg(msg_buf))
+ /* save message to display it after redraw */
+ set_keep_msg(msg_buf, 0);
+--- 5936,5964 ----
+ || count_only)
+ && messaging())
+ {
++ char *msg_single;
++ char *msg_plural;
++
+ if (got_int)
+ STRCPY(msg_buf, _("(Interrupted) "));
+ else
+ *msg_buf = NUL;
+!
+! msg_single = count_only
+! ? NGETTEXT("%ld match on %ld line",
+! "%ld matches on %ld line", sub_nsubs)
+! : NGETTEXT("%ld substitution on %ld line",
+! "%ld substitutions on %ld line", sub_nsubs);
+! msg_plural = count_only
+! ? NGETTEXT("%ld match on %ld lines",
+! "%ld matches on %ld lines", sub_nsubs)
+! : NGETTEXT("%ld substitution on %ld lines",
+! "%ld substitutions on %ld lines", sub_nsubs);
+!
+! vim_snprintf_add((char *)msg_buf, sizeof(msg_buf),
+! NGETTEXT(msg_single, msg_plural, sub_nlines),
+! sub_nsubs, (long)sub_nlines);
+!
+ if (msg(msg_buf))
+ /* save message to display it after redraw */
+ set_keep_msg(msg_buf, 0);
+*** ../vim-8.1.0305/src/ex_docmd.c 2018-08-15 20:59:44.227025009 +0200
+--- src/ex_docmd.c 2018-08-21 14:35:02.210167853 +0200
+***************
+*** 5749,5770 ****
+ {
+ char_u buff[DIALOG_MSG_SIZE];
+
+! if (n == 1)
+! vim_strncpy(buff,
+! (char_u *)_("1 more file to edit. Quit anyway?"),
+! DIALOG_MSG_SIZE - 1);
+! else
+! vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
+! _("%d more files to edit. Quit anyway?"), n);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
+ return OK;
+ return FAIL;
+ }
+ #endif
+! if (n == 1)
+! EMSG(_("E173: 1 more file to edit"));
+! else
+! EMSGN(_("E173: %ld more files to edit"), n);
+ quitmore = 2; /* next try to quit is allowed */
+ }
+ return FAIL;
+--- 5749,5764 ----
+ {
+ char_u buff[DIALOG_MSG_SIZE];
+
+! vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
+! NGETTEXT("%d more file to edit. Quit anyway?",
+! "%d more files to edit. Quit anyway?", n), n);
+ if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
+ return OK;
+ return FAIL;
+ }
+ #endif
+! EMSGN(NGETTEXT("E173: %ld more file to edit",
+! "E173: %ld more files to edit", n), n);
+ quitmore = 2; /* next try to quit is allowed */
+ }
+ return FAIL;
+*** ../vim-8.1.0305/src/fileio.c 2018-08-11 13:57:16.211969806 +0200
+--- src/fileio.c 2018-08-21 14:35:02.214167827 +0200
+***************
+*** 5349,5364 ****
+ "%ldL, %lldC", lnum, (long long)nchars);
+ else
+ {
+! if (lnum == 1)
+! STRCPY(p, _("1 line, "));
+! else
+! sprintf((char *)p, _("%ld lines, "), lnum);
+ p += STRLEN(p);
+! if (nchars == 1)
+! STRCPY(p, _("1 character"));
+! else
+! vim_snprintf((char *)p, IOSIZE - (p - IObuff),
+! _("%lld characters"), (long long)nchars);
+ }
+ }
+
+--- 5349,5359 ----
+ "%ldL, %lldC", lnum, (long long)nchars);
+ else
+ {
+! sprintf((char *)p, NGETTEXT("%ld line, ", "%ld lines, ", lnum), lnum);
+ p += STRLEN(p);
+! vim_snprintf((char *)p, IOSIZE - (p - IObuff),
+! NGETTEXT("%lld character", "%lld characters", nchars),
+! (long long)nchars);
+ }
+ }
+
+*** ../vim-8.1.0305/src/misc1.c 2018-07-29 16:09:14.636945607 +0200
+--- src/misc1.c 2018-08-21 14:35:02.214167827 +0200
+***************
+*** 3802,3825 ****
+
+ if (pn > p_report)
+ {
+! if (pn == 1)
+! {
+! if (n > 0)
+! vim_strncpy(msg_buf, (char_u *)_("1 more line"),
+! MSG_BUF_LEN - 1);
+! else
+! vim_strncpy(msg_buf, (char_u *)_("1 line less"),
+! MSG_BUF_LEN - 1);
+! }
+ else
+! {
+! if (n > 0)
+! vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+! _("%ld more lines"), pn);
+! else
+! vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+! _("%ld fewer lines"), pn);
+! }
+ if (got_int)
+ vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
+ if (msg(msg_buf))
+--- 3802,3813 ----
+
+ if (pn > p_report)
+ {
+! if (n > 0)
+! vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+! NGETTEXT("%ld more line", "%ld more lines", pn), pn);
+ else
+! vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+! NGETTEXT("%ld line less", "%ld fewer lines", pn), pn);
+ if (got_int)
+ vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
+ if (msg(msg_buf))
+*** ../vim-8.1.0305/src/ops.c 2018-07-29 16:09:14.640945583 +0200
+--- src/ops.c 2018-08-21 15:02:16.907624684 +0200
+***************
+*** 244,250 ****
+ {
+ long i;
+ int first_char;
+- char_u *s;
+ int block_col = 0;
+
+ if (u_save((linenr_T)(oap->start.lnum - 1),
+--- 244,249 ----
+***************
+*** 297,322 ****
+
+ if (oap->line_count > p_report)
+ {
+ if (oap->op_type == OP_RSHIFT)
+! s = (char_u *)">";
+! else
+! s = (char_u *)"<";
+! if (oap->line_count == 1)
+! {
+! if (amount == 1)
+! sprintf((char *)IObuff, _("1 line %sed 1 time"), s);
+! else
+! sprintf((char *)IObuff, _("1 line %sed %d times"), s, amount);
+! }
+ else
+! {
+! if (amount == 1)
+! sprintf((char *)IObuff, _("%ld lines %sed 1 time"),
+! oap->line_count, s);
+! else
+! sprintf((char *)IObuff, _("%ld lines %sed %d times"),
+! oap->line_count, s, amount);
+! }
+ msg(IObuff);
+ }
+
+--- 296,316 ----
+
+ if (oap->line_count > p_report)
+ {
++ char *op;
++ char *msg_line_single;
++ char *msg_line_plural;
++
+ if (oap->op_type == OP_RSHIFT)
+! op = ">";
+ else
+! op = "<";
+! msg_line_single = NGETTEXT("%ld line %sed %d time",
+! "%ld line %sed %d times", amount);
+! msg_line_plural = NGETTEXT("%ld lines %sed %d time",
+! "%ld lines %sed %d times", amount);
+! vim_snprintf((char *)IObuff, IOSIZE,
+! NGETTEXT(msg_line_single, msg_line_plural, oap->line_count),
+! oap->line_count, op, amount);
+ msg(IObuff);
+ }
+
+***************
+*** 789,798 ****
+ if (oap->line_count > p_report)
+ {
+ i = oap->line_count - (i + 1);
+! if (i == 1)
+! MSG(_("1 line indented "));
+! else
+! smsg((char_u *)_("%ld lines indented "), i);
+ }
+ /* set '[ and '] marks */
+ curbuf->b_op_start = oap->start;
+--- 783,790 ----
+ if (oap->line_count > p_report)
+ {
+ i = oap->line_count - (i + 1);
+! smsg((char_u *)NGETTEXT("%ld line indented ",
+! "%ld lines indented ", i), i);
+ }
+ /* set '[ and '] marks */
+ curbuf->b_op_start = oap->start;
+***************
+*** 2529,2540 ****
+ curbuf->b_op_end = oap->end;
+
+ if (oap->line_count > p_report)
+! {
+! if (oap->line_count == 1)
+! MSG(_("1 line changed"));
+! else
+! smsg((char_u *)_("%ld lines changed"), oap->line_count);
+! }
+ }
+
+ /*
+--- 2521,2528 ----
+ curbuf->b_op_end = oap->end;
+
+ if (oap->line_count > p_report)
+! smsg((char_u *)NGETTEXT("%ld line changed", "%ld lines changed",
+! oap->line_count), oap->line_count);
+ }
+
+ /*
+***************
+*** 3348,3366 ****
+
+ /* redisplay now, so message is not deleted */
+ update_topline_redraw();
+! if (yanklines == 1)
+ {
+! if (oap->block_mode)
+! smsg((char_u *)_("block of 1 line yanked%s"), namebuf);
+! else
+! smsg((char_u *)_("1 line yanked%s"), namebuf);
+ }
+- else if (oap->block_mode)
+- smsg((char_u *)_("block of %ld lines yanked%s"),
+- yanklines, namebuf);
+ else
+! smsg((char_u *)_("%ld lines yanked%s"), yanklines,
+! namebuf);
+ }
+ }
+
+--- 3336,3353 ----
+
+ /* redisplay now, so message is not deleted */
+ update_topline_redraw();
+! if (oap->block_mode)
+ {
+! smsg((char_u *)NGETTEXT("block of %ld line yanked%s",
+! "block of %ld lines yanked%s", yanklines),
+! yanklines, namebuf);
+ }
+ else
+! {
+! smsg((char_u *)NGETTEXT("%ld line yanked%s",
+! "%ld lines yanked%s", yanklines),
+! yanklines, namebuf);
+! }
+ }
+ }
+
+***************
+*** 5653,5664 ****
+ curbuf->b_op_start = startpos;
+
+ if (change_cnt > p_report)
+! {
+! if (change_cnt == 1)
+! MSG(_("1 line changed"));
+! else
+! smsg((char_u *)_("%ld lines changed"), change_cnt);
+! }
+ }
+ }
+
+--- 5640,5647 ----
+ curbuf->b_op_start = startpos;
+
+ if (change_cnt > p_report)
+! smsg((char_u *)NGETTEXT("%ld line changed", "%ld lines changed",
+! change_cnt), change_cnt);
+ }
+ }
+
+*** ../vim-8.1.0305/src/version.c 2018-08-21 14:23:31.418606007 +0200
+--- src/version.c 2018-08-21 15:02:32.359526078 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 306,
+ /**/
+
+--
+LARGE MAN: Who's that then?
+CART DRIVER: (Grudgingly) I dunno, Must be a king.
+LARGE MAN: Why?
+CART DRIVER: He hasn't got shit all over him.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0307 b/data/vim/patches/8.1.0307
new file mode 100644
index 000000000..95342de6e
--- /dev/null
+++ b/data/vim/patches/8.1.0307
@@ -0,0 +1,233 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0307
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0307
+Problem: There is no good way to get the window layout.
+Solution: Add the winlayout() function. (Yegappan Lakshmanan)
+Files: runtime/doc/eval.txt, src/evalfunc.c, src/proto/window.pro,
+ src/window.c, src/testdir/test_window_id.vim
+
+
+*** ../vim-8.1.0306/runtime/doc/eval.txt 2018-07-29 15:34:20.864300100 +0200
+--- runtime/doc/eval.txt 2018-08-21 16:35:43.299154086 +0200
+***************
+*** 2497,2502 ****
+--- 2504,2510 ----
+ winbufnr({nr}) Number buffer number of window {nr}
+ wincol() Number window column of the cursor
+ winheight({nr}) Number height of window {nr}
++ winlayout([{tabnr}]) List layout of windows in tab {tabnr}
+ winline() Number window line of the cursor
+ winnr([{expr}]) Number number of current window
+ winrestcmd() String returns command to restore window sizes
+***************
+*** 9087,9092 ****
+--- 9096,9130 ----
+ Examples: >
+ :echo "The current window has " . winheight(0) . " lines."
+ <
++ winlayout([{tabnr}]) *winlayout()*
++ The result is a nested List containing the layout of windows
++ in a tabpage.
++
++ Without {tabnr} use the current tabpage, otherwise the tabpage
++ with number {tabnr}. If the tabpage {tabnr} is not found,
++ returns an empty list.
++
++ For a leaf window, it returns:
++ ['leaf', {winid}]
++ For horizontally split windows, which form a column, it
++ returns:
++ ['col', [{nested list of windows}]]
++ For vertically split windows, which form a row, it returns:
++ ['row', [{nested list of windows}]]
++
++ Example: >
++ " Only one window in the tab page
++ :echo winlayout()
++ ['leaf', 1000]
++ " Two horizontally split windows
++ :echo winlayout()
++ ['col', [['leaf', 1000], ['leaf', 1001]]]
++ " Three horizontally split windows, with two
++ " vertically split windows in the middle window
++ :echo winlayout(2)
++ ['col', [['leaf', 1002], ['row', ['leaf', 1003],
++ ['leaf', 1001]]], ['leaf', 1000]]
++ <
+ *winline()*
+ winline() The result is a Number, which is the screen line of the cursor
+ in the window. This is counting screen lines from the top of
+*** ../vim-8.1.0306/src/evalfunc.c 2018-08-11 13:57:16.211969806 +0200
+--- src/evalfunc.c 2018-08-21 16:19:29.914566586 +0200
+***************
+*** 463,468 ****
+--- 463,469 ----
+ static void f_winbufnr(typval_T *argvars, typval_T *rettv);
+ static void f_wincol(typval_T *argvars, typval_T *rettv);
+ static void f_winheight(typval_T *argvars, typval_T *rettv);
++ static void f_winlayout(typval_T *argvars, typval_T *rettv);
+ static void f_winline(typval_T *argvars, typval_T *rettv);
+ static void f_winnr(typval_T *argvars, typval_T *rettv);
+ static void f_winrestcmd(typval_T *argvars, typval_T *rettv);
+***************
+*** 952,957 ****
+--- 953,959 ----
+ {"winbufnr", 1, 1, f_winbufnr},
+ {"wincol", 0, 0, f_wincol},
+ {"winheight", 1, 1, f_winheight},
++ {"winlayout", 0, 1, f_winlayout},
+ {"winline", 0, 0, f_winline},
+ {"winnr", 0, 1, f_winnr},
+ {"winrestcmd", 0, 0, f_winrestcmd},
+***************
+*** 13743,13748 ****
+--- 13745,13773 ----
+ }
+
+ /*
++ * "winlayout()" function
++ */
++ static void
++ f_winlayout(typval_T *argvars, typval_T *rettv)
++ {
++ tabpage_T *tp;
++
++ if (rettv_list_alloc(rettv) != OK)
++ return;
++
++ if (argvars[0].v_type == VAR_UNKNOWN)
++ tp = curtab;
++ else
++ {
++ tp = find_tabpage((int)get_tv_number(&argvars[0]));
++ if (tp == NULL)
++ return;
++ }
++
++ get_framelayout(tp->tp_topframe, rettv->vval.v_list, TRUE);
++ }
++
++ /*
+ * "winline()" function
+ */
+ static void
+*** ../vim-8.1.0306/src/proto/window.pro 2018-06-12 16:49:26.366028607 +0200
+--- src/proto/window.pro 2018-08-21 16:38:15.282101882 +0200
+***************
+*** 94,97 ****
+--- 94,98 ----
+ win_T *win_id2wp(typval_T *argvars);
+ int win_id2win(typval_T *argvars);
+ void win_findbuf(typval_T *argvars, list_T *list);
++ void get_framelayout(frame_T *fr, list_T *l, int topframe);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0306/src/window.c 2018-07-25 22:36:48.991518559 +0200
+--- src/window.c 2018-08-21 16:43:30.963948179 +0200
+***************
+*** 7236,7239 ****
+--- 7236,7288 ----
+ list_append_number(list, wp->w_id);
+ }
+
++ /*
++ * Get the layout of the given tab page for winlayout().
++ */
++ void
++ get_framelayout(frame_T *fr, list_T *l, int outer)
++ {
++ frame_T *child;
++ list_T *fr_list;
++ list_T *win_list;
++
++ if (fr == NULL)
++ return;
++
++ if (outer)
++ // outermost call from f_winlayout()
++ fr_list = l;
++ else
++ {
++ fr_list = list_alloc();
++ if (fr_list == NULL)
++ return;
++ list_append_list(l, fr_list);
++ }
++
++ if (fr->fr_layout == FR_LEAF)
++ {
++ if (fr->fr_win != NULL)
++ {
++ list_append_string(fr_list, (char_u *)"leaf", -1);
++ list_append_number(fr_list, fr->fr_win->w_id);
++ }
++ }
++ else
++ {
++ list_append_string(fr_list,
++ fr->fr_layout == FR_ROW ? (char_u *)"row" : (char_u *)"col", -1);
++
++ win_list = list_alloc();
++ if (win_list == NULL)
++ return;
++ list_append_list(fr_list, win_list);
++ child = fr->fr_child;
++ while (child != NULL)
++ {
++ get_framelayout(child, win_list, FALSE);
++ child = child->fr_next;
++ }
++ }
++ }
+ #endif
+*** ../vim-8.1.0306/src/testdir/test_window_id.vim 2016-11-13 14:25:47.000000000 +0100
+--- src/testdir/test_window_id.vim 2018-08-21 16:47:00.102536647 +0200
+***************
+*** 101,103 ****
+--- 101,123 ----
+ call assert_equal(win_getid(1), win_getid(1, 1))
+ tabclose!
+ endfunc
++
++ func Test_winlayout()
++ let w1 = win_getid()
++ call assert_equal(['leaf', w1], winlayout())
++
++ split
++ let w2 = win_getid()
++ call assert_equal(['col', [['leaf', w2], ['leaf', w1]]], winlayout())
++
++ split
++ let w3 = win_getid()
++ call assert_equal(['col', [['leaf', w3], ['leaf', w2], ['leaf', w1]]], winlayout())
++
++ 2wincmd w
++ vsplit
++ let w4 = win_getid()
++ call assert_equal(['col', [['leaf', w3], ['row', [['leaf', w4], ['leaf', w2]]], ['leaf', w1]]], winlayout())
++
++ only!
++ endfunc
+*** ../vim-8.1.0306/src/version.c 2018-08-21 15:12:10.843801621 +0200
+--- src/version.c 2018-08-21 16:54:45.515933731 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 307,
+ /**/
+
+--
+Friends? I have lots of friends! In fact, I have all episodes ever made.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0308 b/data/vim/patches/8.1.0308
new file mode 100644
index 000000000..34230ea65
--- /dev/null
+++ b/data/vim/patches/8.1.0308
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0308
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0308
+Problem: A quick undo shows "1 seconds ago". (Tony Mechelynck)
+Solution: Add singular/plural message.
+Files: src/undo.c
+
+
+*** ../vim-8.1.0307/src/undo.c 2018-07-13 16:31:11.952226727 +0200
+--- src/undo.c 2018-08-21 17:05:23.300046260 +0200
+***************
+*** 3124,3131 ****
+ }
+ else
+ #endif
+! vim_snprintf((char *)buf, buflen, _("%ld seconds ago"),
+! (long)(vim_time() - tt));
+ }
+
+ /*
+--- 3124,3136 ----
+ }
+ else
+ #endif
+! {
+! long seconds = (long)(vim_time() - tt);
+!
+! vim_snprintf((char *)buf, buflen,
+! NGETTEXT("%ld second ago", "%ld seconds ago", seconds),
+! seconds);
+! }
+ }
+
+ /*
+*** ../vim-8.1.0307/src/version.c 2018-08-21 16:56:28.371325254 +0200
+--- src/version.c 2018-08-21 17:06:12.627737719 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 308,
+ /**/
+
+--
+ARTHUR: I've said I'm sorry about the old woman, but from the behind you
+ looked ...
+DENNIS: What I object to is that you automatically treat me like an inferior...
+ARTHUR: Well ... I AM king.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0309 b/data/vim/patches/8.1.0309
new file mode 100644
index 000000000..a4a36b0ae
--- /dev/null
+++ b/data/vim/patches/8.1.0309
@@ -0,0 +1,395 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0309
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0309
+Problem: Profiling does not show a count for condition lines. (Daniel
+ Hahler)
+Solution: Count lines when not skipping. (Ozaki Kiichi, closes #2499)
+Files: src/ex_docmd.c, src/testdir/test_profile.vim
+
+
+*** ../vim-8.1.0308/src/ex_docmd.c 2018-08-21 15:12:10.839801647 +0200
+--- src/ex_docmd.c 2018-08-21 17:40:31.920546399 +0200
+***************
+*** 1766,1782 ****
+ ea.skip = (if_level > 0);
+ #endif
+
+ #ifdef FEAT_EVAL
+ # ifdef FEAT_PROFILE
+! /* Count this line for profiling if ea.skip is FALSE. */
+! if (do_profiling == PROF_YES && !ea.skip)
+ {
+! if (getline_equal(fgetline, cookie, get_func_line))
+! func_line_exec(getline_cookie(fgetline, cookie));
+! else if (getline_equal(fgetline, cookie, getsourceline))
+! script_line_exec();
+ }
+! #endif
+
+ /* May go to debug mode. If this happens and the ">quit" debug command is
+ * used, throw an interrupt exception and skip the next command. */
+--- 1766,1816 ----
+ ea.skip = (if_level > 0);
+ #endif
+
++ /*
++ * 3. Skip over the range to find the command. Let "p" point to after it.
++ *
++ * We need the command to know what kind of range it uses.
++ */
++ cmd = ea.cmd;
++ ea.cmd = skip_range(ea.cmd, NULL);
++ if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
++ ea.cmd = skipwhite(ea.cmd + 1);
++ p = find_command(&ea, NULL);
++
+ #ifdef FEAT_EVAL
+ # ifdef FEAT_PROFILE
+! // Count this line for profiling if skip is TRUE.
+! if (do_profiling == PROF_YES
+! && (!ea.skip || cstack->cs_idx == 0 || (cstack->cs_idx > 0
+! && (cstack->cs_flags[cstack->cs_idx - 1] & CSF_ACTIVE))))
+ {
+! int skip = did_emsg || got_int || did_throw;
+!
+! if (ea.cmdidx == CMD_catch)
+! skip = !skip && !(cstack->cs_idx >= 0
+! && (cstack->cs_flags[cstack->cs_idx] & CSF_THROWN)
+! && !(cstack->cs_flags[cstack->cs_idx] & CSF_CAUGHT));
+! else if (ea.cmdidx == CMD_else || ea.cmdidx == CMD_elseif)
+! skip = skip || !(cstack->cs_idx >= 0
+! && !(cstack->cs_flags[cstack->cs_idx]
+! & (CSF_ACTIVE | CSF_TRUE)));
+! else if (ea.cmdidx == CMD_finally)
+! skip = FALSE;
+! else if (ea.cmdidx != CMD_endif
+! && ea.cmdidx != CMD_endfor
+! && ea.cmdidx != CMD_endtry
+! && ea.cmdidx != CMD_endwhile)
+! skip = ea.skip;
+!
+! if (!skip)
+! {
+! if (getline_equal(fgetline, cookie, get_func_line))
+! func_line_exec(getline_cookie(fgetline, cookie));
+! else if (getline_equal(fgetline, cookie, getsourceline))
+! script_line_exec();
+! }
+ }
+! # endif
+
+ /* May go to debug mode. If this happens and the ">quit" debug command is
+ * used, throw an interrupt exception and skip the next command. */
+***************
+*** 1789,1805 ****
+ #endif
+
+ /*
+- * 3. Skip over the range to find the command. Let "p" point to after it.
+- *
+- * We need the command to know what kind of range it uses.
+- */
+- cmd = ea.cmd;
+- ea.cmd = skip_range(ea.cmd, NULL);
+- if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
+- ea.cmd = skipwhite(ea.cmd + 1);
+- p = find_command(&ea, NULL);
+-
+- /*
+ * 4. parse a range specifier of the form: addr [,addr] [;addr] ..
+ *
+ * where 'addr' is:
+--- 1823,1828 ----
+*** ../vim-8.1.0308/src/testdir/test_profile.vim 2018-06-30 21:18:10.486300954 +0200
+--- src/testdir/test_profile.vim 2018-08-21 17:35:04.318354275 +0200
+***************
+*** 67,73 ****
+ call assert_match('^\s*1\s\+.*\slet l:count = 100$', lines[13])
+ call assert_match('^\s*101\s\+.*\swhile l:count > 0$', lines[14])
+ call assert_match('^\s*100\s\+.*\s let l:count = l:count - 1$', lines[15])
+! call assert_match('^\s*100\s\+.*\sendwhile$', lines[16])
+ call assert_equal('', lines[17])
+ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[18])
+ call assert_equal('count total (s) self (s) function', lines[19])
+--- 67,73 ----
+ call assert_match('^\s*1\s\+.*\slet l:count = 100$', lines[13])
+ call assert_match('^\s*101\s\+.*\swhile l:count > 0$', lines[14])
+ call assert_match('^\s*100\s\+.*\s let l:count = l:count - 1$', lines[15])
+! call assert_match('^\s*101\s\+.*\sendwhile$', lines[16])
+ call assert_equal('', lines[17])
+ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[18])
+ call assert_equal('count total (s) self (s) function', lines[19])
+***************
+*** 84,89 ****
+--- 84,310 ----
+ call delete('Xprofile_func.log')
+ endfunc
+
++ func Test_profile_func_with_ifelse()
++ let lines = [
++ \ "func! Foo1()",
++ \ " if 1",
++ \ " let x = 0",
++ \ " elseif 1",
++ \ " let x = 1",
++ \ " else",
++ \ " let x = 2",
++ \ " endif",
++ \ "endfunc",
++ \ "func! Foo2()",
++ \ " if 0",
++ \ " let x = 0",
++ \ " elseif 1",
++ \ " let x = 1",
++ \ " else",
++ \ " let x = 2",
++ \ " endif",
++ \ "endfunc",
++ \ "func! Foo3()",
++ \ " if 0",
++ \ " let x = 0",
++ \ " elseif 0",
++ \ " let x = 1",
++ \ " else",
++ \ " let x = 2",
++ \ " endif",
++ \ "endfunc",
++ \ "call Foo1()",
++ \ "call Foo2()",
++ \ "call Foo3()",
++ \ ]
++
++ call writefile(lines, 'Xprofile_func.vim')
++ call system(v:progpath
++ \ . ' -es -u NONE -U NONE -i NONE --noplugin'
++ \ . ' -c "profile start Xprofile_func.log"'
++ \ . ' -c "profile func Foo*"'
++ \ . ' -c "so Xprofile_func.vim"'
++ \ . ' -c "qall!"')
++ call assert_equal(0, v:shell_error)
++
++ let lines = readfile('Xprofile_func.log')
++
++ " - Foo1() should pass 'if' block.
++ " - Foo2() should pass 'elseif' block.
++ " - Foo3() should pass 'else' block.
++ call assert_equal(54, len(lines))
++
++ call assert_equal('FUNCTION Foo1()', lines[0])
++ call assert_equal('Called 1 time', lines[1])
++ call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2])
++ call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3])
++ call assert_equal('', lines[4])
++ call assert_equal('count total (s) self (s)', lines[5])
++ call assert_match('^\s*1\s\+.*\sif 1$', lines[6])
++ call assert_match('^\s*1\s\+.*\s let x = 0$', lines[7])
++ call assert_match( '^\s\+elseif 1$', lines[8])
++ call assert_match( '^\s\+let x = 1$', lines[9])
++ call assert_match( '^\s\+else$', lines[10])
++ call assert_match( '^\s\+let x = 2$', lines[11])
++ call assert_match('^\s*1\s\+.*\sendif$', lines[12])
++ call assert_equal('', lines[13])
++ call assert_equal('FUNCTION Foo2()', lines[14])
++ call assert_equal('Called 1 time', lines[15])
++ call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[16])
++ call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[17])
++ call assert_equal('', lines[18])
++ call assert_equal('count total (s) self (s)', lines[19])
++ call assert_match('^\s*1\s\+.*\sif 0$', lines[20])
++ call assert_match( '^\s\+let x = 0$', lines[21])
++ call assert_match('^\s*1\s\+.*\selseif 1$', lines[22])
++ call assert_match('^\s*1\s\+.*\s let x = 1$', lines[23])
++ call assert_match( '^\s\+else$', lines[24])
++ call assert_match( '^\s\+let x = 2$', lines[25])
++ call assert_match('^\s*1\s\+.*\sendif$', lines[26])
++ call assert_equal('', lines[27])
++ call assert_equal('FUNCTION Foo3()', lines[28])
++ call assert_equal('Called 1 time', lines[29])
++ call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[30])
++ call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[31])
++ call assert_equal('', lines[32])
++ call assert_equal('count total (s) self (s)', lines[33])
++ call assert_match('^\s*1\s\+.*\sif 0$', lines[34])
++ call assert_match( '^\s\+let x = 0$', lines[35])
++ call assert_match('^\s*1\s\+.*\selseif 0$', lines[36])
++ call assert_match( '^\s\+let x = 1$', lines[37])
++ call assert_match('^\s*1\s\+.*\selse$', lines[38])
++ call assert_match('^\s*1\s\+.*\s let x = 2$', lines[39])
++ call assert_match('^\s*1\s\+.*\sendif$', lines[40])
++ call assert_equal('', lines[41])
++ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[42])
++ call assert_equal('count total (s) self (s) function', lines[43])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[44])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[45])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[46])
++ call assert_equal('', lines[47])
++ call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[48])
++ call assert_equal('count total (s) self (s) function', lines[49])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[50])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[51])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[52])
++ call assert_equal('', lines[53])
++
++ call delete('Xprofile_func.vim')
++ call delete('Xprofile_func.log')
++ endfunc
++
++ func Test_profile_func_with_trycatch()
++ let lines = [
++ \ "func! Foo1()",
++ \ " try",
++ \ " let x = 0",
++ \ " catch",
++ \ " let x = 1",
++ \ " finally",
++ \ " let x = 2",
++ \ " endtry",
++ \ "endfunc",
++ \ "func! Foo2()",
++ \ " try",
++ \ " throw 0",
++ \ " catch",
++ \ " let x = 1",
++ \ " finally",
++ \ " let x = 2",
++ \ " endtry",
++ \ "endfunc",
++ \ "func! Foo3()",
++ \ " try",
++ \ " throw 0",
++ \ " catch",
++ \ " throw 1",
++ \ " finally",
++ \ " let x = 2",
++ \ " endtry",
++ \ "endfunc",
++ \ "call Foo1()",
++ \ "call Foo2()",
++ \ "try",
++ \ " call Foo3()",
++ \ "catch",
++ \ "endtry",
++ \ ]
++
++ call writefile(lines, 'Xprofile_func.vim')
++ call system(v:progpath
++ \ . ' -es -u NONE -U NONE -i NONE --noplugin'
++ \ . ' -c "profile start Xprofile_func.log"'
++ \ . ' -c "profile func Foo*"'
++ \ . ' -c "so Xprofile_func.vim"'
++ \ . ' -c "qall!"')
++ call assert_equal(0, v:shell_error)
++
++ let lines = readfile('Xprofile_func.log')
++
++ " - Foo1() should pass 'try' 'finally' blocks.
++ " - Foo2() should pass 'catch' 'finally' blocks.
++ " - Foo3() should not pass 'endtry'.
++ call assert_equal(54, len(lines))
++
++ call assert_equal('FUNCTION Foo1()', lines[0])
++ call assert_equal('Called 1 time', lines[1])
++ call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2])
++ call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3])
++ call assert_equal('', lines[4])
++ call assert_equal('count total (s) self (s)', lines[5])
++ call assert_match('^\s*1\s\+.*\stry$', lines[6])
++ call assert_match('^\s*1\s\+.*\s let x = 0$', lines[7])
++ call assert_match( '^\s\+catch$', lines[8])
++ call assert_match( '^\s\+let x = 1$', lines[9])
++ call assert_match('^\s*1\s\+.*\sfinally$', lines[10])
++ call assert_match('^\s*1\s\+.*\s let x = 2$', lines[11])
++ call assert_match('^\s*1\s\+.*\sendtry$', lines[12])
++ call assert_equal('', lines[13])
++ call assert_equal('FUNCTION Foo2()', lines[14])
++ call assert_equal('Called 1 time', lines[15])
++ call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[16])
++ call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[17])
++ call assert_equal('', lines[18])
++ call assert_equal('count total (s) self (s)', lines[19])
++ call assert_match('^\s*1\s\+.*\stry$', lines[20])
++ call assert_match('^\s*1\s\+.*\s throw 0$', lines[21])
++ call assert_match('^\s*1\s\+.*\scatch$', lines[22])
++ call assert_match('^\s*1\s\+.*\s let x = 1$', lines[23])
++ call assert_match('^\s*1\s\+.*\sfinally$', lines[24])
++ call assert_match('^\s*1\s\+.*\s let x = 2$', lines[25])
++ call assert_match('^\s*1\s\+.*\sendtry$', lines[26])
++ call assert_equal('', lines[27])
++ call assert_equal('FUNCTION Foo3()', lines[28])
++ call assert_equal('Called 1 time', lines[29])
++ call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[30])
++ call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[31])
++ call assert_equal('', lines[32])
++ call assert_equal('count total (s) self (s)', lines[33])
++ call assert_match('^\s*1\s\+.*\stry$', lines[34])
++ call assert_match('^\s*1\s\+.*\s throw 0$', lines[35])
++ call assert_match('^\s*1\s\+.*\scatch$', lines[36])
++ call assert_match('^\s*1\s\+.*\s throw 1$', lines[37])
++ call assert_match('^\s*1\s\+.*\sfinally$', lines[38])
++ call assert_match('^\s*1\s\+.*\s let x = 2$', lines[39])
++ call assert_match( '^\s\+endtry$', lines[40])
++ call assert_equal('', lines[41])
++ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[42])
++ call assert_equal('count total (s) self (s) function', lines[43])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[44])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[45])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[46])
++ call assert_equal('', lines[47])
++ call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[48])
++ call assert_equal('count total (s) self (s) function', lines[49])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[50])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[51])
++ call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[52])
++ call assert_equal('', lines[53])
++
++ call delete('Xprofile_func.vim')
++ call delete('Xprofile_func.log')
++ endfunc
++
+ func Test_profile_file()
+ let lines = [
+ \ 'func! Foo()',
+***************
+*** 123,129 ****
+ call assert_equal(' " a comment', lines[9])
+ " if self and total are equal we only get one number
+ call assert_match('^\s*20\s\+\(\d\+\.\d\+\s\+\)\=\d\+\.\d\+\s\+call Foo()$', lines[10])
+! call assert_match('^\s*20\s\+\d\+\.\d\+\s\+endfor$', lines[11])
+ " if self and total are equal we only get one number
+ call assert_match('^\s*2\s\+\(\d\+\.\d\+\s\+\)\=\d\+\.\d\+\s\+call Foo()$', lines[12])
+ call assert_equal('', lines[13])
+--- 344,350 ----
+ call assert_equal(' " a comment', lines[9])
+ " if self and total are equal we only get one number
+ call assert_match('^\s*20\s\+\(\d\+\.\d\+\s\+\)\=\d\+\.\d\+\s\+call Foo()$', lines[10])
+! call assert_match('^\s*22\s\+\d\+\.\d\+\s\+endfor$', lines[11])
+ " if self and total are equal we only get one number
+ call assert_match('^\s*2\s\+\(\d\+\.\d\+\s\+\)\=\d\+\.\d\+\s\+call Foo()$', lines[12])
+ call assert_equal('', lines[13])
+*** ../vim-8.1.0308/src/version.c 2018-08-21 17:07:40.155188638 +0200
+--- src/version.c 2018-08-21 17:48:43.353706395 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 309,
+ /**/
+
+--
+ARTHUR: ... and I am your king ....
+OLD WOMAN: Ooooh! I didn't know we had a king. I thought we were an
+ autonomous collective ...
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0310 b/data/vim/patches/8.1.0310
new file mode 100644
index 000000000..1b992b173
--- /dev/null
+++ b/data/vim/patches/8.1.0310
@@ -0,0 +1,110 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0310
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0310
+Problem: File info message not always suppressed with 'F' in 'shortmess'.
+ (Asheq Imran)
+Solution: Save and restore msg_silent. (Christian Brabandt, closes #3221)
+Files: src/buffer.c, src/memline.c, src/testdir/test_options.vim
+
+
+*** ../vim-8.1.0309/src/buffer.c 2018-08-21 15:12:10.831801698 +0200
+--- src/buffer.c 2018-08-21 18:36:25.882450971 +0200
+***************
+*** 1035,1041 ****
+--- 1035,1048 ----
+ buf = old_curbuf->br_buf;
+ if (buf != NULL)
+ {
++ int old_msg_silent = msg_silent;
++
++ if (shortmess(SHM_FILEINFO))
++ msg_silent = 1; // prevent fileinfo message
+ enter_buffer(buf);
++ // restore msg_silent, so that the command line will be shown
++ msg_silent = old_msg_silent;
++
+ # ifdef FEAT_SYN_HL
+ if (old_tw != curbuf->b_p_tw)
+ check_colorcolumn(curwin);
+*** ../vim-8.1.0309/src/memline.c 2018-08-20 22:53:00.210105086 +0200
+--- src/memline.c 2018-08-21 18:38:03.481885916 +0200
+***************
+*** 828,837 ****
+ */
+ void
+ check_need_swap(
+! int newfile) /* reading file into new buffer */
+ {
+ if (curbuf->b_may_swap && (!curbuf->b_p_ro || !newfile))
+ ml_open_file(curbuf);
+ }
+
+ /*
+--- 828,840 ----
+ */
+ void
+ check_need_swap(
+! int newfile) // reading file into new buffer
+ {
++ int old_msg_silent = msg_silent; // might be reset by an E325 message
++
+ if (curbuf->b_may_swap && (!curbuf->b_p_ro || !newfile))
+ ml_open_file(curbuf);
++ msg_silent = old_msg_silent;
+ }
+
+ /*
+*** ../vim-8.1.0309/src/testdir/test_options.vim 2018-08-11 17:52:57.848311971 +0200
+--- src/testdir/test_options.vim 2018-08-21 18:34:20.687161831 +0200
+***************
+*** 414,416 ****
+--- 414,437 ----
+ set shortmess&
+ bwipe
+ endfunc
++
++ func Test_shortmess_F2()
++ e file1
++ e file2
++ call assert_match('file1', execute('bn', ''))
++ call assert_match('file2', execute('bn', ''))
++ set shortmess+=F
++ call assert_true(empty(execute('bn', '')))
++ call assert_true(empty(execute('bn', '')))
++ set hidden
++ call assert_true(empty(execute('bn', '')))
++ call assert_true(empty(execute('bn', '')))
++ set nohidden
++ call assert_true(empty(execute('bn', '')))
++ call assert_true(empty(execute('bn', '')))
++ set shortmess&
++ call assert_match('file1', execute('bn', ''))
++ call assert_match('file2', execute('bn', ''))
++ bwipe
++ bwipe
++ endfunc
+*** ../vim-8.1.0309/src/version.c 2018-08-21 17:49:50.993308900 +0200
+--- src/version.c 2018-08-21 18:42:36.348269248 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 310,
+ /**/
+
+--
+"The future's already arrived - it's just not evenly distributed yet."
+ -- William Gibson
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0311 b/data/vim/patches/8.1.0311
new file mode 100644
index 000000000..3b6ece599
--- /dev/null
+++ b/data/vim/patches/8.1.0311
@@ -0,0 +1,112 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0311
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0311
+Problem: Filtering entries in a quickfix list is not easy.
+Solution: Add the cfilter plugin. (Yegappan Lakshmanan)
+Files: runtime/pack/dist/opt/cfilter/plugin/cfilter.vim,
+ runtime/doc/quickfix.txt
+
+
+*** ../vim-8.1.0310/runtime/pack/dist/opt/cfilter/plugin/cfilter.vim 1970-01-01 01:00:00.000000000 +0100
+--- runtime/pack/dist/opt/cfilter/plugin/cfilter.vim 2018-08-21 18:56:37.027118962 +0200
+***************
+*** 0 ****
+--- 1,43 ----
++ " cfilter.vim: Plugin to filter entries from a quickfix/location list
++ " Last Change: May 12, 2018
++ " Maintainer: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
++ " Version: 1.0
++ "
++ " Commands to filter the quickfix list:
++ " :Cfilter[!] {pat}
++ " Create a new quickfix list from entries matching {pat} in the current
++ " quickfix list. Both the file name and the text of the entries are
++ " matched against {pat}. If ! is supplied, then entries not matching
++ " {pat} are used.
++ " :Lfilter[!] {pat}
++ " Same as :Cfilter but operates on the current location list.
++ "
++ if exists("loaded_cfilter")
++ finish
++ endif
++ let loaded_cfilter = 1
++
++ func s:Qf_filter(qf, pat, bang)
++ if a:qf
++ let Xgetlist = function('getqflist')
++ let Xsetlist = function('setqflist')
++ let cmd = ':Cfilter' . a:bang
++ else
++ let Xgetlist = function('getloclist', [0])
++ let Xsetlist = function('setloclist', [0])
++ let cmd = ':Lfilter' . a:bang
++ endif
++
++ if a:bang == '!'
++ let cond = 'v:val.text !~# a:pat && bufname(v:val.bufnr) !~# a:pat'
++ else
++ let cond = 'v:val.text =~# a:pat || bufname(v:val.bufnr) =~# a:pat'
++ endif
++
++ let items = filter(Xgetlist(), cond)
++ let title = cmd . ' ' . a:pat
++ call Xsetlist([], ' ', {'title' : title, 'items' : items})
++ endfunc
++
++ com! -nargs=+ -bang Cfilter call s:Qf_filter(1, <q-args>, <q-bang>)
++ com! -nargs=+ -bang Lfilter call s:Qf_filter(0, <q-args>, <q-bang>)
+*** ../vim-8.1.0310/runtime/doc/quickfix.txt 2018-07-08 18:20:18.111521913 +0200
+--- runtime/doc/quickfix.txt 2018-08-21 19:02:00.097112470 +0200
+***************
+*** 1551,1556 ****
+--- 1551,1572 ----
+ recognized as a command separator. The backslash before each space is
+ required for the set command.
+
++ *cfilter-plugin*
++ If you have too many matching messages, you can use the cfilter plugin to
++ reduce the number of entries. Load the plugin with: >
++ packadd cfilter
++
++ Then you can use these command: >
++ :Cfilter[!] {pat}
++ :Lfilter[!] {pat}
++
++ :Cfilter creates a new quickfix list from entries matching {pat} in the
++ current quickfix list. Both the file name and the text of the entries are
++ matched against {pat}. If ! is supplied, then entries not matching {pat} are
++ used.
++
++ :Lfilter does the same as :Cfilter but operates on the current location list.
++
+ =============================================================================
+ 8. The directory stack *quickfix-directory-stack*
+
+*** ../vim-8.1.0310/src/version.c 2018-08-21 18:50:11.153501902 +0200
+--- src/version.c 2018-08-21 19:01:28.421309486 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 311,
+ /**/
+
+--
+ARTHUR: Be quiet! I order you to shut up.
+OLD WOMAN: Order, eh -- who does he think he is?
+ARTHUR: I am your king!
+OLD WOMAN: Well, I didn't vote for you.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0312 b/data/vim/patches/8.1.0312
new file mode 100644
index 000000000..9db92c0d5
--- /dev/null
+++ b/data/vim/patches/8.1.0312
@@ -0,0 +1,226 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0312
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0312
+Problem: Wrong type for flags used in signal handlers.
+Solution: Use sig_atomic_t. (Dominique Pelle, closes #3356)
+Files: src/globals.h, src/os_unix.c, src/os_win32.h
+
+
+*** ../vim-8.1.0311/src/globals.h 2018-08-14 13:38:12.744559267 +0200
+--- src/globals.h 2018-08-21 19:32:32.566883918 +0200
+***************
+*** 518,524 ****
+ *
+ * volatile because it is used in signal handler sig_sysmouse().
+ */
+! EXTERN volatile int hold_gui_events INIT(= 0);
+
+ /*
+ * When resizing the shell is postponed, remember the new size, and call
+--- 518,524 ----
+ *
+ * volatile because it is used in signal handler sig_sysmouse().
+ */
+! EXTERN volatile sig_atomic_t hold_gui_events INIT(= 0);
+
+ /*
+ * When resizing the shell is postponed, remember the new size, and call
+***************
+*** 655,661 ****
+ /* TRUE when in or after free_all_mem() */
+ #endif
+ /* volatile because it is used in signal handler deathtrap(). */
+! EXTERN volatile int full_screen INIT(= FALSE);
+ /* TRUE when doing full-screen output
+ * otherwise only writing some messages */
+
+--- 655,661 ----
+ /* TRUE when in or after free_all_mem() */
+ #endif
+ /* volatile because it is used in signal handler deathtrap(). */
+! EXTERN volatile sig_atomic_t full_screen INIT(= FALSE);
+ /* TRUE when doing full-screen output
+ * otherwise only writing some messages */
+
+***************
+*** 800,810 ****
+ EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */
+ # ifdef SIGHASARG
+ /* volatile because it is used in signal handlers. */
+! EXTERN volatile int lc_signal; /* caught signal number, 0 when no was signal
+ caught; used for mch_libcall() */
+ # endif
+ /* volatile because it is used in signal handler deathtrap(). */
+! EXTERN volatile int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
+ #endif
+
+ #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT)
+--- 800,810 ----
+ EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */
+ # ifdef SIGHASARG
+ /* volatile because it is used in signal handlers. */
+! EXTERN volatile sig_atomic_t lc_signal; /* caught signal number, 0 when no was signal
+ caught; used for mch_libcall() */
+ # endif
+ /* volatile because it is used in signal handler deathtrap(). */
+! EXTERN volatile sig_atomic_t lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
+ #endif
+
+ #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT)
+***************
+*** 1037,1043 ****
+ EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */
+
+ /* volatile because it is used in signal handler catch_sigint(). */
+! EXTERN volatile int got_int INIT(= FALSE); /* set to TRUE when interrupt
+ signal occurred */
+ #ifdef USE_TERM_CONSOLE
+ EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */
+--- 1037,1043 ----
+ EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */
+
+ /* volatile because it is used in signal handler catch_sigint(). */
+! EXTERN volatile sig_atomic_t got_int INIT(= FALSE); /* set to TRUE when interrupt
+ signal occurred */
+ #ifdef USE_TERM_CONSOLE
+ EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */
+*** ../vim-8.1.0311/src/os_unix.c 2018-08-21 13:09:06.250115910 +0200
+--- src/os_unix.c 2018-08-21 19:32:32.570883895 +0200
+***************
+*** 161,167 ****
+ static int get_x11_icon(int);
+
+ static char_u *oldtitle = NULL;
+! static volatile int oldtitle_outdated = FALSE;
+ static int did_set_title = FALSE;
+ static char_u *oldicon = NULL;
+ static int did_set_icon = FALSE;
+--- 161,167 ----
+ static int get_x11_icon(int);
+
+ static char_u *oldtitle = NULL;
+! static volatile sig_atomic_t oldtitle_outdated = FALSE;
+ static int did_set_title = FALSE;
+ static char_u *oldicon = NULL;
+ static int did_set_icon = FALSE;
+***************
+*** 205,211 ****
+ # define SET_SIG_ALARM
+ static RETSIGTYPE sig_alarm SIGPROTOARG;
+ /* volatile because it is used in signal handler sig_alarm(). */
+! static volatile int sig_alarm_called;
+ #endif
+ static RETSIGTYPE deathtrap SIGPROTOARG;
+
+--- 205,211 ----
+ # define SET_SIG_ALARM
+ static RETSIGTYPE sig_alarm SIGPROTOARG;
+ /* volatile because it is used in signal handler sig_alarm(). */
+! static volatile sig_atomic_t sig_alarm_called;
+ #endif
+ static RETSIGTYPE deathtrap SIGPROTOARG;
+
+***************
+*** 231,243 ****
+ #endif
+
+ /* volatile because it is used in signal handler sig_winch(). */
+! static volatile int do_resize = FALSE;
+ static char_u *extra_shell_arg = NULL;
+ static int show_shell_mess = TRUE;
+ /* volatile because it is used in signal handler deathtrap(). */
+! static volatile int deadly_signal = 0; /* The signal we caught */
+ /* volatile because it is used in signal handler deathtrap(). */
+! static volatile int in_mch_delay = FALSE; /* sleeping in mch_delay() */
+
+ #if defined(FEAT_JOB_CHANNEL) && !defined(USE_SYSTEM)
+ static int dont_check_job_ended = 0;
+--- 231,243 ----
+ #endif
+
+ /* volatile because it is used in signal handler sig_winch(). */
+! static volatile sig_atomic_t do_resize = FALSE;
+ static char_u *extra_shell_arg = NULL;
+ static int show_shell_mess = TRUE;
+ /* volatile because it is used in signal handler deathtrap(). */
+! static volatile sig_atomic_t deadly_signal = 0; /* The signal we caught */
+ /* volatile because it is used in signal handler deathtrap(). */
+! static volatile sig_atomic_t in_mch_delay = FALSE; /* sleeping in mch_delay() */
+
+ #if defined(FEAT_JOB_CHANNEL) && !defined(USE_SYSTEM)
+ static int dont_check_job_ended = 0;
+***************
+*** 1247,1253 ****
+
+ #if defined(SIGCONT)
+ static RETSIGTYPE sigcont_handler SIGPROTOARG;
+! static volatile int in_mch_suspend = FALSE;
+
+ /*
+ * With multi-threading, suspending might not work immediately. Catch the
+--- 1247,1253 ----
+
+ #if defined(SIGCONT)
+ static RETSIGTYPE sigcont_handler SIGPROTOARG;
+! static volatile sig_atomic_t in_mch_suspend = FALSE;
+
+ /*
+ * With multi-threading, suspending might not work immediately. Catch the
+***************
+*** 1260,1266 ****
+ *
+ * volatile because it is used in signal handler sigcont_handler().
+ */
+! static volatile int sigcont_received;
+ static RETSIGTYPE sigcont_handler SIGPROTOARG;
+
+ /*
+--- 1260,1266 ----
+ *
+ * volatile because it is used in signal handler sigcont_handler().
+ */
+! static volatile sig_atomic_t sigcont_received;
+ static RETSIGTYPE sigcont_handler SIGPROTOARG;
+
+ /*
+*** ../vim-8.1.0311/src/os_win32.h 2017-02-01 13:08:19.000000000 +0100
+--- src/os_win32.h 2018-08-21 19:32:32.570883895 +0200
+***************
+*** 89,94 ****
+--- 89,95 ----
+
+ #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
+
++ #include <signal.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <sys/types.h>
+*** ../vim-8.1.0311/src/version.c 2018-08-21 19:22:00.366591999 +0200
+--- src/version.c 2018-08-21 19:33:01.798710954 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 312,
+ /**/
+
+--
+OLD WOMAN: Well, how did you become king, then?
+ARTHUR: The Lady of the Lake, her arm clad in the purest shimmering samite,
+ held Excalibur aloft from the bosom of the water to signify by Divine
+ Providence ... that I, Arthur, was to carry Excalibur ... That is
+ why I am your king!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0313 b/data/vim/patches/8.1.0313
new file mode 100644
index 000000000..e3f170127
--- /dev/null
+++ b/data/vim/patches/8.1.0313
@@ -0,0 +1,232 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0313
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0313
+Problem: Information about a swap file is unavailable.
+Solution: Add swapinfo(). (Enzo Ferber)
+Files: runtime/doc/eval.txt, src/evalfunc.c, src/memline.c,
+ src/proto/memline.pro, src/testdir/test_swap.vim
+
+
+*** ../vim-8.1.0312/runtime/doc/eval.txt 2018-08-21 16:56:28.363325301 +0200
+--- runtime/doc/eval.txt 2018-08-21 20:12:15.882157860 +0200
+***************
+*** 2409,2414 ****
+--- 2416,2422 ----
+ specific match in ":s" or substitute()
+ substitute({expr}, {pat}, {sub}, {flags})
+ String all {pat} in {expr} replaced with {sub}
++ swapinfo({fname}) Dict information about swap file {fname}
+ synID({lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col}
+ synIDattr({synID}, {what} [, {mode}])
+ String attribute {what} of syntax ID {synID}
+***************
+*** 7999,8004 ****
+--- 8009,8030 ----
+ |submatch()| returns. Example: >
+ :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
+
++ swapinfo({fname}) swapinfo()
++ The result is a dictionary, which holds information about the
++ swapfile {fname}. The available fields are:
++ version VIM version
++ user user name
++ host host name
++ fname original file name
++ pid PID of the VIM process that created the swap
++ file
++ mtime last modification time in seconds
++ inode Optional: INODE number of the file
++ In case of failure an "error" item is added with the reason:
++ Cannot open file: file not found or in accessible
++ Cannot read file: cannot read first block
++ magic number mismatch: info in first block is invalid
++
+ synID({lnum}, {col}, {trans}) *synID()*
+ The result is a Number, which is the syntax ID at the position
+ {lnum} and {col} in the current window.
+*** ../vim-8.1.0312/src/evalfunc.c 2018-08-21 16:56:28.367325278 +0200
+--- src/evalfunc.c 2018-08-21 20:26:36.876842294 +0200
+***************
+*** 398,403 ****
+--- 398,404 ----
+ static void f_strwidth(typval_T *argvars, typval_T *rettv);
+ static void f_submatch(typval_T *argvars, typval_T *rettv);
+ static void f_substitute(typval_T *argvars, typval_T *rettv);
++ static void f_swapinfo(typval_T *argvars, typval_T *rettv);
+ static void f_synID(typval_T *argvars, typval_T *rettv);
+ static void f_synIDattr(typval_T *argvars, typval_T *rettv);
+ static void f_synIDtrans(typval_T *argvars, typval_T *rettv);
+***************
+*** 859,864 ****
+--- 860,866 ----
+ {"strwidth", 1, 1, f_strwidth},
+ {"submatch", 1, 2, f_submatch},
+ {"substitute", 4, 4, f_substitute},
++ {"swapinfo", 1, 1, f_swapinfo},
+ {"synID", 3, 3, f_synID},
+ {"synIDattr", 2, 3, f_synIDattr},
+ {"synIDtrans", 1, 1, f_synIDtrans},
+***************
+*** 12314,12319 ****
+--- 12316,12331 ----
+ }
+
+ /*
++ * "swapinfo(swap_filename)" function
++ */
++ static void
++ f_swapinfo(typval_T *argvars, typval_T *rettv)
++ {
++ if (rettv_dict_alloc(rettv) == OK)
++ get_b0_dict(get_tv_string(argvars), rettv->vval.v_dict);
++ }
++
++ /*
+ * "synID(lnum, col, trans)" function
+ */
+ static void
+*** ../vim-8.1.0312/src/memline.c 2018-08-21 18:50:11.153501902 +0200
+--- src/memline.c 2018-08-21 20:18:30.815871851 +0200
+***************
+*** 2042,2047 ****
+--- 2042,2090 ----
+ #endif
+
+ /*
++ * Return information found in swapfile "fname" in dictionary "d".
++ * This is used by the swapinfo() function.
++ */
++ void
++ get_b0_dict(char_u *fname, dict_T *d)
++ {
++ int fd;
++ struct block0 b0;
++
++ if ((fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0)) >= 0)
++ {
++ if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
++ {
++ if (b0_magic_wrong(&b0))
++ {
++ dict_add_string(d, "error",
++ vim_strsave((char_u *)"magic number mismatch"));
++ }
++ else
++ {
++ /* we have swap information */
++ dict_add_string(d, "version", vim_strsave(b0.b0_version));
++ dict_add_string(d, "user", vim_strsave(b0.b0_uname));
++ dict_add_string(d, "host", vim_strsave(b0.b0_hname));
++ dict_add_string(d, "fname", vim_strsave(b0.b0_fname));
++
++ dict_add_number(d, "pid", char_to_long(b0.b0_pid));
++ dict_add_number(d, "mtime", char_to_long(b0.b0_mtime));
++ #ifdef CHECK_INODE
++ dict_add_number(d, "inode", char_to_long(b0.b0_ino));
++ #endif
++ }
++ }
++ else
++ dict_add_string(d, "error",
++ vim_strsave((char_u *)"Cannot read file"));
++ close(fd);
++ }
++ else
++ dict_add_string(d, "error", vim_strsave((char_u *)"Cannot open file"));
++ }
++
++ /*
+ * Give information about an existing swap file.
+ * Returns timestamp (0 when unknown).
+ */
+*** ../vim-8.1.0312/src/proto/memline.pro 2018-08-07 21:39:09.251060096 +0200
+--- src/proto/memline.pro 2018-08-21 20:00:58.994558112 +0200
+***************
+*** 11,16 ****
+--- 11,18 ----
+ void ml_timestamp(buf_T *buf);
+ void ml_recover(void);
+ int recover_names(char_u *fname, int list, int nr, char_u **fname_out);
++ char_u *make_percent_swname(char_u *dir, char_u *name);
++ void get_b0_dict(char_u *fname, dict_T *d);
+ void ml_sync_all(int check_file, int check_char);
+ void ml_preserve(buf_T *buf, int message);
+ char_u *ml_get(linenr_T lnum);
+***************
+*** 34,38 ****
+ void ml_decrypt_data(memfile_T *mfp, char_u *data, off_T offset, unsigned size);
+ long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp);
+ void goto_byte(long cnt);
+- char_u *make_percent_swname (char_u *dir, char_u *name);
+ /* vim: set ft=c : */
+--- 36,39 ----
+*** ../vim-8.1.0312/src/testdir/test_swap.vim 2018-05-12 15:57:33.000000000 +0200
+--- src/testdir/test_swap.vim 2018-08-21 20:18:23.395917660 +0200
+***************
+*** 97,99 ****
+--- 97,133 ----
+ set directory&
+ call delete('Xswapdir', 'rf')
+ endfunc
++
++ func Test_swapinfo()
++ new Xswapinfo
++ call setline(1, ['one', 'two', 'three'])
++ w
++ let fname = trim(execute('swapname'))
++ call assert_match('Xswapinfo', fname)
++ let info = swapinfo(fname)
++ call assert_match('8\.', info.version)
++ call assert_match('\w', info.user)
++ call assert_equal(hostname(), info.host)
++ call assert_match('Xswapinfo', info.fname)
++ call assert_equal(getpid(), info.pid)
++ call assert_match('^\d*$', info.mtime)
++ if has_key(info, 'inode')
++ call assert_match('\d', info.inode)
++ endif
++ bwipe!
++ call delete(fname)
++ call delete('Xswapinfo')
++
++ let info = swapinfo('doesnotexist')
++ call assert_equal('Cannot open file', info.error)
++
++ call writefile(['burp'], 'Xnotaswapfile')
++ let info = swapinfo('Xnotaswapfile')
++ call assert_equal('Cannot read file', info.error)
++ call delete('Xnotaswapfile')
++
++ call writefile([repeat('x', 10000)], 'Xnotaswapfile')
++ let info = swapinfo('Xnotaswapfile')
++ call assert_equal('magic number mismatch', info.error)
++ call delete('Xnotaswapfile')
++ endfunc
+*** ../vim-8.1.0312/src/version.c 2018-08-21 19:47:44.724053803 +0200
+--- src/version.c 2018-08-21 19:54:18.937247096 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 313,
+ /**/
+
+--
+DENNIS: Look, strange women lying on their backs in ponds handing out
+ swords ... that's no basis for a system of government. Supreme
+ executive power derives from a mandate from the masses, not from some
+ farcical aquatic ceremony.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0314 b/data/vim/patches/8.1.0314
new file mode 100644
index 000000000..69dc90054
--- /dev/null
+++ b/data/vim/patches/8.1.0314
@@ -0,0 +1,158 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0314
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0314 (after 8.1.0313)
+Problem: Build failure without the +eval feature. (Brenton Horne)
+Solution: Add #ifdef. Also add the "dirty" item.
+Files: src/memline.c, runtime/doc/eval.txt, src/testdir/test_swap.vim
+
+
+*** ../vim-8.1.0313/src/memline.c 2018-08-21 20:28:49.888006612 +0200
+--- src/memline.c 2018-08-21 21:07:08.927388911 +0200
+***************
+*** 2041,2046 ****
+--- 2041,2047 ----
+ static int process_still_running;
+ #endif
+
++ #if defined(FEAT_EVAL) || defined(PROTO)
+ /*
+ * Return information found in swapfile "fname" in dictionary "d".
+ * This is used by the swapinfo() function.
+***************
+*** 2055,2065 ****
+ {
+ if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ {
+! if (b0_magic_wrong(&b0))
+! {
+ dict_add_string(d, "error",
+! vim_strsave((char_u *)"magic number mismatch"));
+! }
+ else
+ {
+ /* we have swap information */
+--- 2056,2067 ----
+ {
+ if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ {
+! if (ml_check_b0_id(&b0) == FAIL)
+ dict_add_string(d, "error",
+! vim_strsave((char_u *)"Not a swap file"));
+! else if (b0_magic_wrong(&b0))
+! dict_add_string(d, "error",
+! vim_strsave((char_u *)"Magic number mismatch"));
+ else
+ {
+ /* we have swap information */
+***************
+*** 2070,2078 ****
+
+ dict_add_number(d, "pid", char_to_long(b0.b0_pid));
+ dict_add_number(d, "mtime", char_to_long(b0.b0_mtime));
+! #ifdef CHECK_INODE
+ dict_add_number(d, "inode", char_to_long(b0.b0_ino));
+! #endif
+ }
+ }
+ else
+--- 2072,2081 ----
+
+ dict_add_number(d, "pid", char_to_long(b0.b0_pid));
+ dict_add_number(d, "mtime", char_to_long(b0.b0_mtime));
+! dict_add_number(d, "dirty", b0.b0_dirty ? 1 : 0);
+! # ifdef CHECK_INODE
+ dict_add_number(d, "inode", char_to_long(b0.b0_ino));
+! # endif
+ }
+ }
+ else
+***************
+*** 2083,2088 ****
+--- 2086,2092 ----
+ else
+ dict_add_string(d, "error", vim_strsave((char_u *)"Cannot open file"));
+ }
++ #endif
+
+ /*
+ * Give information about an existing swap file.
+*** ../vim-8.1.0313/runtime/doc/eval.txt 2018-08-21 20:28:49.884006638 +0200
+--- runtime/doc/eval.txt 2018-08-21 21:06:33.431590332 +0200
+***************
+*** 8011,8020 ****
+ file
+ mtime last modification time in seconds
+ inode Optional: INODE number of the file
+ In case of failure an "error" item is added with the reason:
+ Cannot open file: file not found or in accessible
+ Cannot read file: cannot read first block
+! magic number mismatch: info in first block is invalid
+
+ synID({lnum}, {col}, {trans}) *synID()*
+ The result is a Number, which is the syntax ID at the position
+--- 8020,8031 ----
+ file
+ mtime last modification time in seconds
+ inode Optional: INODE number of the file
++ dirty 1 if file was modified, 0 if not
+ In case of failure an "error" item is added with the reason:
+ Cannot open file: file not found or in accessible
+ Cannot read file: cannot read first block
+! Not a swap file: does not contain correct block ID
+! Magic number mismatch: Info in first block is invalid
+
+ synID({lnum}, {col}, {trans}) *synID()*
+ The result is a Number, which is the syntax ID at the position
+*** ../vim-8.1.0313/src/testdir/test_swap.vim 2018-08-21 20:28:49.892006588 +0200
+--- src/testdir/test_swap.vim 2018-08-21 21:07:26.571288544 +0200
+***************
+*** 109,114 ****
+--- 109,115 ----
+ call assert_match('\w', info.user)
+ call assert_equal(hostname(), info.host)
+ call assert_match('Xswapinfo', info.fname)
++ call assert_match(0, info.dirty)
+ call assert_equal(getpid(), info.pid)
+ call assert_match('^\d*$', info.mtime)
+ if has_key(info, 'inode')
+***************
+*** 128,133 ****
+
+ call writefile([repeat('x', 10000)], 'Xnotaswapfile')
+ let info = swapinfo('Xnotaswapfile')
+! call assert_equal('magic number mismatch', info.error)
+ call delete('Xnotaswapfile')
+ endfunc
+--- 129,134 ----
+
+ call writefile([repeat('x', 10000)], 'Xnotaswapfile')
+ let info = swapinfo('Xnotaswapfile')
+! call assert_equal('Not a swap file', info.error)
+ call delete('Xnotaswapfile')
+ endfunc
+*** ../vim-8.1.0313/src/version.c 2018-08-21 20:28:49.892006588 +0200
+--- src/version.c 2018-08-21 21:08:05.951063970 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 314,
+ /**/
+
+--
+DENNIS: You can't expect to wield supreme executive power just 'cause some
+ watery tart threw a sword at you!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0315 b/data/vim/patches/8.1.0315
new file mode 100644
index 000000000..cea600e2b
--- /dev/null
+++ b/data/vim/patches/8.1.0315
@@ -0,0 +1,223 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0315
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0315
+Problem: Helpgrep with language doesn't work properly. (Takuya Fujiwara)
+Solution: Check for the language earlier. (Hirohito Higashi)
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0314/src/quickfix.c 2018-08-18 19:59:48.418322409 +0200
+--- src/quickfix.c 2018-08-21 21:47:55.412902244 +0200
+***************
+*** 5385,5391 ****
+ if (qf_restore_list(qi, save_qfid) == FAIL)
+ goto theend;
+
+! /* Jump to first match. */
+ if (!qf_list_empty(qi, qi->qf_curlist))
+ {
+ if ((flags & VGR_NOJUMP) == 0)
+--- 5385,5391 ----
+ if (qf_restore_list(qi, save_qfid) == FAIL)
+ goto theend;
+
+! // Jump to first match.
+ if (!qf_list_empty(qi, qi->qf_curlist))
+ {
+ if ((flags & VGR_NOJUMP) == 0)
+***************
+*** 6844,6859 ****
+ /*
+ * Search for a pattern in all the help files in the 'runtimepath'
+ * and add the matches to a quickfix list.
+! * 'arg' is the language specifier. If supplied, then only matches in the
+ * specified language are found.
+ */
+ static void
+! hgr_search_in_rtp(qf_info_T *qi, regmatch_T *p_regmatch, char_u *arg)
+ {
+ char_u *p;
+- #ifdef FEAT_MULTI_LANG
+- char_u *lang;
+- #endif
+
+ #ifdef FEAT_MBYTE
+ vimconv_T vc;
+--- 6844,6856 ----
+ /*
+ * Search for a pattern in all the help files in the 'runtimepath'
+ * and add the matches to a quickfix list.
+! * 'lang' is the language specifier. If supplied, then only matches in the
+ * specified language are found.
+ */
+ static void
+! hgr_search_in_rtp(qf_info_T *qi, regmatch_T *p_regmatch, char_u *lang)
+ {
+ char_u *p;
+
+ #ifdef FEAT_MBYTE
+ vimconv_T vc;
+***************
+*** 6865,6874 ****
+ convert_setup(&vc, (char_u *)"utf-8", p_enc);
+ #endif
+
+- #ifdef FEAT_MULTI_LANG
+- /* Check for a specified language */
+- lang = check_help_lang(arg);
+- #endif
+
+ /* Go through all the directories in 'runtimepath' */
+ p = p_rtp;
+--- 6862,6867 ----
+***************
+*** 6903,6908 ****
+--- 6896,6902 ----
+ qf_info_T *qi = &ql_info;
+ int new_qi = FALSE;
+ char_u *au_name = NULL;
++ char_u *lang = NULL;
+
+ switch (eap->cmdidx)
+ {
+***************
+*** 6919,6925 ****
+ #endif
+ }
+
+! /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
+ save_cpo = p_cpo;
+ p_cpo = empty_option;
+
+--- 6913,6919 ----
+ #endif
+ }
+
+! // Make 'cpoptions' empty, the 'l' flag should not be used here.
+ save_cpo = p_cpo;
+ p_cpo = empty_option;
+
+***************
+*** 6930,6943 ****
+ return;
+ }
+
+ regmatch.regprog = vim_regcomp(eap->arg, RE_MAGIC + RE_STRING);
+ regmatch.rm_ic = FALSE;
+ if (regmatch.regprog != NULL)
+ {
+! /* create a new quickfix list */
+ qf_new_list(qi, qf_cmdtitle(*eap->cmdlinep));
+
+! hgr_search_in_rtp(qi, &regmatch, eap->arg);
+
+ vim_regfree(regmatch.regprog);
+
+--- 6924,6941 ----
+ return;
+ }
+
++ #ifdef FEAT_MULTI_LANG
++ // Check for a specified language
++ lang = check_help_lang(eap->arg);
++ #endif
+ regmatch.regprog = vim_regcomp(eap->arg, RE_MAGIC + RE_STRING);
+ regmatch.rm_ic = FALSE;
+ if (regmatch.regprog != NULL)
+ {
+! // create a new quickfix list
+ qf_new_list(qi, qf_cmdtitle(*eap->cmdlinep));
+
+! hgr_search_in_rtp(qi, &regmatch, lang);
+
+ vim_regfree(regmatch.regprog);
+
+***************
+*** 6950,6956 ****
+ if (p_cpo == empty_option)
+ p_cpo = save_cpo;
+ else
+! /* Darn, some plugin changed the value. */
+ free_string_option(save_cpo);
+
+ qf_list_changed(qi, qi->qf_curlist);
+--- 6948,6954 ----
+ if (p_cpo == empty_option)
+ p_cpo = save_cpo;
+ else
+! // Darn, some plugin changed the value.
+ free_string_option(save_cpo);
+
+ qf_list_changed(qi, qi->qf_curlist);
+***************
+*** 6973,6980 ****
+
+ if (eap->cmdidx == CMD_lhelpgrep)
+ {
+! /* If the help window is not opened or if it already points to the
+! * correct location list, then free the new location list. */
+ if (!bt_help(curwin->w_buffer) || curwin->w_llist == qi)
+ {
+ if (new_qi)
+--- 6971,6978 ----
+
+ if (eap->cmdidx == CMD_lhelpgrep)
+ {
+! // If the help window is not opened or if it already points to the
+! // correct location list, then free the new location list.
+ if (!bt_help(curwin->w_buffer) || curwin->w_llist == qi)
+ {
+ if (new_qi)
+*** ../vim-8.1.0314/src/testdir/test_quickfix.vim 2018-08-15 22:29:46.977604162 +0200
+--- src/testdir/test_quickfix.vim 2018-08-21 21:44:49.058013219 +0200
+***************
+*** 3091,3096 ****
+--- 3091,3110 ----
+ call Xqftick_tests('l')
+ endfunc
+
++ " Test helpgrep with lang specifier
++ func Xtest_helpgrep_with_lang_specifier(cchar)
++ call s:setup_commands(a:cchar)
++ Xhelpgrep Vim@en
++ call assert_equal('help', &filetype)
++ call assert_notequal(0, g:Xgetlist({'nr' : '$'}).nr)
++ new | only
++ endfunc
++
++ func Test_helpgrep_with_lang_specifier()
++ call Xtest_helpgrep_with_lang_specifier('c')
++ call Xtest_helpgrep_with_lang_specifier('l')
++ endfunc
++
+ " The following test used to crash Vim.
+ " Open the location list window and close the regular window associated with
+ " the location list. When the garbage collection runs now, it incorrectly
+*** ../vim-8.1.0314/src/version.c 2018-08-21 21:09:02.598739663 +0200
+--- src/version.c 2018-08-21 21:50:24.460013769 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 315,
+ /**/
+
+--
+BLACK KNIGHT: None shall pass.
+ARTHUR: I have no quarrel with you, brave Sir knight, but I must cross
+ this bridge.
+BLACK KNIGHT: Then you shall die.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0316 b/data/vim/patches/8.1.0316
new file mode 100644
index 000000000..67c07b78f
--- /dev/null
+++ b/data/vim/patches/8.1.0316
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0316
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0316
+Problem: swapinfo() test fails on Travis.
+Solution: Handle a long host name. (Ozaki Kiichi, closes #3361)
+ Also make the version check flexible. (James McCoy)
+Files: src/testdir/test_swap.vim
+
+
+*** ../vim-8.1.0315/src/testdir/test_swap.vim 2018-08-21 21:09:02.598739663 +0200
+--- src/testdir/test_swap.vim 2018-08-22 11:25:49.275645594 +0200
+***************
+*** 105,113 ****
+ let fname = trim(execute('swapname'))
+ call assert_match('Xswapinfo', fname)
+ let info = swapinfo(fname)
+! call assert_match('8\.', info.version)
+ call assert_match('\w', info.user)
+! call assert_equal(hostname(), info.host)
+ call assert_match('Xswapinfo', info.fname)
+ call assert_match(0, info.dirty)
+ call assert_equal(getpid(), info.pid)
+--- 105,117 ----
+ let fname = trim(execute('swapname'))
+ call assert_match('Xswapinfo', fname)
+ let info = swapinfo(fname)
+!
+! let ver = printf('VIM %d.%d', v:version / 100, v:version % 100)
+! call assert_equal(ver, info.version)
+!
+ call assert_match('\w', info.user)
+! " host name is truncated to 39 bytes in the swap file
+! call assert_equal(hostname()[:38], info.host)
+ call assert_match('Xswapinfo', info.fname)
+ call assert_match(0, info.dirty)
+ call assert_equal(getpid(), info.pid)
+*** ../vim-8.1.0315/src/version.c 2018-08-21 21:58:09.528674683 +0200
+--- src/version.c 2018-08-22 11:23:44.476323657 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 316,
+ /**/
+
+--
+ARTHUR: What are you going to do. bleed on me?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0317 b/data/vim/patches/8.1.0317
new file mode 100644
index 000000000..ecbe65c5f
--- /dev/null
+++ b/data/vim/patches/8.1.0317
@@ -0,0 +1,59 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0317
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0317
+Problem: Cscope test fails when using shadow directory.
+Solution: Resolve symlink in Vim. (James McCoy, closes #3364)
+Files: src/testdir/test_cscope.vim
+
+
+*** ../vim-8.1.0316/src/testdir/test_cscope.vim 2018-07-15 17:36:28.825442123 +0200
+--- src/testdir/test_cscope.vim 2018-08-22 20:04:27.869744792 +0200
+***************
+*** 259,265 ****
+ " Test ":cs add {dir}" (add the {dir}/cscope.out database)
+ func Test_cscope_add_dir()
+ call mkdir('Xcscopedir', 'p')
+! call system('cscope -bk -fXcscopedir/cscope.out ../memfile_test.c')
+ cs add Xcscopedir
+ let a = execute('cscope show')
+ let lines = split(a, "\n", 1)
+--- 259,270 ----
+ " Test ":cs add {dir}" (add the {dir}/cscope.out database)
+ func Test_cscope_add_dir()
+ call mkdir('Xcscopedir', 'p')
+!
+! " Cscope doesn't handle symlinks, so this needs to be resolved in case a
+! " shadow directory is being used.
+! let memfile = resolve('../memfile_test.c')
+! call system('cscope -bk -fXcscopedir/cscope.out ' . memfile)
+!
+ cs add Xcscopedir
+ let a = execute('cscope show')
+ let lines = split(a, "\n", 1)
+*** ../vim-8.1.0316/src/version.c 2018-08-22 11:27:57.118946770 +0200
+--- src/version.c 2018-08-22 20:05:19.677430359 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 317,
+ /**/
+
+--
+Eye have a spelling checker, it came with my PC;
+It plainly marks four my revue mistakes I cannot sea.
+I've run this poem threw it, I'm sure your please to no,
+It's letter perfect in it's weigh, my checker tolled me sew!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0318 b/data/vim/patches/8.1.0318
new file mode 100644
index 000000000..10ecffb35
--- /dev/null
+++ b/data/vim/patches/8.1.0318
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0318
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0318
+Problem: The getftype() test may fail for char devices if the file
+ disappeared in between the listing and the getftype() call.
+Solution: Ignore empty result. (Ozaki Kiichi, closes #3360)
+Files: src/testdir/test_stat.vim
+
+
+*** ../vim-8.1.0317/src/testdir/test_stat.vim 2018-08-09 22:08:53.017560100 +0200
+--- src/testdir/test_stat.vim 2018-08-22 20:14:37.597732518 +0200
+***************
+*** 141,157 ****
+ endif
+
+ for cdevfile in systemlist('find /dev -type c -maxdepth 2 2>/dev/null')
+! call assert_equal('cdev', getftype(cdevfile))
+ endfor
+
+ for bdevfile in systemlist('find /dev -type b -maxdepth 2 2>/dev/null')
+! call assert_equal('bdev', getftype(bdevfile))
+ endfor
+
+ " The /run/ directory typically contains socket files.
+ " If it does not, test won't fail but will not test socket files.
+ for socketfile in systemlist('find /run -type s -maxdepth 2 2>/dev/null')
+! call assert_equal('socket', getftype(socketfile))
+ endfor
+
+ " TODO: file type 'other' is not tested. How can we test it?
+--- 141,169 ----
+ endif
+
+ for cdevfile in systemlist('find /dev -type c -maxdepth 2 2>/dev/null')
+! let type = getftype(cdevfile)
+! " ignore empty result, can happen if the file disappeared
+! if type != ''
+! call assert_equal('cdev', type)
+! endif
+ endfor
+
+ for bdevfile in systemlist('find /dev -type b -maxdepth 2 2>/dev/null')
+! let type = getftype(bdevfile)
+! " ignore empty result, can happen if the file disappeared
+! if type != ''
+! call assert_equal('bdev', type)
+! endif
+ endfor
+
+ " The /run/ directory typically contains socket files.
+ " If it does not, test won't fail but will not test socket files.
+ for socketfile in systemlist('find /run -type s -maxdepth 2 2>/dev/null')
+! let type = getftype(socketfile)
+! " ignore empty result, can happen if the file disappeared
+! if type != ''
+! call assert_equal('socket', type)
+! endif
+ endfor
+
+ " TODO: file type 'other' is not tested. How can we test it?
+*** ../vim-8.1.0317/src/version.c 2018-08-22 20:06:22.829022787 +0200
+--- src/version.c 2018-08-22 20:11:52.166808526 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 318,
+ /**/
+
+--
+BLACK KNIGHT: The Black Knight always triumphs. Have at you!
+ ARTHUR takes his last leg off. The BLACK KNIGHT's body lands upright.
+BLACK KNIGHT: All right, we'll call it a draw.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0319 b/data/vim/patches/8.1.0319
new file mode 100644
index 000000000..15d08e909
--- /dev/null
+++ b/data/vim/patches/8.1.0319
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0319
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0319
+Problem: bzero() function prototype doesn't work for Android.
+Solution: Add an #ifdef. (Elliott Hughes, closes #3365)
+Files: src/osdef1.h.in
+
+
+*** ../vim-8.1.0318/src/osdef1.h.in 2016-12-01 17:08:35.000000000 +0100
+--- src/osdef1.h.in 2018-08-22 21:54:20.888804176 +0200
+***************
+*** 65,72 ****
+ # endif
+ # endif
+ #endif
+! /* used inside of FD_ZERO macro: */
+ extern void bzero(void *, size_t);
+ #ifdef HAVE_SETSID
+ extern pid_t setsid(void);
+ #endif
+--- 65,74 ----
+ # endif
+ # endif
+ #endif
+! #ifndef __BIONIC__ // Android's libc #defines bzero to memset.
+! // used inside of FD_ZERO macro
+ extern void bzero(void *, size_t);
++ #endif
+ #ifdef HAVE_SETSID
+ extern pid_t setsid(void);
+ #endif
+*** ../vim-8.1.0318/src/version.c 2018-08-22 20:16:11.985125882 +0200
+--- src/version.c 2018-08-22 21:56:23.076075393 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 319,
+ /**/
+
+--
+Westheimer's Discovery:
+ A couple of months in the laboratory can
+ frequently save a couple of hours in the library.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0320 b/data/vim/patches/8.1.0320
new file mode 100644
index 000000000..dc3181114
--- /dev/null
+++ b/data/vim/patches/8.1.0320
@@ -0,0 +1,141 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0320
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0320
+Problem: Too much 'incsearch' highlight for pattern matching everything.
+Solution: Add the skiplen to the command and remove the line range.
+ (Christian Brabandt) Check for empty pattern earlier.
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_09.dump
+
+
+*** ../vim-8.1.0319/src/ex_getln.c 2018-08-18 21:23:00.787474060 +0200
+--- src/ex_getln.c 2018-08-22 22:35:09.131882839 +0200
+***************
+*** 285,290 ****
+--- 285,291 ----
+ char_u *dummy;
+ exarg_T ea;
+ pos_T save_cursor;
++ int use_last_pat;
+
+ *skiplen = 0;
+ *patlen = ccline.cmdlen;
+***************
+*** 361,370 ****
+ delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+
+! if (end == p && *end != delim)
+ return FALSE;
+- // found a non-empty pattern or //
+
+ *skiplen = (int)(p - ccline.cmdbuff);
+ *patlen = (int)(end - p);
+
+--- 362,386 ----
+ delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+
+! use_last_pat = end == p && *end == delim;
+!
+! if (end == p && !use_last_pat)
+ return FALSE;
+
++ // Don't do 'hlsearch' highlighting if the pattern matches everything.
++ if (!use_last_pat)
++ {
++ char c = *end;
++ int empty;
++
++ *end = NUL;
++ empty = empty_pattern(p);
++ *end = c;
++ if (empty)
++ return FALSE;
++ }
++
++ // found a non-empty pattern or //
+ *skiplen = (int)(p - ccline.cmdbuff);
+ *patlen = (int)(end - p);
+
+***************
+*** 556,572 ****
+ else
+ end_pos = curwin->w_cursor; // shutup gcc 4
+
+- // Disable 'hlsearch' highlighting if the pattern matches everything.
+- // Avoids a flash when typing "foo\|".
+- if (!use_last_pat)
+- {
+- next_char = ccline.cmdbuff[skiplen + patlen];
+- ccline.cmdbuff[skiplen + patlen] = NUL;
+- if (empty_pattern(ccline.cmdbuff))
+- set_no_hlsearch(TRUE);
+- ccline.cmdbuff[skiplen + patlen] = next_char;
+- }
+-
+ validate_cursor();
+ // May redraw the status line to show the cursor position.
+ if (p_ru && curwin->w_status_height > 0)
+--- 572,577 ----
+*** ../vim-8.1.0319/src/testdir/test_search.vim 2018-08-18 21:04:57.743864534 +0200
+--- src/testdir/test_search.vim 2018-08-22 22:41:42.689971619 +0200
+***************
+*** 913,918 ****
+--- 913,926 ----
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_08', {})
+ call term_sendkeys(buf, "\<Esc>")
+
++ " Only \v handled as empty pattern, does not move cursor
++ call term_sendkeys(buf, '3G4G')
++ call term_sendkeys(buf, ":nohlsearch\<CR>")
++ call term_sendkeys(buf, ':6,7s/\v')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_09', {})
++ call term_sendkeys(buf, "\<Esc>")
++
+ call StopVimInTerminal(buf)
+ call delete('Xis_subst_script')
+ endfunc
+*** ../vim-8.1.0319/src/testdir/dumps/Test_incsearch_substitute_09.dump 2018-08-22 23:02:14.943209354 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_09.dump 2018-08-22 22:41:52.269923211 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |3| @64
++ |f+8&&|o@1| |4| @64
++ |f+0&&|o@1| |5| @64
++ |f|o@1| |6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |f|o@1| |9| @64
++ |f|o@1| |1|0| @63
++ |:|6|,|7|s|/|\|v> @61
+*** ../vim-8.1.0319/src/version.c 2018-08-22 21:56:53.399893884 +0200
+--- src/version.c 2018-08-22 23:02:25.679145625 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 320,
+ /**/
+
+--
+ A village. Sound of chanting of Latin canon, punctuated by short, sharp
+ cracks. It comes nearer. We see it is a line of MONKS ala SEVENTH SEAL
+ flagellation scene, chanting and banging themselves on the foreheads with
+ wooden boards.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0321 b/data/vim/patches/8.1.0321
new file mode 100644
index 000000000..daf15822d
--- /dev/null
+++ b/data/vim/patches/8.1.0321
@@ -0,0 +1,147 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0321
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0321 (after 8.1.0320)
+Problem: 'incsearch' regression: /\v highlights everything.
+Solution: Put back the empty_pattern() check.
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_search_01.dump,
+ src/testdir/dumps/Test_incsearch_search_02.dump
+
+
+*** ../vim-8.1.0320/src/ex_getln.c 2018-08-22 23:03:19.486827548 +0200
+--- src/ex_getln.c 2018-08-23 20:51:58.597337138 +0200
+***************
+*** 572,577 ****
+--- 572,588 ----
+ else
+ end_pos = curwin->w_cursor; // shutup gcc 4
+
++ // Disable 'hlsearch' highlighting if the pattern matches everything.
++ // Avoids a flash when typing "foo\|".
++ if (!use_last_pat)
++ {
++ next_char = ccline.cmdbuff[skiplen + patlen];
++ ccline.cmdbuff[skiplen + patlen] = NUL;
++ if (empty_pattern(ccline.cmdbuff))
++ set_no_hlsearch(TRUE);
++ ccline.cmdbuff[skiplen + patlen] = next_char;
++ }
++
+ validate_cursor();
+ // May redraw the status line to show the cursor position.
+ if (p_ru && curwin->w_status_height > 0)
+*** ../vim-8.1.0320/src/testdir/test_search.vim 2018-08-22 23:03:19.486827548 +0200
+--- src/testdir/test_search.vim 2018-08-23 20:51:10.061621201 +0200
+***************
+*** 813,818 ****
+--- 813,853 ----
+ call delete('Xscript')
+ endfunc
+
++ func Test_incsearch_search_dump()
++ if !exists('+incsearch')
++ return
++ endif
++ if !CanRunVimInTerminal()
++ return
++ endif
++ call writefile([
++ \ 'set incsearch hlsearch scrolloff=0',
++ \ 'for n in range(1, 8)',
++ \ ' call setline(n, "foo " . n)',
++ \ 'endfor',
++ \ '3',
++ \ ], 'Xis_search_script')
++ let buf = RunVimInTerminal('-S Xis_search_script', {'rows': 9, 'cols': 70})
++ " Give Vim a chance to redraw to get rid of the spaces in line 2 caused by
++ " the 'ambiwidth' check.
++ sleep 100m
++
++ " Need to send one key at a time to force a redraw.
++ call term_sendkeys(buf, '/fo')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_search_01', {})
++ call term_sendkeys(buf, "\<Esc>")
++ sleep 100m
++
++ call term_sendkeys(buf, '/\v')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_search_02', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ call StopVimInTerminal(buf)
++ call delete('Xis_search_script')
++ endfunc
++
+ func Test_incsearch_substitute()
+ if !exists('+incsearch')
+ return
+***************
+*** 926,932 ****
+ endfunc
+
+ " Similar to Test_incsearch_substitute_dump() for :sort
+! func Test_incsearch_ssort_dump()
+ if !exists('+incsearch')
+ return
+ endif
+--- 961,967 ----
+ endfunc
+
+ " Similar to Test_incsearch_substitute_dump() for :sort
+! func Test_incsearch_sort_dump()
+ if !exists('+incsearch')
+ return
+ endif
+*** ../vim-8.1.0320/src/testdir/dumps/Test_incsearch_search_01.dump 2018-08-23 20:53:38.528751838 +0200
+--- src/testdir/dumps/Test_incsearch_search_01.dump 2018-08-23 20:41:15.889079877 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffff4012|o|o+0&#ffffff0| |1| @64
++ |f+0&#ffff4012|o|o+0&#ffffff0| |2| @64
++ |f+0&#ffff4012|o|o+0&#ffffff0| |3| @64
++ |f+1&&|o|o+0&&| |4| @64
++ |f+0&#ffff4012|o|o+0&#ffffff0| |5| @64
++ |f+0&#ffff4012|o|o+0&#ffffff0| |6| @64
++ |f+0&#ffff4012|o|o+0&#ffffff0| |7| @64
++ |f+0&#ffff4012|o|o+0&#ffffff0| |8| @64
++ |/|f|o> @66
+*** ../vim-8.1.0320/src/testdir/dumps/Test_incsearch_search_02.dump 2018-08-23 20:53:38.536751791 +0200
+--- src/testdir/dumps/Test_incsearch_search_02.dump 2018-08-23 20:52:11.605260981 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |1| @64
++ |f|o@1| |2| @64
++ |f|o+1&&|o+0&&| |3| @64
++ |f|o@1| |4| @64
++ |f|o@1| |5| @64
++ |f|o@1| |6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |/|\|v> @66
+*** ../vim-8.1.0320/src/version.c 2018-08-22 23:03:19.486827548 +0200
+--- src/version.c 2018-08-23 20:53:21.256853038 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 321,
+ /**/
+
+--
+This computer is so slow, it takes forever to execute and endless loop!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0322 b/data/vim/patches/8.1.0322
new file mode 100644
index 000000000..3bed5bf49
--- /dev/null
+++ b/data/vim/patches/8.1.0322
@@ -0,0 +1,153 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0322
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0322
+Problem: Test_copy_winopt() does not restore 'hidden'.
+Solution: Restore the option, fix indent. (Ozaki Kiichi, closes #3367)
+Files: src/testdir/test_options.vim
+
+
+*** ../vim-8.1.0321/src/testdir/test_options.vim 2018-08-21 18:50:11.153501902 +0200
+--- src/testdir/test_options.vim 2018-08-23 22:17:40.635048688 +0200
+***************
+*** 350,404 ****
+ endfunc
+
+ func Test_copy_winopt()
+! set hidden
+
+! " Test copy option from current buffer in window
+! split
+! enew
+! setlocal numberwidth=5
+! wincmd w
+! call assert_equal(4,&numberwidth)
+! bnext
+! call assert_equal(5,&numberwidth)
+! bw!
+! call assert_equal(4,&numberwidth)
+!
+! " Test copy value from window that used to be display the buffer
+! split
+! enew
+! setlocal numberwidth=6
+! bnext
+! wincmd w
+! call assert_equal(4,&numberwidth)
+! bnext
+! call assert_equal(6,&numberwidth)
+! bw!
+!
+! " Test that if buffer is current, don't use the stale cached value
+! " from the last time the buffer was displayed.
+! split
+! enew
+! setlocal numberwidth=7
+! bnext
+! bnext
+! setlocal numberwidth=8
+! wincmd w
+! call assert_equal(4,&numberwidth)
+! bnext
+! call assert_equal(8,&numberwidth)
+! bw!
+!
+! " Test value is not copied if window already has seen the buffer
+! enew
+! split
+! setlocal numberwidth=9
+! bnext
+! setlocal numberwidth=10
+! wincmd w
+! call assert_equal(4,&numberwidth)
+! bnext
+! call assert_equal(4,&numberwidth)
+! bw!
+ endfunc
+
+ func Test_shortmess_F()
+--- 350,406 ----
+ endfunc
+
+ func Test_copy_winopt()
+! set hidden
+
+! " Test copy option from current buffer in window
+! split
+! enew
+! setlocal numberwidth=5
+! wincmd w
+! call assert_equal(4,&numberwidth)
+! bnext
+! call assert_equal(5,&numberwidth)
+! bw!
+! call assert_equal(4,&numberwidth)
+!
+! " Test copy value from window that used to be display the buffer
+! split
+! enew
+! setlocal numberwidth=6
+! bnext
+! wincmd w
+! call assert_equal(4,&numberwidth)
+! bnext
+! call assert_equal(6,&numberwidth)
+! bw!
+!
+! " Test that if buffer is current, don't use the stale cached value
+! " from the last time the buffer was displayed.
+! split
+! enew
+! setlocal numberwidth=7
+! bnext
+! bnext
+! setlocal numberwidth=8
+! wincmd w
+! call assert_equal(4,&numberwidth)
+! bnext
+! call assert_equal(8,&numberwidth)
+! bw!
+!
+! " Test value is not copied if window already has seen the buffer
+! enew
+! split
+! setlocal numberwidth=9
+! bnext
+! setlocal numberwidth=10
+! wincmd w
+! call assert_equal(4,&numberwidth)
+! bnext
+! call assert_equal(4,&numberwidth)
+! bw!
+!
+! set hidden&
+ endfunc
+
+ func Test_shortmess_F()
+*** ../vim-8.1.0321/src/version.c 2018-08-23 20:55:23.328137497 +0200
+--- src/version.c 2018-08-23 22:19:27.038296744 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 322,
+ /**/
+
+--
+BEDEVERE: Why do you think she is a witch?
+SECOND VILLAGER: She turned me into a newt.
+BEDEVERE: A newt?
+SECOND VILLAGER: (After looking at himself for some time) I got better.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0323 b/data/vim/patches/8.1.0323
new file mode 100644
index 000000000..fb1e777b2
--- /dev/null
+++ b/data/vim/patches/8.1.0323
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0323
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0323
+Problem: Reverse order of VTP calls only needed the first time.
+Solution: Add a flag to remember the state. (Nobuhiro Takasaki, closes #3366)
+Files: src/os_win32.c
+
+
+*** ../vim-8.1.0322/src/os_win32.c 2018-08-19 14:38:38.979859032 +0200
+--- src/os_win32.c 2018-08-23 22:35:59.155914101 +0200
+***************
+*** 4046,4051 ****
+--- 4046,4052 ----
+ CONSOLE_SCREEN_BUFFER_INFO csbi; /* hold current console buffer info */
+ SMALL_RECT srWindowRect; /* hold the new console size */
+ COORD coordScreen;
++ static int resized = FALSE;
+
+ #ifdef MCH_WRITE_DUMP
+ if (fdDump)
+***************
+*** 4091,4098 ****
+ coordScreen.X = xSize;
+ coordScreen.Y = ySize;
+
+! // In the new console call API in reverse order
+! if (!vtp_working)
+ {
+ ResizeWindow(hConsole, srWindowRect);
+ ResizeConBuf(hConsole, coordScreen);
+--- 4092,4099 ----
+ coordScreen.X = xSize;
+ coordScreen.Y = ySize;
+
+! // In the new console call API, only the first time in reverse order
+! if (!vtp_working || resized)
+ {
+ ResizeWindow(hConsole, srWindowRect);
+ ResizeConBuf(hConsole, coordScreen);
+***************
+*** 4101,4106 ****
+--- 4102,4108 ----
+ {
+ ResizeConBuf(hConsole, coordScreen);
+ ResizeWindow(hConsole, srWindowRect);
++ resized = TRUE;
+ }
+ }
+
+*** ../vim-8.1.0322/src/version.c 2018-08-23 22:20:31.449852029 +0200
+--- src/version.c 2018-08-23 22:37:35.715321239 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 323,
+ /**/
+
+--
+ALL: A witch! A witch!
+WITCH: It's a fair cop.
+ALL: Burn her! Burn her! Let's make her into a ladder.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0324 b/data/vim/patches/8.1.0324
new file mode 100644
index 000000000..2d704bba1
--- /dev/null
+++ b/data/vim/patches/8.1.0324
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0324
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0324
+Problem: Off-by-one error in cmdidx check. (Coverity)
+Solution: Use ">=" instead of ">".
+Files: src/ex_docmd.c
+
+
+*** ../vim-8.1.0323/src/ex_docmd.c 2018-08-21 17:49:50.993308900 +0200
+--- src/ex_docmd.c 2018-08-23 22:43:28.505170168 +0200
+***************
+*** 12554,12560 ****
+ int
+ is_loclist_cmd(int cmdidx)
+ {
+! if (cmdidx < 0 || cmdidx > CMD_SIZE)
+ return FALSE;
+ return cmdnames[cmdidx].cmd_name[0] == 'l';
+ }
+--- 12554,12560 ----
+ int
+ is_loclist_cmd(int cmdidx)
+ {
+! if (cmdidx < 0 || cmdidx >= CMD_SIZE)
+ return FALSE;
+ return cmdnames[cmdidx].cmd_name[0] == 'l';
+ }
+*** ../vim-8.1.0323/src/version.c 2018-08-23 22:38:27.915001621 +0200
+--- src/version.c 2018-08-23 22:51:09.762302937 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 324,
+ /**/
+
+--
+Never under any circumstances take a sleeping pill
+and a laxative on the same night.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0325 b/data/vim/patches/8.1.0325
new file mode 100644
index 000000000..a11a55338
--- /dev/null
+++ b/data/vim/patches/8.1.0325
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0325
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0325
+Problem: Strings in swap file may not be NUL terminated. (Coverity)
+Solution: Limit the length of the used string.
+Files: src/memline.c
+
+
+*** ../vim-8.1.0324/src/memline.c 2018-08-21 21:09:02.598739663 +0200
+--- src/memline.c 2018-08-23 22:59:10.070904878 +0200
+***************
+*** 2065,2074 ****
+ else
+ {
+ /* we have swap information */
+! dict_add_string(d, "version", vim_strsave(b0.b0_version));
+! dict_add_string(d, "user", vim_strsave(b0.b0_uname));
+! dict_add_string(d, "host", vim_strsave(b0.b0_hname));
+! dict_add_string(d, "fname", vim_strsave(b0.b0_fname));
+
+ dict_add_number(d, "pid", char_to_long(b0.b0_pid));
+ dict_add_number(d, "mtime", char_to_long(b0.b0_mtime));
+--- 2065,2077 ----
+ else
+ {
+ /* we have swap information */
+! dict_add_string(d, "version", vim_strnsave(b0.b0_version, 10));
+! dict_add_string(d, "user",
+! vim_strnsave(b0.b0_uname, B0_UNAME_SIZE));
+! dict_add_string(d, "host",
+! vim_strnsave(b0.b0_hname, B0_HNAME_SIZE));
+! dict_add_string(d, "fname",
+! vim_strnsave(b0.b0_fname, B0_FNAME_SIZE_ORG));
+
+ dict_add_number(d, "pid", char_to_long(b0.b0_pid));
+ dict_add_number(d, "mtime", char_to_long(b0.b0_mtime));
+*** ../vim-8.1.0324/src/version.c 2018-08-23 22:51:30.882144095 +0200
+--- src/version.c 2018-08-23 23:00:19.290441550 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 325,
+ /**/
+
+--
+If you had to identify, in one word, the reason why the
+human race has not achieved, and never will achieve, its
+full potential, that word would be "meetings."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0326 b/data/vim/patches/8.1.0326
new file mode 100644
index 000000000..667bfaeaf
--- /dev/null
+++ b/data/vim/patches/8.1.0326
@@ -0,0 +1,101 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0326
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0326
+Problem: Screen dump does not consider NUL and space equal.
+Solution: Use temp variables instead of character from cell.
+Files: src/terminal.c, src/testdir/dumps/Test_syntax_c_01.dump
+
+
+*** ../vim-8.1.0325/src/terminal.c 2018-08-07 16:33:15.255728441 +0200
+--- src/terminal.c 2018-08-24 21:12:24.363925057 +0200
+***************
+*** 3939,3947 ****
+ c = (c == NUL) ? ' ' : c;
+ pc = (pc == NUL) ? ' ' : pc;
+ }
+! if (cell.chars[i] != prev_cell.chars[i])
+ same_chars = FALSE;
+! if (cell.chars[i] == NUL || prev_cell.chars[i] == NUL)
+ break;
+ }
+ same_attr = vtermAttr2hl(cell.attrs)
+--- 3939,3947 ----
+ c = (c == NUL) ? ' ' : c;
+ pc = (pc == NUL) ? ' ' : pc;
+ }
+! if (c != pc)
+ same_chars = FALSE;
+! if (c == NUL || pc == NUL)
+ break;
+ }
+ same_attr = vtermAttr2hl(cell.attrs)
+*** ../vim-8.1.0325/src/testdir/dumps/Test_syntax_c_01.dump 2018-02-25 21:33:46.000000000 +0100
+--- src/testdir/dumps/Test_syntax_c_01.dump 2018-08-24 21:19:49.004842497 +0200
+***************
+*** 1,20 ****
+ >/+0#0000e05#ffffff0|*| |c|o|m@1|e|n|t| |l|i|n|e| |a|t| |t|h|e| |t|o|p| |*|/| +0#0000000&@45
+! | @1|i+0#00e0003&|n|t| +0#0000000&@69
+ |m|a|i|n|(|i+0#00e0003&|n|t| +0#0000000&|a|r|g|c|,| |c+0#00e0003&|h|a|r| +0#0000000&|*@1|a|r|g|v|)|/+0#0000e05&@1| |a|n|o|t|h|e|r| |c|o|m@1|e|n|t| +0#0000000&@29
+ |{| @73
+ |#+0#e000e06&|i|f| |0| +0#0000000&@69
+ | +0#0000e05&@2|i|n|t| @2|n|o|t|_|u|s|e|d|;| +0#0000000&@56
+ |#+0#e000e06&|e|l|s|e| +0#0000000&@69
+! | @2|i+0#00e0003&|n|t| +0#0000000&@2|u|s|e|d|;| @60
+ |#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
+! | @2|p|r|i|n|t|f|(|"+0#e000002&|J|u|s|t| |a|n| |e|x|a|m|p|l|e| |p|i|e|c|e| |o|f| |C| |c|o|d|e|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&|;| @27
+! | @2|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|0+0#e000002&|x|0|f@1|;+0#0000000&| @58
+ |}| @73
+! | @2|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&@60
+ |m|y|F|u|n|c|t|i|o|n|(|c+0#00e0003&|o|n|s|t| +0#0000000&|d+0#00e0003&|o|u|b|l|e| +0#0000000&|c|o|u|n|t|,| |s+0#00e0003&|t|r|u|c|t| +0#0000000&|n|o|t|h|i|n|g|,| |l+0#00e0003&|o|n|g| +0#0000000&|t|h|e|r|e|)| |{| @14
+! | @1|/+0#0000e05&@1| |1+0#e000002&|2|3|:+0#0000e05&| |n|o|t|h|i|n|g| |t|o| |r|e|a|d| |h|e|r|e| +0#0000000&@44
+! | @1|f+0#af5f00255&|o|r| +0#0000000&|(|i+0#00e0003&|n|t| +0#0000000&|i| |=| |0+0#e000002&|;+0#0000000&| |i| |<| |c|o|u|n|t|;| |+@1|i|)| |{| @39
+! | @3|b+0#af5f00255&|r|e|a|k|;+0#0000000&| @64
+! | @1|}| @71
+ |}| @73
+ |"|X|t|e|s|t|.|c|"| |1|9|L|,| |3|6|4|C| @37|1|,|1| @10|A|l@1|
+--- 1,20 ----
+ >/+0#0000e05#ffffff0|*| |c|o|m@1|e|n|t| |l|i|n|e| |a|t| |t|h|e| |t|o|p| |*|/| +0#0000000&@45
+! @2|i+0#00e0003&|n|t| +0#0000000&@69
+ |m|a|i|n|(|i+0#00e0003&|n|t| +0#0000000&|a|r|g|c|,| |c+0#00e0003&|h|a|r| +0#0000000&|*@1|a|r|g|v|)|/+0#0000e05&@1| |a|n|o|t|h|e|r| |c|o|m@1|e|n|t| +0#0000000&@29
+ |{| @73
+ |#+0#e000e06&|i|f| |0| +0#0000000&@69
+ | +0#0000e05&@2|i|n|t| @2|n|o|t|_|u|s|e|d|;| +0#0000000&@56
+ |#+0#e000e06&|e|l|s|e| +0#0000000&@69
+! @3|i+0#00e0003&|n|t| +0#0000000&@2|u|s|e|d|;| @60
+ |#+0#e000e06&|e|n|d|i|f| +0#0000000&@68
+! @3|p|r|i|n|t|f|(|"+0#e000002&|J|u|s|t| |a|n| |e|x|a|m|p|l|e| |p|i|e|c|e| |o|f| |C| |c|o|d|e|\+0#e000e06&|n|"+0#e000002&|)+0#0000000&|;| @27
+! @3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|0+0#e000002&|x|0|f@1|;+0#0000000&| @58
+ |}| @73
+! @3|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&@60
+ |m|y|F|u|n|c|t|i|o|n|(|c+0#00e0003&|o|n|s|t| +0#0000000&|d+0#00e0003&|o|u|b|l|e| +0#0000000&|c|o|u|n|t|,| |s+0#00e0003&|t|r|u|c|t| +0#0000000&|n|o|t|h|i|n|g|,| |l+0#00e0003&|o|n|g| +0#0000000&|t|h|e|r|e|)| |{| @14
+! @2|/+0#0000e05&@1| |1+0#e000002&|2|3|:+0#0000e05&| |n|o|t|h|i|n|g| |t|o| |r|e|a|d| |h|e|r|e| +0#0000000&@44
+! @2|f+0#af5f00255&|o|r| +0#0000000&|(|i+0#00e0003&|n|t| +0#0000000&|i| |=| |0+0#e000002&|;+0#0000000&| |i| |<| |c|o|u|n|t|;| |+@1|i|)| |{| @39
+! @4|b+0#af5f00255&|r|e|a|k|;+0#0000000&| @64
+! @2|}| @71
+ |}| @73
+ |"|X|t|e|s|t|.|c|"| |1|9|L|,| |3|6|4|C| @37|1|,|1| @10|A|l@1|
+*** ../vim-8.1.0325/src/version.c 2018-08-23 23:01:22.898019607 +0200
+--- src/version.c 2018-08-24 21:24:36.840693934 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 326,
+ /**/
+
+--
+Your company is doomed if your primary product is overhead transparencies.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0327 b/data/vim/patches/8.1.0327
new file mode 100644
index 000000000..37cdd65d7
--- /dev/null
+++ b/data/vim/patches/8.1.0327
@@ -0,0 +1,136 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0327
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0327
+Problem: The "g CTRL-G" command isn't tested much.
+Solution: Add more tests. (Dominique Pelle, closes #3369)
+Files: src/testdir/test_normal.vim
+
+
+*** ../vim-8.1.0326/src/testdir/test_normal.vim 2018-05-17 15:43:28.000000000 +0200
+--- src/testdir/test_normal.vim 2018-08-24 21:56:40.272464401 +0200
+***************
+*** 1806,1816 ****
+ call assert_equal(15, col('.'))
+ call assert_equal('l', getreg(0))
+
+- " Test for g Ctrl-G
+- set ff=unix
+- let a=execute(":norm! g\<c-g>")
+- call assert_match('Col 15 of 43; Line 2 of 2; Word 2 of 2; Byte 16 of 45', a)
+-
+ " Test for gI
+ norm! gIfoo
+ call assert_equal(['', 'fooabcdefghijk lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$'))
+--- 1806,1811 ----
+***************
+*** 1829,1834 ****
+--- 1824,1904 ----
+ bw!
+ endfunc
+
++ func! Test_g_ctrl_g()
++ new
++
++ let a = execute(":norm! g\<c-g>")
++ call assert_equal("\n--No lines in buffer--", a)
++
++ call setline(1, ['first line', 'second line'])
++
++ " Test g CTRL-g with dos, mac and unix file type.
++ norm! gojll
++ set ff=dos
++ let a = execute(":norm! g\<c-g>")
++ call assert_equal("\nCol 3 of 11; Line 2 of 2; Word 3 of 4; Byte 15 of 25", a)
++
++ set ff=mac
++ let a = execute(":norm! g\<c-g>")
++ call assert_equal("\nCol 3 of 11; Line 2 of 2; Word 3 of 4; Byte 14 of 23", a)
++
++ set ff=unix
++ let a = execute(":norm! g\<c-g>")
++ call assert_equal("\nCol 3 of 11; Line 2 of 2; Word 3 of 4; Byte 14 of 23", a)
++
++ " Test g CTRL-g in visual mode (v)
++ let a = execute(":norm! gojllvlg\<c-g>")
++ call assert_equal("\nSelected 1 of 2 Lines; 1 of 4 Words; 2 of 23 Bytes", a)
++
++ " Test g CTRL-g in visual mode (CTRL-V) with end col > start col
++ let a = execute(":norm! \<Esc>gojll\<C-V>kllg\<c-g>")
++ call assert_equal("\nSelected 3 Cols; 2 of 2 Lines; 2 of 4 Words; 6 of 23 Bytes", a)
++
++ " Test g_CTRL-g in visual mode (CTRL-V) with end col < start col
++ let a = execute(":norm! \<Esc>goll\<C-V>jhhg\<c-g>")
++ call assert_equal("\nSelected 3 Cols; 2 of 2 Lines; 2 of 4 Words; 6 of 23 Bytes", a)
++
++ " Test g CTRL-g in visual mode (CTRL-V) with end_vcol being MAXCOL
++ let a = execute(":norm! \<Esc>gojll\<C-V>k$g\<c-g>")
++ call assert_equal("\nSelected 2 of 2 Lines; 4 of 4 Words; 17 of 23 Bytes", a)
++
++ " There should be one byte less with noeol
++ set bin noeol
++ let a = execute(":norm! \<Esc>gog\<c-g>")
++ call assert_equal("\nCol 1 of 10; Line 1 of 2; Word 1 of 4; Char 1 of 23; Byte 1 of 22", a)
++ set bin & eol&
++
++ if has('multi_byte')
++ call setline(1, ['Français', '日本語'])
++
++ let a = execute(":norm! \<Esc>gojlg\<c-g>")
++ call assert_equal("\nCol 4-3 of 9-6; Line 2 of 2; Word 2 of 2; Char 11 of 13; Byte 16 of 20", a)
++
++ let a = execute(":norm! \<Esc>gojvlg\<c-g>")
++ call assert_equal("\nSelected 1 of 2 Lines; 1 of 2 Words; 2 of 13 Chars; 6 of 20 Bytes", a)
++
++ let a = execute(":norm! \<Esc>goll\<c-v>jlg\<c-g>")
++ call assert_equal("\nSelected 4 Cols; 2 of 2 Lines; 2 of 2 Words; 6 of 13 Chars; 11 of 20 Bytes", a)
++
++ set fenc=utf8 bomb
++ let a = execute(":norm! \<Esc>gojlg\<c-g>")
++ call assert_equal("\nCol 4-3 of 9-6; Line 2 of 2; Word 2 of 2; Char 11 of 13; Byte 16 of 20(+3 for BOM)", a)
++
++ set fenc=utf16 bomb
++ let a = execute(":norm! g\<c-g>")
++ call assert_equal("\nCol 4-3 of 9-6; Line 2 of 2; Word 2 of 2; Char 11 of 13; Byte 16 of 20(+2 for BOM)", a)
++
++ set fenc=utf32 bomb
++ let a = execute(":norm! g\<c-g>")
++ call assert_equal("\nCol 4-3 of 9-6; Line 2 of 2; Word 2 of 2; Char 11 of 13; Byte 16 of 20(+4 for BOM)", a)
++
++ set fenc& bomb&
++ endif
++
++ set ff&
++ bwipe!
++ endfunc
++
+ fun! Test_normal34_g_cmd3()
+ if !has("multi_byte")
+ return
+*** ../vim-8.1.0326/src/version.c 2018-08-24 21:30:24.818557489 +0200
+--- src/version.c 2018-08-24 21:57:46.239693505 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 327,
+ /**/
+
+--
+For large projects, Team Leaders use sophisticated project management software
+to keep track of who's doing what. The software collects the lies and guesses
+of the project team and organizes them in to instantly outdated charts that
+are too boring to look at closely. This is called "planning".
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0328 b/data/vim/patches/8.1.0328
new file mode 100644
index 000000000..c5e957ffc
--- /dev/null
+++ b/data/vim/patches/8.1.0328
@@ -0,0 +1,167 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0328
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0328
+Problem: inputlist() doesn't work with a timer. (Dominique Pelle)
+Solution: Don't redraw when cmdline_row is zero. (Hirohito Higashi,
+ closes #3239)
+Files: src/misc1.c, src/screen.c
+
+
+*** ../vim-8.1.0327/src/misc1.c 2018-08-21 15:12:10.839801647 +0200
+--- src/misc1.c 2018-08-26 21:18:04.834809910 +0200
+***************
+*** 3747,3764 ****
+ else
+ MSG_PUTS(_("Type number and <Enter> (empty cancels): "));
+
+! /* Set the state such that text can be selected/copied/pasted and we still
+! * get mouse events. */
+ save_cmdline_row = cmdline_row;
+ cmdline_row = 0;
+ save_State = State;
+! State = ASKMORE; /* prevents a screen update when using a timer */
+ #ifdef FEAT_MOUSE
+! /* May show different mouse shape. */
+ setmouse();
+ #endif
+
+-
+ i = get_number(TRUE, mouse_used);
+ if (KeyTyped)
+ {
+--- 3747,3764 ----
+ else
+ MSG_PUTS(_("Type number and <Enter> (empty cancels): "));
+
+! // Set the state such that text can be selected/copied/pasted and we still
+! // get mouse events. redraw_after_callback() will not redraw if cmdline_row
+! // is zero.
+ save_cmdline_row = cmdline_row;
+ cmdline_row = 0;
+ save_State = State;
+! State = CMDLINE;
+ #ifdef FEAT_MOUSE
+! // May show different mouse shape.
+ setmouse();
+ #endif
+
+ i = get_number(TRUE, mouse_used);
+ if (KeyTyped)
+ {
+***************
+*** 3773,3779 ****
+ cmdline_row = save_cmdline_row;
+ State = save_State;
+ #ifdef FEAT_MOUSE
+! /* May need to restore mouse shape. */
+ setmouse();
+ #endif
+
+--- 3773,3779 ----
+ cmdline_row = save_cmdline_row;
+ State = save_State;
+ #ifdef FEAT_MOUSE
+! // May need to restore mouse shape.
+ setmouse();
+ #endif
+
+*** ../vim-8.1.0327/src/screen.c 2018-08-11 16:40:39.068311966 +0200
+--- src/screen.c 2018-08-26 21:19:58.221890668 +0200
+***************
+*** 447,478 ****
+ ++redrawing_for_callback;
+
+ if (State == HITRETURN || State == ASKMORE)
+! ; /* do nothing */
+ else if (State & CMDLINE)
+ {
+! /* Redrawing only works when the screen didn't scroll. Don't clear
+! * wildmenu entries. */
+! if (msg_scrolled == 0
+ #ifdef FEAT_WILDMENU
+! && wild_menu_showing == 0
+ #endif
+! && call_update_screen)
+! update_screen(0);
+! /* Redraw in the same position, so that the user can continue
+! * editing the command. */
+! redrawcmdline_ex(FALSE);
+ }
+ else if (State & (NORMAL | INSERT | TERMINAL))
+ {
+! /* keep the command line if possible */
+ update_screen(VALID_NO_UPDATE);
+ setcursor();
+ }
+ cursor_on();
+ #ifdef FEAT_GUI
+ if (gui.in_use && !gui_mch_is_blink_off())
+! /* Don't update the cursor when it is blinking and off to avoid
+! * flicker. */
+ out_flush_cursor(FALSE, FALSE);
+ else
+ #endif
+--- 447,483 ----
+ ++redrawing_for_callback;
+
+ if (State == HITRETURN || State == ASKMORE)
+! ; // do nothing
+ else if (State & CMDLINE)
+ {
+! // Don't redraw when in prompt_for_number().
+! if (cmdline_row > 0)
+! {
+! // Redrawing only works when the screen didn't scroll. Don't clear
+! // wildmenu entries.
+! if (msg_scrolled == 0
+ #ifdef FEAT_WILDMENU
+! && wild_menu_showing == 0
+ #endif
+! && call_update_screen)
+! update_screen(0);
+!
+! // Redraw in the same position, so that the user can continue
+! // editing the command.
+! redrawcmdline_ex(FALSE);
+! }
+ }
+ else if (State & (NORMAL | INSERT | TERMINAL))
+ {
+! // keep the command line if possible
+ update_screen(VALID_NO_UPDATE);
+ setcursor();
+ }
+ cursor_on();
+ #ifdef FEAT_GUI
+ if (gui.in_use && !gui_mch_is_blink_off())
+! // Don't update the cursor when it is blinking and off to avoid
+! // flicker.
+ out_flush_cursor(FALSE, FALSE);
+ else
+ #endif
+*** ../vim-8.1.0327/src/version.c 2018-08-24 22:07:54.094796047 +0200
+--- src/version.c 2018-08-26 21:16:30.423572538 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 328,
+ /**/
+
+--
+The budget process was invented by an alien race of sadistic beings who
+resemble large cats.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0329 b/data/vim/patches/8.1.0329
new file mode 100644
index 000000000..6173c5701
--- /dev/null
+++ b/data/vim/patches/8.1.0329
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0329
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0329
+Problem: Using inputlist() during startup results in garbage. (Dominique
+ Pelle)
+Solution: Make sure the xterm tracing is stopped when disabling the mouse.
+Files: src/os_unix.c
+
+
+*** ../vim-8.1.0328/src/os_unix.c 2018-08-21 19:47:44.724053803 +0200
+--- src/os_unix.c 2018-08-27 23:22:31.668899230 +0200
+***************
+*** 3664,3669 ****
+--- 3664,3676 ----
+ # endif
+ int xterm_mouse_vers;
+
++ # if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
++ if (!on)
++ // Make sure not tracing mouse movements. Important when a button-down
++ // was received but no release yet.
++ stop_xterm_trace();
++ # endif
++
+ if (on == mouse_ison
+ # ifdef FEAT_BEVAL_TERM
+ && p_bevalterm == bevalterm_ison
+*** ../vim-8.1.0328/src/version.c 2018-08-26 21:23:03.400383307 +0200
+--- src/version.c 2018-08-27 23:21:45.437306003 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 329,
+ /**/
+
+--
+Engineers are always delighted to share wisdom, even in areas in which they
+have no experience whatsoever. Their logic provides them with inherent
+insight into any field of expertise. This can be a problem when dealing with
+the illogical people who believe that knowledge can only be derived through
+experience.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0330 b/data/vim/patches/8.1.0330
new file mode 100644
index 000000000..0c0b9ba2c
--- /dev/null
+++ b/data/vim/patches/8.1.0330
@@ -0,0 +1,219 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0330
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0330
+Problem: The qf_add_entries() function is too long.
+Solution: Split in two parts. (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0329/src/quickfix.c 2018-08-21 21:58:09.524674714 +0200
+--- src/quickfix.c 2018-08-28 22:05:22.995585778 +0200
+***************
+*** 5997,6002 ****
+--- 5997,6079 ----
+ }
+
+ /*
++ * Add a new quickfix entry to list at 'qf_idx' in the stack 'qi' from the
++ * items in the dict 'd'.
++ */
++ static int
++ qf_add_entry_from_dict(
++ qf_info_T *qi,
++ int qf_idx,
++ dict_T *d,
++ int first_entry)
++ {
++ static int did_bufnr_emsg;
++ char_u *filename, *module, *pattern, *text, *type;
++ int bufnum, valid, status, col, vcol, nr;
++ long lnum;
++
++ if (first_entry)
++ did_bufnr_emsg = FALSE;
++
++ filename = get_dict_string(d, (char_u *)"filename", TRUE);
++ module = get_dict_string(d, (char_u *)"module", TRUE);
++ bufnum = (int)get_dict_number(d, (char_u *)"bufnr");
++ lnum = (int)get_dict_number(d, (char_u *)"lnum");
++ col = (int)get_dict_number(d, (char_u *)"col");
++ vcol = (int)get_dict_number(d, (char_u *)"vcol");
++ nr = (int)get_dict_number(d, (char_u *)"nr");
++ type = get_dict_string(d, (char_u *)"type", TRUE);
++ pattern = get_dict_string(d, (char_u *)"pattern", TRUE);
++ text = get_dict_string(d, (char_u *)"text", TRUE);
++ if (text == NULL)
++ text = vim_strsave((char_u *)"");
++
++ valid = TRUE;
++ if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL))
++ valid = FALSE;
++
++ // Mark entries with non-existing buffer number as not valid. Give the
++ // error message only once.
++ if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
++ {
++ if (!did_bufnr_emsg)
++ {
++ did_bufnr_emsg = TRUE;
++ EMSGN(_("E92: Buffer %ld not found"), bufnum);
++ }
++ valid = FALSE;
++ bufnum = 0;
++ }
++
++ // If the 'valid' field is present it overrules the detected value.
++ if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
++ valid = (int)get_dict_number(d, (char_u *)"valid");
++
++ status = qf_add_entry(qi,
++ qf_idx,
++ NULL, // dir
++ filename,
++ module,
++ bufnum,
++ text,
++ lnum,
++ col,
++ vcol, // vis_col
++ pattern, // search pattern
++ nr,
++ type == NULL ? NUL : *type,
++ valid);
++
++ vim_free(filename);
++ vim_free(module);
++ vim_free(pattern);
++ vim_free(text);
++ vim_free(type);
++
++ return status;
++ }
++
++ /*
+ * Add list of entries to quickfix/location list. Each list entry is
+ * a dictionary with item information.
+ */
+***************
+*** 6010,6024 ****
+ {
+ listitem_T *li;
+ dict_T *d;
+- char_u *filename, *module, *pattern, *text, *type;
+- int bufnum;
+- long lnum;
+- int col, nr;
+- int vcol;
+ qfline_T *old_last = NULL;
+- int valid, status;
+ int retval = OK;
+- int did_bufnr_emsg = FALSE;
+
+ if (action == ' ' || qf_idx == qi->qf_listcount)
+ {
+--- 6087,6094 ----
+***************
+*** 6044,6109 ****
+ if (d == NULL)
+ continue;
+
+! filename = get_dict_string(d, (char_u *)"filename", TRUE);
+! module = get_dict_string(d, (char_u *)"module", TRUE);
+! bufnum = (int)get_dict_number(d, (char_u *)"bufnr");
+! lnum = (int)get_dict_number(d, (char_u *)"lnum");
+! col = (int)get_dict_number(d, (char_u *)"col");
+! vcol = (int)get_dict_number(d, (char_u *)"vcol");
+! nr = (int)get_dict_number(d, (char_u *)"nr");
+! type = get_dict_string(d, (char_u *)"type", TRUE);
+! pattern = get_dict_string(d, (char_u *)"pattern", TRUE);
+! text = get_dict_string(d, (char_u *)"text", TRUE);
+! if (text == NULL)
+! text = vim_strsave((char_u *)"");
+!
+! valid = TRUE;
+! if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL))
+! valid = FALSE;
+!
+! /* Mark entries with non-existing buffer number as not valid. Give the
+! * error message only once. */
+! if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
+! {
+! if (!did_bufnr_emsg)
+! {
+! did_bufnr_emsg = TRUE;
+! EMSGN(_("E92: Buffer %ld not found"), bufnum);
+! }
+! valid = FALSE;
+! bufnum = 0;
+! }
+!
+! /* If the 'valid' field is present it overrules the detected value. */
+! if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
+! valid = (int)get_dict_number(d, (char_u *)"valid");
+!
+! status = qf_add_entry(qi,
+! qf_idx,
+! NULL, /* dir */
+! filename,
+! module,
+! bufnum,
+! text,
+! lnum,
+! col,
+! vcol, /* vis_col */
+! pattern, /* search pattern */
+! nr,
+! type == NULL ? NUL : *type,
+! valid);
+!
+! vim_free(filename);
+! vim_free(module);
+! vim_free(pattern);
+! vim_free(text);
+! vim_free(type);
+!
+! if (status == FAIL)
+! {
+! retval = FAIL;
+ break;
+- }
+ }
+
+ if (qi->qf_lists[qf_idx].qf_index == 0)
+--- 6114,6122 ----
+ if (d == NULL)
+ continue;
+
+! retval = qf_add_entry_from_dict(qi, qf_idx, d, li == list->lv_first);
+! if (retval == FAIL)
+ break;
+ }
+
+ if (qi->qf_lists[qf_idx].qf_index == 0)
+*** ../vim-8.1.0329/src/version.c 2018-08-27 23:24:13.064009239 +0200
+--- src/version.c 2018-08-28 22:06:20.577141281 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 330,
+ /**/
+
+--
+An alien life briefly visits earth. Just before departing it leaves a
+message in the dust on the back of a white van. The world is shocked
+and wants to know what it means. After months of studies the worlds
+best linguistic scientists are able to decipher the message: "Wash me!".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0331 b/data/vim/patches/8.1.0331
new file mode 100644
index 000000000..ef2610ccb
--- /dev/null
+++ b/data/vim/patches/8.1.0331
@@ -0,0 +1,126 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0331
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0331
+Problem: Insufficient test coverage for :mkview and :loadview.
+Solution: Add tests. (Dominique Pelle, closes #3385)
+Files: src/testdir/test_mksession.vim
+
+
+*** ../vim-8.1.0330/src/testdir/test_mksession.vim 2018-07-04 22:44:05.273544402 +0200
+--- src/testdir/test_mksession.vim 2018-08-28 22:17:22.286410573 +0200
+***************
+*** 311,315 ****
+--- 311,396 ----
+
+ endif " has('terminal')
+
++ " Test :mkview with a file argument.
++ func Test_mkview_file()
++ " Create a view with line number and a fold.
++ help :mkview
++ set number
++ norm! V}zf
++ let pos = getpos('.')
++ let linefoldclosed1 = foldclosed('.')
++ mkview! Xview
++ set nonumber
++ norm! zrj
++ " We can close the help window, as mkview with a file name should
++ " generate a command to edit the file.
++ helpclose
++
++ source Xview
++ call assert_equal(1, &number)
++ call assert_match('\*:mkview\*$', getline('.'))
++ call assert_equal(pos, getpos('.'))
++ call assert_equal(linefoldclosed1, foldclosed('.'))
++
++ " Creating a view again with the same file name should fail (file
++ " already exists). But with a !, the previous view should be
++ " overwritten without error.
++ help :loadview
++ call assert_fails('mkview Xview', 'E189:')
++ call assert_match('\*:loadview\*$', getline('.'))
++ mkview! Xview
++ call assert_match('\*:loadview\*$', getline('.'))
++
++ call delete('Xview')
++ bwipe
++ endfunc
++
++ " Test :mkview and :loadview with a custom 'viewdir'.
++ func Test_mkview_loadview_with_viewdir()
++ set viewdir=Xviewdir
++
++ help :mkview
++ set number
++ norm! V}zf
++ let pos = getpos('.')
++ let linefoldclosed1 = foldclosed('.')
++ mkview 1
++ set nonumber
++ norm! zrj
++
++ loadview 1
++
++ " The directory Xviewdir/ should have been created and the view
++ " should be stored in that directory.
++ call assert_equal('Xviewdir/' .
++ \ substitute(
++ \ substitute(
++ \ expand('%:p'), '/', '=+', 'g'), ':', '=-', 'g') . '=1.vim',
++ \ glob('Xviewdir/*'))
++ call assert_equal(1, &number)
++ call assert_match('\*:mkview\*$', getline('.'))
++ call assert_equal(pos, getpos('.'))
++ call assert_equal(linefoldclosed1, foldclosed('.'))
++
++ call delete('Xviewdir', 'rf')
++ set viewdir&
++ helpclose
++ endfunc
++
++ func Test_mkview_no_file_name()
++ new
++ " :mkview or :mkview {nr} should fail in a unnamed buffer.
++ call assert_fails('mkview', 'E32:')
++ call assert_fails('mkview 1', 'E32:')
++
++ " :mkview {file} should succeed in a unnamed buffer.
++ mkview Xview
++ help
++ source Xview
++ call assert_equal('', bufname('%'))
++
++ call delete('Xview')
++ %bwipe
++ endfunc
+
+ " vim: shiftwidth=2 sts=2 expandtab
+*** ../vim-8.1.0330/src/version.c 2018-08-28 22:07:38.574120540 +0200
+--- src/version.c 2018-08-28 22:18:55.432595716 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 331,
+ /**/
+
+--
+For society, it's probably a good thing that engineers value function over
+appearance. For example, you wouldn't want engineers to build nuclear power
+plants that only _look_ like they would keep all the radiation inside.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0332 b/data/vim/patches/8.1.0332
new file mode 100644
index 000000000..d3aced072
--- /dev/null
+++ b/data/vim/patches/8.1.0332
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0332
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0332
+Problem: Get Gdk-Critical error on first balloon show.
+Solution: Get screen geometry using the draw area widget. (Davit Samvelyan,
+ closes #3386)
+Files: src/gui_beval.c
+
+
+*** ../vim-8.1.0331/src/gui_beval.c 2018-08-19 22:58:39.775568167 +0200
+--- src/gui_beval.c 2018-08-28 23:08:03.890441876 +0200
+***************
+*** 958,964 ****
+ screen = gtk_widget_get_screen(beval->target);
+ gtk_window_set_screen(GTK_WINDOW(beval->balloonShell), screen);
+ # endif
+! gui_gtk_get_screen_geom_of_win(beval->balloonShell,
+ &screen_x, &screen_y, &screen_w, &screen_h);
+ # if !GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_ensure_style(beval->balloonShell);
+--- 958,964 ----
+ screen = gtk_widget_get_screen(beval->target);
+ gtk_window_set_screen(GTK_WINDOW(beval->balloonShell), screen);
+ # endif
+! gui_gtk_get_screen_geom_of_win(beval->target,
+ &screen_x, &screen_y, &screen_w, &screen_h);
+ # if !GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_ensure_style(beval->balloonShell);
+*** ../vim-8.1.0331/src/version.c 2018-08-28 22:19:27.739993071 +0200
+--- src/version.c 2018-08-28 23:07:48.122609624 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 332,
+ /**/
+
+--
+Engineers understand that their appearance only bothers other people and
+therefore it is not worth optimizing.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0333 b/data/vim/patches/8.1.0333
new file mode 100644
index 000000000..e33c1d4d0
--- /dev/null
+++ b/data/vim/patches/8.1.0333
@@ -0,0 +1,215 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0333
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0333
+Problem: :mkview does not restore cursor properly after "$". (Dominique
+ Pelle)
+Solution: Position the cursor with "normal! $".
+Files: src/ex_docmd.c, src/testdir/test_mksession.vim
+
+
+*** ../vim-8.1.0332/src/ex_docmd.c 2018-08-23 22:51:30.878144125 +0200
+--- src/ex_docmd.c 2018-08-29 20:55:57.947479752 +0200
+***************
+*** 11706,11711 ****
+--- 11706,11723 ----
+ return TRUE;
+ }
+
++ static int
++ put_view_curpos(FILE *fd, win_T *wp, char *spaces)
++ {
++ int r;
++
++ if (wp->w_curswant == MAXCOL)
++ r = fprintf(fd, "%snormal! $", spaces);
++ else
++ r = fprintf(fd, "%snormal! 0%d|", spaces, wp->w_virtcol + 1);
++ return r < 0 || put_eol(fd) == FAIL ? FALSE : OK;
++ }
++
+ /*
+ * Write commands to "fd" to restore the view of a window.
+ * Caller must make sure 'scrolloff' is zero.
+***************
+*** 11897,11913 ****
+ (long)wp->w_virtcol + 1) < 0
+ || put_eol(fd) == FAIL
+ || put_line(fd, "else") == FAIL
+! || fprintf(fd, " normal! 0%d|", wp->w_virtcol + 1) < 0
+! || put_eol(fd) == FAIL
+ || put_line(fd, "endif") == FAIL)
+ return FAIL;
+ }
+! else
+! {
+! if (fprintf(fd, "normal! 0%d|", wp->w_virtcol + 1) < 0
+! || put_eol(fd) == FAIL)
+! return FAIL;
+! }
+ }
+ }
+
+--- 11909,11920 ----
+ (long)wp->w_virtcol + 1) < 0
+ || put_eol(fd) == FAIL
+ || put_line(fd, "else") == FAIL
+! || put_view_curpos(fd, wp, " ") == FAIL
+ || put_line(fd, "endif") == FAIL)
+ return FAIL;
+ }
+! else if (put_view_curpos(fd, wp, "") == FAIL)
+! return FAIL;
+ }
+ }
+
+*** ../vim-8.1.0332/src/testdir/test_mksession.vim 2018-08-28 22:19:27.739993071 +0200
+--- src/testdir/test_mksession.vim 2018-08-29 20:54:27.800200938 +0200
+***************
+*** 22,28 ****
+ \ 'two tabs in one line',
+ \ 'one ä multibyteCharacter',
+ \ 'aä Ä two multiByte characters',
+! \ 'Aäöü three mulTibyte characters'
+ \ ])
+ let tmpfile = 'Xtemp'
+ exec 'w! ' . tmpfile
+--- 22,29 ----
+ \ 'two tabs in one line',
+ \ 'one ä multibyteCharacter',
+ \ 'aä Ä two multiByte characters',
+! \ 'Aäöü three mulTibyte characters',
+! \ 'short line',
+ \ ])
+ let tmpfile = 'Xtemp'
+ exec 'w! ' . tmpfile
+***************
+*** 44,49 ****
+--- 45,52 ----
+ norm! j16|
+ split
+ norm! j16|
++ split
++ norm! j$
+ wincmd l
+
+ set nowrap
+***************
+*** 66,72 ****
+ split
+ call wincol()
+ mksession! Xtest_mks.out
+! let li = filter(readfile('Xtest_mks.out'), 'v:val =~# "\\(^ *normal! 0\\|^ *exe ''normal!\\)"')
+ let expected = [
+ \ 'normal! 016|',
+ \ 'normal! 016|',
+--- 69,75 ----
+ split
+ call wincol()
+ mksession! Xtest_mks.out
+! let li = filter(readfile('Xtest_mks.out'), 'v:val =~# "\\(^ *normal! [0$]\\|^ *exe ''normal!\\)"')
+ let expected = [
+ \ 'normal! 016|',
+ \ 'normal! 016|',
+***************
+*** 76,81 ****
+--- 79,85 ----
+ \ 'normal! 016|',
+ \ 'normal! 016|',
+ \ 'normal! 016|',
++ \ 'normal! $',
+ \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
+ \ " normal! 016|",
+ \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'",
+***************
+*** 317,323 ****
+ help :mkview
+ set number
+ norm! V}zf
+! let pos = getpos('.')
+ let linefoldclosed1 = foldclosed('.')
+ mkview! Xview
+ set nonumber
+--- 321,327 ----
+ help :mkview
+ set number
+ norm! V}zf
+! let pos = getcurpos()
+ let linefoldclosed1 = foldclosed('.')
+ mkview! Xview
+ set nonumber
+***************
+*** 329,335 ****
+ source Xview
+ call assert_equal(1, &number)
+ call assert_match('\*:mkview\*$', getline('.'))
+! call assert_equal(pos, getpos('.'))
+ call assert_equal(linefoldclosed1, foldclosed('.'))
+
+ " Creating a view again with the same file name should fail (file
+--- 333,339 ----
+ source Xview
+ call assert_equal(1, &number)
+ call assert_match('\*:mkview\*$', getline('.'))
+! call assert_equal(pos, getcurpos())
+ call assert_equal(linefoldclosed1, foldclosed('.'))
+
+ " Creating a view again with the same file name should fail (file
+***************
+*** 352,358 ****
+ help :mkview
+ set number
+ norm! V}zf
+! let pos = getpos('.')
+ let linefoldclosed1 = foldclosed('.')
+ mkview 1
+ set nonumber
+--- 356,362 ----
+ help :mkview
+ set number
+ norm! V}zf
+! let pos = getcurpos()
+ let linefoldclosed1 = foldclosed('.')
+ mkview 1
+ set nonumber
+***************
+*** 369,375 ****
+ \ glob('Xviewdir/*'))
+ call assert_equal(1, &number)
+ call assert_match('\*:mkview\*$', getline('.'))
+! call assert_equal(pos, getpos('.'))
+ call assert_equal(linefoldclosed1, foldclosed('.'))
+
+ call delete('Xviewdir', 'rf')
+--- 373,379 ----
+ \ glob('Xviewdir/*'))
+ call assert_equal(1, &number)
+ call assert_match('\*:mkview\*$', getline('.'))
+! call assert_equal(pos, getcurpos())
+ call assert_equal(linefoldclosed1, foldclosed('.'))
+
+ call delete('Xviewdir', 'rf')
+*** ../vim-8.1.0332/src/version.c 2018-08-28 23:09:03.893824422 +0200
+--- src/version.c 2018-08-29 20:57:17.814830811 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 333,
+ /**/
+
+--
+Q: What's a light-year?
+A: One-third less calories than a regular year.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0334 b/data/vim/patches/8.1.0334
new file mode 100644
index 000000000..71c455c4e
--- /dev/null
+++ b/data/vim/patches/8.1.0334
@@ -0,0 +1,118 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0334
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0334
+Problem: 'autowrite' takes effect when buffer is not to be written.
+Solution: Don't write buffers that are not supposed to be written. (Even Q
+ Jones, closes #3391) Add tests for 'autowrite'.
+Files: src/ex_cmds2.c, src/testdir/test_writefile.vim
+
+
+*** ../vim-8.1.0333/src/ex_cmds2.c 2018-07-08 17:18:58.416462371 +0200
+--- src/ex_cmds2.c 2018-08-30 12:54:53.366211602 +0200
+***************
+*** 2041,2047 ****
+ }
+
+ /*
+! * flush all buffers, except the ones that are readonly
+ */
+ void
+ autowrite_all(void)
+--- 2041,2047 ----
+ }
+
+ /*
+! * Flush all buffers, except the ones that are readonly or are never written.
+ */
+ void
+ autowrite_all(void)
+***************
+*** 2051,2057 ****
+ if (!(p_aw || p_awa) || !p_write)
+ return;
+ FOR_ALL_BUFFERS(buf)
+! if (bufIsChanged(buf) && !buf->b_p_ro)
+ {
+ bufref_T bufref;
+
+--- 2051,2057 ----
+ if (!(p_aw || p_awa) || !p_write)
+ return;
+ FOR_ALL_BUFFERS(buf)
+! if (bufIsChanged(buf) && !buf->b_p_ro && !bt_dontwrite(buf))
+ {
+ bufref_T bufref;
+
+*** ../vim-8.1.0333/src/testdir/test_writefile.vim 2018-04-21 20:10:32.000000000 +0200
+--- src/testdir/test_writefile.vim 2018-08-30 13:03:35.924399170 +0200
+***************
+*** 112,114 ****
+--- 112,152 ----
+ throw 'Skipped: /dev/stdout is not writable'
+ endif
+ endfunc
++
++ func Test_writefile_autowrite()
++ set autowrite
++ new
++ next Xa Xb Xc
++ call setline(1, 'aaa')
++ next
++ call assert_equal(['aaa'], readfile('Xa'))
++ call setline(1, 'bbb')
++ call assert_fails('edit XX')
++ call assert_false(filereadable('Xb'))
++
++ set autowriteall
++ edit XX
++ call assert_equal(['bbb'], readfile('Xb'))
++
++ bwipe!
++ call delete('Xa')
++ call delete('Xb')
++ set noautowrite
++ endfunc
++
++ func Test_writefile_autowrite_nowrite()
++ set autowrite
++ new
++ next Xa Xb Xc
++ set buftype=nowrite
++ call setline(1, 'aaa')
++ let buf = bufnr('%')
++ " buffer contents silently lost
++ edit XX
++ call assert_false(filereadable('Xa'))
++ rewind
++ call assert_equal('', getline(1))
++
++ bwipe!
++ set noautowrite
++ endfunc
+*** ../vim-8.1.0333/src/version.c 2018-08-29 21:42:39.016365007 +0200
+--- src/version.c 2018-08-30 12:50:09.857472529 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 334,
+ /**/
+
+--
+I learned the customs and mannerisms of engineers by observing them, much the
+way Jane Goodall learned about the great apes, but without the hassle of
+grooming.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0335 b/data/vim/patches/8.1.0335
new file mode 100644
index 000000000..341e1c7bf
--- /dev/null
+++ b/data/vim/patches/8.1.0335
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0335
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0335
+Problem: mkview test fails on CI.
+Solution: Attempt to force recomputing curswant after folding.
+Files: src/testdir/test_mksession.vim
+
+
+*** ../vim-8.1.0334/src/testdir/test_mksession.vim 2018-08-29 21:42:39.016365007 +0200
+--- src/testdir/test_mksession.vim 2018-08-30 14:03:35.770304367 +0200
+***************
+*** 320,326 ****
+ " Create a view with line number and a fold.
+ help :mkview
+ set number
+! norm! V}zf
+ let pos = getcurpos()
+ let linefoldclosed1 = foldclosed('.')
+ mkview! Xview
+--- 320,326 ----
+ " Create a view with line number and a fold.
+ help :mkview
+ set number
+! norm! V}zf0
+ let pos = getcurpos()
+ let linefoldclosed1 = foldclosed('.')
+ mkview! Xview
+*** ../vim-8.1.0334/src/version.c 2018-08-30 13:07:12.026033864 +0200
+--- src/version.c 2018-08-30 13:54:25.107638207 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 335,
+ /**/
+
+--
+If someone questions your market projections, simply point out that your
+target market is "People who are nuts" and "People who will buy any damn
+thing". Nobody is going to tell you there aren't enough of those people
+to go around.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0336 b/data/vim/patches/8.1.0336
new file mode 100644
index 000000000..47b905758
--- /dev/null
+++ b/data/vim/patches/8.1.0336
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0336
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0336
+Problem: mkview test still fails on CI.
+Solution: Ignore curswant, don't see another solution.
+Files: src/testdir/test_mksession.vim
+
+
+*** ../vim-8.1.0335/src/testdir/test_mksession.vim 2018-08-30 14:04:22.105836549 +0200
+--- src/testdir/test_mksession.vim 2018-08-30 14:14:25.455621441 +0200
+***************
+*** 321,327 ****
+ help :mkview
+ set number
+ norm! V}zf0
+! let pos = getcurpos()
+ let linefoldclosed1 = foldclosed('.')
+ mkview! Xview
+ set nonumber
+--- 321,327 ----
+ help :mkview
+ set number
+ norm! V}zf0
+! let pos = getpos('.')
+ let linefoldclosed1 = foldclosed('.')
+ mkview! Xview
+ set nonumber
+***************
+*** 333,339 ****
+ source Xview
+ call assert_equal(1, &number)
+ call assert_match('\*:mkview\*$', getline('.'))
+! call assert_equal(pos, getcurpos())
+ call assert_equal(linefoldclosed1, foldclosed('.'))
+
+ " Creating a view again with the same file name should fail (file
+--- 333,339 ----
+ source Xview
+ call assert_equal(1, &number)
+ call assert_match('\*:mkview\*$', getline('.'))
+! call assert_equal(pos, getpos('.'))
+ call assert_equal(linefoldclosed1, foldclosed('.'))
+
+ " Creating a view again with the same file name should fail (file
+***************
+*** 356,362 ****
+ help :mkview
+ set number
+ norm! V}zf
+! let pos = getcurpos()
+ let linefoldclosed1 = foldclosed('.')
+ mkview 1
+ set nonumber
+--- 356,362 ----
+ help :mkview
+ set number
+ norm! V}zf
+! let pos = getpos('.')
+ let linefoldclosed1 = foldclosed('.')
+ mkview 1
+ set nonumber
+***************
+*** 373,379 ****
+ \ glob('Xviewdir/*'))
+ call assert_equal(1, &number)
+ call assert_match('\*:mkview\*$', getline('.'))
+! call assert_equal(pos, getcurpos())
+ call assert_equal(linefoldclosed1, foldclosed('.'))
+
+ call delete('Xviewdir', 'rf')
+--- 373,379 ----
+ \ glob('Xviewdir/*'))
+ call assert_equal(1, &number)
+ call assert_match('\*:mkview\*$', getline('.'))
+! call assert_equal(pos, getpos('.'))
+ call assert_equal(linefoldclosed1, foldclosed('.'))
+
+ call delete('Xviewdir', 'rf')
+*** ../vim-8.1.0335/src/version.c 2018-08-30 14:04:22.105836549 +0200
+--- src/version.c 2018-08-30 14:13:10.464402485 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 336,
+ /**/
+
+--
+A consultant is a person who takes your money and annoys your employees while
+tirelessly searching for the best way to extend the consulting contract.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0337 b/data/vim/patches/8.1.0337
new file mode 100644
index 000000000..c816ba6ee
--- /dev/null
+++ b/data/vim/patches/8.1.0337
@@ -0,0 +1,121 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0337
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0337
+Problem: :file fails in quickfix command.
+Solution: Allow :file without argument when curbuf_lock is set. (Jason
+ Franklin)
+Files: src/ex_docmd.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0336/src/ex_docmd.c 2018-08-29 21:42:39.016365007 +0200
+--- src/ex_docmd.c 2018-08-30 15:42:47.756074140 +0200
+***************
+*** 2039,2050 ****
+ errormsg = (char_u *)_(get_text_locked_msg());
+ goto doend;
+ }
+ /* Disallow editing another buffer when "curbuf_lock" is set.
+! * Do allow ":edit" (check for argument later).
+! * Do allow ":checktime" (it's postponed). */
+ if (!(ea.argt & CMDWIN)
+- && ea.cmdidx != CMD_edit
+ && ea.cmdidx != CMD_checktime
+ && !IS_USER_CMDIDX(ea.cmdidx)
+ && curbuf_locked())
+ goto doend;
+--- 2039,2053 ----
+ errormsg = (char_u *)_(get_text_locked_msg());
+ goto doend;
+ }
++
+ /* Disallow editing another buffer when "curbuf_lock" is set.
+! * Do allow ":checktime" (it is postponed).
+! * Do allow ":edit" (check for an argument later).
+! * Do allow ":file" with no arguments (check for an argument later). */
+ if (!(ea.argt & CMDWIN)
+ && ea.cmdidx != CMD_checktime
++ && ea.cmdidx != CMD_edit
++ && ea.cmdidx != CMD_file
+ && !IS_USER_CMDIDX(ea.cmdidx)
+ && curbuf_locked())
+ goto doend;
+***************
+*** 2130,2135 ****
+--- 2133,2142 ----
+ else
+ ea.arg = skipwhite(p);
+
++ // ":file" cannot be run with an argument when "curbuf_lock" is set
++ if (ea.cmdidx == CMD_file && *ea.arg != NUL && curbuf_locked())
++ goto doend;
++
+ /*
+ * Check for "++opt=val" argument.
+ * Must be first, allow ":w ++enc=utf8 !cmd"
+*** ../vim-8.1.0336/src/testdir/test_quickfix.vim 2018-08-21 21:58:09.528674683 +0200
+--- src/testdir/test_quickfix.vim 2018-08-30 15:39:06.810888474 +0200
+***************
+*** 2485,2490 ****
+--- 2485,2519 ----
+ call test_override('starting', 0)
+ endfunc
+
++ " Check that ":file" without an argument is possible even when "curbuf_lock"
++ " is set.
++ func Test_file_from_copen()
++ " Works without argument.
++ augroup QF_Test
++ au!
++ au FileType qf file
++ augroup END
++ copen
++
++ augroup QF_Test
++ au!
++ augroup END
++ cclose
++
++ " Fails with argument.
++ augroup QF_Test
++ au!
++ au FileType qf call assert_fails(':file foo', 'E788')
++ augroup END
++ copen
++ augroup QF_Test
++ au!
++ augroup END
++ cclose
++
++ augroup! QF_Test
++ endfunction
++
+ func Test_resize_from_copen()
+ augroup QF_Test
+ au!
+*** ../vim-8.1.0336/src/version.c 2018-08-30 14:15:56.858667449 +0200
+--- src/version.c 2018-08-30 15:40:27.861841127 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 337,
+ /**/
+
+--
+The process for understanding customers primarily involves sitting around with
+other marketing people and talking about what you would to if you were dumb
+enough to be a customer.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0338 b/data/vim/patches/8.1.0338
new file mode 100644
index 000000000..b8de0abfa
--- /dev/null
+++ b/data/vim/patches/8.1.0338
@@ -0,0 +1,177 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0338
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0338
+Problem: MS-Windows: VTP doesn't work properly with Powershell.
+Solution: Adjust the color index. (Nobuhiro Takasaki, closes #3347)
+Files: src/os_win32.c
+
+
+*** ../vim-8.1.0337/src/os_win32.c 2018-08-23 22:38:27.915001621 +0200
+--- src/os_win32.c 2018-08-30 17:45:38.582500357 +0200
+***************
+*** 213,218 ****
+--- 213,226 ----
+ static guicolor_T save_console_bg_rgb;
+ static guicolor_T save_console_fg_rgb;
+
++ static int g_color_index_bg = 0;
++ static int g_color_index_fg = 7;
++
++ # ifdef FEAT_TERMGUICOLORS
++ static int default_console_color_bg = 0x000000; // black
++ static int default_console_color_fg = 0xc0c0c0; // white
++ # endif
++
+ # ifdef FEAT_TERMGUICOLORS
+ # define USE_VTP (vtp_working && is_term_win32() && (p_tgc || (!p_tgc && t_colors >= 256)))
+ # else
+***************
+*** 2628,2633 ****
+--- 2636,2645 ----
+ if (cterm_normal_bg_color == 0)
+ cterm_normal_bg_color = ((g_attrCurrent >> 4) & 0xf) + 1;
+
++ // Fg and Bg color index nunmber at startup
++ g_color_index_fg = g_attrDefault & 0xf;
++ g_color_index_bg = (g_attrDefault >> 4) & 0xf;
++
+ /* set termcap codes to current text attributes */
+ update_tcap(g_attrCurrent);
+
+***************
+*** 7664,7669 ****
+--- 7676,7684 ----
+ DWORD ver, mode;
+ HMODULE hKerneldll;
+ DYN_CONSOLE_SCREEN_BUFFER_INFOEX csbi;
++ # ifdef FEAT_TERMGUICOLORS
++ COLORREF fg, bg;
++ # endif
+
+ ver = get_build_number();
+ vtp_working = (ver >= VTP_FIRST_SUPPORT_BUILD) ? 1 : 0;
+***************
+*** 7690,7697 ****
+ csbi.cbSize = sizeof(csbi);
+ if (has_csbiex)
+ pGetConsoleScreenBufferInfoEx(g_hConOut, &csbi);
+! save_console_bg_rgb = (guicolor_T)csbi.ColorTable[0];
+! save_console_fg_rgb = (guicolor_T)csbi.ColorTable[7];
+
+ set_console_color_rgb();
+ }
+--- 7705,7721 ----
+ csbi.cbSize = sizeof(csbi);
+ if (has_csbiex)
+ pGetConsoleScreenBufferInfoEx(g_hConOut, &csbi);
+! save_console_bg_rgb = (guicolor_T)csbi.ColorTable[g_color_index_bg];
+! save_console_fg_rgb = (guicolor_T)csbi.ColorTable[g_color_index_fg];
+!
+! # ifdef FEAT_TERMGUICOLORS
+! bg = (COLORREF)csbi.ColorTable[g_color_index_bg];
+! fg = (COLORREF)csbi.ColorTable[g_color_index_fg];
+! bg = (GetRValue(bg) << 16) | (GetGValue(bg) << 8) | GetBValue(bg);
+! fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg);
+! default_console_color_bg = bg;
+! default_console_color_fg = fg;
+! #endif
+
+ set_console_color_rgb();
+ }
+***************
+*** 7788,7801 ****
+ ctermfg = -1;
+ if (id > 0)
+ syn_id2cterm_bg(id, &ctermfg, &ctermbg);
+! fg = ctermfg != -1 ? ctermtoxterm(ctermfg) : 0xc0c0c0; /* white */
+ }
+ if (bg == INVALCOLOR)
+ {
+ ctermbg = -1;
+ if (id > 0)
+ syn_id2cterm_bg(id, &ctermfg, &ctermbg);
+! bg = ctermbg != -1 ? ctermtoxterm(ctermbg) : 0x000000; /* black */
+ }
+ fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg);
+ bg = (GetRValue(bg) << 16) | (GetGValue(bg) << 8) | GetBValue(bg);
+--- 7812,7827 ----
+ ctermfg = -1;
+ if (id > 0)
+ syn_id2cterm_bg(id, &ctermfg, &ctermbg);
+! fg = ctermfg != -1 ? ctermtoxterm(ctermfg) : default_console_color_fg;
+! cterm_normal_fg_gui_color = fg;
+ }
+ if (bg == INVALCOLOR)
+ {
+ ctermbg = -1;
+ if (id > 0)
+ syn_id2cterm_bg(id, &ctermfg, &ctermbg);
+! bg = ctermbg != -1 ? ctermtoxterm(ctermbg) : default_console_color_bg;
+! cterm_normal_bg_gui_color = bg;
+ }
+ fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg);
+ bg = (GetRValue(bg) << 16) | (GetGValue(bg) << 8) | GetBValue(bg);
+***************
+*** 7807,7814 ****
+ csbi.cbSize = sizeof(csbi);
+ csbi.srWindow.Right += 1;
+ csbi.srWindow.Bottom += 1;
+! csbi.ColorTable[0] = (COLORREF)bg;
+! csbi.ColorTable[7] = (COLORREF)fg;
+ if (has_csbiex)
+ pSetConsoleScreenBufferInfoEx(g_hConOut, &csbi);
+ # endif
+--- 7833,7840 ----
+ csbi.cbSize = sizeof(csbi);
+ csbi.srWindow.Right += 1;
+ csbi.srWindow.Bottom += 1;
+! csbi.ColorTable[g_color_index_bg] = (COLORREF)bg;
+! csbi.ColorTable[g_color_index_fg] = (COLORREF)fg;
+ if (has_csbiex)
+ pSetConsoleScreenBufferInfoEx(g_hConOut, &csbi);
+ # endif
+***************
+*** 7827,7834 ****
+ csbi.cbSize = sizeof(csbi);
+ csbi.srWindow.Right += 1;
+ csbi.srWindow.Bottom += 1;
+! csbi.ColorTable[0] = (COLORREF)save_console_bg_rgb;
+! csbi.ColorTable[7] = (COLORREF)save_console_fg_rgb;
+ if (has_csbiex)
+ pSetConsoleScreenBufferInfoEx(g_hConOut, &csbi);
+ # endif
+--- 7853,7860 ----
+ csbi.cbSize = sizeof(csbi);
+ csbi.srWindow.Right += 1;
+ csbi.srWindow.Bottom += 1;
+! csbi.ColorTable[g_color_index_bg] = (COLORREF)save_console_bg_rgb;
+! csbi.ColorTable[g_color_index_fg] = (COLORREF)save_console_fg_rgb;
+ if (has_csbiex)
+ pSetConsoleScreenBufferInfoEx(g_hConOut, &csbi);
+ # endif
+*** ../vim-8.1.0337/src/version.c 2018-08-30 15:58:23.248944510 +0200
+--- src/version.c 2018-08-30 17:45:48.250391370 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 338,
+ /**/
+
+--
+The average life of an organization chart is six months. You can safely
+ignore any order from your boss that would take six months to complete.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0339 b/data/vim/patches/8.1.0339
new file mode 100644
index 000000000..26ab0843f
--- /dev/null
+++ b/data/vim/patches/8.1.0339
@@ -0,0 +1,102 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0339
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0339
+Problem: Wrong highlight when 'incsearch' set and cancelling :s.
+Solution: Reset search line range. (Hirohito Higashi, Masamichi Abe)
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_10.dump
+
+
+*** ../vim-8.1.0338/src/ex_getln.c 2018-08-23 20:55:23.328137497 +0200
+--- src/ex_getln.c 2018-08-31 22:01:54.482219518 +0200
+***************
+*** 436,447 ****
+ }
+ restore_viewstate(&is_state->old_viewstate);
+ highlight_match = FALSE;
+ validate_cursor(); /* needed for TAB */
+ if (call_update_screen)
+ update_screen(SOME_VALID);
+ else
+ redraw_all_later(SOME_VALID);
+- p_magic = is_state->magic_save;
+ }
+ }
+
+--- 436,453 ----
+ }
+ restore_viewstate(&is_state->old_viewstate);
+ highlight_match = FALSE;
++
++ // by default search all lines
++ search_first_line = 0;
++ search_last_line = MAXLNUM;
++
++ p_magic = is_state->magic_save;
++
+ validate_cursor(); /* needed for TAB */
+ if (call_update_screen)
+ update_screen(SOME_VALID);
+ else
+ redraw_all_later(SOME_VALID);
+ }
+ }
+
+*** ../vim-8.1.0338/src/testdir/test_search.vim 2018-08-23 20:55:23.328137497 +0200
+--- src/testdir/test_search.vim 2018-08-31 22:06:07.867638671 +0200
+***************
+*** 956,961 ****
+--- 956,970 ----
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_09', {})
+ call term_sendkeys(buf, "\<Esc>")
+
++ call term_sendkeys(buf, ":set nocursorline\<CR>")
++
++ " All matches are highlighted for 'hlsearch' after the incsearch canceled
++ call term_sendkeys(buf, "1G*")
++ call term_sendkeys(buf, ":2,5s/foo")
++ sleep 100m
++ call term_sendkeys(buf, "\<Esc>")
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_10', {})
++
+ call StopVimInTerminal(buf)
+ call delete('Xis_subst_script')
+ endfunc
+*** ../vim-8.1.0338/src/testdir/dumps/Test_incsearch_substitute_10.dump 2018-08-31 22:08:36.694113050 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_10.dump 2018-08-31 22:01:54.482219518 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffff4012|o@1| +0&#ffffff0|1| @64
++ >f+0&#ffff4012|o@1| +0&#ffffff0|2| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|3| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|4| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|5| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|6| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|7| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|8| @64
++ @52|2|,|1| @10|T|o|p|
+*** ../vim-8.1.0338/src/version.c 2018-08-30 17:47:01.949560920 +0200
+--- src/version.c 2018-08-31 22:08:45.178025914 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 339,
+ /**/
+
+--
+A)bort, R)etry, D)o it right this time
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0340 b/data/vim/patches/8.1.0340
new file mode 100644
index 000000000..c63fda431
--- /dev/null
+++ b/data/vim/patches/8.1.0340
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0340
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0340
+Problem: No test for :spellinfo.
+Solution: Add a test. (Dominique Pelle, closes #3394)
+Files: src/testdir/test_spell.vim
+
+
+*** ../vim-8.1.0339/src/testdir/test_spell.vim 2018-07-20 23:36:21.171368602 +0200
+--- src/testdir/test_spell.vim 2018-08-31 22:25:03.695993566 +0200
+***************
+*** 126,131 ****
+--- 126,160 ----
+ bwipe!
+ endfunc
+
++ func Test_spellinfo()
++ new
++
++ set enc=latin1 spell spelllang=en
++ call assert_match("^\nfile: .*/runtime/spell/en.latin1.spl\n$", execute('spellinfo'))
++
++ set enc=cp1250 spell spelllang=en
++ call assert_match("^\nfile: .*/runtime/spell/en.ascii.spl\n$", execute('spellinfo'))
++
++ if has('multi_byte')
++ set enc=utf-8 spell spelllang=en
++ call assert_match("^\nfile: .*/runtime/spell/en.utf-8.spl\n$", execute('spellinfo'))
++ endif
++
++ set enc=latin1 spell spelllang=en_us,en_nz
++ call assert_match("^\n" .
++ \ "file: .*/runtime/spell/en.latin1.spl\n" .
++ \ "file: .*/runtime/spell/en.latin1.spl\n$", execute('spellinfo'))
++
++ set spell spelllang=
++ call assert_fails('spellinfo', 'E756:')
++
++ set nospell spelllang=en
++ call assert_fails('spellinfo', 'E756:')
++
++ set enc& spell& spelllang&
++ bwipe
++ endfunc
++
+ func Test_zz_basic()
+ call LoadAffAndDic(g:test_data_aff1, g:test_data_dic1)
+ call RunGoodBad("wrong OK puts. Test the end",
+*** ../vim-8.1.0339/src/version.c 2018-08-31 22:09:31.561549259 +0200
+--- src/version.c 2018-08-31 22:24:49.216141831 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 340,
+ /**/
+
+--
+A)bort, R)etry, P)lease don't bother me again
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0341 b/data/vim/patches/8.1.0341
new file mode 100644
index 000000000..fed330424
--- /dev/null
+++ b/data/vim/patches/8.1.0341
@@ -0,0 +1,312 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0341
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0341
+Problem: :argadd in empty buffer changes the buffer name. (Pavol Juhas)
+Solution: Don't re-use the current buffer when not going to edit the file.
+ (closes #3397) Do re-use the current buffer for :next.
+Files: src/ex_cmds2.c, src/testdir/test_arglist.vim,
+ src/testdir/test_command_count.vim
+
+
+*** ../vim-8.1.0340/src/ex_cmds2.c 2018-08-30 13:07:12.026033864 +0200
+--- src/ex_cmds2.c 2018-08-31 23:00:26.400150737 +0200
+***************
+*** 2445,2454 ****
+ */
+
+ static char_u *do_one_arg(char_u *str);
+! static int do_arglist(char_u *str, int what, int after);
+ static void alist_check_arg_idx(void);
+ static int editing_arg_idx(win_T *win);
+! static int alist_add_list(int count, char_u **files, int after);
+ #define AL_SET 1
+ #define AL_ADD 2
+ #define AL_DEL 3
+--- 2445,2454 ----
+ */
+
+ static char_u *do_one_arg(char_u *str);
+! static int do_arglist(char_u *str, int what, int after, int will_edit);
+ static void alist_check_arg_idx(void);
+ static int editing_arg_idx(win_T *win);
+! static void alist_add_list(int count, char_u **files, int after, int will_edit);
+ #define AL_SET 1
+ #define AL_ADD 2
+ #define AL_DEL 3
+***************
+*** 2553,2559 ****
+ void
+ set_arglist(char_u *str)
+ {
+! do_arglist(str, AL_SET, 0);
+ }
+
+ /*
+--- 2553,2559 ----
+ void
+ set_arglist(char_u *str)
+ {
+! do_arglist(str, AL_SET, 0, FALSE);
+ }
+
+ /*
+***************
+*** 2567,2573 ****
+ do_arglist(
+ char_u *str,
+ int what,
+! int after UNUSED) /* 0 means before first one */
+ {
+ garray_T new_ga;
+ int exp_count;
+--- 2567,2574 ----
+ do_arglist(
+ char_u *str,
+ int what,
+! int after UNUSED, // 0 means before first one
+! int will_edit) // will edit added argument
+ {
+ garray_T new_ga;
+ int exp_count;
+***************
+*** 2652,2662 ****
+
+ if (what == AL_ADD)
+ {
+! (void)alist_add_list(exp_count, exp_files, after);
+ vim_free(exp_files);
+ }
+ else /* what == AL_SET */
+! alist_set(ALIST(curwin), exp_count, exp_files, FALSE, NULL, 0);
+ }
+
+ alist_check_arg_idx();
+--- 2653,2663 ----
+
+ if (what == AL_ADD)
+ {
+! alist_add_list(exp_count, exp_files, after, will_edit);
+ vim_free(exp_files);
+ }
+ else /* what == AL_SET */
+! alist_set(ALIST(curwin), exp_count, exp_files, will_edit, NULL, 0);
+ }
+
+ alist_check_arg_idx();
+***************
+*** 2932,2938 ****
+ {
+ if (*eap->arg != NUL) /* redefine file list */
+ {
+! if (do_arglist(eap->arg, AL_SET, 0) == FAIL)
+ return;
+ i = 0;
+ }
+--- 2933,2939 ----
+ {
+ if (*eap->arg != NUL) /* redefine file list */
+ {
+! if (do_arglist(eap->arg, AL_SET, 0, TRUE) == FAIL)
+ return;
+ i = 0;
+ }
+***************
+*** 2952,2958 ****
+ // Whether curbuf will be reused, curbuf->b_ffname will be set.
+ int curbuf_is_reusable = curbuf_reusable();
+
+! if (do_arglist(eap->arg, AL_ADD, i) == FAIL)
+ return;
+ #ifdef FEAT_TITLE
+ maketitle();
+--- 2953,2959 ----
+ // Whether curbuf will be reused, curbuf->b_ffname will be set.
+ int curbuf_is_reusable = curbuf_reusable();
+
+! if (do_arglist(eap->arg, AL_ADD, i, TRUE) == FAIL)
+ return;
+ #ifdef FEAT_TITLE
+ maketitle();
+***************
+*** 2974,2980 ****
+ ex_argadd(exarg_T *eap)
+ {
+ do_arglist(eap->arg, AL_ADD,
+! eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1);
+ #ifdef FEAT_TITLE
+ maketitle();
+ #endif
+--- 2975,2982 ----
+ ex_argadd(exarg_T *eap)
+ {
+ do_arglist(eap->arg, AL_ADD,
+! eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1,
+! FALSE);
+ #ifdef FEAT_TITLE
+ maketitle();
+ #endif
+***************
+*** 3024,3030 ****
+ else if (*eap->arg == NUL)
+ EMSG(_(e_argreq));
+ else
+! do_arglist(eap->arg, AL_DEL, 0);
+ #ifdef FEAT_TITLE
+ maketitle();
+ #endif
+--- 3026,3032 ----
+ else if (*eap->arg == NUL)
+ EMSG(_(e_argreq));
+ else
+! do_arglist(eap->arg, AL_DEL, 0, FALSE);
+ #ifdef FEAT_TITLE
+ maketitle();
+ #endif
+***************
+*** 3269,3281 ****
+ * Add files[count] to the arglist of the current window after arg "after".
+ * The file names in files[count] must have been allocated and are taken over.
+ * Files[] itself is not taken over.
+- * Returns index of first added argument. Returns -1 when failed (out of mem).
+ */
+! static int
+ alist_add_list(
+ int count,
+ char_u **files,
+! int after) /* where to add: 0 = before first one */
+ {
+ int i;
+ int old_argcount = ARGCOUNT;
+--- 3271,3283 ----
+ * Add files[count] to the arglist of the current window after arg "after".
+ * The file names in files[count] must have been allocated and are taken over.
+ * Files[] itself is not taken over.
+ */
+! static void
+ alist_add_list(
+ int count,
+ char_u **files,
+! int after, // where to add: 0 = before first one
+! int will_edit) // will edit adding argument
+ {
+ int i;
+ int old_argcount = ARGCOUNT;
+***************
+*** 3291,3309 ****
+ (ARGCOUNT - after) * sizeof(aentry_T));
+ for (i = 0; i < count; ++i)
+ {
+ ARGLIST[after + i].ae_fname = files[i];
+! ARGLIST[after + i].ae_fnum =
+! buflist_add(files[i], BLN_LISTED | BLN_CURBUF);
+ }
+ ALIST(curwin)->al_ga.ga_len += count;
+ if (old_argcount > 0 && curwin->w_arg_idx >= after)
+ curwin->w_arg_idx += count;
+! return after;
+ }
+
+ for (i = 0; i < count; ++i)
+ vim_free(files[i]);
+- return -1;
+ }
+
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+--- 3293,3311 ----
+ (ARGCOUNT - after) * sizeof(aentry_T));
+ for (i = 0; i < count; ++i)
+ {
++ int flags = BLN_LISTED | (will_edit ? BLN_CURBUF : 0);
++
+ ARGLIST[after + i].ae_fname = files[i];
+! ARGLIST[after + i].ae_fnum = buflist_add(files[i], flags);
+ }
+ ALIST(curwin)->al_ga.ga_len += count;
+ if (old_argcount > 0 && curwin->w_arg_idx >= after)
+ curwin->w_arg_idx += count;
+! return;
+ }
+
+ for (i = 0; i < count; ++i)
+ vim_free(files[i]);
+ }
+
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+*** ../vim-8.1.0340/src/testdir/test_arglist.vim 2018-04-24 21:54:38.000000000 +0200
+--- src/testdir/test_arglist.vim 2018-08-31 22:42:29.649222626 +0200
+***************
+*** 80,85 ****
+--- 80,103 ----
+ call assert_equal(0, len(argv()))
+ endfunc
+
++ func Test_argadd_empty_curbuf()
++ new
++ let curbuf = bufnr('%')
++ call writefile(['test', 'Xargadd'], 'Xargadd')
++ " must not re-use the current buffer.
++ argadd Xargadd
++ call assert_equal(curbuf, bufnr('%'))
++ call assert_equal('', bufname('%'))
++ call assert_equal(1, line('$'))
++ rew
++ call assert_notequal(curbuf, bufnr('%'))
++ call assert_equal('Xargadd', bufname('%'))
++ call assert_equal(2, line('$'))
++
++ %argd
++ bwipe!
++ endfunc
++
+ func Init_abc()
+ args a b c
+ next
+*** ../vim-8.1.0340/src/testdir/test_command_count.vim 2018-04-24 21:47:12.000000000 +0200
+--- src/testdir/test_command_count.vim 2018-08-31 23:01:54.967036898 +0200
+***************
+*** 158,164 ****
+ func Test_command_count_4()
+ %argd
+ let bufnr = bufnr('$')
+! arga aa bb cc dd ee ff
+ 3argu
+ let args = []
+ .,$-argdo call add(args, expand('%'))
+--- 158,166 ----
+ func Test_command_count_4()
+ %argd
+ let bufnr = bufnr('$')
+! next aa bb cc dd ee ff
+! call assert_equal(bufnr, bufnr('%'))
+!
+ 3argu
+ let args = []
+ .,$-argdo call add(args, expand('%'))
+*** ../vim-8.1.0340/src/version.c 2018-08-31 22:26:49.210912007 +0200
+--- src/version.c 2018-08-31 22:44:55.551715626 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 341,
+ /**/
+
+--
+login: yes
+password: I don't know, please tell me
+password is incorrect
+login: yes
+password: incorrect
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0342 b/data/vim/patches/8.1.0342
new file mode 100644
index 000000000..3ea1ac3f5
--- /dev/null
+++ b/data/vim/patches/8.1.0342
@@ -0,0 +1,239 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0342
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0342
+Problem: Crash when a callback deletes a window that is being used.
+Solution: Do not unload a buffer that is being displayed while redrawing the
+ screen. Also avoid invoking callbacks while redrawing.
+ (closes #2107)
+Files: src/buffer.c, src/misc2.c
+
+
+*** ../vim-8.1.0341/src/buffer.c 2018-08-21 18:50:11.153501902 +0200
+--- src/buffer.c 2018-09-01 15:16:57.753412395 +0200
+***************
+*** 412,418 ****
+ hash_remove(&buf_hashtab, hi);
+ }
+
+! static char *e_buflocked = N_("E937: Attempt to delete a buffer that is in use");
+
+ /*
+ * Close the link to a buffer.
+--- 412,439 ----
+ hash_remove(&buf_hashtab, hi);
+ }
+
+! /*
+! * Return TRUE when buffer "buf" can be unloaded.
+! * Give an error message and return FALSE when the buffer is locked or the
+! * screen is being redrawn and the buffer is in a window.
+! */
+! static int
+! can_unload_buffer(buf_T *buf)
+! {
+! int can_unload = !buf->b_locked;
+!
+! if (can_unload && updating_screen)
+! {
+! win_T *wp;
+!
+! FOR_ALL_WINDOWS(wp)
+! if (wp->w_buffer == buf)
+! can_unload = FALSE;
+! }
+! if (!can_unload)
+! EMSG(_("E937: Attempt to delete a buffer that is in use"));
+! return can_unload;
+! }
+
+ /*
+ * Close the link to a buffer.
+***************
+*** 474,484 ****
+ {
+ if (wipe_buf || unload_buf)
+ {
+! if (buf->b_locked)
+! {
+! EMSG(_(e_buflocked));
+ return;
+! }
+ /* Wiping out or unloading a terminal buffer kills the job. */
+ free_terminal(buf);
+ }
+--- 495,503 ----
+ {
+ if (wipe_buf || unload_buf)
+ {
+! if (!can_unload_buffer(buf))
+ return;
+!
+ /* Wiping out or unloading a terminal buffer kills the job. */
+ free_terminal(buf);
+ }
+***************
+*** 501,511 ****
+
+ /* Disallow deleting the buffer when it is locked (already being closed or
+ * halfway a command that relies on it). Unloading is allowed. */
+! if (buf->b_locked > 0 && (del_buf || wipe_buf))
+! {
+! EMSG(_(e_buflocked));
+ return;
+- }
+
+ /* check no autocommands closed the window */
+ if (win != NULL && win_valid_any_tab(win))
+--- 520,527 ----
+
+ /* Disallow deleting the buffer when it is locked (already being closed or
+ * halfway a command that relies on it). Unloading is allowed. */
+! if ((del_buf || wipe_buf) && !can_unload_buffer(buf))
+ return;
+
+ /* check no autocommands closed the window */
+ if (win != NULL && win_valid_any_tab(win))
+***************
+*** 1196,1203 ****
+ return errormsg;
+ }
+
+- static int empty_curbuf(int close_others, int forceit, int action);
+-
+ /*
+ * Make the current buffer empty.
+ * Used when it is wiped out and it's the last buffer.
+--- 1212,1217 ----
+***************
+*** 1238,1243 ****
+--- 1252,1258 ----
+ need_fileinfo = FALSE;
+ return retval;
+ }
++
+ /*
+ * Implementation of the commands for the buffer list.
+ *
+***************
+*** 1359,1369 ****
+ int forward;
+ bufref_T bufref;
+
+! if (buf->b_locked)
+! {
+! EMSG(_(e_buflocked));
+ return FAIL;
+- }
+
+ set_bufref(&bufref, buf);
+
+--- 1374,1381 ----
+ int forward;
+ bufref_T bufref;
+
+! if (!can_unload_buffer(buf))
+ return FAIL;
+
+ set_bufref(&bufref, buf);
+
+*** ../vim-8.1.0341/src/misc2.c 2018-07-29 16:09:14.636945607 +0200
+--- src/misc2.c 2018-09-01 15:07:10.019535433 +0200
+***************
+*** 6366,6398 ****
+ {
+ win_T *old_curwin = curwin;
+
+! /* For Win32 mch_breakcheck() does not check for input, do it here. */
+ # if defined(WIN32) && defined(FEAT_JOB_CHANNEL)
+ channel_handle_events(FALSE);
+ # endif
+
+ # ifdef FEAT_NETBEANS_INTG
+! /* Process the queued netbeans messages. */
+ netbeans_parse_messages();
+ # endif
+ # ifdef FEAT_JOB_CHANNEL
+! /* Write any buffer lines still to be written. */
+ channel_write_any_lines();
+
+! /* Process the messages queued on channels. */
+ channel_parse_messages();
+ # endif
+ # if defined(FEAT_CLIENTSERVER) && defined(FEAT_X11)
+! /* Process the queued clientserver messages. */
+ server_parse_messages();
+ # endif
+ # ifdef FEAT_JOB_CHANNEL
+! /* Check if any jobs have ended. */
+ job_check_ended();
+ # endif
+
+! /* If the current window changed we need to bail out of the waiting loop.
+! * E.g. when a job exit callback closes the terminal window. */
+ if (curwin != old_curwin)
+ ins_char_typebuf(K_IGNORE);
+ }
+--- 6366,6403 ----
+ {
+ win_T *old_curwin = curwin;
+
+! // Do not handle messages while redrawing, because it may cause buffers to
+! // change or be wiped while they are being redrawn.
+! if (updating_screen)
+! return;
+!
+! // For Win32 mch_breakcheck() does not check for input, do it here.
+ # if defined(WIN32) && defined(FEAT_JOB_CHANNEL)
+ channel_handle_events(FALSE);
+ # endif
+
+ # ifdef FEAT_NETBEANS_INTG
+! // Process the queued netbeans messages.
+ netbeans_parse_messages();
+ # endif
+ # ifdef FEAT_JOB_CHANNEL
+! // Write any buffer lines still to be written.
+ channel_write_any_lines();
+
+! // Process the messages queued on channels.
+ channel_parse_messages();
+ # endif
+ # if defined(FEAT_CLIENTSERVER) && defined(FEAT_X11)
+! // Process the queued clientserver messages.
+ server_parse_messages();
+ # endif
+ # ifdef FEAT_JOB_CHANNEL
+! // Check if any jobs have ended.
+ job_check_ended();
+ # endif
+
+! // If the current window changed we need to bail out of the waiting loop.
+! // E.g. when a job exit callback closes the terminal window.
+ if (curwin != old_curwin)
+ ins_char_typebuf(K_IGNORE);
+ }
+*** ../vim-8.1.0341/src/version.c 2018-08-31 23:06:18.735841246 +0200
+--- src/version.c 2018-09-01 15:02:16.242604587 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 342,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+5. You find yourself brainstorming for new subjects to search.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0343 b/data/vim/patches/8.1.0343
new file mode 100644
index 000000000..db9bbf2d7
--- /dev/null
+++ b/data/vim/patches/8.1.0343
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0343
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0343
+Problem: 'shellslash' is not used for getcwd() with local directory.
+ (Daniel Hahler)
+Solution: Call slash_adjust() later. (closes #3399)
+Files: src/evalfunc.c
+
+
+*** ../vim-8.1.0342/src/evalfunc.c 2018-08-21 20:28:49.888006612 +0200
+--- src/evalfunc.c 2018-09-02 14:23:21.103760517 +0200
+***************
+*** 4955,4965 ****
+ vim_free(cwd);
+ }
+ }
+ #ifdef BACKSLASH_IN_FILENAME
+! if (rettv->vval.v_string != NULL)
+! slash_adjust(rettv->vval.v_string);
+ #endif
+- }
+ }
+
+ /*
+--- 4955,4965 ----
+ vim_free(cwd);
+ }
+ }
++ }
+ #ifdef BACKSLASH_IN_FILENAME
+! if (rettv->vval.v_string != NULL)
+! slash_adjust(rettv->vval.v_string);
+ #endif
+ }
+
+ /*
+*** ../vim-8.1.0342/src/version.c 2018-09-01 15:29:58.754429402 +0200
+--- src/version.c 2018-09-02 14:24:17.503225353 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 343,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+7. You finally do take that vacation, but only after buying a USB modem
+ and a laptop.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0344 b/data/vim/patches/8.1.0344
new file mode 100644
index 000000000..a41f532af
--- /dev/null
+++ b/data/vim/patches/8.1.0344
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0344
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0344
+Problem: 'hlsearch' highlighting has a gap after /$.
+Solution: Remove suspicious code. (Ricky Zhou, closes #3400)
+Files: src/screen.c, src/testdir/test_hlsearch.vim
+
+
+*** ../vim-8.1.0343/src/screen.c 2018-08-26 21:23:03.400383307 +0200
+--- src/screen.c 2018-09-02 15:01:39.828954706 +0200
+***************
+*** 5496,5510 ****
+ if (c == NUL)
+ {
+ #ifdef FEAT_SYN_HL
+- if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol
+- && lnum == wp->w_cursor.lnum)
+- {
+- /* highlight last char after line */
+- --col;
+- --off;
+- --vcol;
+- }
+-
+ /* Highlight 'cursorcolumn' & 'colorcolumn' past end of the line. */
+ if (wp->w_p_wrap)
+ v = wp->w_skipcol;
+--- 5496,5501 ----
+*** ../vim-8.1.0343/src/testdir/test_hlsearch.vim 2017-06-17 20:28:35.000000000 +0200
+--- src/testdir/test_hlsearch.vim 2018-09-02 15:00:49.269446213 +0200
+***************
+*** 4,10 ****
+ new
+ call setline(1, repeat(['aaa'], 10))
+ set hlsearch nolazyredraw
+- let r=[]
+ " redraw is needed to make hlsearch highlight the matches
+ exe "normal! /aaa\<CR>" | redraw
+ let r1 = screenattr(1, 1)
+--- 4,9 ----
+***************
+*** 51,53 ****
+--- 50,65 ----
+ set nohlsearch redrawtime&
+ bwipe!
+ endfunc
++
++ func Test_hlsearch_eol_highlight()
++ new
++ call append(1, repeat([''], 9))
++ set hlsearch nolazyredraw
++ exe "normal! /$\<CR>" | redraw
++ let attr = screenattr(1, 1)
++ for row in range(2, 10)
++ call assert_equal(attr, screenattr(row, 1), 'in line ' . row)
++ endfor
++ set nohlsearch
++ bwipe!
++ endfunc
+*** ../vim-8.1.0343/src/version.c 2018-09-02 14:25:02.330801508 +0200
+--- src/version.c 2018-09-02 14:58:34.506763279 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 344,
+ /**/
+
+--
+"How is your new girlfriend?"
+"90-60-90 man!"
+"What, pale purple?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0345 b/data/vim/patches/8.1.0345
new file mode 100644
index 000000000..70cae5c1d
--- /dev/null
+++ b/data/vim/patches/8.1.0345
@@ -0,0 +1,286 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0345
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0345
+Problem: Cannot get the window id associated with the location list.
+Solution: Add the "filewinid" argument to getloclist(). (Yegappan
+ Lakshmanan, closes #3202)
+Files: runtime/doc/eval.txt, src/quickfix.c,
+ src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0344/runtime/doc/eval.txt 2018-08-21 21:09:02.598739663 +0200
+--- runtime/doc/eval.txt 2018-09-02 15:13:00.638419373 +0200
+***************
+*** 4721,4726 ****
+--- 4729,4738 ----
+ If the optional {what} dictionary argument is supplied, then
+ returns the items listed in {what} as a dictionary. Refer to
+ |getqflist()| for the supported items in {what}.
++ If {what} contains 'filewinid', then returns the id of the
++ window used to display files from the location list. This
++ field is applicable only when called from a location list
++ window.
+
+ getmatches() *getmatches()*
+ Returns a |List| with all matches previously defined by
+*** ../vim-8.1.0344/src/quickfix.c 2018-08-28 22:07:38.574120540 +0200
+--- src/quickfix.c 2018-09-02 15:13:00.638419373 +0200
+***************
+*** 5670,5676 ****
+ QF_GETLIST_IDX = 0x40,
+ QF_GETLIST_SIZE = 0x80,
+ QF_GETLIST_TICK = 0x100,
+! QF_GETLIST_ALL = 0x1FF,
+ };
+
+ /*
+--- 5670,5677 ----
+ QF_GETLIST_IDX = 0x40,
+ QF_GETLIST_SIZE = 0x80,
+ QF_GETLIST_TICK = 0x100,
+! QF_GETLIST_FILEWINID = 0x200,
+! QF_GETLIST_ALL = 0x3FF,
+ };
+
+ /*
+***************
+*** 5744,5755 ****
+ * Convert the keys in 'what' to quickfix list property flags.
+ */
+ static int
+! qf_getprop_keys2flags(dict_T *what)
+ {
+ int flags = QF_GETLIST_NONE;
+
+ if (dict_find(what, (char_u *)"all", -1) != NULL)
+ flags |= QF_GETLIST_ALL;
+
+ if (dict_find(what, (char_u *)"title", -1) != NULL)
+ flags |= QF_GETLIST_TITLE;
+--- 5745,5761 ----
+ * Convert the keys in 'what' to quickfix list property flags.
+ */
+ static int
+! qf_getprop_keys2flags(dict_T *what, int loclist)
+ {
+ int flags = QF_GETLIST_NONE;
+
+ if (dict_find(what, (char_u *)"all", -1) != NULL)
++ {
+ flags |= QF_GETLIST_ALL;
++ if (!loclist)
++ // File window ID is applicable only to location list windows
++ flags &= ~ QF_GETLIST_FILEWINID;
++ }
+
+ if (dict_find(what, (char_u *)"title", -1) != NULL)
+ flags |= QF_GETLIST_TITLE;
+***************
+*** 5778,5783 ****
+--- 5784,5792 ----
+ if (dict_find(what, (char_u *)"changedtick", -1) != NULL)
+ flags |= QF_GETLIST_TICK;
+
++ if (loclist && dict_find(what, (char_u *)"filewinid", -1) != NULL)
++ flags |= QF_GETLIST_FILEWINID;
++
+ return flags;
+ }
+
+***************
+*** 5870,5875 ****
+--- 5879,5886 ----
+ status = dict_add_number(retdict, "size", 0);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+ status = dict_add_number(retdict, "changedtick", 0);
++ if ((status == OK) && (qi != &ql_info) && (flags & QF_GETLIST_FILEWINID))
++ status = dict_add_number(retdict, "filewinid", 0);
+
+ return status;
+ }
+***************
+*** 5884,5889 ****
+--- 5895,5920 ----
+ }
+
+ /*
++ * Returns the identifier of the window used to display files from a location
++ * list. If there is no associated window, then returns 0. Useful only when
++ * called from a location list window.
++ */
++ static int
++ qf_getprop_filewinid(win_T *wp, qf_info_T *qi, dict_T *retdict)
++ {
++ int winid = 0;
++
++ if (wp != NULL && IS_LL_WINDOW(wp))
++ {
++ win_T *ll_wp = qf_find_win_with_loclist(qi);
++ if (ll_wp != NULL)
++ winid = ll_wp->w_id;
++ }
++
++ return dict_add_number(retdict, "filewinid", winid);
++ }
++
++ /*
+ * Return the quickfix list items/entries as 'items' in retdict
+ */
+ static int
+***************
+*** 5963,5969 ****
+ if (wp != NULL)
+ qi = GET_LOC_LIST(wp);
+
+! flags = qf_getprop_keys2flags(what);
+
+ if (qi != NULL && qi->qf_listcount != 0)
+ qf_idx = qf_getprop_qfidx(qi, what);
+--- 5994,6000 ----
+ if (wp != NULL)
+ qi = GET_LOC_LIST(wp);
+
+! flags = qf_getprop_keys2flags(what, (wp != NULL));
+
+ if (qi != NULL && qi->qf_listcount != 0)
+ qf_idx = qf_getprop_qfidx(qi, what);
+***************
+*** 5992,5997 ****
+--- 6023,6030 ----
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+ status = dict_add_number(retdict, "changedtick",
+ qi->qf_lists[qf_idx].qf_changedtick);
++ if ((status == OK) && (wp != NULL) && (flags & QF_GETLIST_FILEWINID))
++ status = qf_getprop_filewinid(wp, qi, retdict);
+
+ return status;
+ }
+*** ../vim-8.1.0344/src/testdir/test_quickfix.vim 2018-08-30 15:58:23.244944556 +0200
+--- src/testdir/test_quickfix.vim 2018-09-02 15:13:00.638419373 +0200
+***************
+*** 1973,1978 ****
+--- 1973,1990 ----
+ call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]})
+ call assert_equal('TestTitle', g:Xgetlist({'title' : 1}).title)
+
++ " Test for getting id of window associated with a location list window
++ if a:cchar == 'l'
++ only
++ call assert_equal(0, g:Xgetlist({'all' : 1}).filewinid)
++ let wid = win_getid()
++ Xopen
++ call assert_equal(wid, g:Xgetlist({'filewinid' : 1}).filewinid)
++ wincmd w
++ call assert_equal(0, g:Xgetlist({'filewinid' : 1}).filewinid)
++ only
++ endif
++
+ " The following used to crash Vim with address sanitizer
+ call g:Xsetlist([], 'f')
+ call g:Xsetlist([], 'a', {'items' : [{'filename':'F1', 'lnum':10}]})
+***************
+*** 3000,3006 ****
+ call assert_equal('', g:Xgetlist({'title' : 0}).title)
+ call assert_equal(0, g:Xgetlist({'winid' : 0}).winid)
+ call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick)
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick': 0}, g:Xgetlist({'all' : 0}))
+
+ " Quickfix window with empty stack
+ silent! Xopen
+--- 3012,3028 ----
+ call assert_equal('', g:Xgetlist({'title' : 0}).title)
+ call assert_equal(0, g:Xgetlist({'winid' : 0}).winid)
+ call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick)
+! if a:cchar == 'c'
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0,
+! \ 'items' : [], 'nr' : 0, 'size' : 0,
+! \ 'title' : '', 'winid' : 0, 'changedtick': 0},
+! \ g:Xgetlist({'all' : 0}))
+! else
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0,
+! \ 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '',
+! \ 'winid' : 0, 'changedtick': 0, 'filewinid' : 0},
+! \ g:Xgetlist({'all' : 0}))
+! endif
+
+ " Quickfix window with empty stack
+ silent! Xopen
+***************
+*** 3033,3039 ****
+ call assert_equal('', g:Xgetlist({'id' : qfid, 'title' : 0}).title)
+ call assert_equal(0, g:Xgetlist({'id' : qfid, 'winid' : 0}).winid)
+ call assert_equal(0, g:Xgetlist({'id' : qfid, 'changedtick' : 0}).changedtick)
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0}))
+
+ " Non-existing quickfix list number
+ call assert_equal('', g:Xgetlist({'nr' : 5, 'context' : 0}).context)
+--- 3055,3070 ----
+ call assert_equal('', g:Xgetlist({'id' : qfid, 'title' : 0}).title)
+ call assert_equal(0, g:Xgetlist({'id' : qfid, 'winid' : 0}).winid)
+ call assert_equal(0, g:Xgetlist({'id' : qfid, 'changedtick' : 0}).changedtick)
+! if a:cchar == 'c'
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [],
+! \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0,
+! \ 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0}))
+! else
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [],
+! \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0,
+! \ 'changedtick' : 0, 'filewinid' : 0},
+! \ g:Xgetlist({'id' : qfid, 'all' : 0}))
+! endif
+
+ " Non-existing quickfix list number
+ call assert_equal('', g:Xgetlist({'nr' : 5, 'context' : 0}).context)
+***************
+*** 3045,3051 ****
+ call assert_equal('', g:Xgetlist({'nr' : 5, 'title' : 0}).title)
+ call assert_equal(0, g:Xgetlist({'nr' : 5, 'winid' : 0}).winid)
+ call assert_equal(0, g:Xgetlist({'nr' : 5, 'changedtick' : 0}).changedtick)
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick' : 0}, g:Xgetlist({'nr' : 5, 'all' : 0}))
+ endfunc
+
+ func Test_getqflist()
+--- 3076,3091 ----
+ call assert_equal('', g:Xgetlist({'nr' : 5, 'title' : 0}).title)
+ call assert_equal(0, g:Xgetlist({'nr' : 5, 'winid' : 0}).winid)
+ call assert_equal(0, g:Xgetlist({'nr' : 5, 'changedtick' : 0}).changedtick)
+! if a:cchar == 'c'
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [],
+! \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0,
+! \ 'changedtick' : 0}, g:Xgetlist({'nr' : 5, 'all' : 0}))
+! else
+! call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [],
+! \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0,
+! \ 'changedtick' : 0, 'filewinid' : 0},
+! \ g:Xgetlist({'nr' : 5, 'all' : 0}))
+! endif
+ endfunc
+
+ func Test_getqflist()
+*** ../vim-8.1.0344/src/version.c 2018-09-02 15:07:21.977655529 +0200
+--- src/version.c 2018-09-02 15:14:57.573305935 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 345,
+ /**/
+
+--
+The Feynman problem solving Algorithm:
+ 1) Write down the problem
+ 2) Think real hard
+ 3) Write down the answer
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0346 b/data/vim/patches/8.1.0346
new file mode 100644
index 000000000..49215092c
--- /dev/null
+++ b/data/vim/patches/8.1.0346
@@ -0,0 +1,1530 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0346
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0346
+Problem: Building with Aap is outdated and unused.
+Solution: Remove the Aap build files.
+Files: Filelist, src/main.aap, src/testdir/main.aap, src/config.aap.in,
+ runtime/macros/maze/main.aap
+
+
+*** ../vim-8.1.0345/Filelist 2018-07-07 17:21:49.120140280 +0200
+--- Filelist 2018-09-02 15:24:34.374543708 +0200
+***************
+*** 1,5 ****
+ # List of distributed Vim files.
+! # Used by Makefile and upload.aap.
+
+ # source files for all source archives
+ SRC_ALL = \
+--- 1,5 ----
+ # List of distributed Vim files.
+! # Used by Makefile.
+
+ # source files for all source archives
+ SRC_ALL = \
+***************
+*** 101,109 ****
+ src/window.c \
+ src/tee/tee.c \
+ src/xxd/xxd.c \
+- src/main.aap \
+ src/testdir/gen_opt_test.vim \
+- src/testdir/main.aap \
+ src/testdir/README.txt \
+ src/testdir/Make_all.mak \
+ src/testdir/*.in \
+--- 101,107 ----
+***************
+*** 291,297 ****
+ src/INSTALLx.txt \
+ src/Makefile \
+ src/auto/configure \
+- src/config.aap.in \
+ src/config.h.in \
+ src/config.mk.dist \
+ src/config.mk.in \
+--- 289,294 ----
+***************
+*** 612,618 ****
+ runtime/macros/matchit.vim \
+ runtime/macros/maze/README.txt \
+ runtime/macros/maze/[mM]akefile \
+- runtime/macros/maze/main.aap \
+ runtime/macros/maze/maze.c \
+ runtime/macros/maze/maze_5.78 \
+ runtime/macros/maze/maze_mac \
+--- 609,614 ----
+***************
+*** 640,645 ****
+--- 636,642 ----
+ runtime/tutor/tutor \
+ runtime/tutor/tutor.vim \
+ runtime/vimrc_example.vim \
++ runtime/pack/dist/opt/cfilter/plugin/cfilter.vim \
+ runtime/pack/dist/opt/dvorak/plugin/dvorak.vim \
+ runtime/pack/dist/opt/dvorak/dvorak/enable.vim \
+ runtime/pack/dist/opt/dvorak/dvorak/disable.vim \
+*** ../vim-8.1.0345/src/main.aap 2016-11-12 20:10:45.000000000 +0100
+--- src/main.aap 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,1228 ****
+- # A-A-P recipe for building Vim
+- #
+- # There are no user choices in here!
+- # Put configure arguments in the file config.arg.
+- # Later there will be a config.txt file that contains examples and
+- # explanations.
+- #
+- # Optional arguments:
+- # PREFIX=dir Overrules the install directory.
+- # Can be specified when installing only.
+- # Example: aap install PREFIX=$HOME
+- #
+- @if os.name != "posix":
+- :error Sorry, this recipe only works for Unix-like systems.
+-
+- # Skip the configure stuff when "link.sh" is executing this recipe recursively
+- # to build pathdef.c or not building something and auto/config.aap does exist.
+- @if ((_no.TARGETARG != "pathdef" and has_build_target())
+- @ or not os.path.exists("auto/config.aap")):
+-
+- #
+- # A U T O C O N F
+- #
+-
+- # Run autoconf when configure.ac has been changed since it was last run.
+- # This is skipped when the signatures in "mysign" are up-to-date. When
+- # there is no autoconf program skip this (the signature is often the only
+- # thing that's outdated)
+- auto/configure {signfile = mysign} : configure.ac
+- @if not program_path("autoconf"):
+- :print Can't find autoconf, using existing configure script.
+- @else:
+- # Move configure aside, autoconf would overwrite it
+- :move {exist} configure configure.save
+- :sys autoconf
+- :cat configure | :eval re.sub('\\./config.log', 'auto/config.log', stdin) | :eval re.sub('>config.log', '>auto/config.log', stdin) >! auto/configure
+- :chmod 755 auto/configure
+- :move configure.save configure
+- :del {force} auto/config.cache auto/config.status
+-
+- # Change the configure script to produce config.aap instead of config.mk.
+- auto/configure.aap : auto/configure
+- :print Adjusting auto/configure for A-A-P.
+- :cat auto/configure | :eval re.sub("config.mk", "config.aap", stdin)
+- >! auto/configure.aap
+- :chmod 755 auto/configure.aap
+-
+- # The configure script uses the directory where it's located, use a link.
+- configure.aap: {buildcheck=}
+- :symlink {f} auto/configure.aap configure.aap
+-
+- # Dependency: run configure.aap to update config.h and config.aap in the
+- # "auto" directory.
+- # NOTE: we can only build for one architecture, because -MM doesn't work
+- # when building for both.
+- config {virtual} auto/config.h auto/config.aap :
+- auto/configure.aap configure.aap
+- config.arg config.h.in config.aap.in
+- # Use "uname -a" to detect the architecture of the system.
+- @ok, uname = redir_system('uname -a', 0)
+- @if string.find(uname, "i386") >= 0:
+- @ arch = "i386"
+- @else:
+- @ arch = "ppc"
+- :print Building for $arch system
+- config_args = `file2string("config.arg")`
+- :sys CONFIG_STATUS=auto/config.status
+- ./configure.aap $config_args
+- --with-mac-arch=$arch
+- --cache-file=auto/config.cache
+-
+- # Configure arguments: create an empty "config.arg" file when it's missing
+- config.arg:
+- :touch {exist} config.arg
+-
+- # "auto/config.aap" contains a lot of settings, such as the name of the
+- # executable "Target".
+- # First update it, forcefully if the "reconfig" target was used.
+- @if _no.TARGETARG != "comment" and _no.TARGETARG != "make":
+- @if "reconfig" in var2list(_no.TARGETARG):
+- :del {force} auto/config.cache auto/config.status
+- :update {force} auto/config.aap
+- @else:
+- :update auto/config.aap
+-
+- # Include the recipe that autoconf generated.
+- :include auto/config.aap
+-
+- # Unfortunately "-M" doesn't work when building for two architectures. Switch
+- # back to PPC only.
+- @if string.find(_no.CPPFLAGS, "-arch i386 -arch ppc") >= 0:
+- CPPFLAGS = `string.replace(_no.CPPFLAGS, "-arch i386 -arch ppc", "-arch ppc")`
+-
+- # A "PREFIX=dir" argument overrules the value of $prefix
+- # But don't use the default "/usr/local".
+- @if _no.get("PREFIX") and _no.get("PREFIX") != '/usr/local':
+- prefix = $PREFIX
+-
+- # Don't want "~/" in prefix.
+- prefix = `os.path.expanduser(prefix)`
+-
+- # For Mac.
+- APPDIR = $(VIMNAME).app
+-
+- ### Names of the programs and targets
+- VIMTARGET = $VIMNAME$EXESUF
+- EXTARGET = $EXNAME$LNKSUF
+- VIEWTARGET = $VIEWNAME$LNKSUF
+- GVIMNAME = g$VIMNAME
+- GVIMTARGET = $GVIMNAME$LNKSUF
+- GVIEWNAME = g$VIEWNAME
+- GVIEWTARGET = $GVIEWNAME$LNKSUF
+- RVIMNAME = r$VIMNAME
+- RVIMTARGET = $RVIMNAME$LNKSUF
+- RVIEWNAME = r$VIEWNAME
+- RVIEWTARGET = $RVIEWNAME$LNKSUF
+- RGVIMNAME = r$GVIMNAME
+- RGVIMTARGET = $RGVIMNAME$LNKSUF
+- RGVIEWNAME = r$GVIEWNAME
+- RGVIEWTARGET = $RGVIEWNAME$LNKSUF
+- VIMDIFFNAME = $(VIMNAME)diff
+- GVIMDIFFNAME = g$VIMDIFFNAME
+- VIMDIFFTARGET = $VIMDIFFNAME$LNKSUF
+- GVIMDIFFTARGET = $GVIMDIFFNAME$LNKSUF
+- EVIMNAME = e$VIMNAME
+- EVIMTARGET = $EVIMNAME$LNKSUF
+- EVIEWNAME = e$VIEWNAME
+- EVIEWTARGET = $EVIEWNAME$LNKSUF
+-
+- #
+- # G U I variant
+- #
+- # The GUI is selected by configure, a lot of other things depend on it.
+- #
+- :variant GUI
+- GTK
+- GUI_SRC = gui.c gui_gtk.c gui_gtk_x11.c pty.c gui_beval.c
+- gui_gtk_f.c
+- GUI_OBJ =
+- GUI_DEFS = -DFEAT_GUI_GTK $NARROW_PROTO
+- GUI_IPATH = $GUI_INC_LOC
+- GUI_LIBS_DIR = $GUI_LIB_LOC
+- GUI_LIBS1 =
+- GUI_LIBS2 = $GTK_LIBNAME
+- GUI_INSTALL = install_normal
+- GUI_TARGETS = installglinks
+- GUI_MAN_TARGETS = yes
+- GUI_TESTTARGET = gui
+- GUI_BUNDLE =
+- GUI_TESTARG =
+- MOTIF
+- GUI_SRC = gui.c gui_motif.c gui_x11.c pty.c gui_beval.c
+- gui_xmdlg.c gui_xmebw.c
+- GUI_OBJ =
+- GUI_DEFS = -DFEAT_GUI_MOTIF $NARROW_PROTO
+- GUI_IPATH = $GUI_INC_LOC
+- GUI_LIBS_DIR = $GUI_LIB_LOC
+- GUI_LIBS1 =
+- GUI_LIBS2 = $MOTIF_LIBNAME -lXt
+- GUI_INSTALL = install_normal
+- GUI_TARGETS = installglinks
+- GUI_MAN_TARGETS = yes
+- GUI_TESTTARGET = gui
+- GUI_BUNDLE =
+- GUI_TESTARG =
+- ATHENA
+- # XAW_LIB et al. can be overruled to use Xaw3d widgets
+- XAW_LIB ?= -lXaw
+- GUI_SRC = gui.c gui_athena.c gui_x11.c pty.c gui_beval.c \
+- gui_at_sb.c gui_at_fs.c
+- GUI_OBJ =
+- GUI_DEFS = -DFEAT_GUI_ATHENA $NARROW_PROTO
+- GUI_IPATH = $GUI_INC_LOC
+- GUI_LIBS_DIR = $GUI_LIB_LOC
+- GUI_LIBS1 = $XAW_LIB
+- GUI_LIBS2 = -lXt
+- GUI_INSTALL = install_normal
+- GUI_TARGETS = installglinks
+- GUI_MAN_TARGETS = yes
+- GUI_TESTTARGET = gui
+- GUI_BUNDLE =
+- GUI_TESTARG =
+- NEXTAW
+- # XAW_LIB et al. can be overruled to use Xaw3d widgets
+- XAW_LIB ?= -lXaw
+- GUI_SRC = gui.c gui_athena.c gui_x11.c pty.c gui_beval.c
+- gui_at_fs.c
+- GUI_OBJ =
+- GUI_DEFS = -DFEAT_GUI_ATHENA -DFEAT_GUI_NEXTAW $NARROW_PROTO
+- GUI_IPATH = $GUI_INC_LOC
+- GUI_LIBS_DIR = $GUI_LIB_LOC
+- GUI_LIBS1 = $NEXTAW_LIB
+- GUI_LIBS2 = -lXt
+- GUI_INSTALL = install_normal
+- GUI_TARGETS = installglinks
+- GUI_MAN_TARGETS = yes
+- GUI_TESTTARGET = gui
+- GUI_BUNDLE =
+- GUI_TESTARG =
+- CARBONGUI
+- GUI_SRC = gui.c gui_mac.c pty.c
+- GUI_OBJ =
+- GUI_DEFS = -DFEAT_GUI_MAC -fno-common -fpascal-strings \
+- -Wall -Wno-unknown-pragmas -mdynamic-no-pic -pipe
+- GUI_IPATH = $GUI_INC_LOC
+- GUI_LIBS_DIR = $GUI_LIB_LOC
+- GUI_LIBS1 = -framework Carbon
+- GUI_LIBS2 =
+- GUI_INSTALL = install_macosx
+- GUI_TARGETS = installglinks
+- GUI_MAN_TARGETS = yes
+- GUI_TESTTARGET = gui
+- GUI_BUNDLE = gui_bundle
+- GUI_TESTARG = VIMPROG=../$(APPDIR)/Contents/MacOS/$(VIMTARGET)
+- PHOTONGUI
+- GUI_SRC = gui.c gui_photon.c pty.c
+- GUI_OBJ =
+- GUI_DEFS = -DFEAT_GUI_PHOTON
+- GUI_IPATH =
+- GUI_LIBS_DIR =
+- GUI_LIBS1 = -lph -lphexlib
+- GUI_LIBS2 =
+- GUI_INSTALL = install_normal
+- GUI_TARGETS = installglinks
+- GUI_MAN_TARGETS = yes
+- GUI_TESTTARGET = gui
+- GUI_BUNDLE =
+- GUI_TESTARG =
+- *
+- GUI_SRC =
+- GUI_OBJ =
+- GUI_DEFS =
+- GUI_IPATH =
+- GUI_LIBS_DIR =
+- GUI_LIBS1 =
+- GUI_LIBS2 =
+- GUI_INSTALL = install_normal
+- GUI_TARGETS =
+- GUI_MAN_TARGETS =
+- GUI_TESTTARGET =
+- GUI_BUNDLE =
+- GUI_TESTARG =
+-
+-
+- PRE_DEFS = -Iproto -I. $DEFS $GUI_DEFS $GUI_IPATH $CPPFLAGS $?(EXTRA_IPATHS)
+- POST_DEFS = $X_CFLAGS $LUA_CFLAGS $MZSCHEME_CFLAGS $PERL_CFLAGS $PYTHON_CFLAGS $TCL_CFLAGS $RUBY_CFLAGS $?(EXTRA_DEFS)
+- CFLAGS = $PRE_DEFS $CONF_CFLAGS $?(PROFILE_CFLAGS) $POST_DEFS
+- CPPFLAGS =
+-
+- ALL_LIB_DIRS = $GUI_LIBS_DIR $X_LIBS_DIR
+- LDFLAGS = $ALL_LIB_DIRS $CONF_LDFLAGS
+- LIBS = $GUI_LIBS1 $GUI_X_LIBS $GUI_LIBS2 $X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS $CONF_LIBS $?(EXTRA_LIBS) $LUA_LIBS $MZSCHEME_LIBS $PERL_LIBS $PYTHON_LIBS $TCL_LIBS $RUBY_LIBS $?(PROFILE_LIBS)
+-
+- Target = $VIMNAME
+-
+- # reconfig target also builds Vim (reconfiguration is handled above).
+- reconfig {virtual}: $Target
+-
+- distclean: clean
+- :del {force} auto/config.h auto/config.aap
+- :del {force} auto/config.cache auto/config.status
+-
+-
+- # Execute the test scripts. Run these after compiling Vim, before installing.
+- #
+- # This will produce a lot of garbage on your screen, including a few error
+- # messages. Don't worry about that.
+- # If there is a real error, there will be a difference between "test.out" and
+- # a "test99.ok" file.
+- # If everything is alright, the final message will be "ALL DONE". If not you
+- # get "TEST FAILURE".
+- #
+- test check:
+- VimProg = ../$Target
+- :execute testdir/main.aap $GUI_TESTTARGET $GUI_TESTARG
+-
+- testclean {virtual}:
+- :del {force} testdir/*.out testdir/test.log
+-
+- # When no fetch target exists we are not a child of the ../main.aap recipe,
+- # Use ../main.aap to do the fetching.
+- # --- If you get an error here for wrong number of arguments, you need to
+- # update to a newer version of A-A-P.
+- @if not has_target("fetch"):
+- fetch:
+- :execute ../main.aap fetch
+-
+-
+- # All the source files that need to be compiled.
+- # Some are optional and depend on configure.
+- # "version.c" is missing, it's always compiled (see below).
+- Source =
+- blowfish.c
+- buffer.c
+- charset.c
+- diff.c
+- digraph.c
+- edit.c
+- eval.c
+- ex_cmds.c
+- ex_cmds2.c
+- ex_docmd.c
+- ex_eval.c
+- ex_getln.c
+- fileio.c
+- fold.c
+- getchar.c
+- hardcopy.c
+- hashtab.c
+- if_cscope.c
+- if_xcmdsrv.c
+- main.c
+- mark.c
+- memfile.c
+- memline.c
+- menu.c
+- message.c
+- misc1.c
+- misc2.c
+- move.c
+- mbyte.c
+- normal.c
+- ops.c
+- option.c
+- os_unix.c
+- auto/pathdef.c
+- popupmnu.c
+- quickfix.c
+- regexp.c
+- screen.c
+- search.c
+- sha256.c
+- spell.c
+- syntax.c
+- tag.c
+- term.c
+- ui.c
+- undo.c
+- window.c
+- $OS_EXTRA_SRC
+- $GUI_SRC
+- $HANGULIN_SRC
+- $LUA_SRC
+- $MZSCHEME_SRC
+- $PERL_SRC
+- $NETBEANS_SRC
+- $PYTHON_SRC
+- $TCL_SRC
+- $RUBY_SRC
+- $WORKSHOP_SRC
+-
+- Objects =
+- $GUI_OBJ
+-
+- # TODO: make is still used for subdirectories, need to write a recipe.
+- MAKE ?= make
+-
+- all: $Target $GUI_BUNDLE
+-
+- # This dependency is required to build auto/osdef.h before automatic
+- # dependencies are generated.
+- $Source version.c : auto/osdef.h
+-
+- # Need to mention that the target also depends on version.c, since it's not
+- # included in $Source
+- $Target : version.c
+-
+- # Some sources are to be found in the "auto" directory.
+- SRCPATH += auto
+-
+- # When building Vim always compile version.c to get the timestamp.
+- :filetype
+- declare my_prog
+- :attr {filetype = my_prog} $Target
+-
+- :program $Target : $Source $Objects
+-
+- :action build my_prog object
+- version_obj = `src2obj("version.c")`
+- :do compile {target = $version_obj} version.c
+- #:do build {target = $target {filetype = program}} $source $version_obj
+- link_sed = $BDIR/link.sed
+- @if os.path.exists(link_sed):
+- :move {force} $link_sed auto/link.sed
+- @else:
+- :del {force} auto/link.sed
+- :update link2.sh
+- :sys LINK="$?(PURIFY) $?(SHRPENV) $CC $LDFLAGS \
+- -o $target $source $version_obj $LIBS" \
+- MAKE="aap" sh ./link2.sh
+- :copy {force} auto/link.sed $BDIR/link.sed
+-
+- # "link.sh" must be modified for A-A-P
+- link2.sh : link.sh
+- :print Adjusting $-source for A-A-P.
+- :cat $source | :eval re.sub("objects/pathdef.o", "pathdef", stdin)
+- >! $target
+-
+- xxd/xxd$EXESUF: xxd/xxd.c
+- :sys cd xxd; CC="$CC" CFLAGS="$CPPFLAGS $CFLAGS" \
+- $MAKE -f Makefile
+-
+- # Build the language specific files if they were unpacked.
+- # Generate the converted .mo files separately, it's no problem if this fails.
+- languages {virtual}:
+- @if _no.MAKEMO:
+- :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix
+- @try:
+- :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix converted
+- @except:
+- :print Generated converted language files failed, continuing
+-
+- # Update the *.po files for changes in the sources. Only run manually.
+- update-po {virtual}:
+- cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix update-po
+-
+- auto/if_perl.c: if_perl.xs
+- :sys $PERL -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $target
+- :sys $PERL $PERLLIB/ExtUtils/xsubpp -prototypes -typemap \
+- $PERLLIB/ExtUtils/typemap if_perl.xs >> $target
+-
+- auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
+- :sys CC="$CC $CFLAGS" srcdir=$srcdir sh $srcdir/osdef.sh
+-
+- pathdef {virtual} : $BDIR/auto/pathdef$OBJSUF
+-
+- auto/pathdef.c: auto/config.aap
+- :print Creating $target
+- :print >! $target /* pathdef.c */
+- :print >> $target /* This file is automatically created by main.aap */
+- :print >> $target /* DO NOT EDIT! Change main.aap only. */
+- :print >> $target $#include "vim.h"
+- :print >> $target char_u *default_vim_dir = (char_u *)"$VIMRCLOC";
+- :print >> $target char_u *default_vimruntime_dir = (char_u *)"$?VIMRUNTIMEDIR";
+- v = $CC -c -I$srcdir $CFLAGS
+- @v = string.replace(v, '"', '\\"')
+- :print >> $target char_u *all_cflags = (char_u *)"$v";
+- linkcmd = $CC $LDFLAGS -o $VIMTARGET $LIBS
+- link_sed = $BDIR/link.sed
+- @if os.path.exists(link_sed):
+- # filter $linkcmd through $BDIR/link.sed
+- :print $linkcmd | :syseval sed -f $link_sed | :eval re.sub("\n", "", stdin) | :assign linkcmd
+- @linkcmd = string.replace(linkcmd, '"', '\\"')
+- :print >> $target char_u *all_lflags = (char_u *)"$linkcmd";
+- @if _no.get("COMPILEDBY"):
+- who = $COMPILEDBY
+- where =
+- @else:
+- :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who
+-
+- :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where
+- @who = string.replace(who, '"', '\\"')
+- @where = string.replace(where, '"', '\\"')
+- :print >> $target char_u *compiled_user = (char_u *)"$who";
+- :print >> $target char_u *compiled_sys = (char_u *)"$where";
+-
+-
+- ### Names of the tools that are also made
+- TOOLS = xxd/xxd$EXESUF
+-
+- # Root of the installation tree. Empty for a normal install, set to an
+- # existing path to install into a special place (for generating a package).
+- DESTDIR ?=
+-
+- ### Location of man pages under $MANTOPDIR
+- MAN1DIR = /man1
+-
+- ### Location of Vim files (should not need to be changed, and
+- ### some things might not work when they are changed!)
+- VIMDIR = /vim
+- @r = re.compile('.*VIM_VERSION_NODOT\\s*"(vim\\d\\d[^"]*)".*', re.S)
+- VIMRTDIR = /`r.match(open("version.h").read()).group(1)`
+- HELPSUBDIR = /doc
+- COLSUBDIR = /colors
+- SYNSUBDIR = /syntax
+- INDSUBDIR = /indent
+- AUTOSUBDIR = /autoload
+- PLUGSUBDIR = /plugin
+- FTPLUGSUBDIR = /ftplugin
+- LANGSUBDIR = /lang
+- COMPSUBDIR = /compiler
+- KMAPSUBDIR = /keymap
+- MACROSUBDIR = /macros
+- TOOLSSUBDIR = /tools
+- TUTORSUBDIR = /tutor
+- SPELLSUBDIR = /spell
+- PRINTSUBDIR = /print
+- PODIR = po
+-
+- ### VIMLOC common root of the Vim files (all versions)
+- ### VIMRTLOC common root of the runtime Vim files (this version)
+- ### VIMRCLOC compiled-in location for global [g]vimrc files (all versions)
+- ### VIMRUNTIMEDIR compiled-in location for runtime files (optional)
+- ### HELPSUBLOC location for help files
+- ### COLSUBLOC location for colorscheme files
+- ### SYNSUBLOC location for syntax files
+- ### INDSUBLOC location for indent files
+- ### AUTOSUBLOC location for standard autoload files
+- ### PLUGSUBLOC location for standard plugin files
+- ### FTPLUGSUBLOC location for ftplugin files
+- ### LANGSUBLOC location for language files
+- ### COMPSUBLOC location for compiler files
+- ### KMAPSUBLOC location for keymap files
+- ### MACROSUBLOC location for macro files
+- ### TOOLSSUBLOC location for tools files
+- ### TUTORSUBLOC location for tutor files
+- ### PRINTSUBLOC location for print files
+- ### SCRIPTLOC location for script files (menu.vim, bugreport.vim, ..)
+- ### You can override these if you want to install them somewhere else.
+- ### Edit feature.h for compile-time settings.
+- VIMLOC = $DATADIR$VIMDIR
+- @if not _no.get("VIMRTLOC"):
+- VIMRTLOC = $DATADIR$VIMDIR$VIMRTDIR
+- VIMRCLOC = $VIMLOC
+- HELPSUBLOC = $VIMRTLOC$HELPSUBDIR
+- COLSUBLOC = $VIMRTLOC$COLSUBDIR
+- SYNSUBLOC = $VIMRTLOC$SYNSUBDIR
+- INDSUBLOC = $VIMRTLOC$INDSUBDIR
+- AUTOSUBLOC = $VIMRTLOC$AUTOSUBDIR
+- PLUGSUBLOC = $VIMRTLOC$PLUGSUBDIR
+- FTPLUGSUBLOC = $VIMRTLOC$FTPLUGSUBDIR
+- LANGSUBLOC = $VIMRTLOC$LANGSUBDIR
+- COMPSUBLOC = $VIMRTLOC$COMPSUBDIR
+- KMAPSUBLOC = $VIMRTLOC$KMAPSUBDIR
+- MACROSUBLOC = $VIMRTLOC$MACROSUBDIR
+- TOOLSSUBLOC = $VIMRTLOC$TOOLSSUBDIR
+- TUTORSUBLOC = $VIMRTLOC$TUTORSUBDIR
+- SPELLSUBLOC = $VIMRTLOC$SPELLSUBDIR
+- PRINTSUBLOC = $VIMRTLOC$PRINTSUBDIR
+- SCRIPTLOC = $VIMRTLOC
+-
+- ### Only set VIMRUNTIMEDIR when VIMRTLOC is set to a different location and
+- ### the runtime directory is not below it.
+- #VIMRUNTIMEDIR = $VIMRTLOC
+-
+- ### Name of the evim file target.
+- EVIM_FILE = $DESTDIR$SCRIPTLOC/evim.vim
+- MSWIN_FILE = $DESTDIR$SCRIPTLOC/mswin.vim
+-
+- ### Name of the menu file target.
+- SYS_MENU_FILE = $DESTDIR$SCRIPTLOC/menu.vim
+- SYS_SYNMENU_FILE = $DESTDIR$SCRIPTLOC/synmenu.vim
+- SYS_DELMENU_FILE = $DESTDIR$SCRIPTLOC/delmenu.vim
+-
+- ### Name of the bugreport file target.
+- SYS_BUGR_FILE = $DESTDIR$SCRIPTLOC/bugreport.vim
+-
+- ### Name of the file type detection file target.
+- SYS_FILETYPE_FILE = $DESTDIR$SCRIPTLOC/filetype.vim
+-
+- ### Name of the file type detection file target.
+- SYS_FTOFF_FILE = $DESTDIR$SCRIPTLOC/ftoff.vim
+-
+- ### Name of the file type detection script file target.
+- SYS_SCRIPTS_FILE = $DESTDIR$SCRIPTLOC/scripts.vim
+-
+- ### Name of the ftplugin-on file target.
+- SYS_FTPLUGIN_FILE = $DESTDIR$SCRIPTLOC/ftplugin.vim
+-
+- ### Name of the ftplugin-off file target.
+- SYS_FTPLUGOF_FILE = $DESTDIR$SCRIPTLOC/ftplugof.vim
+-
+- ### Name of the indent-on file target.
+- SYS_INDENT_FILE = $DESTDIR$SCRIPTLOC/indent.vim
+-
+- ### Name of the indent-off file target.
+- SYS_INDOFF_FILE = $DESTDIR$SCRIPTLOC/indoff.vim
+-
+- ### Name of the option window script file target.
+- SYS_OPTWIN_FILE = $DESTDIR$SCRIPTLOC/optwin.vim
+-
+- ### Permissions for binaries
+- BINMOD = 755
+-
+- ### Permissions for man page
+- MANMOD = 644
+-
+- ### Permissions for help files
+- HELPMOD = 644
+-
+- ### Permissions for Perl and shell scripts
+- SCRIPTMOD = 755
+-
+- ### Permission for Vim script files (menu.vim, bugreport.vim, ..)
+- VIMSCRIPTMOD = 644
+-
+- ### Permissions for all directories that are created
+- DIRMOD = 755
+-
+- ### Permissions for all other files that are created
+- FILEMOD = 644
+-
+- # Where to copy the man and help files from
+- HELPSOURCE = ../runtime/doc
+-
+- # Where to copy the script files from (menu, bugreport)
+- SCRIPTSOURCE = ../runtime
+-
+- # Where to copy the colorscheme files from
+- COLSOURCE = ../runtime/colors
+-
+- # Where to copy the syntax files from
+- SYNSOURCE = ../runtime/syntax
+-
+- # Where to copy the indent files from
+- INDSOURCE = ../runtime/indent
+-
+- # Where to copy the standard plugin files from
+- AUTOSOURCE = ../runtime/autoload
+-
+- # Where to copy the standard plugin files from
+- PLUGSOURCE = ../runtime/plugin
+-
+- # Where to copy the ftplugin files from
+- FTPLUGSOURCE = ../runtime/ftplugin
+-
+- # Where to copy the macro files from
+- MACROSOURCE = ../runtime/macros
+-
+- # Where to copy the tools files from
+- TOOLSSOURCE = ../runtime/tools
+-
+- # Where to copy the tutor files from
+- TUTORSOURCE = ../runtime/tutor
+-
+- # Where to copy the spell files from
+- SPELLSOURCE = ../runtime/spell
+-
+- # Where to look for language specific files
+- LANGSOURCE = ../runtime/lang
+-
+- # Where to look for compiler files
+- COMPSOURCE = ../runtime/compiler
+-
+- # Where to look for keymap files
+- KMAPSOURCE = ../runtime/keymap
+-
+- # Where to look for print resource files
+- PRINTSOURCE = ../runtime/print
+-
+- # abbreviations
+- DEST_BIN = $DESTDIR$BINDIR
+- DEST_VIM = $DESTDIR$VIMLOC
+- DEST_RT = $DESTDIR$VIMRTLOC
+- DEST_HELP = $DESTDIR$HELPSUBLOC
+- DEST_COL = $DESTDIR$COLSUBLOC
+- DEST_SYN = $DESTDIR$SYNSUBLOC
+- DEST_IND = $DESTDIR$INDSUBLOC
+- DEST_AUTO = $DESTDIR$AUTOSUBLOC
+- DEST_PLUG = $DESTDIR$PLUGSUBLOC
+- DEST_FTP = $DESTDIR$FTPLUGSUBLOC
+- DEST_LANG = $DESTDIR$LANGSUBLOC
+- DEST_COMP = $DESTDIR$COMPSUBLOC
+- DEST_KMAP = $DESTDIR$KMAPSUBLOC
+- DEST_MACRO = $DESTDIR$MACROSUBLOC
+- DEST_TOOLS = $DESTDIR$TOOLSSUBLOC
+- DEST_TUTOR = $DESTDIR$TUTORSUBLOC
+- DEST_SPELL = $DESTDIR$SPELLSUBLOC
+- DEST_SCRIPT = $DESTDIR$SCRIPTLOC
+- DEST_PRINT = $DESTDIR$PRINTSUBLOC
+- DEST_MAN_TOP = $DESTDIR$?(MANDIR)
+-
+- # We assume that the ".../man/xx/man1/" directory is for latin1 manual pages.
+- # Some systems use UTF-8, but these should find the ".../man/xx.UTF-8/man1/"
+- # directory first.
+- # FreeBSD uses ".../man/xx.ISO8859-1/man1" for latin1, use that one too.
+- DEST_MAN = $(DEST_MAN_TOP)$(MAN1DIR)
+- DEST_MAN_FR = $(DEST_MAN_TOP)/fr$(MAN1DIR)
+- DEST_MAN_FR_I = $(DEST_MAN_TOP)/fr.ISO8859-1$(MAN1DIR)
+- DEST_MAN_FR_U = $(DEST_MAN_TOP)/fr.UTF-8$(MAN1DIR)
+- DEST_MAN_IT = $(DEST_MAN_TOP)/it$(MAN1DIR)
+- DEST_MAN_IT_I = $(DEST_MAN_TOP)/it.ISO8859-1$(MAN1DIR)
+- DEST_MAN_IT_U = $(DEST_MAN_TOP)/it.UTF-8$(MAN1DIR)
+- DEST_MAN_PL = $(DEST_MAN_TOP)/pl.ISO8859-2$(MAN1DIR)
+- DEST_MAN_PL_U = $(DEST_MAN_TOP)/pl.UTF-8$(MAN1DIR)
+- DEST_MAN_RU = $(DEST_MAN_TOP)/ru.KOI8-R$(MAN1DIR)
+- DEST_MAN_RU_U = $(DEST_MAN_TOP)/ru.UTF-8$(MAN1DIR)
+-
+- # These are directories, create them when needed.
+- :attr {directory = $DIRMOD} $DEST_BIN $DEST_VIM $DEST_RT $DEST_HELP $DEST_COL
+- $DEST_SYN $DEST_IND $DEST_AUTO $DEST_AUTO/xml $DEST_PLUG
+- $DEST_FTP $DEST_LANG
+- $DEST_COMP $DEST_KMAP $DEST_MACRO $DEST_TOOLS $DEST_TUTOR
+- $DEST_SCRIPT $DEST_PRINT $DEST_MAN $DEST_SPELL
+- $DEST_MAN_FR $DEST_MAN_FR_I $DEST_MAN_FR_U $DEST_MAN_IT
+- $DEST_MAN_IT_I $DEST_MAN_IT_U
+- $DEST_MAN_PL $DEST_MAN_PL_U
+- $DEST_MAN_RU $DEST_MAN_RU_U
+-
+- #
+- # I N S T A L L
+- #
+- install: $GUI_INSTALL
+-
+- install_normal:
+- @if not os.path.isdir(_no.DEST_BIN):
+- @try:
+- :mkdir $DEST_BIN
+- @except:
+- @ pass
+- @if os.access(_no.DEST_BIN, os.W_OK):
+- # Bin directory is writable, install directly.
+- :update installvim installtools $INSTALL_LANGS install-icons
+- @else:
+- # Bin directory is not writable, need to become root.
+- :print The destination directory "$DEST_BIN" is not writable.
+- :print If this is the wrong directory, use PREFIX to specify another one.
+- :print Otherwise, type the root password to continue installing.
+- :asroot $AAP install
+-
+- installvim {virtual}: installvimbin installtutorbin \
+- installruntime installlinks installmanlinks
+-
+- installvimbin {virtual}{force}: $Target $DEST_BIN
+- exe = $DEST_BIN/$VIMTARGET
+- @if os.path.exists(exe):
+- # Move the old executable aside and delete it. Any other method
+- # may cause a crash if the executable is currently being used.
+- :move {force} $exe $(exe).rm
+- :del {force} $(exe).rm
+- :copy $VIMTARGET $DEST_BIN
+- :do strip $exe
+- :chmod $BINMOD $DEST_BIN/$VIMTARGET
+- # may create a link to the new executable from /usr/bin/vi
+- @if _no.get("LINKIT"):
+- :sys $LINKIT
+-
+- # Long list of arguments for the shell script that installs the manual pages
+- # for one language.
+- INSTALLMANARGS = $(VIMLOC) $(SCRIPTLOC) $(VIMRCLOC) $(HELPSOURCE) $(MANMOD) \
+- $(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME)
+-
+- # Install most of the runtime files
+- installruntime {virtual}: installrtbase installmacros installtutor installspell
+-
+- # install the help files; first adjust the contents for the location
+- installrtbase {virtual}{force}: $HELPSOURCE/vim.1 $DEST_VIM
+- $DEST_RT $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
+- $DEST_FTP $DEST_AUTO $DEST_AUTO/xml $DEST_PLUG $DEST_TUTOR
+- $DEST_COMP $DEST_SPELL $DEST_PRINT
+- :chmod 755 installman.sh
+- :sys ./installman.sh install $(DEST_MAN) "" $(INSTALLMANARGS)
+-
+- :cd $HELPSOURCE
+- @try:
+- XTRA = `glob.glob("*.??x")` `glob.glob("tags-??")`
+- @except:
+- XTRA = # It's OK if there are no matches.
+- :copy *.txt tags $XTRA $DEST_HELP
+- :cd -
+- :cd $DEST_HELP
+- :chmod $HELPMOD *.txt tags $XTRA
+- :cd -
+- :copy $HELPSOURCE/*.pl $DEST_HELP
+- :chmod $SCRIPTMOD $DEST_HELP/*.pl
+- # install the menu files
+- :copy $SCRIPTSOURCE/menu.vim $SYS_MENU_FILE
+- :chmod $VIMSCRIPTMOD $SYS_MENU_FILE
+- :copy $SCRIPTSOURCE/synmenu.vim $SYS_SYNMENU_FILE
+- :chmod $VIMSCRIPTMOD $SYS_SYNMENU_FILE
+- :copy $SCRIPTSOURCE/delmenu.vim $SYS_DELMENU_FILE
+- :chmod $VIMSCRIPTMOD $SYS_DELMENU_FILE
+- # install the evim file
+- :copy $SCRIPTSOURCE/mswin.vim $MSWIN_FILE
+- :chmod $VIMSCRIPTMOD $MSWIN_FILE
+- :copy $SCRIPTSOURCE/evim.vim $EVIM_FILE
+- :chmod $VIMSCRIPTMOD $EVIM_FILE
+- # install the bugreport file
+- :copy $SCRIPTSOURCE/bugreport.vim $SYS_BUGR_FILE
+- :chmod $VIMSCRIPTMOD $SYS_BUGR_FILE
+- # install the example vimrc files
+- :copy $SCRIPTSOURCE/vimrc_example.vim $DEST_SCRIPT
+- :chmod $VIMSCRIPTMOD $DEST_SCRIPT/vimrc_example.vim
+- :copy $SCRIPTSOURCE/gvimrc_example.vim $DEST_SCRIPT
+- :chmod $VIMSCRIPTMOD $DEST_SCRIPT/gvimrc_example.vim
+- # install the file type detection files
+- :copy $SCRIPTSOURCE/filetype.vim $SYS_FILETYPE_FILE
+- :chmod $VIMSCRIPTMOD $SYS_FILETYPE_FILE
+- :copy $SCRIPTSOURCE/ftoff.vim $SYS_FTOFF_FILE
+- :chmod $VIMSCRIPTMOD $SYS_FTOFF_FILE
+- :copy $SCRIPTSOURCE/scripts.vim $SYS_SCRIPTS_FILE
+- :chmod $VIMSCRIPTMOD $SYS_SCRIPTS_FILE
+- :copy $SCRIPTSOURCE/ftplugin.vim $SYS_FTPLUGIN_FILE
+- :chmod $VIMSCRIPTMOD $SYS_FTPLUGIN_FILE
+- :copy $SCRIPTSOURCE/ftplugof.vim $SYS_FTPLUGOF_FILE
+- :chmod $VIMSCRIPTMOD $SYS_FTPLUGOF_FILE
+- :copy $SCRIPTSOURCE/indent.vim $SYS_INDENT_FILE
+- :chmod $VIMSCRIPTMOD $SYS_INDENT_FILE
+- :copy $SCRIPTSOURCE/indoff.vim $SYS_INDOFF_FILE
+- :chmod $VIMSCRIPTMOD $SYS_INDOFF_FILE
+- :copy $SCRIPTSOURCE/optwin.vim $SYS_OPTWIN_FILE
+- :chmod $VIMSCRIPTMOD $SYS_OPTWIN_FILE
+- # install the print resource files
+- :copy $PRINTSOURCE/*.ps $DEST_PRINT
+- :chmod $FILEMOD $DEST_PRINT/*.ps
+- # install the colorscheme files
+- :copy $COLSOURCE/*.vim $COLSOURCE/README.txt $DEST_COL
+- :chmod $HELPMOD $DEST_COL/*.vim $DEST_COL/README.txt
+- # install the syntax files
+- :copy $SYNSOURCE/*.vim $SYNSOURCE/README.txt $DEST_SYN
+- :chmod $HELPMOD $DEST_SYN/*.vim $DEST_SYN/README.txt
+- # install the indent files
+- :copy $INDSOURCE/*.vim $INDSOURCE/README.txt $DEST_IND
+- :chmod $HELPMOD $DEST_IND/*.vim
+- # install the standard autoload files
+- :copy $AUTOSOURCE/*.vim $AUTOSOURCE/README.txt $DEST_AUTO
+- :chmod $HELPMOD $DEST_AUTO/*.vim $DEST_AUTO/README.txt
+- :copy $AUTOSOURCE/xml/*.vim $DEST_AUTO/xml
+- :chmod $HELPMOD $DEST_AUTO/xml/*.vim
+- # install the standard plugin files
+- :copy $PLUGSOURCE/*.vim $PLUGSOURCE/README.txt $DEST_PLUG
+- :chmod $HELPMOD $DEST_PLUG/*.vim $DEST_PLUG/README.txt
+- # install the ftplugin files
+- :copy $FTPLUGSOURCE/*.vim $FTPLUGSOURCE/README.txt $DEST_FTP
+- :chmod $HELPMOD $DEST_FTP/*.vim $DEST_FTP/README.txt
+- # install the compiler files
+- :copy $COMPSOURCE/*.vim $COMPSOURCE/README.txt $DEST_COMP
+- :chmod $HELPMOD $DEST_COMP/*.vim $DEST_COMP/README.txt
+-
+- installmacros {virtual}{force}: $MACROSOURCE $DEST_VIM $DEST_RT $DEST_MACRO
+- :copy {recursive}{force} $MACROSOURCE/* $DEST_MACRO
+- # Delete any CVS and AAPDIR directories.
+- # Use the ":tree" command if possible. It was added later, fall back
+- # to using "find" when it doesn't work.
+- @try:
+- :tree $DEST_MACRO {dirname = CVS}
+- :del {recursive} $name
+- :tree $DEST_MACRO {dirname = AAPDIR}
+- :del {recursive} $name
+- :tree $DEST_MACRO {dirname = .*}
+- :chmod $DIRMOD $name
+- :tree $DEST_MACRO {filename = .*}
+- :chmod $FILEMOD $name
+- @except:
+- @ ok, cvsdirs = redir_system('find %s -name CVS -print' % _no.DEST_MACRO)
+- @ if ok and cvsdirs:
+- :del {recursive} $cvsdirs
+- :sys chmod $DIRMOD ``find $DEST_MACRO -type d -print``
+- :sys chmod $FILEMOD ``find $DEST_MACRO -type f -print``
+- :chmod $SCRIPTMOD $DEST_MACRO/less.sh
+-
+- # install the tutor files
+- installtutorbin {virtual}{force}: $DEST_VIM
+- :copy vimtutor $DEST_BIN/$(VIMNAME)tutor
+- :chmod $SCRIPTMOD $DEST_BIN/$(VIMNAME)tutor
+-
+- installtutor {virtual}{force}: $DEST_RT $DEST_TUTOR
+- :copy $TUTORSOURCE/tutor* $TUTORSOURCE/README* $DEST_TUTOR
+- :chmod $HELPMOD $DEST_TUTOR/*
+-
+- # Install the spell files, if they exist. This assumes at least the English
+- # spell file is there.
+- installspell {virtual}: $(DEST_VIM) $(DEST_RT) $(DEST_SPELL)
+- enspl = $(SPELLSOURCE)/en.latin1.spl
+- @if os.path.exists(enspl):
+- :copy $(SPELLSOURCE)/*.spl $(SPELLSOURCE)/*.vim $(DEST_SPELL)
+- :chmod $(HELPMOD) $(DEST_SPELL)/*.spl $(DEST_SPELL)/*.vim
+- @try:
+- :copy $(SPELLSOURCE)/*.sug $(DEST_SPELL)
+- :chmod $(HELPMOD) $(DEST_SPELL)/*.sug
+- @except:
+- @ pass
+-
+- # install helper program xxd
+- installtools {virtual}{force}: $TOOLS $DEST_BIN $DEST_MAN \
+- $TOOLSSOURCE $DEST_VIM $DEST_RT $DEST_TOOLS \
+- $INSTALL_TOOL_LANGS
+- xxd = $DEST_BIN/xxd$EXESUF
+- @if os.path.exists(xxd):
+- :move {force} $xxd $(xxd).rm
+- :del $(xxd).rm
+- :copy xxd/xxd$EXESUF $DEST_BIN
+- :do strip $DEST_BIN/xxd$EXESUF
+- :chmod $BINMOD $DEST_BIN/xxd$EXESUF
+- :chmod 755 installman.sh
+- :sys ./installman.sh xxd $(DEST_MAN) "" $(INSTALLMANARGS)
+- #
+- # install the runtime tools
+- @try:
+- @ if aap_has(":tree"):
+- # New method: copy everything and delete CVS and AAPDIR dirs
+- :copy {recursive} $TOOLSSOURCE/* $DEST_TOOLS
+- :tree $DEST_TOOLS {dirname = CVS}
+- :delete {recursive} $name
+- :tree $DEST_TOOLS {dirname = AAPDIR}
+- :delete {recursive} $name
+- @except:
+- # Old method: copy only specific files and directories.
+- :copy {recursive} $TOOLSSOURCE/README.txt $TOOLSSOURCE/[a-z]* $DEST_TOOLS
+- :chmod $FILEMOD $DEST_TOOLS/*
+- # replace the path in some tools
+- :progsearch perlpath perl
+- @if perlpath:
+- :cat $TOOLSSOURCE/efm_perl.pl |
+- :eval re.sub("/usr/bin/perl", perlpath, stdin)
+- >! $DEST_TOOLS/efm_perl.pl
+- @else:
+- :copy $TOOLSSOURCE/efm_perl.pl $DEST_TOOLS
+-
+- :progsearch awkpath nawk gawk awk
+- @if awkpath:
+- :cat $TOOLSSOURCE/mve.awk |
+- :eval re.sub("/usr/bin/nawk", awkpath, stdin)
+- >! $DEST_TOOLS/mve.awk
+- @else:
+- :copy $TOOLSSOURCE/mve.awk $DEST_TOOLS
+-
+- :sys chmod $SCRIPTMOD ``grep -l "^#!" $DEST_TOOLS/*``
+-
+- # install the language specific files for tools, if they were unpacked
+- install-tool-languages:
+- :chmod 755 installman.sh
+- :sys ./installman.sh xxd $(DEST_MAN_FR) "-fr" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_FR_I) "-fr" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_FR_U) "-fr.UTF-8" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_IT) "-it" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_IT_I) "-it" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_IT_U) "-it.UTF-8" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_PL) "-pl" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_PL_U) "-pl.UTF-8" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_RU) "-ru" $(INSTALLMANARGS)
+- :sys ./installman.sh xxd $(DEST_MAN_RU_U) "-ru.UTF-8" $(INSTALLMANARGS)
+-
+- # install the language specific files, if they were unpacked
+- install-languages {virtual}{force}: languages $DEST_LANG $DEST_KMAP
+- :chmod 755 installman.sh
+- :sys ./installman.sh install $(DEST_MAN_FR) "-fr" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_FR_I) "-fr" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_FR_U) "-fr.UTF-8" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_IT) "-it" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_IT_I) "-it" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_IT_U) "-it.UTF-8" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_PL) "-pl" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_PL_U) "-pl.UTF-8" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_RU) "-ru" $(INSTALLMANARGS)
+- :sys ./installman.sh install $(DEST_MAN_RU_U) "-ru.UTF-8" $(INSTALLMANARGS)
+- :chmod 755 installml.sh
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_FR) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_FR_I) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_FR_U) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_IT) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_IT_I) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_IT_U) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_PL) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_PL_U) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_RU) $(INSTALLMLARGS)
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_RU_U) $(INSTALLMLARGS)
+-
+- @if _no.MAKEMO:
+- :sys cd $PODIR; $MAKE prefix=$DESTDIR$prefix \
+- LOCALEDIR=$DEST_LANG INSTALL_DATA=cp FILEMOD=$FILEMOD install
+- @if os.path.exists(_no.LANGSOURCE):
+- :print installing language files
+- :copy $LANGSOURCE/README.txt $LANGSOURCE/*.vim $DEST_LANG
+- :chmod $FILEMOD $DEST_LANG/*.vim
+- @if os.path.exists(_no.KMAPSOURCE):
+- :copy $KMAPSOURCE/README.txt $KMAPSOURCE/*.vim $DEST_KMAP
+- :chmod $FILEMOD $DEST_KMAP/*.vim
+-
+- # install the icons for KDE, if the directory exists and the icon doesn't.
+- ICON48PATH = $DESTDIR$DATADIR/icons/hicolor/48x48/apps
+- ICON32PATH = $DESTDIR$DATADIR/icons/locolor/32x32/apps
+- ICON16PATH = $DESTDIR$DATADIR/icons/locolor/16x16/apps
+- KDEPATH = $HOME/.kde/share/icons
+- install-icons {virtual}:
+- gp = $ICON48PATH/gvim.png
+- @if os.path.isdir(_no.ICON48PATH) and not os.path.exists(gp):
+- :copy $SCRIPTSOURCE/vim48x48.png $gp
+- gp = $ICON32PATH/gvim.png
+- @if os.path.isdir(_no.ICON32PATH) and not os.path.exists(gp):
+- :copy $SCRIPTSOURCE/vim32x32.png $gp
+- gp = $ICON16PATH/gvim.png
+- @if os.path.isdir(_no.ICON16PATH) and not os.path.exists(gp):
+- :copy $SCRIPTSOURCE/vim16x16.png $gp
+-
+-
+- $HELPSOURCE/vim.1 $MACROSOURCE $TOOLSSOURCE:
+- @if not os.path.exists(_no.TOOLSSOURCE):
+- :print Runtime files not found.
+- :error You need to unpack the runtime archive before running "make install".
+-
+- # create links from various names to vim. This is only done when the links
+- # (or executables with the same name) don't exist yet.
+- installlinks {virtual}: $GUI_TARGETS \
+- $DEST_BIN/$EXTARGET \
+- $DEST_BIN/$VIEWTARGET \
+- $DEST_BIN/$RVIMTARGET \
+- $DEST_BIN/$RVIEWTARGET \
+- $INSTALLVIMDIFF
+-
+- installglinks {virtual}: $DEST_BIN/$GVIMTARGET \
+- $DEST_BIN/$GVIEWTARGET \
+- $DEST_BIN/$RGVIMTARGET \
+- $DEST_BIN/$RGVIEWTARGET \
+- $DEST_BIN/$EVIMTARGET \
+- $DEST_BIN/$EVIEWTARGET \
+- $INSTALLGVIMDIFF
+-
+- installvimdiff {virtual}: $DEST_BIN/$VIMDIFFTARGET
+- installgvimdiff {virtual}: $DEST_BIN/$GVIMDIFFTARGET
+-
+- # These dependencies use an empty buildcheck so that they are only done when
+- # the target doesn't exist.
+- $DEST_BIN/$EXTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $EXTARGET
+-
+- $DEST_BIN/$VIEWTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $VIEWTARGET
+-
+- $DEST_BIN/$GVIMTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $GVIMTARGET
+-
+- $DEST_BIN/$GVIEWTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $GVIEWTARGET
+-
+- $DEST_BIN/$RVIMTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $RVIMTARGET
+-
+- $DEST_BIN/$RVIEWTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $RVIEWTARGET
+-
+- $DEST_BIN/$RGVIMTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $RGVIMTARGET
+-
+- $DEST_BIN/$RGVIEWTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $RGVIEWTARGET
+-
+- $DEST_BIN/$VIMDIFFTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $VIMDIFFTARGET
+-
+- $DEST_BIN/$GVIMDIFFTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $GVIMDIFFTARGET
+-
+- $DEST_BIN/$EVIMTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $EVIMTARGET
+-
+- $DEST_BIN/$EVIEWTARGET: {buildcheck = }
+- :sys cd $DEST_BIN; ln -s $VIMTARGET $EVIEWTARGET
+-
+- # create links for the manual pages with various names to vim. This is only
+- # done when the links (or manpages with the same name) don't exist yet.
+- INSTALLMLARGS = $(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME) \
+- $(EXNAME) $(VIEWNAME) $(RVIMNAME) $(RVIEWNAME) \
+- $(GVIMNAME) $(GVIEWNAME) $(RGVIMNAME) $(RGVIEWNAME) \
+- $(GVIMDIFFNAME) $(EVIEWNAME)
+-
+- installmanlinks {virtual}:
+- :chmod 755 installml.sh
+- :sys ./installml.sh install "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN) $(INSTALLMLARGS)
+-
+- #
+- # U N I N S T A L L
+- #
+- uninstall {virtual}{force}: uninstall_runtime
+- :del {force} $DEST_BIN/$VIMTARGET
+- :del {force} $DEST_BIN/vimtutor
+- :del {force} $DEST_BIN/$EXTARGET $DEST_BIN/$VIEWTARGET
+- :del {force} $DEST_BIN/$GVIMTARGET $DEST_BIN/$GVIEWTARGET
+- :del {force} $DEST_BIN/$RVIMTARGET $DEST_BIN/$RVIEWTARGET
+- :del {force} $DEST_BIN/$RGVIMTARGET $DEST_BIN/$RGVIEWTARGET
+- :del {force} $DEST_BIN/$VIMDIFFTARGET $DEST_BIN/$GVIMDIFFTARGET
+- :del {force} $DEST_BIN/$EVIMTARGET $DEST_BIN/$EVIEWTARGET
+- :del {force} $DEST_BIN/xxd$EXESUF
+-
+- # Note: "deldir" will fail if any files were added after "make install", that
+- # is intentionally: Keep files the user added.
+- uninstall_runtime {virtual}{force}:
+- :chmod 755 installman.sh
+- :sys ./installman.sh uninstall $(DEST_MAN) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_FR) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_FR_I) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_FR_U) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_IT) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_IT_I) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_IT_U) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_PL) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_PL_U) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_RU) "" $(INSTALLMANARGS)
+- :sys ./installman.sh uninstall $(DEST_MAN_RU_U) "" $(INSTALLMANARGS)
+- :chmod 755 installml.sh
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_FR) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_FR_I) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_FR_U) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_IT) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_IT_I) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_IT_U) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_PL) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_PL_U) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_RU) $(INSTALLMLARGS)
+- :sys ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+- $(DEST_MAN_RU_U) $(INSTALLMLARGS)
+- :del {force} $DEST_MAN/xxd.1
+- :del {force} $(DEST_MAN_FR)/xxd.1 $(DEST_MAN_FR_I)/xxd.1 $(DEST_MAN_FR_U)/xxd.1
+- :del {force} $(DEST_MAN_IT)/xxd.1 $(DEST_MAN_IT_I)/xxd.1 $(DEST_MAN_IT_U)/xxd.1
+- :del {force} $(DEST_MAN_PL)/xxd.1 $(DEST_MAN_PL_U)/xxd.1
+- :del {force} $(DEST_MAN_RU)/xxd.1 $(DEST_MAN_RU_U)/xxd.1
+-
+- :del {force} $DEST_HELP/*.txt $DEST_HELP/tags $DEST_HELP/*.pl
+- :del {force} $SYS_MENU_FILE $SYS_SYNMENU_FILE $SYS_DELMENU_FILE
+- :del {force} $SYS_BUGR_FILE $EVIM_FILE $MSWIN_FILE
+- :del {force} $DEST_SCRIPT/gvimrc_example.vim $DEST_SCRIPT/vimrc_example.vim
+- :del {force} $SYS_FILETYPE_FILE $SYS_FTOFF_FILE $SYS_SCRIPTS_FILE
+- :del {force} $SYS_INDOFF_FILE $SYS_INDENT_FILE
+- :del {force} $SYS_FTPLUGOF_FILE $SYS_FTPLUGIN_FILE
+- :del {force} $SYS_OPTWIN_FILE
+- :del {force} $DEST_COL/*.vim $DEST_COL/README.txt
+- :del {force} $DEST_SYN/*.vim $DEST_SYN/README.txt
+- :del {force} $DEST_IND/*.vim $DEST_IND/README.txt
+- :del {force} $DEST_PRINT/*.ps
+- :del {force}{recursive} $DEST_MACRO
+- :del {force}{recursive} $DEST_TUTOR
+- :del {force}{recursive} $DEST_SPELL
+- :del {force}{recursive} $DEST_TOOLS
+- :del {force}{recursive} $DEST_LANG
+- :del {force}{recursive} $DEST_KMAP
+- :del {force}{recursive} $DEST_COMP
+- :deldir {force} $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
+- :del {force}{recursive} $DEST_FTP/*.vim $DEST_FTP/README.txt
+- :del {force} $DEST_AUTO/*.vim $DEST_AUTO/README.txt $DEST_AUTO/xml/*.vim
+- :del {force} $DEST_PLUG/*.vim $DEST_PLUG/README.txt
+- :deldir {force} $DEST_FTP $DEST_AUTO/xml $DEST_AUTO $DEST_PLUG $DEST_PRINT $DEST_RT
+- # This will fail when other Vim versions are installed, no worries.
+- @try:
+- :deldir $DEST_VIM
+- @except:
+- :print Cannot delete $DEST_VIM
+-
+- ###############################################################################
+- ### MacOS X installation
+- ###
+- ### This installs a runnable Vim.app in $(prefix)
+-
+- REZ = /Developer/Tools/Rez
+- RESDIR = $(APPDIR)/Contents/Resources
+- @r = re.compile('.*VIM_VERSION_SHORT\\s*"(\\d[^"]*)".*', re.S)
+- VERSION = /`r.match(open("version.h").read()).group(1)`
+-
+- ### Common flags
+- M4FLAGSX = $?(M4FLAGS) -DAPP_EXE=$(VIMNAME) -DAPP_NAME=$(VIMNAME) \
+- -DAPP_VER=$(VERSION)
+-
+- # Resources used for the Mac are in one directory.
+- RSRC_DIR = os_mac_rsrc
+-
+- :attr {directory = $DIRMOD} $RESDIR
+-
+- install_macosx {virtual}: gui_bundle
+- # Remove the link to the runtime dir, don't want to copy all of that.
+- :delete {force} $(RESDIR)/vim/runtime
+- :copy {r} $APPDIR $DESTDIR$prefix
+- :tree $DESTDIR$prefix {dirname = AAPDIR}
+- :delete {recursive} $name
+- # Install the runtime files. Recursive!
+- :mkdir {r}{f} $DESTDIR$prefix/$RESDIR/vim/runtime
+- # :mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin
+- :execute main.aap PREFIX=$DESTDIR$prefix/$RESDIR/vim VIMRTLOC=$DESTDIR$prefix/$RESDIR/vim/runtime installruntime
+- # Put the link back.
+- :symlink `os.getcwd()`/../runtime $RESDIR/vim/runtime
+- # TODO: Create the vimtutor application.
+-
+- gui_bundle {virtual}: $(RESDIR) bundle-dir bundle-executable bundle-info \
+- bundle-resource bundle-language
+-
+- bundle-dir {virtual}: $(APPDIR)/Contents $(VIMTARGET)
+- # Make a link to the runtime directory, so that we can try out the executable
+- # without installing it.
+- :mkdir {r}{f} $(RESDIR)/vim
+- :symlink {quiet} `os.getcwd()`/../runtime $(RESDIR)/vim/runtime
+-
+- bundle-executable {virtual}: $(VIMTARGET)
+- :mkdir {r}{f} $(APPDIR)/Contents/MacOS
+- :copy $(VIMTARGET) $(APPDIR)/Contents/MacOS/$(VIMTARGET)
+-
+- bundle-info {virtual}: bundle-dir
+- :print Creating PkgInfo
+- :print "APPLVIM!" >! $(APPDIR)/Contents/PkgInfo
+- :print Creating Info.plist
+- :sys m4 $(M4FLAGSX) infplist.xml > $(APPDIR)/Contents/Info.plist
+-
+- bundle-resource {virtual}: bundle-dir bundle-rsrc
+- :copy {force} $(RSRC_DIR)/*.icns $(RESDIR)
+-
+- ### Classic resources
+- # Resource fork (in the form of a .rsrc file) for Classic Vim (Mac OS 9)
+- # This file is also required for OS X Vim.
+- bundle-rsrc {virtual}: os_mac.rsr.hqx
+- :print Creating resource fork
+- :sys python dehqx.py $source
+- :del {force} gui_mac.rsrc
+- :move gui_mac.rsrc.rsrcfork $(RESDIR)/$(VIMNAME).rsrc
+-
+- # po/Make_osx.pl says something about generating a Mac message file
+- # for Ukrainian. Would somebody using Mac OS X in Ukrainian
+- # *really* be upset that Carbon Vim was not localised in
+- # Ukrainian?
+- #
+- #bundle-language: bundle-dir po/Make_osx.pl
+- # cd po && perl Make_osx.pl --outdir ../$(RESDIR) $(MULTILANG)
+- bundle-language {virtual}: bundle-dir
+-
+- $(APPDIR)/Contents:
+- :mkdir {r} $(APPDIR)/Contents/MacOS
+- :mkdir {r} $(RESDIR)/English.lproj
+-
+-
+- # vim: sts=4 sw=4 :
+--- 0 ----
+*** ../vim-8.1.0345/src/testdir/main.aap 2018-01-31 19:23:08.000000000 +0100
+--- src/testdir/main.aap 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,57 ****
+- #
+- # Makefile to run all tests for Vim
+- #
+-
+- VimProg ?= ../vim
+-
+- Scripts = test1.out test2.out test3.out test6.out
+- test11.out
+- test13.out test14.out test17.out
+- test18.out test21.out
+- test27.out test29.out test30.out
+- test37.out
+- test39.out test42.out
+- test44.out test46.out test47.out
+- test48.out test49.out test74.out
+-
+- ScriptsGUI = test16.out
+-
+- # Build "nongui" when no target was specified.
+- nongui: newlog $Scripts
+- :print
+- :cat test.log
+- :print ALL DONE
+-
+- # Build "ngui" when specified.
+- gui: newlog $Scripts $ScriptsGUI
+- :print
+- :cat test.log
+- :print ALL DONE
+-
+- $Scripts $ScriptsGUI: $VimProg
+-
+- clean:
+- :del {r}{force} *.out test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X*
+-
+- # test1 is special, it checks for features
+- test1.out: test1.in
+- :del {force} test1.failed tiny.vim small.vim mbyte.vim mzscheme.vim
+- :sys {i} $VimProg -u unix.vim -U NONE --noplugin -s dotest.in test1.in
+- @if os.system("diff test.out test1.ok") != 0:
+- :error test1 FAILED - Something basic is wrong
+- :move {force} test.out test1.out
+- :del {r}{force} X*
+-
+- :rule %.out : %.in
+- :del {force} $(match).failed test.ok
+- :copy $(match).ok test.ok
+- :sys {i} $VimProg -u unix.vim -U NONE --noplugin -s dotest.in $(match).in
+- @if os.system("diff test.out " + match + ".ok") != 0:
+- :print $match FAILED >>test.log
+- :move {force} test.out $(match).failed
+- @else:
+- :move {force} test.out $(match).out
+- :del {r}{force} X* test.ok
+-
+- newlog:
+- :print Test results: >! test.log
+--- 0 ----
+*** ../vim-8.1.0345/src/config.aap.in 2018-04-11 22:14:38.000000000 +0200
+--- src/config.aap.in 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,129 ****
+- # config.aap.in: recipe transformed into auto/config.aap by configure.
+-
+- VIMNAME = @VIMNAME@
+- EXNAME = @EXNAME@
+- VIEWNAME = @VIEWNAME@
+-
+- CC = @CC@
+- DEFS = @DEFS@
+- CONF_CFLAGS = @CFLAGS@
+- CPPFLAGS = @CPPFLAGS@
+- srcdir = @srcdir@
+- VPATH = @srcdir@
+- CONF_LDFLAGS = @LDFLAGS@
+- CONF_LIBS = @LIBS@
+- TAGPRG = @TAGPRG@
+-
+- CPP = @CPP@
+- CPP_MM = @CPP_MM@
+- X_CFLAGS = @X_CFLAGS@
+- X_LIBS_DIR = @X_LIBS@
+- X_PRE_LIBS = @X_PRE_LIBS@
+- X_EXTRA_LIBS = @X_EXTRA_LIBS@
+- X_LIBS = @X_LIB@
+-
+- LUA_LIBS = @LUA_LIBS@
+- LUA_SRC = @LUA_SRC@
+- LUA_OBJ = @LUA_OBJ@
+- LUA_CFLAGS = @LUA_CFLAGS@
+- LUA_PRO = @LUA_PRO@
+-
+- MZSCHEME_LIBS = @MZSCHEME_LIBS@
+- MZSCHEME_SRC = @MZSCHEME_SRC@
+- MZSCHEME_OBJ = @MZSCHEME_OBJ@
+- MZSCHEME_CFLAGS = @MZSCHEME_CFLAGS@
+- MZSCHEME_PRO = @MZSCHEME_PRO@
+-
+- PERL = @vi_cv_path_perl@
+- PERLLIB = @vi_cv_perllib@
+- PERL_LIBS = @PERL_LIBS@
+- SHRPENV = @shrpenv@
+- PERL_SRC = @PERL_SRC@
+- PERL_OBJ = @PERL_OBJ@
+- PERL_PRO = @PERL_PRO@
+- PERL_CFLAGS = @PERL_CFLAGS@
+-
+- PYTHON_SRC = @PYTHON_SRC@
+- PYTHON_OBJ = @PYTHON_OBJ@
+- PYTHON_CFLAGS = @PYTHON_CFLAGS@
+- PYTHON_LIBS = @PYTHON_LIBS@
+-
+- TCL = @vi_cv_path_tcl@
+- TCL_SRC = @TCL_SRC@
+- TCL_OBJ = @TCL_OBJ@
+- TCL_PRO = @TCL_PRO@
+- TCL_CFLAGS = @TCL_CFLAGS@
+- TCL_LIBS = @TCL_LIBS@
+-
+- HANGULIN_SRC = @HANGULIN_SRC@
+- HANGULIN_OBJ = @HANGULIN_OBJ@
+-
+- WORKSHOP_SRC = @WORKSHOP_SRC@
+- WORKSHOP_OBJ = @WORKSHOP_OBJ@
+-
+- NETBEANS_SRC = @NETBEANS_SRC@
+- NETBEANS_OBJ = @NETBEANS_OBJ@
+- CHANNEL_SRC = @CHANNEL_SRC@
+- CHANNEL_OBJ = @CHANNEL_OBJ@
+-
+- RUBY = @vi_cv_path_ruby@
+- RUBY_SRC = @RUBY_SRC@
+- RUBY_OBJ = @RUBY_OBJ@
+- RUBY_PRO = @RUBY_PRO@
+- RUBY_CFLAGS = @RUBY_CFLAGS@
+- RUBY_LIBS = @RUBY_LIBS@
+-
+- AWK = @AWK@
+-
+- STRIP = @STRIP@
+-
+- EXEEXT = @EXEEXT@
+-
+- COMPILEDBY = @compiledby@
+-
+- INSTALLVIMDIFF = @dovimdiff@
+- INSTALLGVIMDIFF = @dogvimdiff@
+- INSTALL_LANGS = @INSTALL_LANGS@
+- INSTALL_TOOL_LANGS = @INSTALL_TOOL_LANGS@
+-
+- ### Line break character as octal number for "tr"
+- NL = @line_break@
+-
+- ### Top directory for everything
+- # Can be overruled with "PREFIX=dir", thus delay using it.
+- prefix = @prefix@
+-
+- ### Top directory for the binary
+- exec_prefix $= @exec_prefix@
+-
+- ### Prefix for location of data files
+- BINDIR $= @bindir@
+-
+- ### For autoconf 2.60 and later (avoid a warning)
+- datarootdir $= @datarootdir@
+-
+- ### Prefix for location of data files
+- DATADIR $= @datadir@
+-
+- ### Prefix for location of man pages
+- MANDIR $= @mandir@
+-
+- ### Do we have a GUI
+- GUI = @GUITYPE@
+- NARROW_PROTO = @NARROW_PROTO@
+- GTK_LIBNAME = @GTK_LIBNAME@
+- MOTIF_LIBNAME = @MOTIF_LIBNAME@
+- GUI_INC_LOC = @GUI_INC_LOC@
+- GUI_LIB_LOC = @GUI_LIB_LOC@
+- GUI_X_LIBS = @GUI_X_LIBS@
+-
+- ### Any OS dependent extra source and object file
+- OS_EXTRA_SRC = @OS_EXTRA_SRC@
+- OS_EXTRA_OBJ = @OS_EXTRA_OBJ@
+-
+- ### If the *.po files are to be translated to *.mo files.
+- MAKEMO = @MAKEMO@
+-
+- # Make sure that "make first" will run "make all" once configure has done its
+- # work. This is needed when using the Makefile in the top directory.
+- first: all
+--- 0 ----
+*** ../vim-8.1.0345/runtime/macros/maze/main.aap 2010-05-15 13:04:01.000000000 +0200
+--- runtime/macros/maze/main.aap 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,4 ****
+- # Aap recipe to build the maze program
+- :program maze : mazeansi.c
+-
+- :program mazeclean : mazeclean.c
+--- 0 ----
+*** ../vim-8.1.0345/src/version.c 2018-09-02 15:18:38.910627833 +0200
+--- src/version.c 2018-09-02 15:25:50.977703769 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 346,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+11. You find yourself typing "com" after every period when using a word
+ processor.com
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0347 b/data/vim/patches/8.1.0347
new file mode 100644
index 000000000..4c45fdef8
--- /dev/null
+++ b/data/vim/patches/8.1.0347
@@ -0,0 +1,174 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0347
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0347
+Problem: Some tests fail on Solaris.
+Solution: Skip writefile test. Fix path to libc.so. Improve test for Turkish
+ case change. (Libor Bukata, Bjorn Linse, closes #3403)
+Files: src/testdir/test_functions.vim, src/testdir/test_normal.vim,
+ src/testdir/test_writefile.vim
+
+
+*** ../vim-8.1.0346/src/testdir/test_functions.vim 2018-08-20 22:53:00.210105086 +0200
+--- src/testdir/test_functions.vim 2018-09-03 22:05:48.870072965 +0200
+***************
+*** 1,4 ****
+--- 1,5 ----
+ " Tests for various functions.
++ source shared.vim
+
+ " Must be done first, since the alternate buffer must be unset.
+ func Test_00_bufexists()
+***************
+*** 1006,1011 ****
+--- 1007,1023 ----
+ let libc = 'msvcrt.dll'
+ elseif has('mac')
+ let libc = 'libSystem.B.dylib'
++ elseif system('uname -s') =~ 'SunOS'
++ " Set the path to libc.so according to the architecture.
++ let test_bits = system('file ' . GetVimProg())
++ let test_arch = system('uname -p')
++ if test_bits =~ '64-bit' && test_arch =~ 'sparc'
++ let libc = '/usr/lib/sparcv9/libc.so'
++ elseif test_bits =~ '64-bit' && test_arch =~ 'i386'
++ let libc = '/usr/lib/amd64/libc.so'
++ else
++ let libc = '/usr/lib/libc.so'
++ endif
+ else
+ " On Unix, libc.so can be in various places.
+ " Interestingly, using an empty string for the 1st argument of libcall
+*** ../vim-8.1.0346/src/testdir/test_normal.vim 2018-08-24 22:07:54.094796047 +0200
+--- src/testdir/test_normal.vim 2018-09-03 22:02:34.495974021 +0200
+***************
+*** 1630,1641 ****
+ norm! V~
+ call assert_equal('THIS IS A simple test: äüöss', getline('.'))
+
+! " Turkish ASCII turns to multi-byte. On Mac the Turkish locale is available
+! " but toupper()/tolower() don't do the right thing.
+! if !has('mac') && !has('osx')
+! try
+! lang tr_TR.UTF-8
+! set casemap=
+ call setline(1, 'iI')
+ 1normal gUU
+ call assert_equal("\u0130I", getline(1))
+--- 1630,1642 ----
+ norm! V~
+ call assert_equal('THIS IS A simple test: äüöss', getline('.'))
+
+! " Turkish ASCII turns to multi-byte. On some systems Turkish locale
+! " is available but toupper()/tolower() don't do the right thing.
+! try
+! lang tr_TR.UTF-8
+! set casemap=
+! let iupper = toupper('i')
+! if iupper == "\u0130"
+ call setline(1, 'iI')
+ 1normal gUU
+ call assert_equal("\u0130I", getline(1))
+***************
+*** 1645,1652 ****
+ 1normal guu
+ call assert_equal("i\u0131", getline(1))
+ call assert_equal("i\u0131", tolower("iI"))
+!
+! set casemap&
+ call setline(1, 'iI')
+ 1normal gUU
+ call assert_equal("II", getline(1))
+--- 1646,1652 ----
+ 1normal guu
+ call assert_equal("i\u0131", getline(1))
+ call assert_equal("i\u0131", tolower("iI"))
+! elseif iupper == "I"
+ call setline(1, 'iI')
+ 1normal gUU
+ call assert_equal("II", getline(1))
+***************
+*** 1656,1668 ****
+ 1normal guu
+ call assert_equal("ii", getline(1))
+ call assert_equal("ii", tolower("iI"))
+!
+! lang en_US.UTF-8
+! catch /E197:/
+! " can't use Turkish locale
+! throw 'Skipped: Turkish locale not available'
+! endtry
+! endif
+
+ " clean up
+ bw!
+--- 1656,1680 ----
+ 1normal guu
+ call assert_equal("ii", getline(1))
+ call assert_equal("ii", tolower("iI"))
+! else
+! call assert_true(false, "expected toupper('i') to be either 'I' or '\u0130'")
+! endif
+! set casemap&
+! call setline(1, 'iI')
+! 1normal gUU
+! call assert_equal("II", getline(1))
+! call assert_equal("II", toupper("iI"))
+!
+! call setline(1, 'iI')
+! 1normal guu
+! call assert_equal("ii", getline(1))
+! call assert_equal("ii", tolower("iI"))
+!
+! lang en_US.UTF-8
+! catch /E197:/
+! " can't use Turkish locale
+! throw 'Skipped: Turkish locale not available'
+! endtry
+
+ " clean up
+ bw!
+*** ../vim-8.1.0346/src/testdir/test_writefile.vim 2018-08-30 13:07:12.026033864 +0200
+--- src/testdir/test_writefile.vim 2018-09-03 22:02:34.495974021 +0200
+***************
+*** 33,39 ****
+ endfunc
+
+ func Test_writefile_fails_conversion()
+! if !has('multi_byte') || !has('iconv')
+ return
+ endif
+ set nobackup nowritebackup
+--- 33,39 ----
+ endfunc
+
+ func Test_writefile_fails_conversion()
+! if !has('multi_byte') || !has('iconv') || system('uname -s') =~ 'SunOS'
+ return
+ endif
+ set nobackup nowritebackup
+*** ../vim-8.1.0346/src/version.c 2018-09-02 15:26:53.829022193 +0200
+--- src/version.c 2018-09-03 22:04:32.654818113 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 347,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+17. You turn on your intercom when leaving the room so you can hear if new
+ e-mail arrives.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0348 b/data/vim/patches/8.1.0348
new file mode 100644
index 000000000..dd8c83709
--- /dev/null
+++ b/data/vim/patches/8.1.0348
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0348
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0348
+Problem: On Travis the slowest build is run last. (Dominique Pelle)
+Solution: Reorder the build entries.
+Files: .travis.yml
+
+
+*** ../vim-8.1.0347/.travis.yml 2018-07-01 21:12:49.765572778 +0200
+--- .travis.yml 2018-09-05 22:23:08.543266993 +0200
+***************
+*** 10,28 ****
+ - gcc
+
+ env:
+ - BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+ - BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=normal CONFOPT= SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow CHECK_AUTOCONF=no
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+- - BUILD=yes TEST=test COVERAGE=no FEATURES=tiny CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ # Mac OSX build
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+- # ASAN build
+- - BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
+- FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
+- "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+
+ sudo: false
+
+--- 10,28 ----
+ - gcc
+
+ env:
++ - BUILD=yes TEST=test COVERAGE=no FEATURES=tiny CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
++ # ASAN build
++ - BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
++ FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
++ "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+ - BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+ - BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=normal CONFOPT= SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow CHECK_AUTOCONF=no
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ # Mac OSX build
+ - BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
+ "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'"
+
+ sudo: false
+
+*** ../vim-8.1.0347/src/version.c 2018-09-03 22:08:05.676736128 +0200
+--- src/version.c 2018-09-05 22:24:12.503252094 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 348,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+24. You realize there is not a sound in the house and you have no idea where
+ your children are.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0349 b/data/vim/patches/8.1.0349
new file mode 100644
index 000000000..bf71803cb
--- /dev/null
+++ b/data/vim/patches/8.1.0349
@@ -0,0 +1,187 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0349
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0349
+Problem: Crash when wiping buffer in a callback.
+Solution: Do not handle messages when only peeking for a character.
+ (closes #2107) Add "redraw_flag" to test_override().
+Files: src/os_unix.c, src/os_win32.c, src/screen.c, src/evalfunc.c,
+ src/globals.h, runtime/doc/eval.txt
+
+
+*** ../vim-8.1.0348/src/os_unix.c 2018-08-27 23:24:13.064009239 +0200
+--- src/os_unix.c 2018-09-06 13:12:40.441556794 +0200
+***************
+*** 417,426 ****
+ handle_resize();
+
+ #ifdef MESSAGE_QUEUE
+! parse_queued_messages();
+! /* If input was put directly in typeahead buffer bail out here. */
+! if (typebuf_changed(tb_change_cnt))
+! return 0;
+ #endif
+ if (wtime < 0 && did_start_blocking)
+ /* blocking and already waited for p_ut */
+--- 417,430 ----
+ handle_resize();
+
+ #ifdef MESSAGE_QUEUE
+! // Only process messages when waiting.
+! if (wtime != 0)
+! {
+! parse_queued_messages();
+! // If input was put directly in typeahead buffer bail out here.
+! if (typebuf_changed(tb_change_cnt))
+! return 0;
+! }
+ #endif
+ if (wtime < 0 && did_start_blocking)
+ /* blocking and already waited for p_ut */
+*** ../vim-8.1.0348/src/os_win32.c 2018-08-30 17:47:01.949560920 +0200
+--- src/os_win32.c 2018-09-06 12:12:22.506417572 +0200
+***************
+*** 1529,1543 ****
+ */
+ for (;;)
+ {
+ #ifdef MESSAGE_QUEUE
+! parse_queued_messages();
+ #endif
+ #ifdef FEAT_MZSCHEME
+! mzvim_check_threads();
+ #endif
+ #ifdef FEAT_CLIENTSERVER
+! serverProcessPendingMessages();
+ #endif
+
+ if (0
+ #ifdef FEAT_MOUSE
+--- 1529,1547 ----
+ */
+ for (;;)
+ {
++ // Only process messages when waiting.
++ if (msec != 0)
++ {
+ #ifdef MESSAGE_QUEUE
+! parse_queued_messages();
+ #endif
+ #ifdef FEAT_MZSCHEME
+! mzvim_check_threads();
+ #endif
+ #ifdef FEAT_CLIENTSERVER
+! serverProcessPendingMessages();
+ #endif
++ }
+
+ if (0
+ #ifdef FEAT_MOUSE
+*** ../vim-8.1.0348/src/screen.c 2018-09-02 15:07:21.977655529 +0200
+--- src/screen.c 2018-09-06 12:37:10.783837405 +0200
+***************
+*** 10819,10826 ****
+ return 0;
+ else
+ #endif
+! return (!RedrawingDisabled
+! && !(p_lz && char_avail() && !KeyTyped && !do_redraw));
+ }
+
+ /*
+--- 10819,10829 ----
+ return 0;
+ else
+ #endif
+! return ((!RedrawingDisabled
+! #ifdef FEAT_EVAL
+! || ignore_redraw_flag_for_testing
+! #endif
+! ) && !(p_lz && char_avail() && !KeyTyped && !do_redraw));
+ }
+
+ /*
+*** ../vim-8.1.0348/src/evalfunc.c 2018-09-02 14:25:02.330801508 +0200
+--- src/evalfunc.c 2018-09-06 12:38:22.375337484 +0200
+***************
+*** 13073,13078 ****
+--- 13073,13080 ----
+
+ if (STRCMP(name, (char_u *)"redraw") == 0)
+ disable_redraw_for_testing = val;
++ else if (STRCMP(name, (char_u *)"redraw_flag") == 0)
++ ignore_redraw_flag_for_testing = val;
+ else if (STRCMP(name, (char_u *)"char_avail") == 0)
+ disable_char_avail_for_testing = val;
+ else if (STRCMP(name, (char_u *)"starting") == 0)
+***************
+*** 13095,13100 ****
+--- 13097,13103 ----
+ {
+ disable_char_avail_for_testing = FALSE;
+ disable_redraw_for_testing = FALSE;
++ ignore_redraw_flag_for_testing = FALSE;
+ nfa_fail_for_testing = FALSE;
+ if (save_starting >= 0)
+ {
+*** ../vim-8.1.0348/src/globals.h 2018-08-21 19:47:44.720053833 +0200
+--- src/globals.h 2018-09-06 12:38:43.019189178 +0200
+***************
+*** 1633,1641 ****
+ EXTERN int alloc_fail_repeat INIT(= 0);
+
+ /* flags set by test_override() */
+! EXTERN int disable_char_avail_for_testing INIT(= 0);
+! EXTERN int disable_redraw_for_testing INIT(= 0);
+! EXTERN int nfa_fail_for_testing INIT(= 0);
+
+ EXTERN int in_free_unref_items INIT(= FALSE);
+ #endif
+--- 1633,1642 ----
+ EXTERN int alloc_fail_repeat INIT(= 0);
+
+ /* flags set by test_override() */
+! EXTERN int disable_char_avail_for_testing INIT(= FALSE);
+! EXTERN int disable_redraw_for_testing INIT(= FALSE);
+! EXTERN int ignore_redraw_flag_for_testing INIT(= FALSE);
+! EXTERN int nfa_fail_for_testing INIT(= FALSE);
+
+ EXTERN int in_free_unref_items INIT(= FALSE);
+ #endif
+*** ../vim-8.1.0348/runtime/doc/eval.txt 2018-09-02 15:18:38.906627880 +0200
+--- runtime/doc/eval.txt 2018-09-06 12:34:54.793088505 +0200
+***************
+*** 8728,8733 ****
+--- 8737,8743 ----
+
+ name effect when {val} is non-zero ~
+ redraw disable the redrawing() function
++ redraw_flag ignore the RedrawingDisabled flag
+ char_avail disable the char_avail() function
+ starting reset the "starting" variable, see below
+ nfa_fail makes the NFA regexp engine fail to force a
+*** ../vim-8.1.0348/src/version.c 2018-09-05 22:25:45.999112143 +0200
+--- src/version.c 2018-09-06 12:36:05.184408056 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 349,
+ /**/
+
+--
+Anyone who is capable of getting themselves made President should on no
+account be allowed to do the job.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0350 b/data/vim/patches/8.1.0350
new file mode 100644
index 000000000..1206f9c18
--- /dev/null
+++ b/data/vim/patches/8.1.0350
@@ -0,0 +1,219 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0350
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0350
+Problem: Vim may block on ch_sendraw() when the job is sending data back to
+ Vim, which isn't read yet. (Nate Bosch)
+Solution: Add the "noblock" option to job_start(). (closes #2548)
+Files: src/channel.c, src/structs.h, src/testdir/test_channel.vim,
+ runtime/doc/channel.txt
+
+
+*** ../vim-8.1.0349/src/channel.c 2018-08-09 22:15:30.042856715 +0200
+--- src/channel.c 2018-09-06 16:08:40.193230860 +0200
+***************
+*** 1180,1185 ****
+--- 1180,1186 ----
+ channel->ch_part[PART_OUT].ch_mode = opt->jo_out_mode;
+ if (opt->jo_set & JO_ERR_MODE)
+ channel->ch_part[PART_ERR].ch_mode = opt->jo_err_mode;
++ channel->ch_nonblock = opt->jo_noblock;
+
+ if (opt->jo_set & JO_TIMEOUT)
+ for (part = PART_SOCK; part < PART_COUNT; ++part)
+***************
+*** 3677,3683 ****
+ channel_set_nonblock(channel_T *channel, ch_part_T part)
+ {
+ chanpart_T *ch_part = &channel->ch_part[part];
+! int fd = ch_part->ch_fd;
+
+ if (fd != INVALID_FD)
+ {
+--- 3678,3684 ----
+ channel_set_nonblock(channel_T *channel, ch_part_T part)
+ {
+ chanpart_T *ch_part = &channel->ch_part[part];
+! int fd = ch_part->ch_fd;
+
+ if (fd != INVALID_FD)
+ {
+***************
+*** 3722,3727 ****
+--- 3723,3731 ----
+ return FAIL;
+ }
+
++ if (channel->ch_nonblock && !ch_part->ch_nonblocking)
++ channel_set_nonblock(channel, part);
++
+ if (ch_log_active())
+ {
+ ch_log_lead("SEND ", channel, part);
+***************
+*** 4553,4558 ****
+--- 4557,4568 ----
+ == FAIL)
+ return FAIL;
+ }
++ else if (STRCMP(hi->hi_key, "noblock") == 0)
++ {
++ if (!(supported & JO_MODE))
++ break;
++ opt->jo_noblock = get_tv_number(item);
++ }
+ else if (STRCMP(hi->hi_key, "in_io") == 0
+ || STRCMP(hi->hi_key, "out_io") == 0
+ || STRCMP(hi->hi_key, "err_io") == 0)
+*** ../vim-8.1.0349/src/structs.h 2018-06-30 18:27:59.897025143 +0200
+--- src/structs.h 2018-09-06 15:30:31.063357009 +0200
+***************
+*** 1651,1656 ****
+--- 1651,1657 ----
+ partial_T *ch_close_partial;
+ int ch_drop_never;
+ int ch_keep_open; /* do not close on read error */
++ int ch_nonblock;
+
+ job_T *ch_job; /* Job that uses this channel; this does not
+ * count as a reference to avoid a circular
+***************
+*** 1729,1734 ****
+--- 1730,1736 ----
+ ch_mode_T jo_in_mode;
+ ch_mode_T jo_out_mode;
+ ch_mode_T jo_err_mode;
++ int jo_noblock;
+
+ job_io_T jo_io[4]; /* PART_OUT, PART_ERR, PART_IN */
+ char_u jo_io_name_buf[4][NUMBUFLEN];
+*** ../vim-8.1.0349/src/testdir/test_channel.vim 2018-04-28 21:07:37.000000000 +0200
+--- src/testdir/test_channel.vim 2018-09-06 16:05:43.771212320 +0200
+***************
+*** 47,54 ****
+--- 47,57 ----
+ func Ch_communicate(port)
+ " Avoid dropping messages, since we don't use a callback here.
+ let s:chopt.drop = 'never'
++ " Also add the noblock flag to try it out.
++ let s:chopt.noblock = 1
+ let handle = ch_open('localhost:' . a:port, s:chopt)
+ unlet s:chopt.drop
++ unlet s:chopt.noblock
+ if ch_status(handle) == "fail"
+ call assert_report("Can't open channel")
+ return
+***************
+*** 451,458 ****
+ call ch_log('Test_raw_pipe()')
+ " Add a dummy close callback to avoid that messages are dropped when calling
+ " ch_canread().
+ let job = job_start(s:python . " test_channel_pipe.py",
+! \ {'mode': 'raw', 'drop': 'never'})
+ call assert_equal(v:t_job, type(job))
+ call assert_equal("run", job_status(job))
+
+--- 454,462 ----
+ call ch_log('Test_raw_pipe()')
+ " Add a dummy close callback to avoid that messages are dropped when calling
+ " ch_canread().
++ " Also test the non-blocking option.
+ let job = job_start(s:python . " test_channel_pipe.py",
+! \ {'mode': 'raw', 'drop': 'never', 'noblock': 1})
+ call assert_equal(v:t_job, type(job))
+ call assert_equal("run", job_status(job))
+
+***************
+*** 1349,1354 ****
+--- 1353,1386 ----
+ endfunc
+
+ """"""""""
++
++ function ExitCbWipe(job, status)
++ exe g:wipe_buf 'bw!'
++ endfunction
++
++ " This caused a crash, because messages were handled while peeking for a
++ " character.
++ func Test_exit_cb_wipes_buf()
++ if !has('timers')
++ return
++ endif
++ set cursorline lazyredraw
++ call test_override('redraw_flag', 1)
++ new
++ let g:wipe_buf = bufnr('')
++
++ let job = job_start(['true'], {'exit_cb': 'ExitCbWipe'})
++ let timer = timer_start(300, {-> feedkeys("\<Esc>", 'nt')}, {'repeat': 5})
++ call feedkeys(repeat('g', 1000) . 'o', 'ntx!')
++ call WaitForAssert({-> assert_equal("dead", job_status(job))})
++ call timer_stop(timer)
++
++ set nocursorline nolazyredraw
++ unlet g:wipe_buf
++ call test_override('ALL', 0)
++ endfunc
++
++ """"""""""
+
+ let g:Ch_unletResponse = ''
+ func s:UnletHandler(handle, msg)
+*** ../vim-8.1.0349/runtime/doc/channel.txt 2018-06-03 14:42:17.824505143 +0200
+--- runtime/doc/channel.txt 2018-09-06 16:14:07.501586039 +0200
+***************
+*** 163,168 ****
+--- 163,171 ----
+ The "close_cb" is also considered for this.
+ "never" All messages will be kept.
+
++ *channel-noblock*
++ "noblock" Same effect as |job-noblock|. Only matters for writing.
++
+ *waittime*
+ "waittime" The time to wait for the connection to be made in
+ milliseconds. A negative number waits forever.
+***************
+*** 594,599 ****
+--- 597,613 ----
+ Note: when writing to a file or buffer and when
+ reading from a buffer NL mode is used by default.
+
++ *job-noblock*
++ "noblock": 1 When writing use a non-blocking write call. This
++ avoids getting stuck if Vim should handle other
++ messages in between, e.g. when a job sends back data
++ to Vim. It implies that when `ch_sendraw()` returns
++ not all data may have been written yet.
++ This option was added in patch 8.1.0350, test with: >
++ if has("patch-8.1.350")
++ let options['noblock'] = 1
++ endif
++ <
+ *job-callback*
+ "callback": handler Callback for something to read on any part of the
+ channel.
+*** ../vim-8.1.0349/src/version.c 2018-09-06 13:14:39.148722497 +0200
+--- src/version.c 2018-09-06 16:25:42.981907095 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 350,
+ /**/
+
+--
+I have a drinking problem -- I can't afford it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0351 b/data/vim/patches/8.1.0351
new file mode 100644
index 000000000..d4427da21
--- /dev/null
+++ b/data/vim/patches/8.1.0351
@@ -0,0 +1,194 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0351
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0351
+Problem: 'incsearch' for :/foo/s//<Esc> changes last search pattern.
+Solution: Save the last search pattern earlier.
+Files: src/ex_docmd.c, src/ex_getln.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0350/src/ex_docmd.c 2018-08-30 15:58:23.244944556 +0200
+--- src/ex_docmd.c 2018-09-06 21:39:52.646486318 +0200
+***************
+*** 2911,2916 ****
+--- 2911,2917 ----
+
+ /*
+ * Parse the address range, if any, in "eap".
++ * May set the last search pattern.
+ * Return FAIL and set "errormsg" or return OK.
+ */
+ int
+***************
+*** 4436,4445 ****
+ }
+
+ /*
+! * get a single EX address
+ *
+ * Set ptr to the next character after the part that was interpreted.
+ * Set ptr to NULL when an error is encountered.
+ *
+ * Return MAXLNUM when no Ex address was found.
+ */
+--- 4437,4447 ----
+ }
+
+ /*
+! * Get a single EX address.
+ *
+ * Set ptr to the next character after the part that was interpreted.
+ * Set ptr to NULL when an error is encountered.
++ * This may set the last used search pattern.
+ *
+ * Return MAXLNUM when no Ex address was found.
+ */
+*** ../vim-8.1.0350/src/ex_getln.c 2018-08-31 22:09:31.561549259 +0200
+--- src/ex_getln.c 2018-09-06 21:39:30.638725276 +0200
+***************
+*** 271,276 ****
+--- 271,277 ----
+ /*
+ * Return TRUE when 'incsearch' highlighting is to be done.
+ * Sets search_first_line and search_last_line to the address range.
++ * May change the last search pattern.
+ */
+ static int
+ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
+***************
+*** 470,477 ****
+--- 471,482 ----
+ int next_char;
+ int use_last_pat;
+
++ // Parsing range may already set the last search pattern.
++ save_last_search_pattern();
++
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+ {
++ restore_last_search_pattern();
+ finish_incsearch_highlighting(FALSE, is_state, TRUE);
+ return;
+ }
+***************
+*** 479,484 ****
+--- 484,490 ----
+ // If there is a character waiting, search and redraw later.
+ if (char_avail())
+ {
++ restore_last_search_pattern();
+ is_state->incsearch_postponed = TRUE;
+ return;
+ }
+***************
+*** 493,499 ****
+ curwin->w_cursor.lnum = search_first_line;
+ curwin->w_cursor.col = 0;
+ }
+- save_last_search_pattern();
+
+ // Use the previous pattern for ":s//".
+ next_char = ccline.cmdbuff[skiplen + patlen];
+--- 499,504 ----
+***************
+*** 627,636 ****
+--- 632,650 ----
+ int i;
+ int save;
+
++ // Parsing range may already set the last search pattern.
++ save_last_search_pattern();
++
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
++ {
++ restore_last_search_pattern();
+ return OK;
++ }
+ if (patlen == 0 && ccline.cmdbuff[skiplen] == NUL)
++ {
++ restore_last_search_pattern();
+ return FAIL;
++ }
+
+ if (firstc == ccline.cmdbuff[skiplen])
+ {
+***************
+*** 641,647 ****
+ else
+ pat = ccline.cmdbuff + skiplen;
+
+- save_last_search_pattern();
+ cursor_off();
+ out_flush();
+ if (c == Ctrl_G)
+--- 655,660 ----
+***************
+*** 721,728 ****
+--- 734,747 ----
+ {
+ int skiplen, patlen;
+
++ // Parsing range may already set the last search pattern.
++ save_last_search_pattern();
++
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
++ {
++ restore_last_search_pattern();
+ return FAIL;
++ }
+
+ // Add a character from under the cursor for 'incsearch'.
+ if (is_state->did_incsearch)
+*** ../vim-8.1.0350/src/testdir/test_search.vim 2018-08-31 22:09:31.561549259 +0200
+--- src/testdir/test_search.vim 2018-09-06 21:36:42.844553891 +0200
+***************
+*** 1043,1048 ****
+--- 1043,1065 ----
+ call delete('Xis_vimgrep_script')
+ endfunc
+
++ func Test_keep_last_search_pattern()
++ if !exists('+incsearch')
++ return
++ endif
++ new
++ call setline(1, ['foo', 'foo', 'foo'])
++ set incsearch
++ call test_override("char_avail", 1)
++ let @/ = 'bar'
++ call feedkeys(":/foo/s//\<Esc>", 'ntx')
++ call assert_equal('bar', @/)
++
++ bwipe!
++ call test_override("ALL", 0)
++ set noincsearch
++ endfunc
++
+ func Test_search_undefined_behaviour()
+ if !has("terminal")
+ return
+*** ../vim-8.1.0350/src/version.c 2018-09-06 16:27:20.664831945 +0200
+--- src/version.c 2018-09-06 21:33:45.218506207 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 351,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+3. Every time someone asks you to do something, ask if they want fries
+ with that.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0352 b/data/vim/patches/8.1.0352
new file mode 100644
index 000000000..75ff41085
--- /dev/null
+++ b/data/vim/patches/8.1.0352
@@ -0,0 +1,179 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0352
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0352
+Problem: Browsing compressed tar files does not always work.
+Solution: Use the "file" command to get the compression type.
+Files: runtime/autoload/tar.vim
+
+
+*** ../vim-8.1.0351/runtime/autoload/tar.vim 2016-09-25 21:41:24.000000000 +0200
+--- runtime/autoload/tar.vim 2018-09-08 15:09:32.841486806 +0200
+***************
+*** 152,161 ****
+ " assuming cygwin
+ let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
+ endif
+ let curlast= line("$")
+ if tarfile =~# '\.\(gz\|tgz\)$'
+ " call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+! exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+ elseif tarfile =~# '\.lrp'
+ " call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
+ exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
+--- 152,163 ----
+ " assuming cygwin
+ let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
+ endif
++
+ let curlast= line("$")
+ if tarfile =~# '\.\(gz\|tgz\)$'
++ let gzip_command = s:get_gzip_command(tarfile)
+ " call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+! exe "sil! r! " . gzip_command . " -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+ elseif tarfile =~# '\.lrp'
+ " call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
+ exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
+***************
+*** 287,298 ****
+ else
+ let tar_secure= " "
+ endif
+ if tarfile =~# '\.bz2$'
+ " call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+ exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+ elseif tarfile =~# '\.\(gz\|tgz\)$'
+ " call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
+! exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+ elseif tarfile =~# '\.lrp$'
+ " call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+ exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+--- 289,302 ----
+ else
+ let tar_secure= " "
+ endif
++
+ if tarfile =~# '\.bz2$'
+ " call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+ exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+ elseif tarfile =~# '\.\(gz\|tgz\)$'
++ let gzip_command = s:get_gzip_command(tarfile)
+ " call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
+! exe "sil! r! " . gzip_command . " -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+ elseif tarfile =~# '\.lrp$'
+ " call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+ exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+***************
+*** 389,394 ****
+--- 393,400 ----
+ let tarfile = substitute(b:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
+ let fname = substitute(b:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
+
++ let gzip_command = s:get_gzip_command(tarfile)
++
+ " handle compressed archives
+ if tarfile =~# '\.bz2'
+ call system("bzip2 -d -- ".shellescape(tarfile,0))
+***************
+*** 396,407 ****
+ let compress= "bzip2 -- ".shellescape(tarfile,0)
+ " call Decho("compress<".compress.">")
+ elseif tarfile =~# '\.gz'
+! call system("gzip -d -- ".shellescape(tarfile,0))
+ let tarfile = substitute(tarfile,'\.gz','','e')
+ let compress= "gzip -- ".shellescape(tarfile,0)
+ " call Decho("compress<".compress.">")
+ elseif tarfile =~# '\.tgz'
+! call system("gzip -d -- ".shellescape(tarfile,0))
+ let tarfile = substitute(tarfile,'\.tgz','.tar','e')
+ let compress= "gzip -- ".shellescape(tarfile,0)
+ let tgz = 1
+--- 402,413 ----
+ let compress= "bzip2 -- ".shellescape(tarfile,0)
+ " call Decho("compress<".compress.">")
+ elseif tarfile =~# '\.gz'
+! call system(gzip_command . " -d -- ".shellescape(tarfile,0))
+ let tarfile = substitute(tarfile,'\.gz','','e')
+ let compress= "gzip -- ".shellescape(tarfile,0)
+ " call Decho("compress<".compress.">")
+ elseif tarfile =~# '\.tgz'
+! call system(gzip_command . " -d -- ".shellescape(tarfile,0))
+ let tarfile = substitute(tarfile,'\.tgz','.tar','e')
+ let compress= "gzip -- ".shellescape(tarfile,0)
+ let tgz = 1
+***************
+*** 581,587 ****
+
+ " if necessary, decompress the tarball; then, extract it
+ if tartail =~ '\.tgz'
+! if executable("gunzip")
+ silent exe "!gunzip ".shellescape(tartail)
+ elseif executable("gzip")
+ silent exe "!gzip -d ".shellescape(tartail)
+--- 587,596 ----
+
+ " if necessary, decompress the tarball; then, extract it
+ if tartail =~ '\.tgz'
+! let gzip_command = s:get_gzip_command(tarfile)
+! if executable(gzip_command)
+! silent exe "!" . gzip_command . " -d ".shellescape(tartail)
+! elseif executable("gunzip")
+ silent exe "!gunzip ".shellescape(tartail)
+ elseif executable("gzip")
+ silent exe "!gzip -d ".shellescape(tartail)
+***************
+*** 619,624 ****
+--- 628,655 ----
+ " call Dret("tar#Vimuntar")
+ endfun
+
++ func s:get_gzip_command(file)
++ " Try using the "file" command to get the actual compression type, since
++ " there is no standard way for the naming: ".tgz", ".tbz", ".txz", etc.
++ " If the "file" command doesn't work fall back to just using the file name.
++ if a:file =~# 'z$'
++ let filetype = system('file ' . a:file)
++ if filetype =~ 'bzip2 compressed' && executable('bzip2')
++ return 'bzip2'
++ endif
++ if filetype =~ 'XZ compressed' && executable('xz')
++ return 'xz'
++ endif
++ endif
++ if a:file =~# 'bz2$'
++ return 'bzip2'
++ endif
++ if a:file =~# 'xz$'
++ return 'xz'
++ endif
++ return 'gzip'
++ endfunc
++
+ " =====================================================================
+ " Modelines And Restoration: {{{1
+ let &cpo= s:keepcpo
+*** ../vim-8.1.0351/src/version.c 2018-09-06 21:44:13.660006996 +0200
+--- src/version.c 2018-09-08 14:57:29.304425238 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 352,
+ /**/
+
+--
+If Pacman had affected us as kids we'd be running around in dark rooms,
+munching pills and listening to repetitive music.
+ -- Marcus Brigstocke
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0353 b/data/vim/patches/8.1.0353
new file mode 100644
index 000000000..842e839c8
--- /dev/null
+++ b/data/vim/patches/8.1.0353
@@ -0,0 +1,283 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0353
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0353
+Problem: An "after" directory of a package is appended to 'rtp', which
+ will be after the user's "after" directory. ()
+Solution: Insert the package "after" directory before any other "after"
+ directory in 'rtp'. (closes #3409)
+Files: src/ex_cmds2.c, src/testdir/test_packadd.vim
+
+
+*** ../vim-8.1.0352/src/ex_cmds2.c 2018-08-31 23:06:18.735841246 +0200
+--- src/ex_cmds2.c 2018-09-08 18:03:22.848808156 +0200
+***************
+*** 3691,3704 ****
+ add_pack_dir_to_rtp(char_u *fname)
+ {
+ char_u *p4, *p3, *p2, *p1, *p;
+! char_u *insp;
+ int c;
+ char_u *new_rtp;
+ int keep;
+ size_t oldlen;
+ size_t addlen;
+ char_u *afterdir = NULL;
+ size_t afterlen = 0;
+ char_u *ffname = NULL;
+ size_t fname_len;
+ char_u *buf = NULL;
+--- 3691,3707 ----
+ add_pack_dir_to_rtp(char_u *fname)
+ {
+ char_u *p4, *p3, *p2, *p1, *p;
+! char_u *entry;
+! char_u *insp = NULL;
+ int c;
+ char_u *new_rtp;
+ int keep;
+ size_t oldlen;
+ size_t addlen;
++ size_t new_rtp_len;
+ char_u *afterdir = NULL;
+ size_t afterlen = 0;
++ char_u *after_insp = NULL;
+ char_u *ffname = NULL;
+ size_t fname_len;
+ char_u *buf = NULL;
+***************
+*** 3725,3778 ****
+ if (ffname == NULL)
+ return FAIL;
+
+! /* Find "ffname" in "p_rtp", ignoring '/' vs '\' differences. */
+ fname_len = STRLEN(ffname);
+- insp = p_rtp;
+ buf = alloc(MAXPATHL);
+ if (buf == NULL)
+ goto theend;
+! while (*insp != NUL)
+ {
+! copy_option_part(&insp, buf, MAXPATHL, ",");
+! add_pathsep(buf);
+! rtp_ffname = fix_fname(buf);
+! if (rtp_ffname == NULL)
+! goto theend;
+! match = vim_fnamencmp(rtp_ffname, ffname, fname_len) == 0;
+! vim_free(rtp_ffname);
+! if (match)
+ break;
+ }
+
+! if (*insp == NUL)
+! /* not found, append at the end */
+ insp = p_rtp + STRLEN(p_rtp);
+- else
+- /* append after the matching directory. */
+- --insp;
+
+! /* check if rtp/pack/name/start/name/after exists */
+ afterdir = concat_fnames(fname, (char_u *)"after", TRUE);
+ if (afterdir != NULL && mch_isdir(afterdir))
+! afterlen = STRLEN(afterdir) + 1; /* add one for comma */
+
+ oldlen = STRLEN(p_rtp);
+! addlen = STRLEN(fname) + 1; /* add one for comma */
+! new_rtp = alloc((int)(oldlen + addlen + afterlen + 1));
+! /* add one for NUL */
+ if (new_rtp == NULL)
+ goto theend;
+ keep = (int)(insp - p_rtp);
+ mch_memmove(new_rtp, p_rtp, keep);
+! new_rtp[keep] = ',';
+! mch_memmove(new_rtp + keep + 1, fname, addlen);
+ if (p_rtp[keep] != NUL)
+! mch_memmove(new_rtp + keep + addlen, p_rtp + keep, oldlen - keep + 1);
+! if (afterlen > 0)
+ {
+ STRCAT(new_rtp, ",");
+ STRCAT(new_rtp, afterdir);
+ }
+ set_option_value((char_u *)"rtp", 0L, new_rtp, 0);
+ vim_free(new_rtp);
+ retval = OK;
+--- 3728,3826 ----
+ if (ffname == NULL)
+ return FAIL;
+
+! // Find "ffname" in "p_rtp", ignoring '/' vs '\' differences.
+! // Also stop at the first "after" directory.
+ fname_len = STRLEN(ffname);
+ buf = alloc(MAXPATHL);
+ if (buf == NULL)
+ goto theend;
+! for (entry = p_rtp; *entry != NUL; )
+ {
+! char_u *cur_entry = entry;
+!
+! copy_option_part(&entry, buf, MAXPATHL, ",");
+! if (insp == NULL)
+! {
+! add_pathsep(buf);
+! rtp_ffname = fix_fname(buf);
+! if (rtp_ffname == NULL)
+! goto theend;
+! match = vim_fnamencmp(rtp_ffname, ffname, fname_len) == 0;
+! vim_free(rtp_ffname);
+! if (match)
+! // Insert "ffname" after this entry (and comma).
+! insp = entry;
+! }
+!
+! if ((p = (char_u *)strstr((char *)buf, "after")) != NULL
+! && p > buf
+! && vim_ispathsep(p[-1])
+! && (vim_ispathsep(p[5]) || p[5] == NUL || p[5] == ','))
+! {
+! if (insp == NULL)
+! // Did not find "ffname" before the first "after" directory,
+! // insert it before this entry.
+! insp = cur_entry;
+! after_insp = cur_entry;
+ break;
++ }
+ }
+
+! if (insp == NULL)
+! // Both "fname" and "after" not found, append at the end.
+ insp = p_rtp + STRLEN(p_rtp);
+
+! // check if rtp/pack/name/start/name/after exists
+ afterdir = concat_fnames(fname, (char_u *)"after", TRUE);
+ if (afterdir != NULL && mch_isdir(afterdir))
+! afterlen = STRLEN(afterdir) + 1; // add one for comma
+
+ oldlen = STRLEN(p_rtp);
+! addlen = STRLEN(fname) + 1; // add one for comma
+! new_rtp = alloc((int)(oldlen + addlen + afterlen + 1)); // add one for NUL
+ if (new_rtp == NULL)
+ goto theend;
++
++ // We now have 'rtp' parts: {keep}{keep_after}{rest}.
++ // Create new_rtp, first: {keep},{fname}
+ keep = (int)(insp - p_rtp);
+ mch_memmove(new_rtp, p_rtp, keep);
+! new_rtp_len = keep;
+! if (*insp == NUL)
+! new_rtp[new_rtp_len++] = ','; // add comma before
+! mch_memmove(new_rtp + new_rtp_len, fname, addlen - 1);
+! new_rtp_len += addlen - 1;
+! if (*insp != NUL)
+! new_rtp[new_rtp_len++] = ','; // add comma after
+!
+! if (afterlen > 0 && after_insp != NULL)
+! {
+! int keep_after = (int)(after_insp - p_rtp);
+!
+! // Add to new_rtp: {keep},{fname}{keep_after},{afterdir}
+! mch_memmove(new_rtp + new_rtp_len, p_rtp + keep,
+! keep_after - keep);
+! new_rtp_len += keep_after - keep;
+! mch_memmove(new_rtp + new_rtp_len, afterdir, afterlen - 1);
+! new_rtp_len += afterlen - 1;
+! new_rtp[new_rtp_len++] = ',';
+! keep = keep_after;
+! }
+!
+ if (p_rtp[keep] != NUL)
+! // Append rest: {keep},{fname}{keep_after},{afterdir}{rest}
+! mch_memmove(new_rtp + new_rtp_len, p_rtp + keep, oldlen - keep + 1);
+! else
+! new_rtp[new_rtp_len] = NUL;
+!
+! if (afterlen > 0 && after_insp == NULL)
+ {
++ // Append afterdir when "after" was not found:
++ // {keep},{fname}{rest},{afterdir}
+ STRCAT(new_rtp, ",");
+ STRCAT(new_rtp, afterdir);
+ }
++
+ set_option_value((char_u *)"rtp", 0L, new_rtp, 0);
+ vim_free(new_rtp);
+ retval = OK;
+*** ../vim-8.1.0352/src/testdir/test_packadd.vim 2018-04-18 21:56:13.000000000 +0200
+--- src/testdir/test_packadd.vim 2018-09-08 18:16:43.969062182 +0200
+***************
+*** 12,17 ****
+--- 12,22 ----
+ endfunc
+
+ func Test_packadd()
++ if !exists('s:plugdir')
++ echomsg 'when running this test manually, call SetUp() first'
++ return
++ endif
++
+ call mkdir(s:plugdir . '/plugin/also', 'p')
+ call mkdir(s:plugdir . '/ftdetect', 'p')
+ call mkdir(s:plugdir . '/after', 'p')
+***************
+*** 19,24 ****
+--- 24,37 ----
+ let rtp = &rtp
+ filetype on
+
++ let rtp_entries = split(rtp, ',')
++ for entry in rtp_entries
++ if entry =~? '\<after\>'
++ let first_after_entry = entry
++ break
++ endif
++ endfor
++
+ exe 'split ' . s:plugdir . '/plugin/test.vim'
+ call setline(1, 'let g:plugin_works = 42')
+ wq
+***************
+*** 38,44 ****
+ call assert_equal(17, g:ftdetect_works)
+ call assert_true(len(&rtp) > len(rtp))
+ call assert_match('/testdir/Xdir/pack/mine/opt/mytest\($\|,\)', &rtp)
+! call assert_match('/testdir/Xdir/pack/mine/opt/mytest/after$', &rtp)
+
+ " NOTE: '/.../opt/myte' forwardly matches with '/.../opt/mytest'
+ call mkdir(fnamemodify(s:plugdir, ':h') . '/myte', 'p')
+--- 51,62 ----
+ call assert_equal(17, g:ftdetect_works)
+ call assert_true(len(&rtp) > len(rtp))
+ call assert_match('/testdir/Xdir/pack/mine/opt/mytest\($\|,\)', &rtp)
+!
+! let new_after = match(&rtp, '/testdir/Xdir/pack/mine/opt/mytest/after,')
+! let old_after = match(&rtp, ',' . first_after_entry . '\>')
+! call assert_true(new_after > 0, 'rtp is ' . &rtp)
+! call assert_true(old_after > 0, 'rtp is ' . &rtp)
+! call assert_true(new_after < old_after, 'rtp is ' . &rtp)
+
+ " NOTE: '/.../opt/myte' forwardly matches with '/.../opt/mytest'
+ call mkdir(fnamemodify(s:plugdir, ':h') . '/myte', 'p')
+*** ../vim-8.1.0352/src/version.c 2018-09-08 15:10:14.405097082 +0200
+--- src/version.c 2018-09-08 17:01:12.259798047 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 353,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+14. Put mosquito netting around your work area. Play a tape of jungle
+ sounds all day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0354 b/data/vim/patches/8.1.0354
new file mode 100644
index 000000000..fb5a442de
--- /dev/null
+++ b/data/vim/patches/8.1.0354
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0354
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0354 (after 8.1.0353)
+Problem: Packadd test fails on MS-Windows.
+Solution: Ignore difference between forward and backward slashes.
+Files: src/testdir/test_packadd.vim
+
+
+*** ../vim-8.1.0353/src/testdir/test_packadd.vim 2018-09-08 18:21:10.438503190 +0200
+--- src/testdir/test_packadd.vim 2018-09-08 19:07:32.684241713 +0200
+***************
+*** 53,61 ****
+ call assert_match('/testdir/Xdir/pack/mine/opt/mytest\($\|,\)', &rtp)
+
+ let new_after = match(&rtp, '/testdir/Xdir/pack/mine/opt/mytest/after,')
+! let old_after = match(&rtp, ',' . first_after_entry . '\>')
+ call assert_true(new_after > 0, 'rtp is ' . &rtp)
+! call assert_true(old_after > 0, 'rtp is ' . &rtp)
+ call assert_true(new_after < old_after, 'rtp is ' . &rtp)
+
+ " NOTE: '/.../opt/myte' forwardly matches with '/.../opt/mytest'
+--- 53,62 ----
+ call assert_match('/testdir/Xdir/pack/mine/opt/mytest\($\|,\)', &rtp)
+
+ let new_after = match(&rtp, '/testdir/Xdir/pack/mine/opt/mytest/after,')
+! let forwarded = substitute(first_after_entry, '\\', '[/\\\\]', 'g')
+! let old_after = match(&rtp, ',' . forwarded . '\>')
+ call assert_true(new_after > 0, 'rtp is ' . &rtp)
+! call assert_true(old_after > 0, 'match ' . forwarded . ' in ' . &rtp)
+ call assert_true(new_after < old_after, 'rtp is ' . &rtp)
+
+ " NOTE: '/.../opt/myte' forwardly matches with '/.../opt/mytest'
+*** ../vim-8.1.0353/src/version.c 2018-09-08 18:21:10.438503190 +0200
+--- src/version.c 2018-09-08 18:31:17.896550895 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 354,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+16. Have your coworkers address you by your wrestling name, Rock Hard Kim.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0355 b/data/vim/patches/8.1.0355
new file mode 100644
index 000000000..97e4d3346
--- /dev/null
+++ b/data/vim/patches/8.1.0355
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0355
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0355
+Problem: Incorrect adjusting the popup menu for the preview window.
+Solution: Compute position and height properl. (Ronan Pigott) Also show at
+ least ten items. (closes #3414)
+Files: src/popupmnu.c
+
+
+*** ../vim-8.1.0354/src/popupmnu.c 2018-06-17 17:10:55.636590392 +0200
+--- src/popupmnu.c 2018-09-09 15:17:57.698993041 +0200
+***************
+*** 141,148 ****
+ if (p_ph > 0 && pum_height > p_ph)
+ pum_height = p_ph;
+
+! /* Put the pum below "pum_win_row" if possible. If there are few lines decide
+! * on where there is more room. */
+ if (pum_win_row + 2 >= below_row - pum_height
+ && pum_win_row - above_row > (below_row - above_row) / 2)
+ {
+--- 141,148 ----
+ if (p_ph > 0 && pum_height > p_ph)
+ pum_height = p_ph;
+
+! /* Put the pum below "pum_win_row" if possible. If there are few lines
+! * decide on where there is more room. */
+ if (pum_win_row + 2 >= below_row - pum_height
+ && pum_win_row - above_row > (below_row - above_row) / 2)
+ {
+***************
+*** 196,206 ****
+ return;
+
+ #if defined(FEAT_QUICKFIX)
+! /* If there is a preview window at the above avoid drawing over it. */
+! if (pvwin != NULL && pum_row < above_row && pum_height > above_row)
+ {
+! pum_row += above_row;
+! pum_height -= above_row;
+ }
+ #endif
+
+--- 196,215 ----
+ return;
+
+ #if defined(FEAT_QUICKFIX)
+! // If there is a preview window at the above avoid drawing over it.
+! // Do keep at least 10 entries.
+! if (pvwin != NULL && pum_row < above_row && pum_height > 10)
+ {
+! if (pum_win_row - above_row < 10)
+! {
+! pum_row = pum_win_row - 10;
+! pum_height = 10;
+! }
+! else
+! {
+! pum_row = above_row;
+! pum_height = pum_win_row - above_row;
+! }
+ }
+ #endif
+
+*** ../vim-8.1.0354/src/version.c 2018-09-08 19:12:09.333935467 +0200
+--- src/version.c 2018-09-09 15:19:36.357838496 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 355,
+ /**/
+
+--
+In many of the more relaxed civilizations on the Outer Eastern Rim of the
+Galaxy, "The Hitchhiker's Guide to the Galaxy" has already supplanted the
+great "Encyclopedia Galactica" as the standard repository of all knowledge
+and wisdom, for though it has many omissions and contains much that is
+apocryphal, or at least wildly inaccurate, it scores over the older, more
+pedestrian work in two important respects.
+First, it is slightly cheaper; and second, it has the words "DON'T PANIC"
+inscribed in large friendly letters on its cover.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0356 b/data/vim/patches/8.1.0356
new file mode 100644
index 000000000..907ebef7e
--- /dev/null
+++ b/data/vim/patches/8.1.0356
@@ -0,0 +1,224 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0356
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0356
+Problem: Using :s with 'incsearch' prevents CTRL-R CTRL-W. (Boris Staletic)
+Solution: When past the pattern put cursor back in the start position.
+ (closes #3413)
+Files: src/ex_getln.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0355/src/ex_getln.c 2018-09-06 21:44:13.660006996 +0200
+--- src/ex_getln.c 2018-09-09 15:53:37.117142011 +0200
+***************
+*** 462,468 ****
+ incsearch_state_T *is_state)
+ {
+ int skiplen, patlen;
+! int i;
+ pos_T end_pos;
+ struct cmdline_info save_ccline;
+ #ifdef FEAT_RELTIME
+--- 462,468 ----
+ incsearch_state_T *is_state)
+ {
+ int skiplen, patlen;
+! int found; // do_search() result
+ pos_T end_pos;
+ struct cmdline_info save_ccline;
+ #ifdef FEAT_RELTIME
+***************
+*** 508,514 ****
+ // If there is no pattern, don't do anything.
+ if (patlen == 0 && !use_last_pat)
+ {
+! i = 0;
+ set_no_hlsearch(TRUE); // turn off previous highlight
+ redraw_all_later(SOME_VALID);
+ }
+--- 508,514 ----
+ // If there is no pattern, don't do anything.
+ if (patlen == 0 && !use_last_pat)
+ {
+! found = 0;
+ set_no_hlsearch(TRUE); // turn off previous highlight
+ redraw_all_later(SOME_VALID);
+ }
+***************
+*** 528,534 ****
+ if (search_first_line != 0)
+ search_flags += SEARCH_START;
+ ccline.cmdbuff[skiplen + patlen] = NUL;
+! i = do_search(NULL, firstc == ':' ? '/' : firstc,
+ ccline.cmdbuff + skiplen, count, search_flags,
+ #ifdef FEAT_RELTIME
+ &tm, NULL
+--- 528,534 ----
+ if (search_first_line != 0)
+ search_flags += SEARCH_START;
+ ccline.cmdbuff[skiplen + patlen] = NUL;
+! found = do_search(NULL, firstc == ':' ? '/' : firstc,
+ ccline.cmdbuff + skiplen, count, search_flags,
+ #ifdef FEAT_RELTIME
+ &tm, NULL
+***************
+*** 543,549 ****
+ || curwin->w_cursor.lnum > search_last_line)
+ {
+ // match outside of address range
+! i = 0;
+ curwin->w_cursor = is_state->search_start;
+ }
+
+--- 543,549 ----
+ || curwin->w_cursor.lnum > search_last_line)
+ {
+ // match outside of address range
+! found = 0;
+ curwin->w_cursor = is_state->search_start;
+ }
+
+***************
+*** 552,564 ****
+ {
+ (void)vpeekc(); // remove <C-C> from input stream
+ got_int = FALSE; // don't abandon the command line
+! i = 0;
+ }
+ else if (char_avail())
+ // cancelled searching because a char was typed
+ is_state->incsearch_postponed = TRUE;
+ }
+! if (i != 0)
+ highlight_match = TRUE; // highlight position
+ else
+ highlight_match = FALSE; // remove highlight
+--- 552,564 ----
+ {
+ (void)vpeekc(); // remove <C-C> from input stream
+ got_int = FALSE; // don't abandon the command line
+! found = 0;
+ }
+ else if (char_avail())
+ // cancelled searching because a char was typed
+ is_state->incsearch_postponed = TRUE;
+ }
+! if (found != 0)
+ highlight_match = TRUE; // highlight position
+ else
+ highlight_match = FALSE; // remove highlight
+***************
+*** 569,575 ****
+ changed_cline_bef_curs();
+ update_topline();
+
+! if (i != 0)
+ {
+ pos_T save_pos = curwin->w_cursor;
+
+--- 569,575 ----
+ changed_cline_bef_curs();
+ update_topline();
+
+! if (found != 0)
+ {
+ pos_T save_pos = curwin->w_cursor;
+
+***************
+*** 604,611 ****
+ restore_cmdline(&save_ccline);
+ restore_last_search_pattern();
+
+! // Leave it at the end to make CTRL-R CTRL-W work.
+! if (i != 0)
+ curwin->w_cursor = end_pos;
+
+ msg_starthere();
+--- 604,614 ----
+ restore_cmdline(&save_ccline);
+ restore_last_search_pattern();
+
+! // Leave it at the end to make CTRL-R CTRL-W work. But not when beyond the
+! // end of the pattern, e.g. for ":s/pat/".
+! if (ccline.cmdbuff[skiplen + patlen] != NUL)
+! curwin->w_cursor = is_state->search_start;
+! else if (found != 0)
+ curwin->w_cursor = end_pos;
+
+ msg_starthere();
+*** ../vim-8.1.0355/src/testdir/test_search.vim 2018-09-06 21:44:13.660006996 +0200
+--- src/testdir/test_search.vim 2018-09-09 15:50:31.934618534 +0200
+***************
+*** 1060,1065 ****
+--- 1060,1101 ----
+ set noincsearch
+ endfunc
+
++ func Test_word_under_cursor_after_match()
++ if !exists('+incsearch')
++ return
++ endif
++ new
++ call setline(1, 'foo bar')
++ set incsearch
++ call test_override("char_avail", 1)
++ try
++ call feedkeys("/foo\<C-R>\<C-W>\<CR>", 'ntx')
++ catch /E486:/
++ endtry
++ call assert_equal('foobar', @/)
++
++ bwipe!
++ call test_override("ALL", 0)
++ set noincsearch
++ endfunc
++
++ func Test_subst_word_under_cursor()
++ if !exists('+incsearch')
++ return
++ endif
++ new
++ call setline(1, ['int SomeLongName;', 'for (xxx = 1; xxx < len; ++xxx)'])
++ set incsearch
++ call test_override("char_avail", 1)
++ call feedkeys("/LongName\<CR>", 'ntx')
++ call feedkeys(":%s/xxx/\<C-R>\<C-W>/g\<CR>", 'ntx')
++ call assert_equal('for (SomeLongName = 1; SomeLongName < len; ++SomeLongName)', getline(2))
++
++ bwipe!
++ call test_override("ALL", 0)
++ set noincsearch
++ endfunc
++
+ func Test_search_undefined_behaviour()
+ if !has("terminal")
+ return
+*** ../vim-8.1.0355/src/version.c 2018-09-09 15:27:54.812344748 +0200
+--- src/version.c 2018-09-09 15:52:51.437517050 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 356,
+ /**/
+
+--
+"So this is it," said Arthur, "we are going to die."
+"Yes," said Ford, "except...no! Wait a minute!" He suddenly lunged across
+the chamber at something behind Arthur's line of vision. "What's this
+switch?" he cried.
+"What? Where?" cried Arthur, twisting around.
+"No, I was only fooling," said Ford, "we are going to die after all."
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0357 b/data/vim/patches/8.1.0357
new file mode 100644
index 000000000..6b677046f
--- /dev/null
+++ b/data/vim/patches/8.1.0357
@@ -0,0 +1,102 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0357
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0357
+Problem: Instructions for tests are outdated. (Jason Franklin)
+Solution: Update the text.
+Files: src/testdir/README.txt
+
+
+*** ../vim-8.1.0356/src/testdir/README.txt 2018-02-20 15:36:03.000000000 +0100
+--- src/testdir/README.txt 2018-09-01 14:24:39.775264173 +0200
+***************
+*** 15,37 ****
+
+ 1) Create a test_<subject>.vim file.
+ 2) Add test_<subject>.res to NEW_TESTS in Make_all.mak in alphabetical order.
+! 3) Also add an entry in src/Makefile.
+ 4) Use make test_<subject>.res to run a single test in src/testdir/.
+ Use make test_<subject> to run a single test in src/.
+
+ What you can use (see test_assert.vim for an example):
+ - Call assert_equal(), assert_true(), assert_false(), etc.
+! - Use try/catch to check for exceptions.
+! - Use alloc_fail() to have memory allocation fail. This makes it possible
+! to check memory allocation failures are handled gracefully. You need to
+! change the source code to add an ID to the allocation. Update LAST_ID_USED
+! above alloc_id() to the highest ID used.
+! - Use disable_char_avail_for_testing(1) if char_avail() must return FALSE for
+! a while. E.g. to trigger the CursorMovedI autocommand event.
+! See test_cursor_func.vim for an example
+ - If the bug that is being tested isn't fixed yet, you can throw an exception
+! so that it's clear this still needs work. E.g.:
+! throw "Skipped: Bug with <c-e> and popupmenu not fixed yet"
+ - See the start of runtest.vim for more help.
+
+
+--- 15,54 ----
+
+ 1) Create a test_<subject>.vim file.
+ 2) Add test_<subject>.res to NEW_TESTS in Make_all.mak in alphabetical order.
+! 3) Also add an entry "test_<subject>" in src/Make_all.mak.
+ 4) Use make test_<subject>.res to run a single test in src/testdir/.
+ Use make test_<subject> to run a single test in src/.
+
++ At 2), instead of running the test separately, it can be included in
++ "test_alot". Do this for quick tests without side effects. The test runs a
++ bit faster, because Vim doesn't have to be started, one Vim instance runs many
++ tests.
++
++
+ What you can use (see test_assert.vim for an example):
++
+ - Call assert_equal(), assert_true(), assert_false(), etc.
+!
+! - Use assert_fails() to check for expected errors.
+!
+! - Use try/catch to avoid an exception aborts the test.
+!
+! - Use alloc_fail() to have memory allocation fail. This makes it possible to
+! check memory allocation failures are handled gracefully. You need to change
+!
+! - the source code to add an ID to the allocation. Update LAST_ID_USED above
+! alloc_id() to the highest ID used.
+!
+! - Use test_override() to make Vim behave differently, e.g. if char_avail()
+! must return FALSE for a while. E.g. to trigger the CursorMovedI autocommand
+! event.
+!
+! - See test_cursor_func.vim for an example.
+!
+ - If the bug that is being tested isn't fixed yet, you can throw an exception
+! with "Skipped" so that it's clear this still needs work. E.g.: throw
+! "Skipped: Bug with <c-e> and popupmenu not fixed yet"
+!
+ - See the start of runtest.vim for more help.
+
+
+*** ../vim-8.1.0356/src/version.c 2018-09-09 15:54:11.232857907 +0200
+--- src/version.c 2018-09-09 15:55:30.172188706 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 357,
+ /**/
+
+--
+I am also told that there is a logical proof out there somewhere
+that demonstrates that there is no task which duct tape cannot handle.
+ -- Paul Brannan
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0358 b/data/vim/patches/8.1.0358
new file mode 100644
index 000000000..7bc717a06
--- /dev/null
+++ b/data/vim/patches/8.1.0358
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0358
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0358
+Problem: Crash when using term_dumpwrite() after the job finished.
+Solution: Check for a finished job and give an error message.
+Files: src/terminal.c
+
+
+*** ../vim-8.1.0357/src/terminal.c 2018-08-24 21:30:24.818557489 +0200
+--- src/terminal.c 2018-09-09 18:24:15.762463460 +0200
+***************
+*** 3871,3876 ****
+--- 3871,3881 ----
+ if (buf == NULL)
+ return;
+ term = buf->b_term;
++ if (term->tl_vterm == NULL)
++ {
++ EMSG(_("E958: Job already finished"));
++ return;
++ }
+
+ if (argvars[2].v_type != VAR_UNKNOWN)
+ {
+*** ../vim-8.1.0357/src/version.c 2018-09-09 15:56:03.143904759 +0200
+--- src/version.c 2018-09-09 19:55:31.327054155 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 358,
+ /**/
+
+--
+"Space is big. Really big. You just won't believe how vastly hugely mind-
+bogglingly big it is. I mean, you may think it's a long way down the
+road to the chemist, but that's just peanuts to space."
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0359 b/data/vim/patches/8.1.0359
new file mode 100644
index 000000000..d8d00d452
--- /dev/null
+++ b/data/vim/patches/8.1.0359
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0359
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0359
+Problem: No clue what test failed when using a screendump twice.
+Solution: Add an extra argument to VerifyScreenDump().
+Files: src/testdir/screendump.vim
+
+
+*** ../vim-8.1.0358/src/testdir/screendump.vim 2018-06-04 19:11:06.604648995 +0200
+--- src/testdir/screendump.vim 2018-09-09 20:46:34.535736225 +0200
+***************
+*** 93,100 ****
+ " Verify that Vim running in terminal buffer "buf" matches the screen dump.
+ " "options" is passed to term_dumpwrite().
+ " The file name used is "dumps/{filename}.dump".
+ " Will wait for up to a second for the screen dump to match.
+! func VerifyScreenDump(buf, filename, options)
+ let reference = 'dumps/' . a:filename . '.dump'
+ let testfile = a:filename . '.dump.failed'
+
+--- 93,103 ----
+ " Verify that Vim running in terminal buffer "buf" matches the screen dump.
+ " "options" is passed to term_dumpwrite().
+ " The file name used is "dumps/{filename}.dump".
++ " Optionally an extra argument can be passed which is prepended to the error
++ " message. Use this when using the same dump file with different options.
+ " Will wait for up to a second for the screen dump to match.
+! " Returns non-zero when verification fails.
+! func VerifyScreenDump(buf, filename, options, ...)
+ let reference = 'dumps/' . a:filename . '.dump'
+ let testfile = a:filename . '.dump.failed'
+
+***************
+*** 108,117 ****
+ endif
+ if i == 100
+ " Leave the test file around for inspection.
+! call assert_report('See dump file difference: call term_dumpdiff("' . testfile . '", "' . reference . '")')
+! break
+ endif
+ sleep 10m
+ let i += 1
+ endwhile
+ endfunc
+--- 111,125 ----
+ endif
+ if i == 100
+ " Leave the test file around for inspection.
+! let msg = 'See dump file difference: call term_dumpdiff("' . testfile . '", "' . reference . '")'
+! if a:0 == 1
+! let msg = a:1 . ': ' . msg
+! endif
+! call assert_report(msg)
+! return 1
+ endif
+ sleep 10m
+ let i += 1
+ endwhile
++ return 0
+ endfunc
+*** ../vim-8.1.0358/src/version.c 2018-09-09 19:56:03.434838223 +0200
+--- src/version.c 2018-09-09 22:01:05.478507254 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 359,
+ /**/
+
+--
+`The Guide says there is an art to flying,' said Ford, `or at least a
+knack. The knack lies in learning how to throw yourself at the ground
+and miss.' He smiled weakly.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0360 b/data/vim/patches/8.1.0360
new file mode 100644
index 000000000..df0fd10d6
--- /dev/null
+++ b/data/vim/patches/8.1.0360
@@ -0,0 +1,6803 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0360
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0360
+Problem: Using an external diff program is slow and inflexible.
+Solution: Include the xdiff library. (Christian Brabandt, closes #2732)
+ Use it by default.
+Files: Filelist, runtime/doc/diff.txt, runtime/doc/options.txt,
+ src/Make_cyg_ming.mak, src/Make_mvc.mak, src/Makefile, src/diff.c,
+ src/structs.h, src/testdir/dumps/Test_diff_01.dump,
+ src/testdir/dumps/Test_diff_02.dump,
+ src/testdir/dumps/Test_diff_03.dump,
+ src/testdir/dumps/Test_diff_04.dump,
+ src/testdir/dumps/Test_diff_05.dump,
+ src/testdir/dumps/Test_diff_06.dump,
+ src/testdir/dumps/Test_diff_07.dump,
+ src/testdir/dumps/Test_diff_08.dump,
+ src/testdir/dumps/Test_diff_09.dump,
+ src/testdir/dumps/Test_diff_10.dump,
+ src/testdir/dumps/Test_diff_11.dump,
+ src/testdir/dumps/Test_diff_12.dump,
+ src/testdir/dumps/Test_diff_13.dump,
+ src/testdir/dumps/Test_diff_14.dump,
+ src/testdir/dumps/Test_diff_15.dump,
+ src/testdir/dumps/Test_diff_16.dump,
+ src/testdir/test_diffmode.vim, src/xdiff/COPYING,
+ src/xdiff/xdiff.h, src/xdiff/xdiffi.c, src/xdiff/xdiffi.h,
+ src/xdiff/xemit.c, src/xdiff/xemit.h, src/xdiff/xhistogram.c,
+ src/xdiff/xinclude.h, src/xdiff/xmacros.h, src/xdiff/xpatience.c,
+ src/xdiff/xprepare.c, src/xdiff/xprepare.h, src/xdiff/xtypes.h,
+ src/xdiff/xutils.c, src/xdiff/xutils.h, src/xdiff/README.txt
+
+
+*** ../vim-8.1.0359/Filelist 2018-09-02 15:26:53.829022193 +0200
+--- Filelist 2018-09-10 17:23:29.323602967 +0200
+***************
+*** 273,278 ****
+--- 273,292 ----
+ src/libvterm/t/92lp1640917.test \
+ src/libvterm/t/harness.c \
+ src/libvterm/t/run-test.pl \
++ src/xdiff/xdiff.h \
++ src/xdiff/xdiffi.c \
++ src/xdiff/xdiffi.h \
++ src/xdiff/xemit.c \
++ src/xdiff/xemit.h \
++ src/xdiff/xhistogram.c \
++ src/xdiff/xinclude.h \
++ src/xdiff/xmacros.h \
++ src/xdiff/xpatience.c \
++ src/xdiff/xprepare.c \
++ src/xdiff/xprepare.h \
++ src/xdiff/xtypes.h \
++ src/xdiff/xutils.c \
++ src/xdiff/xutils.h \
+
+
+ # source files for Unix only
+*** ../vim-8.1.0359/runtime/doc/diff.txt 2018-05-17 13:40:51.000000000 +0200
+--- runtime/doc/diff.txt 2018-09-10 17:24:29.783082384 +0200
+***************
+*** 39,45 ****
+ then append the file name of the first argument to the directory name to find
+ the file.
+
+! This only works when a standard "diff" command is available. See 'diffexpr'.
+
+ Diffs are local to the current tab page |tab-page|. You can't see diffs with
+ a window in another tab page. This does make it possible to have several
+--- 39,47 ----
+ then append the file name of the first argument to the directory name to find
+ the file.
+
+! By default an internal diff library will be used. When 'diffopt' or
+! 'diffexpr' has been set an external "diff" command will be used. This only
+! works when such a diff program is available.
+
+ Diffs are local to the current tab page |tab-page|. You can't see diffs with
+ a window in another tab page. This does make it possible to have several
+***************
+*** 344,351 ****
+
+ The ">" is replaced with the value of 'shellredir'.
+
+! The output of "diff" must be a normal "ed" style diff. Do NOT use a context
+! diff. This example explains the format that Vim expects: >
+
+ 1a2
+ > bbb
+--- 346,354 ----
+
+ The ">" is replaced with the value of 'shellredir'.
+
+! The output of "diff" must be a normal "ed" style diff or a unified diff. Do
+! NOT use a context diff. This example explains the format that Vim expects for
+! the "ed" style diff: >
+
+ 1a2
+ > bbb
+***************
+*** 384,395 ****
+--- 387,402 ----
+ endif
+ silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
+ \ " > " . v:fname_out
++ redraw!
+ endfunction
+
+ The "-a" argument is used to force comparing the files as text, comparing as
+ binaries isn't useful. The "--binary" argument makes the files read in binary
+ mode, so that a CTRL-Z doesn't end the text on DOS.
+
++ The `redraw!` command may not be needed, depending on whether executing a
++ shell command shows something on the display or not.
++
+ *E810* *E97*
+ Vim will do a test if the diff output looks alright. If it doesn't, you will
+ get an error message. Possible causes:
+***************
+*** 441,444 ****
+ directory are accidentally patched. Vim will also delete files starting with
+ v:fname_in and ending in ".rej" and ".orig".
+
+! vim:tw=78:ts=8:ft=help:norl:
+--- 448,451 ----
+ directory are accidentally patched. Vim will also delete files starting with
+ v:fname_in and ending in ".rej" and ".orig".
+
+! vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0359/runtime/doc/options.txt 2018-08-07 21:39:09.243060141 +0200
+--- runtime/doc/options.txt 2018-09-10 17:25:45.414250299 +0200
+***************
+*** 2605,2612 ****
+ {not in Vi}
+ {not available when compiled without the |+diff|
+ feature}
+! Expression which is evaluated to obtain an ed-style diff file from two
+! versions of a file. See |diff-diffexpr|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+--- 2609,2616 ----
+ {not in Vi}
+ {not available when compiled without the |+diff|
+ feature}
+! Expression which is evaluated to obtain a diff file (either ed-style
+! or unified-style) from two versions of a file. See |diff-diffexpr|.
+ This option cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+
+***************
+*** 2653,2663 ****
+ foldcolumn:{n} Set the 'foldcolumn' option to {n} when
+ starting diff mode. Without this 2 is used.
+
+! Examples: >
+
+! :set diffopt=filler,context:4
+ :set diffopt=
+! :set diffopt=filler,foldcolumn:3
+ <
+ *'digraph'* *'dg'* *'nodigraph'* *'nodg'*
+ 'digraph' 'dg' boolean (default off)
+--- 2657,2687 ----
+ foldcolumn:{n} Set the 'foldcolumn' option to {n} when
+ starting diff mode. Without this 2 is used.
+
+! internal Use the internal diff library. This is
+! ignored when 'diffexpr' is set. *E960*
+! When running out of memory when writing a
+! buffer this item will be ignored for diffs
+! involving that buffer. Set the 'verbose'
+! option to see when this happens.
+!
+! indent-heuristic
+! Use the indent heuristic for the internal
+! diff library.
+!
+! algorithm:{text} Use the specified diff algorithm with the
+! internal diff engine. Currently supported
+! algorithms are:
+! myers the default algorithm
+! minimal spend extra time to generate the
+! smallest possible diff
+! patience patience diff algorithm
+! histogram histogram diff algorithm
+
+! Examples: >
+! :set diffopt=internal,filler,context:4
+ :set diffopt=
+! :set diffopt=internal,filler,foldcolumn:3
+! :set diffopt-=internal " do NOT use the internal diff parser
+ <
+ *'digraph'* *'dg'* *'nodigraph'* *'nodg'*
+ 'digraph' 'dg' boolean (default off)
+*** ../vim-8.1.0359/src/Make_cyg_ming.mak 2018-06-30 16:25:00.551755794 +0200
+--- src/Make_cyg_ming.mak 2018-09-10 17:29:26.599063750 +0200
+***************
+*** 166,171 ****
+--- 166,190 ----
+ ifndef CROSS_COMPILE
+ CROSS_COMPILE =
+ endif
++
++ # About the "sh.exe" condition, as explained by Ken Takata:
++ #
++ # If the makefile is executed with mingw32-make and sh.exe is not found in
++ # $PATH, then $SHELL is set to "sh.exe" (without any path). In this case,
++ # unix-like commands might not work and a dos-style path is needed.
++ #
++ # If the makefile is executed with mingw32-make and sh.exe IS found in $PATH,
++ # then $SHELL is set with the actual path of sh.exe (e.g.
++ # "C:/msys64/usr/bin/sh.exe"). In this case, unix-like commands can be used.
++ #
++ # If it is executed by the "make" command from cmd.exe, $SHELL is set to
++ # "/bin/sh". If the "make" command is in the $PATH, other unix-like commands
++ # might also work.
++ #
++ # If it is executed by the "make" command from a unix-like shell,
++ # $SHELL is set with the unix-style path (e.g. "/bin/bash").
++ # In this case, unix-like commands can be used.
++ #
+ ifneq (sh.exe, $(SHELL))
+ DEL = rm
+ MKDIR = mkdir -p
+***************
+*** 810,815 ****
+--- 829,851 ----
+ $(OUTDIR)/term_vterm.o
+ endif
+
++ # Include xdiff
++ OBJ += $(OUTDIR)/xdiffi.o \
++ $(OUTDIR)/xemit.o \
++ $(OUTDIR)/xprepare.o \
++ $(OUTDIR)/xutils.o \
++ $(OUTDIR)/xhistogram.o \
++ $(OUTDIR)/xpatience.o
++
++ XDIFF_DEPS = \
++ xdiff/xdiff.h \
++ xdiff/xdiffi.h \
++ xdiff/xemit.h \
++ xdiff/xinclude.h \
++ xdiff/xmacros.h \
++ xdiff/xprepare.h \
++ xdiff/xtypes.h \
++ xdiff/xutils.h
+
+ ifdef MZSCHEME
+ MZSCHEME_SUFFIX = Z
+***************
+*** 1055,1060 ****
+--- 1091,1113 ----
+ $(OUTDIR)/term_vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/vterm.c -o $@
+
++ $(OUTDIR)/xdiffi.o: xdiff/xdiffi.c $(XDIFF_DEPS)
++ $(CC) -c $(CFLAGS) xdiff/xdiffi.c -o $(OUTDIR)/xdiffi.o
++
++ $(OUTDIR)/xemit.o: xdiff/xemit.c $(XDIFF_DEPS)
++ $(CC) -c $(CFLAGS) xdiff/xemit.c -o $(OUTDIR)/xemit.o
++
++ $(OUTDIR)/xprepare.o: xdiff/xprepare.c $(XDIFF_DEPS)
++ $(CC) -c $(CFLAGS) xdiff/xprepare.c -o $(OUTDIR)/xprepare.o
++
++ $(OUTDIR)/xutils.o: xdiff/xutils.c $(XDIFF_DEPS)
++ $(CC) -c $(CFLAGS) xdiff/xutils.c -o $(OUTDIR)/xutils.o
++
++ $(OUTDIR)/xhistogram.o: xdiff/xhistogram.c $(XDIFF_DEPS)
++ $(CC) -c $(CFLAGS) xdiff/xhistogram.c -o $(OUTDIR)/xhistogram.o
++
++ $(OUTDIR)/xpatience.o: xdiff/xpatience.c $(XDIFF_DEPS)
++ $(CC) -c $(CFLAGS) xdiff/xpatience.c -o $(OUTDIR)/xpatience.o
+
+ pathdef.c: $(INCL)
+ ifneq (sh.exe, $(SHELL))
+*** ../vim-8.1.0359/src/Make_mvc.mak 2018-07-04 23:05:19.221931527 +0200
+--- src/Make_mvc.mak 2018-09-10 17:32:03.885044447 +0200
+***************
+*** 813,818 ****
+--- 813,836 ----
+ !endif
+ SUBSYSTEM_TOOLS = console
+
++ XDIFF_OBJ = $(OBJDIR)/xdiffi.obj \
++ $(OBJDIR)/xemit.obj \
++ $(OBJDIR)/xprepare.obj \
++ $(OBJDIR)/xutils.obj \
++ $(OBJDIR)/xhistogram.obj \
++ $(OBJDIR)/xpatience.obj
++
++ XDIFF_DEPS = \
++ xdiff/xdiff.h \
++ xdiff/xdiffi.h \
++ xdiff/xemit.h \
++ xdiff/xinclude.h \
++ xdiff/xmacros.h \
++ xdiff/xprepare.h \
++ xdiff/xtypes.h \
++ xdiff/xutils.h
++
++
+ !if "$(SUBSYSTEM_VER)" != ""
+ SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
+ SUBSYSTEM_TOOLS = $(SUBSYSTEM_TOOLS),$(SUBSYSTEM_VER)
+***************
+*** 1204,1215 ****
+ tee/tee.exe \
+ GvimExt/gvimext.dll
+
+! $(VIM).exe: $(OUTDIR) $(OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
+ $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
+ $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
+ version.c version.h
+ $(CC) $(CFLAGS_OUTDIR) version.c
+! $(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
+ $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
+ $(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
+ $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
+--- 1222,1233 ----
+ tee/tee.exe \
+ GvimExt/gvimext.dll
+
+! $(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
+ $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
+ $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
+ version.c version.h
+ $(CC) $(CFLAGS_OUTDIR) version.c
+! $(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
+ $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
+ $(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
+ $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
+***************
+*** 1304,1309 ****
+--- 1322,1328 ----
+ $(MAKE) /NOLOGO -f Make_dos.mak nolog
+ $(MAKE) /NOLOGO -f Make_dos.mak $@.res
+ $(MAKE) /NOLOGO -f Make_dos.mak report
++ cat messages
+ cd ..
+
+ ###########################################################################
+***************
+*** 1344,1349 ****
+--- 1363,1386 ----
+
+ $(OUTDIR)/diff.obj: $(OUTDIR) diff.c $(INCL)
+
++ $(OUTDIR)/xdiffi.obj: $(OUTDIR) xdiff/xdiffi.c $(XDIFF_DEPS)
++ $(CC) $(CFLAGS_OUTDIR) xdiff/xdiffi.c
++
++ $(OUTDIR)/xemit.obj: $(OUTDIR) xdiff/xemit.c $(XDIFF_DEPS)
++ $(CC) $(CFLAGS_OUTDIR) xdiff/xemit.c
++
++ $(OUTDIR)/xprepare.obj: $(OUTDIR) xdiff/xprepare.c $(XDIFF_DEPS)
++ $(CC) $(CFLAGS_OUTDIR) xdiff/xprepare.c
++
++ $(OUTDIR)/xutils.obj: $(OUTDIR) xdiff/xutils.c $(XDIFF_DEPS)
++ $(CC) $(CFLAGS_OUTDIR) xdiff/xutils.c
++
++ $(OUTDIR)/xhistogram.obj: $(OUTDIR) xdiff/xhistogram.c $(XDIFF_DEPS)
++ $(CC) $(CFLAGS_OUTDIR) xdiff/xhistogram.c
++
++ $(OUTDIR)/xpatience.obj: $(OUTDIR) xdiff/xpatience.c $(XDIFF_DEPS)
++ $(CC) $(CFLAGS_OUTDIR) xdiff/xpatience.c
++
+ $(OUTDIR)/digraph.obj: $(OUTDIR) digraph.c $(INCL)
+
+ $(OUTDIR)/edit.obj: $(OUTDIR) edit.c $(INCL)
+*** ../vim-8.1.0359/src/Makefile 2018-07-07 22:26:49.306702821 +0200
+--- src/Makefile 2018-09-10 17:32:57.212394678 +0200
+***************
+*** 1400,1405 ****
+--- 1400,1431 ----
+
+ TERM_SRC = libvterm/src/*.c
+
++ XDIFF_SRC = \
++ xdiff/xdiffi.c \
++ xdiff/xemit.c \
++ xdiff/xprepare.c \
++ xdiff/xutils.c \
++ xdiff/xhistogram.c \
++ xdiff/xpatience.c \
++
++ XDIFF_OBJS = \
++ objects/xdiffi.o \
++ objects/xemit.o \
++ objects/xprepare.o \
++ objects/xutils.o \
++ objects/xhistogram.o \
++ objects/xpatience.o \
++
++ XDIFF_INCL = \
++ xdiff/xdiff.h \
++ xdiff/xdiffi.h \
++ xdiff/xemit.h \
++ xdiff/xinclude.h \
++ xdiff/xmacros.h \
++ xdiff/xprepare.h \
++ xdiff/xtypes.h \
++ xdiff/xutils.h \
++
+ ### Command to create dependencies based on #include "..."
+ ### prototype headers are ignored due to -DPROTO, system
+ ### headers #include <...> are ignored if we use the -MM option, as
+***************
+*** 1611,1616 ****
+--- 1637,1643 ----
+ SRC = $(BASIC_SRC) \
+ $(GUI_SRC) \
+ $(TERM_SRC) \
++ $(XDIFF_SRC) \
+ $(HANGULIN_SRC) \
+ $(LUA_SRC) \
+ $(MZSCHEME_SRC) \
+***************
+*** 1728,1733 ****
+--- 1755,1761 ----
+ $(WORKSHOP_OBJ) \
+ $(NETBEANS_OBJ) \
+ $(CHANNEL_OBJ) \
++ $(XDIFF_OBJS) \
+ $(WSDEBUG_OBJ)
+
+ # The files included by tests are not in OBJ_COMMON.
+***************
+*** 2731,2737 ****
+
+ shadow: runtime pixmaps
+ $(MKDIR_P) $(SHADOWDIR)
+! cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../libvterm ../vimtutor ../gvimtutor ../install-sh ../Make_all.mak .
+ mkdir $(SHADOWDIR)/auto
+ cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
+ $(MKDIR_P) $(SHADOWDIR)/po
+--- 2759,2765 ----
+
+ shadow: runtime pixmaps
+ $(MKDIR_P) $(SHADOWDIR)
+! cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../xdiff ../libvterm ../vimtutor ../gvimtutor ../install-sh ../Make_all.mak .
+ mkdir $(SHADOWDIR)/auto
+ cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
+ $(MKDIR_P) $(SHADOWDIR)/po
+***************
+*** 2915,2921 ****
+ objects/dict.o: dict.c
+ $(CCC) -o $@ dict.c
+
+! objects/diff.o: diff.c
+ $(CCC) -o $@ diff.c
+
+ objects/digraph.o: digraph.c
+--- 2943,2949 ----
+ objects/dict.o: dict.c
+ $(CCC) -o $@ dict.c
+
+! objects/diff.o: diff.c $(XDIFF_INCL)
+ $(CCC) -o $@ diff.c
+
+ objects/digraph.o: digraph.c
+***************
+*** 3229,3234 ****
+--- 3257,3283 ----
+ objects/term_vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/vterm.c
+
++ CCCDIFF = $(CCC_NF) $(ALL_CFLAGS)
++
++ objects/xdiffi.o: xdiff/xdiffi.c $(XDIFF_INCL)
++ $(CCCDIFF) -o $@ xdiff/xdiffi.c
++
++ objects/xprepare.o: xdiff/xprepare.c $(XDIFF_INCL)
++ $(CCCDIFF) -o $@ xdiff/xprepare.c
++
++ objects/xutils.o: xdiff/xutils.c $(XDIFF_INCL)
++ $(CCCDIFF) -o $@ xdiff/xutils.c
++
++ objects/xemit.o: xdiff/xemit.c $(XDIFF_INCL)
++ $(CCCDIFF) -o $@ xdiff/xemit.c
++
++ objects/xhistogram.o: xdiff/xhistogram.c $(XDIFF_INCL)
++ $(CCCDIFF) -o $@ xdiff/xhistogram.c
++
++ objects/xpatience.o: xdiff/xpatience.c $(XDIFF_INCL)
++ $(CCCDIFF) -o $@ xdiff/xpatience.c
++
++
+ ###############################################################################
+ ### MacOS X installation
+ ###
+*** ../vim-8.1.0359/src/diff.c 2018-06-03 14:42:17.840505115 +0200
+--- src/diff.c 2018-09-10 17:36:06.542197741 +0200
+***************
+*** 9,31 ****
+
+ /*
+ * diff.c: code for diff'ing two, three or four buffers.
+ */
+
+ #include "vim.h"
+
+ #if defined(FEAT_DIFF) || defined(PROTO)
+
+ static int diff_busy = FALSE; /* ex_diffgetput() is busy */
+
+ /* flags obtained from the 'diffopt' option */
+! #define DIFF_FILLER 1 /* display filler lines */
+! #define DIFF_ICASE 2 /* ignore case */
+! #define DIFF_IWHITE 4 /* ignore change in white space */
+! #define DIFF_HORIZONTAL 8 /* horizontal splits */
+! #define DIFF_VERTICAL 16 /* vertical splits */
+! #define DIFF_HIDDEN_OFF 32 /* diffoff when hidden */
+ static int diff_flags = DIFF_FILLER;
+
+ #define LBUFLEN 50 /* length of line in diff file */
+
+ static int diff_a_works = MAYBE; /* TRUE when "diff -a" works, FALSE when it
+--- 9,40 ----
+
+ /*
+ * diff.c: code for diff'ing two, three or four buffers.
++ *
++ * There are three ways to diff:
++ * - Shell out to an external diff program, using files.
++ * - Use the compiled-in xdiff library.
++ * - Let 'diffexpr' do the work, using files.
+ */
+
+ #include "vim.h"
++ #include "xdiff/xdiff.h"
+
+ #if defined(FEAT_DIFF) || defined(PROTO)
+
+ static int diff_busy = FALSE; /* ex_diffgetput() is busy */
+
+ /* flags obtained from the 'diffopt' option */
+! #define DIFF_FILLER 1 // display filler lines
+! #define DIFF_ICASE 2 // ignore case
+! #define DIFF_IWHITE 4 // ignore change in white space
+! #define DIFF_HORIZONTAL 8 // horizontal splits
+! #define DIFF_VERTICAL 16 // vertical splits
+! #define DIFF_HIDDEN_OFF 32 // diffoff when hidden
+! #define DIFF_INTERNAL 64 // use internal xdiff algorithm
+ static int diff_flags = DIFF_FILLER;
+
++ static long diff_algorithm = 0;
++
+ #define LBUFLEN 50 /* length of line in diff file */
+
+ static int diff_a_works = MAYBE; /* TRUE when "diff -a" works, FALSE when it
+***************
+*** 36,57 ****
+ checked yet */
+ #endif
+
+ static int diff_buf_idx(buf_T *buf);
+ static int diff_buf_idx_tp(buf_T *buf, tabpage_T *tp);
+ static void diff_mark_adjust_tp(tabpage_T *tp, int idx, linenr_T line1, linenr_T line2, long amount, long amount_after);
+ static void diff_check_unchanged(tabpage_T *tp, diff_T *dp);
+ static int diff_check_sanity(tabpage_T *tp, diff_T *dp);
+ static void diff_redraw(int dofold);
+! static int diff_write(buf_T *buf, char_u *fname);
+! static void diff_file(char_u *tmp_orig, char_u *tmp_new, char_u *tmp_diff);
+ static int diff_equal_entry(diff_T *dp, int idx1, int idx2);
+ static int diff_cmp(char_u *s1, char_u *s2);
+ #ifdef FEAT_FOLDING
+ static void diff_fold_update(diff_T *dp, int skip_idx);
+ #endif
+! static void diff_read(int idx_orig, int idx_new, char_u *fname);
+ static void diff_copy_entry(diff_T *dprev, diff_T *dp, int idx_orig, int idx_new);
+ static diff_T *diff_alloc_new(tabpage_T *tp, diff_T *dprev, diff_T *dp);
+
+ #ifndef USE_CR
+ # define tag_fgets vim_fgets
+--- 45,89 ----
+ checked yet */
+ #endif
+
++ // used for diff input
++ typedef struct {
++ char_u *din_fname; // used for external diff
++ mmfile_t din_mmfile; // used for internal diff
++ } diffin_T;
++
++ // used for diff result
++ typedef struct {
++ char_u *dout_fname; // used for external diff
++ garray_T dout_ga; // used for internal diff
++ } diffout_T;
++
++ // two diff inputs and one result
++ typedef struct {
++ diffin_T dio_orig; // original file input
++ diffin_T dio_new; // new file input
++ diffout_T dio_diff; // diff result
++ int dio_internal; // using internal diff
++ } diffio_T;
++
+ static int diff_buf_idx(buf_T *buf);
+ static int diff_buf_idx_tp(buf_T *buf, tabpage_T *tp);
+ static void diff_mark_adjust_tp(tabpage_T *tp, int idx, linenr_T line1, linenr_T line2, long amount, long amount_after);
+ static void diff_check_unchanged(tabpage_T *tp, diff_T *dp);
+ static int diff_check_sanity(tabpage_T *tp, diff_T *dp);
+ static void diff_redraw(int dofold);
+! static int check_external_diff(diffio_T *diffio);
+! static int diff_file(diffio_T *diffio);
+ static int diff_equal_entry(diff_T *dp, int idx1, int idx2);
+ static int diff_cmp(char_u *s1, char_u *s2);
+ #ifdef FEAT_FOLDING
+ static void diff_fold_update(diff_T *dp, int skip_idx);
+ #endif
+! static void diff_read(int idx_orig, int idx_new, diffout_T *fname);
+ static void diff_copy_entry(diff_T *dprev, diff_T *dp, int idx_orig, int idx_new);
+ static diff_T *diff_alloc_new(tabpage_T *tp, diff_T *dprev, diff_T *dp);
++ static int parse_diff_ed(char_u *line, linenr_T *lnum_orig, long *count_orig, linenr_T *lnum_new, long *count_new);
++ static int parse_diff_unified(char_u *line, linenr_T *lnum_orig, long *count_orig, linenr_T *lnum_new, long *count_new);
++ static int xdiff_out(void *priv, mmbuffer_t *mb, int nbuf);
+
+ #ifndef USE_CR
+ # define tag_fgets vim_fgets
+***************
+*** 631,711 ****
+ }
+ }
+
+ /*
+! * Write buffer "buf" to file "name".
+! * Always use 'fileformat' set to "unix".
+! * Return FAIL for failure
+ */
+ static int
+! diff_write(buf_T *buf, char_u *fname)
+ {
+ int r;
+ char_u *save_ff;
+
+ save_ff = buf->b_p_ff;
+ buf->b_p_ff = vim_strsave((char_u *)FF_UNIX);
+! r = buf_write(buf, fname, NULL, (linenr_T)1, buf->b_ml.ml_line_count,
+! NULL, FALSE, FALSE, FALSE, TRUE);
+ free_string_option(buf->b_p_ff);
+ buf->b_p_ff = save_ff;
+ return r;
+ }
+
+ /*
+ * Completely update the diffs for the buffers involved.
+ * This uses the ordinary "diff" command.
+ * The buffers are written to a file, also for unmodified buffers (the file
+ * could have been produced by autocommands, e.g. the netrw plugin).
+ */
+ void
+! ex_diffupdate(
+! exarg_T *eap) /* can be NULL */
+ {
+- buf_T *buf;
+ int idx_orig;
+ int idx_new;
+! char_u *tmp_orig;
+! char_u *tmp_new;
+! char_u *tmp_diff;
+! FILE *fd;
+! int ok;
+! int io_error = FALSE;
+
+! /* Delete all diffblocks. */
+ diff_clear(curtab);
+ curtab->tp_diff_invalid = FALSE;
+
+! /* Use the first buffer as the original text. */
+ for (idx_orig = 0; idx_orig < DB_COUNT; ++idx_orig)
+ if (curtab->tp_diffbuf[idx_orig] != NULL)
+ break;
+ if (idx_orig == DB_COUNT)
+ return;
+
+! /* Only need to do something when there is another buffer. */
+ for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
+ if (curtab->tp_diffbuf[idx_new] != NULL)
+ break;
+ if (idx_new == DB_COUNT)
+ return;
+
+! /* We need three temp file names. */
+! tmp_orig = vim_tempname('o', TRUE);
+! tmp_new = vim_tempname('n', TRUE);
+! tmp_diff = vim_tempname('d', TRUE);
+! if (tmp_orig == NULL || tmp_new == NULL || tmp_diff == NULL)
+! goto theend;
+
+! /*
+! * Do a quick test if "diff" really works. Otherwise it looks like there
+! * are no differences. Can't use the return value, it's non-zero when
+! * there are differences.
+! * May try twice, first with "-a" and then without.
+! */
+ for (;;)
+ {
+ ok = FALSE;
+! fd = mch_fopen((char *)tmp_orig, "w");
+ if (fd == NULL)
+ io_error = TRUE;
+ else
+--- 663,952 ----
+ }
+ }
+
++ static void
++ clear_diffin(diffin_T *din)
++ {
++ if (din->din_fname == NULL)
++ {
++ vim_free(din->din_mmfile.ptr);
++ din->din_mmfile.ptr = NULL;
++ }
++ else
++ mch_remove(din->din_fname);
++ }
++
++ static void
++ clear_diffout(diffout_T *dout)
++ {
++ if (dout->dout_fname == NULL)
++ ga_clear_strings(&dout->dout_ga);
++ else
++ mch_remove(dout->dout_fname);
++ }
++
+ /*
+! * Write buffer "buf" to a memory buffer.
+! * Return FAIL for failure.
+ */
+ static int
+! diff_write_buffer(buf_T *buf, diffin_T *din)
+! {
+! linenr_T lnum;
+! char_u *s;
+! long len = 0;
+! char_u *ptr;
+!
+! // xdiff requires one big block of memory with all the text.
+! for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
+! len += STRLEN(ml_get_buf(buf, lnum, FALSE)) + 1;
+! ptr = lalloc(len, TRUE);
+! if (ptr == NULL)
+! {
+! // Allocating memory failed. This can happen, because we try to read
+! // the whole buffer text into memory. Set the failed flag, the diff
+! // will be retried with external diff. The flag is never reset.
+! buf->b_diff_failed = TRUE;
+! if (p_verbose > 0)
+! {
+! verbose_enter();
+! smsg((char_u *)
+! _("Not enough memory to use internal diff for buffer \"%s\""),
+! buf->b_fname);
+! verbose_leave();
+! }
+! return FAIL;
+! }
+! din->din_mmfile.ptr = (char *)ptr;
+! din->din_mmfile.size = len;
+!
+! len = 0;
+! for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
+! {
+! for (s = ml_get_buf(buf, lnum, FALSE); *s != NUL; )
+! {
+! if (diff_flags & DIFF_ICASE)
+! {
+! int c;
+!
+! // xdiff doesn't support ignoring case, fold-case the text.
+! #ifdef FEAT_MBYTE
+! int orig_len;
+! char_u cbuf[MB_MAXBYTES + 1];
+!
+! c = PTR2CHAR(s);
+! c = enc_utf8 ? utf_fold(c) : MB_TOLOWER(c);
+! orig_len = MB_PTR2LEN(s);
+! if (mb_char2bytes(c, cbuf) != orig_len)
+! // TODO: handle byte length difference
+! mch_memmove(ptr + len, s, orig_len);
+! else
+! mch_memmove(ptr + len, cbuf, orig_len);
+!
+! s += orig_len;
+! len += orig_len;
+! #else
+! c = *s++;
+! ptr[len++] = TOLOWER_LOC(c);
+! #endif
+! }
+! else
+! ptr[len++] = *s++;
+! }
+! ptr[len++] = NL;
+! }
+! return OK;
+! }
+!
+! /*
+! * Write buffer "buf" to file or memory buffer.
+! * Return FAIL for failure.
+! */
+! static int
+! diff_write(buf_T *buf, diffin_T *din)
+ {
+ int r;
+ char_u *save_ff;
+
++ if (din->din_fname == NULL)
++ return diff_write_buffer(buf, din);
++
++ // Always use 'fileformat' set to "unix".
+ save_ff = buf->b_p_ff;
+ buf->b_p_ff = vim_strsave((char_u *)FF_UNIX);
+! r = buf_write(buf, din->din_fname, NULL,
+! (linenr_T)1, buf->b_ml.ml_line_count,
+! NULL, FALSE, FALSE, FALSE, TRUE);
+ free_string_option(buf->b_p_ff);
+ buf->b_p_ff = save_ff;
+ return r;
+ }
+
+ /*
++ * Update the diffs for all buffers involved.
++ */
++ static void
++ diff_try_update(
++ diffio_T *dio,
++ int idx_orig,
++ exarg_T *eap) // "eap" can be NULL
++ {
++ buf_T *buf;
++ int idx_new;
++
++ if (dio->dio_internal)
++ {
++ ga_init2(&dio->dio_diff.dout_ga, sizeof(char *), 1000);
++ }
++ else
++ {
++ // We need three temp file names.
++ dio->dio_orig.din_fname = vim_tempname('o', TRUE);
++ dio->dio_new.din_fname = vim_tempname('n', TRUE);
++ dio->dio_diff.dout_fname = vim_tempname('d', TRUE);
++ if (dio->dio_orig.din_fname == NULL
++ || dio->dio_new.din_fname == NULL
++ || dio->dio_diff.dout_fname == NULL)
++ goto theend;
++ }
++
++ // Check external diff is actually working.
++ if (!dio->dio_internal && check_external_diff(dio) == FAIL)
++ goto theend;
++
++ // :diffupdate!
++ if (eap != NULL && eap->forceit)
++ for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
++ {
++ buf = curtab->tp_diffbuf[idx_new];
++ if (buf_valid(buf))
++ buf_check_timestamp(buf, FALSE);
++ }
++
++ // Write the first buffer to a tempfile or mmfile_t.
++ buf = curtab->tp_diffbuf[idx_orig];
++ if (diff_write(buf, &dio->dio_orig) == FAIL)
++ goto theend;
++
++ // Make a difference between the first buffer and every other.
++ for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
++ {
++ buf = curtab->tp_diffbuf[idx_new];
++ if (buf == NULL || buf->b_ml.ml_mfp == NULL)
++ continue; // skip buffer that isn't loaded
++
++ // Write the other buffer and diff with the first one.
++ if (diff_write(buf, &dio->dio_new) == FAIL)
++ continue;
++ if (diff_file(dio) == FAIL)
++ continue;
++
++ // Read the diff output and add each entry to the diff list.
++ diff_read(idx_orig, idx_new, &dio->dio_diff);
++
++ clear_diffin(&dio->dio_new);
++ clear_diffout(&dio->dio_diff);
++ }
++ clear_diffin(&dio->dio_orig);
++
++ theend:
++ vim_free(dio->dio_orig.din_fname);
++ vim_free(dio->dio_new.din_fname);
++ vim_free(dio->dio_diff.dout_fname);
++ }
++
++ /*
++ * Return TRUE if the options are set to use the internal diff library.
++ * Note that if the internal diff failed for one of the buffers, the external
++ * diff will be used anyway.
++ */
++ static int
++ diff_internal(void)
++ {
++ return (diff_flags & DIFF_INTERNAL) != 0 && *p_dex == NUL;
++ }
++
++ /*
++ * Return TRUE if the internal diff failed for one of the diff buffers.
++ */
++ static int
++ diff_internal_failed(void)
++ {
++ int idx;
++
++ // Only need to do something when there is another buffer.
++ for (idx = 0; idx < DB_COUNT; ++idx)
++ if (curtab->tp_diffbuf[idx] != NULL
++ && curtab->tp_diffbuf[idx]->b_diff_failed)
++ return TRUE;
++ return FALSE;
++ }
++
++ /*
+ * Completely update the diffs for the buffers involved.
+ * This uses the ordinary "diff" command.
+ * The buffers are written to a file, also for unmodified buffers (the file
+ * could have been produced by autocommands, e.g. the netrw plugin).
+ */
+ void
+! ex_diffupdate(exarg_T *eap) // "eap" can be NULL
+ {
+ int idx_orig;
+ int idx_new;
+! diffio_T diffio;
+
+! // Delete all diffblocks.
+ diff_clear(curtab);
+ curtab->tp_diff_invalid = FALSE;
+
+! // Use the first buffer as the original text.
+ for (idx_orig = 0; idx_orig < DB_COUNT; ++idx_orig)
+ if (curtab->tp_diffbuf[idx_orig] != NULL)
+ break;
+ if (idx_orig == DB_COUNT)
+ return;
+
+! // Only need to do something when there is another buffer.
+ for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
+ if (curtab->tp_diffbuf[idx_new] != NULL)
+ break;
+ if (idx_new == DB_COUNT)
+ return;
+
+! // Only use the internal method if it did not fail for one of the buffers.
+! vim_memset(&diffio, 0, sizeof(diffio));
+! diffio.dio_internal = diff_internal() && !diff_internal_failed();
+!
+! diff_try_update(&diffio, idx_orig, eap);
+! if (diffio.dio_internal && diff_internal_failed())
+! {
+! // Internal diff failed, use external diff instead.
+! vim_memset(&diffio, 0, sizeof(diffio));
+! diff_try_update(&diffio, idx_orig, eap);
+! }
+
+! // force updating cursor position on screen
+! curwin->w_valid_cursor.lnum = 0;
+!
+! diff_redraw(TRUE);
+! }
+!
+! /*
+! * Do a quick test if "diff" really works. Otherwise it looks like there
+! * are no differences. Can't use the return value, it's non-zero when
+! * there are differences.
+! */
+! static int
+! check_external_diff(diffio_T *diffio)
+! {
+! FILE *fd;
+! int ok;
+! int io_error = FALSE;
+!
+! // May try twice, first with "-a" and then without.
+ for (;;)
+ {
+ ok = FALSE;
+! fd = mch_fopen((char *)diffio->dio_orig.din_fname, "w");
+ if (fd == NULL)
+ io_error = TRUE;
+ else
+***************
+*** 713,719 ****
+ if (fwrite("line1\n", (size_t)6, (size_t)1, fd) != 1)
+ io_error = TRUE;
+ fclose(fd);
+! fd = mch_fopen((char *)tmp_new, "w");
+ if (fd == NULL)
+ io_error = TRUE;
+ else
+--- 954,960 ----
+ if (fwrite("line1\n", (size_t)6, (size_t)1, fd) != 1)
+ io_error = TRUE;
+ fclose(fd);
+! fd = mch_fopen((char *)diffio->dio_new.din_fname, "w");
+ if (fd == NULL)
+ io_error = TRUE;
+ else
+***************
+*** 721,728 ****
+ if (fwrite("line2\n", (size_t)6, (size_t)1, fd) != 1)
+ io_error = TRUE;
+ fclose(fd);
+! diff_file(tmp_orig, tmp_new, tmp_diff);
+! fd = mch_fopen((char *)tmp_diff, "r");
+ if (fd == NULL)
+ io_error = TRUE;
+ else
+--- 962,970 ----
+ if (fwrite("line2\n", (size_t)6, (size_t)1, fd) != 1)
+ io_error = TRUE;
+ fclose(fd);
+! fd = NULL;
+! if (diff_file(diffio) == OK)
+! fd = mch_fopen((char *)diffio->dio_diff.dout_fname, "r");
+ if (fd == NULL)
+ io_error = TRUE;
+ else
+***************
+*** 739,748 ****
+ }
+ fclose(fd);
+ }
+! mch_remove(tmp_diff);
+! mch_remove(tmp_new);
+ }
+! mch_remove(tmp_orig);
+ }
+
+ #ifdef FEAT_EVAL
+--- 981,990 ----
+ }
+ fclose(fd);
+ }
+! mch_remove(diffio->dio_diff.dout_fname);
+! mch_remove(diffio->dio_new.din_fname);
+ }
+! mch_remove(diffio->dio_orig.din_fname);
+ }
+
+ #ifdef FEAT_EVAL
+***************
+*** 785,882 ****
+ #if defined(MSWIN)
+ diff_bin_works = MAYBE;
+ #endif
+! goto theend;
+ }
+
+! /* :diffupdate! */
+! if (eap != NULL && eap->forceit)
+! for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
+! {
+! buf = curtab->tp_diffbuf[idx_new];
+! if (buf_valid(buf))
+! buf_check_timestamp(buf, FALSE);
+! }
+!
+! /* Write the first buffer to a tempfile. */
+! buf = curtab->tp_diffbuf[idx_orig];
+! if (diff_write(buf, tmp_orig) == FAIL)
+! goto theend;
+!
+! /* Make a difference between the first buffer and every other. */
+! for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
+! {
+! buf = curtab->tp_diffbuf[idx_new];
+! if (buf == NULL || buf->b_ml.ml_mfp == NULL)
+! continue; /* skip buffer that isn't loaded */
+! if (diff_write(buf, tmp_new) == FAIL)
+! continue;
+! diff_file(tmp_orig, tmp_new, tmp_diff);
+
+! /* Read the diff output and add each entry to the diff list. */
+! diff_read(idx_orig, idx_new, tmp_diff);
+! mch_remove(tmp_diff);
+! mch_remove(tmp_new);
+! }
+! mch_remove(tmp_orig);
+
+! /* force updating cursor position on screen */
+! curwin->w_valid_cursor.lnum = 0;
+
+! diff_redraw(TRUE);
+
+! theend:
+! vim_free(tmp_orig);
+! vim_free(tmp_new);
+! vim_free(tmp_diff);
+ }
+
+ /*
+ * Make a diff between files "tmp_orig" and "tmp_new", results in "tmp_diff".
+ */
+! static void
+! diff_file(
+! char_u *tmp_orig,
+! char_u *tmp_new,
+! char_u *tmp_diff)
+ {
+ char_u *cmd;
+ size_t len;
+
+ #ifdef FEAT_EVAL
+ if (*p_dex != NUL)
+! /* Use 'diffexpr' to generate the diff file. */
+ eval_diff(tmp_orig, tmp_new, tmp_diff);
+ else
+ #endif
+ {
+ len = STRLEN(tmp_orig) + STRLEN(tmp_new)
+ + STRLEN(tmp_diff) + STRLEN(p_srr) + 27;
+ cmd = alloc((unsigned)len);
+! if (cmd != NULL)
+! {
+! /* We don't want $DIFF_OPTIONS to get in the way. */
+! if (getenv("DIFF_OPTIONS"))
+! vim_setenv((char_u *)"DIFF_OPTIONS", (char_u *)"");
+!
+! /* Build the diff command and execute it. Always use -a, binary
+! * differences are of no use. Ignore errors, diff returns
+! * non-zero when differences have been found. */
+! vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s %s",
+! diff_a_works == FALSE ? "" : "-a ",
+ #if defined(MSWIN)
+! diff_bin_works == TRUE ? "--binary " : "",
+ #else
+! "",
+ #endif
+! (diff_flags & DIFF_IWHITE) ? "-b " : "",
+! (diff_flags & DIFF_ICASE) ? "-i " : "",
+! tmp_orig, tmp_new);
+! append_redir(cmd, (int)len, p_srr, tmp_diff);
+! block_autocmds(); /* Avoid ShellCmdPost stuff */
+! (void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT);
+! unblock_autocmds();
+! vim_free(cmd);
+! }
+ }
+ }
+
+--- 1027,1127 ----
+ #if defined(MSWIN)
+ diff_bin_works = MAYBE;
+ #endif
+! return FAIL;
+ }
++ return OK;
++ }
+
+! /*
+! * Invoke the xdiff function.
+! */
+! static int
+! diff_file_internal(diffio_T *diffio)
+! {
+! xpparam_t param;
+! xdemitconf_t emit_cfg;
+! xdemitcb_t emit_cb;
+
+! vim_memset(&param, 0, sizeof(param));
+! vim_memset(&emit_cfg, 0, sizeof(emit_cfg));
+! vim_memset(&emit_cb, 0, sizeof(emit_cb));
+
+! param.flags = diff_algorithm;
+
+! if (diff_flags & DIFF_IWHITE)
+! param.flags |= XDF_IGNORE_WHITESPACE_CHANGE;
+
+! emit_cfg.ctxlen = 0; // don't need any diff_context here
+! emit_cb.priv = &diffio->dio_diff;
+! emit_cb.outf = xdiff_out;
+! if (xdl_diff(&diffio->dio_orig.din_mmfile,
+! &diffio->dio_new.din_mmfile,
+! &param, &emit_cfg, &emit_cb) < 0)
+! {
+! EMSG(_("E960: Problem creating the internal diff"));
+! return FAIL;
+! }
+! return OK;
+ }
+
+ /*
+ * Make a diff between files "tmp_orig" and "tmp_new", results in "tmp_diff".
++ * return OK or FAIL;
+ */
+! static int
+! diff_file(diffio_T *dio)
+ {
+ char_u *cmd;
+ size_t len;
++ char_u *tmp_orig = dio->dio_orig.din_fname;
++ char_u *tmp_new = dio->dio_new.din_fname;
++ char_u *tmp_diff = dio->dio_diff.dout_fname;
+
+ #ifdef FEAT_EVAL
+ if (*p_dex != NUL)
+! {
+! // Use 'diffexpr' to generate the diff file.
+ eval_diff(tmp_orig, tmp_new, tmp_diff);
++ return OK;
++ }
+ else
+ #endif
++ // Use xdiff for generating the diff.
++ if (dio->dio_internal)
++ {
++ return diff_file_internal(dio);
++ }
++ else
+ {
+ len = STRLEN(tmp_orig) + STRLEN(tmp_new)
+ + STRLEN(tmp_diff) + STRLEN(p_srr) + 27;
+ cmd = alloc((unsigned)len);
+! if (cmd == NULL)
+! return FAIL;
+!
+! // We don't want $DIFF_OPTIONS to get in the way.
+! if (getenv("DIFF_OPTIONS"))
+! vim_setenv((char_u *)"DIFF_OPTIONS", (char_u *)"");
+!
+! // Build the diff command and execute it. Always use -a, binary
+! // differences are of no use. Ignore errors, diff returns
+! // non-zero when differences have been found.
+! vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s %s",
+! diff_a_works == FALSE ? "" : "-a ",
+ #if defined(MSWIN)
+! diff_bin_works == TRUE ? "--binary " : "",
+ #else
+! "",
+ #endif
+! (diff_flags & DIFF_IWHITE) ? "-b " : "",
+! (diff_flags & DIFF_ICASE) ? "-i " : "",
+! tmp_orig, tmp_new);
+! append_redir(cmd, (int)len, p_srr, tmp_diff);
+! block_autocmds(); // avoid ShellCmdPost stuff
+! (void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT);
+! unblock_autocmds();
+! vim_free(cmd);
+! return OK;
+ }
+ }
+
+***************
+*** 1282,1370 ****
+ */
+ static void
+ diff_read(
+! int idx_orig, /* idx of original file */
+! int idx_new, /* idx of new file */
+! char_u *fname) /* name of diff output file */
+ {
+! FILE *fd;
+ diff_T *dprev = NULL;
+ diff_T *dp = curtab->tp_first_diff;
+ diff_T *dn, *dpl;
+- long f1, l1, f2, l2;
+ char_u linebuf[LBUFLEN]; /* only need to hold the diff line */
+! int difftype;
+! char_u *p;
+ long off;
+ int i;
+ linenr_T lnum_orig, lnum_new;
+ long count_orig, count_new;
+ int notset = TRUE; /* block "*dp" not set yet */
+
+! fd = mch_fopen((char *)fname, "r");
+! if (fd == NULL)
+ {
+! EMSG(_("E98: Cannot read diff output"));
+! return;
+ }
+!
+! for (;;)
+ {
+! if (tag_fgets(linebuf, LBUFLEN, fd))
+! break; /* end of file */
+! if (!isdigit(*linebuf))
+! continue; /* not the start of a diff block */
+!
+! /* This line must be one of three formats:
+! * {first}[,{last}]c{first}[,{last}]
+! * {first}a{first}[,{last}]
+! * {first}[,{last}]d{first}
+! */
+! p = linebuf;
+! f1 = getdigits(&p);
+! if (*p == ',')
+! {
+! ++p;
+! l1 = getdigits(&p);
+! }
+! else
+! l1 = f1;
+! if (*p != 'a' && *p != 'c' && *p != 'd')
+! continue; /* invalid diff format */
+! difftype = *p++;
+! f2 = getdigits(&p);
+! if (*p == ',')
+ {
+! ++p;
+! l2 = getdigits(&p);
+ }
+! else
+! l2 = f2;
+! if (l1 < f1 || l2 < f2)
+! continue; /* invalid line range */
+
+! if (difftype == 'a')
+ {
+! lnum_orig = f1 + 1;
+! count_orig = 0;
+ }
+ else
+ {
+! lnum_orig = f1;
+! count_orig = l1 - f1 + 1;
+ }
+! if (difftype == 'd')
+ {
+! lnum_new = f2 + 1;
+! count_new = 0;
+ }
+ else
+ {
+! lnum_new = f2;
+! count_new = l2 - f2 + 1;
+ }
+
+! /* Go over blocks before the change, for which orig and new are equal.
+! * Copy blocks from orig to new. */
+ while (dp != NULL
+ && lnum_orig > dp->df_lnum[idx_orig] + dp->df_count[idx_orig])
+ {
+--- 1527,1631 ----
+ */
+ static void
+ diff_read(
+! int idx_orig, // idx of original file
+! int idx_new, // idx of new file
+! diffout_T *dout) // diff output
+ {
+! FILE *fd = NULL;
+! int line_idx = 0;
+ diff_T *dprev = NULL;
+ diff_T *dp = curtab->tp_first_diff;
+ diff_T *dn, *dpl;
+ char_u linebuf[LBUFLEN]; /* only need to hold the diff line */
+! char_u *line;
+ long off;
+ int i;
+ linenr_T lnum_orig, lnum_new;
+ long count_orig, count_new;
+ int notset = TRUE; /* block "*dp" not set yet */
++ enum {
++ DIFF_ED,
++ DIFF_UNIFIED,
++ DIFF_NONE
++ } diffstyle = DIFF_NONE;
+
+! if (dout->dout_fname == NULL)
+ {
+! diffstyle = DIFF_UNIFIED;
+ }
+! else
+ {
+! fd = mch_fopen((char *)dout->dout_fname, "r");
+! if (fd == NULL)
+ {
+! EMSG(_("E98: Cannot read diff output"));
+! return;
+ }
+! }
+
+! for (;;)
+! {
+! if (fd == NULL)
+ {
+! if (line_idx >= dout->dout_ga.ga_len)
+! break; // did last line
+! line = ((char_u **)dout->dout_ga.ga_data)[line_idx++];
+ }
+ else
+ {
+! if (tag_fgets(linebuf, LBUFLEN, fd))
+! break; // end of file
+! line = linebuf;
+! }
+!
+! if (diffstyle == DIFF_NONE)
+! {
+! // Determine diff style.
+! // ed like diff looks like this:
+! // {first}[,{last}]c{first}[,{last}]
+! // {first}a{first}[,{last}]
+! // {first}[,{last}]d{first}
+! //
+! // unified diff looks like this:
+! // --- file1 2018-03-20 13:23:35.783153140 +0100
+! // +++ file2 2018-03-20 13:23:41.183156066 +0100
+! // @@ -1,3 +1,5 @@
+! if (isdigit(*line))
+! diffstyle = DIFF_ED;
+! else if ((STRNCMP(line, "@@ ", 3) == 0))
+! diffstyle = DIFF_UNIFIED;
+! else if ((STRNCMP(line, "--- ", 4) == 0)
+! && (tag_fgets(linebuf, LBUFLEN, fd) == 0)
+! && (STRNCMP(line, "+++ ", 4) == 0)
+! && (tag_fgets(linebuf, LBUFLEN, fd) == 0)
+! && (STRNCMP(line, "@@ ", 3) == 0))
+! diffstyle = DIFF_UNIFIED;
+! }
+!
+! if (diffstyle == DIFF_ED)
+! {
+! if (!isdigit(*line))
+! continue; // not the start of a diff block
+! if (parse_diff_ed(line, &lnum_orig, &count_orig,
+! &lnum_new, &count_new) == FAIL)
+! continue;
+ }
+! else if (diffstyle == DIFF_UNIFIED)
+ {
+! if (STRNCMP(line, "@@ ", 3) != 0)
+! continue; // not the start of a diff block
+! if (parse_diff_unified(line, &lnum_orig, &count_orig,
+! &lnum_new, &count_new) == FAIL)
+! continue;
+ }
+ else
+ {
+! EMSG(_("E959: Invalid diff format."));
+! break;
+ }
+
+! // Go over blocks before the change, for which orig and new are equal.
+! // Copy blocks from orig to new.
+ while (dp != NULL
+ && lnum_orig > dp->df_lnum[idx_orig] + dp->df_count[idx_orig])
+ {
+***************
+*** 1379,1392 ****
+ && lnum_orig <= dp->df_lnum[idx_orig] + dp->df_count[idx_orig]
+ && lnum_orig + count_orig >= dp->df_lnum[idx_orig])
+ {
+! /* New block overlaps with existing block(s).
+! * First find last block that overlaps. */
+ for (dpl = dp; dpl->df_next != NULL; dpl = dpl->df_next)
+ if (lnum_orig + count_orig < dpl->df_next->df_lnum[idx_orig])
+ break;
+
+! /* If the newly found block starts before the old one, set the
+! * start back a number of lines. */
+ off = dp->df_lnum[idx_orig] - lnum_orig;
+ if (off > 0)
+ {
+--- 1640,1653 ----
+ && lnum_orig <= dp->df_lnum[idx_orig] + dp->df_count[idx_orig]
+ && lnum_orig + count_orig >= dp->df_lnum[idx_orig])
+ {
+! // New block overlaps with existing block(s).
+! // First find last block that overlaps.
+ for (dpl = dp; dpl->df_next != NULL; dpl = dpl->df_next)
+ if (lnum_orig + count_orig < dpl->df_next->df_lnum[idx_orig])
+ break;
+
+! // If the newly found block starts before the old one, set the
+! // start back a number of lines.
+ off = dp->df_lnum[idx_orig] - lnum_orig;
+ if (off > 0)
+ {
+***************
+*** 1398,1421 ****
+ }
+ else if (notset)
+ {
+! /* new block inside existing one, adjust new block */
+ dp->df_lnum[idx_new] = lnum_new + off;
+ dp->df_count[idx_new] = count_new - off;
+ }
+ else
+! /* second overlap of new block with existing block */
+ dp->df_count[idx_new] += count_new - count_orig
+ + dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig]
+ - (dp->df_lnum[idx_orig] + dp->df_count[idx_orig]);
+
+! /* Adjust the size of the block to include all the lines to the
+! * end of the existing block or the new diff, whatever ends last. */
+ off = (lnum_orig + count_orig)
+ - (dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig]);
+ if (off < 0)
+ {
+! /* new change ends in existing block, adjust the end if not
+! * done already */
+ if (notset)
+ dp->df_count[idx_new] += -off;
+ off = 0;
+--- 1659,1682 ----
+ }
+ else if (notset)
+ {
+! // new block inside existing one, adjust new block
+ dp->df_lnum[idx_new] = lnum_new + off;
+ dp->df_count[idx_new] = count_new - off;
+ }
+ else
+! // second overlap of new block with existing block
+ dp->df_count[idx_new] += count_new - count_orig
+ + dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig]
+ - (dp->df_lnum[idx_orig] + dp->df_count[idx_orig]);
+
+! // Adjust the size of the block to include all the lines to the
+! // end of the existing block or the new diff, whatever ends last.
+ off = (lnum_orig + count_orig)
+ - (dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig]);
+ if (off < 0)
+ {
+! // new change ends in existing block, adjust the end if not
+! // done already
+ if (notset)
+ dp->df_count[idx_new] += -off;
+ off = 0;
+***************
+*** 1425,1431 ****
+ dp->df_count[i] = dpl->df_lnum[i] + dpl->df_count[i]
+ - dp->df_lnum[i] + off;
+
+! /* Delete the diff blocks that have been merged into one. */
+ dn = dp->df_next;
+ dp->df_next = dpl->df_next;
+ while (dn != dp->df_next)
+--- 1686,1692 ----
+ dp->df_count[i] = dpl->df_lnum[i] + dpl->df_count[i]
+ - dp->df_lnum[i] + off;
+
+! // Delete the diff blocks that have been merged into one.
+ dn = dp->df_next;
+ dp->df_next = dpl->df_next;
+ while (dn != dp->df_next)
+***************
+*** 1437,1443 ****
+ }
+ else
+ {
+! /* Allocate a new diffblock. */
+ dp = diff_alloc_new(curtab, dprev, dp);
+ if (dp == NULL)
+ goto done;
+--- 1698,1704 ----
+ }
+ else
+ {
+! // Allocate a new diffblock.
+ dp = diff_alloc_new(curtab, dprev, dp);
+ if (dp == NULL)
+ goto done;
+***************
+*** 1447,1463 ****
+ dp->df_lnum[idx_new] = lnum_new;
+ dp->df_count[idx_new] = count_new;
+
+! /* Set values for other buffers, these must be equal to the
+! * original buffer, otherwise there would have been a change
+! * already. */
+ for (i = idx_orig + 1; i < idx_new; ++i)
+ if (curtab->tp_diffbuf[i] != NULL)
+ diff_copy_entry(dprev, dp, idx_orig, i);
+ }
+! notset = FALSE; /* "*dp" has been set */
+ }
+
+! /* for remaining diff blocks orig and new are equal */
+ while (dp != NULL)
+ {
+ if (notset)
+--- 1708,1724 ----
+ dp->df_lnum[idx_new] = lnum_new;
+ dp->df_count[idx_new] = count_new;
+
+! // Set values for other buffers, these must be equal to the
+! // original buffer, otherwise there would have been a change
+! // already.
+ for (i = idx_orig + 1; i < idx_new; ++i)
+ if (curtab->tp_diffbuf[i] != NULL)
+ diff_copy_entry(dprev, dp, idx_orig, i);
+ }
+! notset = FALSE; // "*dp" has been set
+ }
+
+! // for remaining diff blocks orig and new are equal
+ while (dp != NULL)
+ {
+ if (notset)
+***************
+*** 1468,1474 ****
+ }
+
+ done:
+! fclose(fd);
+ }
+
+ /*
+--- 1729,1736 ----
+ }
+
+ done:
+! if (fd != NULL)
+! fclose(fd);
+ }
+
+ /*
+***************
+*** 1860,1865 ****
+--- 2122,2128 ----
+ int diff_context_new = 6;
+ int diff_flags_new = 0;
+ int diff_foldcolumn_new = 2;
++ long diff_algorithm_new = 0;
+ tabpage_T *tp;
+
+ p = p_dip;
+***************
+*** 1905,1910 ****
+--- 2168,2208 ----
+ p += 9;
+ diff_flags_new |= DIFF_HIDDEN_OFF;
+ }
++ else if (STRNCMP(p, "indent-heuristic", 16) == 0)
++ {
++ p += 16;
++ diff_algorithm_new |= XDF_INDENT_HEURISTIC;
++ }
++ else if (STRNCMP(p, "internal", 8) == 0)
++ {
++ p += 8;
++ diff_flags_new |= DIFF_INTERNAL;
++ }
++ else if (STRNCMP(p, "algorithm:", 10) == 0)
++ {
++ p += 10;
++ if (STRNCMP(p, "myers", 5) == 0)
++ {
++ p += 5;
++ diff_algorithm_new = 0;
++ }
++ else if (STRNCMP(p, "minimal", 7) == 0)
++ {
++ p += 7;
++ diff_algorithm_new = XDF_NEED_MINIMAL;
++ }
++ else if (STRNCMP(p, "patience", 8) == 0)
++ {
++ p += 8;
++ diff_algorithm_new = XDF_PATIENCE_DIFF;
++ }
++ else if (STRNCMP(p, "histogram", 9) == 0)
++ {
++ p += 9;
++ diff_algorithm_new = XDF_HISTOGRAM_DIFF;
++ }
++ }
++
+ if (*p != ',' && *p != NUL)
+ return FAIL;
+ if (*p == ',')
+***************
+*** 1916,1928 ****
+ return FAIL;
+
+ /* If "icase" or "iwhite" was added or removed, need to update the diff. */
+! if (diff_flags != diff_flags_new)
+ FOR_ALL_TABPAGES(tp)
+ tp->tp_diff_invalid = TRUE;
+
+ diff_flags = diff_flags_new;
+ diff_context = diff_context_new;
+ diff_foldcolumn = diff_foldcolumn_new;
+
+ diff_redraw(TRUE);
+
+--- 2214,2227 ----
+ return FAIL;
+
+ /* If "icase" or "iwhite" was added or removed, need to update the diff. */
+! if (diff_flags != diff_flags_new || diff_algorithm != diff_algorithm_new)
+ FOR_ALL_TABPAGES(tp)
+ tp->tp_diff_invalid = TRUE;
+
+ diff_flags = diff_flags_new;
+ diff_context = diff_context_new;
+ diff_foldcolumn = diff_foldcolumn_new;
++ diff_algorithm = diff_algorithm_new;
+
+ diff_redraw(TRUE);
+
+***************
+*** 2690,2693 ****
+--- 2989,3144 ----
+ return n;
+ }
+
++ /*
++ * Handle an ED style diff line.
++ * Return FAIL if the line does not contain diff info.
++ */
++ static int
++ parse_diff_ed(
++ char_u *line,
++ linenr_T *lnum_orig,
++ long *count_orig,
++ linenr_T *lnum_new,
++ long *count_new)
++ {
++ char_u *p;
++ long f1, l1, f2, l2;
++ int difftype;
++
++ // The line must be one of three formats:
++ // change: {first}[,{last}]c{first}[,{last}]
++ // append: {first}a{first}[,{last}]
++ // delete: {first}[,{last}]d{first}
++ p = line;
++ f1 = getdigits(&p);
++ if (*p == ',')
++ {
++ ++p;
++ l1 = getdigits(&p);
++ }
++ else
++ l1 = f1;
++ if (*p != 'a' && *p != 'c' && *p != 'd')
++ return FAIL; // invalid diff format
++ difftype = *p++;
++ f2 = getdigits(&p);
++ if (*p == ',')
++ {
++ ++p;
++ l2 = getdigits(&p);
++ }
++ else
++ l2 = f2;
++ if (l1 < f1 || l2 < f2)
++ return FAIL;
++
++ if (difftype == 'a')
++ {
++ *lnum_orig = f1 + 1;
++ *count_orig = 0;
++ }
++ else
++ {
++ *lnum_orig = f1;
++ *count_orig = l1 - f1 + 1;
++ }
++ if (difftype == 'd')
++ {
++ *lnum_new = f2 + 1;
++ *count_new = 0;
++ }
++ else
++ {
++ *lnum_new = f2;
++ *count_new = l2 - f2 + 1;
++ }
++ return OK;
++ }
++
++ /*
++ * Parses unified diff with zero(!) context lines.
++ * Return FAIL if there is no diff information in "line".
++ */
++ static int
++ parse_diff_unified(
++ char_u *line,
++ linenr_T *lnum_orig,
++ long *count_orig,
++ linenr_T *lnum_new,
++ long *count_new)
++ {
++ char_u *p;
++ long oldline, oldcount, newline, newcount;
++
++ // Parse unified diff hunk header:
++ // @@ -oldline,oldcount +newline,newcount @@
++ p = line;
++ if (*p++ == '@' && *p++ == '@' && *p++ == ' ' && *p++ == '-')
++ {
++ oldline = getdigits(&p);
++ if (*p == ',')
++ {
++ ++p;
++ oldcount = getdigits(&p);
++ }
++ else
++ oldcount = 1;
++ if (*p++ == ' ' && *p++ == '+')
++ {
++ newline = getdigits(&p);
++ if (*p == ',')
++ {
++ ++p;
++ newcount = getdigits(&p);
++ }
++ else
++ newcount = 1;
++ }
++ else
++ return FAIL; // invalid diff format
++
++ if (oldcount == 0)
++ oldline += 1;
++ if (newcount == 0)
++ newline += 1;
++ if (newline == 0)
++ newline = 1;
++
++ *lnum_orig = oldline;
++ *count_orig = oldcount;
++ *lnum_new = newline;
++ *count_new = newcount;
++
++ return OK;
++ }
++
++ return FAIL;
++ }
++
++ /*
++ * Callback function for the xdl_diff() function.
++ * Stores the diff output in a grow array.
++ */
++ static int
++ xdiff_out(void *priv, mmbuffer_t *mb, int nbuf)
++ {
++ diffout_T *dout = (diffout_T *)priv;
++ int i;
++ char_u *p;
++
++ for (i = 0; i < nbuf; i++)
++ {
++ // We are only interested in the header lines, skip text lines.
++ if (STRNCMP(mb[i].ptr, "@@ ", 3) != 0)
++ continue;
++ if (ga_grow(&dout->dout_ga, 1) == FAIL)
++ return -1;
++ p = vim_strnsave((char_u *)mb[i].ptr, mb[i].size);
++ if (p == NULL)
++ return -1;
++ ((char_u **)dout->dout_ga.ga_data)[dout->dout_ga.ga_len++] = p;
++ }
++ return 0;
++ }
++
+ #endif /* FEAT_DIFF */
+*** ../vim-8.1.0359/src/structs.h 2018-09-06 16:27:20.664831945 +0200
+--- src/structs.h 2018-09-10 17:36:24.457997346 +0200
+***************
+*** 2433,2439 ****
+ term_T *b_term; /* When not NULL this buffer is for a terminal
+ * window. */
+ #endif
+!
+ }; /* file_buffer */
+
+
+--- 2433,2441 ----
+ term_T *b_term; /* When not NULL this buffer is for a terminal
+ * window. */
+ #endif
+! #ifdef FEAT_DIFF
+! int b_diff_failed; // internal diff failed for this buffer
+! #endif
+ }; /* file_buffer */
+
+
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_01.dump 2018-09-10 17:44:36.056826154 +0200
+--- src/testdir/dumps/Test_diff_01.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|0+0#0000000#5fd7ff255| @33
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33
++ |++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |7|-@19||+1#0000000#ffffff0|++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |7|-@19
++ | @1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_02.dump 2018-09-10 17:44:36.060826113 +0200
+--- src/testdir/dumps/Test_diff_02.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|0+0#0000000#5fd7ff255| @33||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33
++ |++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |7|-@19||+1#0000000#ffffff0|++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |7|-@19
++ | @1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_03.dump 2018-09-10 17:44:36.064826075 +0200
+--- src/testdir/dumps/Test_diff_03.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ |++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |1|-@19||+1#0000000#ffffff0|++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |1|-@19
++ | @1|5+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255@1| @32
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_04.dump 2018-09-10 17:44:36.068826034 +0200
+--- src/testdir/dumps/Test_diff_04.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ |++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |1|-@19||+1#0000000#ffffff0|++0#0000e05#a8a8a8255| |+|-@1| @1|4| |l|i|n|e|s|:| |1|-@19
++ | @1|5+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255@1| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_05.dump 2018-09-10 17:44:36.072825994 +0200
+--- src/testdir/dumps/Test_diff_05.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|4+0#0000000#5fd7ff255| @33
++ | +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255@1| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_06.dump 2018-09-10 17:44:36.072825994 +0200
+--- src/testdir/dumps/Test_diff_06.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|4+0#0000000#5fd7ff255| @33||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|9+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32||+1&&| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0|0| @32
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|1+0#0000000#5fd7ff255@1| @32
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_07.dump 2018-09-10 17:44:36.076825953 +0200
+--- src/testdir/dumps/Test_diff_07.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1>#+0#0000000#ffffff0|i|n|c|l|u|d|e| |<|s|t|d|i|o|.|h|>| @16||+1&&| +0#0000e05#a8a8a8255@1|#+0#0000000#ffffff0|i|n|c|l|u|d|e| |<|s|t|d|i|o|.|h|>| @16
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1|/+2#0000000#ff404010@1| |F|r|o|b|s| |f|o@1| |h|e|a|r|t|i|l|y| +0&#ffd7ff255@13||+1&#ffffff0| +0#0000e05#a8a8a8255@1|i+2#0000000#ff404010|n|t| |f|i|b|(|i|n|t| |n|)| +0&#ffd7ff255@20
++ | +0#0000e05#a8a8a8255@1|i+0#0000000#5fd7ff255|n|t| |f|r|o|b|n|i|t|z|(|i|n|t| |f|o@1|)| @13||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@3|i|n+2&#ff404010|t| |i|;| +0&#ffd7ff255@24||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@3|i|f+2&#ff404010|(|n| |>| |2|)| +0&#ffd7ff255@21
++ | +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|f|o|r|(|i| |=| |0|;| |i| |<| |1|0|;| |i|+@1|)| @7||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@7|p+2&#ff404010|r|i|n|t|f|(|"|Y|o|u|r| |a|n|s|w|e|r| |i|s|:| |"|)+0&#ffd7ff255|;||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@7|r+2&#ff404010|e|t|u|r|n| |f|i|b|(|n|-|1|)| |+| |f|i|b|(|n|-|2|)+0&#ffd7ff255|;
++ | +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@7|p|r|i|n|t|f|(|"|%|d|\|n|"|,| |f|o@1|)|;| @6||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|}| @29||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|}| @29
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|r|e|t|u|r|n| |1|;| @21
++ | +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1|i+2#0000000#ff404010|n|t| |f|a|c|t|(|i|n|t| |n|)| +0&#ffd7ff255@19||+1&#ffffff0| +0#0000e05#a8a8a8255@1|/+2#0000000#ff404010@1| |F|r|o|b|s| |f|o@1| |h|e|a|r|t|i|l|y| +0&#ffd7ff255@13
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|i+0#0000000#5fd7ff255|n|t| |f|r|o|b|n|i|t|z|(|i|n|t| |f|o@1|)| @13
++ | +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@3|i|f+2&#ff404010|(|n| |>| |1|)| +0&#ffd7ff255@21||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#ffd7ff255@3|i|n+2&#ff404010|t| |i|;| +0&#ffd7ff255@24
++ |X+3&#ffffff0|f|i|l|e|1| @12|1|,|1| @11|T|o|p| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|T|o|p
++ |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|i|n|t|e|r|n|a|l| @52
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_08.dump 2018-09-10 17:44:36.080825913 +0200
+--- src/testdir/dumps/Test_diff_08.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1>#+0#0000000#ffffff0|i|n|c|l|u|d|e| |<|s|t|d|i|o|.|h|>| @16||+1&&| +0#0000e05#a8a8a8255@1|#+0#0000000#ffffff0|i|n|c|l|u|d|e| |<|s|t|d|i|o|.|h|>| @16
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|i+0#0000000#5fd7ff255|n|t| |f|i|b|(|i|n|t| |n|)| @20
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|{+0#0000000#5fd7ff255| @33
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|i|f|(|n| |>| |2|)| @21
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|{| @29
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@7|r|e|t|u|r|n| |f|i|b|(|n|-|1|)| |+| |f|i|b|(|n|-|2|)|;
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|}| @29
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|r|e|t|u|r|n| |1|;| @21
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|}+0#0000000#5fd7ff255| @33
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34
++ | +0#0000e05#a8a8a8255@1|/+0#0000000#ffffff0@1| |F|r|o|b|s| |f|o@1| |h|e|a|r|t|i|l|y| @13||+1&&| +0#0000e05#a8a8a8255@1|/+0#0000000#ffffff0@1| |F|r|o|b|s| |f|o@1| |h|e|a|r|t|i|l|y| @13
++ | +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|t| |f|r|o|b|n|i|t|z|(|i|n|t| |f|o@1|)| @13||+1&&| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|t| |f|r|o|b|n|i|t|z|(|i|n|t| |f|o@1|)| @13
++ | +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|i|n|t| |i|;| @24||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|i|n|t| |i|;| @24
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|f|o|r|(|i| |=| |0|;| |i| |<| |1|0|;| |i|+@1|)| @7||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|f|o|r|(|i| |=| |0|;| |i| |<| |1|0|;| |i|+@1|)| @7
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29
++ | +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@7|p|r|i|n|t|f|(|"|Y|o|u|r| |a|n|s|w|e|r| |i|s|:| |"|)|;||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ |X+3#0000000#ffffff0|f|i|l|e|1| @12|1|,|1| @11|T|o|p| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|T|o|p
++ |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|a|l|g|o|r|i|t|h|m|:|p|a|t|i|e|n|c|e| @42
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_09.dump 2018-09-10 17:44:36.084825872 +0200
+--- src/testdir/dumps/Test_diff_09.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1>#+0#0000000#ffffff0|i|n|c|l|u|d|e| |<|s|t|d|i|o|.|h|>| @16||+1&&| +0#0000e05#a8a8a8255@1|#+0#0000000#ffffff0|i|n|c|l|u|d|e| |<|s|t|d|i|o|.|h|>| @16
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|i+0#0000000#5fd7ff255|n|t| |f|i|b|(|i|n|t| |n|)| @20
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|{+0#0000000#5fd7ff255| @33
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|i|f|(|n| |>| |2|)| @21
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|{| @29
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@7|r|e|t|u|r|n| |f|i|b|(|n|-|1|)| |+| |f|i|b|(|n|-|2|)|;
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|}| @29
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|r|e|t|u|r|n| |1|;| @21
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|}+0#0000000#5fd7ff255| @33
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34
++ | +0#0000e05#a8a8a8255@1|/+0#0000000#ffffff0@1| |F|r|o|b|s| |f|o@1| |h|e|a|r|t|i|l|y| @13||+1&&| +0#0000e05#a8a8a8255@1|/+0#0000000#ffffff0@1| |F|r|o|b|s| |f|o@1| |h|e|a|r|t|i|l|y| @13
++ | +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|t| |f|r|o|b|n|i|t|z|(|i|n|t| |f|o@1|)| @13||+1&&| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|t| |f|r|o|b|n|i|t|z|(|i|n|t| |f|o@1|)| @13
++ | +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|i|n|t| |i|;| @24||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|i|n|t| |i|;| @24
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|f|o|r|(|i| |=| |0|;| |i| |<| |1|0|;| |i|+@1|)| @7||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|f|o|r|(|i| |=| |0|;| |i| |<| |1|0|;| |i|+@1|)| @7
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29
++ | +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@7|p|r|i|n|t|f|(|"|Y|o|u|r| |a|n|s|w|e|r| |i|s|:| |"|)|;||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ |X+3#0000000#ffffff0|f|i|l|e|1| @12|1|,|1| @11|T|o|p| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|T|o|p
++ |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|a|l|g|o|r|i|t|h|m|:|p|a|t|i|e|n|c|e| @42
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_10.dump 2018-09-10 17:44:36.088825834 +0200
+--- src/testdir/dumps/Test_diff_10.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|d|e|f| |f|i|n|a|l|i|z|e|(|v|a|l|u|e|s|)| @12||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|d|e|f| |f|i|n|a|l|i|z|e|(|v|a|l|u|e|s|)| @12
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v|a|l|u|e|s|.|e|a|c|h| |d|o| |||v||| @12||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v|a|l|u|e|s|.|e|a|c|h| |d|o| |||v||| @12
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@5|v|.|p|r|e|p|a|r|e| @19
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|e|n|d| @27
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|v|a|l|u|e|s|.|e|a|c|h| |d|o| |||v||| @12
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|v|.|f|i|n|a|l|i|z|e| @18||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|v|.|f|i|n|a|l|i|z|e| @18
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|e|n|d| @27||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|e|n|d| @27
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|0|-|1| @9|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|0|-|1| @9|A|l@1
++ |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|i|n|t|e|r|n|a|l| @52
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_11.dump 2018-09-10 17:44:36.092825793 +0200
+--- src/testdir/dumps/Test_diff_11.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|d|e|f| |f|i|n|a|l|i|z|e|(|v|a|l|u|e|s|)| @12||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|d|e|f| |f|i|n|a|l|i|z|e|(|v|a|l|u|e|s|)| @12
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|v|a|l|u|e|s|.|e|a|c|h| |d|o| |||v||| @12
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@5|v|.|p|r|e|p|a|r|e| @19
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@3|e|n|d| @27
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v|a|l|u|e|s|.|e|a|c|h| |d|o| |||v||| @12||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|v|a|l|u|e|s|.|e|a|c|h| |d|o| |||v||| @12
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|v|.|f|i|n|a|l|i|z|e| @18||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|v|.|f|i|n|a|l|i|z|e| @18
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|e|n|d| @27||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|e|n|d| @27
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|0|-|1| @9|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|0|-|1| @9|A|l@1
++ |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|i|n|d|e|n|t|-|h|e|u|r|i|s|t|i|c| @44
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_12.dump 2018-09-10 17:44:36.096825753 +0200
+--- src/testdir/dumps/Test_diff_12.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ |++0#0000e05#a8a8a8255| |+|-@1| |1|0| |l|i|n|e|s|:| |1|-@19||+1#0000000#ffffff0|++0#0000e05#a8a8a8255| |+|-@1| |1|0| |l|i|n|e|s|:| |1|-@19
++ | @1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_13.dump 2018-09-10 17:44:36.096825753 +0200
+--- src/testdir/dumps/Test_diff_13.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ |-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@34||+1&&|-+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|0|,|0|-|1| @9|A|l@1| |X+1&&|f|i|l|e|2| @12|0|,|0|-|1| @9|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_14.dump 2018-09-10 17:44:36.100825712 +0200
+--- src/testdir/dumps/Test_diff_14.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|A+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|c+0#0000000#ffd7ff255|d| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|c+0#0000000#ffd7ff255|D|e+2&#ff404010| +0&#ffd7ff255@31
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_15.dump 2018-09-10 17:44:36.104825672 +0200
+--- src/testdir/dumps/Test_diff_15.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1>i+0#0000000#ffffff0|n|t| |m|a|i|n|(|)| @24||+1&&| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|t| |m|a|i|n|(|)| @24
++ | +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@2|i|f| |(|0|)| @25
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@2|{| @30
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@2|p|r|i|n|t|f|(|"|H|e|l@1|o|,| |W|o|r|l|d|!|"|)|;| @7||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|p|r|i|n|t|f|(|"|H|e|l@1|o|,| |W|o|r|l|d|!|"|)|;| @4
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@2|r|e|t|u|r|n| |0|;| @22||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|r|e|t|u|r|n| |0|;| @19
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@2|}| @30
++ | +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&|s|e|t| |d|i|f@1|o|p|t|&|v|i|m| |d|i|f@1|o|p|t|+|=|f|i|l@1|e|r| |d|i|f@1|o|p|t|+|=|i|w|h|i|t|e| @26
+*** ../vim-8.1.0359/src/testdir/dumps/Test_diff_16.dump 2018-09-10 17:44:36.108825631 +0200
+--- src/testdir/dumps/Test_diff_16.dump 2018-09-10 17:36:51.625695584 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1>i+0#0000000#ffffff0|n|t| |m|a|i|n|(|)| @24||+1&&| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|t| |m|a|i|n|(|)| @24
++ | +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|{+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@2|i|f| |(|0|)| @25
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@2|{| @30
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@2|p|r|i|n|t|f|(|"|H|e|l@1|o|,| |W|o|r|l|d|!|"|)|;| @7||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|p|r|i|n|t|f|(|"|H|e|l@1|o|,| |W|o|r|l|d|!|"|)|;| @4
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@2|r|e|t|u|r|n| |0|;| @22||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@5|r|e|t|u|r|n| |0|;| @19
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@2|}| @30
++ | +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|}+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|i|n|t|e|r|n|a|l| @52
+*** ../vim-8.1.0359/src/testdir/test_diffmode.vim 2017-12-01 20:25:59.000000000 +0100
+--- src/testdir/test_diffmode.vim 2018-09-10 17:38:33.584583735 +0200
+***************
+*** 1,4 ****
+--- 1,6 ----
+ " Tests for diff mode
++ source shared.vim
++ source screendump.vim
+
+ func Test_diff_fold_sync()
+ enew!
+***************
+*** 33,38 ****
+--- 35,52 ----
+ endfunc
+
+ func Test_vert_split()
++ set diffopt=filler
++ call Common_vert_split()
++ set diffopt&
++ endfunc
++
++ func Test_vert_split_internal()
++ set diffopt=internal,filler
++ call Common_vert_split()
++ set diffopt&
++ endfunc
++
++ func Common_vert_split()
+ " Disable the title to avoid xterm keeping the wrong one.
+ set notitle noicon
+ new
+***************
+*** 275,284 ****
+ bwipe!
+ endfunc
+
+! func Test_diffopt_icase()
+! set diffopt=icase,foldcolumn:0
+!
+! e one
+ call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
+ redraw
+ let normattr = screenattr(1, 1)
+--- 295,302 ----
+ bwipe!
+ endfunc
+
+! func Common_icase_test()
+! edit one
+ call setline(1, ['One', 'Two', 'Three', 'Four', 'Fi#ve'])
+ redraw
+ let normattr = screenattr(1, 1)
+***************
+*** 300,331 ****
+
+ diffoff!
+ %bwipe!
+ set diffopt&
+ endfunc
+
+! func Test_diffopt_iwhite()
+! set diffopt=iwhite,foldcolumn:0
+
+! e one
+! " Difference in trailing spaces should be ignored,
+ " but not other space differences.
+! call setline(1, ["One \t", 'Two', 'Three', 'Four'])
+ redraw
+ let normattr = screenattr(1, 1)
+ diffthis
+
+ botright vert new two
+! call setline(1, ["One\t ", "Two\t ", 'Three', ' Four'])
+ diffthis
+
+ redraw
+ call assert_equal(normattr, screenattr(1, 1))
+ call assert_equal(normattr, screenattr(2, 1))
+ call assert_equal(normattr, screenattr(3, 1))
+! call assert_notequal(normattr, screenattr(4, 1))
+
+ diffoff!
+ %bwipe!
+ set diffopt&
+ endfunc
+
+--- 318,371 ----
+
+ diffoff!
+ %bwipe!
++ endfunc
++
++ func Test_diffopt_icase()
++ set diffopt=icase,foldcolumn:0
++ call Common_icase_test()
+ set diffopt&
+ endfunc
+
+! func Test_diffopt_icase_internal()
+! set diffopt=icase,foldcolumn:0,internal
+! call Common_icase_test()
+! set diffopt&
+! endfunc
+
+! func Common_iwhite_test()
+! edit one
+! " Difference in trailing spaces and amount of spaces should be ignored,
+ " but not other space differences.
+! call setline(1, ["One \t", 'Two', 'Three', 'one two', 'one two', 'Four'])
+ redraw
+ let normattr = screenattr(1, 1)
+ diffthis
+
+ botright vert new two
+! call setline(1, ["One\t ", "Two\t ", 'Three', 'one two', 'onetwo', ' Four'])
+ diffthis
+
+ redraw
+ call assert_equal(normattr, screenattr(1, 1))
+ call assert_equal(normattr, screenattr(2, 1))
+ call assert_equal(normattr, screenattr(3, 1))
+! call assert_equal(normattr, screenattr(4, 1))
+! call assert_notequal(normattr, screenattr(5, 1))
+! call assert_notequal(normattr, screenattr(6, 1))
+
+ diffoff!
+ %bwipe!
++ endfunc
++
++ func Test_diffopt_iwhite()
++ set diffopt=iwhite,foldcolumn:0
++ call Common_iwhite_test()
++ set diffopt&
++ endfunc
++
++ func Test_diffopt_iwhite_internal()
++ set diffopt=internal,iwhite,foldcolumn:0
++ call Common_iwhite_test()
+ set diffopt&
+ endfunc
+
+***************
+*** 339,346 ****
+--- 379,391 ----
+
+ set diffopt=context:2
+ call assert_equal('+-- 2 lines: 1', foldtextresult(1))
++ set diffopt=internal,context:2
++ call assert_equal('+-- 2 lines: 1', foldtextresult(1))
++
+ set diffopt=context:1
+ call assert_equal('+-- 3 lines: 1', foldtextresult(1))
++ set diffopt=internal,context:1
++ call assert_equal('+-- 3 lines: 1', foldtextresult(1))
+
+ diffoff!
+ %bwipe!
+***************
+*** 348,354 ****
+ endfunc
+
+ func Test_diffopt_horizontal()
+! set diffopt=horizontal
+ diffsplit
+
+ call assert_equal(&columns, winwidth(1))
+--- 393,399 ----
+ endfunc
+
+ func Test_diffopt_horizontal()
+! set diffopt=internal,horizontal
+ diffsplit
+
+ call assert_equal(&columns, winwidth(1))
+***************
+*** 362,368 ****
+ endfunc
+
+ func Test_diffopt_vertical()
+! set diffopt=vertical
+ diffsplit
+
+ call assert_equal(&lines - 2, winheight(1))
+--- 407,413 ----
+ endfunc
+
+ func Test_diffopt_vertical()
+! set diffopt=internal,vertical
+ diffsplit
+
+ call assert_equal(&lines - 2, winheight(1))
+***************
+*** 376,382 ****
+ endfunc
+
+ func Test_diffopt_hiddenoff()
+! set diffopt=filler,foldcolumn:0,hiddenoff
+ e! one
+ call setline(1, ['Two', 'Three'])
+ redraw
+--- 421,427 ----
+ endfunc
+
+ func Test_diffopt_hiddenoff()
+! set diffopt=internal,filler,foldcolumn:0,hiddenoff
+ e! one
+ call setline(1, ['Two', 'Three'])
+ redraw
+***************
+*** 399,405 ****
+ endfunc
+
+ func Test_diffoff_hidden()
+! set diffopt=filler,foldcolumn:0
+ e! one
+ call setline(1, ['Two', 'Three'])
+ redraw
+--- 444,450 ----
+ endfunc
+
+ func Test_diffoff_hidden()
+! set diffopt=internal,filler,foldcolumn:0
+ e! one
+ call setline(1, ['Two', 'Three'])
+ redraw
+***************
+*** 629,631 ****
+--- 674,791 ----
+ bwipe!
+ bwipe!
+ endfunc
++
++ func WriteDiffFiles(list1, list2)
++ call writefile(a:list1, 'Xfile1')
++ call writefile(a:list2, 'Xfile2')
++ endfunc
++
++ " Verify a screendump with both the external and external diff.
++ func VerifyBoth(buf, dumpfile, extra)
++ call term_sendkeys(a:buf, ":diffupdate!\<cr>")
++ " trailing : for leaving the cursor on the command line
++ for cmd in [":set diffopt=filler" . a:extra . "\<cr>:", ":set diffopt+=internal\<cr>:"]
++ call term_sendkeys(a:buf, cmd)
++ if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
++ break " don't let the next iteration overwrite the "failed" file.
++ endif
++ endfor
++ endfunc
++
++ func Test_diff_screen()
++ if !CanRunVimInTerminal() || !has('menu')
++ return
++ endif
++ " clean up already existing swap files, just in case
++ call delete('.Xfile1.swp')
++ call delete('.Xfile2.swp')
++
++ " Test 1: Add a line in beginning of file 2
++ call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
++ let buf = RunVimInTerminal('-d Xfile1 Xfile2', {})
++ " Set autoread mode, ,so that Vim won't complain once we re-write the test
++ " files
++ call term_sendkeys(buf, ":set autoread\<cr>\<c-w>w:set autoread\<cr>\<c-w>w")
++
++ call VerifyBoth(buf, 'Test_diff_01', '')
++
++ " Test 2: Add a line in beginning of file 1
++ call WriteDiffFiles([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
++ call VerifyBoth(buf, 'Test_diff_02', '')
++
++ " Test 3: Add a line at the end of file 2
++ call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
++ call VerifyBoth(buf, 'Test_diff_03', '')
++
++ " Test 4: Add a line at the end of file 1
++ call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
++ call VerifyBoth(buf, 'Test_diff_04', '')
++
++ " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
++ call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10])
++ call VerifyBoth(buf, 'Test_diff_05', '')
++
++ " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
++ call WriteDiffFiles([1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
++ call VerifyBoth(buf, 'Test_diff_06', '')
++
++ " Test 7 - 9: Test normal/patience/histogram diff algorithm
++ call WriteDiffFiles(['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
++ \ ' int i;', ' for(i = 0; i < 10; i++)', ' {', ' printf("Your answer is: ");',
++ \ ' printf("%d\n", foo);', ' }', '}', '', 'int fact(int n)', '{', ' if(n > 1)', ' {',
++ \ ' return fact(n-1) * n;', ' }', ' return 1;', '}', '', 'int main(int argc, char **argv)',
++ \ '{', ' frobnitz(fact(10));', '}'],
++ \ ['#include <stdio.h>', '', 'int fib(int n)', '{', ' if(n > 2)', ' {',
++ \ ' return fib(n-1) + fib(n-2);', ' }', ' return 1;', '}', '', '// Frobs foo heartily',
++ \ 'int frobnitz(int foo)', '{', ' int i;', ' for(i = 0; i < 10; i++)', ' {',
++ \ ' printf("%d\n", foo);', ' }', '}', '',
++ \ 'int main(int argc, char **argv)', '{', ' frobnitz(fib(10));', '}'])
++ call term_sendkeys(buf, ":diffupdate!\<cr>")
++ call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
++ call VerifyScreenDump(buf, 'Test_diff_07', {})
++
++ call term_sendkeys(buf, ":set diffopt+=algorithm:patience\<cr>")
++ call VerifyScreenDump(buf, 'Test_diff_08', {})
++
++ call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\<cr>")
++ call VerifyScreenDump(buf, 'Test_diff_09', {})
++
++ " Test 10-11: normal/indent-heuristic
++ call term_sendkeys(buf, ":set diffopt&vim\<cr>")
++ call WriteDiffFiles(['', ' def finalize(values)', '', ' values.each do |v|', ' v.finalize', ' end'],
++ \ ['', ' def finalize(values)', '', ' values.each do |v|', ' v.prepare', ' end', '',
++ \ ' values.each do |v|', ' v.finalize', ' end'])
++ call term_sendkeys(buf, ":diffupdate!\<cr>")
++ call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
++ call VerifyScreenDump(buf, 'Test_diff_10', {})
++
++ call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>")
++ call VerifyScreenDump(buf, 'Test_diff_11', {})
++
++ " Test 12: diff the same file
++ call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
++ call VerifyBoth(buf, 'Test_diff_12', '')
++
++ " Test 13: diff an empty file
++ call WriteDiffFiles([], [])
++ call VerifyBoth(buf, 'Test_diff_13', '')
++
++ " Test 14: test diffopt+=icase
++ call WriteDiffFiles(['a', 'b', 'cd'], ['A', 'b', 'cDe'])
++ call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
++
++ " Test 15-16: test diffopt+=iwhite
++ call WriteDiffFiles(['int main()', '{', ' printf("Hello, World!");', ' return 0;', '}'],
++ \ ['int main()', '{', ' if (0)', ' {', ' printf("Hello, World!");', ' return 0;', ' }', '}'])
++ call term_sendkeys(buf, ":diffupdate!\<cr>")
++ call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
++ call VerifyScreenDump(buf, 'Test_diff_15', {})
++ call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
++ call VerifyScreenDump(buf, 'Test_diff_16', {})
++
++ " clean up
++ call StopVimInTerminal(buf)
++ call delete('Xfile1')
++ call delete('Xfile2')
++ endfunc
++
+*** ../vim-8.1.0359/src/xdiff/COPYING 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/COPYING 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,504 ----
++ GNU LESSER GENERAL PUBLIC LICENSE
++ Version 2.1, February 1999
++
++ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++ [This is the first released version of the Lesser GPL. It also counts
++ as the successor of the GNU Library Public License, version 2, hence
++ the version number 2.1.]
++
++ Preamble
++
++ The licenses for most software are designed to take away your
++ freedom to share and change it. By contrast, the GNU General Public
++ Licenses are intended to guarantee your freedom to share and change
++ free software--to make sure the software is free for all its users.
++
++ This license, the Lesser General Public License, applies to some
++ specially designated software packages--typically libraries--of the
++ Free Software Foundation and other authors who decide to use it. You
++ can use it too, but we suggest you first think carefully about whether
++ this license or the ordinary General Public License is the better
++ strategy to use in any particular case, based on the explanations below.
++
++ When we speak of free software, we are referring to freedom of use,
++ not price. Our General Public Licenses are designed to make sure that
++ you have the freedom to distribute copies of free software (and charge
++ for this service if you wish); that you receive source code or can get
++ it if you want it; that you can change the software and use pieces of
++ it in new free programs; and that you are informed that you can do
++ these things.
++
++ To protect your rights, we need to make restrictions that forbid
++ distributors to deny you these rights or to ask you to surrender these
++ rights. These restrictions translate to certain responsibilities for
++ you if you distribute copies of the library or if you modify it.
++
++ For example, if you distribute copies of the library, whether gratis
++ or for a fee, you must give the recipients all the rights that we gave
++ you. You must make sure that they, too, receive or can get the source
++ code. If you link other code with the library, you must provide
++ complete object files to the recipients, so that they can relink them
++ with the library after making changes to the library and recompiling
++ it. And you must show them these terms so they know their rights.
++
++ We protect your rights with a two-step method: (1) we copyright the
++ library, and (2) we offer you this license, which gives you legal
++ permission to copy, distribute and/or modify the library.
++
++ To protect each distributor, we want to make it very clear that
++ there is no warranty for the free library. Also, if the library is
++ modified by someone else and passed on, the recipients should know
++ that what they have is not the original version, so that the original
++ author's reputation will not be affected by problems that might be
++ introduced by others.
++
++ Finally, software patents pose a constant threat to the existence of
++ any free program. We wish to make sure that a company cannot
++ effectively restrict the users of a free program by obtaining a
++ restrictive license from a patent holder. Therefore, we insist that
++ any patent license obtained for a version of the library must be
++ consistent with the full freedom of use specified in this license.
++
++ Most GNU software, including some libraries, is covered by the
++ ordinary GNU General Public License. This license, the GNU Lesser
++ General Public License, applies to certain designated libraries, and
++ is quite different from the ordinary General Public License. We use
++ this license for certain libraries in order to permit linking those
++ libraries into non-free programs.
++
++ When a program is linked with a library, whether statically or using
++ a shared library, the combination of the two is legally speaking a
++ combined work, a derivative of the original library. The ordinary
++ General Public License therefore permits such linking only if the
++ entire combination fits its criteria of freedom. The Lesser General
++ Public License permits more lax criteria for linking other code with
++ the library.
++
++ We call this license the "Lesser" General Public License because it
++ does Less to protect the user's freedom than the ordinary General
++ Public License. It also provides other free software developers Less
++ of an advantage over competing non-free programs. These disadvantages
++ are the reason we use the ordinary General Public License for many
++ libraries. However, the Lesser license provides advantages in certain
++ special circumstances.
++
++ For example, on rare occasions, there may be a special need to
++ encourage the widest possible use of a certain library, so that it becomes
++ a de-facto standard. To achieve this, non-free programs must be
++ allowed to use the library. A more frequent case is that a free
++ library does the same job as widely used non-free libraries. In this
++ case, there is little to gain by limiting the free library to free
++ software only, so we use the Lesser General Public License.
++
++ In other cases, permission to use a particular library in non-free
++ programs enables a greater number of people to use a large body of
++ free software. For example, permission to use the GNU C Library in
++ non-free programs enables many more people to use the whole GNU
++ operating system, as well as its variant, the GNU/Linux operating
++ system.
++
++ Although the Lesser General Public License is Less protective of the
++ users' freedom, it does ensure that the user of a program that is
++ linked with the Library has the freedom and the wherewithal to run
++ that program using a modified version of the Library.
++
++ The precise terms and conditions for copying, distribution and
++ modification follow. Pay close attention to the difference between a
++ "work based on the library" and a "work that uses the library". The
++ former contains code derived from the library, whereas the latter must
++ be combined with the library in order to run.
++
++ GNU LESSER GENERAL PUBLIC LICENSE
++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++ 0. This License Agreement applies to any software library or other
++ program which contains a notice placed by the copyright holder or
++ other authorized party saying it may be distributed under the terms of
++ this Lesser General Public License (also called "this License").
++ Each licensee is addressed as "you".
++
++ A "library" means a collection of software functions and/or data
++ prepared so as to be conveniently linked with application programs
++ (which use some of those functions and data) to form executables.
++
++ The "Library", below, refers to any such software library or work
++ which has been distributed under these terms. A "work based on the
++ Library" means either the Library or any derivative work under
++ copyright law: that is to say, a work containing the Library or a
++ portion of it, either verbatim or with modifications and/or translated
++ straightforwardly into another language. (Hereinafter, translation is
++ included without limitation in the term "modification".)
++
++ "Source code" for a work means the preferred form of the work for
++ making modifications to it. For a library, complete source code means
++ all the source code for all modules it contains, plus any associated
++ interface definition files, plus the scripts used to control compilation
++ and installation of the library.
++
++ Activities other than copying, distribution and modification are not
++ covered by this License; they are outside its scope. The act of
++ running a program using the Library is not restricted, and output from
++ such a program is covered only if its contents constitute a work based
++ on the Library (independent of the use of the Library in a tool for
++ writing it). Whether that is true depends on what the Library does
++ and what the program that uses the Library does.
++
++ 1. You may copy and distribute verbatim copies of the Library's
++ complete source code as you receive it, in any medium, provided that
++ you conspicuously and appropriately publish on each copy an
++ appropriate copyright notice and disclaimer of warranty; keep intact
++ all the notices that refer to this License and to the absence of any
++ warranty; and distribute a copy of this License along with the
++ Library.
++
++ You may charge a fee for the physical act of transferring a copy,
++ and you may at your option offer warranty protection in exchange for a
++ fee.
++
++ 2. You may modify your copy or copies of the Library or any portion
++ of it, thus forming a work based on the Library, and copy and
++ distribute such modifications or work under the terms of Section 1
++ above, provided that you also meet all of these conditions:
++
++ a) The modified work must itself be a software library.
++
++ b) You must cause the files modified to carry prominent notices
++ stating that you changed the files and the date of any change.
++
++ c) You must cause the whole of the work to be licensed at no
++ charge to all third parties under the terms of this License.
++
++ d) If a facility in the modified Library refers to a function or a
++ table of data to be supplied by an application program that uses
++ the facility, other than as an argument passed when the facility
++ is invoked, then you must make a good faith effort to ensure that,
++ in the event an application does not supply such function or
++ table, the facility still operates, and performs whatever part of
++ its purpose remains meaningful.
++
++ (For example, a function in a library to compute square roots has
++ a purpose that is entirely well-defined independent of the
++ application. Therefore, Subsection 2d requires that any
++ application-supplied function or table used by this function must
++ be optional: if the application does not supply it, the square
++ root function must still compute square roots.)
++
++ These requirements apply to the modified work as a whole. If
++ identifiable sections of that work are not derived from the Library,
++ and can be reasonably considered independent and separate works in
++ themselves, then this License, and its terms, do not apply to those
++ sections when you distribute them as separate works. But when you
++ distribute the same sections as part of a whole which is a work based
++ on the Library, the distribution of the whole must be on the terms of
++ this License, whose permissions for other licensees extend to the
++ entire whole, and thus to each and every part regardless of who wrote
++ it.
++
++ Thus, it is not the intent of this section to claim rights or contest
++ your rights to work written entirely by you; rather, the intent is to
++ exercise the right to control the distribution of derivative or
++ collective works based on the Library.
++
++ In addition, mere aggregation of another work not based on the Library
++ with the Library (or with a work based on the Library) on a volume of
++ a storage or distribution medium does not bring the other work under
++ the scope of this License.
++
++ 3. You may opt to apply the terms of the ordinary GNU General Public
++ License instead of this License to a given copy of the Library. To do
++ this, you must alter all the notices that refer to this License, so
++ that they refer to the ordinary GNU General Public License, version 2,
++ instead of to this License. (If a newer version than version 2 of the
++ ordinary GNU General Public License has appeared, then you can specify
++ that version instead if you wish.) Do not make any other change in
++ these notices.
++
++ Once this change is made in a given copy, it is irreversible for
++ that copy, so the ordinary GNU General Public License applies to all
++ subsequent copies and derivative works made from that copy.
++
++ This option is useful when you wish to copy part of the code of
++ the Library into a program that is not a library.
++
++ 4. You may copy and distribute the Library (or a portion or
++ derivative of it, under Section 2) in object code or executable form
++ under the terms of Sections 1 and 2 above provided that you accompany
++ it with the complete corresponding machine-readable source code, which
++ must be distributed under the terms of Sections 1 and 2 above on a
++ medium customarily used for software interchange.
++
++ If distribution of object code is made by offering access to copy
++ from a designated place, then offering equivalent access to copy the
++ source code from the same place satisfies the requirement to
++ distribute the source code, even though third parties are not
++ compelled to copy the source along with the object code.
++
++ 5. A program that contains no derivative of any portion of the
++ Library, but is designed to work with the Library by being compiled or
++ linked with it, is called a "work that uses the Library". Such a
++ work, in isolation, is not a derivative work of the Library, and
++ therefore falls outside the scope of this License.
++
++ However, linking a "work that uses the Library" with the Library
++ creates an executable that is a derivative of the Library (because it
++ contains portions of the Library), rather than a "work that uses the
++ library". The executable is therefore covered by this License.
++ Section 6 states terms for distribution of such executables.
++
++ When a "work that uses the Library" uses material from a header file
++ that is part of the Library, the object code for the work may be a
++ derivative work of the Library even though the source code is not.
++ Whether this is true is especially significant if the work can be
++ linked without the Library, or if the work is itself a library. The
++ threshold for this to be true is not precisely defined by law.
++
++ If such an object file uses only numerical parameters, data
++ structure layouts and accessors, and small macros and small inline
++ functions (ten lines or less in length), then the use of the object
++ file is unrestricted, regardless of whether it is legally a derivative
++ work. (Executables containing this object code plus portions of the
++ Library will still fall under Section 6.)
++
++ Otherwise, if the work is a derivative of the Library, you may
++ distribute the object code for the work under the terms of Section 6.
++ Any executables containing that work also fall under Section 6,
++ whether or not they are linked directly with the Library itself.
++
++ 6. As an exception to the Sections above, you may also combine or
++ link a "work that uses the Library" with the Library to produce a
++ work containing portions of the Library, and distribute that work
++ under terms of your choice, provided that the terms permit
++ modification of the work for the customer's own use and reverse
++ engineering for debugging such modifications.
++
++ You must give prominent notice with each copy of the work that the
++ Library is used in it and that the Library and its use are covered by
++ this License. You must supply a copy of this License. If the work
++ during execution displays copyright notices, you must include the
++ copyright notice for the Library among them, as well as a reference
++ directing the user to the copy of this License. Also, you must do one
++ of these things:
++
++ a) Accompany the work with the complete corresponding
++ machine-readable source code for the Library including whatever
++ changes were used in the work (which must be distributed under
++ Sections 1 and 2 above); and, if the work is an executable linked
++ with the Library, with the complete machine-readable "work that
++ uses the Library", as object code and/or source code, so that the
++ user can modify the Library and then relink to produce a modified
++ executable containing the modified Library. (It is understood
++ that the user who changes the contents of definitions files in the
++ Library will not necessarily be able to recompile the application
++ to use the modified definitions.)
++
++ b) Use a suitable shared library mechanism for linking with the
++ Library. A suitable mechanism is one that (1) uses at run time a
++ copy of the library already present on the user's computer system,
++ rather than copying library functions into the executable, and (2)
++ will operate properly with a modified version of the library, if
++ the user installs one, as long as the modified version is
++ interface-compatible with the version that the work was made with.
++
++ c) Accompany the work with a written offer, valid for at
++ least three years, to give the same user the materials
++ specified in Subsection 6a, above, for a charge no more
++ than the cost of performing this distribution.
++
++ d) If distribution of the work is made by offering access to copy
++ from a designated place, offer equivalent access to copy the above
++ specified materials from the same place.
++
++ e) Verify that the user has already received a copy of these
++ materials or that you have already sent this user a copy.
++
++ For an executable, the required form of the "work that uses the
++ Library" must include any data and utility programs needed for
++ reproducing the executable from it. However, as a special exception,
++ the materials to be distributed need not include anything that is
++ normally distributed (in either source or binary form) with the major
++ components (compiler, kernel, and so on) of the operating system on
++ which the executable runs, unless that component itself accompanies
++ the executable.
++
++ It may happen that this requirement contradicts the license
++ restrictions of other proprietary libraries that do not normally
++ accompany the operating system. Such a contradiction means you cannot
++ use both them and the Library together in an executable that you
++ distribute.
++
++ 7. You may place library facilities that are a work based on the
++ Library side-by-side in a single library together with other library
++ facilities not covered by this License, and distribute such a combined
++ library, provided that the separate distribution of the work based on
++ the Library and of the other library facilities is otherwise
++ permitted, and provided that you do these two things:
++
++ a) Accompany the combined library with a copy of the same work
++ based on the Library, uncombined with any other library
++ facilities. This must be distributed under the terms of the
++ Sections above.
++
++ b) Give prominent notice with the combined library of the fact
++ that part of it is a work based on the Library, and explaining
++ where to find the accompanying uncombined form of the same work.
++
++ 8. You may not copy, modify, sublicense, link with, or distribute
++ the Library except as expressly provided under this License. Any
++ attempt otherwise to copy, modify, sublicense, link with, or
++ distribute the Library is void, and will automatically terminate your
++ rights under this License. However, parties who have received copies,
++ or rights, from you under this License will not have their licenses
++ terminated so long as such parties remain in full compliance.
++
++ 9. You are not required to accept this License, since you have not
++ signed it. However, nothing else grants you permission to modify or
++ distribute the Library or its derivative works. These actions are
++ prohibited by law if you do not accept this License. Therefore, by
++ modifying or distributing the Library (or any work based on the
++ Library), you indicate your acceptance of this License to do so, and
++ all its terms and conditions for copying, distributing or modifying
++ the Library or works based on it.
++
++ 10. Each time you redistribute the Library (or any work based on the
++ Library), the recipient automatically receives a license from the
++ original licensor to copy, distribute, link with or modify the Library
++ subject to these terms and conditions. You may not impose any further
++ restrictions on the recipients' exercise of the rights granted herein.
++ You are not responsible for enforcing compliance by third parties with
++ this License.
++
++ 11. If, as a consequence of a court judgment or allegation of patent
++ infringement or for any other reason (not limited to patent issues),
++ conditions are imposed on you (whether by court order, agreement or
++ otherwise) that contradict the conditions of this License, they do not
++ excuse you from the conditions of this License. If you cannot
++ distribute so as to satisfy simultaneously your obligations under this
++ License and any other pertinent obligations, then as a consequence you
++ may not distribute the Library at all. For example, if a patent
++ license would not permit royalty-free redistribution of the Library by
++ all those who receive copies directly or indirectly through you, then
++ the only way you could satisfy both it and this License would be to
++ refrain entirely from distribution of the Library.
++
++ If any portion of this section is held invalid or unenforceable under any
++ particular circumstance, the balance of the section is intended to apply,
++ and the section as a whole is intended to apply in other circumstances.
++
++ It is not the purpose of this section to induce you to infringe any
++ patents or other property right claims or to contest validity of any
++ such claims; this section has the sole purpose of protecting the
++ integrity of the free software distribution system which is
++ implemented by public license practices. Many people have made
++ generous contributions to the wide range of software distributed
++ through that system in reliance on consistent application of that
++ system; it is up to the author/donor to decide if he or she is willing
++ to distribute software through any other system and a licensee cannot
++ impose that choice.
++
++ This section is intended to make thoroughly clear what is believed to
++ be a consequence of the rest of this License.
++
++ 12. If the distribution and/or use of the Library is restricted in
++ certain countries either by patents or by copyrighted interfaces, the
++ original copyright holder who places the Library under this License may add
++ an explicit geographical distribution limitation excluding those countries,
++ so that distribution is permitted only in or among countries not thus
++ excluded. In such case, this License incorporates the limitation as if
++ written in the body of this License.
++
++ 13. The Free Software Foundation may publish revised and/or new
++ versions of the Lesser General Public License from time to time.
++ Such new versions will be similar in spirit to the present version,
++ but may differ in detail to address new problems or concerns.
++
++ Each version is given a distinguishing version number. If the Library
++ specifies a version number of this License which applies to it and
++ "any later version", you have the option of following the terms and
++ conditions either of that version or of any later version published by
++ the Free Software Foundation. If the Library does not specify a
++ license version number, you may choose any version ever published by
++ the Free Software Foundation.
++
++ 14. If you wish to incorporate parts of the Library into other free
++ programs whose distribution conditions are incompatible with these,
++ write to the author to ask for permission. For software which is
++ copyrighted by the Free Software Foundation, write to the Free
++ Software Foundation; we sometimes make exceptions for this. Our
++ decision will be guided by the two goals of preserving the free status
++ of all derivatives of our free software and of promoting the sharing
++ and reuse of software generally.
++
++ NO WARRANTY
++
++ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
++ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
++ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
++ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
++ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
++ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
++ LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
++ THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
++
++ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
++ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
++ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
++ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
++ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
++ LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
++ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
++ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
++ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
++ DAMAGES.
++
++ END OF TERMS AND CONDITIONS
++
++ How to Apply These Terms to Your New Libraries
++
++ If you develop a new library, and you want it to be of the greatest
++ possible use to the public, we recommend making it free software that
++ everyone can redistribute and change. You can do so by permitting
++ redistribution under these terms (or, alternatively, under the terms of the
++ ordinary General Public License).
++
++ To apply these terms, attach the following notices to the library. It is
++ safest to attach them to the start of each source file to most effectively
++ convey the exclusion of warranty; and each file should have at least the
++ "copyright" line and a pointer to where the full notice is found.
++
++ <one line to give the library's name and a brief idea of what it does.>
++ Copyright (C) <year> <name of author>
++
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ This library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with this library; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++ Also add information on how to contact you by electronic and paper mail.
++
++ You should also get your employer (if you work as a programmer) or your
++ school, if any, to sign a "copyright disclaimer" for the library, if
++ necessary. Here is a sample; alter the names:
++
++ Yoyodyne, Inc., hereby disclaims all copyright interest in the
++ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
++
++ <signature of Ty Coon>, 1 April 1990
++ Ty Coon, President of Vice
++
++ That's all there is to it!
++
++
+*** ../vim-8.1.0359/src/xdiff/xdiff.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xdiff.h 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,142 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #if !defined(XDIFF_H)
++ #define XDIFF_H
++
++ #ifdef __cplusplus
++ extern "C" {
++ #endif /* #ifdef __cplusplus */
++
++ /* xpparm_t.flags */
++ #define XDF_NEED_MINIMAL (1 << 0)
++
++ #define XDF_IGNORE_WHITESPACE (1 << 1)
++ #define XDF_IGNORE_WHITESPACE_CHANGE (1 << 2)
++ #define XDF_IGNORE_WHITESPACE_AT_EOL (1 << 3)
++ #define XDF_IGNORE_CR_AT_EOL (1 << 4)
++ #define XDF_WHITESPACE_FLAGS (XDF_IGNORE_WHITESPACE | \
++ XDF_IGNORE_WHITESPACE_CHANGE | \
++ XDF_IGNORE_WHITESPACE_AT_EOL | \
++ XDF_IGNORE_CR_AT_EOL)
++
++ #define XDF_IGNORE_BLANK_LINES (1 << 7)
++
++ #define XDF_PATIENCE_DIFF (1 << 14)
++ #define XDF_HISTOGRAM_DIFF (1 << 15)
++ #define XDF_DIFF_ALGORITHM_MASK (XDF_PATIENCE_DIFF | XDF_HISTOGRAM_DIFF)
++ #define XDF_DIFF_ALG(x) ((x) & XDF_DIFF_ALGORITHM_MASK)
++
++ #define XDF_INDENT_HEURISTIC (1 << 23)
++
++ /* xdemitconf_t.flags */
++ #define XDL_EMIT_FUNCNAMES (1 << 0)
++ #define XDL_EMIT_FUNCCONTEXT (1 << 2)
++
++ /* merge simplification levels */
++ #define XDL_MERGE_MINIMAL 0
++ #define XDL_MERGE_EAGER 1
++ #define XDL_MERGE_ZEALOUS 2
++ #define XDL_MERGE_ZEALOUS_ALNUM 3
++
++ /* merge favor modes */
++ #define XDL_MERGE_FAVOR_OURS 1
++ #define XDL_MERGE_FAVOR_THEIRS 2
++ #define XDL_MERGE_FAVOR_UNION 3
++
++ /* merge output styles */
++ #define XDL_MERGE_DIFF3 1
++
++ typedef struct s_mmfile {
++ char *ptr;
++ long size;
++ } mmfile_t;
++
++ typedef struct s_mmbuffer {
++ char *ptr;
++ long size;
++ } mmbuffer_t;
++
++ typedef struct s_xpparam {
++ unsigned long flags;
++
++ /* See Documentation/diff-options.txt. */
++ char **anchors;
++ size_t anchors_nr;
++ } xpparam_t;
++
++ typedef struct s_xdemitcb {
++ void *priv;
++ int (*outf)(void *, mmbuffer_t *, int);
++ } xdemitcb_t;
++
++ typedef long (*find_func_t)(const char *line, long line_len, char *buffer, long buffer_size, void *priv);
++
++ typedef int (*xdl_emit_hunk_consume_func_t)(long start_a, long count_a,
++ long start_b, long count_b,
++ void *cb_data);
++
++ typedef struct s_xdemitconf {
++ long ctxlen;
++ long interhunkctxlen;
++ unsigned long flags;
++ find_func_t find_func;
++ void *find_func_priv;
++ xdl_emit_hunk_consume_func_t hunk_func;
++ } xdemitconf_t;
++
++ typedef struct s_bdiffparam {
++ long bsize;
++ } bdiffparam_t;
++
++
++ #define xdl_malloc(x) malloc(x)
++ #define xdl_free(ptr) free(ptr)
++ #define xdl_realloc(ptr,x) realloc(ptr,x)
++
++ void *xdl_mmfile_first(mmfile_t *mmf, long *size);
++ long xdl_mmfile_size(mmfile_t *mmf);
++
++ int xdl_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
++ xdemitconf_t const *xecfg, xdemitcb_t *ecb);
++
++ typedef struct s_xmparam {
++ xpparam_t xpp;
++ int marker_size;
++ int level;
++ int favor;
++ int style;
++ const char *ancestor; /* label for orig */
++ const char *file1; /* label for mf1 */
++ const char *file2; /* label for mf2 */
++ } xmparam_t;
++
++ #define DEFAULT_CONFLICT_MARKER_SIZE 7
++
++ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, mmfile_t *mf2,
++ xmparam_t const *xmp, mmbuffer_t *result);
++
++ #ifdef __cplusplus
++ }
++ #endif /* #ifdef __cplusplus */
++
++ #endif /* #if !defined(XDIFF_H) */
+*** ../vim-8.1.0359/src/xdiff/xdiffi.c 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xdiffi.c 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,1043 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #include "xinclude.h"
++
++ #define XDL_MAX_COST_MIN 256
++ #define XDL_HEUR_MIN_COST 256
++ #define XDL_LINE_MAX (long)((1UL << (CHAR_BIT * sizeof(long) - 1)) - 1)
++ #define XDL_SNAKE_CNT 20
++ #define XDL_K_HEUR 4
++
++ typedef struct s_xdpsplit {
++ long i1, i2;
++ int min_lo, min_hi;
++ } xdpsplit_t;
++
++ /*
++ * See "An O(ND) Difference Algorithm and its Variations", by Eugene Myers.
++ * Basically considers a "box" (off1, off2, lim1, lim2) and scan from both
++ * the forward diagonal starting from (off1, off2) and the backward diagonal
++ * starting from (lim1, lim2). If the K values on the same diagonal crosses
++ * returns the furthest point of reach. We might end up having to expensive
++ * cases using this algorithm is full, so a little bit of heuristic is needed
++ * to cut the search and to return a suboptimal point.
++ */
++ static long xdl_split(unsigned long const *ha1, long off1, long lim1,
++ unsigned long const *ha2, long off2, long lim2,
++ long *kvdf, long *kvdb, int need_min, xdpsplit_t *spl,
++ xdalgoenv_t *xenv) {
++ long dmin = off1 - lim2, dmax = lim1 - off2;
++ long fmid = off1 - off2, bmid = lim1 - lim2;
++ long odd = (fmid - bmid) & 1;
++ long fmin = fmid, fmax = fmid;
++ long bmin = bmid, bmax = bmid;
++ long ec, d, i1, i2, prev1, best, dd, v, k;
++
++ /*
++ * Set initial diagonal values for both forward and backward path.
++ */
++ kvdf[fmid] = off1;
++ kvdb[bmid] = lim1;
++
++ for (ec = 1;; ec++) {
++ int got_snake = 0;
++
++ /*
++ * We need to extent the diagonal "domain" by one. If the next
++ * values exits the box boundaries we need to change it in the
++ * opposite direction because (max - min) must be a power of two.
++ * Also we initialize the external K value to -1 so that we can
++ * avoid extra conditions check inside the core loop.
++ */
++ if (fmin > dmin)
++ kvdf[--fmin - 1] = -1;
++ else
++ ++fmin;
++ if (fmax < dmax)
++ kvdf[++fmax + 1] = -1;
++ else
++ --fmax;
++
++ for (d = fmax; d >= fmin; d -= 2) {
++ if (kvdf[d - 1] >= kvdf[d + 1])
++ i1 = kvdf[d - 1] + 1;
++ else
++ i1 = kvdf[d + 1];
++ prev1 = i1;
++ i2 = i1 - d;
++ for (; i1 < lim1 && i2 < lim2 && ha1[i1] == ha2[i2]; i1++, i2++);
++ if (i1 - prev1 > xenv->snake_cnt)
++ got_snake = 1;
++ kvdf[d] = i1;
++ if (odd && bmin <= d && d <= bmax && kvdb[d] <= i1) {
++ spl->i1 = i1;
++ spl->i2 = i2;
++ spl->min_lo = spl->min_hi = 1;
++ return ec;
++ }
++ }
++
++ /*
++ * We need to extent the diagonal "domain" by one. If the next
++ * values exits the box boundaries we need to change it in the
++ * opposite direction because (max - min) must be a power of two.
++ * Also we initialize the external K value to -1 so that we can
++ * avoid extra conditions check inside the core loop.
++ */
++ if (bmin > dmin)
++ kvdb[--bmin - 1] = XDL_LINE_MAX;
++ else
++ ++bmin;
++ if (bmax < dmax)
++ kvdb[++bmax + 1] = XDL_LINE_MAX;
++ else
++ --bmax;
++
++ for (d = bmax; d >= bmin; d -= 2) {
++ if (kvdb[d - 1] < kvdb[d + 1])
++ i1 = kvdb[d - 1];
++ else
++ i1 = kvdb[d + 1] - 1;
++ prev1 = i1;
++ i2 = i1 - d;
++ for (; i1 > off1 && i2 > off2 && ha1[i1 - 1] == ha2[i2 - 1]; i1--, i2--);
++ if (prev1 - i1 > xenv->snake_cnt)
++ got_snake = 1;
++ kvdb[d] = i1;
++ if (!odd && fmin <= d && d <= fmax && i1 <= kvdf[d]) {
++ spl->i1 = i1;
++ spl->i2 = i2;
++ spl->min_lo = spl->min_hi = 1;
++ return ec;
++ }
++ }
++
++ if (need_min)
++ continue;
++
++ /*
++ * If the edit cost is above the heuristic trigger and if
++ * we got a good snake, we sample current diagonals to see
++ * if some of the, have reached an "interesting" path. Our
++ * measure is a function of the distance from the diagonal
++ * corner (i1 + i2) penalized with the distance from the
++ * mid diagonal itself. If this value is above the current
++ * edit cost times a magic factor (XDL_K_HEUR) we consider
++ * it interesting.
++ */
++ if (got_snake && ec > xenv->heur_min) {
++ for (best = 0, d = fmax; d >= fmin; d -= 2) {
++ dd = d > fmid ? d - fmid: fmid - d;
++ i1 = kvdf[d];
++ i2 = i1 - d;
++ v = (i1 - off1) + (i2 - off2) - dd;
++
++ if (v > XDL_K_HEUR * ec && v > best &&
++ off1 + xenv->snake_cnt <= i1 && i1 < lim1 &&
++ off2 + xenv->snake_cnt <= i2 && i2 < lim2) {
++ for (k = 1; ha1[i1 - k] == ha2[i2 - k]; k++)
++ if (k == xenv->snake_cnt) {
++ best = v;
++ spl->i1 = i1;
++ spl->i2 = i2;
++ break;
++ }
++ }
++ }
++ if (best > 0) {
++ spl->min_lo = 1;
++ spl->min_hi = 0;
++ return ec;
++ }
++
++ for (best = 0, d = bmax; d >= bmin; d -= 2) {
++ dd = d > bmid ? d - bmid: bmid - d;
++ i1 = kvdb[d];
++ i2 = i1 - d;
++ v = (lim1 - i1) + (lim2 - i2) - dd;
++
++ if (v > XDL_K_HEUR * ec && v > best &&
++ off1 < i1 && i1 <= lim1 - xenv->snake_cnt &&
++ off2 < i2 && i2 <= lim2 - xenv->snake_cnt) {
++ for (k = 0; ha1[i1 + k] == ha2[i2 + k]; k++)
++ if (k == xenv->snake_cnt - 1) {
++ best = v;
++ spl->i1 = i1;
++ spl->i2 = i2;
++ break;
++ }
++ }
++ }
++ if (best > 0) {
++ spl->min_lo = 0;
++ spl->min_hi = 1;
++ return ec;
++ }
++ }
++
++ /*
++ * Enough is enough. We spent too much time here and now we collect
++ * the furthest reaching path using the (i1 + i2) measure.
++ */
++ if (ec >= xenv->mxcost) {
++ long fbest, fbest1, bbest, bbest1;
++
++ fbest = fbest1 = -1;
++ for (d = fmax; d >= fmin; d -= 2) {
++ i1 = XDL_MIN(kvdf[d], lim1);
++ i2 = i1 - d;
++ if (lim2 < i2)
++ i1 = lim2 + d, i2 = lim2;
++ if (fbest < i1 + i2) {
++ fbest = i1 + i2;
++ fbest1 = i1;
++ }
++ }
++
++ bbest = bbest1 = XDL_LINE_MAX;
++ for (d = bmax; d >= bmin; d -= 2) {
++ i1 = XDL_MAX(off1, kvdb[d]);
++ i2 = i1 - d;
++ if (i2 < off2)
++ i1 = off2 + d, i2 = off2;
++ if (i1 + i2 < bbest) {
++ bbest = i1 + i2;
++ bbest1 = i1;
++ }
++ }
++
++ if ((lim1 + lim2) - bbest < fbest - (off1 + off2)) {
++ spl->i1 = fbest1;
++ spl->i2 = fbest - fbest1;
++ spl->min_lo = 1;
++ spl->min_hi = 0;
++ } else {
++ spl->i1 = bbest1;
++ spl->i2 = bbest - bbest1;
++ spl->min_lo = 0;
++ spl->min_hi = 1;
++ }
++ return ec;
++ }
++ }
++ }
++
++
++ /*
++ * Rule: "Divide et Impera". Recursively split the box in sub-boxes by calling
++ * the box splitting function. Note that the real job (marking changed lines)
++ * is done in the two boundary reaching checks.
++ */
++ int xdl_recs_cmp(diffdata_t *dd1, long off1, long lim1,
++ diffdata_t *dd2, long off2, long lim2,
++ long *kvdf, long *kvdb, int need_min, xdalgoenv_t *xenv) {
++ unsigned long const *ha1 = dd1->ha, *ha2 = dd2->ha;
++
++ /*
++ * Shrink the box by walking through each diagonal snake (SW and NE).
++ */
++ for (; off1 < lim1 && off2 < lim2 && ha1[off1] == ha2[off2]; off1++, off2++);
++ for (; off1 < lim1 && off2 < lim2 && ha1[lim1 - 1] == ha2[lim2 - 1]; lim1--, lim2--);
++
++ /*
++ * If one dimension is empty, then all records on the other one must
++ * be obviously changed.
++ */
++ if (off1 == lim1) {
++ char *rchg2 = dd2->rchg;
++ long *rindex2 = dd2->rindex;
++
++ for (; off2 < lim2; off2++)
++ rchg2[rindex2[off2]] = 1;
++ } else if (off2 == lim2) {
++ char *rchg1 = dd1->rchg;
++ long *rindex1 = dd1->rindex;
++
++ for (; off1 < lim1; off1++)
++ rchg1[rindex1[off1]] = 1;
++ } else {
++ xdpsplit_t spl;
++ spl.i1 = spl.i2 = 0;
++
++ /*
++ * Divide ...
++ */
++ if (xdl_split(ha1, off1, lim1, ha2, off2, lim2, kvdf, kvdb,
++ need_min, &spl, xenv) < 0) {
++
++ return -1;
++ }
++
++ /*
++ * ... et Impera.
++ */
++ if (xdl_recs_cmp(dd1, off1, spl.i1, dd2, off2, spl.i2,
++ kvdf, kvdb, spl.min_lo, xenv) < 0 ||
++ xdl_recs_cmp(dd1, spl.i1, lim1, dd2, spl.i2, lim2,
++ kvdf, kvdb, spl.min_hi, xenv) < 0) {
++
++ return -1;
++ }
++ }
++
++ return 0;
++ }
++
++
++ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
++ xdfenv_t *xe) {
++ long ndiags;
++ long *kvd, *kvdf, *kvdb;
++ xdalgoenv_t xenv;
++ diffdata_t dd1, dd2;
++
++ if (XDF_DIFF_ALG(xpp->flags) == XDF_PATIENCE_DIFF)
++ return xdl_do_patience_diff(mf1, mf2, xpp, xe);
++
++ if (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF)
++ return xdl_do_histogram_diff(mf1, mf2, xpp, xe);
++
++ if (xdl_prepare_env(mf1, mf2, xpp, xe) < 0) {
++
++ return -1;
++ }
++
++ /*
++ * Allocate and setup K vectors to be used by the differential algorithm.
++ * One is to store the forward path and one to store the backward path.
++ */
++ ndiags = xe->xdf1.nreff + xe->xdf2.nreff + 3;
++ if (!(kvd = (long *) xdl_malloc((2 * ndiags + 2) * sizeof(long)))) {
++
++ xdl_free_env(xe);
++ return -1;
++ }
++ kvdf = kvd;
++ kvdb = kvdf + ndiags;
++ kvdf += xe->xdf2.nreff + 1;
++ kvdb += xe->xdf2.nreff + 1;
++
++ xenv.mxcost = xdl_bogosqrt(ndiags);
++ if (xenv.mxcost < XDL_MAX_COST_MIN)
++ xenv.mxcost = XDL_MAX_COST_MIN;
++ xenv.snake_cnt = XDL_SNAKE_CNT;
++ xenv.heur_min = XDL_HEUR_MIN_COST;
++
++ dd1.nrec = xe->xdf1.nreff;
++ dd1.ha = xe->xdf1.ha;
++ dd1.rchg = xe->xdf1.rchg;
++ dd1.rindex = xe->xdf1.rindex;
++ dd2.nrec = xe->xdf2.nreff;
++ dd2.ha = xe->xdf2.ha;
++ dd2.rchg = xe->xdf2.rchg;
++ dd2.rindex = xe->xdf2.rindex;
++
++ if (xdl_recs_cmp(&dd1, 0, dd1.nrec, &dd2, 0, dd2.nrec,
++ kvdf, kvdb, (xpp->flags & XDF_NEED_MINIMAL) != 0, &xenv) < 0) {
++
++ xdl_free(kvd);
++ xdl_free_env(xe);
++ return -1;
++ }
++
++ xdl_free(kvd);
++
++ return 0;
++ }
++
++
++ static xdchange_t *xdl_add_change(xdchange_t *xscr, long i1, long i2, long chg1, long chg2) {
++ xdchange_t *xch;
++
++ if (!(xch = (xdchange_t *) xdl_malloc(sizeof(xdchange_t))))
++ return NULL;
++
++ xch->next = xscr;
++ xch->i1 = i1;
++ xch->i2 = i2;
++ xch->chg1 = chg1;
++ xch->chg2 = chg2;
++ xch->ignore = 0;
++
++ return xch;
++ }
++
++
++ static int recs_match(xrecord_t *rec1, xrecord_t *rec2, long flags)
++ {
++ return (rec1->ha == rec2->ha &&
++ xdl_recmatch(rec1->ptr, rec1->size,
++ rec2->ptr, rec2->size,
++ flags));
++ }
++
++ /*
++ * If a line is indented more than this, get_indent() just returns this value.
++ * This avoids having to do absurd amounts of work for data that are not
++ * human-readable text, and also ensures that the output of get_indent fits within
++ * an int.
++ */
++ #define MAX_INDENT 200
++
++ /*
++ * Return the amount of indentation of the specified line, treating TAB as 8
++ * columns. Return -1 if line is empty or contains only whitespace. Clamp the
++ * output value at MAX_INDENT.
++ */
++ static int get_indent(xrecord_t *rec)
++ {
++ long i;
++ int ret = 0;
++
++ for (i = 0; i < rec->size; i++) {
++ char c = rec->ptr[i];
++
++ if (!XDL_ISSPACE(c))
++ return ret;
++ else if (c == ' ')
++ ret += 1;
++ else if (c == '\t')
++ ret += 8 - ret % 8;
++ /* ignore other whitespace characters */
++
++ if (ret >= MAX_INDENT)
++ return MAX_INDENT;
++ }
++
++ /* The line contains only whitespace. */
++ return -1;
++ }
++
++ /*
++ * If more than this number of consecutive blank rows are found, just return this
++ * value. This avoids requiring O(N^2) work for pathological cases, and also
++ * ensures that the output of score_split fits in an int.
++ */
++ #define MAX_BLANKS 20
++
++ /* Characteristics measured about a hypothetical split position. */
++ struct split_measurement {
++ /*
++ * Is the split at the end of the file (aside from any blank lines)?
++ */
++ int end_of_file;
++
++ /*
++ * How much is the line immediately following the split indented (or -1 if
++ * the line is blank):
++ */
++ int indent;
++
++ /*
++ * How many consecutive lines above the split are blank?
++ */
++ int pre_blank;
++
++ /*
++ * How much is the nearest non-blank line above the split indented (or -1
++ * if there is no such line)?
++ */
++ int pre_indent;
++
++ /*
++ * How many lines after the line following the split are blank?
++ */
++ int post_blank;
++
++ /*
++ * How much is the nearest non-blank line after the line following the
++ * split indented (or -1 if there is no such line)?
++ */
++ int post_indent;
++ };
++
++ struct split_score {
++ /* The effective indent of this split (smaller is preferred). */
++ int effective_indent;
++
++ /* Penalty for this split (smaller is preferred). */
++ int penalty;
++ };
++
++ /*
++ * Fill m with information about a hypothetical split of xdf above line split.
++ */
++ static void measure_split(const xdfile_t *xdf, long split,
++ struct split_measurement *m)
++ {
++ long i;
++
++ if (split >= xdf->nrec) {
++ m->end_of_file = 1;
++ m->indent = -1;
++ } else {
++ m->end_of_file = 0;
++ m->indent = get_indent(xdf->recs[split]);
++ }
++
++ m->pre_blank = 0;
++ m->pre_indent = -1;
++ for (i = split - 1; i >= 0; i--) {
++ m->pre_indent = get_indent(xdf->recs[i]);
++ if (m->pre_indent != -1)
++ break;
++ m->pre_blank += 1;
++ if (m->pre_blank == MAX_BLANKS) {
++ m->pre_indent = 0;
++ break;
++ }
++ }
++
++ m->post_blank = 0;
++ m->post_indent = -1;
++ for (i = split + 1; i < xdf->nrec; i++) {
++ m->post_indent = get_indent(xdf->recs[i]);
++ if (m->post_indent != -1)
++ break;
++ m->post_blank += 1;
++ if (m->post_blank == MAX_BLANKS) {
++ m->post_indent = 0;
++ break;
++ }
++ }
++ }
++
++ /*
++ * The empirically-determined weight factors used by score_split() below.
++ * Larger values means that the position is a less favorable place to split.
++ *
++ * Note that scores are only ever compared against each other, so multiplying
++ * all of these weight/penalty values by the same factor wouldn't change the
++ * heuristic's behavior. Still, we need to set that arbitrary scale *somehow*.
++ * In practice, these numbers are chosen to be large enough that they can be
++ * adjusted relative to each other with sufficient precision despite using
++ * integer math.
++ */
++
++ /* Penalty if there are no non-blank lines before the split */
++ #define START_OF_FILE_PENALTY 1
++
++ /* Penalty if there are no non-blank lines after the split */
++ #define END_OF_FILE_PENALTY 21
++
++ /* Multiplier for the number of blank lines around the split */
++ #define TOTAL_BLANK_WEIGHT (-30)
++
++ /* Multiplier for the number of blank lines after the split */
++ #define POST_BLANK_WEIGHT 6
++
++ /*
++ * Penalties applied if the line is indented more than its predecessor
++ */
++ #define RELATIVE_INDENT_PENALTY (-4)
++ #define RELATIVE_INDENT_WITH_BLANK_PENALTY 10
++
++ /*
++ * Penalties applied if the line is indented less than both its predecessor and
++ * its successor
++ */
++ #define RELATIVE_OUTDENT_PENALTY 24
++ #define RELATIVE_OUTDENT_WITH_BLANK_PENALTY 17
++
++ /*
++ * Penalties applied if the line is indented less than its predecessor but not
++ * less than its successor
++ */
++ #define RELATIVE_DEDENT_PENALTY 23
++ #define RELATIVE_DEDENT_WITH_BLANK_PENALTY 17
++
++ /*
++ * We only consider whether the sum of the effective indents for splits are
++ * less than (-1), equal to (0), or greater than (+1) each other. The resulting
++ * value is multiplied by the following weight and combined with the penalty to
++ * determine the better of two scores.
++ */
++ #define INDENT_WEIGHT 60
++
++ /*
++ * How far do we slide a hunk at most?
++ */
++ #define INDENT_HEURISTIC_MAX_SLIDING 100
++
++ /*
++ * Compute a badness score for the hypothetical split whose measurements are
++ * stored in m. The weight factors were determined empirically using the tools and
++ * corpus described in
++ *
++ * https://github.com/mhagger/diff-slider-tools
++ *
++ * Also see that project if you want to improve the weights based on, for example,
++ * a larger or more diverse corpus.
++ */
++ static void score_add_split(const struct split_measurement *m, struct split_score *s)
++ {
++ /*
++ * A place to accumulate penalty factors (positive makes this index more
++ * favored):
++ */
++ int post_blank, total_blank, indent, any_blanks;
++
++ if (m->pre_indent == -1 && m->pre_blank == 0)
++ s->penalty += START_OF_FILE_PENALTY;
++
++ if (m->end_of_file)
++ s->penalty += END_OF_FILE_PENALTY;
++
++ /*
++ * Set post_blank to the number of blank lines following the split,
++ * including the line immediately after the split:
++ */
++ post_blank = (m->indent == -1) ? 1 + m->post_blank : 0;
++ total_blank = m->pre_blank + post_blank;
++
++ /* Penalties based on nearby blank lines: */
++ s->penalty += TOTAL_BLANK_WEIGHT * total_blank;
++ s->penalty += POST_BLANK_WEIGHT * post_blank;
++
++ if (m->indent != -1)
++ indent = m->indent;
++ else
++ indent = m->post_indent;
++
++ any_blanks = (total_blank != 0);
++
++ /* Note that the effective indent is -1 at the end of the file: */
++ s->effective_indent += indent;
++
++ if (indent == -1) {
++ /* No additional adjustments needed. */
++ } else if (m->pre_indent == -1) {
++ /* No additional adjustments needed. */
++ } else if (indent > m->pre_indent) {
++ /*
++ * The line is indented more than its predecessor.
++ */
++ s->penalty += any_blanks ?
++ RELATIVE_INDENT_WITH_BLANK_PENALTY :
++ RELATIVE_INDENT_PENALTY;
++ } else if (indent == m->pre_indent) {
++ /*
++ * The line has the same indentation level as its predecessor.
++ * No additional adjustments needed.
++ */
++ } else {
++ /*
++ * The line is indented less than its predecessor. It could be
++ * the block terminator of the previous block, but it could
++ * also be the start of a new block (e.g., an "else" block, or
++ * maybe the previous block didn't have a block terminator).
++ * Try to distinguish those cases based on what comes next:
++ */
++ if (m->post_indent != -1 && m->post_indent > indent) {
++ /*
++ * The following line is indented more. So it is likely
++ * that this line is the start of a block.
++ */
++ s->penalty += any_blanks ?
++ RELATIVE_OUTDENT_WITH_BLANK_PENALTY :
++ RELATIVE_OUTDENT_PENALTY;
++ } else {
++ /*
++ * That was probably the end of a block.
++ */
++ s->penalty += any_blanks ?
++ RELATIVE_DEDENT_WITH_BLANK_PENALTY :
++ RELATIVE_DEDENT_PENALTY;
++ }
++ }
++ }
++
++ static int score_cmp(struct split_score *s1, struct split_score *s2)
++ {
++ /* -1 if s1.effective_indent < s2->effective_indent, etc. */
++ int cmp_indents = ((s1->effective_indent > s2->effective_indent) -
++ (s1->effective_indent < s2->effective_indent));
++
++ return INDENT_WEIGHT * cmp_indents + (s1->penalty - s2->penalty);
++ }
++
++ /*
++ * Represent a group of changed lines in an xdfile_t (i.e., a contiguous group
++ * of lines that was inserted or deleted from the corresponding version of the
++ * file). We consider there to be such a group at the beginning of the file, at
++ * the end of the file, and between any two unchanged lines, though most such
++ * groups will usually be empty.
++ *
++ * If the first line in a group is equal to the line following the group, then
++ * the group can be slid down. Similarly, if the last line in a group is equal
++ * to the line preceding the group, then the group can be slid up. See
++ * group_slide_down() and group_slide_up().
++ *
++ * Note that loops that are testing for changed lines in xdf->rchg do not need
++ * index bounding since the array is prepared with a zero at position -1 and N.
++ */
++ struct xdlgroup {
++ /*
++ * The index of the first changed line in the group, or the index of
++ * the unchanged line above which the (empty) group is located.
++ */
++ long start;
++
++ /*
++ * The index of the first unchanged line after the group. For an empty
++ * group, end is equal to start.
++ */
++ long end;
++ };
++
++ /*
++ * Initialize g to point at the first group in xdf.
++ */
++ static void group_init(xdfile_t *xdf, struct xdlgroup *g)
++ {
++ g->start = g->end = 0;
++ while (xdf->rchg[g->end])
++ g->end++;
++ }
++
++ /*
++ * Move g to describe the next (possibly empty) group in xdf and return 0. If g
++ * is already at the end of the file, do nothing and return -1.
++ */
++ static inline int group_next(xdfile_t *xdf, struct xdlgroup *g)
++ {
++ if (g->end == xdf->nrec)
++ return -1;
++
++ g->start = g->end + 1;
++ for (g->end = g->start; xdf->rchg[g->end]; g->end++)
++ ;
++
++ return 0;
++ }
++
++ /*
++ * Move g to describe the previous (possibly empty) group in xdf and return 0.
++ * If g is already at the beginning of the file, do nothing and return -1.
++ */
++ static inline int group_previous(xdfile_t *xdf, struct xdlgroup *g)
++ {
++ if (g->start == 0)
++ return -1;
++
++ g->end = g->start - 1;
++ for (g->start = g->end; xdf->rchg[g->start - 1]; g->start--)
++ ;
++
++ return 0;
++ }
++
++ /*
++ * If g can be slid toward the end of the file, do so, and if it bumps into a
++ * following group, expand this group to include it. Return 0 on success or -1
++ * if g cannot be slid down.
++ */
++ static int group_slide_down(xdfile_t *xdf, struct xdlgroup *g, long flags)
++ {
++ if (g->end < xdf->nrec &&
++ recs_match(xdf->recs[g->start], xdf->recs[g->end], flags)) {
++ xdf->rchg[g->start++] = 0;
++ xdf->rchg[g->end++] = 1;
++
++ while (xdf->rchg[g->end])
++ g->end++;
++
++ return 0;
++ } else {
++ return -1;
++ }
++ }
++
++ /*
++ * If g can be slid toward the beginning of the file, do so, and if it bumps
++ * into a previous group, expand this group to include it. Return 0 on success
++ * or -1 if g cannot be slid up.
++ */
++ static int group_slide_up(xdfile_t *xdf, struct xdlgroup *g, long flags)
++ {
++ if (g->start > 0 &&
++ recs_match(xdf->recs[g->start - 1], xdf->recs[g->end - 1], flags)) {
++ xdf->rchg[--g->start] = 1;
++ xdf->rchg[--g->end] = 0;
++
++ while (xdf->rchg[g->start - 1])
++ g->start--;
++
++ return 0;
++ } else {
++ return -1;
++ }
++ }
++
++ static void xdl_bug(const char *msg)
++ {
++ fprintf(stderr, "BUG: %s\n", msg);
++ exit(1);
++ }
++
++ /*
++ * Move back and forward change groups for a consistent and pretty diff output.
++ * This also helps in finding joinable change groups and reducing the diff
++ * size.
++ */
++ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
++ struct xdlgroup g, go;
++ long earliest_end, end_matching_other;
++ long groupsize;
++
++ group_init(xdf, &g);
++ group_init(xdfo, &go);
++
++ while (1) {
++ /* If the group is empty in the to-be-compacted file, skip it: */
++ if (g.end == g.start)
++ goto next;
++
++ /*
++ * Now shift the change up and then down as far as possible in
++ * each direction. If it bumps into any other changes, merge them.
++ */
++ do {
++ groupsize = g.end - g.start;
++
++ /*
++ * Keep track of the last "end" index that causes this
++ * group to align with a group of changed lines in the
++ * other file. -1 indicates that we haven't found such
++ * a match yet:
++ */
++ end_matching_other = -1;
++
++ /* Shift the group backward as much as possible: */
++ while (!group_slide_up(xdf, &g, flags))
++ if (group_previous(xdfo, &go))
++ xdl_bug("group sync broken sliding up");
++
++ /*
++ * This is this highest that this group can be shifted.
++ * Record its end index:
++ */
++ earliest_end = g.end;
++
++ if (go.end > go.start)
++ end_matching_other = g.end;
++
++ /* Now shift the group forward as far as possible: */
++ while (1) {
++ if (group_slide_down(xdf, &g, flags))
++ break;
++ if (group_next(xdfo, &go))
++ xdl_bug("group sync broken sliding down");
++
++ if (go.end > go.start)
++ end_matching_other = g.end;
++ }
++ } while (groupsize != g.end - g.start);
++
++ /*
++ * If the group can be shifted, then we can possibly use this
++ * freedom to produce a more intuitive diff.
++ *
++ * The group is currently shifted as far down as possible, so the
++ * heuristics below only have to handle upwards shifts.
++ */
++
++ if (g.end == earliest_end) {
++ /* no shifting was possible */
++ } else if (end_matching_other != -1) {
++ /*
++ * Move the possibly merged group of changes back to line
++ * up with the last group of changes from the other file
++ * that it can align with.
++ */
++ while (go.end == go.start) {
++ if (group_slide_up(xdf, &g, flags))
++ xdl_bug("match disappeared");
++ if (group_previous(xdfo, &go))
++ xdl_bug("group sync broken sliding to match");
++ }
++ } else if (flags & XDF_INDENT_HEURISTIC) {
++ /*
++ * Indent heuristic: a group of pure add/delete lines
++ * implies two splits, one between the end of the "before"
++ * context and the start of the group, and another between
++ * the end of the group and the beginning of the "after"
++ * context. Some splits are aesthetically better and some
++ * are worse. We compute a badness "score" for each split,
++ * and add the scores for the two splits to define a
++ * "score" for each position that the group can be shifted
++ * to. Then we pick the shift with the lowest score.
++ */
++ long shift, best_shift = -1;
++ struct split_score best_score;
++
++ shift = earliest_end;
++ if (g.end - groupsize - 1 > shift)
++ shift = g.end - groupsize - 1;
++ if (g.end - INDENT_HEURISTIC_MAX_SLIDING > shift)
++ shift = g.end - INDENT_HEURISTIC_MAX_SLIDING;
++ for (; shift <= g.end; shift++) {
++ struct split_measurement m;
++ struct split_score score = {0, 0};
++
++ measure_split(xdf, shift, &m);
++ score_add_split(&m, &score);
++ measure_split(xdf, shift - groupsize, &m);
++ score_add_split(&m, &score);
++ if (best_shift == -1 ||
++ score_cmp(&score, &best_score) <= 0) {
++ best_score.effective_indent = score.effective_indent;
++ best_score.penalty = score.penalty;
++ best_shift = shift;
++ }
++ }
++
++ while (g.end > best_shift) {
++ if (group_slide_up(xdf, &g, flags))
++ xdl_bug("best shift unreached");
++ if (group_previous(xdfo, &go))
++ xdl_bug("group sync broken sliding to blank line");
++ }
++ }
++
++ next:
++ /* Move past the just-processed group: */
++ if (group_next(xdf, &g))
++ break;
++ if (group_next(xdfo, &go))
++ xdl_bug("group sync broken moving to next group");
++ }
++
++ if (!group_next(xdfo, &go))
++ xdl_bug("group sync broken at end of file");
++
++ return 0;
++ }
++
++
++ int xdl_build_script(xdfenv_t *xe, xdchange_t **xscr) {
++ xdchange_t *cscr = NULL, *xch;
++ char *rchg1 = xe->xdf1.rchg, *rchg2 = xe->xdf2.rchg;
++ long i1, i2, l1, l2;
++
++ /*
++ * Trivial. Collects "groups" of changes and creates an edit script.
++ */
++ for (i1 = xe->xdf1.nrec, i2 = xe->xdf2.nrec; i1 >= 0 || i2 >= 0; i1--, i2--)
++ if (rchg1[i1 - 1] || rchg2[i2 - 1]) {
++ for (l1 = i1; rchg1[i1 - 1]; i1--);
++ for (l2 = i2; rchg2[i2 - 1]; i2--);
++
++ if (!(xch = xdl_add_change(cscr, i1, i2, l1 - i1, l2 - i2))) {
++ xdl_free_script(cscr);
++ return -1;
++ }
++ cscr = xch;
++ }
++
++ *xscr = cscr;
++
++ return 0;
++ }
++
++
++ void xdl_free_script(xdchange_t *xscr) {
++ xdchange_t *xch;
++
++ while ((xch = xscr) != NULL) {
++ xscr = xscr->next;
++ xdl_free(xch);
++ }
++ }
++
++ static int xdl_call_hunk_func(xdfenv_t *xe UNUSED, xdchange_t *xscr, xdemitcb_t *ecb,
++ xdemitconf_t const *xecfg)
++ {
++ xdchange_t *xch, *xche;
++
++ for (xch = xscr; xch; xch = xche->next) {
++ xche = xdl_get_hunk(&xch, xecfg);
++ if (!xch)
++ break;
++ if (xecfg->hunk_func(xch->i1, xche->i1 + xche->chg1 - xch->i1,
++ xch->i2, xche->i2 + xche->chg2 - xch->i2,
++ ecb->priv) < 0)
++ return -1;
++ }
++ return 0;
++ }
++
++ static void xdl_mark_ignorable(xdchange_t *xscr, xdfenv_t *xe, long flags)
++ {
++ xdchange_t *xch;
++
++ for (xch = xscr; xch; xch = xch->next) {
++ int ignore = 1;
++ xrecord_t **rec;
++ long i;
++
++ rec = &xe->xdf1.recs[xch->i1];
++ for (i = 0; i < xch->chg1 && ignore; i++)
++ ignore = xdl_blankline(rec[i]->ptr, rec[i]->size, flags);
++
++ rec = &xe->xdf2.recs[xch->i2];
++ for (i = 0; i < xch->chg2 && ignore; i++)
++ ignore = xdl_blankline(rec[i]->ptr, rec[i]->size, flags);
++
++ xch->ignore = ignore;
++ }
++ }
++
++ int xdl_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
++ xdemitconf_t const *xecfg, xdemitcb_t *ecb) {
++ xdchange_t *xscr;
++ xdfenv_t xe;
++ emit_func_t ef = xecfg->hunk_func ? xdl_call_hunk_func : xdl_emit_diff;
++
++ if (xdl_do_diff(mf1, mf2, xpp, &xe) < 0) {
++
++ return -1;
++ }
++ if (xdl_change_compact(&xe.xdf1, &xe.xdf2, xpp->flags) < 0 ||
++ xdl_change_compact(&xe.xdf2, &xe.xdf1, xpp->flags) < 0 ||
++ xdl_build_script(&xe, &xscr) < 0) {
++
++ xdl_free_env(&xe);
++ return -1;
++ }
++ if (xscr) {
++ if (xpp->flags & XDF_IGNORE_BLANK_LINES)
++ xdl_mark_ignorable(xscr, &xe, xpp->flags);
++
++ if (ef(&xe, xscr, ecb, xecfg) < 0) {
++
++ xdl_free_script(xscr);
++ xdl_free_env(&xe);
++ return -1;
++ }
++ xdl_free_script(xscr);
++ }
++ xdl_free_env(&xe);
++
++ return 0;
++ }
+*** ../vim-8.1.0359/src/xdiff/xdiffi.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xdiffi.h 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,64 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #if !defined(XDIFFI_H)
++ #define XDIFFI_H
++
++
++ typedef struct s_diffdata {
++ long nrec;
++ unsigned long const *ha;
++ long *rindex;
++ char *rchg;
++ } diffdata_t;
++
++ typedef struct s_xdalgoenv {
++ long mxcost;
++ long snake_cnt;
++ long heur_min;
++ } xdalgoenv_t;
++
++ typedef struct s_xdchange {
++ struct s_xdchange *next;
++ long i1, i2;
++ long chg1, chg2;
++ int ignore;
++ } xdchange_t;
++
++
++
++ int xdl_recs_cmp(diffdata_t *dd1, long off1, long lim1,
++ diffdata_t *dd2, long off2, long lim2,
++ long *kvdf, long *kvdb, int need_min, xdalgoenv_t *xenv);
++ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
++ xdfenv_t *xe);
++ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags);
++ int xdl_build_script(xdfenv_t *xe, xdchange_t **xscr);
++ void xdl_free_script(xdchange_t *xscr);
++ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
++ xdemitconf_t const *xecfg);
++ int xdl_do_patience_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
++ xdfenv_t *env);
++ int xdl_do_histogram_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
++ xdfenv_t *env);
++
++ #endif /* #if !defined(XDIFFI_H) */
+*** ../vim-8.1.0359/src/xdiff/xemit.c 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xemit.c 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,312 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #include "xinclude.h"
++
++ static long xdl_get_rec(xdfile_t *xdf, long ri, char const **rec) {
++
++ *rec = xdf->recs[ri]->ptr;
++
++ return xdf->recs[ri]->size;
++ }
++
++
++ static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *ecb) {
++ long size, psize = strlen(pre);
++ char const *rec;
++
++ size = xdl_get_rec(xdf, ri, &rec);
++ if (xdl_emit_diffrec(rec, size, pre, psize, ecb) < 0) {
++
++ return -1;
++ }
++
++ return 0;
++ }
++
++
++ /*
++ * Starting at the passed change atom, find the latest change atom to be included
++ * inside the differential hunk according to the specified configuration.
++ * Also advance xscr if the first changes must be discarded.
++ */
++ xdchange_t *xdl_get_hunk(xdchange_t **xscr, xdemitconf_t const *xecfg)
++ {
++ xdchange_t *xch, *xchp, *lxch;
++ long max_common = 2 * xecfg->ctxlen + xecfg->interhunkctxlen;
++ long max_ignorable = xecfg->ctxlen;
++ unsigned long ignored = 0; /* number of ignored blank lines */
++
++ /* remove ignorable changes that are too far before other changes */
++ for (xchp = *xscr; xchp && xchp->ignore; xchp = xchp->next) {
++ xch = xchp->next;
++
++ if (xch == NULL ||
++ xch->i1 - (xchp->i1 + xchp->chg1) >= max_ignorable)
++ *xscr = xch;
++ }
++
++ if (*xscr == NULL)
++ return NULL;
++
++ lxch = *xscr;
++
++ for (xchp = *xscr, xch = xchp->next; xch; xchp = xch, xch = xch->next) {
++ long distance = xch->i1 - (xchp->i1 + xchp->chg1);
++ if (distance > max_common)
++ break;
++
++ if (distance < max_ignorable && (!xch->ignore || lxch == xchp)) {
++ lxch = xch;
++ ignored = 0;
++ } else if (distance < max_ignorable && xch->ignore) {
++ ignored += xch->chg2;
++ } else if (lxch != xchp &&
++ xch->i1 + (long)ignored - (lxch->i1 + lxch->chg1) > max_common) {
++ break;
++ } else if (!xch->ignore) {
++ lxch = xch;
++ ignored = 0;
++ } else {
++ ignored += xch->chg2;
++ }
++ }
++
++ return lxch;
++ }
++
++
++ static long def_ff(const char *rec, long len, char *buf, long sz, void *priv UNUSED)
++ {
++ if (len > 0 &&
++ (isalpha((unsigned char)*rec) || /* identifier? */
++ *rec == '_' || /* also identifier? */
++ *rec == '$')) { /* identifiers from VMS and other esoterico */
++ if (len > sz)
++ len = sz;
++ while (0 < len && isspace((unsigned char)rec[len - 1]))
++ len--;
++ memcpy(buf, rec, len);
++ return len;
++ }
++ return -1;
++ }
++
++ static long match_func_rec(xdfile_t *xdf, xdemitconf_t const *xecfg, long ri,
++ char *buf, long sz)
++ {
++ const char *rec;
++ long len = xdl_get_rec(xdf, ri, &rec);
++ if (!xecfg->find_func)
++ return def_ff(rec, len, buf, sz, xecfg->find_func_priv);
++ return xecfg->find_func(rec, len, buf, sz, xecfg->find_func_priv);
++ }
++
++ static int is_func_rec(xdfile_t *xdf, xdemitconf_t const *xecfg, long ri)
++ {
++ char dummy[1];
++ return match_func_rec(xdf, xecfg, ri, dummy, sizeof(dummy)) >= 0;
++ }
++
++ struct func_line {
++ long len;
++ char buf[80];
++ };
++
++ static long get_func_line(xdfenv_t *xe, xdemitconf_t const *xecfg,
++ struct func_line *func_line, long start, long limit)
++ {
++ long l, size, step = (start > limit) ? -1 : 1;
++ char *buf, dummy[1];
++
++ buf = func_line ? func_line->buf : dummy;
++ size = func_line ? sizeof(func_line->buf) : sizeof(dummy);
++
++ for (l = start; l != limit && 0 <= l && l < xe->xdf1.nrec; l += step) {
++ long len = match_func_rec(&xe->xdf1, xecfg, l, buf, size);
++ if (len >= 0) {
++ if (func_line)
++ func_line->len = len;
++ return l;
++ }
++ }
++ return -1;
++ }
++
++ static int is_empty_rec(xdfile_t *xdf, long ri)
++ {
++ const char *rec;
++ long len = xdl_get_rec(xdf, ri, &rec);
++
++ while (len > 0 && XDL_ISSPACE(*rec)) {
++ rec++;
++ len--;
++ }
++ return !len;
++ }
++
++ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
++ xdemitconf_t const *xecfg) {
++ long s1, s2, e1, e2, lctx;
++ xdchange_t *xch, *xche;
++ long funclineprev = -1;
++ struct func_line func_line = { 0 };
++
++ for (xch = xscr; xch; xch = xche->next) {
++ xche = xdl_get_hunk(&xch, xecfg);
++ if (!xch)
++ break;
++
++ s1 = XDL_MAX(xch->i1 - xecfg->ctxlen, 0);
++ s2 = XDL_MAX(xch->i2 - xecfg->ctxlen, 0);
++
++ if (xecfg->flags & XDL_EMIT_FUNCCONTEXT) {
++ long fs1, i1 = xch->i1;
++
++ /* Appended chunk? */
++ if (i1 >= xe->xdf1.nrec) {
++ long i2 = xch->i2;
++
++ /*
++ * We don't need additional context if
++ * a whole function was added.
++ */
++ while (i2 < xe->xdf2.nrec) {
++ if (is_func_rec(&xe->xdf2, xecfg, i2))
++ goto post_context_calculation;
++ i2++;
++ }
++
++ /*
++ * Otherwise get more context from the
++ * pre-image.
++ */
++ i1 = xe->xdf1.nrec - 1;
++ }
++
++ fs1 = get_func_line(xe, xecfg, NULL, i1, -1);
++ while (fs1 > 0 && !is_empty_rec(&xe->xdf1, fs1 - 1) &&
++ !is_func_rec(&xe->xdf1, xecfg, fs1 - 1))
++ fs1--;
++ if (fs1 < 0)
++ fs1 = 0;
++ if (fs1 < s1) {
++ s2 -= s1 - fs1;
++ s1 = fs1;
++ }
++ }
++
++ post_context_calculation:
++ lctx = xecfg->ctxlen;
++ lctx = XDL_MIN(lctx, xe->xdf1.nrec - (xche->i1 + xche->chg1));
++ lctx = XDL_MIN(lctx, xe->xdf2.nrec - (xche->i2 + xche->chg2));
++
++ e1 = xche->i1 + xche->chg1 + lctx;
++ e2 = xche->i2 + xche->chg2 + lctx;
++
++ if (xecfg->flags & XDL_EMIT_FUNCCONTEXT) {
++ long fe1 = get_func_line(xe, xecfg, NULL,
++ xche->i1 + xche->chg1,
++ xe->xdf1.nrec);
++ while (fe1 > 0 && is_empty_rec(&xe->xdf1, fe1 - 1))
++ fe1--;
++ if (fe1 < 0)
++ fe1 = xe->xdf1.nrec;
++ if (fe1 > e1) {
++ e2 += fe1 - e1;
++ e1 = fe1;
++ }
++
++ /*
++ * Overlap with next change? Then include it
++ * in the current hunk and start over to find
++ * its new end.
++ */
++ if (xche->next) {
++ long l = XDL_MIN(xche->next->i1,
++ xe->xdf1.nrec - 1);
++ if (l - xecfg->ctxlen <= e1 ||
++ get_func_line(xe, xecfg, NULL, l, e1) < 0) {
++ xche = xche->next;
++ goto post_context_calculation;
++ }
++ }
++ }
++
++ /*
++ * Emit current hunk header.
++ */
++
++ if (xecfg->flags & XDL_EMIT_FUNCNAMES) {
++ get_func_line(xe, xecfg, &func_line,
++ s1 - 1, funclineprev);
++ funclineprev = s1 - 1;
++ }
++ if (xdl_emit_hunk_hdr(s1 + 1, e1 - s1, s2 + 1, e2 - s2,
++ func_line.buf, func_line.len, ecb) < 0)
++ return -1;
++
++ /*
++ * Emit pre-context.
++ */
++ for (; s2 < xch->i2; s2++)
++ if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
++ return -1;
++
++ for (s1 = xch->i1, s2 = xch->i2;; xch = xch->next) {
++ /*
++ * Merge previous with current change atom.
++ */
++ for (; s1 < xch->i1 && s2 < xch->i2; s1++, s2++)
++ if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
++ return -1;
++
++ /*
++ * Removes lines from the first file.
++ */
++ for (s1 = xch->i1; s1 < xch->i1 + xch->chg1; s1++)
++ if (xdl_emit_record(&xe->xdf1, s1, "-", ecb) < 0)
++ return -1;
++
++ /*
++ * Adds lines from the second file.
++ */
++ for (s2 = xch->i2; s2 < xch->i2 + xch->chg2; s2++)
++ if (xdl_emit_record(&xe->xdf2, s2, "+", ecb) < 0)
++ return -1;
++
++ if (xch == xche)
++ break;
++ s1 = xch->i1 + xch->chg1;
++ s2 = xch->i2 + xch->chg2;
++ }
++
++ /*
++ * Emit post-context.
++ */
++ for (s2 = xche->i2 + xche->chg2; s2 < e2; s2++)
++ if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
++ return -1;
++ }
++
++ return 0;
++ }
+*** ../vim-8.1.0359/src/xdiff/xemit.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xemit.h 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,36 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #if !defined(XEMIT_H)
++ #define XEMIT_H
++
++
++ typedef int (*emit_func_t)(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
++ xdemitconf_t const *xecfg);
++
++ xdchange_t *xdl_get_hunk(xdchange_t **xscr, xdemitconf_t const *xecfg);
++ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
++ xdemitconf_t const *xecfg);
++
++
++
++ #endif /* #if !defined(XEMIT_H) */
+*** ../vim-8.1.0359/src/xdiff/xhistogram.c 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xhistogram.c 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,386 ----
++ /*
++ * Copyright (C) 2010, Google Inc.
++ * and other copyright owners as documented in JGit's IP log.
++ *
++ * This program and the accompanying materials are made available
++ * under the terms of the Eclipse Distribution License v1.0 which
++ * accompanies this distribution, is reproduced below, and is
++ * available at http://www.eclipse.org/org/documents/edl-v10.php
++ *
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or
++ * without modification, are permitted provided that the following
++ * conditions are met:
++ *
++ * - Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * - Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * - Neither the name of the Eclipse Foundation, Inc. nor the
++ * names of its contributors may be used to endorse or promote
++ * products derived from this software without specific prior
++ * written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
++ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
++ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
++ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
++ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
++ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++ #include "xinclude.h"
++ #include "xtypes.h"
++ #include "xdiff.h"
++
++ #define MAX_PTR INT_MAX
++ #define MAX_CNT INT_MAX
++
++ #define LINE_END(n) (line##n + count##n - 1)
++ #define LINE_END_PTR(n) (*line##n + *count##n - 1)
++
++ struct histindex {
++ struct record {
++ unsigned int ptr, cnt;
++ struct record *next;
++ } **records, /* an occurrence */
++ **line_map; /* map of line to record chain */
++ chastore_t rcha;
++ unsigned int *next_ptrs;
++ unsigned int table_bits,
++ records_size,
++ line_map_size;
++
++ unsigned int max_chain_length,
++ key_shift,
++ ptr_shift;
++
++ unsigned int cnt,
++ has_common;
++
++ xdfenv_t *env;
++ xpparam_t const *xpp;
++ };
++
++ struct region {
++ unsigned int begin1, end1;
++ unsigned int begin2, end2;
++ };
++
++ #define LINE_MAP(i, a) (i->line_map[(a) - i->ptr_shift])
++
++ #define NEXT_PTR(index, ptr) \
++ (index->next_ptrs[(ptr) - index->ptr_shift])
++
++ #define CNT(index, ptr) \
++ ((LINE_MAP(index, ptr))->cnt)
++
++ #define REC(env, s, l) \
++ (env->xdf##s.recs[l - 1])
++
++ static int cmp_recs(xpparam_t const *xpp,
++ xrecord_t *r1, xrecord_t *r2)
++ {
++ return r1->ha == r2->ha &&
++ xdl_recmatch(r1->ptr, r1->size, r2->ptr, r2->size,
++ xpp->flags);
++ }
++
++ #define CMP_ENV(xpp, env, s1, l1, s2, l2) \
++ (cmp_recs(xpp, REC(env, s1, l1), REC(env, s2, l2)))
++
++ #define CMP(i, s1, l1, s2, l2) \
++ (cmp_recs(i->xpp, REC(i->env, s1, l1), REC(i->env, s2, l2)))
++
++ #define TABLE_HASH(index, side, line) \
++ XDL_HASHLONG((REC(index->env, side, line))->ha, index->table_bits)
++
++ static int scanA(struct histindex *index, int line1, int count1)
++ {
++ int ptr, tbl_idx;
++ unsigned int chain_len;
++ struct record **rec_chain, *rec;
++
++ for (ptr = LINE_END(1); line1 <= ptr; ptr--) {
++ tbl_idx = TABLE_HASH(index, 1, ptr);
++ rec_chain = index->records + tbl_idx;
++ rec = *rec_chain;
++
++ chain_len = 0;
++ while (rec) {
++ if (CMP(index, 1, rec->ptr, 1, ptr)) {
++ /*
++ * ptr is identical to another element. Insert
++ * it onto the front of the existing element
++ * chain.
++ */
++ NEXT_PTR(index, ptr) = rec->ptr;
++ rec->ptr = ptr;
++ /* cap rec->cnt at MAX_CNT */
++ rec->cnt = XDL_MIN(MAX_CNT, rec->cnt + 1);
++ LINE_MAP(index, ptr) = rec;
++ goto continue_scan;
++ }
++
++ rec = rec->next;
++ chain_len++;
++ }
++
++ if (chain_len == index->max_chain_length)
++ return -1;
++
++ /*
++ * This is the first time we have ever seen this particular
++ * element in the sequence. Construct a new chain for it.
++ */
++ if (!(rec = xdl_cha_alloc(&index->rcha)))
++ return -1;
++ rec->ptr = ptr;
++ rec->cnt = 1;
++ rec->next = *rec_chain;
++ *rec_chain = rec;
++ LINE_MAP(index, ptr) = rec;
++
++ continue_scan:
++ ; /* no op */
++ }
++
++ return 0;
++ }
++
++ static int try_lcs(struct histindex *index, struct region *lcs, int b_ptr,
++ int line1, int count1, int line2, int count2)
++ {
++ unsigned int b_next = b_ptr + 1;
++ struct record *rec = index->records[TABLE_HASH(index, 2, b_ptr)];
++ unsigned int as, ae, bs, be, np, rc;
++ int should_break;
++
++ for (; rec; rec = rec->next) {
++ if (rec->cnt > index->cnt) {
++ if (!index->has_common)
++ index->has_common = CMP(index, 1, rec->ptr, 2, b_ptr);
++ continue;
++ }
++
++ as = rec->ptr;
++ if (!CMP(index, 1, as, 2, b_ptr))
++ continue;
++
++ index->has_common = 1;
++ for (;;) {
++ should_break = 0;
++ np = NEXT_PTR(index, as);
++ bs = b_ptr;
++ ae = as;
++ be = bs;
++ rc = rec->cnt;
++
++ while (line1 < (int)as && line2 < (int)bs
++ && CMP(index, 1, as - 1, 2, bs - 1)) {
++ as--;
++ bs--;
++ if (1 < rc)
++ rc = XDL_MIN(rc, CNT(index, as));
++ }
++ while ((int)ae < LINE_END(1) && (int)be < LINE_END(2)
++ && CMP(index, 1, ae + 1, 2, be + 1)) {
++ ae++;
++ be++;
++ if (1 < rc)
++ rc = XDL_MIN(rc, CNT(index, ae));
++ }
++
++ if (b_next <= be)
++ b_next = be + 1;
++ if (lcs->end1 - lcs->begin1 < ae - as || rc < index->cnt) {
++ lcs->begin1 = as;
++ lcs->begin2 = bs;
++ lcs->end1 = ae;
++ lcs->end2 = be;
++ index->cnt = rc;
++ }
++
++ if (np == 0)
++ break;
++
++ while (np <= ae) {
++ np = NEXT_PTR(index, np);
++ if (np == 0) {
++ should_break = 1;
++ break;
++ }
++ }
++
++ if (should_break)
++ break;
++
++ as = np;
++ }
++ }
++ return b_next;
++ }
++
++ static int fall_back_to_classic_diff(xpparam_t const *xpp, xdfenv_t *env,
++ int line1, int count1, int line2, int count2)
++ {
++ xpparam_t xpparam;
++ xpparam.flags = xpp->flags & ~XDF_DIFF_ALGORITHM_MASK;
++
++ return xdl_fall_back_diff(env, &xpparam,
++ line1, count1, line2, count2);
++ }
++
++ static inline void free_index(struct histindex *index)
++ {
++ xdl_free(index->records);
++ xdl_free(index->line_map);
++ xdl_free(index->next_ptrs);
++ xdl_cha_free(&index->rcha);
++ }
++
++ static int find_lcs(xpparam_t const *xpp, xdfenv_t *env,
++ struct region *lcs,
++ int line1, int count1, int line2, int count2)
++ {
++ int b_ptr;
++ int sz, ret = -1;
++ struct histindex index;
++
++ memset(&index, 0, sizeof(index));
++
++ index.env = env;
++ index.xpp = xpp;
++
++ index.records = NULL;
++ index.line_map = NULL;
++ /* in case of early xdl_cha_free() */
++ index.rcha.head = NULL;
++
++ index.table_bits = xdl_hashbits(count1);
++ sz = index.records_size = 1 << index.table_bits;
++ sz *= sizeof(struct record *);
++ if (!(index.records = (struct record **) xdl_malloc(sz)))
++ goto cleanup;
++ memset(index.records, 0, sz);
++
++ sz = index.line_map_size = count1;
++ sz *= sizeof(struct record *);
++ if (!(index.line_map = (struct record **) xdl_malloc(sz)))
++ goto cleanup;
++ memset(index.line_map, 0, sz);
++
++ sz = index.line_map_size;
++ sz *= sizeof(unsigned int);
++ if (!(index.next_ptrs = (unsigned int *) xdl_malloc(sz)))
++ goto cleanup;
++ memset(index.next_ptrs, 0, sz);
++
++ /* lines / 4 + 1 comes from xprepare.c:xdl_prepare_ctx() */
++ if (xdl_cha_init(&index.rcha, sizeof(struct record), count1 / 4 + 1) < 0)
++ goto cleanup;
++
++ index.ptr_shift = line1;
++ index.max_chain_length = 64;
++
++ if (scanA(&index, line1, count1))
++ goto cleanup;
++
++ index.cnt = index.max_chain_length + 1;
++
++ for (b_ptr = line2; b_ptr <= LINE_END(2); )
++ b_ptr = try_lcs(&index, lcs, b_ptr, line1, count1, line2, count2);
++
++ if (index.has_common && index.max_chain_length < index.cnt)
++ ret = 1;
++ else
++ ret = 0;
++
++ cleanup:
++ free_index(&index);
++ return ret;
++ }
++
++ static int histogram_diff(xpparam_t const *xpp, xdfenv_t *env,
++ int line1, int count1, int line2, int count2)
++ {
++ struct region lcs;
++ int lcs_found;
++ int result;
++ redo:
++ result = -1;
++
++ if (count1 <= 0 && count2 <= 0)
++ return 0;
++
++ if (LINE_END(1) >= MAX_PTR)
++ return -1;
++
++ if (!count1) {
++ while(count2--)
++ env->xdf2.rchg[line2++ - 1] = 1;
++ return 0;
++ } else if (!count2) {
++ while(count1--)
++ env->xdf1.rchg[line1++ - 1] = 1;
++ return 0;
++ }
++
++ memset(&lcs, 0, sizeof(lcs));
++ lcs_found = find_lcs(xpp, env, &lcs, line1, count1, line2, count2);
++ if (lcs_found < 0)
++ goto out;
++ else if (lcs_found)
++ result = fall_back_to_classic_diff(xpp, env, line1, count1, line2, count2);
++ else {
++ if (lcs.begin1 == 0 && lcs.begin2 == 0) {
++ while (count1--)
++ env->xdf1.rchg[line1++ - 1] = 1;
++ while (count2--)
++ env->xdf2.rchg[line2++ - 1] = 1;
++ result = 0;
++ } else {
++ result = histogram_diff(xpp, env,
++ line1, lcs.begin1 - line1,
++ line2, lcs.begin2 - line2);
++ if (result)
++ goto out;
++ /*
++ * result = histogram_diff(xpp, env,
++ * lcs.end1 + 1, LINE_END(1) - lcs.end1,
++ * lcs.end2 + 1, LINE_END(2) - lcs.end2);
++ * but let's optimize tail recursion ourself:
++ */
++ count1 = LINE_END(1) - lcs.end1;
++ line1 = lcs.end1 + 1;
++ count2 = LINE_END(2) - lcs.end2;
++ line2 = lcs.end2 + 1;
++ goto redo;
++ }
++ }
++ out:
++ return result;
++ }
++
++ int xdl_do_histogram_diff(mmfile_t *file1, mmfile_t *file2,
++ xpparam_t const *xpp, xdfenv_t *env)
++ {
++ if (xdl_prepare_env(file1, file2, xpp, env) < 0)
++ return -1;
++
++ return histogram_diff(xpp, env,
++ env->xdf1.dstart + 1, env->xdf1.dend - env->xdf1.dstart + 1,
++ env->xdf2.dstart + 1, env->xdf2.dend - env->xdf2.dstart + 1);
++ }
+*** ../vim-8.1.0359/src/xdiff/xinclude.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xinclude.h 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,61 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ /* defines HAVE_ATTRIBUTE_UNUSED */
++ #ifdef HAVE_CONFIG_H
++ # include "../auto/config.h"
++ #endif
++
++ /* Mark unused function arguments with UNUSED, so that gcc -Wunused-parameter
++ * can be used to check for mistakes. */
++ #ifdef HAVE_ATTRIBUTE_UNUSED
++ # define UNUSED __attribute__((unused))
++ #else
++ # define UNUSED
++ #endif
++
++ #if defined(_MSC_VER)
++ # define inline __inline
++ #endif
++
++ #if !defined(XINCLUDE_H)
++ #define XINCLUDE_H
++
++ #include <ctype.h>
++ #include <stdio.h>
++ #include <stdlib.h>
++ #if !defined(_WIN32)
++ #include <unistd.h>
++ #endif
++ #include <string.h>
++ #include <limits.h>
++
++ #include "xmacros.h"
++ #include "xdiff.h"
++ #include "xtypes.h"
++ #include "xutils.h"
++ #include "xprepare.h"
++ #include "xdiffi.h"
++ #include "xemit.h"
++
++
++ #endif /* #if !defined(XINCLUDE_H) */
+*** ../vim-8.1.0359/src/xdiff/xmacros.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xmacros.h 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,54 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #if !defined(XMACROS_H)
++ #define XMACROS_H
++
++
++
++
++ #define XDL_MIN(a, b) ((a) < (b) ? (a): (b))
++ #define XDL_MAX(a, b) ((a) > (b) ? (a): (b))
++ #define XDL_ABS(v) ((v) >= 0 ? (v): -(v))
++ #define XDL_ISDIGIT(c) ((c) >= '0' && (c) <= '9')
++ #define XDL_ISSPACE(c) (isspace((unsigned char)(c)))
++ #define XDL_ADDBITS(v,b) ((v) + ((v) >> (b)))
++ #define XDL_MASKBITS(b) ((1UL << (b)) - 1)
++ #define XDL_HASHLONG(v,b) (XDL_ADDBITS((unsigned long)(v), b) & XDL_MASKBITS(b))
++ #define XDL_PTRFREE(p) do { if (p) { xdl_free(p); (p) = NULL; } } while (0)
++ #define XDL_LE32_PUT(p, v) \
++ do { \
++ unsigned char *__p = (unsigned char *) (p); \
++ *__p++ = (unsigned char) (v); \
++ *__p++ = (unsigned char) ((v) >> 8); \
++ *__p++ = (unsigned char) ((v) >> 16); \
++ *__p = (unsigned char) ((v) >> 24); \
++ } while (0)
++ #define XDL_LE32_GET(p, v) \
++ do { \
++ unsigned char const *__p = (unsigned char const *) (p); \
++ (v) = (unsigned long) __p[0] | ((unsigned long) __p[1]) << 8 | \
++ ((unsigned long) __p[2]) << 16 | ((unsigned long) __p[3]) << 24; \
++ } while (0)
++
++
++ #endif /* #if !defined(XMACROS_H) */
+*** ../vim-8.1.0359/src/xdiff/xpatience.c 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xpatience.c 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,390 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003-2016 Davide Libenzi, Johannes E. Schindelin
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++ #include "xinclude.h"
++ #include "xtypes.h"
++ #include "xdiff.h"
++
++ /*
++ * The basic idea of patience diff is to find lines that are unique in
++ * both files. These are intuitively the ones that we want to see as
++ * common lines.
++ *
++ * The maximal ordered sequence of such line pairs (where ordered means
++ * that the order in the sequence agrees with the order of the lines in
++ * both files) naturally defines an initial set of common lines.
++ *
++ * Now, the algorithm tries to extend the set of common lines by growing
++ * the line ranges where the files have identical lines.
++ *
++ * Between those common lines, the patience diff algorithm is applied
++ * recursively, until no unique line pairs can be found; these line ranges
++ * are handled by the well-known Myers algorithm.
++ */
++
++ #define NON_UNIQUE ULONG_MAX
++
++ /*
++ * This is a hash mapping from line hash to line numbers in the first and
++ * second file.
++ */
++ struct hashmap {
++ int nr, alloc;
++ struct entry {
++ unsigned long hash;
++ /*
++ * 0 = unused entry, 1 = first line, 2 = second, etc.
++ * line2 is NON_UNIQUE if the line is not unique
++ * in either the first or the second file.
++ */
++ unsigned long line1, line2;
++ /*
++ * "next" & "previous" are used for the longest common
++ * sequence;
++ * initially, "next" reflects only the order in file1.
++ */
++ struct entry *next, *previous;
++
++ /*
++ * If 1, this entry can serve as an anchor. See
++ * Documentation/diff-options.txt for more information.
++ */
++ unsigned anchor : 1;
++ } *entries, *first, *last;
++ /* were common records found? */
++ unsigned long has_matches;
++ mmfile_t *file1, *file2;
++ xdfenv_t *env;
++ xpparam_t const *xpp;
++ };
++
++ static int is_anchor(xpparam_t const *xpp, const char *line)
++ {
++ size_t i;
++ for (i = 0; i < xpp->anchors_nr; i++) {
++ if (!strncmp(line, xpp->anchors[i], strlen(xpp->anchors[i])))
++ return 1;
++ }
++ return 0;
++ }
++
++ /* The argument "pass" is 1 for the first file, 2 for the second. */
++ static void insert_record(xpparam_t const *xpp, int line, struct hashmap *map,
++ int pass)
++ {
++ xrecord_t **records = pass == 1 ?
++ map->env->xdf1.recs : map->env->xdf2.recs;
++ xrecord_t *record = records[line - 1], *other;
++ /*
++ * After xdl_prepare_env() (or more precisely, due to
++ * xdl_classify_record()), the "ha" member of the records (AKA lines)
++ * is _not_ the hash anymore, but a linearized version of it. In
++ * other words, the "ha" member is guaranteed to start with 0 and
++ * the second record's ha can only be 0 or 1, etc.
++ *
++ * So we multiply ha by 2 in the hope that the hashing was
++ * "unique enough".
++ */
++ int index = (int)((record->ha << 1) % map->alloc);
++
++ while (map->entries[index].line1) {
++ other = map->env->xdf1.recs[map->entries[index].line1 - 1];
++ if (map->entries[index].hash != record->ha ||
++ !xdl_recmatch(record->ptr, record->size,
++ other->ptr, other->size,
++ map->xpp->flags)) {
++ if (++index >= map->alloc)
++ index = 0;
++ continue;
++ }
++ if (pass == 2)
++ map->has_matches = 1;
++ if (pass == 1 || map->entries[index].line2)
++ map->entries[index].line2 = NON_UNIQUE;
++ else
++ map->entries[index].line2 = line;
++ return;
++ }
++ if (pass == 2)
++ return;
++ map->entries[index].line1 = line;
++ map->entries[index].hash = record->ha;
++ map->entries[index].anchor = is_anchor(xpp, map->env->xdf1.recs[line - 1]->ptr);
++ if (!map->first)
++ map->first = map->entries + index;
++ if (map->last) {
++ map->last->next = map->entries + index;
++ map->entries[index].previous = map->last;
++ }
++ map->last = map->entries + index;
++ map->nr++;
++ }
++
++ /*
++ * This function has to be called for each recursion into the inter-hunk
++ * parts, as previously non-unique lines can become unique when being
++ * restricted to a smaller part of the files.
++ *
++ * It is assumed that env has been prepared using xdl_prepare().
++ */
++ static int fill_hashmap(mmfile_t *file1, mmfile_t *file2,
++ xpparam_t const *xpp, xdfenv_t *env,
++ struct hashmap *result,
++ int line1, int count1, int line2, int count2)
++ {
++ result->file1 = file1;
++ result->file2 = file2;
++ result->xpp = xpp;
++ result->env = env;
++
++ /* We know exactly how large we want the hash map */
++ result->alloc = count1 * 2;
++ result->entries = (struct entry *)
++ xdl_malloc(result->alloc * sizeof(struct entry));
++ if (!result->entries)
++ return -1;
++ memset(result->entries, 0, result->alloc * sizeof(struct entry));
++
++ /* First, fill with entries from the first file */
++ while (count1--)
++ insert_record(xpp, line1++, result, 1);
++
++ /* Then search for matches in the second file */
++ while (count2--)
++ insert_record(xpp, line2++, result, 2);
++
++ return 0;
++ }
++
++ /*
++ * Find the longest sequence with a smaller last element (meaning a smaller
++ * line2, as we construct the sequence with entries ordered by line1).
++ */
++ static int binary_search(struct entry **sequence, int longest,
++ struct entry *entry)
++ {
++ int left = -1, right = longest;
++
++ while (left + 1 < right) {
++ int middle = left + (right - left) / 2;
++ /* by construction, no two entries can be equal */
++ if (sequence[middle]->line2 > entry->line2)
++ right = middle;
++ else
++ left = middle;
++ }
++ /* return the index in "sequence", _not_ the sequence length */
++ return left;
++ }
++
++ /*
++ * The idea is to start with the list of common unique lines sorted by
++ * the order in file1. For each of these pairs, the longest (partial)
++ * sequence whose last element's line2 is smaller is determined.
++ *
++ * For efficiency, the sequences are kept in a list containing exactly one
++ * item per sequence length: the sequence with the smallest last
++ * element (in terms of line2).
++ */
++ static struct entry *find_longest_common_sequence(struct hashmap *map)
++ {
++ struct entry **sequence = xdl_malloc(map->nr * sizeof(struct entry *));
++ int longest = 0, i;
++ struct entry *entry;
++
++ /*
++ * If not -1, this entry in sequence must never be overridden.
++ * Therefore, overriding entries before this has no effect, so
++ * do not do that either.
++ */
++ int anchor_i = -1;
++
++ for (entry = map->first; entry; entry = entry->next) {
++ if (!entry->line2 || entry->line2 == NON_UNIQUE)
++ continue;
++ i = binary_search(sequence, longest, entry);
++ entry->previous = i < 0 ? NULL : sequence[i];
++ ++i;
++ if (i <= anchor_i)
++ continue;
++ sequence[i] = entry;
++ if (entry->anchor) {
++ anchor_i = i;
++ longest = anchor_i + 1;
++ } else if (i == longest) {
++ longest++;
++ }
++ }
++
++ /* No common unique lines were found */
++ if (!longest) {
++ xdl_free(sequence);
++ return NULL;
++ }
++
++ /* Iterate starting at the last element, adjusting the "next" members */
++ entry = sequence[longest - 1];
++ entry->next = NULL;
++ while (entry->previous) {
++ entry->previous->next = entry;
++ entry = entry->previous;
++ }
++ xdl_free(sequence);
++ return entry;
++ }
++
++ static int match(struct hashmap *map, int line1, int line2)
++ {
++ xrecord_t *record1 = map->env->xdf1.recs[line1 - 1];
++ xrecord_t *record2 = map->env->xdf2.recs[line2 - 1];
++ return xdl_recmatch(record1->ptr, record1->size,
++ record2->ptr, record2->size, map->xpp->flags);
++ }
++
++ static int patience_diff(mmfile_t *file1, mmfile_t *file2,
++ xpparam_t const *xpp, xdfenv_t *env,
++ int line1, int count1, int line2, int count2);
++
++ static int walk_common_sequence(struct hashmap *map, struct entry *first,
++ int line1, int count1, int line2, int count2)
++ {
++ int end1 = line1 + count1, end2 = line2 + count2;
++ int next1, next2;
++
++ for (;;) {
++ /* Try to grow the line ranges of common lines */
++ if (first) {
++ next1 = first->line1;
++ next2 = first->line2;
++ while (next1 > line1 && next2 > line2 &&
++ match(map, next1 - 1, next2 - 1)) {
++ next1--;
++ next2--;
++ }
++ } else {
++ next1 = end1;
++ next2 = end2;
++ }
++ while (line1 < next1 && line2 < next2 &&
++ match(map, line1, line2)) {
++ line1++;
++ line2++;
++ }
++
++ /* Recurse */
++ if (next1 > line1 || next2 > line2) {
++ struct hashmap submap;
++
++ memset(&submap, 0, sizeof(submap));
++ if (patience_diff(map->file1, map->file2,
++ map->xpp, map->env,
++ line1, next1 - line1,
++ line2, next2 - line2))
++ return -1;
++ }
++
++ if (!first)
++ return 0;
++
++ while (first->next &&
++ first->next->line1 == first->line1 + 1 &&
++ first->next->line2 == first->line2 + 1)
++ first = first->next;
++
++ line1 = first->line1 + 1;
++ line2 = first->line2 + 1;
++
++ first = first->next;
++ }
++ }
++
++ static int fall_back_to_classic_diff(struct hashmap *map,
++ int line1, int count1, int line2, int count2)
++ {
++ xpparam_t xpp;
++ xpp.flags = map->xpp->flags & ~XDF_DIFF_ALGORITHM_MASK;
++
++ return xdl_fall_back_diff(map->env, &xpp,
++ line1, count1, line2, count2);
++ }
++
++ /*
++ * Recursively find the longest common sequence of unique lines,
++ * and if none was found, ask xdl_do_diff() to do the job.
++ *
++ * This function assumes that env was prepared with xdl_prepare_env().
++ */
++ static int patience_diff(mmfile_t *file1, mmfile_t *file2,
++ xpparam_t const *xpp, xdfenv_t *env,
++ int line1, int count1, int line2, int count2)
++ {
++ struct hashmap map;
++ struct entry *first;
++ int result = 0;
++
++ /* trivial case: one side is empty */
++ if (!count1) {
++ while(count2--)
++ env->xdf2.rchg[line2++ - 1] = 1;
++ return 0;
++ } else if (!count2) {
++ while(count1--)
++ env->xdf1.rchg[line1++ - 1] = 1;
++ return 0;
++ }
++
++ memset(&map, 0, sizeof(map));
++ if (fill_hashmap(file1, file2, xpp, env, &map,
++ line1, count1, line2, count2))
++ return -1;
++
++ /* are there any matching lines at all? */
++ if (!map.has_matches) {
++ while(count1--)
++ env->xdf1.rchg[line1++ - 1] = 1;
++ while(count2--)
++ env->xdf2.rchg[line2++ - 1] = 1;
++ xdl_free(map.entries);
++ return 0;
++ }
++
++ first = find_longest_common_sequence(&map);
++ if (first)
++ result = walk_common_sequence(&map, first,
++ line1, count1, line2, count2);
++ else
++ result = fall_back_to_classic_diff(&map,
++ line1, count1, line2, count2);
++
++ xdl_free(map.entries);
++ return result;
++ }
++
++ int xdl_do_patience_diff(mmfile_t *file1, mmfile_t *file2,
++ xpparam_t const *xpp, xdfenv_t *env)
++ {
++ if (xdl_prepare_env(file1, file2, xpp, env) < 0)
++ return -1;
++
++ /* environment is cleaned up in xdl_diff() */
++ return patience_diff(file1, file2, xpp, env,
++ 1, env->xdf1.nrec, 1, env->xdf2.nrec);
++ }
+*** ../vim-8.1.0359/src/xdiff/xprepare.c 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xprepare.c 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,483 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #include "xinclude.h"
++
++
++ #define XDL_KPDIS_RUN 4
++ #define XDL_MAX_EQLIMIT 1024
++ #define XDL_SIMSCAN_WINDOW 100
++ #define XDL_GUESS_NLINES1 256
++ #define XDL_GUESS_NLINES2 20
++
++
++ typedef struct s_xdlclass {
++ struct s_xdlclass *next;
++ unsigned long ha;
++ char const *line;
++ long size;
++ long idx;
++ long len1, len2;
++ } xdlclass_t;
++
++ typedef struct s_xdlclassifier {
++ unsigned int hbits;
++ long hsize;
++ xdlclass_t **rchash;
++ chastore_t ncha;
++ xdlclass_t **rcrecs;
++ long alloc;
++ long count;
++ long flags;
++ } xdlclassifier_t;
++
++
++
++
++ static int xdl_init_classifier(xdlclassifier_t *cf, long size, long flags);
++ static void xdl_free_classifier(xdlclassifier_t *cf);
++ static int xdl_classify_record(unsigned int pass, xdlclassifier_t *cf, xrecord_t **rhash,
++ unsigned int hbits, xrecord_t *rec);
++ static int xdl_prepare_ctx(unsigned int pass, mmfile_t *mf, long narec, xpparam_t const *xpp,
++ xdlclassifier_t *cf, xdfile_t *xdf);
++ static void xdl_free_ctx(xdfile_t *xdf);
++ static int xdl_clean_mmatch(char const *dis, long i, long s, long e);
++ static int xdl_cleanup_records(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xdf2);
++ static int xdl_trim_ends(xdfile_t *xdf1, xdfile_t *xdf2);
++ static int xdl_optimize_ctxs(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xdf2);
++
++
++
++
++ static int xdl_init_classifier(xdlclassifier_t *cf, long size, long flags) {
++ cf->flags = flags;
++
++ cf->hbits = xdl_hashbits((unsigned int) size);
++ cf->hsize = 1 << cf->hbits;
++
++ if (xdl_cha_init(&cf->ncha, sizeof(xdlclass_t), size / 4 + 1) < 0) {
++
++ return -1;
++ }
++ if (!(cf->rchash = (xdlclass_t **) xdl_malloc(cf->hsize * sizeof(xdlclass_t *)))) {
++
++ xdl_cha_free(&cf->ncha);
++ return -1;
++ }
++ memset(cf->rchash, 0, cf->hsize * sizeof(xdlclass_t *));
++
++ cf->alloc = size;
++ if (!(cf->rcrecs = (xdlclass_t **) xdl_malloc(cf->alloc * sizeof(xdlclass_t *)))) {
++
++ xdl_free(cf->rchash);
++ xdl_cha_free(&cf->ncha);
++ return -1;
++ }
++
++ cf->count = 0;
++
++ return 0;
++ }
++
++
++ static void xdl_free_classifier(xdlclassifier_t *cf) {
++
++ xdl_free(cf->rcrecs);
++ xdl_free(cf->rchash);
++ xdl_cha_free(&cf->ncha);
++ }
++
++
++ static int xdl_classify_record(unsigned int pass, xdlclassifier_t *cf, xrecord_t **rhash,
++ unsigned int hbits, xrecord_t *rec) {
++ long hi;
++ char const *line;
++ xdlclass_t *rcrec;
++ xdlclass_t **rcrecs;
++
++ line = rec->ptr;
++ hi = (long) XDL_HASHLONG(rec->ha, cf->hbits);
++ for (rcrec = cf->rchash[hi]; rcrec; rcrec = rcrec->next)
++ if (rcrec->ha == rec->ha &&
++ xdl_recmatch(rcrec->line, rcrec->size,
++ rec->ptr, rec->size, cf->flags))
++ break;
++
++ if (!rcrec) {
++ if (!(rcrec = xdl_cha_alloc(&cf->ncha))) {
++
++ return -1;
++ }
++ rcrec->idx = cf->count++;
++ if (cf->count > cf->alloc) {
++ cf->alloc *= 2;
++ if (!(rcrecs = (xdlclass_t **) xdl_realloc(cf->rcrecs, cf->alloc * sizeof(xdlclass_t *)))) {
++
++ return -1;
++ }
++ cf->rcrecs = rcrecs;
++ }
++ cf->rcrecs[rcrec->idx] = rcrec;
++ rcrec->line = line;
++ rcrec->size = rec->size;
++ rcrec->ha = rec->ha;
++ rcrec->len1 = rcrec->len2 = 0;
++ rcrec->next = cf->rchash[hi];
++ cf->rchash[hi] = rcrec;
++ }
++
++ (pass == 1) ? rcrec->len1++ : rcrec->len2++;
++
++ rec->ha = (unsigned long) rcrec->idx;
++
++ hi = (long) XDL_HASHLONG(rec->ha, hbits);
++ rec->next = rhash[hi];
++ rhash[hi] = rec;
++
++ return 0;
++ }
++
++
++ static int xdl_prepare_ctx(unsigned int pass, mmfile_t *mf, long narec, xpparam_t const *xpp,
++ xdlclassifier_t *cf, xdfile_t *xdf) {
++ unsigned int hbits;
++ long nrec, hsize, bsize;
++ unsigned long hav;
++ char const *blk, *cur, *top, *prev;
++ xrecord_t *crec;
++ xrecord_t **recs, **rrecs;
++ xrecord_t **rhash;
++ unsigned long *ha;
++ char *rchg;
++ long *rindex;
++
++ ha = NULL;
++ rindex = NULL;
++ rchg = NULL;
++ rhash = NULL;
++ recs = NULL;
++
++ if (xdl_cha_init(&xdf->rcha, sizeof(xrecord_t), narec / 4 + 1) < 0)
++ goto abort;
++ if (!(recs = (xrecord_t **) xdl_malloc(narec * sizeof(xrecord_t *))))
++ goto abort;
++
++ if (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF)
++ hbits = hsize = 0;
++ else {
++ hbits = xdl_hashbits((unsigned int) narec);
++ hsize = 1 << hbits;
++ if (!(rhash = (xrecord_t **) xdl_malloc(hsize * sizeof(xrecord_t *))))
++ goto abort;
++ memset(rhash, 0, hsize * sizeof(xrecord_t *));
++ }
++
++ nrec = 0;
++ if ((cur = blk = xdl_mmfile_first(mf, &bsize)) != NULL) {
++ for (top = blk + bsize; cur < top; ) {
++ prev = cur;
++ hav = xdl_hash_record(&cur, top, xpp->flags);
++ if (nrec >= narec) {
++ narec *= 2;
++ if (!(rrecs = (xrecord_t **) xdl_realloc(recs, narec * sizeof(xrecord_t *))))
++ goto abort;
++ recs = rrecs;
++ }
++ if (!(crec = xdl_cha_alloc(&xdf->rcha)))
++ goto abort;
++ crec->ptr = prev;
++ crec->size = (long) (cur - prev);
++ crec->ha = hav;
++ recs[nrec++] = crec;
++
++ if ((XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF) &&
++ xdl_classify_record(pass, cf, rhash, hbits, crec) < 0)
++ goto abort;
++ }
++ }
++
++ if (!(rchg = (char *) xdl_malloc((nrec + 2) * sizeof(char))))
++ goto abort;
++ memset(rchg, 0, (nrec + 2) * sizeof(char));
++
++ if (!(rindex = (long *) xdl_malloc((nrec + 1) * sizeof(long))))
++ goto abort;
++ if (!(ha = (unsigned long *) xdl_malloc((nrec + 1) * sizeof(unsigned long))))
++ goto abort;
++
++ xdf->nrec = nrec;
++ xdf->recs = recs;
++ xdf->hbits = hbits;
++ xdf->rhash = rhash;
++ xdf->rchg = rchg + 1;
++ xdf->rindex = rindex;
++ xdf->nreff = 0;
++ xdf->ha = ha;
++ xdf->dstart = 0;
++ xdf->dend = nrec - 1;
++
++ return 0;
++
++ abort:
++ xdl_free(ha);
++ xdl_free(rindex);
++ xdl_free(rchg);
++ xdl_free(rhash);
++ xdl_free(recs);
++ xdl_cha_free(&xdf->rcha);
++ return -1;
++ }
++
++
++ static void xdl_free_ctx(xdfile_t *xdf) {
++
++ xdl_free(xdf->rhash);
++ xdl_free(xdf->rindex);
++ xdl_free(xdf->rchg - 1);
++ xdl_free(xdf->ha);
++ xdl_free(xdf->recs);
++ xdl_cha_free(&xdf->rcha);
++ }
++
++
++ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
++ xdfenv_t *xe) {
++ long enl1, enl2, sample;
++ xdlclassifier_t cf;
++
++ memset(&cf, 0, sizeof(cf));
++
++ /*
++ * For histogram diff, we can afford a smaller sample size and
++ * thus a poorer estimate of the number of lines, as the hash
++ * table (rhash) won't be filled up/grown. The number of lines
++ * (nrecs) will be updated correctly anyway by
++ * xdl_prepare_ctx().
++ */
++ sample = (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF
++ ? XDL_GUESS_NLINES2 : XDL_GUESS_NLINES1);
++
++ enl1 = xdl_guess_lines(mf1, sample) + 1;
++ enl2 = xdl_guess_lines(mf2, sample) + 1;
++
++ if (XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF &&
++ xdl_init_classifier(&cf, enl1 + enl2 + 1, xpp->flags) < 0)
++ return -1;
++
++ if (xdl_prepare_ctx(1, mf1, enl1, xpp, &cf, &xe->xdf1) < 0) {
++
++ xdl_free_classifier(&cf);
++ return -1;
++ }
++ if (xdl_prepare_ctx(2, mf2, enl2, xpp, &cf, &xe->xdf2) < 0) {
++
++ xdl_free_ctx(&xe->xdf1);
++ xdl_free_classifier(&cf);
++ return -1;
++ }
++
++ if ((XDF_DIFF_ALG(xpp->flags) != XDF_PATIENCE_DIFF) &&
++ (XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF) &&
++ xdl_optimize_ctxs(&cf, &xe->xdf1, &xe->xdf2) < 0) {
++
++ xdl_free_ctx(&xe->xdf2);
++ xdl_free_ctx(&xe->xdf1);
++ xdl_free_classifier(&cf);
++ return -1;
++ }
++
++ if (XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF)
++ xdl_free_classifier(&cf);
++
++ return 0;
++ }
++
++
++ void xdl_free_env(xdfenv_t *xe) {
++
++ xdl_free_ctx(&xe->xdf2);
++ xdl_free_ctx(&xe->xdf1);
++ }
++
++
++ static int xdl_clean_mmatch(char const *dis, long i, long s, long e) {
++ long r, rdis0, rpdis0, rdis1, rpdis1;
++
++ /*
++ * Limits the window the is examined during the similar-lines
++ * scan. The loops below stops when dis[i - r] == 1 (line that
++ * has no match), but there are corner cases where the loop
++ * proceed all the way to the extremities by causing huge
++ * performance penalties in case of big files.
++ */
++ if (i - s > XDL_SIMSCAN_WINDOW)
++ s = i - XDL_SIMSCAN_WINDOW;
++ if (e - i > XDL_SIMSCAN_WINDOW)
++ e = i + XDL_SIMSCAN_WINDOW;
++
++ /*
++ * Scans the lines before 'i' to find a run of lines that either
++ * have no match (dis[j] == 0) or have multiple matches (dis[j] > 1).
++ * Note that we always call this function with dis[i] > 1, so the
++ * current line (i) is already a multimatch line.
++ */
++ for (r = 1, rdis0 = 0, rpdis0 = 1; (i - r) >= s; r++) {
++ if (!dis[i - r])
++ rdis0++;
++ else if (dis[i - r] == 2)
++ rpdis0++;
++ else
++ break;
++ }
++ /*
++ * If the run before the line 'i' found only multimatch lines, we
++ * return 0 and hence we don't make the current line (i) discarded.
++ * We want to discard multimatch lines only when they appear in the
++ * middle of runs with nomatch lines (dis[j] == 0).
++ */
++ if (rdis0 == 0)
++ return 0;
++ for (r = 1, rdis1 = 0, rpdis1 = 1; (i + r) <= e; r++) {
++ if (!dis[i + r])
++ rdis1++;
++ else if (dis[i + r] == 2)
++ rpdis1++;
++ else
++ break;
++ }
++ /*
++ * If the run after the line 'i' found only multimatch lines, we
++ * return 0 and hence we don't make the current line (i) discarded.
++ */
++ if (rdis1 == 0)
++ return 0;
++ rdis1 += rdis0;
++ rpdis1 += rpdis0;
++
++ return rpdis1 * XDL_KPDIS_RUN < (rpdis1 + rdis1);
++ }
++
++
++ /*
++ * Try to reduce the problem complexity, discard records that have no
++ * matches on the other file. Also, lines that have multiple matches
++ * might be potentially discarded if they happear in a run of discardable.
++ */
++ static int xdl_cleanup_records(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xdf2) {
++ long i, nm, nreff, mlim;
++ xrecord_t **recs;
++ xdlclass_t *rcrec;
++ char *dis, *dis1, *dis2;
++
++ if (!(dis = (char *) xdl_malloc(xdf1->nrec + xdf2->nrec + 2))) {
++
++ return -1;
++ }
++ memset(dis, 0, xdf1->nrec + xdf2->nrec + 2);
++ dis1 = dis;
++ dis2 = dis1 + xdf1->nrec + 1;
++
++ if ((mlim = xdl_bogosqrt(xdf1->nrec)) > XDL_MAX_EQLIMIT)
++ mlim = XDL_MAX_EQLIMIT;
++ for (i = xdf1->dstart, recs = &xdf1->recs[xdf1->dstart]; i <= xdf1->dend; i++, recs++) {
++ rcrec = cf->rcrecs[(*recs)->ha];
++ nm = rcrec ? rcrec->len2 : 0;
++ dis1[i] = (nm == 0) ? 0: (nm >= mlim) ? 2: 1;
++ }
++
++ if ((mlim = xdl_bogosqrt(xdf2->nrec)) > XDL_MAX_EQLIMIT)
++ mlim = XDL_MAX_EQLIMIT;
++ for (i = xdf2->dstart, recs = &xdf2->recs[xdf2->dstart]; i <= xdf2->dend; i++, recs++) {
++ rcrec = cf->rcrecs[(*recs)->ha];
++ nm = rcrec ? rcrec->len1 : 0;
++ dis2[i] = (nm == 0) ? 0: (nm >= mlim) ? 2: 1;
++ }
++
++ for (nreff = 0, i = xdf1->dstart, recs = &xdf1->recs[xdf1->dstart];
++ i <= xdf1->dend; i++, recs++) {
++ if (dis1[i] == 1 ||
++ (dis1[i] == 2 && !xdl_clean_mmatch(dis1, i, xdf1->dstart, xdf1->dend))) {
++ xdf1->rindex[nreff] = i;
++ xdf1->ha[nreff] = (*recs)->ha;
++ nreff++;
++ } else
++ xdf1->rchg[i] = 1;
++ }
++ xdf1->nreff = nreff;
++
++ for (nreff = 0, i = xdf2->dstart, recs = &xdf2->recs[xdf2->dstart];
++ i <= xdf2->dend; i++, recs++) {
++ if (dis2[i] == 1 ||
++ (dis2[i] == 2 && !xdl_clean_mmatch(dis2, i, xdf2->dstart, xdf2->dend))) {
++ xdf2->rindex[nreff] = i;
++ xdf2->ha[nreff] = (*recs)->ha;
++ nreff++;
++ } else
++ xdf2->rchg[i] = 1;
++ }
++ xdf2->nreff = nreff;
++
++ xdl_free(dis);
++
++ return 0;
++ }
++
++
++ /*
++ * Early trim initial and terminal matching records.
++ */
++ static int xdl_trim_ends(xdfile_t *xdf1, xdfile_t *xdf2) {
++ long i, lim;
++ xrecord_t **recs1, **recs2;
++
++ recs1 = xdf1->recs;
++ recs2 = xdf2->recs;
++ for (i = 0, lim = XDL_MIN(xdf1->nrec, xdf2->nrec); i < lim;
++ i++, recs1++, recs2++)
++ if ((*recs1)->ha != (*recs2)->ha)
++ break;
++
++ xdf1->dstart = xdf2->dstart = i;
++
++ recs1 = xdf1->recs + xdf1->nrec - 1;
++ recs2 = xdf2->recs + xdf2->nrec - 1;
++ for (lim -= i, i = 0; i < lim; i++, recs1--, recs2--)
++ if ((*recs1)->ha != (*recs2)->ha)
++ break;
++
++ xdf1->dend = xdf1->nrec - i - 1;
++ xdf2->dend = xdf2->nrec - i - 1;
++
++ return 0;
++ }
++
++
++ static int xdl_optimize_ctxs(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xdf2) {
++
++ if (xdl_trim_ends(xdf1, xdf2) < 0 ||
++ xdl_cleanup_records(cf, xdf1, xdf2) < 0) {
++
++ return -1;
++ }
++
++ return 0;
++ }
+*** ../vim-8.1.0359/src/xdiff/xprepare.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xprepare.h 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,34 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #if !defined(XPREPARE_H)
++ #define XPREPARE_H
++
++
++
++ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
++ xdfenv_t *xe);
++ void xdl_free_env(xdfenv_t *xe);
++
++
++
++ #endif /* #if !defined(XPREPARE_H) */
+*** ../vim-8.1.0359/src/xdiff/xtypes.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xtypes.h 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,67 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #if !defined(XTYPES_H)
++ #define XTYPES_H
++
++
++
++ typedef struct s_chanode {
++ struct s_chanode *next;
++ long icurr;
++ } chanode_t;
++
++ typedef struct s_chastore {
++ chanode_t *head, *tail;
++ long isize, nsize;
++ chanode_t *ancur;
++ chanode_t *sncur;
++ long scurr;
++ } chastore_t;
++
++ typedef struct s_xrecord {
++ struct s_xrecord *next;
++ char const *ptr;
++ long size;
++ unsigned long ha;
++ } xrecord_t;
++
++ typedef struct s_xdfile {
++ chastore_t rcha;
++ long nrec;
++ unsigned int hbits;
++ xrecord_t **rhash;
++ long dstart, dend;
++ xrecord_t **recs;
++ char *rchg;
++ long *rindex;
++ long nreff;
++ unsigned long *ha;
++ } xdfile_t;
++
++ typedef struct s_xdfenv {
++ xdfile_t xdf1, xdf2;
++ } xdfenv_t;
++
++
++
++ #endif /* #if !defined(XTYPES_H) */
+*** ../vim-8.1.0359/src/xdiff/xutils.c 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xutils.c 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,425 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #include <limits.h>
++ #include <assert.h>
++ #include "xinclude.h"
++
++
++
++
++ long xdl_bogosqrt(long n) {
++ long i;
++
++ /*
++ * Classical integer square root approximation using shifts.
++ */
++ for (i = 1; n > 0; n >>= 2)
++ i <<= 1;
++
++ return i;
++ }
++
++
++ int xdl_emit_diffrec(char const *rec, long size, char const *pre, long psize,
++ xdemitcb_t *ecb) {
++ int i = 2;
++ mmbuffer_t mb[3];
++
++ mb[0].ptr = (char *) pre;
++ mb[0].size = psize;
++ mb[1].ptr = (char *) rec;
++ mb[1].size = size;
++ if (size > 0 && rec[size - 1] != '\n') {
++ mb[2].ptr = (char *) "\n\\ No newline at end of file\n";
++ mb[2].size = strlen(mb[2].ptr);
++ i++;
++ }
++ if (ecb->outf(ecb->priv, mb, i) < 0) {
++
++ return -1;
++ }
++
++ return 0;
++ }
++
++ void *xdl_mmfile_first(mmfile_t *mmf, long *size)
++ {
++ *size = mmf->size;
++ return mmf->ptr;
++ }
++
++
++ long xdl_mmfile_size(mmfile_t *mmf)
++ {
++ return mmf->size;
++ }
++
++
++ int xdl_cha_init(chastore_t *cha, long isize, long icount) {
++
++ cha->head = cha->tail = NULL;
++ cha->isize = isize;
++ cha->nsize = icount * isize;
++ cha->ancur = cha->sncur = NULL;
++ cha->scurr = 0;
++
++ return 0;
++ }
++
++
++ void xdl_cha_free(chastore_t *cha) {
++ chanode_t *cur, *tmp;
++
++ for (cur = cha->head; (tmp = cur) != NULL;) {
++ cur = cur->next;
++ xdl_free(tmp);
++ }
++ }
++
++
++ void *xdl_cha_alloc(chastore_t *cha) {
++ chanode_t *ancur;
++ void *data;
++
++ if (!(ancur = cha->ancur) || ancur->icurr == cha->nsize) {
++ if (!(ancur = (chanode_t *) xdl_malloc(sizeof(chanode_t) + cha->nsize))) {
++
++ return NULL;
++ }
++ ancur->icurr = 0;
++ ancur->next = NULL;
++ if (cha->tail)
++ cha->tail->next = ancur;
++ if (!cha->head)
++ cha->head = ancur;
++ cha->tail = ancur;
++ cha->ancur = ancur;
++ }
++
++ data = (char *) ancur + sizeof(chanode_t) + ancur->icurr;
++ ancur->icurr += cha->isize;
++
++ return data;
++ }
++
++ long xdl_guess_lines(mmfile_t *mf, long sample) {
++ long nl = 0, size, tsize = 0;
++ char const *data, *cur, *top;
++
++ if ((cur = data = xdl_mmfile_first(mf, &size)) != NULL) {
++ for (top = data + size; nl < sample && cur < top; ) {
++ nl++;
++ if (!(cur = memchr(cur, '\n', top - cur)))
++ cur = top;
++ else
++ cur++;
++ }
++ tsize += (long) (cur - data);
++ }
++
++ if (nl && tsize)
++ nl = xdl_mmfile_size(mf) / (tsize / nl);
++
++ return nl + 1;
++ }
++
++ int xdl_blankline(const char *line, long size, long flags)
++ {
++ long i;
++
++ if (!(flags & XDF_WHITESPACE_FLAGS))
++ return (size <= 1);
++
++ for (i = 0; i < size && XDL_ISSPACE(line[i]); i++)
++ ;
++
++ return (i == size);
++ }
++
++ /*
++ * Have we eaten everything on the line, except for an optional
++ * CR at the very end?
++ */
++ static int ends_with_optional_cr(const char *l, long s, long i)
++ {
++ int complete = s && l[s-1] == '\n';
++
++ if (complete)
++ s--;
++ if (s == i)
++ return 1;
++ /* do not ignore CR at the end of an incomplete line */
++ if (complete && s == i + 1 && l[i] == '\r')
++ return 1;
++ return 0;
++ }
++
++ int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags)
++ {
++ int i1, i2;
++
++ if (s1 == s2 && !memcmp(l1, l2, s1))
++ return 1;
++ if (!(flags & XDF_WHITESPACE_FLAGS))
++ return 0;
++
++ i1 = 0;
++ i2 = 0;
++
++ /*
++ * -w matches everything that matches with -b, and -b in turn
++ * matches everything that matches with --ignore-space-at-eol,
++ * which in turn matches everything that matches with --ignore-cr-at-eol.
++ *
++ * Each flavor of ignoring needs different logic to skip whitespaces
++ * while we have both sides to compare.
++ */
++ if (flags & XDF_IGNORE_WHITESPACE) {
++ goto skip_ws;
++ while (i1 < s1 && i2 < s2) {
++ if (l1[i1++] != l2[i2++])
++ return 0;
++ skip_ws:
++ while (i1 < s1 && XDL_ISSPACE(l1[i1]))
++ i1++;
++ while (i2 < s2 && XDL_ISSPACE(l2[i2]))
++ i2++;
++ }
++ } else if (flags & XDF_IGNORE_WHITESPACE_CHANGE) {
++ while (i1 < s1 && i2 < s2) {
++ if (XDL_ISSPACE(l1[i1]) && XDL_ISSPACE(l2[i2])) {
++ /* Skip matching spaces and try again */
++ while (i1 < s1 && XDL_ISSPACE(l1[i1]))
++ i1++;
++ while (i2 < s2 && XDL_ISSPACE(l2[i2]))
++ i2++;
++ continue;
++ }
++ if (l1[i1++] != l2[i2++])
++ return 0;
++ }
++ } else if (flags & XDF_IGNORE_WHITESPACE_AT_EOL) {
++ while (i1 < s1 && i2 < s2 && l1[i1] == l2[i2]) {
++ i1++;
++ i2++;
++ }
++ } else if (flags & XDF_IGNORE_CR_AT_EOL) {
++ /* Find the first difference and see how the line ends */
++ while (i1 < s1 && i2 < s2 && l1[i1] == l2[i2]) {
++ i1++;
++ i2++;
++ }
++ return (ends_with_optional_cr(l1, s1, i1) &&
++ ends_with_optional_cr(l2, s2, i2));
++ }
++
++ /*
++ * After running out of one side, the remaining side must have
++ * nothing but whitespace for the lines to match. Note that
++ * ignore-whitespace-at-eol case may break out of the loop
++ * while there still are characters remaining on both lines.
++ */
++ if (i1 < s1) {
++ while (i1 < s1 && XDL_ISSPACE(l1[i1]))
++ i1++;
++ if (s1 != i1)
++ return 0;
++ }
++ if (i2 < s2) {
++ while (i2 < s2 && XDL_ISSPACE(l2[i2]))
++ i2++;
++ return (s2 == i2);
++ }
++ return 1;
++ }
++
++ static unsigned long xdl_hash_record_with_whitespace(char const **data,
++ char const *top, long flags) {
++ unsigned long ha = 5381;
++ char const *ptr = *data;
++ int cr_at_eol_only = (flags & XDF_WHITESPACE_FLAGS) == XDF_IGNORE_CR_AT_EOL;
++
++ for (; ptr < top && *ptr != '\n'; ptr++) {
++ if (cr_at_eol_only) {
++ /* do not ignore CR at the end of an incomplete line */
++ if (*ptr == '\r' &&
++ (ptr + 1 < top && ptr[1] == '\n'))
++ continue;
++ }
++ else if (XDL_ISSPACE(*ptr)) {
++ const char *ptr2 = ptr;
++ int at_eol;
++ while (ptr + 1 < top && XDL_ISSPACE(ptr[1])
++ && ptr[1] != '\n')
++ ptr++;
++ at_eol = (top <= ptr + 1 || ptr[1] == '\n');
++ if (flags & XDF_IGNORE_WHITESPACE)
++ ; /* already handled */
++ else if (flags & XDF_IGNORE_WHITESPACE_CHANGE
++ && !at_eol) {
++ ha += (ha << 5);
++ ha ^= (unsigned long) ' ';
++ }
++ else if (flags & XDF_IGNORE_WHITESPACE_AT_EOL
++ && !at_eol) {
++ while (ptr2 != ptr + 1) {
++ ha += (ha << 5);
++ ha ^= (unsigned long) *ptr2;
++ ptr2++;
++ }
++ }
++ continue;
++ }
++ ha += (ha << 5);
++ ha ^= (unsigned long) *ptr;
++ }
++ *data = ptr < top ? ptr + 1: ptr;
++
++ return ha;
++ }
++
++ unsigned long xdl_hash_record(char const **data, char const *top, long flags) {
++ unsigned long ha = 5381;
++ char const *ptr = *data;
++
++ if (flags & XDF_WHITESPACE_FLAGS)
++ return xdl_hash_record_with_whitespace(data, top, flags);
++
++ for (; ptr < top && *ptr != '\n'; ptr++) {
++ ha += (ha << 5);
++ ha ^= (unsigned long) *ptr;
++ }
++ *data = ptr < top ? ptr + 1: ptr;
++
++ return ha;
++ }
++
++ unsigned int xdl_hashbits(unsigned int size) {
++ unsigned int val = 1, bits = 0;
++
++ for (; val < size && bits < CHAR_BIT * sizeof(unsigned int); val <<= 1, bits++);
++ return bits ? bits: 1;
++ }
++
++
++ int xdl_num_out(char *out, long val) {
++ char *ptr, *str = out;
++ char buf[32];
++
++ ptr = buf + sizeof(buf) - 1;
++ *ptr = '\0';
++ if (val < 0) {
++ *--ptr = '-';
++ val = -val;
++ }
++ for (; val && ptr > buf; val /= 10)
++ *--ptr = "0123456789"[val % 10];
++ if (*ptr)
++ for (; *ptr; ptr++, str++)
++ *str = *ptr;
++ else
++ *str++ = '0';
++ *str = '\0';
++
++ return str - out;
++ }
++
++ int xdl_emit_hunk_hdr(long s1, long c1, long s2, long c2,
++ const char *func, long funclen, xdemitcb_t *ecb) {
++ int nb = 0;
++ mmbuffer_t mb;
++ char buf[128];
++
++ memcpy(buf, "@@ -", 4);
++ nb += 4;
++
++ nb += xdl_num_out(buf + nb, c1 ? s1: s1 - 1);
++
++ if (c1 != 1) {
++ memcpy(buf + nb, ",", 1);
++ nb += 1;
++
++ nb += xdl_num_out(buf + nb, c1);
++ }
++
++ memcpy(buf + nb, " +", 2);
++ nb += 2;
++
++ nb += xdl_num_out(buf + nb, c2 ? s2: s2 - 1);
++
++ if (c2 != 1) {
++ memcpy(buf + nb, ",", 1);
++ nb += 1;
++
++ nb += xdl_num_out(buf + nb, c2);
++ }
++
++ memcpy(buf + nb, " @@", 3);
++ nb += 3;
++ if (func && funclen) {
++ buf[nb++] = ' ';
++ if (funclen > (long)sizeof(buf) - nb - 1)
++ funclen = sizeof(buf) - nb - 1;
++ memcpy(buf + nb, func, funclen);
++ nb += funclen;
++ }
++ buf[nb++] = '\n';
++
++ mb.ptr = buf;
++ mb.size = nb;
++ if (ecb->outf(ecb->priv, &mb, 1) < 0)
++ return -1;
++
++ return 0;
++ }
++
++ int xdl_fall_back_diff(xdfenv_t *diff_env, xpparam_t const *xpp,
++ int line1, int count1, int line2, int count2)
++ {
++ /*
++ * This probably does not work outside Git, since
++ * we have a very simple mmfile structure.
++ *
++ * Note: ideally, we would reuse the prepared environment, but
++ * the libxdiff interface does not (yet) allow for diffing only
++ * ranges of lines instead of the whole files.
++ */
++ mmfile_t subfile1, subfile2;
++ xdfenv_t env;
++
++ subfile1.ptr = (char *)diff_env->xdf1.recs[line1 - 1]->ptr;
++ subfile1.size = diff_env->xdf1.recs[line1 + count1 - 2]->ptr +
++ diff_env->xdf1.recs[line1 + count1 - 2]->size - subfile1.ptr;
++ subfile2.ptr = (char *)diff_env->xdf2.recs[line2 - 1]->ptr;
++ subfile2.size = diff_env->xdf2.recs[line2 + count2 - 2]->ptr +
++ diff_env->xdf2.recs[line2 + count2 - 2]->size - subfile2.ptr;
++ if (xdl_do_diff(&subfile1, &subfile2, xpp, &env) < 0)
++ return -1;
++
++ memcpy(diff_env->xdf1.rchg + line1 - 1, env.xdf1.rchg, count1);
++ memcpy(diff_env->xdf2.rchg + line2 - 1, env.xdf2.rchg, count2);
++
++ xdl_free_env(&env);
++
++ return 0;
++ }
+*** ../vim-8.1.0359/src/xdiff/xutils.h 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/xutils.h 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,47 ----
++ /*
++ * LibXDiff by Davide Libenzi ( File Differential Library )
++ * Copyright (C) 2003 Davide Libenzi
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * Davide Libenzi <davidel@xmailserver.org>
++ *
++ */
++
++ #if !defined(XUTILS_H)
++ #define XUTILS_H
++
++
++
++ long xdl_bogosqrt(long n);
++ int xdl_emit_diffrec(char const *rec, long size, char const *pre, long psize,
++ xdemitcb_t *ecb);
++ int xdl_cha_init(chastore_t *cha, long isize, long icount);
++ void xdl_cha_free(chastore_t *cha);
++ void *xdl_cha_alloc(chastore_t *cha);
++ long xdl_guess_lines(mmfile_t *mf, long sample);
++ int xdl_blankline(const char *line, long size, long flags);
++ int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags);
++ unsigned long xdl_hash_record(char const **data, char const *top, long flags);
++ unsigned int xdl_hashbits(unsigned int size);
++ int xdl_num_out(char *out, long val);
++ int xdl_emit_hunk_hdr(long s1, long c1, long s2, long c2,
++ const char *func, long funclen, xdemitcb_t *ecb);
++ int xdl_fall_back_diff(xdfenv_t *diff_env, xpparam_t const *xpp,
++ int line1, int count1, int line2, int count2);
++
++
++
++ #endif /* #if !defined(XUTILS_H) */
+*** ../vim-8.1.0359/src/xdiff/README.txt 1970-01-01 01:00:00.000000000 +0100
+--- src/xdiff/README.txt 2018-09-10 17:39:20.324083781 +0200
+***************
+*** 0 ****
+--- 1,14 ----
++ The files in this directory come from the xdiff implementation in git.
++ You can find it here: https://github.com/git/git/tree/master/xdiff
++ The files were last updated 2018 September 10.
++
++ This is originally based on libxdiff, which can be found here:
++ http://www.xmailserver.org/xdiff-lib.html
++
++ The git version was used because it has been maintained and improved.
++ And since it's part of git it is expected to be reliable.
++
++ The code is distributed under the GNU LGPL license. It is included in the
++ COPYING file.
++
++ The first work for including xdiff in Vim was done by Christian Brabandt.
+*** ../vim-8.1.0359/src/version.c 2018-09-09 22:02:21.165859748 +0200
+--- src/version.c 2018-09-10 17:23:11.443756983 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 360,
+ /**/
+
+--
+'Well, here's something to occupy you and keep your mind off things.'
+'It won't work, I have an exceptionally large mind.'
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0361 b/data/vim/patches/8.1.0361
new file mode 100644
index 000000000..749364d12
--- /dev/null
+++ b/data/vim/patches/8.1.0361
@@ -0,0 +1,172 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0361
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0361
+Problem: Remote user not used for completion. (Stucki)
+Solution: Use $USER too. (Dominique Pelle, closes #3407)
+Files: src/misc1.c
+
+
+*** ../vim-8.1.0360/src/misc1.c 2018-08-26 21:23:03.400383307 +0200
+--- src/misc1.c 2018-09-10 18:53:46.863908096 +0200
+***************
+*** 4717,4722 ****
+--- 4717,4741 ----
+ }
+
+ /*
++ * Add a user name to the list of users in ga_users.
++ * Do nothing if user name is NULL or empty.
++ */
++ static void
++ add_user(char_u *user, int need_copy)
++ {
++ char_u *user_copy = (user != NULL && need_copy)
++ ? vim_strsave(user) : user;
++
++ if (user_copy == NULL || *user_copy == NUL || ga_grow(&ga_users, 1) == FAIL)
++ {
++ if (need_copy)
++ vim_free(user);
++ return;
++ }
++ ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user_copy;
++ }
++
++ /*
+ * Find all user names for user completion.
+ * Done only once and then cached.
+ */
+***************
+*** 4733,4758 ****
+
+ # if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H)
+ {
+- char_u* user;
+ struct passwd* pw;
+
+ setpwent();
+ while ((pw = getpwent()) != NULL)
+! /* pw->pw_name shouldn't be NULL but just in case... */
+! if (pw->pw_name != NULL)
+! {
+! if (ga_grow(&ga_users, 1) == FAIL)
+! break;
+! user = vim_strsave((char_u*)pw->pw_name);
+! if (user == NULL)
+! break;
+! ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
+! }
+ endpwent();
+ }
+ # elif defined(WIN3264)
+ {
+- char_u* user;
+ DWORD nusers = 0, ntotal = 0, i;
+ PUSER_INFO_0 uinfo;
+
+--- 4752,4766 ----
+
+ # if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H)
+ {
+ struct passwd* pw;
+
+ setpwent();
+ while ((pw = getpwent()) != NULL)
+! add_user((char_u *)pw->pw_name, TRUE);
+ endpwent();
+ }
+ # elif defined(WIN3264)
+ {
+ DWORD nusers = 0, ntotal = 0, i;
+ PUSER_INFO_0 uinfo;
+
+***************
+*** 4760,4775 ****
+ &nusers, &ntotal, NULL) == NERR_Success)
+ {
+ for (i = 0; i < nusers; i++)
+ {
+! if (ga_grow(&ga_users, 1) == FAIL)
+! break;
+! user = utf16_to_enc(uinfo[i].usri0_name, NULL);
+! if (user == NULL)
+ break;
+- ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
+ }
+
+! NetApiBufferFree(uinfo);
+ }
+ }
+ # endif
+--- 4768,4808 ----
+ &nusers, &ntotal, NULL) == NERR_Success)
+ {
+ for (i = 0; i < nusers; i++)
++ add_user(utf16_to_enc(uinfo[i].usri0_name, NULL), FALSE);
++
++ NetApiBufferFree(uinfo);
++ }
++ }
++ # endif
++ # if defined(HAVE_GETPWNAM)
++ {
++ char_u *user_env = mch_getenv((char_u *)"USER");
++
++ // The $USER environment variable may be a valid remote user name (NIS,
++ // LDAP) not already listed by getpwent(), as getpwent() only lists
++ // local user names. If $USER is not already listed, check whether it
++ // is a valid remote user name using getpwnam() and if it is, add it to
++ // the list of user names.
++
++ if (user_env != NULL && *user_env != NUL)
++ {
++ int i;
++
++ for (i = 0; i < ga_users.ga_len; i++)
+ {
+! char_u *local_user = ((char_u **)ga_users.ga_data)[i];
+!
+! if (STRCMP(local_user, user_env) == 0)
+ break;
+ }
+
+! if (i == ga_users.ga_len)
+! {
+! struct passwd *pw = getpwnam((char *)user_env);
+!
+! if (pw != NULL)
+! add_user((char_u *)pw->pw_name, TRUE);
+! }
+ }
+ }
+ # endif
+*** ../vim-8.1.0360/src/version.c 2018-09-10 17:50:32.717306902 +0200
+--- src/version.c 2018-09-10 18:48:00.579950668 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 361,
+ /**/
+
+--
+"You know, it's at times like this when I'm trapped in a Vogon airlock with
+a man from Betelgeuse and about to die of asphyxiation in deep space that I
+really wish I'd listened to what my mother told me when I was young!"
+"Why, what did she tell you?"
+"I don't know, I didn't listen!"
+ -- Arthur Dent and Ford Prefect in Douglas Adams'
+ "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0362 b/data/vim/patches/8.1.0362
new file mode 100644
index 000000000..a662ea322
--- /dev/null
+++ b/data/vim/patches/8.1.0362
@@ -0,0 +1,6943 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0362
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0362
+Problem: Cannot get the script line number when executing a function.
+Solution: Store the line number besides the script ID. (Ozaki Kiichi,
+ closes #3362) Also display the line number with ":verbose set".
+Files: runtime/doc/cmdline.txt, runtime/doc/eval.txt, src/Make_all.mak,
+ src/buffer.c, src/eval.c, src/evalfunc.c, src/ex_cmds2.c,
+ src/ex_docmd.c, src/ex_getln.c, src/fileio.c, src/getchar.c,
+ src/globals.h, src/main.c, src/menu.c, src/option.c,
+ src/proto/eval.pro, src/structs.h, src/syntax.c,
+ src/testdir/test_alot.vim, src/testdir/test_expand_func.vim,
+ src/testdir/test_maparg.vim, src/term.c src/userfunc.c
+
+
+*** ../vim-8.1.0361/runtime/doc/cmdline.txt 2018-05-17 13:40:51.000000000 +0200
+--- runtime/doc/cmdline.txt 2018-09-10 19:56:54.871550345 +0200
+***************
+*** 832,842 ****
+ \\# \#
+ Also see |`=|.
+
+! *:<cword>* *:<cWORD>* *:<cfile>* *<cfile>*
+! *:<sfile>* *<sfile>* *:<afile>* *<afile>*
+! *:<abuf>* *<abuf>* *:<amatch>* *<amatch>*
+! *:<cexpr>* *<cexpr>*
+! *<slnum>* *E495* *E496* *E497* *E499* *E500*
+ Note: these are typed literally, they are not special keys!
+ <cword> is replaced with the word under the cursor (like |star|)
+ <cWORD> is replaced with the WORD under the cursor (see |WORD|)
+--- 832,843 ----
+ \\# \#
+ Also see |`=|.
+
+! *:<cword>* *<cword>* *:<cWORD>* *<cWORD>*
+! *:<cexpr>* *<cexpr>* *:<cfile>* *<cfile>*
+! *:<afile>* *<afile>* *:<abuf>* *<abuf>*
+! *:<amatch>* *<amatch>*
+! *:<sfile>* *<sfile>* *:<slnum>* *<slnum>*
+! *:<sflnum>* *<sflnum>* *E499* *E500*
+ Note: these are typed literally, they are not special keys!
+ <cword> is replaced with the word under the cursor (like |star|)
+ <cWORD> is replaced with the WORD under the cursor (see |WORD|)
+***************
+*** 849,863 ****
+ |gf| uses)
+ <afile> When executing autocommands, is replaced with the file name
+ of the buffer being manipulated, or the file for a read or
+! write.
+ <abuf> When executing autocommands, is replaced with the currently
+ effective buffer number (for ":r file" and ":so file" it is
+ the current buffer, the file being read/sourced is not in a
+! buffer).
+ <amatch> When executing autocommands, is replaced with the match for
+! which this autocommand was executed. It differs from
+! <afile> only when the file name isn't used to match with
+! (for FileType, Syntax and SpellFileMissing events).
+ <sfile> When executing a ":source" command, is replaced with the
+ file name of the sourced file. *E498*
+ When executing a function, is replaced with:
+--- 850,865 ----
+ |gf| uses)
+ <afile> When executing autocommands, is replaced with the file name
+ of the buffer being manipulated, or the file for a read or
+! write. *E495*
+ <abuf> When executing autocommands, is replaced with the currently
+ effective buffer number (for ":r file" and ":so file" it is
+ the current buffer, the file being read/sourced is not in a
+! buffer). *E496*
+ <amatch> When executing autocommands, is replaced with the match for
+! which this autocommand was executed. *E497*
+! It differs from <afile> only when the file name isn't used
+! to match with (for FileType, Syntax and SpellFileMissing
+! events).
+ <sfile> When executing a ":source" command, is replaced with the
+ file name of the sourced file. *E498*
+ When executing a function, is replaced with:
+***************
+*** 867,875 ****
+ Note that filename-modifiers are useless when <sfile> is
+ used inside a function.
+ <slnum> When executing a ":source" command, is replaced with the
+! line number. *E842*
+ When executing a function it's the line number relative to
+ the start of the function.
+
+ *filename-modifiers*
+ *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs* *::S*
+--- 869,880 ----
+ Note that filename-modifiers are useless when <sfile> is
+ used inside a function.
+ <slnum> When executing a ":source" command, is replaced with the
+! line number. *E842*
+ When executing a function it's the line number relative to
+ the start of the function.
++ <sflnum> When executing a script, is replaced with the line number.
++ It differs from <slnum> in that <sflnum> is replaced with
++ the script line number in any situation. *E961*
+
+ *filename-modifiers*
+ *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs* *::S*
+*** ../vim-8.1.0361/runtime/doc/eval.txt 2018-09-06 13:14:39.148722497 +0200
+--- runtime/doc/eval.txt 2018-09-10 20:28:19.359384588 +0200
+***************
+*** 3790,3796 ****
+ <abuf> autocmd buffer number (as a String!)
+ <amatch> autocmd matched name
+ <sfile> sourced script file or function name
+! <slnum> sourced script file line number
+ <cword> word under the cursor
+ <cWORD> WORD under the cursor
+ <client> the {clientid} of the last received
+--- 3798,3807 ----
+ <abuf> autocmd buffer number (as a String!)
+ <amatch> autocmd matched name
+ <sfile> sourced script file or function name
+! <slnum> sourced script line number or function
+! line number
+! <sflnum> script file line number, also when in
+! a function
+ <cword> word under the cursor
+ <cWORD> WORD under the cursor
+ <client> the {clientid} of the last received
+***************
+*** 5923,5928 ****
+--- 5934,5940 ----
+ (|mapmode-ic|)
+ "sid" The script local ID, used for <sid> mappings
+ (|<SID>|).
++ "lnum" The line number in "sid", zero if unknown.
+ "nowait" Do not wait for other, longer mappings.
+ (|:map-<nowait>|).
+
+*** ../vim-8.1.0361/src/Make_all.mak 2018-08-07 21:39:09.251060096 +0200
+--- src/Make_all.mak 2018-09-10 19:45:33.372367473 +0200
+***************
+*** 2,8 ****
+ # Common Makefile, defines the list of tests to run.
+ #
+
+! # Individual tests, including the ones part of test_alot
+ NEW_TESTS = \
+ test_arglist \
+ test_arabic \
+--- 2,9 ----
+ # Common Makefile, defines the list of tests to run.
+ #
+
+! # Individual tests, including the ones part of test_alot.
+! # Please keep sorted up to test_alot.
+ NEW_TESTS = \
+ test_arglist \
+ test_arabic \
+***************
+*** 52,57 ****
+--- 53,59 ----
+ test_exists_autocmd \
+ test_expand \
+ test_expand_dllpath \
++ test_expand_func \
+ test_expr \
+ test_expr_utf8 \
+ test_farsi \
+*** ../vim-8.1.0361/src/buffer.c 2018-09-01 15:29:58.754429402 +0200
+--- src/buffer.c 2018-09-10 20:10:25.338295605 +0200
+***************
+*** 5412,5418 ****
+ char_u *save_sourcing_name;
+ linenr_T save_sourcing_lnum;
+ #ifdef FEAT_EVAL
+! scid_T save_SID;
+ #endif
+
+ prev = -1;
+--- 5412,5418 ----
+ char_u *save_sourcing_name;
+ linenr_T save_sourcing_lnum;
+ #ifdef FEAT_EVAL
+! sctx_T save_current_sctx;
+ #endif
+
+ prev = -1;
+***************
+*** 5497,5508 ****
+ if (*s != NUL) /* skip over an empty "::" */
+ {
+ #ifdef FEAT_EVAL
+! save_SID = current_SID;
+! current_SID = SID_MODELINE;
+ #endif
+ retval = do_set(s, OPT_MODELINE | OPT_LOCAL | flags);
+ #ifdef FEAT_EVAL
+! current_SID = save_SID;
+ #endif
+ if (retval == FAIL) /* stop if error found */
+ break;
+--- 5497,5509 ----
+ if (*s != NUL) /* skip over an empty "::" */
+ {
+ #ifdef FEAT_EVAL
+! save_current_sctx = current_sctx;
+! current_sctx.sc_sid = SID_MODELINE;
+! current_sctx.sc_lnum = 0;
+ #endif
+ retval = do_set(s, OPT_MODELINE | OPT_LOCAL | flags);
+ #ifdef FEAT_EVAL
+! current_sctx = save_current_sctx;
+ #endif
+ if (retval == FAIL) /* stop if error found */
+ break;
+*** ../vim-8.1.0361/src/eval.c 2018-08-01 19:05:59.278223228 +0200
+--- src/eval.c 2018-09-10 20:26:11.396692124 +0200
+***************
+*** 1495,1502 ****
+ static void
+ list_script_vars(int *first)
+ {
+! if (current_SID > 0 && current_SID <= ga_scripts.ga_len)
+! list_hashtable_vars(&SCRIPT_VARS(current_SID),
+ (char_u *)"s:", FALSE, first);
+ }
+
+--- 1495,1502 ----
+ static void
+ list_script_vars(int *first)
+ {
+! if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= ga_scripts.ga_len)
+! list_hashtable_vars(&SCRIPT_VARS(current_sctx.sc_sid),
+ (char_u *)"s:", FALSE, first);
+ }
+
+***************
+*** 7202,7208 ****
+ /* Must be something like "s:", otherwise "ht" would be NULL. */
+ switch (htname)
+ {
+! case 's': return &SCRIPT_SV(current_SID)->sv_var;
+ case 'g': return &globvars_var;
+ case 'v': return &vimvars_var;
+ case 'b': return &curbuf->b_bufvar;
+--- 7202,7208 ----
+ /* Must be something like "s:", otherwise "ht" would be NULL. */
+ switch (htname)
+ {
+! case 's': return &SCRIPT_SV(current_sctx.sc_sid)->sv_var;
+ case 'g': return &globvars_var;
+ case 'v': return &vimvars_var;
+ case 'b': return &curbuf->b_bufvar;
+***************
+*** 7286,7293 ****
+ if (*name == 'l') /* l: local function variable */
+ return get_funccal_local_ht();
+ if (*name == 's' /* script variable */
+! && current_SID > 0 && current_SID <= ga_scripts.ga_len)
+! return &SCRIPT_VARS(current_SID);
+ return NULL;
+ }
+
+--- 7286,7293 ----
+ if (*name == 'l') /* l: local function variable */
+ return get_funccal_local_ht();
+ if (*name == 's' /* script variable */
+! && current_sctx.sc_sid > 0 && current_sctx.sc_sid <= ga_scripts.ga_len)
+! return &SCRIPT_VARS(current_sctx.sc_sid);
+ return NULL;
+ }
+
+***************
+*** 8729,8748 ****
+ * Should only be invoked when 'verbose' is non-zero.
+ */
+ void
+! last_set_msg(scid_T scriptID)
+ {
+ char_u *p;
+
+! if (scriptID != 0)
+ {
+! p = home_replace_save(NULL, get_scriptname(scriptID));
+ if (p != NULL)
+ {
+ verbose_enter();
+ MSG_PUTS(_("\n\tLast set from "));
+ MSG_PUTS(p);
+! vim_free(p);
+ verbose_leave();
+ }
+ }
+ }
+--- 8729,8753 ----
+ * Should only be invoked when 'verbose' is non-zero.
+ */
+ void
+! last_set_msg(sctx_T script_ctx)
+ {
+ char_u *p;
+
+! if (script_ctx.sc_sid != 0)
+ {
+! p = home_replace_save(NULL, get_scriptname(script_ctx.sc_sid));
+ if (p != NULL)
+ {
+ verbose_enter();
+ MSG_PUTS(_("\n\tLast set from "));
+ MSG_PUTS(p);
+! if (script_ctx.sc_lnum > 0)
+! {
+! MSG_PUTS(_(" line "));
+! msg_outnum((long)script_ctx.sc_lnum);
+! }
+ verbose_leave();
++ vim_free(p);
+ }
+ }
+ }
+*** ../vim-8.1.0361/src/evalfunc.c 2018-09-06 13:14:39.144722527 +0200
+--- src/evalfunc.c 2018-09-10 20:28:30.243272684 +0200
+***************
+*** 4061,4067 ****
+ * also be called from another script. Using trans_function_name()
+ * would also work, but some plugins depend on the name being
+ * printable text. */
+! sprintf(sid_buf, "<SNR>%ld_", (long)current_SID);
+ name = alloc((int)(STRLEN(sid_buf) + STRLEN(s + off) + 1));
+ if (name != NULL)
+ {
+--- 4061,4067 ----
+ * also be called from another script. Using trans_function_name()
+ * would also work, but some plugins depend on the name being
+ * printable text. */
+! sprintf(sid_buf, "<SNR>%ld_", (long)current_sctx.sc_sid);
+ name = alloc((int)(STRLEN(sid_buf) + STRLEN(s + off) + 1));
+ if (name != NULL)
+ {
+***************
+*** 7618,7624 ****
+ dict_add_number(dict, "noremap", mp->m_noremap ? 1L : 0L);
+ dict_add_number(dict, "expr", mp->m_expr ? 1L : 0L);
+ dict_add_number(dict, "silent", mp->m_silent ? 1L : 0L);
+! dict_add_number(dict, "sid", (long)mp->m_script_ID);
+ dict_add_number(dict, "buffer", (long)buffer_local);
+ dict_add_number(dict, "nowait", mp->m_nowait ? 1L : 0L);
+ dict_add_string(dict, "mode", mapmode);
+--- 7618,7625 ----
+ dict_add_number(dict, "noremap", mp->m_noremap ? 1L : 0L);
+ dict_add_number(dict, "expr", mp->m_expr ? 1L : 0L);
+ dict_add_number(dict, "silent", mp->m_silent ? 1L : 0L);
+! dict_add_number(dict, "sid", (long)mp->m_script_ctx.sc_sid);
+! dict_add_number(dict, "lnum", (long)mp->m_script_ctx.sc_lnum);
+ dict_add_number(dict, "buffer", (long)buffer_local);
+ dict_add_number(dict, "nowait", mp->m_nowait ? 1L : 0L);
+ dict_add_string(dict, "mode", mapmode);
+*** ../vim-8.1.0361/src/ex_cmds2.c 2018-09-08 18:21:10.438503190 +0200
+--- src/ex_cmds2.c 2018-09-10 20:30:57.913745458 +0200
+***************
+*** 1866,1874 ****
+ {
+ scriptitem_T *si;
+
+! if (current_SID > 0 && current_SID <= script_items.ga_len)
+ {
+! si = &SCRIPT_ITEM(current_SID);
+ if (si->sn_prof_on && si->sn_pr_nest++ == 0)
+ profile_start(&si->sn_pr_child);
+ }
+--- 1866,1874 ----
+ {
+ scriptitem_T *si;
+
+! if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= script_items.ga_len)
+ {
+! si = &SCRIPT_ITEM(current_sctx.sc_sid);
+ if (si->sn_prof_on && si->sn_pr_nest++ == 0)
+ profile_start(&si->sn_pr_child);
+ }
+***************
+*** 1883,1891 ****
+ {
+ scriptitem_T *si;
+
+! if (current_SID > 0 && current_SID <= script_items.ga_len)
+ {
+! si = &SCRIPT_ITEM(current_SID);
+ if (si->sn_prof_on && --si->sn_pr_nest == 0)
+ {
+ profile_end(&si->sn_pr_child);
+--- 1883,1891 ----
+ {
+ scriptitem_T *si;
+
+! if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= script_items.ga_len)
+ {
+! si = &SCRIPT_ITEM(current_sctx.sc_sid);
+ if (si->sn_prof_on && --si->sn_pr_nest == 0)
+ {
+ profile_end(&si->sn_pr_child);
+***************
+*** 2003,2010 ****
+ int
+ prof_def_func(void)
+ {
+! if (current_SID > 0)
+! return SCRIPT_ITEM(current_SID).sn_pr_force;
+ return FALSE;
+ }
+
+--- 2003,2010 ----
+ int
+ prof_def_func(void)
+ {
+! if (current_sctx.sc_sid > 0)
+! return SCRIPT_ITEM(current_sctx.sc_sid).sn_pr_force;
+ return FALSE;
+ }
+
+***************
+*** 4351,4357 ****
+ char_u *firstline = NULL;
+ int retval = FAIL;
+ #ifdef FEAT_EVAL
+! scid_T save_current_SID;
+ static scid_T last_current_SID = 0;
+ void *save_funccalp;
+ int save_debug_break_level = debug_break_level;
+--- 4351,4357 ----
+ char_u *firstline = NULL;
+ int retval = FAIL;
+ #ifdef FEAT_EVAL
+! sctx_T save_current_sctx;
+ static scid_T last_current_SID = 0;
+ void *save_funccalp;
+ int save_debug_break_level = debug_break_level;
+***************
+*** 4521,4533 ****
+ * Check if this script was sourced before to finds its SID.
+ * If it's new, generate a new SID.
+ */
+! save_current_SID = current_SID;
+ # ifdef UNIX
+ stat_ok = (mch_stat((char *)fname_exp, &st) >= 0);
+ # endif
+! for (current_SID = script_items.ga_len; current_SID > 0; --current_SID)
+ {
+! si = &SCRIPT_ITEM(current_SID);
+ if (si->sn_name != NULL
+ && (
+ # ifdef UNIX
+--- 4521,4535 ----
+ * Check if this script was sourced before to finds its SID.
+ * If it's new, generate a new SID.
+ */
+! save_current_sctx = current_sctx;
+! current_sctx.sc_lnum = 0;
+ # ifdef UNIX
+ stat_ok = (mch_stat((char *)fname_exp, &st) >= 0);
+ # endif
+! for (current_sctx.sc_sid = script_items.ga_len; current_sctx.sc_sid > 0;
+! --current_sctx.sc_sid)
+ {
+! si = &SCRIPT_ITEM(current_sctx.sc_sid);
+ if (si->sn_name != NULL
+ && (
+ # ifdef UNIX
+***************
+*** 4541,4553 ****
+ fnamecmp(si->sn_name, fname_exp) == 0))
+ break;
+ }
+! if (current_SID == 0)
+ {
+! current_SID = ++last_current_SID;
+! if (ga_grow(&script_items, (int)(current_SID - script_items.ga_len))
+! == FAIL)
+ goto almosttheend;
+! while (script_items.ga_len < current_SID)
+ {
+ ++script_items.ga_len;
+ SCRIPT_ITEM(script_items.ga_len).sn_name = NULL;
+--- 4543,4555 ----
+ fnamecmp(si->sn_name, fname_exp) == 0))
+ break;
+ }
+! if (current_sctx.sc_sid == 0)
+ {
+! current_sctx.sc_sid = ++last_current_SID;
+! if (ga_grow(&script_items,
+! (int)(current_sctx.sc_sid - script_items.ga_len)) == FAIL)
+ goto almosttheend;
+! while (script_items.ga_len < current_sctx.sc_sid)
+ {
+ ++script_items.ga_len;
+ SCRIPT_ITEM(script_items.ga_len).sn_name = NULL;
+***************
+*** 4555,4561 ****
+ SCRIPT_ITEM(script_items.ga_len).sn_prof_on = FALSE;
+ # endif
+ }
+! si = &SCRIPT_ITEM(current_SID);
+ si->sn_name = fname_exp;
+ fname_exp = NULL;
+ # ifdef UNIX
+--- 4557,4563 ----
+ SCRIPT_ITEM(script_items.ga_len).sn_prof_on = FALSE;
+ # endif
+ }
+! si = &SCRIPT_ITEM(current_sctx.sc_sid);
+ si->sn_name = fname_exp;
+ fname_exp = NULL;
+ # ifdef UNIX
+***************
+*** 4570,4576 ****
+ # endif
+
+ /* Allocate the local script variables to use for this script. */
+! new_script_vars(current_SID);
+ }
+
+ # ifdef FEAT_PROFILE
+--- 4572,4578 ----
+ # endif
+
+ /* Allocate the local script variables to use for this script. */
+! new_script_vars(current_sctx.sc_sid);
+ }
+
+ # ifdef FEAT_PROFILE
+***************
+*** 4626,4632 ****
+ if (do_profiling == PROF_YES)
+ {
+ /* Get "si" again, "script_items" may have been reallocated. */
+! si = &SCRIPT_ITEM(current_SID);
+ if (si->sn_prof_on)
+ {
+ profile_end(&si->sn_pr_start);
+--- 4628,4634 ----
+ if (do_profiling == PROF_YES)
+ {
+ /* Get "si" again, "script_items" may have been reallocated. */
+! si = &SCRIPT_ITEM(current_sctx.sc_sid);
+ if (si->sn_prof_on)
+ {
+ profile_end(&si->sn_pr_start);
+***************
+*** 4671,4677 ****
+
+ #ifdef FEAT_EVAL
+ almosttheend:
+! current_SID = save_current_SID;
+ restore_funccal(save_funccalp);
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+--- 4673,4679 ----
+
+ #ifdef FEAT_EVAL
+ almosttheend:
+! current_sctx = save_current_sctx;
+ restore_funccal(save_funccalp);
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+***************
+*** 5090,5098 ****
+ scriptitem_T *si;
+ sn_prl_T *pp;
+
+! if (current_SID <= 0 || current_SID > script_items.ga_len)
+ return;
+! si = &SCRIPT_ITEM(current_SID);
+ if (si->sn_prof_on && sourcing_lnum >= 1)
+ {
+ /* Grow the array before starting the timer, so that the time spent
+--- 5092,5100 ----
+ scriptitem_T *si;
+ sn_prl_T *pp;
+
+! if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len)
+ return;
+! si = &SCRIPT_ITEM(current_sctx.sc_sid);
+ if (si->sn_prof_on && sourcing_lnum >= 1)
+ {
+ /* Grow the array before starting the timer, so that the time spent
+***************
+*** 5125,5133 ****
+ {
+ scriptitem_T *si;
+
+! if (current_SID <= 0 || current_SID > script_items.ga_len)
+ return;
+! si = &SCRIPT_ITEM(current_SID);
+ if (si->sn_prof_on && si->sn_prl_idx >= 0)
+ si->sn_prl_execed = TRUE;
+ }
+--- 5127,5135 ----
+ {
+ scriptitem_T *si;
+
+! if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len)
+ return;
+! si = &SCRIPT_ITEM(current_sctx.sc_sid);
+ if (si->sn_prof_on && si->sn_prl_idx >= 0)
+ si->sn_prl_execed = TRUE;
+ }
+***************
+*** 5141,5149 ****
+ scriptitem_T *si;
+ sn_prl_T *pp;
+
+! if (current_SID <= 0 || current_SID > script_items.ga_len)
+ return;
+! si = &SCRIPT_ITEM(current_SID);
+ if (si->sn_prof_on && si->sn_prl_idx >= 0
+ && si->sn_prl_idx < si->sn_prl_ga.ga_len)
+ {
+--- 5143,5151 ----
+ scriptitem_T *si;
+ sn_prl_T *pp;
+
+! if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len)
+ return;
+! si = &SCRIPT_ITEM(current_sctx.sc_sid);
+ if (si->sn_prof_on && si->sn_prl_idx >= 0
+ && si->sn_prl_idx < si->sn_prl_ga.ga_len)
+ {
+*** ../vim-8.1.0361/src/ex_docmd.c 2018-09-06 21:44:13.660006996 +0200
+--- src/ex_docmd.c 2018-09-10 20:10:41.366117167 +0200
+***************
+*** 29,35 ****
+ int uc_compl; /* completion type */
+ int uc_addr_type; /* The command's address type */
+ # ifdef FEAT_EVAL
+! scid_T uc_scriptID; /* SID where the command was defined */
+ # ifdef FEAT_CMDL_COMPL
+ char_u *uc_compl_arg; /* completion argument if any */
+ # endif
+--- 29,35 ----
+ int uc_compl; /* completion type */
+ int uc_addr_type; /* The command's address type */
+ # ifdef FEAT_EVAL
+! sctx_T uc_script_ctx; /* SCTX where the command was defined */
+ # ifdef FEAT_CMDL_COMPL
+ char_u *uc_compl_arg; /* completion argument if any */
+ # endif
+***************
+*** 3340,3346 ****
+ if (xp != NULL)
+ {
+ xp->xp_arg = uc->uc_compl_arg;
+! xp->xp_scriptID = uc->uc_scriptID;
+ }
+ # endif
+ # endif
+--- 3340,3347 ----
+ if (xp != NULL)
+ {
+ xp->xp_arg = uc->uc_compl_arg;
+! xp->xp_script_ctx = uc->uc_script_ctx;
+! xp->xp_script_ctx.sc_lnum += sourcing_lnum;
+ }
+ # endif
+ # endif
+***************
+*** 5920,5926 ****
+ cmd->uc_def = def;
+ cmd->uc_compl = compl;
+ #ifdef FEAT_EVAL
+! cmd->uc_scriptID = current_SID;
+ # ifdef FEAT_CMDL_COMPL
+ cmd->uc_compl_arg = compl_arg;
+ # endif
+--- 5921,5928 ----
+ cmd->uc_def = def;
+ cmd->uc_compl = compl;
+ #ifdef FEAT_EVAL
+! cmd->uc_script_ctx = current_sctx;
+! cmd->uc_script_ctx.sc_lnum += sourcing_lnum;
+ # ifdef FEAT_CMDL_COMPL
+ cmd->uc_compl_arg = compl_arg;
+ # endif
+***************
+*** 6141,6147 ****
+ msg_outtrans_special(cmd->uc_rep, FALSE);
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+! last_set_msg(cmd->uc_scriptID);
+ #endif
+ out_flush();
+ ui_breakcheck();
+--- 6143,6149 ----
+ msg_outtrans_special(cmd->uc_rep, FALSE);
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+! last_set_msg(cmd->uc_script_ctx);
+ #endif
+ out_flush();
+ ui_breakcheck();
+***************
+*** 6906,6912 ****
+ char_u *split_buf = NULL;
+ ucmd_T *cmd;
+ #ifdef FEAT_EVAL
+! scid_T save_current_SID = current_SID;
+ #endif
+
+ if (eap->cmdidx == CMD_USER)
+--- 6908,6914 ----
+ char_u *split_buf = NULL;
+ ucmd_T *cmd;
+ #ifdef FEAT_EVAL
+! sctx_T save_current_sctx = current_sctx;
+ #endif
+
+ if (eap->cmdidx == CMD_USER)
+***************
+*** 7007,7018 ****
+ }
+
+ #ifdef FEAT_EVAL
+! current_SID = cmd->uc_scriptID;
+ #endif
+ (void)do_cmdline(buf, eap->getline, eap->cookie,
+ DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED);
+ #ifdef FEAT_EVAL
+! current_SID = save_current_SID;
+ #endif
+ vim_free(buf);
+ vim_free(split_buf);
+--- 7009,7020 ----
+ }
+
+ #ifdef FEAT_EVAL
+! current_sctx.sc_sid = cmd->uc_script_ctx.sc_sid;
+ #endif
+ (void)do_cmdline(buf, eap->getline, eap->cookie,
+ DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED);
+ #ifdef FEAT_EVAL
+! current_sctx = save_current_sctx;
+ #endif
+ vim_free(buf);
+ vim_free(split_buf);
+***************
+*** 10736,10749 ****
+ "<slnum>", /* ":so" file line number */
+ #define SPEC_SLNUM (SPEC_SFILE + 1)
+ "<afile>", /* autocommand file name */
+! #define SPEC_AFILE (SPEC_SLNUM + 1)
+ "<abuf>", /* autocommand buffer number */
+! #define SPEC_ABUF (SPEC_AFILE + 1)
+ "<amatch>", /* autocommand match name */
+ #define SPEC_AMATCH (SPEC_ABUF + 1)
+ #ifdef FEAT_CLIENTSERVER
+ "<client>"
+! # define SPEC_CLIENT (SPEC_AMATCH + 1)
+ #endif
+ };
+
+--- 10738,10753 ----
+ "<slnum>", /* ":so" file line number */
+ #define SPEC_SLNUM (SPEC_SFILE + 1)
+ "<afile>", /* autocommand file name */
+! #define SPEC_AFILE (SPEC_SLNUM + 1)
+ "<abuf>", /* autocommand buffer number */
+! #define SPEC_ABUF (SPEC_AFILE + 1)
+ "<amatch>", /* autocommand match name */
+ #define SPEC_AMATCH (SPEC_ABUF + 1)
++ "<sflnum>", /* script file line number */
++ #define SPEC_SFLNUM (SPEC_AMATCH + 1)
+ #ifdef FEAT_CLIENTSERVER
+ "<client>"
+! # define SPEC_CLIENT (SPEC_SFLNUM + 1)
+ #endif
+ };
+
+***************
+*** 10999,11004 ****
+--- 11003,11009 ----
+ return NULL;
+ }
+ break;
++
+ case SPEC_SLNUM: /* line in file for ":so" command */
+ if (sourcing_name == NULL || sourcing_lnum == 0)
+ {
+***************
+*** 11008,11020 ****
+ sprintf((char *)strbuf, "%ld", (long)sourcing_lnum);
+ result = strbuf;
+ break;
+! #if defined(FEAT_CLIENTSERVER)
+ case SPEC_CLIENT: /* Source of last submitted input */
+ sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
+ (long_u)clientWindow);
+ result = strbuf;
+ break;
+ #endif
+ default:
+ result = (char_u *)""; /* avoid gcc warning */
+ break;
+--- 11013,11040 ----
+ sprintf((char *)strbuf, "%ld", (long)sourcing_lnum);
+ result = strbuf;
+ break;
+!
+! #ifdef FEAT_EVAL
+! case SPEC_SFLNUM: /* line in script file */
+! if (current_sctx.sc_lnum + sourcing_lnum == 0)
+! {
+! *errormsg = (char_u *)_("E961: no line number to use for \"<sflnum>\"");
+! return NULL;
+! }
+! sprintf((char *)strbuf, "%ld",
+! (long)(current_sctx.sc_lnum + sourcing_lnum));
+! result = strbuf;
+! break;
+! #endif
+!
+! #ifdef FEAT_CLIENTSERVER
+ case SPEC_CLIENT: /* Source of last submitted input */
+ sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
+ (long_u)clientWindow);
+ result = strbuf;
+ break;
+ #endif
++
+ default:
+ result = (char_u *)""; /* avoid gcc warning */
+ break;
+*** ../vim-8.1.0361/src/ex_getln.c 2018-09-09 15:54:11.232857907 +0200
+--- src/ex_getln.c 2018-09-10 19:45:33.376367415 +0200
+***************
+*** 5591,5597 ****
+ {
+ int keep = 0;
+ typval_T args[4];
+! int save_current_SID = current_SID;
+ char_u *pat = NULL;
+ void *ret;
+ struct cmdline_info save_ccline;
+--- 5591,5597 ----
+ {
+ int keep = 0;
+ typval_T args[4];
+! sctx_T save_current_sctx = current_sctx;
+ char_u *pat = NULL;
+ void *ret;
+ struct cmdline_info save_ccline;
+***************
+*** 5621,5632 ****
+ save_ccline = ccline;
+ ccline.cmdbuff = NULL;
+ ccline.cmdprompt = NULL;
+! current_SID = xp->xp_scriptID;
+
+ ret = user_expand_func(xp->xp_arg, 3, args);
+
+ ccline = save_ccline;
+! current_SID = save_current_SID;
+ if (ccline.cmdbuff != NULL)
+ ccline.cmdbuff[ccline.cmdlen] = keep;
+
+--- 5621,5632 ----
+ save_ccline = ccline;
+ ccline.cmdbuff = NULL;
+ ccline.cmdprompt = NULL;
+! current_sctx = xp->xp_script_ctx;
+
+ ret = user_expand_func(xp->xp_arg, 3, args);
+
+ ccline = save_ccline;
+! current_sctx = save_current_sctx;
+ if (ccline.cmdbuff != NULL)
+ ccline.cmdbuff[ccline.cmdlen] = keep;
+
+*** ../vim-8.1.0361/src/fileio.c 2018-08-21 15:12:10.839801647 +0200
+--- src/fileio.c 2018-09-10 19:45:33.376367415 +0200
+***************
+*** 7700,7706 ****
+ char nested; /* If autocommands nest here */
+ char last; /* last command in list */
+ #ifdef FEAT_EVAL
+! scid_T scriptID; /* script ID where defined */
+ #endif
+ struct AutoCmd *next; /* Next AutoCmd in list */
+ } AutoCmd;
+--- 7700,7706 ----
+ char nested; /* If autocommands nest here */
+ char last; /* last command in list */
+ #ifdef FEAT_EVAL
+! sctx_T script_ctx; /* script context where defined */
+ #endif
+ struct AutoCmd *next; /* Next AutoCmd in list */
+ } AutoCmd;
+***************
+*** 7962,7968 ****
+ msg_outtrans(ac->cmd);
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+! last_set_msg(ac->scriptID);
+ #endif
+ if (got_int)
+ return;
+--- 7962,7968 ----
+ msg_outtrans(ac->cmd);
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+! last_set_msg(ac->script_ctx);
+ #endif
+ if (got_int)
+ return;
+***************
+*** 8845,8851 ****
+ return FAIL;
+ ac->cmd = vim_strsave(cmd);
+ #ifdef FEAT_EVAL
+! ac->scriptID = current_SID;
+ #endif
+ if (ac->cmd == NULL)
+ {
+--- 8845,8852 ----
+ return FAIL;
+ ac->cmd = vim_strsave(cmd);
+ #ifdef FEAT_EVAL
+! ac->script_ctx = current_sctx;
+! ac->script_ctx.sc_lnum += sourcing_lnum;
+ #endif
+ if (ac->cmd == NULL)
+ {
+***************
+*** 9412,9418 ****
+ AutoPatCmd patcmd;
+ AutoPat *ap;
+ #ifdef FEAT_EVAL
+! scid_T save_current_SID;
+ void *save_funccalp;
+ char_u *save_cmdarg;
+ long save_cmdbang;
+--- 9413,9419 ----
+ AutoPatCmd patcmd;
+ AutoPat *ap;
+ #ifdef FEAT_EVAL
+! sctx_T save_current_sctx;
+ void *save_funccalp;
+ char_u *save_cmdarg;
+ long save_cmdbang;
+***************
+*** 9621,9627 ****
+ sourcing_lnum = 0; /* no line number here */
+
+ #ifdef FEAT_EVAL
+! save_current_SID = current_SID;
+
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+--- 9622,9628 ----
+ sourcing_lnum = 0; /* no line number here */
+
+ #ifdef FEAT_EVAL
+! save_current_sctx = current_sctx;
+
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+***************
+*** 9725,9731 ****
+ autocmd_bufnr = save_autocmd_bufnr;
+ autocmd_match = save_autocmd_match;
+ #ifdef FEAT_EVAL
+! current_SID = save_current_SID;
+ restore_funccal(save_funccalp);
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+--- 9726,9732 ----
+ autocmd_bufnr = save_autocmd_bufnr;
+ autocmd_match = save_autocmd_match;
+ #ifdef FEAT_EVAL
+! current_sctx = save_current_sctx;
+ restore_funccal(save_funccalp);
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+***************
+*** 9949,9955 ****
+ retval = vim_strsave(ac->cmd);
+ autocmd_nested = ac->nested;
+ #ifdef FEAT_EVAL
+! current_SID = ac->scriptID;
+ #endif
+ if (ac->last)
+ acp->nextcmd = NULL;
+--- 9950,9956 ----
+ retval = vim_strsave(ac->cmd);
+ autocmd_nested = ac->nested;
+ #ifdef FEAT_EVAL
+! current_sctx = ac->script_ctx;
+ #endif
+ if (ac->last)
+ acp->nextcmd = NULL;
+*** ../vim-8.1.0361/src/getchar.c 2018-07-27 23:16:40.922781670 +0200
+--- src/getchar.c 2018-09-10 19:45:33.376367415 +0200
+***************
+*** 3677,3683 ****
+ mp->m_mode = mode;
+ #ifdef FEAT_EVAL
+ mp->m_expr = expr;
+! mp->m_script_ID = current_SID;
+ #endif
+ did_it = TRUE;
+ }
+--- 3677,3684 ----
+ mp->m_mode = mode;
+ #ifdef FEAT_EVAL
+ mp->m_expr = expr;
+! mp->m_script_ctx = current_sctx;
+! mp->m_script_ctx.sc_lnum += sourcing_lnum;
+ #endif
+ did_it = TRUE;
+ }
+***************
+*** 3783,3789 ****
+ mp->m_mode = mode;
+ #ifdef FEAT_EVAL
+ mp->m_expr = expr;
+! mp->m_script_ID = current_SID;
+ #endif
+
+ /* add the new entry in front of the abbrlist or maphash[] list */
+--- 3784,3791 ----
+ mp->m_mode = mode;
+ #ifdef FEAT_EVAL
+ mp->m_expr = expr;
+! mp->m_script_ctx = current_sctx;
+! mp->m_script_ctx.sc_lnum += sourcing_lnum;
+ #endif
+
+ /* add the new entry in front of the abbrlist or maphash[] list */
+***************
+*** 4097,4103 ****
+ }
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+! last_set_msg(mp->m_script_ID);
+ #endif
+ out_flush(); /* show one line at a time */
+ }
+--- 4099,4105 ----
+ }
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+! last_set_msg(mp->m_script_ctx);
+ #endif
+ out_flush(); /* show one line at a time */
+ }
+*** ../vim-8.1.0361/src/globals.h 2018-09-06 13:14:39.144722527 +0200
+--- src/globals.h 2018-09-10 20:12:24.344972850 +0200
+***************
+*** 325,332 ****
+ EXTERN int want_garbage_collect INIT(= FALSE);
+ EXTERN int garbage_collect_at_exit INIT(= FALSE);
+
+! /* ID of script being sourced or was sourced to define the current function. */
+! EXTERN scid_T current_SID INIT(= 0);
+ #endif
+
+ EXTERN int did_source_packages INIT(= FALSE);
+--- 325,332 ----
+ EXTERN int want_garbage_collect INIT(= FALSE);
+ EXTERN int garbage_collect_at_exit INIT(= FALSE);
+
+! // Script CTX being sourced or was sourced to define the current function.
+! EXTERN sctx_T current_sctx INIT(= {0 COMMA 0});
+ #endif
+
+ EXTERN int did_source_packages INIT(= FALSE);
+*** ../vim-8.1.0361/src/main.c 2018-08-07 22:42:48.965416564 +0200
+--- src/main.c 2018-09-10 20:10:46.434060766 +0200
+***************
+*** 2912,2924 ****
+ curwin->w_cursor.lnum = 0; /* just in case.. */
+ sourcing_name = (char_u *)_("pre-vimrc command line");
+ # ifdef FEAT_EVAL
+! current_SID = SID_CMDARG;
+ # endif
+ for (i = 0; i < cnt; ++i)
+ do_cmdline_cmd(cmds[i]);
+ sourcing_name = NULL;
+ # ifdef FEAT_EVAL
+! current_SID = 0;
+ # endif
+ TIME_MSG("--cmd commands");
+ }
+--- 2912,2924 ----
+ curwin->w_cursor.lnum = 0; /* just in case.. */
+ sourcing_name = (char_u *)_("pre-vimrc command line");
+ # ifdef FEAT_EVAL
+! current_sctx.sc_sid = SID_CMDARG;
+ # endif
+ for (i = 0; i < cnt; ++i)
+ do_cmdline_cmd(cmds[i]);
+ sourcing_name = NULL;
+ # ifdef FEAT_EVAL
+! current_sctx.sc_sid = 0;
+ # endif
+ TIME_MSG("--cmd commands");
+ }
+***************
+*** 2942,2948 ****
+ curwin->w_cursor.lnum = 0;
+ sourcing_name = (char_u *)"command line";
+ #ifdef FEAT_EVAL
+! current_SID = SID_CARG;
+ #endif
+ for (i = 0; i < parmp->n_commands; ++i)
+ {
+--- 2942,2948 ----
+ curwin->w_cursor.lnum = 0;
+ sourcing_name = (char_u *)"command line";
+ #ifdef FEAT_EVAL
+! current_sctx.sc_sid = SID_CARG;
+ #endif
+ for (i = 0; i < parmp->n_commands; ++i)
+ {
+***************
+*** 2952,2958 ****
+ }
+ sourcing_name = NULL;
+ #ifdef FEAT_EVAL
+! current_SID = 0;
+ #endif
+ if (curwin->w_cursor.lnum == 0)
+ curwin->w_cursor.lnum = 1;
+--- 2952,2958 ----
+ }
+ sourcing_name = NULL;
+ #ifdef FEAT_EVAL
+! current_sctx.sc_sid = 0;
+ #endif
+ if (curwin->w_cursor.lnum == 0)
+ curwin->w_cursor.lnum = 1;
+***************
+*** 3159,3165 ****
+ char_u *save_sourcing_name;
+ linenr_T save_sourcing_lnum;
+ #ifdef FEAT_EVAL
+! scid_T save_sid;
+ #endif
+
+ if ((initstr = mch_getenv(env)) != NULL && *initstr != NUL)
+--- 3159,3165 ----
+ char_u *save_sourcing_name;
+ linenr_T save_sourcing_lnum;
+ #ifdef FEAT_EVAL
+! sctx_T save_current_sctx;
+ #endif
+
+ if ((initstr = mch_getenv(env)) != NULL && *initstr != NUL)
+***************
+*** 3171,3184 ****
+ sourcing_name = env;
+ sourcing_lnum = 0;
+ #ifdef FEAT_EVAL
+! save_sid = current_SID;
+! current_SID = SID_ENV;
+ #endif
+ do_cmdline_cmd(initstr);
+ sourcing_name = save_sourcing_name;
+ sourcing_lnum = save_sourcing_lnum;
+ #ifdef FEAT_EVAL
+! current_SID = save_sid;
+ #endif
+ return OK;
+ }
+--- 3171,3185 ----
+ sourcing_name = env;
+ sourcing_lnum = 0;
+ #ifdef FEAT_EVAL
+! save_current_sctx = current_sctx;
+! current_sctx.sc_sid = SID_ENV;
+! current_sctx.sc_lnum = 0;
+ #endif
+ do_cmdline_cmd(initstr);
+ sourcing_name = save_sourcing_name;
+ sourcing_lnum = save_sourcing_lnum;
+ #ifdef FEAT_EVAL
+! current_sctx = save_current_sctx;
+ #endif
+ return OK;
+ }
+*** ../vim-8.1.0361/src/menu.c 2018-03-05 21:31:09.000000000 +0100
+--- src/menu.c 2018-09-10 20:07:50.024030312 +0200
+***************
+*** 2259,2265 ****
+ /* Use the Insert mode entry when returning to Insert mode. */
+ if (restart_edit
+ #ifdef FEAT_EVAL
+! && !current_SID
+ #endif
+ )
+ {
+--- 2259,2265 ----
+ /* Use the Insert mode entry when returning to Insert mode. */
+ if (restart_edit
+ #ifdef FEAT_EVAL
+! && !current_sctx.sc_sid
+ #endif
+ )
+ {
+***************
+*** 2333,2339 ****
+ * Otherwise put them in the typeahead buffer. */
+ if (eap == NULL
+ #ifdef FEAT_EVAL
+! || current_SID != 0
+ #endif
+ )
+ {
+--- 2333,2339 ----
+ * Otherwise put them in the typeahead buffer. */
+ if (eap == NULL
+ #ifdef FEAT_EVAL
+! || current_sctx.sc_sid != 0
+ #endif
+ )
+ {
+*** ../vim-8.1.0361/src/option.c 2018-08-07 22:30:26.662240885 +0200
+--- src/option.c 2018-09-10 20:43:49.293609932 +0200
+***************
+*** 404,423 ****
+
+ struct vimoption
+ {
+! char *fullname; /* full option name */
+! char *shortname; /* permissible abbreviation */
+! long_u flags; /* see below */
+! char_u *var; /* global option: pointer to variable;
+! * window-local option: VAR_WIN;
+! * buffer-local option: global value */
+! idopt_T indir; /* global option: PV_NONE;
+! * local option: indirect option index */
+! char_u *def_val[2]; /* default values for variable (vi and vim) */
+ #ifdef FEAT_EVAL
+! scid_T scriptID; /* script in which the option was last set */
+! # define SCRIPTID_INIT , 0
+ #else
+! # define SCRIPTID_INIT
+ #endif
+ };
+
+--- 404,423 ----
+
+ struct vimoption
+ {
+! char *fullname; // full option name
+! char *shortname; // permissible abbreviation
+! long_u flags; // see below
+! char_u *var; // global option: pointer to variable;
+! // window-local option: VAR_WIN;
+! // buffer-local option: global value
+! idopt_T indir; // global option: PV_NONE;
+! // local option: indirect option index
+! char_u *def_val[2]; // default values for variable (vi and vim)
+ #ifdef FEAT_EVAL
+! sctx_T script_ctx; // script context where the option was last set
+! # define SCTX_INIT , {0, 0}
+ #else
+! # define SCTX_INIT
+ #endif
+ };
+
+***************
+*** 515,521 ****
+ #else
+ (char_u *)224L,
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"antialias", "anti", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
+ #if defined(FEAT_GUI_MAC)
+ (char_u *)&p_antialias, PV_NONE,
+--- 515,521 ----
+ #else
+ (char_u *)224L,
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"antialias", "anti", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
+ #if defined(FEAT_GUI_MAC)
+ (char_u *)&p_antialias, PV_NONE,
+***************
+*** 524,558 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+! SCRIPTID_INIT},
+ {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
+ #ifdef FEAT_ARABIC
+ (char_u *)VAR_WIN, PV_ARAB,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"arabicshape", "arshape", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
+ #ifdef FEAT_ARABIC
+ (char_u *)&p_arshape, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"allowrevins", "ari", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_ari, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"altkeymap", "akm", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_FKMAP
+ (char_u *)&p_altkeymap, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"ambiwidth", "ambw", P_STRING|P_VI_DEF|P_RCLR,
+ #if defined(FEAT_MBYTE)
+ (char_u *)&p_ambw, PV_NONE,
+--- 524,558 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+! SCTX_INIT},
+ {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
+ #ifdef FEAT_ARABIC
+ (char_u *)VAR_WIN, PV_ARAB,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"arabicshape", "arshape", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
+ #ifdef FEAT_ARABIC
+ (char_u *)&p_arshape, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"allowrevins", "ari", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_ari, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"altkeymap", "akm", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_FKMAP
+ (char_u *)&p_altkeymap, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"ambiwidth", "ambw", P_STRING|P_VI_DEF|P_RCLR,
+ #if defined(FEAT_MBYTE)
+ (char_u *)&p_ambw, PV_NONE,
+***************
+*** 561,567 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"autochdir", "acd", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_AUTOCHDIR
+ (char_u *)&p_acd, PV_NONE,
+--- 561,567 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"autochdir", "acd", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_AUTOCHDIR
+ (char_u *)&p_acd, PV_NONE,
+***************
+*** 570,591 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"autoindent", "ai", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ai, PV_AI,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"autoprint", "ap", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"autoread", "ar", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ar, PV_AR,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"autowrite", "aw", P_BOOL|P_VI_DEF,
+ (char_u *)&p_aw, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"autowriteall","awa", P_BOOL|P_VI_DEF,
+ (char_u *)&p_awa, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"background", "bg", P_STRING|P_VI_DEF|P_RCLR,
+ (char_u *)&p_bg, PV_NONE,
+ {
+--- 570,591 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"autoindent", "ai", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ai, PV_AI,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"autoprint", "ap", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"autoread", "ar", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ar, PV_AR,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"autowrite", "aw", P_BOOL|P_VI_DEF,
+ (char_u *)&p_aw, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"autowriteall","awa", P_BOOL|P_VI_DEF,
+ (char_u *)&p_awa, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"background", "bg", P_STRING|P_VI_DEF|P_RCLR,
+ (char_u *)&p_bg, PV_NONE,
+ {
+***************
+*** 594,606 ****
+ #else
+ (char_u *)"light",
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"backspace", "bs", P_STRING|P_VI_DEF|P_VIM|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_bs, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"backup", "bk", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_bk, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"backupcopy", "bkc", P_STRING|P_VIM|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_bkc, PV_BKC,
+ #ifdef UNIX
+--- 594,606 ----
+ #else
+ (char_u *)"light",
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"backspace", "bs", P_STRING|P_VI_DEF|P_VIM|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_bs, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"backup", "bk", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_bk, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"backupcopy", "bkc", P_STRING|P_VIM|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_bkc, PV_BKC,
+ #ifdef UNIX
+***************
+*** 608,618 ****
+ #else
+ {(char_u *)"auto", (char_u *)"auto"}
+ #endif
+! SCRIPTID_INIT},
+ {"backupdir", "bdir", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA
+ |P_NODUP|P_SECURE,
+ (char_u *)&p_bdir, PV_NONE,
+! {(char_u *)DFLT_BDIR, (char_u *)0L} SCRIPTID_INIT},
+ {"backupext", "bex", P_STRING|P_VI_DEF|P_NFNAME,
+ (char_u *)&p_bex, PV_NONE,
+ {
+--- 608,618 ----
+ #else
+ {(char_u *)"auto", (char_u *)"auto"}
+ #endif
+! SCTX_INIT},
+ {"backupdir", "bdir", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA
+ |P_NODUP|P_SECURE,
+ (char_u *)&p_bdir, PV_NONE,
+! {(char_u *)DFLT_BDIR, (char_u *)0L} SCTX_INIT},
+ {"backupext", "bex", P_STRING|P_VI_DEF|P_NFNAME,
+ (char_u *)&p_bex, PV_NONE,
+ {
+***************
+*** 621,627 ****
+ #else
+ (char_u *)"~",
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"backupskip", "bsk", P_STRING|P_VI_DEF|P_ONECOMMA,
+ #ifdef FEAT_WILDIGN
+ (char_u *)&p_bsk, PV_NONE,
+--- 621,627 ----
+ #else
+ (char_u *)"~",
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"backupskip", "bsk", P_STRING|P_VI_DEF|P_ONECOMMA,
+ #ifdef FEAT_WILDIGN
+ (char_u *)&p_bsk, PV_NONE,
+***************
+*** 630,636 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"balloondelay","bdlay",P_NUM|P_VI_DEF,
+ #ifdef FEAT_BEVAL
+ (char_u *)&p_bdlay, PV_NONE,
+--- 630,636 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"balloondelay","bdlay",P_NUM|P_VI_DEF,
+ #ifdef FEAT_BEVAL
+ (char_u *)&p_bdlay, PV_NONE,
+***************
+*** 639,645 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"ballooneval", "beval",P_BOOL|P_VI_DEF|P_NO_MKRC,
+ #ifdef FEAT_BEVAL_GUI
+ (char_u *)&p_beval, PV_NONE,
+--- 639,645 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"ballooneval", "beval",P_BOOL|P_VI_DEF|P_NO_MKRC,
+ #ifdef FEAT_BEVAL_GUI
+ (char_u *)&p_beval, PV_NONE,
+***************
+*** 648,654 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"balloonevalterm", "bevalterm",P_BOOL|P_VI_DEF|P_NO_MKRC,
+ #ifdef FEAT_BEVAL_TERM
+ (char_u *)&p_bevalterm, PV_NONE,
+--- 648,654 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"balloonevalterm", "bevalterm",P_BOOL|P_VI_DEF|P_NO_MKRC,
+ #ifdef FEAT_BEVAL_TERM
+ (char_u *)&p_bevalterm, PV_NONE,
+***************
+*** 657,663 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"balloonexpr", "bexpr", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
+ #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+ (char_u *)&p_bexpr, PV_BEXPR,
+--- 657,663 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"balloonexpr", "bexpr", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
+ #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+ (char_u *)&p_bexpr, PV_BEXPR,
+***************
+*** 666,691 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"beautify", "bf", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"belloff", "bo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_bo, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"binary", "bin", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_bin, PV_BIN,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"bioskey", "biosk",P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"bomb", NULL, P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_bomb, PV_BOMB,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"breakat", "brk", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)&p_breakat, PV_NONE,
+--- 666,691 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"beautify", "bf", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"belloff", "bo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_bo, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"binary", "bin", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_bin, PV_BIN,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"bioskey", "biosk",P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"bomb", NULL, P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_bomb, PV_BOMB,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"breakat", "brk", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)&p_breakat, PV_NONE,
+***************
+*** 694,700 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"breakindent", "bri", P_BOOL|P_VI_DEF|P_VIM|P_RWIN,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)VAR_WIN, PV_BRI,
+--- 694,700 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"breakindent", "bri", P_BOOL|P_VI_DEF|P_VIM|P_RWIN,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)VAR_WIN, PV_BRI,
+***************
+*** 703,709 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"breakindentopt", "briopt", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF
+ |P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_LINEBREAK
+--- 703,709 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"breakindentopt", "briopt", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF
+ |P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_LINEBREAK
+***************
+*** 713,719 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #endif
+! SCRIPTID_INIT},
+ {"browsedir", "bsdir",P_STRING|P_VI_DEF,
+ #ifdef FEAT_BROWSE
+ (char_u *)&p_bsdir, PV_NONE,
+--- 713,719 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #endif
+! SCTX_INIT},
+ {"browsedir", "bsdir",P_STRING|P_VI_DEF,
+ #ifdef FEAT_BROWSE
+ (char_u *)&p_bsdir, PV_NONE,
+***************
+*** 722,740 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"bufhidden", "bh", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB,
+ (char_u *)&p_bh, PV_BH,
+ {(char_u *)"", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"buflisted", "bl", P_BOOL|P_VI_DEF|P_NOGLOB,
+ (char_u *)&p_bl, PV_BL,
+ {(char_u *)1L, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"buftype", "bt", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB,
+ (char_u *)&p_bt, PV_BT,
+ {(char_u *)"", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"casemap", "cmp", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_cmp, PV_NONE,
+--- 722,740 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"bufhidden", "bh", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB,
+ (char_u *)&p_bh, PV_BH,
+ {(char_u *)"", (char_u *)0L}
+! SCTX_INIT},
+ {"buflisted", "bl", P_BOOL|P_VI_DEF|P_NOGLOB,
+ (char_u *)&p_bl, PV_BL,
+ {(char_u *)1L, (char_u *)0L}
+! SCTX_INIT},
+ {"buftype", "bt", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB,
+ (char_u *)&p_bt, PV_BT,
+ {(char_u *)"", (char_u *)0L}
+! SCTX_INIT},
+ {"casemap", "cmp", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_cmp, PV_NONE,
+***************
+*** 743,749 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"cdpath", "cd", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
+ #ifdef FEAT_SEARCHPATH
+ (char_u *)&p_cdpath, PV_NONE,
+--- 743,749 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"cdpath", "cd", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
+ #ifdef FEAT_SEARCHPATH
+ (char_u *)&p_cdpath, PV_NONE,
+***************
+*** 752,758 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"cedit", NULL, P_STRING,
+ #ifdef FEAT_CMDWIN
+ (char_u *)&p_cedit, PV_NONE,
+--- 752,758 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"cedit", NULL, P_STRING,
+ #ifdef FEAT_CMDWIN
+ (char_u *)&p_cedit, PV_NONE,
+***************
+*** 761,767 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"charconvert", "ccv", P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
+ (char_u *)&p_ccv, PV_NONE,
+--- 761,767 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"charconvert", "ccv", P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
+ (char_u *)&p_ccv, PV_NONE,
+***************
+*** 770,783 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"cindent", "cin", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CINDENT
+ (char_u *)&p_cin, PV_CIN,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"cinkeys", "cink", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_CINDENT
+ (char_u *)&p_cink, PV_CINK,
+--- 770,783 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"cindent", "cin", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CINDENT
+ (char_u *)&p_cin, PV_CIN,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"cinkeys", "cink", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_CINDENT
+ (char_u *)&p_cink, PV_CINK,
+***************
+*** 786,799 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"cinoptions", "cino", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_CINDENT
+ (char_u *)&p_cino, PV_CINO,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"cinwords", "cinw", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
+ (char_u *)&p_cinw, PV_CINW,
+--- 786,799 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"cinoptions", "cino", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_CINDENT
+ (char_u *)&p_cino, PV_CINO,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"cinwords", "cinw", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
+ (char_u *)&p_cinw, PV_CINW,
+***************
+*** 803,809 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"clipboard", "cb", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_CLIPBOARD
+ (char_u *)&p_cb, PV_NONE,
+--- 803,809 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"clipboard", "cb", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_CLIPBOARD
+ (char_u *)&p_cb, PV_NONE,
+***************
+*** 817,843 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"cmdheight", "ch", P_NUM|P_VI_DEF|P_RALL,
+ (char_u *)&p_ch, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
+ {"cmdwinheight", "cwh", P_NUM|P_VI_DEF,
+ #ifdef FEAT_CMDWIN
+ (char_u *)&p_cwh, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)7L, (char_u *)0L} SCRIPTID_INIT},
+ {"colorcolumn", "cc", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_RWIN,
+ #ifdef FEAT_SYN_HL
+ (char_u *)VAR_WIN, PV_CC,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ (char_u *)&Columns, PV_NONE,
+! {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
+ {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA
+ |P_NODUP|P_CURSWANT,
+ #ifdef FEAT_COMMENTS
+--- 817,843 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"cmdheight", "ch", P_NUM|P_VI_DEF|P_RALL,
+ (char_u *)&p_ch, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCTX_INIT},
+ {"cmdwinheight", "cwh", P_NUM|P_VI_DEF,
+ #ifdef FEAT_CMDWIN
+ (char_u *)&p_cwh, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)7L, (char_u *)0L} SCTX_INIT},
+ {"colorcolumn", "cc", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_RWIN,
+ #ifdef FEAT_SYN_HL
+ (char_u *)VAR_WIN, PV_CC,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ (char_u *)&Columns, PV_NONE,
+! {(char_u *)80L, (char_u *)0L} SCTX_INIT},
+ {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA
+ |P_NODUP|P_CURSWANT,
+ #ifdef FEAT_COMMENTS
+***************
+*** 848,854 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_cms, PV_CMS,
+--- 848,854 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_cms, PV_CMS,
+***************
+*** 857,868 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ /* P_PRI_MKRC isn't needed here, optval_default()
+ * always returns TRUE for 'compatible' */
+ {"compatible", "cp", P_BOOL|P_RALL,
+ (char_u *)&p_cp, PV_NONE,
+! {(char_u *)TRUE, (char_u *)FALSE} SCRIPTID_INIT},
+ {"complete", "cpt", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_cpt, PV_CPT,
+--- 857,868 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ /* P_PRI_MKRC isn't needed here, optval_default()
+ * always returns TRUE for 'compatible' */
+ {"compatible", "cp", P_BOOL|P_RALL,
+ (char_u *)&p_cp, PV_NONE,
+! {(char_u *)TRUE, (char_u *)FALSE} SCTX_INIT},
+ {"complete", "cpt", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_cpt, PV_CPT,
+***************
+*** 871,877 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"concealcursor","cocu", P_STRING|P_ALLOCED|P_RWIN|P_VI_DEF,
+ #ifdef FEAT_CONCEAL
+ (char_u *)VAR_WIN, PV_COCU,
+--- 871,877 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"concealcursor","cocu", P_STRING|P_ALLOCED|P_RWIN|P_VI_DEF,
+ #ifdef FEAT_CONCEAL
+ (char_u *)VAR_WIN, PV_COCU,
+***************
+*** 880,886 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"conceallevel","cole", P_NUM|P_RWIN|P_VI_DEF,
+ #ifdef FEAT_CONCEAL
+ (char_u *)VAR_WIN, PV_COLE,
+--- 880,886 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"conceallevel","cole", P_NUM|P_RWIN|P_VI_DEF,
+ #ifdef FEAT_CONCEAL
+ (char_u *)VAR_WIN, PV_COLE,
+***************
+*** 888,894 ****
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)0L, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"completefunc", "cfu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_COMPL_FUNC
+ (char_u *)&p_cfu, PV_CFU,
+--- 888,894 ----
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)0L, (char_u *)0L}
+! SCTX_INIT},
+ {"completefunc", "cfu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_COMPL_FUNC
+ (char_u *)&p_cfu, PV_CFU,
+***************
+*** 897,903 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"completeopt", "cot", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_cot, PV_NONE,
+--- 897,903 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"completeopt", "cot", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_cot, PV_NONE,
+***************
+*** 906,929 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"confirm", "cf", P_BOOL|P_VI_DEF,
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ (char_u *)&p_confirm, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"conskey", "consk",P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"copyindent", "ci", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_ci, PV_CI,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"cpoptions", "cpo", P_STRING|P_VIM|P_RALL|P_FLAGLIST,
+ (char_u *)&p_cpo, PV_NONE,
+ {(char_u *)CPO_VI, (char_u *)CPO_VIM}
+! SCRIPTID_INIT},
+ {"cryptmethod", "cm", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_CRYPT
+ (char_u *)&p_cm, PV_CM,
+--- 906,929 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"confirm", "cf", P_BOOL|P_VI_DEF,
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ (char_u *)&p_confirm, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"conskey", "consk",P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"copyindent", "ci", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_ci, PV_CI,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"cpoptions", "cpo", P_STRING|P_VIM|P_RALL|P_FLAGLIST,
+ (char_u *)&p_cpo, PV_NONE,
+ {(char_u *)CPO_VI, (char_u *)CPO_VIM}
+! SCTX_INIT},
+ {"cryptmethod", "cm", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_CRYPT
+ (char_u *)&p_cm, PV_CM,
+***************
+*** 932,945 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"cscopepathcomp", "cspc", P_NUM|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_cspc, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"cscopeprg", "csprg", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_csprg, PV_NONE,
+--- 932,945 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"cscopepathcomp", "cspc", P_NUM|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_cspc, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"cscopeprg", "csprg", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_csprg, PV_NONE,
+***************
+*** 948,954 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"cscopequickfix", "csqf", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #if defined(FEAT_CSCOPE) && defined(FEAT_QUICKFIX)
+ (char_u *)&p_csqf, PV_NONE,
+--- 948,954 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"cscopequickfix", "csqf", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #if defined(FEAT_CSCOPE) && defined(FEAT_QUICKFIX)
+ (char_u *)&p_csqf, PV_NONE,
+***************
+*** 957,1011 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"cscoperelative", "csre", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_csre, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"cscopetag", "cst", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_cst, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"cscopetagorder", "csto", P_NUM|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_csto, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"cscopeverbose", "csverb", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_csverbose, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"cursorbind", "crb", P_BOOL|P_VI_DEF,
+ (char_u *)VAR_WIN, PV_CRBIND,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"cursorcolumn", "cuc", P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SYN_HL
+ (char_u *)VAR_WIN, PV_CUC,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"cursorline", "cul", P_BOOL|P_VI_DEF|P_RWINONLY,
+ #ifdef FEAT_SYN_HL
+ (char_u *)VAR_WIN, PV_CUL,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"debug", NULL, P_STRING|P_VI_DEF,
+ (char_u *)&p_debug, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FIND_ID
+ (char_u *)&p_def, PV_DEF,
+--- 957,1011 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"cscoperelative", "csre", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_csre, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"cscopetag", "cst", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_cst, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"cscopetagorder", "csto", P_NUM|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_csto, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"cscopeverbose", "csverb", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ (char_u *)&p_csverbose, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"cursorbind", "crb", P_BOOL|P_VI_DEF,
+ (char_u *)VAR_WIN, PV_CRBIND,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"cursorcolumn", "cuc", P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SYN_HL
+ (char_u *)VAR_WIN, PV_CUC,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"cursorline", "cul", P_BOOL|P_VI_DEF|P_RWINONLY,
+ #ifdef FEAT_SYN_HL
+ (char_u *)VAR_WIN, PV_CUL,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"debug", NULL, P_STRING|P_VI_DEF,
+ (char_u *)&p_debug, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FIND_ID
+ (char_u *)&p_def, PV_DEF,
+***************
+*** 1014,1041 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"delcombine", "deco", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_deco, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP|P_NDNAME,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_dict, PV_DICT,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"diff", NULL, P_BOOL|P_VI_DEF|P_RWIN|P_NOGLOB,
+ #ifdef FEAT_DIFF
+ (char_u *)VAR_WIN, PV_DIFF,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ (char_u *)&p_dex, PV_NONE,
+--- 1014,1041 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"delcombine", "deco", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_deco, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP|P_NDNAME,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_dict, PV_DICT,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"diff", NULL, P_BOOL|P_VI_DEF|P_RWIN|P_NOGLOB,
+ #ifdef FEAT_DIFF
+ (char_u *)VAR_WIN, PV_DIFF,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ (char_u *)&p_dex, PV_NONE,
+***************
+*** 1044,1050 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"diffopt", "dip", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN|P_ONECOMMA
+ |P_NODUP,
+ #ifdef FEAT_DIFF
+--- 1044,1050 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"diffopt", "dip", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN|P_ONECOMMA
+ |P_NODUP,
+ #ifdef FEAT_DIFF
+***************
+*** 1054,1081 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #endif
+! SCRIPTID_INIT},
+ {"digraph", "dg", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_DIGRAPHS
+ (char_u *)&p_dg, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"directory", "dir", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA
+ |P_NODUP|P_SECURE,
+ (char_u *)&p_dir, PV_NONE,
+! {(char_u *)DFLT_DIR, (char_u *)0L} SCRIPTID_INIT},
+ {"display", "dy", P_STRING|P_VI_DEF|P_ONECOMMA|P_RALL|P_NODUP,
+ (char_u *)&p_dy, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"eadirection", "ead", P_STRING|P_VI_DEF,
+ (char_u *)&p_ead, PV_NONE,
+ {(char_u *)"both", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"edcompatible","ed", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ed, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"emoji", "emo", P_BOOL|P_VI_DEF|P_RCLR,
+ #if defined(FEAT_MBYTE)
+ (char_u *)&p_emoji, PV_NONE,
+--- 1054,1081 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #endif
+! SCTX_INIT},
+ {"digraph", "dg", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_DIGRAPHS
+ (char_u *)&p_dg, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"directory", "dir", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA
+ |P_NODUP|P_SECURE,
+ (char_u *)&p_dir, PV_NONE,
+! {(char_u *)DFLT_DIR, (char_u *)0L} SCTX_INIT},
+ {"display", "dy", P_STRING|P_VI_DEF|P_ONECOMMA|P_RALL|P_NODUP,
+ (char_u *)&p_dy, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"eadirection", "ead", P_STRING|P_VI_DEF,
+ (char_u *)&p_ead, PV_NONE,
+ {(char_u *)"both", (char_u *)0L}
+! SCTX_INIT},
+ {"edcompatible","ed", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ed, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"emoji", "emo", P_BOOL|P_VI_DEF|P_RCLR,
+ #if defined(FEAT_MBYTE)
+ (char_u *)&p_emoji, PV_NONE,
+***************
+*** 1084,1090 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"encoding", "enc", P_STRING|P_VI_DEF|P_RCLR|P_NO_ML,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_enc, PV_NONE,
+--- 1084,1090 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"encoding", "enc", P_STRING|P_VI_DEF|P_RCLR|P_NO_ML,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_enc, PV_NONE,
+***************
+*** 1093,1111 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"endofline", "eol", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_eol, PV_EOL,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"equalalways", "ea", P_BOOL|P_VI_DEF|P_RALL,
+ (char_u *)&p_ea, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"equalprg", "ep", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_ep, PV_EP,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"errorbells", "eb", P_BOOL|P_VI_DEF,
+ (char_u *)&p_eb, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"errorfile", "ef", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_ef, PV_NONE,
+--- 1093,1111 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"endofline", "eol", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_eol, PV_EOL,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"equalalways", "ea", P_BOOL|P_VI_DEF|P_RALL,
+ (char_u *)&p_ea, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"equalprg", "ep", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_ep, PV_EP,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"errorbells", "eb", P_BOOL|P_VI_DEF,
+ (char_u *)&p_eb, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"errorfile", "ef", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_ef, PV_NONE,
+***************
+*** 1114,1120 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"errorformat", "efm", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_efm, PV_EFM,
+--- 1114,1120 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"errorformat", "efm", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_efm, PV_EFM,
+***************
+*** 1123,1141 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"esckeys", "ek", P_BOOL|P_VIM,
+ (char_u *)&p_ek, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
+ {"eventignore", "ei", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_ei, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"expandtab", "et", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_et, PV_ET,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"exrc", "ex", P_BOOL|P_VI_DEF|P_SECURE,
+ (char_u *)&p_exrc, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"fileencoding","fenc", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_RBUF
+ |P_NO_MKRC,
+ #ifdef FEAT_MBYTE
+--- 1123,1141 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"esckeys", "ek", P_BOOL|P_VIM,
+ (char_u *)&p_ek, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCTX_INIT},
+ {"eventignore", "ei", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_ei, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"expandtab", "et", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_et, PV_ET,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"exrc", "ex", P_BOOL|P_VI_DEF|P_SECURE,
+ (char_u *)&p_exrc, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"fileencoding","fenc", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_RBUF
+ |P_NO_MKRC,
+ #ifdef FEAT_MBYTE
+***************
+*** 1145,1151 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"fileencodings","fencs", P_STRING|P_VI_DEF|P_ONECOMMA,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_fencs, PV_NONE,
+--- 1145,1151 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"fileencodings","fencs", P_STRING|P_VI_DEF|P_ONECOMMA,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_fencs, PV_NONE,
+***************
+*** 1154,1168 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC
+ |P_CURSWANT,
+ (char_u *)&p_ff, PV_FF,
+! {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
+ {"fileformats", "ffs", P_STRING|P_VIM|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_ffs, PV_NONE,
+ {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}
+! SCRIPTID_INIT},
+ {"fileignorecase", "fic", P_BOOL|P_VI_DEF,
+ (char_u *)&p_fic, PV_NONE,
+ {
+--- 1154,1168 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC
+ |P_CURSWANT,
+ (char_u *)&p_ff, PV_FF,
+! {(char_u *)DFLT_FF, (char_u *)0L} SCTX_INIT},
+ {"fileformats", "ffs", P_STRING|P_VIM|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_ffs, PV_NONE,
+ {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}
+! SCTX_INIT},
+ {"fileignorecase", "fic", P_BOOL|P_VI_DEF,
+ (char_u *)&p_fic, PV_NONE,
+ {
+***************
+*** 1171,1198 ****
+ #else
+ (char_u *)FALSE,
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"filetype", "ft", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
+ (char_u *)&p_ft, PV_FT,
+ {(char_u *)"", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_fcs, PV_NONE,
+ {(char_u *)"vert:|,fold:-", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"fixendofline", "fixeol", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_fixeol, PV_FIXEOL,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"fkmap", "fk", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_FKMAP
+ (char_u *)&p_fkmap, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"flash", "fl", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"foldclose", "fcl", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_fcl, PV_NONE,
+--- 1171,1198 ----
+ #else
+ (char_u *)FALSE,
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"filetype", "ft", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
+ (char_u *)&p_ft, PV_FT,
+ {(char_u *)"", (char_u *)0L}
+! SCTX_INIT},
+ {"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_fcs, PV_NONE,
+ {(char_u *)"vert:|,fold:-", (char_u *)0L}
+! SCTX_INIT},
+ {"fixendofline", "fixeol", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_fixeol, PV_FIXEOL,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"fkmap", "fk", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_FKMAP
+ (char_u *)&p_fkmap, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"flash", "fl", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"foldclose", "fcl", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_fcl, PV_NONE,
+***************
+*** 1201,1207 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldcolumn", "fdc", P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDC,
+--- 1201,1207 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldcolumn", "fdc", P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDC,
+***************
+*** 1210,1216 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldenable", "fen", P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FEN,
+--- 1210,1216 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldenable", "fen", P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FEN,
+***************
+*** 1219,1225 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldexpr", "fde", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
+ #if defined(FEAT_FOLDING) && defined(FEAT_EVAL)
+ (char_u *)VAR_WIN, PV_FDE,
+--- 1219,1225 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldexpr", "fde", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
+ #if defined(FEAT_FOLDING) && defined(FEAT_EVAL)
+ (char_u *)VAR_WIN, PV_FDE,
+***************
+*** 1228,1234 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldignore", "fdi", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDI,
+--- 1228,1234 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldignore", "fdi", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDI,
+***************
+*** 1237,1243 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDL,
+--- 1237,1243 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDL,
+***************
+*** 1246,1252 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_fdls, PV_NONE,
+--- 1246,1252 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_fdls, PV_NONE,
+***************
+*** 1255,1261 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
+ P_RWIN|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_FOLDING
+--- 1255,1261 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
+ P_RWIN|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_FOLDING
+***************
+*** 1265,1271 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldmethod", "fdm", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDM,
+--- 1265,1271 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldmethod", "fdm", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDM,
+***************
+*** 1274,1280 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldminlines","fml", P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FML,
+--- 1274,1280 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldminlines","fml", P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FML,
+***************
+*** 1283,1289 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDN,
+--- 1283,1289 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_FOLDING
+ (char_u *)VAR_WIN, PV_FDN,
+***************
+*** 1292,1298 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldopen", "fdo", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_fdo, PV_NONE,
+--- 1292,1298 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldopen", "fdo", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ (char_u *)&p_fdo, PV_NONE,
+***************
+*** 1302,1308 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"foldtext", "fdt", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
+ #if defined(FEAT_FOLDING) && defined(FEAT_EVAL)
+ (char_u *)VAR_WIN, PV_FDT,
+--- 1302,1308 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"foldtext", "fdt", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN,
+ #if defined(FEAT_FOLDING) && defined(FEAT_EVAL)
+ (char_u *)VAR_WIN, PV_FDT,
+***************
+*** 1311,1317 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"formatexpr", "fex", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
+ #ifdef FEAT_EVAL
+ (char_u *)&p_fex, PV_FEX,
+--- 1311,1317 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"formatexpr", "fex", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
+ #ifdef FEAT_EVAL
+ (char_u *)&p_fex, PV_FEX,
+***************
+*** 1320,1337 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"formatoptions","fo", P_STRING|P_ALLOCED|P_VIM|P_FLAGLIST,
+ (char_u *)&p_fo, PV_FO,
+ {(char_u *)DFLT_FO_VI, (char_u *)DFLT_FO_VIM}
+! SCRIPTID_INIT},
+ {"formatlistpat","flp", P_STRING|P_ALLOCED|P_VI_DEF,
+ (char_u *)&p_flp, PV_FLP,
+ {(char_u *)"^\\s*\\d\\+[\\]:.)}\\t ]\\s*",
+! (char_u *)0L} SCRIPTID_INIT},
+ {"formatprg", "fp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_fp, PV_FP,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"fsync", "fs", P_BOOL|P_SECURE|P_VI_DEF,
+ #ifdef HAVE_FSYNC
+ (char_u *)&p_fs, PV_NONE,
+--- 1320,1337 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"formatoptions","fo", P_STRING|P_ALLOCED|P_VIM|P_FLAGLIST,
+ (char_u *)&p_fo, PV_FO,
+ {(char_u *)DFLT_FO_VI, (char_u *)DFLT_FO_VIM}
+! SCTX_INIT},
+ {"formatlistpat","flp", P_STRING|P_ALLOCED|P_VI_DEF,
+ (char_u *)&p_flp, PV_FLP,
+ {(char_u *)"^\\s*\\d\\+[\\]:.)}\\t ]\\s*",
+! (char_u *)0L} SCTX_INIT},
+ {"formatprg", "fp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_fp, PV_FP,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"fsync", "fs", P_BOOL|P_SECURE|P_VI_DEF,
+ #ifdef HAVE_FSYNC
+ (char_u *)&p_fs, PV_NONE,
+***************
+*** 1340,1352 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"gdefault", "gd", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_gd, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"graphic", "gr", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"grepformat", "gfm", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_gefm, PV_NONE,
+--- 1340,1352 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"gdefault", "gd", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_gd, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"graphic", "gr", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"grepformat", "gfm", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_gefm, PV_NONE,
+***************
+*** 1355,1361 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"grepprg", "gp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_gp, PV_GP,
+--- 1355,1361 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"grepprg", "gp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_gp, PV_GP,
+***************
+*** 1381,1387 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"guicursor", "gcr", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef CURSOR_SHAPE
+ (char_u *)&p_guicursor, PV_NONE,
+--- 1381,1387 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"guicursor", "gcr", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef CURSOR_SHAPE
+ (char_u *)&p_guicursor, PV_NONE,
+***************
+*** 1396,1402 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"guifont", "gfn", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_GUI
+ (char_u *)&p_guifont, PV_NONE,
+--- 1396,1402 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"guifont", "gfn", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_GUI
+ (char_u *)&p_guifont, PV_NONE,
+***************
+*** 1405,1411 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"guifontset", "gfs", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA,
+ #if defined(FEAT_GUI) && defined(FEAT_XFONTSET)
+ (char_u *)&p_guifontset, PV_NONE,
+--- 1405,1411 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"guifontset", "gfs", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA,
+ #if defined(FEAT_GUI) && defined(FEAT_XFONTSET)
+ (char_u *)&p_guifontset, PV_NONE,
+***************
+*** 1414,1420 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"guifontwide", "gfw", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA|P_NODUP,
+ #if defined(FEAT_GUI) && defined(FEAT_MBYTE)
+ (char_u *)&p_guifontwide, PV_NONE,
+--- 1414,1420 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"guifontwide", "gfw", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA|P_NODUP,
+ #if defined(FEAT_GUI) && defined(FEAT_MBYTE)
+ (char_u *)&p_guifontwide, PV_NONE,
+***************
+*** 1423,1436 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"guiheadroom", "ghr", P_NUM|P_VI_DEF,
+ #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
+ (char_u *)&p_ghr, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)50L, (char_u *)0L} SCRIPTID_INIT},
+ {"guioptions", "go", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST,
+ #if defined(FEAT_GUI)
+ (char_u *)&p_go, PV_NONE,
+--- 1423,1436 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"guiheadroom", "ghr", P_NUM|P_VI_DEF,
+ #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
+ (char_u *)&p_ghr, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)50L, (char_u *)0L} SCTX_INIT},
+ {"guioptions", "go", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST,
+ #if defined(FEAT_GUI)
+ (char_u *)&p_go, PV_NONE,
+***************
+*** 1443,1456 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"guipty", NULL, P_BOOL|P_VI_DEF,
+ #if defined(FEAT_GUI)
+ (char_u *)&p_guipty, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"guitablabel", "gtl", P_STRING|P_VI_DEF|P_RWIN,
+ #if defined(FEAT_GUI_TABLINE)
+ (char_u *)&p_gtl, PV_NONE,
+--- 1443,1456 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"guipty", NULL, P_BOOL|P_VI_DEF,
+ #if defined(FEAT_GUI)
+ (char_u *)&p_guipty, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"guitablabel", "gtl", P_STRING|P_VI_DEF|P_RWIN,
+ #if defined(FEAT_GUI_TABLINE)
+ (char_u *)&p_gtl, PV_NONE,
+***************
+*** 1459,1465 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"guitabtooltip", "gtt", P_STRING|P_VI_DEF|P_RWIN,
+ #if defined(FEAT_GUI_TABLINE)
+ (char_u *)&p_gtt, PV_NONE,
+--- 1459,1465 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"guitabtooltip", "gtt", P_STRING|P_VI_DEF|P_RWIN,
+ #if defined(FEAT_GUI_TABLINE)
+ (char_u *)&p_gtt, PV_NONE,
+***************
+*** 1468,1484 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"hardtabs", "ht", P_NUM|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"helpfile", "hf", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_hf, PV_NONE,
+ {(char_u *)DFLT_HELPFILE, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"helpheight", "hh", P_NUM|P_VI_DEF,
+ (char_u *)&p_hh, PV_NONE,
+! {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
+ {"helplang", "hlg", P_STRING|P_VI_DEF|P_ONECOMMA,
+ #ifdef FEAT_MULTI_LANG
+ (char_u *)&p_hlg, PV_NONE,
+--- 1468,1484 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"hardtabs", "ht", P_NUM|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"helpfile", "hf", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_hf, PV_NONE,
+ {(char_u *)DFLT_HELPFILE, (char_u *)0L}
+! SCTX_INIT},
+ {"helpheight", "hh", P_NUM|P_VI_DEF,
+ (char_u *)&p_hh, PV_NONE,
+! {(char_u *)20L, (char_u *)0L} SCTX_INIT},
+ {"helplang", "hlg", P_STRING|P_VI_DEF|P_ONECOMMA,
+ #ifdef FEAT_MULTI_LANG
+ (char_u *)&p_hlg, PV_NONE,
+***************
+*** 1487,1537 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"hidden", "hid", P_BOOL|P_VI_DEF,
+ (char_u *)&p_hid, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"highlight", "hl", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_hl, PV_NONE,
+ {(char_u *)HIGHLIGHT_INIT, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"history", "hi", P_NUM|P_VIM,
+ (char_u *)&p_hi, PV_NONE,
+! {(char_u *)0L, (char_u *)50L} SCRIPTID_INIT},
+ {"hkmap", "hk", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_hkmap, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"hkmapp", "hkp", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_hkmapp, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"hlsearch", "hls", P_BOOL|P_VI_DEF|P_VIM|P_RALL,
+ (char_u *)&p_hls, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"icon", NULL, P_BOOL|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_icon, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"iconstring", NULL, P_STRING|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_iconstring, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"ignorecase", "ic", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ic, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"imactivatefunc","imaf",P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_EVAL) && defined(FEAT_MBYTE)
+ (char_u *)&p_imaf, PV_NONE,
+--- 1487,1537 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"hidden", "hid", P_BOOL|P_VI_DEF,
+ (char_u *)&p_hid, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"highlight", "hl", P_STRING|P_VI_DEF|P_RCLR|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_hl, PV_NONE,
+ {(char_u *)HIGHLIGHT_INIT, (char_u *)0L}
+! SCTX_INIT},
+ {"history", "hi", P_NUM|P_VIM,
+ (char_u *)&p_hi, PV_NONE,
+! {(char_u *)0L, (char_u *)50L} SCTX_INIT},
+ {"hkmap", "hk", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_hkmap, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"hkmapp", "hkp", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_hkmapp, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"hlsearch", "hls", P_BOOL|P_VI_DEF|P_VIM|P_RALL,
+ (char_u *)&p_hls, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"icon", NULL, P_BOOL|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_icon, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"iconstring", NULL, P_STRING|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_iconstring, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"ignorecase", "ic", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ic, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"imactivatefunc","imaf",P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_EVAL) && defined(FEAT_MBYTE)
+ (char_u *)&p_imaf, PV_NONE,
+***************
+*** 1540,1560 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ # endif
+! SCRIPTID_INIT},
+ {"imactivatekey","imak",P_STRING|P_VI_DEF,
+ #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+ (char_u *)&p_imak, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"imcmdline", "imc", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_imcmdline, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"imdisable", "imd", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_imdisable, PV_NONE,
+--- 1540,1560 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ # endif
+! SCTX_INIT},
+ {"imactivatekey","imak",P_STRING|P_VI_DEF,
+ #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+ (char_u *)&p_imak, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"imcmdline", "imc", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_imcmdline, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"imdisable", "imd", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_imdisable, PV_NONE,
+***************
+*** 1566,1580 ****
+ #else
+ {(char_u *)FALSE, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"iminsert", "imi", P_NUM|P_VI_DEF,
+ (char_u *)&p_iminsert, PV_IMI,
+ {(char_u *)B_IMODE_NONE, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"imsearch", "ims", P_NUM|P_VI_DEF,
+ (char_u *)&p_imsearch, PV_IMS,
+ {(char_u *)B_IMODE_USE_INSERT, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"imstatusfunc","imsf",P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_EVAL) && defined(FEAT_MBYTE)
+ (char_u *)&p_imsf, PV_NONE,
+--- 1566,1580 ----
+ #else
+ {(char_u *)FALSE, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"iminsert", "imi", P_NUM|P_VI_DEF,
+ (char_u *)&p_iminsert, PV_IMI,
+ {(char_u *)B_IMODE_NONE, (char_u *)0L}
+! SCTX_INIT},
+ {"imsearch", "ims", P_NUM|P_VI_DEF,
+ (char_u *)&p_imsearch, PV_IMS,
+ {(char_u *)B_IMODE_USE_INSERT, (char_u *)0L}
+! SCTX_INIT},
+ {"imstatusfunc","imsf",P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_EVAL) && defined(FEAT_MBYTE)
+ (char_u *)&p_imsf, PV_NONE,
+***************
+*** 1583,1589 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"imstyle", "imst", P_NUM|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+ (char_u *)&p_imst, PV_NONE,
+--- 1583,1589 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"imstyle", "imst", P_NUM|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+ (char_u *)&p_imst, PV_NONE,
+***************
+*** 1592,1598 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"include", "inc", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_FIND_ID
+ (char_u *)&p_inc, PV_INC,
+--- 1592,1598 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"include", "inc", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_FIND_ID
+ (char_u *)&p_inc, PV_INC,
+***************
+*** 1601,1607 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"includeexpr", "inex", P_STRING|P_ALLOCED|P_VI_DEF,
+ #if defined(FEAT_FIND_ID) && defined(FEAT_EVAL)
+ (char_u *)&p_inex, PV_INEX,
+--- 1601,1607 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"includeexpr", "inex", P_STRING|P_ALLOCED|P_VI_DEF,
+ #if defined(FEAT_FIND_ID) && defined(FEAT_EVAL)
+ (char_u *)&p_inex, PV_INEX,
+***************
+*** 1610,1619 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"incsearch", "is", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_is, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"indentexpr", "inde", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
+ #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
+ (char_u *)&p_inde, PV_INDE,
+--- 1610,1619 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"incsearch", "is", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_is, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"indentexpr", "inde", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM,
+ #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
+ (char_u *)&p_inde, PV_INDE,
+***************
+*** 1622,1628 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"indentkeys", "indk", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
+ (char_u *)&p_indk, PV_INDK,
+--- 1622,1628 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"indentkeys", "indk", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
+ (char_u *)&p_indk, PV_INDK,
+***************
+*** 1631,1643 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"infercase", "inf", P_BOOL|P_VI_DEF,
+ (char_u *)&p_inf, PV_INF,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"insertmode", "im", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_im, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"isfname", "isf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_isf, PV_NONE,
+ {
+--- 1631,1643 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"infercase", "inf", P_BOOL|P_VI_DEF,
+ (char_u *)&p_inf, PV_INF,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"insertmode", "im", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_im, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"isfname", "isf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_isf, PV_NONE,
+ {
+***************
+*** 1660,1666 ****
+ # endif
+ # endif
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"isident", "isi", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_isi, PV_NONE,
+ {
+--- 1660,1666 ----
+ # endif
+ # endif
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"isident", "isi", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_isi, PV_NONE,
+ {
+***************
+*** 1677,1683 ****
+ (char_u *)"@,48-57,_,192-255",
+ # endif
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"iskeyword", "isk", P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP,
+ (char_u *)&p_isk, PV_ISK,
+ {
+--- 1677,1683 ----
+ (char_u *)"@,48-57,_,192-255",
+ # endif
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"iskeyword", "isk", P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP,
+ (char_u *)&p_isk, PV_ISK,
+ {
+***************
+*** 1696,1702 ****
+ ISK_LATIN1
+ # endif
+ #endif
+! } SCRIPTID_INIT},
+ {"isprint", "isp", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP,
+ (char_u *)&p_isp, PV_NONE,
+ {
+--- 1696,1702 ----
+ ISK_LATIN1
+ # endif
+ #endif
+! } SCTX_INIT},
+ {"isprint", "isp", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP,
+ (char_u *)&p_isp, PV_NONE,
+ {
+***************
+*** 1710,1719 ****
+ ISP_LATIN1,
+ # endif
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"joinspaces", "js", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_js, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"key", NULL, P_STRING|P_ALLOCED|P_VI_DEF|P_NO_MKRC,
+ #ifdef FEAT_CRYPT
+ (char_u *)&p_key, PV_KEY,
+--- 1710,1719 ----
+ ISP_LATIN1,
+ # endif
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"joinspaces", "js", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_js, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"key", NULL, P_STRING|P_ALLOCED|P_VI_DEF|P_NO_MKRC,
+ #ifdef FEAT_CRYPT
+ (char_u *)&p_key, PV_KEY,
+***************
+*** 1722,1728 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"keymap", "kmp", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT|P_NFNAME|P_PRI_MKRC,
+ #ifdef FEAT_KEYMAP
+ (char_u *)&p_keymap, PV_KMAP,
+--- 1722,1728 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"keymap", "kmp", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT|P_NFNAME|P_PRI_MKRC,
+ #ifdef FEAT_KEYMAP
+ (char_u *)&p_keymap, PV_KMAP,
+***************
+*** 1731,1740 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"keymodel", "km", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_km, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"keywordprg", "kp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_kp, PV_KP,
+ {
+--- 1731,1740 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"keymodel", "km", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_km, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"keywordprg", "kp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_kp, PV_KP,
+ {
+***************
+*** 1751,1757 ****
+ # endif
+ # endif
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"langmap", "lmap", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_SECURE,
+ #ifdef FEAT_LANGMAP
+ (char_u *)&p_langmap, PV_NONE,
+--- 1751,1757 ----
+ # endif
+ # endif
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"langmap", "lmap", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_SECURE,
+ #ifdef FEAT_LANGMAP
+ (char_u *)&p_langmap, PV_NONE,
+***************
+*** 1760,1800 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL,
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"langmenu", "lm", P_STRING|P_VI_DEF|P_NFNAME,
+ #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG)
+ (char_u *)&p_lm, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"langnoremap", "lnr", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_LANGMAP
+ (char_u *)&p_lnr, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"langremap", "lrm", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_LANGMAP
+ (char_u *)&p_lrm, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"laststatus", "ls", P_NUM|P_VI_DEF|P_RALL,
+ (char_u *)&p_ls, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
+ {"lazyredraw", "lz", P_BOOL|P_VI_DEF,
+ (char_u *)&p_lz, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"linebreak", "lbr", P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)VAR_WIN, PV_LBR,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"lines", NULL, P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ (char_u *)&Rows, PV_NONE,
+ {
+--- 1760,1800 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL,
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"langmenu", "lm", P_STRING|P_VI_DEF|P_NFNAME,
+ #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG)
+ (char_u *)&p_lm, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"langnoremap", "lnr", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_LANGMAP
+ (char_u *)&p_lnr, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"langremap", "lrm", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_LANGMAP
+ (char_u *)&p_lrm, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"laststatus", "ls", P_NUM|P_VI_DEF|P_RALL,
+ (char_u *)&p_ls, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCTX_INIT},
+ {"lazyredraw", "lz", P_BOOL|P_VI_DEF,
+ (char_u *)&p_lz, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"linebreak", "lbr", P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)VAR_WIN, PV_LBR,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"lines", NULL, P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ (char_u *)&Rows, PV_NONE,
+ {
+***************
+*** 1803,1809 ****
+ #else
+ (char_u *)24L,
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"linespace", "lsp", P_NUM|P_VI_DEF|P_RCLR,
+ #ifdef FEAT_GUI
+ (char_u *)&p_linespace, PV_NONE,
+--- 1803,1809 ----
+ #else
+ (char_u *)24L,
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"linespace", "lsp", P_NUM|P_VI_DEF|P_RCLR,
+ #ifdef FEAT_GUI
+ (char_u *)&p_linespace, PV_NONE,
+***************
+*** 1815,1828 ****
+ #else
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"lisp", NULL, P_BOOL|P_VI_DEF,
+ #ifdef FEAT_LISP
+ (char_u *)&p_lisp, PV_LISP,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"lispwords", "lw", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_LISP
+ (char_u *)&p_lispwords, PV_LW,
+--- 1815,1828 ----
+ #else
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"lisp", NULL, P_BOOL|P_VI_DEF,
+ #ifdef FEAT_LISP
+ (char_u *)&p_lisp, PV_LISP,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"lispwords", "lw", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_LISP
+ (char_u *)&p_lispwords, PV_LW,
+***************
+*** 1831,1846 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"list", NULL, P_BOOL|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_LIST,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"listchars", "lcs", P_STRING|P_VI_DEF|P_RALL|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_lcs, PV_NONE,
+! {(char_u *)"eol:$", (char_u *)0L} SCRIPTID_INIT},
+ {"loadplugins", "lpl", P_BOOL|P_VI_DEF,
+ (char_u *)&p_lpl, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"luadll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_LUA)
+ (char_u *)&p_luadll, PV_NONE,
+--- 1831,1846 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"list", NULL, P_BOOL|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_LIST,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"listchars", "lcs", P_STRING|P_VI_DEF|P_RALL|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_lcs, PV_NONE,
+! {(char_u *)"eol:$", (char_u *)0L} SCTX_INIT},
+ {"loadplugins", "lpl", P_BOOL|P_VI_DEF,
+ (char_u *)&p_lpl, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"luadll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_LUA)
+ (char_u *)&p_luadll, PV_NONE,
+***************
+*** 1849,1855 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"macatsui", NULL, P_BOOL|P_VI_DEF|P_RCLR,
+ #ifdef FEAT_GUI_MAC
+ (char_u *)&p_macatsui, PV_NONE,
+--- 1849,1855 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"macatsui", NULL, P_BOOL|P_VI_DEF|P_RCLR,
+ #ifdef FEAT_GUI_MAC
+ (char_u *)&p_macatsui, PV_NONE,
+***************
+*** 1858,1867 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"magic", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_magic, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"makeef", "mef", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_mef, PV_NONE,
+--- 1858,1867 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"magic", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_magic, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"makeef", "mef", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_mef, PV_NONE,
+***************
+*** 1870,1876 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"makeencoding","menc", P_STRING|P_VI_DEF,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_menc, PV_MENC,
+--- 1870,1876 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"makeencoding","menc", P_STRING|P_VI_DEF,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_menc, PV_MENC,
+***************
+*** 1879,1885 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"makeprg", "mp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_mp, PV_MP,
+--- 1879,1885 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"makeprg", "mp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_mp, PV_MP,
+***************
+*** 1892,1943 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"matchpairs", "mps", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_mps, PV_MPS,
+ {(char_u *)"(:),{:},[:]", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"matchtime", "mat", P_NUM|P_VI_DEF,
+ (char_u *)&p_mat, PV_NONE,
+! {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
+ {"maxcombine", "mco", P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_mco, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)2, (char_u *)0L} SCRIPTID_INIT},
+ {"maxfuncdepth", "mfd", P_NUM|P_VI_DEF,
+ #ifdef FEAT_EVAL
+ (char_u *)&p_mfd, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)100L, (char_u *)0L} SCRIPTID_INIT},
+ {"maxmapdepth", "mmd", P_NUM|P_VI_DEF,
+ (char_u *)&p_mmd, PV_NONE,
+! {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT},
+ {"maxmem", "mm", P_NUM|P_VI_DEF,
+ (char_u *)&p_mm, PV_NONE,
+ {(char_u *)DFLT_MAXMEM, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"maxmempattern","mmp", P_NUM|P_VI_DEF,
+ (char_u *)&p_mmp, PV_NONE,
+! {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT},
+ {"maxmemtot", "mmt", P_NUM|P_VI_DEF,
+ (char_u *)&p_mmt, PV_NONE,
+ {(char_u *)DFLT_MAXMEMTOT, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"menuitems", "mis", P_NUM|P_VI_DEF,
+ #ifdef FEAT_MENU
+ (char_u *)&p_mis, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)25L, (char_u *)0L} SCRIPTID_INIT},
+ {"mesg", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"mkspellmem", "msm", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
+ #ifdef FEAT_SPELL
+ (char_u *)&p_msm, PV_NONE,
+--- 1892,1943 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"matchpairs", "mps", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_mps, PV_MPS,
+ {(char_u *)"(:),{:},[:]", (char_u *)0L}
+! SCTX_INIT},
+ {"matchtime", "mat", P_NUM|P_VI_DEF,
+ (char_u *)&p_mat, PV_NONE,
+! {(char_u *)5L, (char_u *)0L} SCTX_INIT},
+ {"maxcombine", "mco", P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_mco, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)2, (char_u *)0L} SCTX_INIT},
+ {"maxfuncdepth", "mfd", P_NUM|P_VI_DEF,
+ #ifdef FEAT_EVAL
+ (char_u *)&p_mfd, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)100L, (char_u *)0L} SCTX_INIT},
+ {"maxmapdepth", "mmd", P_NUM|P_VI_DEF,
+ (char_u *)&p_mmd, PV_NONE,
+! {(char_u *)1000L, (char_u *)0L} SCTX_INIT},
+ {"maxmem", "mm", P_NUM|P_VI_DEF,
+ (char_u *)&p_mm, PV_NONE,
+ {(char_u *)DFLT_MAXMEM, (char_u *)0L}
+! SCTX_INIT},
+ {"maxmempattern","mmp", P_NUM|P_VI_DEF,
+ (char_u *)&p_mmp, PV_NONE,
+! {(char_u *)1000L, (char_u *)0L} SCTX_INIT},
+ {"maxmemtot", "mmt", P_NUM|P_VI_DEF,
+ (char_u *)&p_mmt, PV_NONE,
+ {(char_u *)DFLT_MAXMEMTOT, (char_u *)0L}
+! SCTX_INIT},
+ {"menuitems", "mis", P_NUM|P_VI_DEF,
+ #ifdef FEAT_MENU
+ (char_u *)&p_mis, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)25L, (char_u *)0L} SCTX_INIT},
+ {"mesg", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"mkspellmem", "msm", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
+ #ifdef FEAT_SPELL
+ (char_u *)&p_msm, PV_NONE,
+***************
+*** 1946,1967 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"modeline", "ml", P_BOOL|P_VIM,
+ (char_u *)&p_ml, PV_ML,
+! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
+ {"modelines", "mls", P_NUM|P_VI_DEF,
+ (char_u *)&p_mls, PV_NONE,
+! {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
+ {"modifiable", "ma", P_BOOL|P_VI_DEF|P_NOGLOB,
+ (char_u *)&p_ma, PV_MA,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"modified", "mod", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_mod, PV_MOD,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"more", NULL, P_BOOL|P_VIM,
+ (char_u *)&p_more, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
+ {"mouse", NULL, P_STRING|P_VI_DEF|P_FLAGLIST,
+ (char_u *)&p_mouse, PV_NONE,
+ {
+--- 1946,1967 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"modeline", "ml", P_BOOL|P_VIM,
+ (char_u *)&p_ml, PV_ML,
+! {(char_u *)FALSE, (char_u *)TRUE} SCTX_INIT},
+ {"modelines", "mls", P_NUM|P_VI_DEF,
+ (char_u *)&p_mls, PV_NONE,
+! {(char_u *)5L, (char_u *)0L} SCTX_INIT},
+ {"modifiable", "ma", P_BOOL|P_VI_DEF|P_NOGLOB,
+ (char_u *)&p_ma, PV_MA,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"modified", "mod", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_mod, PV_MOD,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"more", NULL, P_BOOL|P_VIM,
+ (char_u *)&p_more, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCTX_INIT},
+ {"mouse", NULL, P_STRING|P_VI_DEF|P_FLAGLIST,
+ (char_u *)&p_mouse, PV_NONE,
+ {
+***************
+*** 1970,1990 ****
+ #else
+ (char_u *)"",
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"mousefocus", "mousef", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_GUI
+ (char_u *)&p_mousef, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"mousehide", "mh", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_GUI
+ (char_u *)&p_mh, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"mousemodel", "mousem", P_STRING|P_VI_DEF,
+ (char_u *)&p_mousem, PV_NONE,
+ {
+--- 1970,1990 ----
+ #else
+ (char_u *)"",
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"mousefocus", "mousef", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_GUI
+ (char_u *)&p_mousef, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"mousehide", "mh", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_GUI
+ (char_u *)&p_mh, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"mousemodel", "mousem", P_STRING|P_VI_DEF,
+ (char_u *)&p_mousem, PV_NONE,
+ {
+***************
+*** 1997,2003 ****
+ (char_u *)"extend",
+ # endif
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"mouseshape", "mouses", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_MOUSESHAPE
+ (char_u *)&p_mouseshape, PV_NONE,
+--- 1997,2003 ----
+ (char_u *)"extend",
+ # endif
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"mouseshape", "mouses", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_MOUSESHAPE
+ (char_u *)&p_mouseshape, PV_NONE,
+***************
+*** 2006,2015 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"mousetime", "mouset", P_NUM|P_VI_DEF,
+ (char_u *)&p_mouset, PV_NONE,
+! {(char_u *)500L, (char_u *)0L} SCRIPTID_INIT},
+ {"mzschemedll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_MZSCHEME)
+ (char_u *)&p_mzschemedll, PV_NONE,
+--- 2006,2015 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"mousetime", "mouset", P_NUM|P_VI_DEF,
+ (char_u *)&p_mouset, PV_NONE,
+! {(char_u *)500L, (char_u *)0L} SCTX_INIT},
+ {"mzschemedll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_MZSCHEME)
+ (char_u *)&p_mzschemedll, PV_NONE,
+***************
+*** 2018,2024 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"mzschemegcdll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_MZSCHEME)
+ (char_u *)&p_mzschemegcdll, PV_NONE,
+--- 2018,2024 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"mzschemegcdll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_MZSCHEME)
+ (char_u *)&p_mzschemegcdll, PV_NONE,
+***************
+*** 2027,2057 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"mzquantum", "mzq", P_NUM,
+ #ifdef FEAT_MZSCHEME
+ (char_u *)&p_mzq, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)100L, (char_u *)100L} SCRIPTID_INIT},
+ {"novice", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"nrformats", "nf", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_nf, PV_NF,
+ {(char_u *)"bin,octal,hex", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"number", "nu", P_BOOL|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_NU,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"numberwidth", "nuw", P_NUM|P_RWIN|P_VIM,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)VAR_WIN, PV_NUW,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)8L, (char_u *)4L} SCRIPTID_INIT},
+ {"omnifunc", "ofu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_COMPL_FUNC
+ (char_u *)&p_ofu, PV_OFU,
+--- 2027,2057 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"mzquantum", "mzq", P_NUM,
+ #ifdef FEAT_MZSCHEME
+ (char_u *)&p_mzq, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)100L, (char_u *)100L} SCTX_INIT},
+ {"novice", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"nrformats", "nf", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_nf, PV_NF,
+ {(char_u *)"bin,octal,hex", (char_u *)0L}
+! SCTX_INIT},
+ {"number", "nu", P_BOOL|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_NU,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"numberwidth", "nuw", P_NUM|P_RWIN|P_VIM,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)VAR_WIN, PV_NUW,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)8L, (char_u *)4L} SCTX_INIT},
+ {"omnifunc", "ofu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_COMPL_FUNC
+ (char_u *)&p_ofu, PV_OFU,
+***************
+*** 2060,2069 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"open", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"opendevice", "odev", P_BOOL|P_VI_DEF,
+ #if defined(MSWIN)
+ (char_u *)&p_odev, PV_NONE,
+--- 2060,2069 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"open", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"opendevice", "odev", P_BOOL|P_VI_DEF,
+ #if defined(MSWIN)
+ (char_u *)&p_odev, PV_NONE,
+***************
+*** 2071,2101 ****
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)FALSE, (char_u *)FALSE}
+! SCRIPTID_INIT},
+ {"operatorfunc", "opfunc", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_opfunc, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"optimize", "opt", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"packpath", "pp", P_STRING|P_VI_DEF|P_EXPAND|P_ONECOMMA|P_NODUP
+ |P_SECURE,
+ (char_u *)&p_pp, PV_NONE,
+ {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"paragraphs", "para", P_STRING|P_VI_DEF,
+ (char_u *)&p_para, PV_NONE,
+ {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
+! (char_u *)0L} SCRIPTID_INIT},
+ {"paste", NULL, P_BOOL|P_VI_DEF|P_PRI_MKRC,
+ (char_u *)&p_paste, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"pastetoggle", "pt", P_STRING|P_VI_DEF,
+ (char_u *)&p_pt, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"patchexpr", "pex", P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ (char_u *)&p_pex, PV_NONE,
+--- 2071,2101 ----
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)FALSE, (char_u *)FALSE}
+! SCTX_INIT},
+ {"operatorfunc", "opfunc", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_opfunc, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"optimize", "opt", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"packpath", "pp", P_STRING|P_VI_DEF|P_EXPAND|P_ONECOMMA|P_NODUP
+ |P_SECURE,
+ (char_u *)&p_pp, PV_NONE,
+ {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L}
+! SCTX_INIT},
+ {"paragraphs", "para", P_STRING|P_VI_DEF,
+ (char_u *)&p_para, PV_NONE,
+ {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
+! (char_u *)0L} SCTX_INIT},
+ {"paste", NULL, P_BOOL|P_VI_DEF|P_PRI_MKRC,
+ (char_u *)&p_paste, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"pastetoggle", "pt", P_STRING|P_VI_DEF,
+ (char_u *)&p_pt, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"patchexpr", "pex", P_STRING|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ (char_u *)&p_pex, PV_NONE,
+***************
+*** 2104,2113 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"patchmode", "pm", P_STRING|P_VI_DEF|P_NFNAME,
+ (char_u *)&p_pm, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"path", "pa", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_path, PV_PATH,
+ {
+--- 2104,2113 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"patchmode", "pm", P_STRING|P_VI_DEF|P_NFNAME,
+ (char_u *)&p_pm, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"path", "pa", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
+ (char_u *)&p_path, PV_PATH,
+ {
+***************
+*** 2116,2122 ****
+ #else
+ (char_u *)".,/usr/include,,",
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"perldll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_PERL)
+ (char_u *)&p_perldll, PV_NONE,
+--- 2116,2122 ----
+ #else
+ (char_u *)".,/usr/include,,",
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"perldll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_PERL)
+ (char_u *)&p_perldll, PV_NONE,
+***************
+*** 2125,2148 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"preserveindent", "pi", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_pi, PV_PI,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"previewheight", "pvh", P_NUM|P_VI_DEF,
+ #if defined(FEAT_QUICKFIX)
+ (char_u *)&p_pvh, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)12L, (char_u *)0L} SCRIPTID_INIT},
+ {"previewwindow", "pvw", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB,
+ #if defined(FEAT_QUICKFIX)
+ (char_u *)VAR_WIN, PV_PVW,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"printdevice", "pdev", P_STRING|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_PRINTER
+ (char_u *)&p_pdev, PV_NONE,
+--- 2125,2148 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"preserveindent", "pi", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_pi, PV_PI,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"previewheight", "pvh", P_NUM|P_VI_DEF,
+ #if defined(FEAT_QUICKFIX)
+ (char_u *)&p_pvh, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)12L, (char_u *)0L} SCTX_INIT},
+ {"previewwindow", "pvw", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB,
+ #if defined(FEAT_QUICKFIX)
+ (char_u *)VAR_WIN, PV_PVW,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"printdevice", "pdev", P_STRING|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_PRINTER
+ (char_u *)&p_pdev, PV_NONE,
+***************
+*** 2151,2157 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"printencoding", "penc", P_STRING|P_VI_DEF,
+ #ifdef FEAT_POSTSCRIPT
+ (char_u *)&p_penc, PV_NONE,
+--- 2151,2157 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"printencoding", "penc", P_STRING|P_VI_DEF,
+ #ifdef FEAT_POSTSCRIPT
+ (char_u *)&p_penc, PV_NONE,
+***************
+*** 2160,2166 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"printexpr", "pexpr", P_STRING|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_POSTSCRIPT
+ (char_u *)&p_pexpr, PV_NONE,
+--- 2160,2166 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"printexpr", "pexpr", P_STRING|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_POSTSCRIPT
+ (char_u *)&p_pexpr, PV_NONE,
+***************
+*** 2169,2175 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"printfont", "pfn", P_STRING|P_VI_DEF,
+ #ifdef FEAT_PRINTER
+ (char_u *)&p_pfn, PV_NONE,
+--- 2169,2175 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"printfont", "pfn", P_STRING|P_VI_DEF,
+ #ifdef FEAT_PRINTER
+ (char_u *)&p_pfn, PV_NONE,
+***************
+*** 2184,2190 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"printheader", "pheader", P_STRING|P_VI_DEF|P_GETTEXT,
+ #ifdef FEAT_PRINTER
+ (char_u *)&p_header, PV_NONE,
+--- 2184,2190 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"printheader", "pheader", P_STRING|P_VI_DEF|P_GETTEXT,
+ #ifdef FEAT_PRINTER
+ (char_u *)&p_header, PV_NONE,
+***************
+*** 2195,2201 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"printmbcharset", "pmbcs", P_STRING|P_VI_DEF,
+ #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE)
+ (char_u *)&p_pmcs, PV_NONE,
+--- 2195,2201 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"printmbcharset", "pmbcs", P_STRING|P_VI_DEF,
+ #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE)
+ (char_u *)&p_pmcs, PV_NONE,
+***************
+*** 2204,2210 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"printmbfont", "pmbfn", P_STRING|P_VI_DEF,
+ #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE)
+ (char_u *)&p_pmfn, PV_NONE,
+--- 2204,2210 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"printmbfont", "pmbfn", P_STRING|P_VI_DEF,
+ #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE)
+ (char_u *)&p_pmfn, PV_NONE,
+***************
+*** 2213,2219 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"printoptions", "popt", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_PRINTER
+ (char_u *)&p_popt, PV_NONE,
+--- 2213,2219 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"printoptions", "popt", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_PRINTER
+ (char_u *)&p_popt, PV_NONE,
+***************
+*** 2222,2245 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"prompt", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_prompt, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"pumheight", "ph", P_NUM|P_VI_DEF,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_ph, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"pumwidth", "pw", P_NUM|P_VI_DEF,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_pw, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)15L, (char_u *)15L} SCRIPTID_INIT},
+ {"pythonthreedll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_PYTHON3)
+ (char_u *)&p_py3dll, PV_NONE,
+--- 2222,2245 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"prompt", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_prompt, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"pumheight", "ph", P_NUM|P_VI_DEF,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_ph, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"pumwidth", "pw", P_NUM|P_VI_DEF,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_pw, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)15L, (char_u *)15L} SCTX_INIT},
+ {"pythonthreedll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_PYTHON3)
+ (char_u *)&p_py3dll, PV_NONE,
+***************
+*** 2248,2254 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"pythonthreehome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_PYTHON3)
+ (char_u *)&p_py3home, PV_NONE,
+--- 2248,2254 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"pythonthreehome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_PYTHON3)
+ (char_u *)&p_py3home, PV_NONE,
+***************
+*** 2257,2263 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"pythondll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_PYTHON)
+ (char_u *)&p_pydll, PV_NONE,
+--- 2257,2263 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"pythondll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_PYTHON)
+ (char_u *)&p_pydll, PV_NONE,
+***************
+*** 2266,2272 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"pythonhome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_PYTHON)
+ (char_u *)&p_pyhome, PV_NONE,
+--- 2266,2272 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"pythonhome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_PYTHON)
+ (char_u *)&p_pyhome, PV_NONE,
+***************
+*** 2275,2281 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"pyxversion", "pyx", P_NUM|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
+ (char_u *)&p_pyx, PV_NONE,
+--- 2275,2281 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"pyxversion", "pyx", P_NUM|P_VI_DEF|P_SECURE,
+ #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
+ (char_u *)&p_pyx, PV_NONE,
+***************
+*** 2283,2289 ****
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)DEFAULT_PYTHON_VER, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"quoteescape", "qe", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_TEXTOBJ
+ (char_u *)&p_qe, PV_QE,
+--- 2283,2289 ----
+ (char_u *)NULL, PV_NONE,
+ #endif
+ {(char_u *)DEFAULT_PYTHON_VER, (char_u *)0L}
+! SCTX_INIT},
+ {"quoteescape", "qe", P_STRING|P_ALLOCED|P_VI_DEF,
+ #ifdef FEAT_TEXTOBJ
+ (char_u *)&p_qe, PV_QE,
+***************
+*** 2292,2320 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"readonly", "ro", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB,
+ (char_u *)&p_ro, PV_RO,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"redraw", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"redrawtime", "rdt", P_NUM|P_VI_DEF,
+ #ifdef FEAT_RELTIME
+ (char_u *)&p_rdt, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)2000L, (char_u *)0L} SCRIPTID_INIT},
+ {"regexpengine", "re", P_NUM|P_VI_DEF,
+ (char_u *)&p_re, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_RNU,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"remap", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_remap, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"renderoptions", "rop", P_STRING|P_ONECOMMA|P_RCLR|P_VI_DEF,
+ #ifdef FEAT_RENDER_OPTIONS
+ (char_u *)&p_rop, PV_NONE,
+--- 2292,2320 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"readonly", "ro", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB,
+ (char_u *)&p_ro, PV_RO,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"redraw", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"redrawtime", "rdt", P_NUM|P_VI_DEF,
+ #ifdef FEAT_RELTIME
+ (char_u *)&p_rdt, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)2000L, (char_u *)0L} SCTX_INIT},
+ {"regexpengine", "re", P_NUM|P_VI_DEF,
+ (char_u *)&p_re, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_RNU,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"remap", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_remap, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"renderoptions", "rop", P_STRING|P_ONECOMMA|P_RCLR|P_VI_DEF,
+ #ifdef FEAT_RENDER_OPTIONS
+ (char_u *)&p_rop, PV_NONE,
+***************
+*** 2323,2353 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"report", NULL, P_NUM|P_VI_DEF,
+ (char_u *)&p_report, PV_NONE,
+! {(char_u *)2L, (char_u *)0L} SCRIPTID_INIT},
+ {"restorescreen", "rs", P_BOOL|P_VI_DEF,
+ #ifdef WIN3264
+ (char_u *)&p_rs, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"revins", "ri", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_ri, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"rightleft", "rl", P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)VAR_WIN, PV_RL,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"rightleftcmd", "rlc", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)VAR_WIN, PV_RLC,
+--- 2323,2353 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"report", NULL, P_NUM|P_VI_DEF,
+ (char_u *)&p_report, PV_NONE,
+! {(char_u *)2L, (char_u *)0L} SCTX_INIT},
+ {"restorescreen", "rs", P_BOOL|P_VI_DEF,
+ #ifdef WIN3264
+ (char_u *)&p_rs, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"revins", "ri", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)&p_ri, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"rightleft", "rl", P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)VAR_WIN, PV_RL,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"rightleftcmd", "rlc", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_RIGHTLEFT
+ (char_u *)VAR_WIN, PV_RLC,
+***************
+*** 2356,2362 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"rubydll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_RUBY)
+ (char_u *)&p_rubydll, PV_NONE,
+--- 2356,2362 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"rubydll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_RUBY)
+ (char_u *)&p_rubydll, PV_NONE,
+***************
+*** 2365,2420 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"ruler", "ru", P_BOOL|P_VI_DEF|P_VIM|P_RSTAT,
+ #ifdef FEAT_CMDL_INFO
+ (char_u *)&p_ru, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"rulerformat", "ruf", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT,
+ #ifdef FEAT_STL_OPT
+ (char_u *)&p_ruf, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"runtimepath", "rtp", P_STRING|P_VI_DEF|P_EXPAND|P_ONECOMMA|P_NODUP
+ |P_SECURE,
+ (char_u *)&p_rtp, PV_NONE,
+ {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L}
+! SCRIPTID_INIT},
+ {"scroll", "scr", P_NUM|P_NO_MKRC|P_VI_DEF,
+ (char_u *)VAR_WIN, PV_SCROLL,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"scrollbind", "scb", P_BOOL|P_VI_DEF,
+ (char_u *)VAR_WIN, PV_SCBIND,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"scrolljump", "sj", P_NUM|P_VI_DEF|P_VIM,
+ (char_u *)&p_sj, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
+ {"scrolloff", "so", P_NUM|P_VI_DEF|P_VIM|P_RALL,
+ (char_u *)&p_so, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"scrollopt", "sbo", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_sbo, PV_NONE,
+ {(char_u *)"ver,jump", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"sections", "sect", P_STRING|P_VI_DEF,
+ (char_u *)&p_sections, PV_NONE,
+ {(char_u *)"SHNHH HUnhsh", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"secure", NULL, P_BOOL|P_VI_DEF|P_SECURE,
+ (char_u *)&p_secure, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"selection", "sel", P_STRING|P_VI_DEF,
+ (char_u *)&p_sel, PV_NONE,
+ {(char_u *)"inclusive", (char_u *)0L}
+! SCRIPTID_INIT},
+ {"selectmode", "slm", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_slm, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_SESSION
+ (char_u *)&p_ssop, PV_NONE,
+--- 2365,2420 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"ruler", "ru", P_BOOL|P_VI_DEF|P_VIM|P_RSTAT,
+ #ifdef FEAT_CMDL_INFO
+ (char_u *)&p_ru, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"rulerformat", "ruf", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT,
+ #ifdef FEAT_STL_OPT
+ (char_u *)&p_ruf, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"runtimepath", "rtp", P_STRING|P_VI_DEF|P_EXPAND|P_ONECOMMA|P_NODUP
+ |P_SECURE,
+ (char_u *)&p_rtp, PV_NONE,
+ {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L}
+! SCTX_INIT},
+ {"scroll", "scr", P_NUM|P_NO_MKRC|P_VI_DEF,
+ (char_u *)VAR_WIN, PV_SCROLL,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"scrollbind", "scb", P_BOOL|P_VI_DEF,
+ (char_u *)VAR_WIN, PV_SCBIND,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"scrolljump", "sj", P_NUM|P_VI_DEF|P_VIM,
+ (char_u *)&p_sj, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCTX_INIT},
+ {"scrolloff", "so", P_NUM|P_VI_DEF|P_VIM|P_RALL,
+ (char_u *)&p_so, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"scrollopt", "sbo", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_sbo, PV_NONE,
+ {(char_u *)"ver,jump", (char_u *)0L}
+! SCTX_INIT},
+ {"sections", "sect", P_STRING|P_VI_DEF,
+ (char_u *)&p_sections, PV_NONE,
+ {(char_u *)"SHNHH HUnhsh", (char_u *)0L}
+! SCTX_INIT},
+ {"secure", NULL, P_BOOL|P_VI_DEF|P_SECURE,
+ (char_u *)&p_secure, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"selection", "sel", P_STRING|P_VI_DEF,
+ (char_u *)&p_sel, PV_NONE,
+ {(char_u *)"inclusive", (char_u *)0L}
+! SCTX_INIT},
+ {"selectmode", "slm", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_slm, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_SESSION
+ (char_u *)&p_ssop, PV_NONE,
+***************
+*** 2424,2430 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"shell", "sh", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_sh, PV_NONE,
+ {
+--- 2424,2430 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"shell", "sh", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_sh, PV_NONE,
+ {
+***************
+*** 2437,2443 ****
+ (char_u *)"sh",
+ # endif
+ #endif /* VMS */
+! (char_u *)0L} SCRIPTID_INIT},
+ {"shellcmdflag","shcf", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_shcf, PV_NONE,
+ {
+--- 2437,2443 ----
+ (char_u *)"sh",
+ # endif
+ #endif /* VMS */
+! (char_u *)0L} SCTX_INIT},
+ {"shellcmdflag","shcf", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_shcf, PV_NONE,
+ {
+***************
+*** 2446,2452 ****
+ #else
+ (char_u *)"-c",
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"shellpipe", "sp", P_STRING|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_sp, PV_NONE,
+--- 2446,2452 ----
+ #else
+ (char_u *)"-c",
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"shellpipe", "sp", P_STRING|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_QUICKFIX
+ (char_u *)&p_sp, PV_NONE,
+***************
+*** 2461,2490 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"shellquote", "shq", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_shq, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"shellredir", "srr", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_srr, PV_NONE,
+! {(char_u *)">", (char_u *)0L} SCRIPTID_INIT},
+ {"shellslash", "ssl", P_BOOL|P_VI_DEF,
+ #ifdef BACKSLASH_IN_FILENAME
+ (char_u *)&p_ssl, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"shelltemp", "stmp", P_BOOL,
+ (char_u *)&p_stmp, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
+ {"shelltype", "st", P_NUM|P_VI_DEF,
+ #ifdef AMIGA
+ (char_u *)&p_st, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"shellxquote", "sxq", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_sxq, PV_NONE,
+ {
+--- 2461,2490 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"shellquote", "shq", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_shq, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"shellredir", "srr", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_srr, PV_NONE,
+! {(char_u *)">", (char_u *)0L} SCTX_INIT},
+ {"shellslash", "ssl", P_BOOL|P_VI_DEF,
+ #ifdef BACKSLASH_IN_FILENAME
+ (char_u *)&p_ssl, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"shelltemp", "stmp", P_BOOL,
+ (char_u *)&p_stmp, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCTX_INIT},
+ {"shelltype", "st", P_NUM|P_VI_DEF,
+ #ifdef AMIGA
+ (char_u *)&p_st, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"shellxquote", "sxq", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_sxq, PV_NONE,
+ {
+***************
+*** 2493,2499 ****
+ #else
+ (char_u *)"",
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_sxe, PV_NONE,
+ {
+--- 2493,2499 ----
+ #else
+ (char_u *)"",
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
+ (char_u *)&p_sxe, PV_NONE,
+ {
+***************
+*** 2502,2528 ****
+ #else
+ (char_u *)"",
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"shiftround", "sr", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_sr, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"shiftwidth", "sw", P_NUM|P_VI_DEF,
+ (char_u *)&p_sw, PV_SW,
+! {(char_u *)8L, (char_u *)0L} SCRIPTID_INIT},
+ {"shortmess", "shm", P_STRING|P_VIM|P_FLAGLIST,
+ (char_u *)&p_shm, PV_NONE,
+ {(char_u *)"", (char_u *)"filnxtToO"}
+! SCRIPTID_INIT},
+ {"shortname", "sn", P_BOOL|P_VI_DEF,
+ (char_u *)&p_sn, PV_SN,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"showbreak", "sbr", P_STRING|P_VI_DEF|P_RALL,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)&p_sbr, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"showcmd", "sc", P_BOOL|P_VIM,
+ #ifdef FEAT_CMDL_INFO
+ (char_u *)&p_sc, PV_NONE,
+--- 2502,2528 ----
+ #else
+ (char_u *)"",
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"shiftround", "sr", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_sr, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"shiftwidth", "sw", P_NUM|P_VI_DEF,
+ (char_u *)&p_sw, PV_SW,
+! {(char_u *)8L, (char_u *)0L} SCTX_INIT},
+ {"shortmess", "shm", P_STRING|P_VIM|P_FLAGLIST,
+ (char_u *)&p_shm, PV_NONE,
+ {(char_u *)"", (char_u *)"filnxtToO"}
+! SCTX_INIT},
+ {"shortname", "sn", P_BOOL|P_VI_DEF,
+ (char_u *)&p_sn, PV_SN,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"showbreak", "sbr", P_STRING|P_VI_DEF|P_RALL,
+ #ifdef FEAT_LINEBREAK
+ (char_u *)&p_sbr, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"showcmd", "sc", P_BOOL|P_VIM,
+ #ifdef FEAT_CMDL_INFO
+ (char_u *)&p_sc, PV_NONE,
+***************
+*** 2535,2559 ****
+ #else
+ (char_u *)TRUE
+ #endif
+! } SCRIPTID_INIT},
+ {"showfulltag", "sft", P_BOOL|P_VI_DEF,
+ (char_u *)&p_sft, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"showmatch", "sm", P_BOOL|P_VI_DEF,
+ (char_u *)&p_sm, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"showmode", "smd", P_BOOL|P_VIM,
+ (char_u *)&p_smd, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
+ {"showtabline", "stal", P_NUM|P_VI_DEF|P_RALL,
+ (char_u *)&p_stal, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
+ {"sidescroll", "ss", P_NUM|P_VI_DEF,
+ (char_u *)&p_ss, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"sidescrolloff", "siso", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
+ (char_u *)&p_siso, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"signcolumn", "scl", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SIGNS
+ (char_u *)VAR_WIN, PV_SCL,
+--- 2535,2559 ----
+ #else
+ (char_u *)TRUE
+ #endif
+! } SCTX_INIT},
+ {"showfulltag", "sft", P_BOOL|P_VI_DEF,
+ (char_u *)&p_sft, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"showmatch", "sm", P_BOOL|P_VI_DEF,
+ (char_u *)&p_sm, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"showmode", "smd", P_BOOL|P_VIM,
+ (char_u *)&p_smd, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCTX_INIT},
+ {"showtabline", "stal", P_NUM|P_VI_DEF|P_RALL,
+ (char_u *)&p_stal, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCTX_INIT},
+ {"sidescroll", "ss", P_NUM|P_VI_DEF,
+ (char_u *)&p_ss, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"sidescrolloff", "siso", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
+ (char_u *)&p_siso, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"signcolumn", "scl", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SIGNS
+ (char_u *)VAR_WIN, PV_SCL,
+***************
+*** 2562,2597 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"slowopen", "slow", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"smartcase", "scs", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_scs, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"smartindent", "si", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_SMARTINDENT
+ (char_u *)&p_si, PV_SI,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"smarttab", "sta", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_sta, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"softtabstop", "sts", P_NUM|P_VI_DEF|P_VIM,
+ (char_u *)&p_sts, PV_STS,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"sourceany", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"spell", NULL, P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SPELL
+ (char_u *)VAR_WIN, PV_SPELL,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"spellcapcheck", "spc", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF,
+ #ifdef FEAT_SPELL
+ (char_u *)&p_spc, PV_SPC,
+--- 2562,2597 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"slowopen", "slow", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"smartcase", "scs", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_scs, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"smartindent", "si", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_SMARTINDENT
+ (char_u *)&p_si, PV_SI,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"smarttab", "sta", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_sta, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"softtabstop", "sts", P_NUM|P_VI_DEF|P_VIM,
+ (char_u *)&p_sts, PV_STS,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"sourceany", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"spell", NULL, P_BOOL|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SPELL
+ (char_u *)VAR_WIN, PV_SPELL,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"spellcapcheck", "spc", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF,
+ #ifdef FEAT_SPELL
+ (char_u *)&p_spc, PV_SPC,
+***************
+*** 2600,2606 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"spellfile", "spf", P_STRING|P_EXPAND|P_ALLOCED|P_VI_DEF|P_SECURE
+ |P_ONECOMMA,
+ #ifdef FEAT_SPELL
+--- 2600,2606 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"spellfile", "spf", P_STRING|P_EXPAND|P_ALLOCED|P_VI_DEF|P_SECURE
+ |P_ONECOMMA,
+ #ifdef FEAT_SPELL
+***************
+*** 2610,2616 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"spelllang", "spl", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA
+ |P_RBUF|P_EXPAND,
+ #ifdef FEAT_SPELL
+--- 2610,2616 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"spelllang", "spl", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA
+ |P_RBUF|P_EXPAND,
+ #ifdef FEAT_SPELL
+***************
+*** 2620,2626 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_ONECOMMA,
+ #ifdef FEAT_SPELL
+ (char_u *)&p_sps, PV_NONE,
+--- 2620,2626 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_ONECOMMA,
+ #ifdef FEAT_SPELL
+ (char_u *)&p_sps, PV_NONE,
+***************
+*** 2629,2655 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"splitbelow", "sb", P_BOOL|P_VI_DEF,
+ (char_u *)&p_sb, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"splitright", "spr", P_BOOL|P_VI_DEF,
+ (char_u *)&p_spr, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"startofline", "sol", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_sol, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"statusline" ,"stl", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT,
+ #ifdef FEAT_STL_OPT
+ (char_u *)&p_stl, PV_STL,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"suffixes", "su", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_su, PV_NONE,
+ {(char_u *)".bak,~,.o,.h,.info,.swp,.obj",
+! (char_u *)0L} SCRIPTID_INIT},
+ {"suffixesadd", "sua", P_STRING|P_VI_DEF|P_ALLOCED|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_SEARCHPATH
+ (char_u *)&p_sua, PV_SUA,
+--- 2629,2655 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"splitbelow", "sb", P_BOOL|P_VI_DEF,
+ (char_u *)&p_sb, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"splitright", "spr", P_BOOL|P_VI_DEF,
+ (char_u *)&p_spr, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"startofline", "sol", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_sol, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"statusline" ,"stl", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT,
+ #ifdef FEAT_STL_OPT
+ (char_u *)&p_stl, PV_STL,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"suffixes", "su", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_su, PV_NONE,
+ {(char_u *)".bak,~,.o,.h,.info,.swp,.obj",
+! (char_u *)0L} SCTX_INIT},
+ {"suffixesadd", "sua", P_STRING|P_VI_DEF|P_ALLOCED|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_SEARCHPATH
+ (char_u *)&p_sua, PV_SUA,
+***************
+*** 2658,2673 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"swapfile", "swf", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_swf, PV_SWF,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"swapsync", "sws", P_STRING|P_VI_DEF,
+ (char_u *)&p_sws, PV_NONE,
+! {(char_u *)"fsync", (char_u *)0L} SCRIPTID_INIT},
+ {"switchbuf", "swb", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_swb, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"synmaxcol", "smc", P_NUM|P_VI_DEF|P_RBUF,
+ #ifdef FEAT_SYN_HL
+ (char_u *)&p_smc, PV_SMC,
+--- 2658,2673 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"swapfile", "swf", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)&p_swf, PV_SWF,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"swapsync", "sws", P_STRING|P_VI_DEF,
+ (char_u *)&p_sws, PV_NONE,
+! {(char_u *)"fsync", (char_u *)0L} SCTX_INIT},
+ {"switchbuf", "swb", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_swb, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"synmaxcol", "smc", P_NUM|P_VI_DEF|P_RBUF,
+ #ifdef FEAT_SYN_HL
+ (char_u *)&p_smc, PV_SMC,
+***************
+*** 2676,2682 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"syntax", "syn", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
+ #ifdef FEAT_SYN_HL
+ (char_u *)&p_syn, PV_SYN,
+--- 2676,2682 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"syntax", "syn", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
+ #ifdef FEAT_SYN_HL
+ (char_u *)&p_syn, PV_SYN,
+***************
+*** 2685,2704 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"tabline", "tal", P_STRING|P_VI_DEF|P_RALL,
+ #ifdef FEAT_STL_OPT
+ (char_u *)&p_tal, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"tabpagemax", "tpm", P_NUM|P_VI_DEF,
+ (char_u *)&p_tpm, PV_NONE,
+! {(char_u *)10L, (char_u *)0L} SCRIPTID_INIT},
+ {"tabstop", "ts", P_NUM|P_VI_DEF|P_RBUF,
+ (char_u *)&p_ts, PV_TS,
+! {(char_u *)8L, (char_u *)0L} SCRIPTID_INIT},
+ {"tagbsearch", "tbs", P_BOOL|P_VI_DEF,
+ (char_u *)&p_tbs, PV_NONE,
+ #ifdef VMS /* binary searching doesn't appear to work on VMS */
+--- 2685,2704 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"tabline", "tal", P_STRING|P_VI_DEF|P_RALL,
+ #ifdef FEAT_STL_OPT
+ (char_u *)&p_tal, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"tabpagemax", "tpm", P_NUM|P_VI_DEF,
+ (char_u *)&p_tpm, PV_NONE,
+! {(char_u *)10L, (char_u *)0L} SCTX_INIT},
+ {"tabstop", "ts", P_NUM|P_VI_DEF|P_RBUF,
+ (char_u *)&p_ts, PV_TS,
+! {(char_u *)8L, (char_u *)0L} SCTX_INIT},
+ {"tagbsearch", "tbs", P_BOOL|P_VI_DEF,
+ (char_u *)&p_tbs, PV_NONE,
+ #ifdef VMS /* binary searching doesn't appear to work on VMS */
+***************
+*** 2706,2721 ****
+ #else
+ {(char_u *)TRUE, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"tagcase", "tc", P_STRING|P_VIM,
+ (char_u *)&p_tc, PV_TC,
+! {(char_u *)"followic", (char_u *)"followic"} SCRIPTID_INIT},
+ {"taglength", "tl", P_NUM|P_VI_DEF,
+ (char_u *)&p_tl, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"tagrelative", "tr", P_BOOL|P_VIM,
+ (char_u *)&p_tr, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
+ {"tags", "tag", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_tags, PV_TAGS,
+ {
+--- 2706,2721 ----
+ #else
+ {(char_u *)TRUE, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"tagcase", "tc", P_STRING|P_VIM,
+ (char_u *)&p_tc, PV_TC,
+! {(char_u *)"followic", (char_u *)"followic"} SCTX_INIT},
+ {"taglength", "tl", P_NUM|P_VI_DEF,
+ (char_u *)&p_tl, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"tagrelative", "tr", P_BOOL|P_VIM,
+ (char_u *)&p_tr, PV_NONE,
+! {(char_u *)FALSE, (char_u *)TRUE} SCTX_INIT},
+ {"tags", "tag", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_tags, PV_TAGS,
+ {
+***************
+*** 2724,2733 ****
+ #else
+ (char_u *)"./tags,tags",
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"tagstack", "tgst", P_BOOL|P_VI_DEF,
+ (char_u *)&p_tgst, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"tcldll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_TCL)
+ (char_u *)&p_tcldll, PV_NONE,
+--- 2724,2733 ----
+ #else
+ (char_u *)"./tags,tags",
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"tagstack", "tgst", P_BOOL|P_VI_DEF,
+ (char_u *)&p_tgst, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"tcldll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(DYNAMIC_TCL)
+ (char_u *)&p_tcldll, PV_NONE,
+***************
+*** 2736,2752 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"term", NULL, P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
+ (char_u *)&T_NAME, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"termbidi", "tbidi", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_ARABIC
+ (char_u *)&p_tbidi, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"termencoding", "tenc", P_STRING|P_VI_DEF|P_RCLR,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_tenc, PV_NONE,
+--- 2736,2752 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"term", NULL, P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
+ (char_u *)&T_NAME, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"termbidi", "tbidi", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_ARABIC
+ (char_u *)&p_tbidi, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"termencoding", "tenc", P_STRING|P_VI_DEF|P_RCLR,
+ #ifdef FEAT_MBYTE
+ (char_u *)&p_tenc, PV_NONE,
+***************
+*** 2755,2761 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"termguicolors", "tgc", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
+ #ifdef FEAT_TERMGUICOLORS
+ (char_u *)&p_tgc, PV_NONE,
+--- 2755,2761 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"termguicolors", "tgc", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
+ #ifdef FEAT_TERMGUICOLORS
+ (char_u *)&p_tgc, PV_NONE,
+***************
+*** 2764,2770 ****
+ (char_u*)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+! SCRIPTID_INIT},
+ {"termwinkey", "twk", P_STRING|P_ALLOCED|P_RWIN|P_VI_DEF,
+ #ifdef FEAT_TERMINAL
+ (char_u *)VAR_WIN, PV_TWK,
+--- 2764,2770 ----
+ (char_u*)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+! SCTX_INIT},
+ {"termwinkey", "twk", P_STRING|P_ALLOCED|P_RWIN|P_VI_DEF,
+ #ifdef FEAT_TERMINAL
+ (char_u *)VAR_WIN, PV_TWK,
+***************
+*** 2773,2779 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"termwinscroll", "twsl", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
+ #ifdef FEAT_TERMINAL
+ (char_u *)&p_twsl, PV_TWSL,
+--- 2773,2779 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"termwinscroll", "twsl", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
+ #ifdef FEAT_TERMINAL
+ (char_u *)&p_twsl, PV_TWSL,
+***************
+*** 2782,2788 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"termwinsize", "tws", P_STRING|P_ALLOCED|P_RWIN|P_VI_DEF,
+ #ifdef FEAT_TERMINAL
+ (char_u *)VAR_WIN, PV_TWS,
+--- 2782,2788 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"termwinsize", "tws", P_STRING|P_ALLOCED|P_RWIN|P_VI_DEF,
+ #ifdef FEAT_TERMINAL
+ (char_u *)VAR_WIN, PV_TWS,
+***************
+*** 2791,2804 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"terse", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_terse, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"textauto", "ta", P_BOOL|P_VIM,
+ (char_u *)&p_ta, PV_NONE,
+ {(char_u *)DFLT_TEXTAUTO, (char_u *)TRUE}
+! SCRIPTID_INIT},
+ {"textmode", "tx", P_BOOL|P_VI_DEF|P_NO_MKRC,
+ (char_u *)&p_tx, PV_TX,
+ {
+--- 2791,2804 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"terse", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_terse, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"textauto", "ta", P_BOOL|P_VIM,
+ (char_u *)&p_ta, PV_NONE,
+ {(char_u *)DFLT_TEXTAUTO, (char_u *)TRUE}
+! SCTX_INIT},
+ {"textmode", "tx", P_BOOL|P_VI_DEF|P_NO_MKRC,
+ (char_u *)&p_tx, PV_TX,
+ {
+***************
+*** 2807,2846 ****
+ #else
+ (char_u *)FALSE,
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"textwidth", "tw", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
+ (char_u *)&p_tw, PV_TW,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"thesaurus", "tsr", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP|P_NDNAME,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_tsr, PV_TSR,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"tildeop", "top", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_to, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"timeout", "to", P_BOOL|P_VI_DEF,
+ (char_u *)&p_timeout, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"timeoutlen", "tm", P_NUM|P_VI_DEF,
+ (char_u *)&p_tm, PV_NONE,
+! {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT},
+ {"title", NULL, P_BOOL|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_title, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"titlelen", NULL, P_NUM|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_titlelen, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)85L, (char_u *)0L} SCRIPTID_INIT},
+ {"titleold", NULL, P_STRING|P_VI_DEF|P_GETTEXT|P_SECURE|P_NO_MKRC,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_titleold, PV_NONE,
+--- 2807,2846 ----
+ #else
+ (char_u *)FALSE,
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"textwidth", "tw", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
+ (char_u *)&p_tw, PV_TW,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"thesaurus", "tsr", P_STRING|P_EXPAND|P_VI_DEF|P_ONECOMMA|P_NODUP|P_NDNAME,
+ #ifdef FEAT_INS_EXPAND
+ (char_u *)&p_tsr, PV_TSR,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"tildeop", "top", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_to, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"timeout", "to", P_BOOL|P_VI_DEF,
+ (char_u *)&p_timeout, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"timeoutlen", "tm", P_NUM|P_VI_DEF,
+ (char_u *)&p_tm, PV_NONE,
+! {(char_u *)1000L, (char_u *)0L} SCTX_INIT},
+ {"title", NULL, P_BOOL|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_title, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"titlelen", NULL, P_NUM|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_titlelen, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)85L, (char_u *)0L} SCTX_INIT},
+ {"titleold", NULL, P_STRING|P_VI_DEF|P_GETTEXT|P_SECURE|P_NO_MKRC,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_titleold, PV_NONE,
+***************
+*** 2850,2863 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"titlestring", NULL, P_STRING|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_titlestring, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"toolbar", "tb", P_STRING|P_ONECOMMA|P_VI_DEF|P_NODUP,
+ #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32)
+ (char_u *)&p_toolbar, PV_NONE,
+--- 2850,2863 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"titlestring", NULL, P_STRING|P_VI_DEF,
+ #ifdef FEAT_TITLE
+ (char_u *)&p_titlestring, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"toolbar", "tb", P_STRING|P_ONECOMMA|P_VI_DEF|P_NODUP,
+ #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32)
+ (char_u *)&p_toolbar, PV_NONE,
+***************
+*** 2866,2872 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"toolbariconsize", "tbis", P_STRING|P_VI_DEF,
+ #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK)
+ (char_u *)&p_tbis, PV_NONE,
+--- 2866,2872 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"toolbariconsize", "tbis", P_STRING|P_VI_DEF,
+ #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK)
+ (char_u *)&p_tbis, PV_NONE,
+***************
+*** 2875,2906 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"ttimeout", NULL, P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_ttimeout, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"ttimeoutlen", "ttm", P_NUM|P_VI_DEF,
+ (char_u *)&p_ttm, PV_NONE,
+! {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
+ {"ttybuiltin", "tbi", P_BOOL|P_VI_DEF,
+ (char_u *)&p_tbi, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"ttyfast", "tf", P_BOOL|P_NO_MKRC|P_VI_DEF,
+ (char_u *)&p_tf, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"ttymouse", "ttym", P_STRING|P_NODEFAULT|P_NO_MKRC|P_VI_DEF,
+ #if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS))
+ (char_u *)&p_ttym, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"ttyscroll", "tsl", P_NUM|P_VI_DEF,
+ (char_u *)&p_ttyscroll, PV_NONE,
+! {(char_u *)999L, (char_u *)0L} SCRIPTID_INIT},
+ {"ttytype", "tty", P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
+ (char_u *)&T_NAME, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"undodir", "udir", P_STRING|P_EXPAND|P_ONECOMMA|P_NODUP|P_SECURE
+ |P_VI_DEF,
+ #ifdef FEAT_PERSISTENT_UNDO
+--- 2875,2906 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"ttimeout", NULL, P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_ttimeout, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"ttimeoutlen", "ttm", P_NUM|P_VI_DEF,
+ (char_u *)&p_ttm, PV_NONE,
+! {(char_u *)-1L, (char_u *)0L} SCTX_INIT},
+ {"ttybuiltin", "tbi", P_BOOL|P_VI_DEF,
+ (char_u *)&p_tbi, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"ttyfast", "tf", P_BOOL|P_NO_MKRC|P_VI_DEF,
+ (char_u *)&p_tf, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"ttymouse", "ttym", P_STRING|P_NODEFAULT|P_NO_MKRC|P_VI_DEF,
+ #if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS))
+ (char_u *)&p_ttym, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"ttyscroll", "tsl", P_NUM|P_VI_DEF,
+ (char_u *)&p_ttyscroll, PV_NONE,
+! {(char_u *)999L, (char_u *)0L} SCTX_INIT},
+ {"ttytype", "tty", P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL,
+ (char_u *)&T_NAME, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"undodir", "udir", P_STRING|P_EXPAND|P_ONECOMMA|P_NODUP|P_SECURE
+ |P_VI_DEF,
+ #ifdef FEAT_PERSISTENT_UNDO
+***************
+*** 2910,2923 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"undofile", "udf", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_PERSISTENT_UNDO
+ (char_u *)&p_udf, PV_UDF,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"undolevels", "ul", P_NUM|P_VI_DEF,
+ (char_u *)&p_ul, PV_UL,
+ {
+--- 2910,2923 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"undofile", "udf", P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_PERSISTENT_UNDO
+ (char_u *)&p_udf, PV_UDF,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"undolevels", "ul", P_NUM|P_VI_DEF,
+ (char_u *)&p_ul, PV_UL,
+ {
+***************
+*** 2926,2941 ****
+ #else
+ (char_u *)100L,
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"undoreload", "ur", P_NUM|P_VI_DEF,
+ (char_u *)&p_ur, PV_NONE,
+! { (char_u *)10000L, (char_u *)0L} SCRIPTID_INIT},
+ {"updatecount", "uc", P_NUM|P_VI_DEF,
+ (char_u *)&p_uc, PV_NONE,
+! {(char_u *)200L, (char_u *)0L} SCRIPTID_INIT},
+ {"updatetime", "ut", P_NUM|P_VI_DEF,
+ (char_u *)&p_ut, PV_NONE,
+! {(char_u *)4000L, (char_u *)0L} SCRIPTID_INIT},
+ {"varsofttabstop", "vsts", P_STRING|P_VI_DEF|P_VIM|P_COMMA,
+ #ifdef FEAT_VARTABS
+ (char_u *)&p_vsts, PV_VSTS,
+--- 2926,2941 ----
+ #else
+ (char_u *)100L,
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"undoreload", "ur", P_NUM|P_VI_DEF,
+ (char_u *)&p_ur, PV_NONE,
+! { (char_u *)10000L, (char_u *)0L} SCTX_INIT},
+ {"updatecount", "uc", P_NUM|P_VI_DEF,
+ (char_u *)&p_uc, PV_NONE,
+! {(char_u *)200L, (char_u *)0L} SCTX_INIT},
+ {"updatetime", "ut", P_NUM|P_VI_DEF,
+ (char_u *)&p_ut, PV_NONE,
+! {(char_u *)4000L, (char_u *)0L} SCTX_INIT},
+ {"varsofttabstop", "vsts", P_STRING|P_VI_DEF|P_VIM|P_COMMA,
+ #ifdef FEAT_VARTABS
+ (char_u *)&p_vsts, PV_VSTS,
+***************
+*** 2944,2950 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #endif
+! SCRIPTID_INIT},
+ {"vartabstop", "vts", P_STRING|P_VI_DEF|P_VIM|P_RBUF|P_COMMA,
+ #ifdef FEAT_VARTABS
+ (char_u *)&p_vts, PV_VTS,
+--- 2944,2950 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #endif
+! SCTX_INIT},
+ {"vartabstop", "vts", P_STRING|P_VI_DEF|P_VIM|P_RBUF|P_COMMA,
+ #ifdef FEAT_VARTABS
+ (char_u *)&p_vts, PV_VTS,
+***************
+*** 2953,2965 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #endif
+! SCRIPTID_INIT},
+ {"verbose", "vbs", P_NUM|P_VI_DEF,
+ (char_u *)&p_verbose, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"verbosefile", "vfile", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_vfile, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"viewdir", "vdir", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_SESSION
+ (char_u *)&p_vdir, PV_NONE,
+--- 2953,2965 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+ #endif
+! SCTX_INIT},
+ {"verbose", "vbs", P_NUM|P_VI_DEF,
+ (char_u *)&p_verbose, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"verbosefile", "vfile", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ (char_u *)&p_vfile, PV_NONE,
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"viewdir", "vdir", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #ifdef FEAT_SESSION
+ (char_u *)&p_vdir, PV_NONE,
+***************
+*** 2968,2974 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"viewoptions", "vop", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_SESSION
+ (char_u *)&p_vop, PV_NONE,
+--- 2968,2974 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"viewoptions", "vop", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_SESSION
+ (char_u *)&p_vop, PV_NONE,
+***************
+*** 2978,2984 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"viminfo", "vi", P_STRING|P_ONECOMMA|P_NODUP|P_SECURE,
+ #ifdef FEAT_VIMINFO
+ (char_u *)&p_viminfo, PV_NONE,
+--- 2978,2984 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"viminfo", "vi", P_STRING|P_ONECOMMA|P_NODUP|P_SECURE,
+ #ifdef FEAT_VIMINFO
+ (char_u *)&p_viminfo, PV_NONE,
+***************
+*** 2996,3002 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"viminfofile", "vif", P_STRING|P_EXPAND|P_ONECOMMA|P_NODUP
+ |P_SECURE|P_VI_DEF,
+ #ifdef FEAT_VIMINFO
+--- 2996,3002 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"viminfofile", "vif", P_STRING|P_EXPAND|P_ONECOMMA|P_NODUP
+ |P_SECURE|P_VI_DEF,
+ #ifdef FEAT_VIMINFO
+***************
+*** 3006,3012 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"virtualedit", "ve", P_STRING|P_ONECOMMA|P_NODUP|P_VI_DEF
+ |P_VIM|P_CURSWANT,
+ #ifdef FEAT_VIRTUALEDIT
+--- 3006,3012 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"virtualedit", "ve", P_STRING|P_ONECOMMA|P_NODUP|P_VI_DEF
+ |P_VIM|P_CURSWANT,
+ #ifdef FEAT_VIRTUALEDIT
+***************
+*** 3016,3070 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"visualbell", "vb", P_BOOL|P_VI_DEF,
+ (char_u *)&p_vb, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"w300", NULL, P_NUM|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"w1200", NULL, P_NUM|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"w9600", NULL, P_NUM|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"warn", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_warn, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"weirdinvert", "wiv", P_BOOL|P_VI_DEF|P_RCLR,
+ (char_u *)&p_wiv, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"whichwrap", "ww", P_STRING|P_VIM|P_ONECOMMA|P_FLAGLIST,
+ (char_u *)&p_ww, PV_NONE,
+! {(char_u *)"", (char_u *)"b,s"} SCRIPTID_INIT},
+ {"wildchar", "wc", P_NUM|P_VIM,
+ (char_u *)&p_wc, PV_NONE,
+ {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}
+! SCRIPTID_INIT},
+ {"wildcharm", "wcm", P_NUM|P_VI_DEF,
+ (char_u *)&p_wcm, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"wildignore", "wig", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_WILDIGN
+ (char_u *)&p_wig, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+ {"wildignorecase", "wic", P_BOOL|P_VI_DEF,
+ (char_u *)&p_wic, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"wildmenu", "wmnu", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_WILDMENU
+ (char_u *)&p_wmnu, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"wildmode", "wim", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_wim, PV_NONE,
+! {(char_u *)"full", (char_u *)0L} SCRIPTID_INIT},
+ {"wildoptions", "wop", P_STRING|P_VI_DEF,
+ #ifdef FEAT_CMDL_COMPL
+ (char_u *)&p_wop, PV_NONE,
+--- 3016,3070 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"visualbell", "vb", P_BOOL|P_VI_DEF,
+ (char_u *)&p_vb, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"w300", NULL, P_NUM|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"w1200", NULL, P_NUM|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"w9600", NULL, P_NUM|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"warn", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_warn, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"weirdinvert", "wiv", P_BOOL|P_VI_DEF|P_RCLR,
+ (char_u *)&p_wiv, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"whichwrap", "ww", P_STRING|P_VIM|P_ONECOMMA|P_FLAGLIST,
+ (char_u *)&p_ww, PV_NONE,
+! {(char_u *)"", (char_u *)"b,s"} SCTX_INIT},
+ {"wildchar", "wc", P_NUM|P_VIM,
+ (char_u *)&p_wc, PV_NONE,
+ {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}
+! SCTX_INIT},
+ {"wildcharm", "wcm", P_NUM|P_VI_DEF,
+ (char_u *)&p_wcm, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"wildignore", "wig", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ #ifdef FEAT_WILDIGN
+ (char_u *)&p_wig, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+ {"wildignorecase", "wic", P_BOOL|P_VI_DEF,
+ (char_u *)&p_wic, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"wildmenu", "wmnu", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_WILDMENU
+ (char_u *)&p_wmnu, PV_NONE,
+ #else
+ (char_u *)NULL, PV_NONE,
+ #endif
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"wildmode", "wim", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
+ (char_u *)&p_wim, PV_NONE,
+! {(char_u *)"full", (char_u *)0L} SCTX_INIT},
+ {"wildoptions", "wop", P_STRING|P_VI_DEF,
+ #ifdef FEAT_CMDL_COMPL
+ (char_u *)&p_wop, PV_NONE,
+***************
+*** 3073,3079 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"winaltkeys", "wak", P_STRING|P_VI_DEF,
+ #ifdef FEAT_WAK
+ (char_u *)&p_wak, PV_NONE,
+--- 3073,3079 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"winaltkeys", "wak", P_STRING|P_VI_DEF,
+ #ifdef FEAT_WAK
+ (char_u *)&p_wak, PV_NONE,
+***************
+*** 3082,3106 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"window", "wi", P_NUM|P_VI_DEF,
+ (char_u *)&p_window, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"winheight", "wh", P_NUM|P_VI_DEF,
+ (char_u *)&p_wh, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
+ {"winfixheight", "wfh", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)VAR_WIN, PV_WFH,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"winfixwidth", "wfw", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)VAR_WIN, PV_WFW,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"winminheight", "wmh", P_NUM|P_VI_DEF,
+ (char_u *)&p_wmh, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
+ {"winminwidth", "wmw", P_NUM|P_VI_DEF,
+ (char_u *)&p_wmw, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT},
+ {"winptydll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(WIN3264) && defined(FEAT_TERMINAL)
+ (char_u *)&p_winptydll, PV_NONE, {
+--- 3082,3106 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"window", "wi", P_NUM|P_VI_DEF,
+ (char_u *)&p_window, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"winheight", "wh", P_NUM|P_VI_DEF,
+ (char_u *)&p_wh, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCTX_INIT},
+ {"winfixheight", "wfh", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)VAR_WIN, PV_WFH,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"winfixwidth", "wfw", P_BOOL|P_VI_DEF|P_RSTAT,
+ (char_u *)VAR_WIN, PV_WFW,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"winminheight", "wmh", P_NUM|P_VI_DEF,
+ (char_u *)&p_wmh, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCTX_INIT},
+ {"winminwidth", "wmw", P_NUM|P_VI_DEF,
+ (char_u *)&p_wmw, PV_NONE,
+! {(char_u *)1L, (char_u *)0L} SCTX_INIT},
+ {"winptydll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
+ #if defined(WIN3264) && defined(FEAT_TERMINAL)
+ (char_u *)&p_winptydll, PV_NONE, {
+***************
+*** 3114,3138 ****
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCRIPTID_INIT},
+ {"winwidth", "wiw", P_NUM|P_VI_DEF,
+ (char_u *)&p_wiw, PV_NONE,
+! {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
+ {"wrap", NULL, P_BOOL|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_WRAP,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"wrapmargin", "wm", P_NUM|P_VI_DEF,
+ (char_u *)&p_wm, PV_WM,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+ {"wrapscan", "ws", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ws, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"write", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_write, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+ {"writeany", "wa", P_BOOL|P_VI_DEF,
+ (char_u *)&p_wa, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+ {"writebackup", "wb", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_wb, PV_NONE,
+ {
+--- 3114,3138 ----
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)0L, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"winwidth", "wiw", P_NUM|P_VI_DEF,
+ (char_u *)&p_wiw, PV_NONE,
+! {(char_u *)20L, (char_u *)0L} SCTX_INIT},
+ {"wrap", NULL, P_BOOL|P_VI_DEF|P_RWIN,
+ (char_u *)VAR_WIN, PV_WRAP,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"wrapmargin", "wm", P_NUM|P_VI_DEF,
+ (char_u *)&p_wm, PV_WM,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+ {"wrapscan", "ws", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ws, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"write", NULL, P_BOOL|P_VI_DEF,
+ (char_u *)&p_write, PV_NONE,
+! {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
+ {"writeany", "wa", P_BOOL|P_VI_DEF,
+ (char_u *)&p_wa, PV_NONE,
+! {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+ {"writebackup", "wb", P_BOOL|P_VI_DEF|P_VIM,
+ (char_u *)&p_wb, PV_NONE,
+ {
+***************
+*** 3141,3155 ****
+ #else
+ (char_u *)FALSE,
+ #endif
+! (char_u *)0L} SCRIPTID_INIT},
+ {"writedelay", "wd", P_NUM|P_VI_DEF,
+ (char_u *)&p_wd, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+
+ /* terminal output codes */
+ #define p_term(sss, vvv) {sss, NULL, P_STRING|P_VI_DEF|P_RALL|P_SECURE, \
+ (char_u *)&vvv, PV_NONE, \
+! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+
+ p_term("t_AB", T_CAB)
+ p_term("t_AF", T_CAF)
+--- 3141,3155 ----
+ #else
+ (char_u *)FALSE,
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"writedelay", "wd", P_NUM|P_VI_DEF,
+ (char_u *)&p_wd, PV_NONE,
+! {(char_u *)0L, (char_u *)0L} SCTX_INIT},
+
+ /* terminal output codes */
+ #define p_term(sss, vvv) {sss, NULL, P_STRING|P_VI_DEF|P_RALL|P_SECURE, \
+ (char_u *)&vvv, PV_NONE, \
+! {(char_u *)"", (char_u *)0L} SCTX_INIT},
+
+ p_term("t_AB", T_CAB)
+ p_term("t_AF", T_CAF)
+***************
+*** 3233,3239 ****
+ /* terminal key codes are not in here */
+
+ /* end marker */
+! {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL} SCRIPTID_INIT}
+ };
+
+ #define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption))
+--- 3233,3239 ----
+ /* terminal key codes are not in here */
+
+ /* end marker */
+! {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL} SCTX_INIT}
+ };
+
+ #define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption))
+***************
+*** 3314,3320 ****
+ static char_u *compile_cap_prog(synblock_T *synblock);
+ #endif
+ #ifdef FEAT_EVAL
+! static void set_option_scriptID_idx(int opt_idx, int opt_flags, int id);
+ #endif
+ static char_u *set_bool_option(int opt_idx, char_u *varp, int value, int opt_flags);
+ static char_u *set_num_option(int opt_idx, char_u *varp, long value, char_u *errbuf, size_t errbuflen, int opt_flags);
+--- 3314,3320 ----
+ static char_u *compile_cap_prog(synblock_T *synblock);
+ #endif
+ #ifdef FEAT_EVAL
+! static void set_option_sctx_idx(int opt_idx, int opt_flags, sctx_T script_ctx);
+ #endif
+ static char_u *set_bool_option(int opt_idx, char_u *varp, int value, int opt_flags);
+ static char_u *set_num_option(int opt_idx, char_u *varp, long value, char_u *errbuf, size_t errbuflen, int opt_flags);
+***************
+*** 3854,3860 ****
+ }
+
+ #ifdef FEAT_EVAL
+! set_option_scriptID_idx(opt_idx, opt_flags, current_SID);
+ #endif
+ }
+
+--- 3854,3860 ----
+ }
+
+ #ifdef FEAT_EVAL
+! set_option_sctx_idx(opt_idx, opt_flags, current_sctx);
+ #endif
+ }
+
+***************
+*** 4679,4690 ****
+ {
+ /* Mention where the option was last set. */
+ if (varp == options[opt_idx].var)
+! last_set_msg(options[opt_idx].scriptID);
+ else if ((int)options[opt_idx].indir & PV_WIN)
+! last_set_msg(curwin->w_p_scriptID[
+ (int)options[opt_idx].indir & PV_MASK]);
+ else if ((int)options[opt_idx].indir & PV_BUF)
+! last_set_msg(curbuf->b_p_scriptID[
+ (int)options[opt_idx].indir & PV_MASK]);
+ }
+ #endif
+--- 4679,4690 ----
+ {
+ /* Mention where the option was last set. */
+ if (varp == options[opt_idx].var)
+! last_set_msg(options[opt_idx].script_ctx);
+ else if ((int)options[opt_idx].indir & PV_WIN)
+! last_set_msg(curwin->w_p_script_ctx[
+ (int)options[opt_idx].indir & PV_MASK]);
+ else if ((int)options[opt_idx].indir & PV_BUF)
+! last_set_msg(curbuf->b_p_script_ctx[
+ (int)options[opt_idx].indir & PV_MASK]);
+ }
+ #endif
+***************
+*** 5889,5896 ****
+ * Set a string option to a new value (without checking the effect).
+ * The string is copied into allocated memory.
+ * if ("opt_idx" == -1) "name" is used, otherwise "opt_idx" is used.
+! * When "set_sid" is zero set the scriptID to current_SID. When "set_sid" is
+! * SID_NONE don't set the scriptID. Otherwise set the scriptID to "set_sid".
+ */
+ void
+ set_string_option_direct(
+--- 5889,5897 ----
+ * Set a string option to a new value (without checking the effect).
+ * The string is copied into allocated memory.
+ * if ("opt_idx" == -1) "name" is used, otherwise "opt_idx" is used.
+! * When "set_sid" is zero set the scriptID to current_sctx.sc_sid. When
+! * "set_sid" is SID_NONE don't set the scriptID. Otherwise set the scriptID to
+! * "set_sid".
+ */
+ void
+ set_string_option_direct(
+***************
+*** 5943,5950 ****
+ }
+ # ifdef FEAT_EVAL
+ if (set_sid != SID_NONE)
+! set_option_scriptID_idx(idx, opt_flags,
+! set_sid == 0 ? current_SID : set_sid);
+ # endif
+ }
+ }
+--- 5944,5961 ----
+ }
+ # ifdef FEAT_EVAL
+ if (set_sid != SID_NONE)
+! {
+! sctx_T script_ctx;
+!
+! if (set_sid == 0)
+! script_ctx = current_sctx;
+! else
+! {
+! script_ctx.sc_sid = set_sid;
+! script_ctx.sc_lnum = 0;
+! }
+! set_option_sctx_idx(idx, opt_flags, script_ctx);
+! }
+ # endif
+ }
+ }
+***************
+*** 7656,7662 ****
+ {
+ #ifdef FEAT_EVAL
+ /* Remember where the option was set. */
+! set_option_scriptID_idx(opt_idx, opt_flags, current_SID);
+ #endif
+ /*
+ * Free string options that are in allocated memory.
+--- 7667,7673 ----
+ {
+ #ifdef FEAT_EVAL
+ /* Remember where the option was set. */
+! set_option_sctx_idx(opt_idx, opt_flags, current_sctx);
+ #endif
+ /*
+ * Free string options that are in allocated memory.
+***************
+*** 8215,8239 ****
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+ /*
+! * Set the scriptID for an option, taking care of setting the buffer- or
+ * window-local value.
+ */
+ static void
+! set_option_scriptID_idx(int opt_idx, int opt_flags, int id)
+ {
+ int both = (opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0;
+ int indir = (int)options[opt_idx].indir;
+
+ /* Remember where the option was set. For local options need to do that
+ * in the buffer or window structure. */
+ if (both || (opt_flags & OPT_GLOBAL) || (indir & (PV_BUF|PV_WIN)) == 0)
+! options[opt_idx].scriptID = id;
+ if (both || (opt_flags & OPT_LOCAL))
+ {
+ if (indir & PV_BUF)
+! curbuf->b_p_scriptID[indir & PV_MASK] = id;
+ else if (indir & PV_WIN)
+! curwin->w_p_scriptID[indir & PV_MASK] = id;
+ }
+ }
+ #endif
+--- 8226,8253 ----
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+ /*
+! * Set the script_ctx for an option, taking care of setting the buffer- or
+ * window-local value.
+ */
+ static void
+! set_option_sctx_idx(int opt_idx, int opt_flags, sctx_T script_ctx)
+ {
+ int both = (opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0;
+ int indir = (int)options[opt_idx].indir;
++ sctx_T new_script_ctx = script_ctx;
++
++ new_script_ctx.sc_lnum += sourcing_lnum;
+
+ /* Remember where the option was set. For local options need to do that
+ * in the buffer or window structure. */
+ if (both || (opt_flags & OPT_GLOBAL) || (indir & (PV_BUF|PV_WIN)) == 0)
+! options[opt_idx].script_ctx = new_script_ctx;
+ if (both || (opt_flags & OPT_LOCAL))
+ {
+ if (indir & PV_BUF)
+! curbuf->b_p_script_ctx[indir & PV_MASK] = new_script_ctx;
+ else if (indir & PV_WIN)
+! curwin->w_p_script_ctx[indir & PV_MASK] = new_script_ctx;
+ }
+ }
+ #endif
+***************
+*** 8262,8268 ****
+ *(int *)varp = value; /* set the new value */
+ #ifdef FEAT_EVAL
+ /* Remember where the option was set. */
+! set_option_scriptID_idx(opt_idx, opt_flags, current_SID);
+ #endif
+
+ #ifdef FEAT_GUI
+--- 8276,8282 ----
+ *(int *)varp = value; /* set the new value */
+ #ifdef FEAT_EVAL
+ /* Remember where the option was set. */
+! set_option_sctx_idx(opt_idx, opt_flags, current_sctx);
+ #endif
+
+ #ifdef FEAT_GUI
+***************
+*** 8898,8904 ****
+ *pp = value;
+ #ifdef FEAT_EVAL
+ /* Remember where the option was set. */
+! set_option_scriptID_idx(opt_idx, opt_flags, current_SID);
+ #endif
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+--- 8912,8918 ----
+ *pp = value;
+ #ifdef FEAT_EVAL
+ /* Remember where the option was set. */
+! set_option_sctx_idx(opt_idx, opt_flags, current_sctx);
+ #endif
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+*** ../vim-8.1.0361/src/proto/eval.pro 2018-08-01 19:05:59.278223228 +0200
+--- src/proto/eval.pro 2018-09-10 19:45:33.380367357 +0200
+***************
+*** 119,125 ****
+ int read_viminfo_varlist(vir_T *virp, int writing);
+ void write_viminfo_varlist(FILE *fp);
+ int store_session_globals(FILE *fd);
+! void last_set_msg(scid_T scriptID);
+ void reset_v_option_vars(void);
+ void prepare_assert_error(garray_T *gap);
+ void assert_error(garray_T *gap);
+--- 119,125 ----
+ int read_viminfo_varlist(vir_T *virp, int writing);
+ void write_viminfo_varlist(FILE *fp);
+ int store_session_globals(FILE *fd);
+! void last_set_msg(sctx_T script_ctx);
+ void reset_v_option_vars(void);
+ void prepare_assert_error(garray_T *gap);
+ void assert_error(garray_T *gap);
+*** ../vim-8.1.0361/src/structs.h 2018-09-10 17:50:32.713306941 +0200
+--- src/structs.h 2018-09-10 20:18:06.669433878 +0200
+***************
+*** 75,80 ****
+--- 75,93 ----
+ #endif
+
+ /*
++ * SCript ConteXt (SCTX): identifies a script script line.
++ * When sourcing a script "sc_lnum" is zero, "sourcing_lnum" is the current
++ * line number. When executing a user function "sc_lnum" is the line where the
++ * function was defined, "sourcing_lnum" is the line number inside the
++ * function. When stored with a function, mapping, option, etc. "sc_lnum" is
++ * the line number in the script "sc_sid".
++ */
++ typedef struct {
++ scid_T sc_sid; // script ID
++ linenr_T sc_lnum; // line number
++ } sctx_T;
++
++ /*
+ * Reference to a buffer that stores the value of buf_free_count.
+ * bufref_valid() only needs to check "buf" when the count differs.
+ */
+***************
+*** 278,285 ****
+ #endif
+
+ #ifdef FEAT_EVAL
+! int wo_scriptID[WV_COUNT]; /* SIDs for window-local options */
+! # define w_p_scriptID w_onebuf_opt.wo_scriptID
+ #endif
+ } winopt_T;
+
+--- 291,298 ----
+ #endif
+
+ #ifdef FEAT_EVAL
+! sctx_T wo_script_ctx[WV_COUNT]; /* SCTXs for window-local options */
+! # define w_p_script_ctx w_onebuf_opt.wo_script_ctx
+ #endif
+ } winopt_T;
+
+***************
+*** 541,547 ****
+ int xp_pattern_len; /* bytes in xp_pattern before cursor */
+ #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+ char_u *xp_arg; /* completion function */
+! int xp_scriptID; /* SID for completion function */
+ #endif
+ int xp_backslash; /* one of the XP_BS_ values */
+ #ifndef BACKSLASH_IN_FILENAME
+--- 554,560 ----
+ int xp_pattern_len; /* bytes in xp_pattern before cursor */
+ #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+ char_u *xp_arg; /* completion function */
+! sctx_T xp_script_ctx; /* SCTX for completion function */
+ #endif
+ int xp_backslash; /* one of the XP_BS_ values */
+ #ifndef BACKSLASH_IN_FILENAME
+***************
+*** 1071,1077 ****
+ char m_nowait; /* <nowait> used */
+ #ifdef FEAT_EVAL
+ char m_expr; /* <expr> used, m_str is an expression */
+! scid_T m_script_ID; /* ID of script where map was defined */
+ #endif
+ };
+
+--- 1084,1090 ----
+ char m_nowait; /* <nowait> used */
+ #ifdef FEAT_EVAL
+ char m_expr; /* <expr> used, m_str is an expression */
+! sctx_T m_script_ctx; /* SCTX where map was defined */
+ #endif
+ };
+
+***************
+*** 1361,1367 ****
+ int uf_tml_idx; /* index of line being timed; -1 if none */
+ int uf_tml_execed; /* line being timed was executed */
+ #endif
+! scid_T uf_script_ID; /* ID of script where function was defined,
+ used for s: variables */
+ int uf_refcount; /* reference count, see func_name_refcount() */
+ funccall_T *uf_scoped; /* l: local variables for closure */
+--- 1374,1380 ----
+ int uf_tml_idx; /* index of line being timed; -1 if none */
+ int uf_tml_execed; /* line being timed was executed */
+ #endif
+! sctx_T uf_script_ctx; /* SCTX where function was defined,
+ used for s: variables */
+ int uf_refcount; /* reference count, see func_name_refcount() */
+ funccall_T *uf_scoped; /* l: local variables for closure */
+***************
+*** 2123,2129 ****
+ int b_p_initialized; /* set when options initialized */
+
+ #ifdef FEAT_EVAL
+! int b_p_scriptID[BV_COUNT]; /* SIDs for buffer-local options */
+ #endif
+
+ int b_p_ai; /* 'autoindent' */
+--- 2136,2142 ----
+ int b_p_initialized; /* set when options initialized */
+
+ #ifdef FEAT_EVAL
+! sctx_T b_p_script_ctx[BV_COUNT]; /* SCTXs for buffer-local options */
+ #endif
+
+ int b_p_ai; /* 'autoindent' */
+*** ../vim-8.1.0361/src/syntax.c 2018-07-20 19:56:06.006997358 +0200
+--- src/syntax.c 2018-09-10 20:08:06.315847823 +0200
+***************
+*** 58,64 ****
+ int sg_link; /* link to this highlight group ID */
+ int sg_set; /* combination of SG_* flags */
+ #ifdef FEAT_EVAL
+! scid_T sg_scriptID; /* script in which the group was last set */
+ #endif
+ };
+
+--- 58,64 ----
+ int sg_link; /* link to this highlight group ID */
+ int sg_set; /* combination of SG_* flags */
+ #ifdef FEAT_EVAL
+! sctx_T sg_script_ctx; /* script in which the group was last set */
+ #endif
+ };
+
+***************
+*** 7507,7513 ****
+ }
+ else if (HL_TABLE()[from_id - 1].sg_link != to_id
+ #ifdef FEAT_EVAL
+! || HL_TABLE()[from_id - 1].sg_scriptID != current_SID
+ #endif
+ || HL_TABLE()[from_id - 1].sg_cleared)
+ {
+--- 7507,7514 ----
+ }
+ else if (HL_TABLE()[from_id - 1].sg_link != to_id
+ #ifdef FEAT_EVAL
+! || HL_TABLE()[from_id - 1].sg_script_ctx.sc_sid
+! != current_sctx.sc_sid
+ #endif
+ || HL_TABLE()[from_id - 1].sg_cleared)
+ {
+***************
+*** 7515,7521 ****
+ HL_TABLE()[from_id - 1].sg_set |= SG_LINK;
+ HL_TABLE()[from_id - 1].sg_link = to_id;
+ #ifdef FEAT_EVAL
+! HL_TABLE()[from_id - 1].sg_scriptID = current_SID;
+ #endif
+ HL_TABLE()[from_id - 1].sg_cleared = FALSE;
+ redraw_all_later(SOME_VALID);
+--- 7516,7523 ----
+ HL_TABLE()[from_id - 1].sg_set |= SG_LINK;
+ HL_TABLE()[from_id - 1].sg_link = to_id;
+ #ifdef FEAT_EVAL
+! HL_TABLE()[from_id - 1].sg_script_ctx = current_sctx;
+! HL_TABLE()[from_id - 1].sg_script_ctx.sc_lnum += sourcing_lnum;
+ #endif
+ HL_TABLE()[from_id - 1].sg_cleared = FALSE;
+ redraw_all_later(SOME_VALID);
+***************
+*** 8277,8283 ****
+ else
+ set_hl_attr(idx);
+ #ifdef FEAT_EVAL
+! HL_TABLE()[idx].sg_scriptID = current_SID;
+ #endif
+ }
+
+--- 8279,8286 ----
+ else
+ set_hl_attr(idx);
+ #ifdef FEAT_EVAL
+! HL_TABLE()[idx].sg_script_ctx = current_sctx;
+! HL_TABLE()[idx].sg_script_ctx.sc_lnum += sourcing_lnum;
+ #endif
+ }
+
+***************
+*** 8404,8410 ****
+ /* Clear the script ID only when there is no link, since that is not
+ * cleared. */
+ if (HL_TABLE()[idx].sg_link == 0)
+! HL_TABLE()[idx].sg_scriptID = 0;
+ #endif
+ }
+
+--- 8407,8416 ----
+ /* Clear the script ID only when there is no link, since that is not
+ * cleared. */
+ if (HL_TABLE()[idx].sg_link == 0)
+! {
+! HL_TABLE()[idx].sg_script_ctx.sc_sid = 0;
+! HL_TABLE()[idx].sg_script_ctx.sc_lnum = 0;
+! }
+ #endif
+ }
+
+***************
+*** 9272,9278 ****
+ highlight_list_arg(id, didh, LIST_STRING, 0, (char_u *)"cleared", "");
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+! last_set_msg(sgp->sg_scriptID);
+ #endif
+ }
+
+--- 9278,9284 ----
+ highlight_list_arg(id, didh, LIST_STRING, 0, (char_u *)"cleared", "");
+ #ifdef FEAT_EVAL
+ if (p_verbose > 0)
+! last_set_msg(sgp->sg_script_ctx);
+ #endif
+ }
+
+*** ../vim-8.1.0361/src/testdir/test_alot.vim 2018-08-07 21:39:09.251060096 +0200
+--- src/testdir/test_alot.vim 2018-09-10 19:45:33.380367357 +0200
+***************
+*** 14,19 ****
+--- 14,20 ----
+ source test_execute_func.vim
+ source test_expand.vim
+ source test_expand_dllpath.vim
++ source test_expand_func.vim
+ source test_expr.vim
+ source test_feedkeys.vim
+ source test_file_perm.vim
+*** ../vim-8.1.0361/src/testdir/test_expand_func.vim 2018-09-10 21:02:19.285589846 +0200
+--- src/testdir/test_expand_func.vim 2018-09-10 19:52:46.982566605 +0200
+***************
+*** 0 ****
+--- 1,66 ----
++ " Tests for expand()
++
++ let s:sfile = expand('<sfile>')
++ let s:slnum = str2nr(expand('<slnum>'))
++ let s:sflnum = str2nr(expand('<sflnum>'))
++
++ func s:expand_sfile()
++ return expand('<sfile>')
++ endfunc
++
++ func s:expand_slnum()
++ return str2nr(expand('<slnum>'))
++ endfunc
++
++ func s:expand_sflnum()
++ return str2nr(expand('<sflnum>'))
++ endfunc
++
++ func Test_expand_sfile()
++ call assert_match('test_expand_func\.vim$', s:sfile)
++ call assert_match('^function .*\.\.Test_expand_sfile$', expand('<sfile>'))
++
++ " Call in script-local function
++ call assert_match('^function .*\.\.Test_expand_sfile\[5\]\.\.<SNR>\d\+_expand_sfile$', s:expand_sfile())
++
++ " Call in command
++ command Sfile echo expand('<sfile>')
++ call assert_match('^function .*\.\.Test_expand_sfile$', trim(execute('Sfile')))
++ delcommand Sfile
++ endfunc
++
++ func Test_expand_slnum()
++ call assert_equal(4, s:slnum)
++ call assert_equal(2, str2nr(expand('<slnum>')))
++
++ " Line-continuation
++ call assert_equal(
++ \ 5,
++ \ str2nr(expand('<slnum>')))
++
++ " Call in script-local function
++ call assert_equal(1, s:expand_slnum())
++
++ " Call in command
++ command Slnum echo expand('<slnum>')
++ call assert_equal(14, str2nr(trim(execute('Slnum'))))
++ delcommand Slnum
++ endfunc
++
++ func Test_expand_sflnum()
++ call assert_equal(5, s:sflnum)
++ call assert_equal(52, str2nr(expand('<sflnum>')))
++
++ " Line-continuation
++ call assert_equal(
++ \ 55,
++ \ str2nr(expand('<sflnum>')))
++
++ " Call in script-local function
++ call assert_equal(16, s:expand_sflnum())
++
++ " Call in command
++ command Flnum echo expand('<sflnum>')
++ call assert_equal(64, str2nr(trim(execute('Flnum'))))
++ delcommand Flnum
++ endfunc
+*** ../vim-8.1.0361/src/testdir/test_maparg.vim 2018-05-21 13:28:40.320041589 +0200
+--- src/testdir/test_maparg.vim 2018-09-10 20:53:41.911220447 +0200
+***************
+*** 13,31 ****
+ set cpo-=<
+ set encoding=utf8
+ " Test maparg() with a string result
+ map foo<C-V> is<F4>foo
+ vnoremap <script> <buffer> <expr> <silent> bar isbar
+- let sid = s:SID()
+ call assert_equal("is<F4>foo", maparg('foo<C-V>'))
+ call assert_equal({'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>',
+! \ 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': sid, 'rhs': 'is<F4>foo',
+! \ 'buffer': 0}, maparg('foo<C-V>', '', 0, 1))
+ call assert_equal({'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v',
+! \ 'nowait': 0, 'expr': 1, 'sid': sid, 'rhs': 'isbar', 'buffer': 1},
+ \ maparg('bar', '', 0, 1))
+ map <buffer> <nowait> foo bar
+ call assert_equal({'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ',
+! \ 'nowait': 1, 'expr': 0, 'sid': sid, 'rhs': 'bar', 'buffer': 1},
+ \ maparg('foo', '', 0, 1))
+
+ map abc x<char-114>x
+--- 13,36 ----
+ set cpo-=<
+ set encoding=utf8
+ " Test maparg() with a string result
++ let sid = s:SID()
++ let lnum = expand('<sflnum>')
+ map foo<C-V> is<F4>foo
+ vnoremap <script> <buffer> <expr> <silent> bar isbar
+ call assert_equal("is<F4>foo", maparg('foo<C-V>'))
+ call assert_equal({'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>',
+! \ 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': sid, 'lnum': lnum + 1,
+! \ 'rhs': 'is<F4>foo', 'buffer': 0},
+! \ maparg('foo<C-V>', '', 0, 1))
+ call assert_equal({'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v',
+! \ 'nowait': 0, 'expr': 1, 'sid': sid, 'lnum': lnum + 2,
+! \ 'rhs': 'isbar', 'buffer': 1},
+ \ maparg('bar', '', 0, 1))
++ let lnum = expand('<sflnum>')
+ map <buffer> <nowait> foo bar
+ call assert_equal({'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ',
+! \ 'nowait': 1, 'expr': 0, 'sid': sid, 'lnum': lnum + 1, 'rhs': 'bar',
+! \ 'buffer': 1},
+ \ maparg('foo', '', 0, 1))
+
+ map abc x<char-114>x
+*** ../vim-8.1.0361/src/term.c 2018-08-21 13:09:06.250115910 +0200
+--- src/term.c 2018-09-10 20:08:15.351746667 +0200
+***************
+*** 6128,6134 ****
+ */
+ if (STRNICMP(src, "<SID>", 5) == 0)
+ {
+! if (current_SID <= 0)
+ EMSG(_(e_usingsid));
+ else
+ {
+--- 6128,6134 ----
+ */
+ if (STRNICMP(src, "<SID>", 5) == 0)
+ {
+! if (current_sctx.sc_sid <= 0)
+ EMSG(_(e_usingsid));
+ else
+ {
+***************
+*** 6136,6142 ****
+ result[dlen++] = K_SPECIAL;
+ result[dlen++] = (int)KS_EXTRA;
+ result[dlen++] = (int)KE_SNR;
+! sprintf((char *)result + dlen, "%ld", (long)current_SID);
+ dlen += (int)STRLEN(result + dlen);
+ result[dlen++] = '_';
+ continue;
+--- 6136,6143 ----
+ result[dlen++] = K_SPECIAL;
+ result[dlen++] = (int)KS_EXTRA;
+ result[dlen++] = (int)KE_SNR;
+! sprintf((char *)result + dlen, "%ld",
+! (long)current_sctx.sc_sid);
+ dlen += (int)STRLEN(result + dlen);
+ result[dlen++] = '_';
+ continue;
+*** ../vim-8.1.0361/src/userfunc.c 2018-07-29 17:40:37.239467625 +0200
+--- src/userfunc.c 2018-09-10 20:08:27.575609884 +0200
+***************
+*** 302,308 ****
+ fp->uf_varargs = TRUE;
+ fp->uf_flags = flags;
+ fp->uf_calls = 0;
+! fp->uf_script_ID = current_SID;
+
+ pt->pt_func = fp;
+ pt->pt_refcount = 1;
+--- 302,309 ----
+ fp->uf_varargs = TRUE;
+ fp->uf_flags = flags;
+ fp->uf_calls = 0;
+! fp->uf_script_ctx = current_sctx;
+! fp->uf_script_ctx.sc_lnum += sourcing_lnum - newlines.ga_len;
+
+ pt->pt_func = fp;
+ pt->pt_refcount = 1;
+***************
+*** 505,515 ****
+ i = 3;
+ if (eval_fname_sid(name)) /* "<SID>" or "s:" */
+ {
+! if (current_SID <= 0)
+ *error = ERROR_SCRIPT;
+ else
+ {
+! sprintf((char *)fname_buf + 3, "%ld_", (long)current_SID);
+ i = (int)STRLEN(fname_buf);
+ }
+ }
+--- 506,516 ----
+ i = 3;
+ if (eval_fname_sid(name)) /* "<SID>" or "s:" */
+ {
+! if (current_sctx.sc_sid <= 0)
+ *error = ERROR_SCRIPT;
+ else
+ {
+! sprintf((char *)fname_buf + 3, "%ld_", (long)current_sctx.sc_sid);
+ i = (int)STRLEN(fname_buf);
+ }
+ }
+***************
+*** 690,696 ****
+ {
+ char_u *save_sourcing_name;
+ linenr_T save_sourcing_lnum;
+! scid_T save_current_SID;
+ int using_sandbox = FALSE;
+ funccall_T *fc;
+ int save_did_emsg;
+--- 691,697 ----
+ {
+ char_u *save_sourcing_name;
+ linenr_T save_sourcing_lnum;
+! sctx_T save_current_sctx;
+ int using_sandbox = FALSE;
+ funccall_T *fc;
+ int save_did_emsg;
+***************
+*** 944,951 ****
+ }
+ #endif
+
+! save_current_SID = current_SID;
+! current_SID = fp->uf_script_ID;
+ save_did_emsg = did_emsg;
+ did_emsg = FALSE;
+
+--- 945,952 ----
+ }
+ #endif
+
+! save_current_sctx = current_sctx;
+! current_sctx = fp->uf_script_ctx;
+ save_did_emsg = did_emsg;
+ did_emsg = FALSE;
+
+***************
+*** 1026,1032 ****
+ vim_free(sourcing_name);
+ sourcing_name = save_sourcing_name;
+ sourcing_lnum = save_sourcing_lnum;
+! current_SID = save_current_SID;
+ #ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+ script_prof_restore(&wait_start);
+--- 1027,1033 ----
+ vim_free(sourcing_name);
+ sourcing_name = save_sourcing_name;
+ sourcing_lnum = save_sourcing_lnum;
+! current_sctx = save_current_sctx;
+ #ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+ script_prof_restore(&wait_start);
+***************
+*** 1574,1580 ****
+ MSG_PUTS(" closure");
+ msg_clr_eos();
+ if (p_verbose > 0)
+! last_set_msg(fp->uf_script_ID);
+ }
+
+ /*
+--- 1575,1581 ----
+ MSG_PUTS(" closure");
+ msg_clr_eos();
+ if (p_verbose > 0)
+! last_set_msg(fp->uf_script_ctx);
+ }
+
+ /*
+***************
+*** 1757,1768 ****
+ || eval_fname_sid(*pp))
+ {
+ /* It's "s:" or "<SID>" */
+! if (current_SID <= 0)
+ {
+ EMSG(_(e_usingsid));
+ goto theend;
+ }
+! sprintf((char *)sid_buf, "%ld_", (long)current_SID);
+ lead += (int)STRLEN(sid_buf);
+ }
+ }
+--- 1758,1769 ----
+ || eval_fname_sid(*pp))
+ {
+ /* It's "s:" or "<SID>" */
+! if (current_sctx.sc_sid <= 0)
+ {
+ EMSG(_(e_usingsid));
+ goto theend;
+ }
+! sprintf((char *)sid_buf, "%ld_", (long)current_sctx.sc_sid);
+ lead += (int)STRLEN(sid_buf);
+ }
+ }
+***************
+*** 2454,2460 ****
+ flags |= FC_SANDBOX;
+ fp->uf_flags = flags;
+ fp->uf_calls = 0;
+! fp->uf_script_ID = current_SID;
+ goto ret_free;
+
+ erret:
+--- 2455,2462 ----
+ flags |= FC_SANDBOX;
+ fp->uf_flags = flags;
+ fp->uf_calls = 0;
+! fp->uf_script_ctx = current_sctx;
+! fp->uf_script_ctx.sc_lnum += sourcing_lnum - newlines.ga_len - 1;
+ goto ret_free;
+
+ erret:
+*** ../vim-8.1.0361/src/version.c 2018-09-10 19:03:01.641716307 +0200
+--- src/version.c 2018-09-10 20:58:39.847970755 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 362,
+ /**/
+
+--
+If you put 7 of the most talented OSS developers in a room for a week
+and asked them to fix a bug in a spreadsheet program, in 1 week
+you'd have 2 new mail readers and a text-based web browser.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0363 b/data/vim/patches/8.1.0363
new file mode 100644
index 000000000..2d32cea51
--- /dev/null
+++ b/data/vim/patches/8.1.0363
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0363
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0363
+Problem: Internal diff isn't used by default as advertised.
+Solution: Add "internal" to the default value of 'diffopt'.
+ Also add couple of files missing from the distribution.
+Files: src/option.c, runtime/doc/options.txt, Filelist
+
+
+*** ../vim-8.1.0362/src/option.c 2018-09-10 21:04:09.872392623 +0200
+--- src/option.c 2018-09-10 21:09:19.469047161 +0200
+***************
+*** 1049,1055 ****
+ |P_NODUP,
+ #ifdef FEAT_DIFF
+ (char_u *)&p_dip, PV_NONE,
+! {(char_u *)"filler", (char_u *)NULL}
+ #else
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+--- 1049,1055 ----
+ |P_NODUP,
+ #ifdef FEAT_DIFF
+ (char_u *)&p_dip, PV_NONE,
+! {(char_u *)"internal,filler", (char_u *)NULL}
+ #else
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)"", (char_u *)NULL}
+*** ../vim-8.1.0362/runtime/doc/options.txt 2018-09-10 17:50:32.709306979 +0200
+--- runtime/doc/options.txt 2018-09-10 21:06:27.070909112 +0200
+***************
+*** 2611,2617 ****
+ security reasons.
+
+ *'dip'* *'diffopt'*
+! 'diffopt' 'dip' string (default "filler")
+ global
+ {not in Vi}
+ {not available when compiled without the |+diff|
+--- 2615,2621 ----
+ security reasons.
+
+ *'dip'* *'diffopt'*
+! 'diffopt' 'dip' string (default "internal,filler")
+ global
+ {not in Vi}
+ {not available when compiled without the |+diff|
+*** ../vim-8.1.0362/Filelist 2018-09-10 17:50:32.705307018 +0200
+--- Filelist 2018-09-10 17:52:51.711962221 +0200
+***************
+*** 273,278 ****
+--- 273,280 ----
+ src/libvterm/t/92lp1640917.test \
+ src/libvterm/t/harness.c \
+ src/libvterm/t/run-test.pl \
++ src/xdiff/COPYING \
++ src/xdiff/README.txt \
+ src/xdiff/xdiff.h \
+ src/xdiff/xdiffi.c \
+ src/xdiff/xdiffi.h \
+*** ../vim-8.1.0362/src/version.c 2018-09-10 21:04:09.876392579 +0200
+--- src/version.c 2018-09-10 21:11:36.403569515 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 363,
+ /**/
+
+--
+Give a man a computer program and you give him a headache,
+but teach him to program computers and you give him the power
+to create headaches for others for the rest of his life...
+ R. B. Forest
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0364 b/data/vim/patches/8.1.0364
new file mode 100644
index 000000000..acf9d68b0
--- /dev/null
+++ b/data/vim/patches/8.1.0364
@@ -0,0 +1,66 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0364
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0364
+Problem: Compiler warning in xdiff code. (Yegappan Lakshmanan)
+Solution: Initialize directly.
+Files: src/xdiff/xemit.c, src/xdiff/README.txt
+
+
+*** ../vim-8.1.0363/src/xdiff/xemit.c 2018-09-10 17:50:32.713306941 +0200
+--- src/xdiff/xemit.c 2018-09-10 21:20:06.522070927 +0200
+***************
+*** 169,175 ****
+ long s1, s2, e1, e2, lctx;
+ xdchange_t *xch, *xche;
+ long funclineprev = -1;
+! struct func_line func_line = { 0 };
+
+ for (xch = xscr; xch; xch = xche->next) {
+ xche = xdl_get_hunk(&xch, xecfg);
+--- 169,177 ----
+ long s1, s2, e1, e2, lctx;
+ xdchange_t *xch, *xche;
+ long funclineprev = -1;
+! struct func_line func_line;
+!
+! func_line.len = 0;
+
+ for (xch = xscr; xch; xch = xche->next) {
+ xche = xdl_get_hunk(&xch, xecfg);
+*** ../vim-8.1.0363/src/xdiff/README.txt 2018-09-10 17:50:32.717306902 +0200
+--- src/xdiff/README.txt 2018-09-10 21:17:33.827716111 +0200
+***************
+*** 11,14 ****
+--- 11,16 ----
+ The code is distributed under the GNU LGPL license. It is included in the
+ COPYING file.
+
++ Changes in these files were made to avoid compiler warnings.
++
+ The first work for including xdiff in Vim was done by Christian Brabandt.
+*** ../vim-8.1.0363/src/version.c 2018-09-10 21:15:34.637000672 +0200
+--- src/version.c 2018-09-10 21:21:42.117041159 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 364,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+30. Even though you died last week, you've managed to retain OPS on your
+ favorite IRC channel.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0365 b/data/vim/patches/8.1.0365
new file mode 100644
index 000000000..12044158a
--- /dev/null
+++ b/data/vim/patches/8.1.0365
@@ -0,0 +1,465 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0365
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0365
+Problem: Function profile doesn't specify where it was defined.
+Solution: Show the script name and line number.
+Files: src/userfunc.c, src/testdir/test_profile.vim
+
+
+*** ../vim-8.1.0364/src/userfunc.c 2018-09-10 21:04:09.876392579 +0200
+--- src/userfunc.c 2018-09-10 21:46:54.792416184 +0200
+***************
+*** 2587,2592 ****
+--- 2587,2593 ----
+ int i;
+ ufunc_T **sorttab;
+ int st_len = 0;
++ char_u *p;
+
+ todo = (int)func_hashtab.ht_used;
+ if (todo == 0)
+***************
+*** 2609,2614 ****
+--- 2610,2623 ----
+ fprintf(fd, "FUNCTION <SNR>%s()\n", fp->uf_name + 3);
+ else
+ fprintf(fd, "FUNCTION %s()\n", fp->uf_name);
++ p = home_replace_save(NULL,
++ get_scriptname(fp->uf_script_ctx.sc_sid));
++ if (p != NULL)
++ {
++ fprintf(fd, " Defined: %s line %ld\n",
++ p, (long)fp->uf_script_ctx.sc_lnum);
++ vim_free(p);
++ }
+ if (fp->uf_tm_count == 1)
+ fprintf(fd, "Called 1 time\n");
+ else
+*** ../vim-8.1.0364/src/testdir/test_profile.vim 2018-08-21 17:49:50.993308900 +0200
+--- src/testdir/test_profile.vim 2018-09-10 21:59:08.860596961 +0200
+***************
+*** 49,84 ****
+ " - Unlike Foo3(), Foo2() should not be deleted since there is a check
+ " for v:profiling.
+ " - Bar() is not reported since it does not match "profile func Foo*".
+! call assert_equal(28, len(lines))
+
+ call assert_equal('FUNCTION Foo1()', lines[0])
+! call assert_equal('Called 2 times', lines[1])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3])
+! call assert_equal('', lines[4])
+! call assert_equal('count total (s) self (s)', lines[5])
+! call assert_equal('', lines[6])
+! call assert_equal('FUNCTION Foo2()', lines[7])
+! call assert_equal('Called 1 time', lines[8])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[9])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[10])
+! call assert_equal('', lines[11])
+! call assert_equal('count total (s) self (s)', lines[12])
+! call assert_match('^\s*1\s\+.*\slet l:count = 100$', lines[13])
+! call assert_match('^\s*101\s\+.*\swhile l:count > 0$', lines[14])
+! call assert_match('^\s*100\s\+.*\s let l:count = l:count - 1$', lines[15])
+! call assert_match('^\s*101\s\+.*\sendwhile$', lines[16])
+! call assert_equal('', lines[17])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[18])
+! call assert_equal('count total (s) self (s) function', lines[19])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[20])
+! call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[21])
+! call assert_equal('', lines[22])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[23])
+! call assert_equal('count total (s) self (s) function', lines[24])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[25])
+! call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[26])
+! call assert_equal('', lines[27])
+
+ call delete('Xprofile_func.vim')
+ call delete('Xprofile_func.log')
+--- 49,85 ----
+ " - Unlike Foo3(), Foo2() should not be deleted since there is a check
+ " for v:profiling.
+ " - Bar() is not reported since it does not match "profile func Foo*".
+! call assert_equal(30, len(lines))
+
+ call assert_equal('FUNCTION Foo1()', lines[0])
+! call assert_match('Defined:.*Xprofile_func.vim', lines[1])
+! call assert_equal('Called 2 times', lines[2])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[3])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[4])
+! call assert_equal('', lines[5])
+! call assert_equal('count total (s) self (s)', lines[6])
+! call assert_equal('', lines[7])
+! call assert_equal('FUNCTION Foo2()', lines[8])
+! call assert_equal('Called 1 time', lines[10])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[11])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[12])
+! call assert_equal('', lines[13])
+! call assert_equal('count total (s) self (s)', lines[14])
+! call assert_match('^\s*1\s\+.*\slet l:count = 100$', lines[15])
+! call assert_match('^\s*101\s\+.*\swhile l:count > 0$', lines[16])
+! call assert_match('^\s*100\s\+.*\s let l:count = l:count - 1$', lines[17])
+! call assert_match('^\s*101\s\+.*\sendwhile$', lines[18])
+! call assert_equal('', lines[19])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[20])
+! call assert_equal('count total (s) self (s) function', lines[21])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[22])
+! call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[23])
+! call assert_equal('', lines[24])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[25])
+! call assert_equal('count total (s) self (s) function', lines[26])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[27])
+! call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[28])
+! call assert_equal('', lines[29])
+
+ call delete('Xprofile_func.vim')
+ call delete('Xprofile_func.log')
+***************
+*** 132,193 ****
+ " - Foo1() should pass 'if' block.
+ " - Foo2() should pass 'elseif' block.
+ " - Foo3() should pass 'else' block.
+! call assert_equal(54, len(lines))
+
+ call assert_equal('FUNCTION Foo1()', lines[0])
+! call assert_equal('Called 1 time', lines[1])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3])
+! call assert_equal('', lines[4])
+! call assert_equal('count total (s) self (s)', lines[5])
+! call assert_match('^\s*1\s\+.*\sif 1$', lines[6])
+! call assert_match('^\s*1\s\+.*\s let x = 0$', lines[7])
+! call assert_match( '^\s\+elseif 1$', lines[8])
+! call assert_match( '^\s\+let x = 1$', lines[9])
+! call assert_match( '^\s\+else$', lines[10])
+! call assert_match( '^\s\+let x = 2$', lines[11])
+! call assert_match('^\s*1\s\+.*\sendif$', lines[12])
+! call assert_equal('', lines[13])
+! call assert_equal('FUNCTION Foo2()', lines[14])
+! call assert_equal('Called 1 time', lines[15])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[16])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[17])
+! call assert_equal('', lines[18])
+! call assert_equal('count total (s) self (s)', lines[19])
+! call assert_match('^\s*1\s\+.*\sif 0$', lines[20])
+! call assert_match( '^\s\+let x = 0$', lines[21])
+! call assert_match('^\s*1\s\+.*\selseif 1$', lines[22])
+! call assert_match('^\s*1\s\+.*\s let x = 1$', lines[23])
+! call assert_match( '^\s\+else$', lines[24])
+! call assert_match( '^\s\+let x = 2$', lines[25])
+! call assert_match('^\s*1\s\+.*\sendif$', lines[26])
+! call assert_equal('', lines[27])
+! call assert_equal('FUNCTION Foo3()', lines[28])
+! call assert_equal('Called 1 time', lines[29])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[30])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[31])
+! call assert_equal('', lines[32])
+! call assert_equal('count total (s) self (s)', lines[33])
+! call assert_match('^\s*1\s\+.*\sif 0$', lines[34])
+! call assert_match( '^\s\+let x = 0$', lines[35])
+! call assert_match('^\s*1\s\+.*\selseif 0$', lines[36])
+! call assert_match( '^\s\+let x = 1$', lines[37])
+! call assert_match('^\s*1\s\+.*\selse$', lines[38])
+! call assert_match('^\s*1\s\+.*\s let x = 2$', lines[39])
+! call assert_match('^\s*1\s\+.*\sendif$', lines[40])
+! call assert_equal('', lines[41])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[42])
+! call assert_equal('count total (s) self (s) function', lines[43])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[44])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[45])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[46])
+! call assert_equal('', lines[47])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[48])
+! call assert_equal('count total (s) self (s) function', lines[49])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[50])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[51])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[52])
+! call assert_equal('', lines[53])
+
+ call delete('Xprofile_func.vim')
+ call delete('Xprofile_func.log')
+--- 133,195 ----
+ " - Foo1() should pass 'if' block.
+ " - Foo2() should pass 'elseif' block.
+ " - Foo3() should pass 'else' block.
+! call assert_equal(57, len(lines))
+
+ call assert_equal('FUNCTION Foo1()', lines[0])
+! call assert_match('Defined:.*Xprofile_func.vim', lines[1])
+! call assert_equal('Called 1 time', lines[2])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[3])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[4])
+! call assert_equal('', lines[5])
+! call assert_equal('count total (s) self (s)', lines[6])
+! call assert_match('^\s*1\s\+.*\sif 1$', lines[7])
+! call assert_match('^\s*1\s\+.*\s let x = 0$', lines[8])
+! call assert_match( '^\s\+elseif 1$', lines[9])
+! call assert_match( '^\s\+let x = 1$', lines[10])
+! call assert_match( '^\s\+else$', lines[11])
+! call assert_match( '^\s\+let x = 2$', lines[12])
+! call assert_match('^\s*1\s\+.*\sendif$', lines[13])
+! call assert_equal('', lines[14])
+! call assert_equal('FUNCTION Foo2()', lines[15])
+! call assert_equal('Called 1 time', lines[17])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[18])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[19])
+! call assert_equal('', lines[20])
+! call assert_equal('count total (s) self (s)', lines[21])
+! call assert_match('^\s*1\s\+.*\sif 0$', lines[22])
+! call assert_match( '^\s\+let x = 0$', lines[23])
+! call assert_match('^\s*1\s\+.*\selseif 1$', lines[24])
+! call assert_match('^\s*1\s\+.*\s let x = 1$', lines[25])
+! call assert_match( '^\s\+else$', lines[26])
+! call assert_match( '^\s\+let x = 2$', lines[27])
+! call assert_match('^\s*1\s\+.*\sendif$', lines[28])
+! call assert_equal('', lines[29])
+! call assert_equal('FUNCTION Foo3()', lines[30])
+! call assert_equal('Called 1 time', lines[32])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[33])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[34])
+! call assert_equal('', lines[35])
+! call assert_equal('count total (s) self (s)', lines[36])
+! call assert_match('^\s*1\s\+.*\sif 0$', lines[37])
+! call assert_match( '^\s\+let x = 0$', lines[38])
+! call assert_match('^\s*1\s\+.*\selseif 0$', lines[39])
+! call assert_match( '^\s\+let x = 1$', lines[40])
+! call assert_match('^\s*1\s\+.*\selse$', lines[41])
+! call assert_match('^\s*1\s\+.*\s let x = 2$', lines[42])
+! call assert_match('^\s*1\s\+.*\sendif$', lines[43])
+! call assert_equal('', lines[44])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[45])
+! call assert_equal('count total (s) self (s) function', lines[46])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[47])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[48])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[49])
+! call assert_equal('', lines[50])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[51])
+! call assert_equal('count total (s) self (s) function', lines[52])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[53])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[54])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[55])
+! call assert_equal('', lines[56])
+
+ call delete('Xprofile_func.vim')
+ call delete('Xprofile_func.log')
+***************
+*** 244,305 ****
+ " - Foo1() should pass 'try' 'finally' blocks.
+ " - Foo2() should pass 'catch' 'finally' blocks.
+ " - Foo3() should not pass 'endtry'.
+! call assert_equal(54, len(lines))
+
+ call assert_equal('FUNCTION Foo1()', lines[0])
+! call assert_equal('Called 1 time', lines[1])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3])
+! call assert_equal('', lines[4])
+! call assert_equal('count total (s) self (s)', lines[5])
+! call assert_match('^\s*1\s\+.*\stry$', lines[6])
+! call assert_match('^\s*1\s\+.*\s let x = 0$', lines[7])
+! call assert_match( '^\s\+catch$', lines[8])
+! call assert_match( '^\s\+let x = 1$', lines[9])
+! call assert_match('^\s*1\s\+.*\sfinally$', lines[10])
+! call assert_match('^\s*1\s\+.*\s let x = 2$', lines[11])
+! call assert_match('^\s*1\s\+.*\sendtry$', lines[12])
+! call assert_equal('', lines[13])
+! call assert_equal('FUNCTION Foo2()', lines[14])
+! call assert_equal('Called 1 time', lines[15])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[16])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[17])
+! call assert_equal('', lines[18])
+! call assert_equal('count total (s) self (s)', lines[19])
+! call assert_match('^\s*1\s\+.*\stry$', lines[20])
+! call assert_match('^\s*1\s\+.*\s throw 0$', lines[21])
+! call assert_match('^\s*1\s\+.*\scatch$', lines[22])
+! call assert_match('^\s*1\s\+.*\s let x = 1$', lines[23])
+! call assert_match('^\s*1\s\+.*\sfinally$', lines[24])
+! call assert_match('^\s*1\s\+.*\s let x = 2$', lines[25])
+! call assert_match('^\s*1\s\+.*\sendtry$', lines[26])
+! call assert_equal('', lines[27])
+! call assert_equal('FUNCTION Foo3()', lines[28])
+! call assert_equal('Called 1 time', lines[29])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[30])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[31])
+! call assert_equal('', lines[32])
+! call assert_equal('count total (s) self (s)', lines[33])
+! call assert_match('^\s*1\s\+.*\stry$', lines[34])
+! call assert_match('^\s*1\s\+.*\s throw 0$', lines[35])
+! call assert_match('^\s*1\s\+.*\scatch$', lines[36])
+! call assert_match('^\s*1\s\+.*\s throw 1$', lines[37])
+! call assert_match('^\s*1\s\+.*\sfinally$', lines[38])
+! call assert_match('^\s*1\s\+.*\s let x = 2$', lines[39])
+! call assert_match( '^\s\+endtry$', lines[40])
+! call assert_equal('', lines[41])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[42])
+! call assert_equal('count total (s) self (s) function', lines[43])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[44])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[45])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[46])
+! call assert_equal('', lines[47])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[48])
+! call assert_equal('count total (s) self (s) function', lines[49])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[50])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[51])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[52])
+! call assert_equal('', lines[53])
+
+ call delete('Xprofile_func.vim')
+ call delete('Xprofile_func.log')
+--- 246,308 ----
+ " - Foo1() should pass 'try' 'finally' blocks.
+ " - Foo2() should pass 'catch' 'finally' blocks.
+ " - Foo3() should not pass 'endtry'.
+! call assert_equal(57, len(lines))
+
+ call assert_equal('FUNCTION Foo1()', lines[0])
+! call assert_match('Defined:.*Xprofile_func.vim', lines[1])
+! call assert_equal('Called 1 time', lines[2])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[3])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[4])
+! call assert_equal('', lines[5])
+! call assert_equal('count total (s) self (s)', lines[6])
+! call assert_match('^\s*1\s\+.*\stry$', lines[7])
+! call assert_match('^\s*1\s\+.*\s let x = 0$', lines[8])
+! call assert_match( '^\s\+catch$', lines[9])
+! call assert_match( '^\s\+let x = 1$', lines[10])
+! call assert_match('^\s*1\s\+.*\sfinally$', lines[11])
+! call assert_match('^\s*1\s\+.*\s let x = 2$', lines[12])
+! call assert_match('^\s*1\s\+.*\sendtry$', lines[13])
+! call assert_equal('', lines[14])
+! call assert_equal('FUNCTION Foo2()', lines[15])
+! call assert_equal('Called 1 time', lines[17])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[18])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[19])
+! call assert_equal('', lines[20])
+! call assert_equal('count total (s) self (s)', lines[21])
+! call assert_match('^\s*1\s\+.*\stry$', lines[22])
+! call assert_match('^\s*1\s\+.*\s throw 0$', lines[23])
+! call assert_match('^\s*1\s\+.*\scatch$', lines[24])
+! call assert_match('^\s*1\s\+.*\s let x = 1$', lines[25])
+! call assert_match('^\s*1\s\+.*\sfinally$', lines[26])
+! call assert_match('^\s*1\s\+.*\s let x = 2$', lines[27])
+! call assert_match('^\s*1\s\+.*\sendtry$', lines[28])
+! call assert_equal('', lines[29])
+! call assert_equal('FUNCTION Foo3()', lines[30])
+! call assert_equal('Called 1 time', lines[32])
+! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[33])
+! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[34])
+! call assert_equal('', lines[35])
+! call assert_equal('count total (s) self (s)', lines[36])
+! call assert_match('^\s*1\s\+.*\stry$', lines[37])
+! call assert_match('^\s*1\s\+.*\s throw 0$', lines[38])
+! call assert_match('^\s*1\s\+.*\scatch$', lines[39])
+! call assert_match('^\s*1\s\+.*\s throw 1$', lines[40])
+! call assert_match('^\s*1\s\+.*\sfinally$', lines[41])
+! call assert_match('^\s*1\s\+.*\s let x = 2$', lines[42])
+! call assert_match( '^\s\+endtry$', lines[43])
+! call assert_equal('', lines[44])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[45])
+! call assert_equal('count total (s) self (s) function', lines[46])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[47])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[48])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[49])
+! call assert_equal('', lines[50])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[51])
+! call assert_equal('count total (s) self (s) function', lines[52])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[53])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[54])
+! call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[55])
+! call assert_equal('', lines[56])
+
+ call delete('Xprofile_func.vim')
+ call delete('Xprofile_func.log')
+***************
+*** 470,487 ****
+ call assert_equal(0, v:shell_error)
+
+ let lines = readfile('Xprofile_file.log')
+! call assert_equal(24, len(lines))
+
+ " Check that:
+ " - Foo1() is called twice (profdel not invoked)
+ " - Foo2() is called once (profdel invoked after it was called)
+ " - Foo3() is not called (profdel invoked before it was called)
+ call assert_equal('FUNCTION Foo1()', lines[0])
+! call assert_equal('Called 2 times', lines[1])
+! call assert_equal('FUNCTION Foo2()', lines[7])
+! call assert_equal('Called 1 time', lines[8])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[14])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[19])
+
+ call delete('Xprofile_file.vim')
+ call delete('Xprofile_file.log')
+--- 473,491 ----
+ call assert_equal(0, v:shell_error)
+
+ let lines = readfile('Xprofile_file.log')
+! call assert_equal(26, len(lines))
+
+ " Check that:
+ " - Foo1() is called twice (profdel not invoked)
+ " - Foo2() is called once (profdel invoked after it was called)
+ " - Foo3() is not called (profdel invoked before it was called)
+ call assert_equal('FUNCTION Foo1()', lines[0])
+! call assert_match('Defined:.*Xprofile_file.vim', lines[1])
+! call assert_equal('Called 2 times', lines[2])
+! call assert_equal('FUNCTION Foo2()', lines[8])
+! call assert_equal('Called 1 time', lines[10])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[16])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[21])
+
+ call delete('Xprofile_file.vim')
+ call delete('Xprofile_file.log')
+***************
+*** 503,514 ****
+ call assert_equal(0, v:shell_error)
+
+ let lines = readfile('Xprofile_file.log')
+! call assert_equal(15, len(lines))
+
+ call assert_equal('FUNCTION Foo()', lines[0])
+! call assert_equal('Called 1 time', lines[1])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[7])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[11])
+
+ call delete('Xprofile_file.vim')
+ call delete('Xprofile_file.log')
+--- 507,519 ----
+ call assert_equal(0, v:shell_error)
+
+ let lines = readfile('Xprofile_file.log')
+! call assert_equal(16, len(lines))
+
+ call assert_equal('FUNCTION Foo()', lines[0])
+! call assert_match('Defined:.*Xprofile_file.vim', lines[1])
+! call assert_equal('Called 1 time', lines[2])
+! call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[8])
+! call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[12])
+
+ call delete('Xprofile_file.vim')
+ call delete('Xprofile_file.log')
+*** ../vim-8.1.0364/src/version.c 2018-09-10 21:22:11.540724228 +0200
+--- src/version.c 2018-09-10 22:02:39.826890707 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 365,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+32. You don't know what sex three of your closest friends are, because they
+ have neutral nicknames and you never bothered to ask.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0366 b/data/vim/patches/8.1.0366
new file mode 100644
index 000000000..be8e15e4a
--- /dev/null
+++ b/data/vim/patches/8.1.0366
@@ -0,0 +1,164 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0366
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0366
+Problem: Pieces of the xdiff code are not used.
+Solution: Add "#if 0" to omit unused code.
+Files: src/xdiff/xemit.c
+
+
+*** ../vim-8.1.0365/src/xdiff/xemit.c 2018-09-10 21:22:11.540724228 +0200
+--- src/xdiff/xemit.c 2018-09-10 22:17:54.906146558 +0200
+***************
+*** 95,100 ****
+--- 95,101 ----
+ }
+
+
++ #if 0
+ static long def_ff(const char *rec, long len, char *buf, long sz, void *priv UNUSED)
+ {
+ if (len > 0 &&
+***************
+*** 110,116 ****
+--- 111,119 ----
+ }
+ return -1;
+ }
++ #endif
+
++ #if 0
+ static long match_func_rec(xdfile_t *xdf, xdemitconf_t const *xecfg, long ri,
+ char *buf, long sz)
+ {
+***************
+*** 120,137 ****
+--- 123,144 ----
+ return def_ff(rec, len, buf, sz, xecfg->find_func_priv);
+ return xecfg->find_func(rec, len, buf, sz, xecfg->find_func_priv);
+ }
++ #endif
+
++ #if 0
+ static int is_func_rec(xdfile_t *xdf, xdemitconf_t const *xecfg, long ri)
+ {
+ char dummy[1];
+ return match_func_rec(xdf, xecfg, ri, dummy, sizeof(dummy)) >= 0;
+ }
++ #endif
+
+ struct func_line {
+ long len;
+ char buf[80];
+ };
+
++ #if 0
+ static long get_func_line(xdfenv_t *xe, xdemitconf_t const *xecfg,
+ struct func_line *func_line, long start, long limit)
+ {
+***************
+*** 151,157 ****
+--- 158,166 ----
+ }
+ return -1;
+ }
++ #endif
+
++ #if 0
+ static int is_empty_rec(xdfile_t *xdf, long ri)
+ {
+ const char *rec;
+***************
+*** 163,174 ****
+--- 172,186 ----
+ }
+ return !len;
+ }
++ #endif
+
+ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
+ xdemitconf_t const *xecfg) {
+ long s1, s2, e1, e2, lctx;
+ xdchange_t *xch, *xche;
++ #if 0
+ long funclineprev = -1;
++ #endif
+ struct func_line func_line;
+
+ func_line.len = 0;
+***************
+*** 181,186 ****
+--- 193,199 ----
+ s1 = XDL_MAX(xch->i1 - xecfg->ctxlen, 0);
+ s2 = XDL_MAX(xch->i2 - xecfg->ctxlen, 0);
+
++ #if 0
+ if (xecfg->flags & XDL_EMIT_FUNCCONTEXT) {
+ long fs1, i1 = xch->i1;
+
+***************
+*** 218,223 ****
+--- 231,237 ----
+ }
+
+ post_context_calculation:
++ #endif
+ lctx = xecfg->ctxlen;
+ lctx = XDL_MIN(lctx, xe->xdf1.nrec - (xche->i1 + xche->chg1));
+ lctx = XDL_MIN(lctx, xe->xdf2.nrec - (xche->i2 + xche->chg2));
+***************
+*** 225,230 ****
+--- 239,245 ----
+ e1 = xche->i1 + xche->chg1 + lctx;
+ e2 = xche->i2 + xche->chg2 + lctx;
+
++ #if 0
+ if (xecfg->flags & XDL_EMIT_FUNCCONTEXT) {
+ long fe1 = get_func_line(xe, xecfg, NULL,
+ xche->i1 + xche->chg1,
+***************
+*** 253,268 ****
+--- 268,286 ----
+ }
+ }
+ }
++ #endif
+
+ /*
+ * Emit current hunk header.
+ */
+
++ #if 0
+ if (xecfg->flags & XDL_EMIT_FUNCNAMES) {
+ get_func_line(xe, xecfg, &func_line,
+ s1 - 1, funclineprev);
+ funclineprev = s1 - 1;
+ }
++ #endif
+ if (xdl_emit_hunk_hdr(s1 + 1, e1 - s1, s2 + 1, e2 - s2,
+ func_line.buf, func_line.len, ecb) < 0)
+ return -1;
+*** ../vim-8.1.0365/src/version.c 2018-09-10 22:03:36.490401066 +0200
+--- src/version.c 2018-09-10 22:18:11.225981264 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 366,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+33. You name your children Eudora, Mozilla and Dotcom.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0367 b/data/vim/patches/8.1.0367
new file mode 100644
index 000000000..af46de07b
--- /dev/null
+++ b/data/vim/patches/8.1.0367
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0367
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0367
+Problem: getchar(1) no longer processes pending messages. (Yasuhiro
+ Matsumoto)
+Solution: Call parse_queued_messages().
+Files: src/evalfunc.c
+
+
+*** ../vim-8.1.0366/src/evalfunc.c 2018-09-10 21:04:09.864392710 +0200
+--- src/evalfunc.c 2018-09-11 12:36:26.133399983 +0200
+***************
+*** 4680,4685 ****
+--- 4680,4692 ----
+ varnumber_T n;
+ int error = FALSE;
+
++ #ifdef MESSAGE_QUEUE
++ // vpeekc() used to check for messages, but that caused problems, invoking
++ // a callback where it was not expected. Some plugins use getchar(1) in a
++ // loop to await a message, therefore make sure we check for messages here.
++ parse_queued_messages();
++ #endif
++
+ /* Position the cursor. Needed after a message that ends in a space. */
+ windgoto(msg_row, msg_col);
+
+*** ../vim-8.1.0366/src/version.c 2018-09-10 22:18:47.785610418 +0200
+--- src/version.c 2018-09-11 12:38:36.956320723 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 367,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+36. You miss more than five meals a week downloading the latest games from
+ Apogee.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0368 b/data/vim/patches/8.1.0368
new file mode 100644
index 000000000..a53a6dd94
--- /dev/null
+++ b/data/vim/patches/8.1.0368
@@ -0,0 +1,695 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0368
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0368
+Problem: GTK code has too many #ifdefs and building fails with GTK 2.10.
+Solution: Always use gtk_widget_get_window() and define it for older GTK
+ versions. (Ken Takata, closes #3421)
+Files: src/gui_beval.c, src/gui_gtk.c, src/gui_gtk_f.c,
+ src/gui_gtk_x11.c, src/mbyte.c, src/vim.h
+
+
+*** ../vim-8.1.0367/src/gui_beval.c 2018-08-28 23:09:03.889824461 +0200
+--- src/gui_beval.c 2018-09-11 21:18:17.858739747 +0200
+***************
+*** 991,1001 ****
+ # endif
+
+ /* Compute position of the balloon area */
+- # if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_get_origin(gtk_widget_get_window(beval->target), &x, &y);
+- # else
+- gdk_window_get_origin(beval->target->window, &x, &y);
+- # endif
+ x += beval->x;
+ y += beval->y;
+
+--- 991,997 ----
+*** ../vim-8.1.0367/src/gui_gtk.c 2018-02-04 14:33:59.000000000 +0100
+--- src/gui_gtk.c 2018-09-11 21:18:17.862739715 +0200
+***************
+*** 1932,1942 ****
+ gboolean *push_in UNUSED,
+ gpointer user_data UNUSED)
+ {
+- # if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_get_origin(gtk_widget_get_window(gui.drawarea), x, y);
+- # else
+- gdk_window_get_origin(gui.drawarea->window, x, y);
+- # endif
+
+ if (popup_mouse_pos)
+ {
+--- 1932,1938 ----
+***************
+*** 1946,1957 ****
+ *x += mx;
+ *y += my;
+ }
+- # if GTK_CHECK_VERSION(3,0,0)
+ else if (curwin != NULL && gui.drawarea != NULL &&
+ gtk_widget_get_window(gui.drawarea) != NULL)
+- # else
+- else if (curwin != NULL && gui.drawarea != NULL && gui.drawarea->window != NULL)
+- # endif
+ {
+ /* Find the cursor position in the current window */
+ *x += FILL_X(curwin->w_wincol + curwin->w_wcol + 1) + 1;
+--- 1942,1949 ----
+*** ../vim-8.1.0367/src/gui_gtk_f.c 2017-04-09 15:23:59.000000000 +0200
+--- src/gui_gtk_f.c 2018-09-11 21:18:17.862739715 +0200
+***************
+*** 345,368 ****
+ gtk_widget_set_window(widget,
+ gdk_window_new(gtk_widget_get_parent_window(widget),
+ &attributes, attributes_mask));
+- gdk_window_set_user_data(gtk_widget_get_window(widget), widget);
+ #else
+ widget->window = gdk_window_new(gtk_widget_get_parent_window(widget),
+ &attributes, attributes_mask);
+- gdk_window_set_user_data(widget->window, widget);
+ #endif
+
+ attributes.x = 0;
+ attributes.y = 0;
+ attributes.event_mask = gtk_widget_get_events(widget);
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ form->bin_window = gdk_window_new(gtk_widget_get_window(widget),
+ &attributes, attributes_mask);
+- #else
+- form->bin_window = gdk_window_new(widget->window,
+- &attributes, attributes_mask);
+- #endif
+ gdk_window_set_user_data(form->bin_window, widget);
+
+ #if GTK_CHECK_VERSION(3,0,0)
+--- 345,362 ----
+ gtk_widget_set_window(widget,
+ gdk_window_new(gtk_widget_get_parent_window(widget),
+ &attributes, attributes_mask));
+ #else
+ widget->window = gdk_window_new(gtk_widget_get_parent_window(widget),
+ &attributes, attributes_mask);
+ #endif
++ gdk_window_set_user_data(gtk_widget_get_window(widget), widget);
+
+ attributes.x = 0;
+ attributes.y = 0;
+ attributes.event_mask = gtk_widget_get_events(widget);
+
+ form->bin_window = gdk_window_new(gtk_widget_get_window(widget),
+ &attributes, attributes_mask);
+ gdk_window_set_user_data(form->bin_window, widget);
+
+ #if GTK_CHECK_VERSION(3,0,0)
+***************
+*** 422,432 ****
+ GTK_WIDGET_SET_FLAGS(widget, GTK_MAPPED);
+ #endif
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_show(gtk_widget_get_window(widget));
+- #else
+- gdk_window_show(widget->window);
+- #endif
+ gdk_window_show(form->bin_window);
+
+ for (tmp_list = form->children; tmp_list; tmp_list = tmp_list->next)
+--- 416,422 ----
+***************
+*** 593,607 ****
+ if (GTK_WIDGET_REALIZED(widget))
+ #endif
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_move_resize(gtk_widget_get_window(widget),
+ allocation->x, allocation->y,
+ allocation->width, allocation->height);
+- #else
+- gdk_window_move_resize(widget->window,
+- allocation->x, allocation->y,
+- allocation->width, allocation->height);
+- #endif
+ gdk_window_move_resize(GTK_FORM(widget)->bin_window,
+ 0, 0,
+ allocation->width, allocation->height);
+--- 583,591 ----
+*** ../vim-8.1.0367/src/gui_gtk_x11.c 2018-08-19 22:58:39.779568143 +0200
+--- src/gui_gtk_x11.c 2018-09-11 21:23:25.600273282 +0200
+***************
+*** 763,773 ****
+ {
+ if (event->type == GDK_PROPERTY_NOTIFY
+ && event->state == (int)GDK_PROPERTY_NEW_VALUE
+- # if GTK_CHECK_VERSION(3,0,0)
+ && GDK_WINDOW_XID(event->window) == commWindow
+- # else
+- && GDK_WINDOW_XWINDOW(event->window) == commWindow
+- # endif
+ && GET_X_ATOM(event->atom) == commProperty)
+ {
+ XEvent xev;
+--- 763,769 ----
+***************
+*** 777,788 ****
+ xev.xproperty.atom = commProperty;
+ xev.xproperty.window = commWindow;
+ xev.xproperty.state = PropertyNewValue;
+- # if GTK_CHECK_VERSION(3,0,0)
+ serverEventProc(GDK_WINDOW_XDISPLAY(gtk_widget_get_window(widget)),
+ &xev, 0);
+- # else
+- serverEventProc(GDK_WINDOW_XDISPLAY(widget->window), &xev, 0);
+- # endif
+ }
+ return FALSE;
+ }
+--- 773,780 ----
+***************
+*** 2653,2669 ****
+ /* Fall back to old method */
+
+ /* first get the existing value */
+- # if GTK_CHECK_VERSION(3,0,0)
+ GdkWindow * const mainwin_win = gtk_widget_get_window(gui.mainwin);
+
+ if (XGetWMProtocols(GDK_WINDOW_XDISPLAY(mainwin_win),
+ GDK_WINDOW_XID(mainwin_win),
+ &existing_atoms, &count))
+- # else
+- if (XGetWMProtocols(GDK_WINDOW_XDISPLAY(gui.mainwin->window),
+- GDK_WINDOW_XWINDOW(gui.mainwin->window),
+- &existing_atoms, &count))
+- # endif
+ {
+ Atom *new_atoms;
+ Atom save_yourself_xatom;
+--- 2645,2655 ----
+***************
+*** 2685,2697 ****
+ {
+ memcpy(new_atoms, existing_atoms, count * sizeof(Atom));
+ new_atoms[count] = save_yourself_xatom;
+- # if GTK_CHECK_VERSION(3,0,0)
+ XSetWMProtocols(GDK_WINDOW_XDISPLAY(mainwin_win),
+ GDK_WINDOW_XID(mainwin_win),
+- # else
+- XSetWMProtocols(GDK_WINDOW_XDISPLAY(gui.mainwin->window),
+- GDK_WINDOW_XWINDOW(gui.mainwin->window),
+- # endif
+ new_atoms, count + 1);
+ vim_free(new_atoms);
+ }
+--- 2671,2678 ----
+***************
+*** 2736,2748 ****
+ * know we are done saving ourselves. We don't want to be
+ * restarted, thus set argv to NULL.
+ */
+- # if GTK_CHECK_VERSION(3,0,0)
+ XSetCommand(GDK_WINDOW_XDISPLAY(gtk_widget_get_window(gui.mainwin)),
+ GDK_WINDOW_XID(gtk_widget_get_window(gui.mainwin)),
+- # else
+- XSetCommand(GDK_WINDOW_XDISPLAY(gui.mainwin->window),
+- GDK_WINDOW_XWINDOW(gui.mainwin->window),
+- # endif
+ NULL, 0);
+ return GDK_FILTER_REMOVE;
+ }
+--- 2717,2724 ----
+***************
+*** 2776,2793 ****
+ #undef magick
+ # undef static
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ GdkWindow * const mainwin_win = gtk_widget_get_window(gui.mainwin);
+- #endif
+
+ /* When started with "--echo-wid" argument, write window ID on stdout. */
+ if (echo_wid_arg)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ printf("WID: %ld\n", (long)GDK_WINDOW_XID(mainwin_win));
+- #else
+- printf("WID: %ld\n", (long)GDK_WINDOW_XWINDOW(gui.mainwin->window));
+- #endif
+ fflush(stdout);
+ }
+
+--- 2752,2763 ----
+***************
+*** 2824,2840 ****
+ if (serverName == NULL && serverDelayedStartName != NULL)
+ {
+ /* This is a :gui command in a plain vim with no previous server */
+- # if GTK_CHECK_VERSION(3,0,0)
+ commWindow = GDK_WINDOW_XID(mainwin_win);
+
+ (void)serverRegisterName(GDK_WINDOW_XDISPLAY(mainwin_win),
+ serverDelayedStartName);
+- # else
+- commWindow = GDK_WINDOW_XWINDOW(gui.mainwin->window);
+-
+- (void)serverRegisterName(GDK_WINDOW_XDISPLAY(gui.mainwin->window),
+- serverDelayedStartName);
+- # endif
+ }
+ else
+ {
+--- 2794,2803 ----
+***************
+*** 2843,2855 ****
+ * have to change the "server" registration to that of the main window
+ * If we have not registered a name yet, remember the window.
+ */
+- # if GTK_CHECK_VERSION(3,0,0)
+ serverChangeRegisteredWindow(GDK_WINDOW_XDISPLAY(mainwin_win),
+ GDK_WINDOW_XID(mainwin_win));
+- # else
+- serverChangeRegisteredWindow(GDK_WINDOW_XDISPLAY(gui.mainwin->window),
+- GDK_WINDOW_XWINDOW(gui.mainwin->window));
+- # endif
+ }
+ gtk_widget_add_events(gui.mainwin, GDK_PROPERTY_CHANGE_MASK);
+ # if GTK_CHECK_VERSION(3,0,0)
+--- 2806,2813 ----
+***************
+*** 2945,2958 ****
+
+ gui.blank_pointer = create_blank_pointer();
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gui.pointer_hidden && gtk_widget_get_window(gui.drawarea) != NULL)
+ gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea),
+ gui.blank_pointer);
+- #else
+- if (gui.pointer_hidden && gui.drawarea->window != NULL)
+- gdk_window_set_cursor(gui.drawarea->window, gui.blank_pointer);
+- #endif
+
+ /*
+ * Create a new PangoContext for this screen, and initialize it
+--- 2903,2911 ----
+***************
+*** 3002,3012 ****
+
+ gui.blank_pointer = create_blank_pointer();
+ if (gui.pointer_hidden)
+- #if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_set_cursor(gtk_widget_get_window(widget), gui.blank_pointer);
+- #else
+- gdk_window_set_cursor(widget->window, gui.blank_pointer);
+- #endif
+
+ /* get the actual size of the scrollbars, if they are realized */
+ sbar = firstwin->w_scrollbars[SBAR_LEFT].id;
+--- 2955,2961 ----
+***************
+*** 4923,4937 ****
+ int
+ gui_mch_maximized(void)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ return (gui.mainwin != NULL && gtk_widget_get_window(gui.mainwin) != NULL
+ && (gdk_window_get_state(gtk_widget_get_window(gui.mainwin))
+ & GDK_WINDOW_STATE_MAXIMIZED));
+- #else
+- return (gui.mainwin != NULL && gui.mainwin->window != NULL
+- && (gdk_window_get_state(gui.mainwin->window)
+- & GDK_WINDOW_STATE_MAXIMIZED));
+- #endif
+ }
+
+ /*
+--- 4872,4880 ----
+***************
+*** 6051,6061 ****
+ cairo_t *cr;
+ #endif
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gui.text_context == NULL || gtk_widget_get_window(gui.drawarea) == NULL)
+- #else
+- if (gui.text_context == NULL || gui.drawarea->window == NULL)
+- #endif
+ return len;
+
+ if (output_conv.vc_type != CONV_NONE)
+--- 5994,6000 ----
+***************
+*** 6366,6384 ****
+ int
+ gui_get_x11_windis(Window *win, Display **dis)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gui.mainwin != NULL && gtk_widget_get_window(gui.mainwin) != NULL)
+- #else
+- if (gui.mainwin != NULL && gui.mainwin->window != NULL)
+- #endif
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ *dis = GDK_WINDOW_XDISPLAY(gtk_widget_get_window(gui.mainwin));
+ *win = GDK_WINDOW_XID(gtk_widget_get_window(gui.mainwin));
+- #else
+- *dis = GDK_WINDOW_XDISPLAY(gui.mainwin->window);
+- *win = GDK_WINDOW_XWINDOW(gui.mainwin->window);
+- #endif
+ return OK;
+ }
+
+--- 6305,6314 ----
+***************
+*** 6394,6406 ****
+ Display *
+ gui_mch_get_display(void)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gui.mainwin != NULL && gtk_widget_get_window(gui.mainwin) != NULL)
+ return GDK_WINDOW_XDISPLAY(gtk_widget_get_window(gui.mainwin));
+- #else
+- if (gui.mainwin != NULL && gui.mainwin->window != NULL)
+- return GDK_WINDOW_XDISPLAY(gui.mainwin->window);
+- #endif
+ else
+ return NULL;
+ }
+--- 6324,6331 ----
+***************
+*** 6555,6565 ****
+ cairo_t *cr;
+ #endif
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_window(gui.drawarea) == NULL)
+- #else
+- if (gui.drawarea->window == NULL)
+- #endif
+ return;
+
+ #if GTK_CHECK_VERSION(3,0,0)
+--- 6480,6486 ----
+***************
+*** 6600,6610 ****
+ void
+ gui_mch_draw_part_cursor(int w, int h, guicolor_T color)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_window(gui.drawarea) == NULL)
+- #else
+- if (gui.drawarea->window == NULL)
+- #endif
+ return;
+
+ gui_mch_set_fg_color(color);
+--- 6521,6527 ----
+***************
+*** 6880,6897 ****
+ if (!gui.by_signal)
+ gdk_window_invalidate_rect(win, &rect, FALSE);
+ }
+ #endif
+
+ void
+ gui_mch_clear_all(void)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_window(gui.drawarea) != NULL)
+ gui_gtk_window_clear(gtk_widget_get_window(gui.drawarea));
+- #else
+- if (gui.drawarea->window != NULL)
+- gdk_window_clear(gui.drawarea->window);
+- #endif
+ }
+
+ #if !GTK_CHECK_VERSION(3,0,0)
+--- 6797,6811 ----
+ if (!gui.by_signal)
+ gdk_window_invalidate_rect(win, &rect, FALSE);
+ }
++ #else
++ # define gui_gtk_window_clear(win) gdk_window_clear(win)
+ #endif
+
+ void
+ gui_mch_clear_all(void)
+ {
+ if (gtk_widget_get_window(gui.drawarea) != NULL)
+ gui_gtk_window_clear(gtk_widget_get_window(gui.drawarea));
+ }
+
+ #if !GTK_CHECK_VERSION(3,0,0)
+***************
+*** 7084,7095 ****
+ }
+
+ /* Final fallback position - use the X CUT_BUFFER0 store */
+- #if GTK_CHECK_VERSION(3,0,0)
+ yank_cut_buffer0(GDK_WINDOW_XDISPLAY(gtk_widget_get_window(gui.mainwin)),
+ cbd);
+- #else
+- yank_cut_buffer0(GDK_WINDOW_XDISPLAY(gui.mainwin->window), cbd);
+- #endif
+ }
+
+ /*
+--- 6998,7005 ----
+***************
+*** 7269,7283 ****
+ /* Sorry for the Xlib call, but we can't avoid it, since there is no
+ * internal GDK mechanism present to accomplish this. (and for good
+ * reason...) */
+- #if GTK_CHECK_VERSION(3,0,0)
+ XWarpPointer(GDK_WINDOW_XDISPLAY(gtk_widget_get_window(gui.drawarea)),
+ (Window)0, GDK_WINDOW_XID(gtk_widget_get_window(gui.drawarea)),
+ 0, 0, 0U, 0U, x, y);
+- #else
+- XWarpPointer(GDK_WINDOW_XDISPLAY(gui.drawarea->window),
+- (Window)0, GDK_WINDOW_XWINDOW(gui.drawarea->window),
+- 0, 0, 0U, 0U, x, y);
+- #endif
+ }
+
+
+--- 7179,7187 ----
+***************
+*** 7298,7323 ****
+ if (gui.pointer_hidden != hide)
+ {
+ gui.pointer_hidden = hide;
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_window(gui.drawarea) && gui.blank_pointer != NULL)
+- #else
+- if (gui.drawarea->window && gui.blank_pointer != NULL)
+- #endif
+ {
+ if (hide)
+- #if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea),
+ gui.blank_pointer);
+- #else
+- gdk_window_set_cursor(gui.drawarea->window, gui.blank_pointer);
+- #endif
+ else
+ #ifdef FEAT_MOUSESHAPE
+ mch_set_mouse_shape(last_shape);
+- #elif GTK_CHECK_VERSION(3,0,0)
+- gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea), NULL);
+ #else
+! gdk_window_set_cursor(gui.drawarea->window, NULL);
+ #endif
+ }
+ }
+--- 7202,7217 ----
+ if (gui.pointer_hidden != hide)
+ {
+ gui.pointer_hidden = hide;
+ if (gtk_widget_get_window(gui.drawarea) && gui.blank_pointer != NULL)
+ {
+ if (hide)
+ gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea),
+ gui.blank_pointer);
+ else
+ #ifdef FEAT_MOUSESHAPE
+ mch_set_mouse_shape(last_shape);
+ #else
+! gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea), NULL);
+ #endif
+ }
+ }
+***************
+*** 7354,7373 ****
+ int id;
+ GdkCursor *c;
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_window(gui.drawarea) == NULL)
+- # else
+- if (gui.drawarea->window == NULL)
+- # endif
+ return;
+
+ if (shape == MSHAPE_HIDE || gui.pointer_hidden)
+- # if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea),
+ gui.blank_pointer);
+- # else
+- gdk_window_set_cursor(gui.drawarea->window, gui.blank_pointer);
+- # endif
+ else
+ {
+ if (shape >= MSHAPE_NUMBERED)
+--- 7248,7259 ----
+***************
+*** 7384,7394 ****
+ return;
+ c = gdk_cursor_new_for_display(
+ gtk_widget_get_display(gui.drawarea), (GdkCursorType)id);
+- # if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_set_cursor(gtk_widget_get_window(gui.drawarea), c);
+- # else
+- gdk_window_set_cursor(gui.drawarea->window, c);
+- # endif
+ # if GTK_CHECK_VERSION(3,0,0)
+ g_object_unref(G_OBJECT(c));
+ # else
+--- 7270,7276 ----
+***************
+*** 7420,7431 ****
+
+ sign = (GdkPixbuf *)sign_get_image(typenr);
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (sign != NULL && gui.drawarea != NULL
+ && gtk_widget_get_window(gui.drawarea) != NULL)
+- # else
+- if (sign != NULL && gui.drawarea != NULL && gui.drawarea->window != NULL)
+- # endif
+ {
+ int width;
+ int height;
+--- 7302,7309 ----
+*** ../vim-8.1.0367/src/mbyte.c 2018-08-19 22:58:39.779568143 +0200
+--- src/mbyte.c 2018-09-11 21:18:17.870739650 +0200
+***************
+*** 4959,4969 ****
+
+ gui_gtk_get_screen_geom_of_win(gui.drawarea,
+ &screen_x, &screen_y, &screen_width, &screen_height);
+- #if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_get_origin(gtk_widget_get_window(gui.drawarea), &x, &y);
+- #else
+- gdk_window_get_origin(gui.drawarea->window, &x, &y);
+- #endif
+ gtk_window_get_size(GTK_WINDOW(preedit_window), &width, &height);
+ x = x + FILL_X(gui.col);
+ y = y + FILL_Y(gui.row);
+--- 4959,4965 ----
+***************
+*** 5565,5575 ****
+ #endif
+
+ g_return_if_fail(gui.drawarea != NULL);
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_return_if_fail(gtk_widget_get_window(gui.drawarea) != NULL);
+- #else
+- g_return_if_fail(gui.drawarea->window != NULL);
+- #endif
+
+ xic = gtk_im_multicontext_new();
+ g_object_ref(xic);
+--- 5561,5567 ----
+***************
+*** 5583,5593 ****
+ g_signal_connect(G_OBJECT(xic), "preedit_end",
+ G_CALLBACK(&im_preedit_end_cb), NULL);
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_im_context_set_client_window(xic, gtk_widget_get_window(gui.drawarea));
+- #else
+- gtk_im_context_set_client_window(xic, gui.drawarea->window);
+- #endif
+ }
+
+ void
+--- 5575,5581 ----
+***************
+*** 5686,5702 ****
+ GdkEventKey *event;
+
+ event = (GdkEventKey *)gdk_event_new(GDK_KEY_PRESS);
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_object_ref(gtk_widget_get_window(gui.drawarea));
+ /* unreffed by gdk_event_free() */
+- # else
+- g_object_ref(gui.drawarea->window); /* unreffed by gdk_event_free() */
+- # endif
+- # if GTK_CHECK_VERSION(3,0,0)
+ event->window = gtk_widget_get_window(gui.drawarea);
+- # else
+- event->window = gui.drawarea->window;
+- # endif
+ event->send_event = TRUE;
+ event->time = GDK_CURRENT_TIME;
+ event->state = state;
+--- 5674,5682 ----
+*** ../vim-8.1.0367/src/vim.h 2018-08-21 15:12:10.831801698 +0200
+--- src/vim.h 2018-09-11 21:18:17.870739650 +0200
+***************
+*** 1241,1247 ****
+ #define MIN_SWAP_PAGE_SIZE 1048
+ #define MAX_SWAP_PAGE_SIZE 50000
+
+! /* Special values for current_SID. */
+ #define SID_MODELINE -1 /* when using a modeline */
+ #define SID_CMDARG -2 /* for "--cmd" argument */
+ #define SID_CARG -3 /* for "-c" argument */
+--- 1241,1247 ----
+ #define MIN_SWAP_PAGE_SIZE 1048
+ #define MAX_SWAP_PAGE_SIZE 50000
+
+! /* Special values for current_sctx.sc_sid. */
+ #define SID_MODELINE -1 /* when using a modeline */
+ #define SID_CMDARG -2 /* for "--cmd" argument */
+ #define SID_CARG -3 /* for "-c" argument */
+***************
+*** 2329,2334 ****
+--- 2329,2340 ----
+ # endif
+ #endif
+
++ #ifdef FEAT_GUI_GTK
++ # if !GTK_CHECK_VERSION(2,14,0)
++ # define gtk_widget_get_window(wid) ((wid)->window)
++ # endif
++ #endif
++
+ #ifndef FEAT_NETBEANS_INTG
+ # undef NBDEBUG
+ #endif
+*** ../vim-8.1.0367/src/version.c 2018-09-11 20:10:17.138525018 +0200
+--- src/version.c 2018-09-11 21:27:43.030210228 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 368,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+38. You wake up at 3 a.m. to go to the bathroom and stop and check your e-mail
+ on the way back to bed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0369 b/data/vim/patches/8.1.0369
new file mode 100644
index 000000000..beeeddae7
--- /dev/null
+++ b/data/vim/patches/8.1.0369
@@ -0,0 +1,297 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0369
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0369
+Problem: Continuation lines cannot contain comments.
+Solution: Support using "\ .
+Files: src/ex_cmds2.c, src/testdir/test_eval_stuff.vim,
+ runtime/indent/vim.vim, runtime/doc/repeat.txt
+
+
+*** ../vim-8.1.0368/src/ex_cmds2.c 2018-09-10 21:04:09.868392665 +0200
+--- src/ex_cmds2.c 2018-09-11 22:04:18.810842128 +0200
+***************
+*** 4864,4880 ****
+ /* compensate for the one line read-ahead */
+ --sourcing_lnum;
+
+! /* Get the next line and concatenate it when it starts with a
+! * backslash. We always need to read the next line, keep it in
+! * sp->nextline. */
+ sp->nextline = get_one_sourceline(sp);
+! if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
+ {
+ garray_T ga;
+
+ ga_init2(&ga, (int)sizeof(char_u), 400);
+ ga_concat(&ga, line);
+! ga_concat(&ga, p + 1);
+ for (;;)
+ {
+ vim_free(sp->nextline);
+--- 4864,4884 ----
+ /* compensate for the one line read-ahead */
+ --sourcing_lnum;
+
+! // Get the next line and concatenate it when it starts with a
+! // backslash. We always need to read the next line, keep it in
+! // sp->nextline.
+! /* Also check for a comment in between continuation lines: "\ */
+ sp->nextline = get_one_sourceline(sp);
+! if (sp->nextline != NULL
+! && (*(p = skipwhite(sp->nextline)) == '\\'
+! || (p[0] == '"' && p[1] == '\\' && p[2] == ' ')))
+ {
+ garray_T ga;
+
+ ga_init2(&ga, (int)sizeof(char_u), 400);
+ ga_concat(&ga, line);
+! if (*p == '\\')
+! ga_concat(&ga, p + 1);
+ for (;;)
+ {
+ vim_free(sp->nextline);
+***************
+*** 4882,4899 ****
+ if (sp->nextline == NULL)
+ break;
+ p = skipwhite(sp->nextline);
+! if (*p != '\\')
+! break;
+! /* Adjust the growsize to the current length to speed up
+! * concatenating many lines. */
+! if (ga.ga_len > 400)
+ {
+! if (ga.ga_len > 8000)
+! ga.ga_growsize = 8000;
+! else
+! ga.ga_growsize = ga.ga_len;
+ }
+! ga_concat(&ga, p + 1);
+ }
+ ga_append(&ga, NUL);
+ vim_free(line);
+--- 4886,4906 ----
+ if (sp->nextline == NULL)
+ break;
+ p = skipwhite(sp->nextline);
+! if (*p == '\\')
+ {
+! // Adjust the growsize to the current length to speed up
+! // concatenating many lines.
+! if (ga.ga_len > 400)
+! {
+! if (ga.ga_len > 8000)
+! ga.ga_growsize = 8000;
+! else
+! ga.ga_growsize = ga.ga_len;
+! }
+! ga_concat(&ga, p + 1);
+ }
+! else if (p[0] != '"' || p[1] != '\\' || p[2] != ' ')
+! break;
+ }
+ ga_append(&ga, NUL);
+ vim_free(line);
+*** ../vim-8.1.0368/src/testdir/test_eval_stuff.vim 2018-04-14 13:36:34.000000000 +0200
+--- src/testdir/test_eval_stuff.vim 2018-09-11 22:16:11.397628697 +0200
+***************
+*** 42,44 ****
+--- 42,55 ----
+ call delete('Xfile')
+ call delete('Xmkdir', 'rf')
+ endfunc
++
++ func Test_line_continuation()
++ let array = [5,
++ "\ ignore this
++ \ 6,
++ "\ more to ignore
++ "\ more moreto ignore
++ \ ]
++ "\ and some more
++ call assert_equal([5, 6], array)
++ endfunc
+*** ../vim-8.1.0368/runtime/indent/vim.vim 2016-06-27 20:39:41.000000000 +0200
+--- runtime/indent/vim.vim 2018-09-11 22:19:48.151294837 +0200
+***************
+*** 10,16 ****
+ let b:did_indent = 1
+
+ setlocal indentexpr=GetVimIndent()
+! setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\
+
+ let b:undo_indent = "setl indentkeys< indentexpr<"
+
+--- 10,16 ----
+ let b:did_indent = 1
+
+ setlocal indentexpr=GetVimIndent()
+! setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\,0=\"\\\
+
+ let b:undo_indent = "setl indentkeys< indentexpr<"
+
+***************
+*** 31,45 ****
+ endtry
+ endfunc
+
+ function GetVimIndentIntern()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+! " If the current line doesn't start with '\' and below a line that starts
+! " with '\', use the indent of the line above it.
+ let cur_text = getline(v:lnum)
+! if cur_text !~ '^\s*\\'
+! while lnum > 0 && getline(lnum) =~ '^\s*\\'
+ let lnum = lnum - 1
+ endwhile
+ endif
+--- 31,47 ----
+ endtry
+ endfunc
+
++ let s:lineContPat = '^\s*\(\\\|"\\ \)'
++
+ function GetVimIndentIntern()
+ " Find a non-blank line above the current line.
+ let lnum = prevnonblank(v:lnum - 1)
+
+! " If the current line doesn't start with '\' or '"\ ' and below a line that
+! " starts with '\' or '"\ ', use the indent of the line above it.
+ let cur_text = getline(v:lnum)
+! if cur_text !~ s:lineContPat
+! while lnum > 0 && getline(lnum) =~ s:lineContPat
+ let lnum = lnum - 1
+ endwhile
+ endif
+***************
+*** 51,60 ****
+ let prev_text = getline(lnum)
+
+ " Add a 'shiftwidth' after :if, :while, :try, :catch, :finally, :function
+! " and :else. Add it three times for a line that starts with '\' after
+! " a line that doesn't (or g:vim_indent_cont if it exists).
+ let ind = indent(lnum)
+! if cur_text =~ '^\s*\\' && v:lnum > 1 && prev_text !~ '^\s*\\'
+ if exists("g:vim_indent_cont")
+ let ind = ind + g:vim_indent_cont
+ else
+--- 53,62 ----
+ let prev_text = getline(lnum)
+
+ " Add a 'shiftwidth' after :if, :while, :try, :catch, :finally, :function
+! " and :else. Add it three times for a line that starts with '\' or '"\ '
+! " after a line that doesn't (or g:vim_indent_cont if it exists).
+ let ind = indent(lnum)
+! if cur_text =~ s:lineContPat && v:lnum > 1 && prev_text !~ s:lineContPat
+ if exists("g:vim_indent_cont")
+ let ind = ind + g:vim_indent_cont
+ else
+*** ../vim-8.1.0368/runtime/doc/repeat.txt 2018-05-17 13:42:02.000000000 +0200
+--- runtime/doc/repeat.txt 2018-09-11 22:34:47.266339513 +0200
+***************
+*** 265,271 ****
+ loaded during initialization, see |load-plugins|.
+
+ Also see |pack-add|.
+! {only available when compiled with +eval}
+
+ *:packl* *:packloadall*
+ :packl[oadall][!] Load all packages in the "start" directory under each
+--- 265,271 ----
+ loaded during initialization, see |load-plugins|.
+
+ Also see |pack-add|.
+! {only available when compiled with |+eval|}
+
+ *:packl* *:packloadall*
+ :packl[oadall][!] Load all packages in the "start" directory under each
+***************
+*** 289,295 ****
+ An error only causes sourcing the script where it
+ happens to be aborted, further plugins will be loaded.
+ See |packages|.
+! {only available when compiled with +eval}
+
+ :scripte[ncoding] [encoding] *:scripte* *:scriptencoding* *E167*
+ Specify the character encoding used in the script.
+--- 289,295 ----
+ An error only causes sourcing the script where it
+ happens to be aborted, further plugins will be loaded.
+ See |packages|.
+! {only available when compiled with |+eval|}
+
+ :scripte[ncoding] [encoding] *:scripte* *:scriptencoding* *E167*
+ Specify the character encoding used in the script.
+***************
+*** 465,470 ****
+--- 465,480 ----
+ .
+ :endfunction
+ :set cpo-=C
++ <
++ *line-continuation-comment*
++ To add a comment in between the lines start with '\" '. Notice the space
++ after the double quote. Example: >
++ let array = [
++ "\ first entry comment
++ \ 'first',
++ "\ second entry comment
++ \ 'second',
++ \ ]
+
+ Rationale:
+ Most programs work with a trailing backslash to indicate line
+***************
+*** 473,478 ****
+--- 483,496 ----
+ :map xx asdf\
+ < Therefore the unusual leading backslash is used.
+
++ Starting a comment in a continuation line results in all following
++ continuation lines to be part of the comment. Since it was like this
++ for a long time, when making it possible to add a comment halfway a
++ sequence of continuation lines, it was not possible to use \", since
++ that was a valid continuation line. Using '"\ ' comes closest, even
++ though it may look a bit weird. Requiring the space after the
++ backslash is to make it very unlikely this is a normal comment line.
++
+ ==============================================================================
+ 5. Using Vim packages *packages*
+
+***************
+*** 1010,1013 ****
+ - The "self" time is wrong when a function is used recursively.
+
+
+! vim:tw=78:ts=8:ft=help:norl:
+--- 1028,1031 ----
+ - The "self" time is wrong when a function is used recursively.
+
+
+! vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0368/src/version.c 2018-09-11 21:30:05.253070476 +0200
+--- src/version.c 2018-09-11 22:03:43.867404925 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 369,
+ /**/
+
+--
+He who laughs last, thinks slowest.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0370 b/data/vim/patches/8.1.0370
new file mode 100644
index 000000000..463884725
--- /dev/null
+++ b/data/vim/patches/8.1.0370
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0370
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0370
+Problem: Not using internal diff if 'diffopt' is not changed.
+Solution: Correct initialization of diff_flags. (Christian Brabandt)
+Files: src/diff.c
+
+
+*** ../vim-8.1.0369/src/diff.c 2018-09-10 17:50:32.713306941 +0200
+--- src/diff.c 2018-09-12 17:56:59.002582092 +0200
+***************
+*** 31,37 ****
+ #define DIFF_VERTICAL 16 // vertical splits
+ #define DIFF_HIDDEN_OFF 32 // diffoff when hidden
+ #define DIFF_INTERNAL 64 // use internal xdiff algorithm
+! static int diff_flags = DIFF_FILLER;
+
+ static long diff_algorithm = 0;
+
+--- 31,37 ----
+ #define DIFF_VERTICAL 16 // vertical splits
+ #define DIFF_HIDDEN_OFF 32 // diffoff when hidden
+ #define DIFF_INTERNAL 64 // use internal xdiff algorithm
+! static int diff_flags = DIFF_INTERNAL | DIFF_FILLER;
+
+ static long diff_algorithm = 0;
+
+*** ../vim-8.1.0369/src/version.c 2018-09-11 22:36:48.129548374 +0200
+--- src/version.c 2018-09-12 17:57:59.986272285 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 370,
+ /**/
+
+--
+Seen it all, done it all, can't remember most of it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0371 b/data/vim/patches/8.1.0371
new file mode 100644
index 000000000..d5863879c
--- /dev/null
+++ b/data/vim/patches/8.1.0371
@@ -0,0 +1,224 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0371
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0371
+Problem: Argument types for select() may be wrong.
+Solution: Use a configure macro. (Tobias Ulmer)
+Files: src/config.h.in, src/configure.ac, src/auto/configure,
+ src/os_unix.c
+
+
+*** ../vim-8.1.0370/src/config.h.in 2018-05-13 15:37:01.000000000 +0200
+--- src/config.h.in 2018-09-12 20:25:27.109676243 +0200
+***************
+*** 113,118 ****
+--- 113,121 ----
+ /* Define if you can safely include both <sys/time.h> and <sys/select.h>. */
+ #undef SYS_SELECT_WITH_SYS_TIME
+
++ /* Define to a typecast for select() arguments 2, 3 and 4. */
++ #undef SELECT_TYPE_ARG234
++
+ /* Define if you have /dev/ptc */
+ #undef HAVE_DEV_PTC
+
+*** ../vim-8.1.0370/src/configure.ac 2018-08-04 15:13:31.026718187 +0200
+--- src/configure.ac 2018-09-12 20:20:02.744871078 +0200
+***************
+*** 3721,3726 ****
+--- 3721,3727 ----
+ sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
+ strnicmp strpbrk strtol tgetent towlower towupper iswupper \
+ usleep utime utimes mblen ftruncate unsetenv)
++ AC_FUNC_SELECT_ARGTYPES
+ AC_FUNC_FSEEKO
+
+ dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
+*** ../vim-8.1.0370/src/auto/configure 2018-08-04 15:13:31.034718130 +0200
+--- src/auto/configure 2018-09-12 20:23:36.130733921 +0200
+***************
+*** 12630,12635 ****
+--- 12630,12710 ----
+ fi
+ done
+
++ for ac_header in sys/select.h sys/socket.h
++ do :
++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
++ if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
++ cat >>confdefs.h <<_ACEOF
++ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++ _ACEOF
++
++ fi
++
++ done
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5
++ $as_echo_n "checking types of arguments for select... " >&6; }
++ if ${ac_cv_func_select_args+:} false; then :
++ $as_echo_n "(cached) " >&6
++ else
++ for ac_arg234 in 'fd_set *' 'int *' 'void *'; do
++ for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do
++ for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ /* end confdefs.h. */
++ $ac_includes_default
++ #ifdef HAVE_SYS_SELECT_H
++ # include <sys/select.h>
++ #endif
++ #ifdef HAVE_SYS_SOCKET_H
++ # include <sys/socket.h>
++ #endif
++
++ int
++ main ()
++ {
++ extern int select ($ac_arg1,
++ $ac_arg234, $ac_arg234, $ac_arg234,
++ $ac_arg5);
++ ;
++ return 0;
++ }
++ _ACEOF
++ if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3
++ fi
++ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ done
++ done
++ done
++ # Provide a safe default value.
++ : "${ac_cv_func_select_args=int,int *,struct timeval *}"
++
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5
++ $as_echo "$ac_cv_func_select_args" >&6; }
++ ac_save_IFS=$IFS; IFS=','
++ set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'`
++ IFS=$ac_save_IFS
++ shift
++
++ cat >>confdefs.h <<_ACEOF
++ #define SELECT_TYPE_ARG1 $1
++ _ACEOF
++
++
++ cat >>confdefs.h <<_ACEOF
++ #define SELECT_TYPE_ARG234 ($2)
++ _ACEOF
++
++
++ cat >>confdefs.h <<_ACEOF
++ #define SELECT_TYPE_ARG5 ($3)
++ _ACEOF
++
++ rm -f conftest*
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+ $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
+ if ${ac_cv_sys_largefile_source+:} false; then :
+*** ../vim-8.1.0370/src/os_unix.c 2018-09-06 13:14:39.140722555 +0200
+--- src/os_unix.c 2018-09-12 20:28:52.939783579 +0200
+***************
+*** 18,34 ****
+ * changed beyond recognition.
+ */
+
+- /*
+- * Some systems have a prototype for select() that has (int *) instead of
+- * (fd_set *), which is wrong. This define removes that prototype. We define
+- * our own prototype below.
+- * Don't use it for the Mac, it causes a warning for precompiled headers.
+- * TODO: use a configure check for precompiled headers?
+- */
+- #if !defined(__APPLE__) && !defined(__TANDEM)
+- # define select select_declared_wrong
+- #endif
+-
+ #include "vim.h"
+
+ #ifdef FEAT_MZSCHEME
+--- 18,23 ----
+***************
+*** 54,67 ****
+ # endif
+ #endif
+
+! /*
+! * Use this prototype for select, some include files have a wrong prototype
+! */
+! #ifndef __TANDEM
+ # undef select
+! # ifdef __BEOS__
+! # define select beos_select
+! # endif
+ #endif
+
+ #ifdef __CYGWIN__
+--- 43,51 ----
+ # endif
+ #endif
+
+! #ifdef __BEOS__
+ # undef select
+! # define select beos_select
+ #endif
+
+ #ifdef __CYGWIN__
+***************
+*** 77,86 ****
+ # endif
+ #endif
+
+- #if defined(HAVE_SELECT)
+- extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+- #endif
+-
+ #ifdef FEAT_MOUSE_GPM
+ # include <gpm.h>
+ /* <linux/keyboard.h> contains defines conflicting with "keymap.h",
+--- 61,66 ----
+***************
+*** 6316,6322 ****
+ if (interrupted != NULL)
+ *interrupted = FALSE;
+
+! ret = select(maxfd + 1, &rfds, &wfds, &efds, tvp);
+ result = ret > 0 && FD_ISSET(fd, &rfds);
+ if (result)
+ --ret;
+--- 6296,6303 ----
+ if (interrupted != NULL)
+ *interrupted = FALSE;
+
+! ret = select(maxfd + 1, SELECT_TYPE_ARG234 &rfds,
+! SELECT_TYPE_ARG234 &wfds, SELECT_TYPE_ARG234 &efds, tvp);
+ result = ret > 0 && FD_ISSET(fd, &rfds);
+ if (result)
+ --ret;
+*** ../vim-8.1.0370/src/version.c 2018-09-12 18:00:08.937570191 +0200
+--- src/version.c 2018-09-12 20:18:50.065639189 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 371,
+ /**/
+
+--
+I wonder how much deeper the ocean would be without sponges.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0372 b/data/vim/patches/8.1.0372
new file mode 100644
index 000000000..d5262bb77
--- /dev/null
+++ b/data/vim/patches/8.1.0372
@@ -0,0 +1,204 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0372
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0372
+Problem: Screen updating slow when 'cursorline' is set.
+Solution: Only redraw the old and new cursor line, not all lines.
+Files: src/edit.c, src/move.c, src/screen.c, src/proto/screen.pro
+
+
+*** ../vim-8.1.0371/src/edit.c 2018-08-08 22:08:28.326846653 +0200
+--- src/edit.c 2018-09-12 21:39:50.838327555 +0200
+***************
+*** 1966,1972 ****
+ if (pc_status == PC_STATUS_RIGHT)
+ ++curwin->w_wcol;
+ if (pc_status == PC_STATUS_RIGHT || pc_status == PC_STATUS_LEFT)
+! redrawWinline(curwin->w_cursor.lnum, FALSE);
+ else
+ #endif
+ screen_puts(pc_bytes, pc_row - msg_scrolled, pc_col, pc_attr);
+--- 1966,1972 ----
+ if (pc_status == PC_STATUS_RIGHT)
+ ++curwin->w_wcol;
+ if (pc_status == PC_STATUS_RIGHT || pc_status == PC_STATUS_LEFT)
+! redrawWinline(curwin, curwin->w_cursor.lnum, FALSE);
+ else
+ #endif
+ screen_puts(pc_bytes, pc_row - msg_scrolled, pc_col, pc_attr);
+***************
+*** 2017,2023 ****
+ if (dollar_vcol >= 0)
+ {
+ dollar_vcol = -1;
+! redrawWinline(curwin->w_cursor.lnum, FALSE);
+ }
+ }
+
+--- 2017,2023 ----
+ if (dollar_vcol >= 0)
+ {
+ dollar_vcol = -1;
+! redrawWinline(curwin, curwin->w_cursor.lnum, FALSE);
+ }
+ }
+
+***************
+*** 7079,7085 ****
+ linenr_T lnum = spell_redraw_lnum;
+
+ spell_redraw_lnum = 0;
+! redrawWinline(lnum, FALSE);
+ }
+ }
+
+--- 7079,7085 ----
+ linenr_T lnum = spell_redraw_lnum;
+
+ spell_redraw_lnum = 0;
+! redrawWinline(curwin, lnum, FALSE);
+ }
+ }
+
+*** ../vim-8.1.0371/src/move.c 2018-07-10 15:07:11.779668824 +0200
+--- src/move.c 2018-09-12 21:43:54.096174935 +0200
+***************
+*** 123,128 ****
+--- 123,132 ----
+ set_empty_rows(wp, done);
+ }
+
++ #ifdef FEAT_SYN_HL
++ static linenr_T last_cursorline = 0;
++ #endif
++
+ /*
+ * Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is
+ * set.
+***************
+*** 140,146 ****
+ && !pum_visible()
+ # endif
+ )
+! redraw_win_later(wp, SOME_VALID);
+ }
+
+ /*
+--- 144,165 ----
+ && !pum_visible()
+ # endif
+ )
+! {
+! #ifdef FEAT_SYN_HL
+! if (!wp->w_p_rnu && wp->w_redr_type <= VALID && last_cursorline != 0)
+! {
+! // "last_cursorline" may be set for another window, worst case we
+! // redraw too much. This is optimized for moving the cursor around
+! // in the same window.
+! redrawWinline(wp, last_cursorline, FALSE);
+! redrawWinline(wp, wp->w_cursor.lnum, FALSE);
+! last_cursorline = wp->w_cursor.lnum;
+! redraw_win_later(wp, VALID);
+! }
+! else
+! #endif
+! redraw_win_later(wp, SOME_VALID);
+! }
+ }
+
+ /*
+*** ../vim-8.1.0371/src/screen.c 2018-09-06 13:14:39.144722527 +0200
+--- src/screen.c 2018-09-12 21:41:32.553424559 +0200
+***************
+*** 496,501 ****
+--- 496,502 ----
+ */
+ void
+ redrawWinline(
++ win_T *wp,
+ linenr_T lnum,
+ int invalid UNUSED) /* window line height is invalid now */
+ {
+***************
+*** 503,521 ****
+ int i;
+ #endif
+
+! if (curwin->w_redraw_top == 0 || curwin->w_redraw_top > lnum)
+! curwin->w_redraw_top = lnum;
+! if (curwin->w_redraw_bot == 0 || curwin->w_redraw_bot < lnum)
+! curwin->w_redraw_bot = lnum;
+! redraw_later(VALID);
+
+ #ifdef FEAT_FOLDING
+ if (invalid)
+ {
+ /* A w_lines[] entry for this lnum has become invalid. */
+! i = find_wl_entry(curwin, lnum);
+ if (i >= 0)
+! curwin->w_lines[i].wl_valid = FALSE;
+ }
+ #endif
+ }
+--- 504,522 ----
+ int i;
+ #endif
+
+! if (wp->w_redraw_top == 0 || wp->w_redraw_top > lnum)
+! wp->w_redraw_top = lnum;
+! if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < lnum)
+! wp->w_redraw_bot = lnum;
+! redraw_win_later(wp, VALID);
+
+ #ifdef FEAT_FOLDING
+ if (invalid)
+ {
+ /* A w_lines[] entry for this lnum has become invalid. */
+! i = find_wl_entry(wp, lnum);
+ if (i >= 0)
+! wp->w_lines[i].wl_valid = FALSE;
+ }
+ #endif
+ }
+*** ../vim-8.1.0371/src/proto/screen.pro 2018-06-16 15:32:34.460024472 +0200
+--- src/proto/screen.pro 2018-09-12 21:41:33.929412376 +0200
+***************
+*** 8,14 ****
+ void redraw_buf_and_status_later(buf_T *buf, int type);
+ int redraw_asap(int type);
+ void redraw_after_callback(int call_update_screen);
+! void redrawWinline(linenr_T lnum, int invalid);
+ void reset_updating_screen(int may_resize_shell);
+ void update_curbuf(int type);
+ int update_screen(int type_arg);
+--- 8,14 ----
+ void redraw_buf_and_status_later(buf_T *buf, int type);
+ int redraw_asap(int type);
+ void redraw_after_callback(int call_update_screen);
+! void redrawWinline(win_T *wp, linenr_T lnum, int invalid);
+ void reset_updating_screen(int may_resize_shell);
+ void update_curbuf(int type);
+ int update_screen(int type_arg);
+*** ../vim-8.1.0371/src/version.c 2018-09-12 20:29:05.479670601 +0200
+--- src/version.c 2018-09-12 21:51:28.616197716 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 372,
+ /**/
+
+--
+Despite the cost of living, have you noticed how it remains so popular?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0373 b/data/vim/patches/8.1.0373
new file mode 100644
index 000000000..526272bee
--- /dev/null
+++ b/data/vim/patches/8.1.0373
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0373
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0373 (after 8.1.0372)
+Problem: Screen updating still slow when 'cursorline' is set.
+Solution: Fix setting last_cursorline.
+Files: src/move.c
+
+
+*** ../vim-8.1.0372/src/move.c 2018-09-12 21:52:14.323799725 +0200
+--- src/move.c 2018-09-12 22:21:50.011113301 +0200
+***************
+*** 153,164 ****
+ // in the same window.
+ redrawWinline(wp, last_cursorline, FALSE);
+ redrawWinline(wp, wp->w_cursor.lnum, FALSE);
+- last_cursorline = wp->w_cursor.lnum;
+ redraw_win_later(wp, VALID);
+ }
+ else
+ #endif
+ redraw_win_later(wp, SOME_VALID);
+ }
+ }
+
+--- 153,166 ----
+ // in the same window.
+ redrawWinline(wp, last_cursorline, FALSE);
+ redrawWinline(wp, wp->w_cursor.lnum, FALSE);
+ redraw_win_later(wp, VALID);
+ }
+ else
+ #endif
+ redraw_win_later(wp, SOME_VALID);
++ #ifdef FEAT_SYN_HL
++ last_cursorline = wp->w_cursor.lnum;
++ #endif
+ }
+ }
+
+*** ../vim-8.1.0372/src/version.c 2018-09-12 21:52:14.323799725 +0200
+--- src/version.c 2018-09-12 22:27:02.348036616 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 373,
+ /**/
+
+--
+Just remember...if the world didn't suck, we'd all fall off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0374 b/data/vim/patches/8.1.0374
new file mode 100644
index 000000000..f4c21a4a6
--- /dev/null
+++ b/data/vim/patches/8.1.0374
@@ -0,0 +1,711 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0374
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0374
+Problem: Moving the cursor is slow when 'relativenumber' is set.
+Solution: Only redraw the number column, not all lines.
+Files: src/screen.c, src/move.c
+
+
+*** ../vim-8.1.0373/src/screen.c 2018-09-12 21:52:14.323799725 +0200
+--- src/screen.c 2018-09-12 23:09:41.244578629 +0200
+***************
+*** 132,138 ****
+ static void fill_foldcolumn(char_u *p, win_T *wp, int closed, linenr_T lnum);
+ static void copy_text_attr(int off, char_u *buf, int len, int attr);
+ #endif
+! static int win_line(win_T *, linenr_T, int, int, int nochange);
+ static int char_needs_redraw(int off_from, int off_to, int cols);
+ static void draw_vsep_win(win_T *wp, int row);
+ #ifdef FEAT_STL_OPT
+--- 132,138 ----
+ static void fill_foldcolumn(char_u *p, win_T *wp, int closed, linenr_T lnum);
+ static void copy_text_attr(int off, char_u *buf, int len, int attr);
+ #endif
+! static int win_line(win_T *, linenr_T, int, int, int nochange, int number_only);
+ static int char_needs_redraw(int off_from, int off_to, int cols);
+ static void draw_vsep_win(win_T *wp, int row);
+ #ifdef FEAT_STL_OPT
+***************
+*** 971,977 ****
+ start_search_hl();
+ prepare_search_hl(wp, lnum);
+ # endif
+! win_line(wp, lnum, row, row + wp->w_lines[j].wl_size, FALSE);
+ # if defined(FEAT_SEARCH_EXTRA)
+ end_search_hl();
+ # endif
+--- 971,978 ----
+ start_search_hl();
+ prepare_search_hl(wp, lnum);
+ # endif
+! win_line(wp, lnum, row, row + wp->w_lines[j].wl_size,
+! FALSE, FALSE);
+ # if defined(FEAT_SEARCH_EXTRA)
+ end_search_hl();
+ # endif
+***************
+*** 1881,1887 ****
+ /*
+ * Update a line when it is in an area that needs updating, when it
+ * has changes or w_lines[idx] is invalid.
+! * bot_start may be halfway a wrapped line after using
+ * win_del_lines(), check if the current line includes it.
+ * When syntax folding is being used, the saved syntax states will
+ * already have been updated, we can't see where the syntax state is
+--- 1882,1888 ----
+ /*
+ * Update a line when it is in an area that needs updating, when it
+ * has changes or w_lines[idx] is invalid.
+! * "bot_start" may be halfway a wrapped line after using
+ * win_del_lines(), check if the current line includes it.
+ * When syntax folding is being used, the saved syntax states will
+ * already have been updated, we can't see where the syntax state is
+***************
+*** 2140,2146 ****
+ /*
+ * Display one line.
+ */
+! row = win_line(wp, lnum, srow, wp->w_height, mod_top == 0);
+
+ #ifdef FEAT_FOLDING
+ wp->w_lines[idx].wl_folded = FALSE;
+--- 2141,2148 ----
+ /*
+ * Display one line.
+ */
+! row = win_line(wp, lnum, srow, wp->w_height,
+! mod_top == 0, FALSE);
+
+ #ifdef FEAT_FOLDING
+ wp->w_lines[idx].wl_folded = FALSE;
+***************
+*** 2177,2183 ****
+ }
+ else
+ {
+! /* This line does not need updating, advance to the next one */
+ row += wp->w_lines[idx++].wl_size;
+ if (row > wp->w_height) /* past end of screen */
+ break;
+--- 2179,2192 ----
+ }
+ else
+ {
+! if (wp->w_p_rnu)
+! {
+! // 'relativenumber' set: The text doesn't need to be drawn, but
+! // the number column nearly always does.
+! (void)win_line(wp, lnum, srow, wp->w_height, TRUE, TRUE);
+! }
+!
+! // This line does not need to be drawn, advance to the next one.
+ row += wp->w_lines[idx++].wl_size;
+ if (row > wp->w_height) /* past end of screen */
+ break;
+***************
+*** 3058,3064 ****
+ linenr_T lnum,
+ int startrow,
+ int endrow,
+! int nochange UNUSED) /* not updating for changed text */
+ {
+ int col = 0; /* visual column on screen */
+ unsigned off; /* offset in ScreenLines/ScreenAttrs */
+--- 3067,3074 ----
+ linenr_T lnum,
+ int startrow,
+ int endrow,
+! int nochange UNUSED, // not updating for changed text
+! int number_only) // only update the number column
+ {
+ int col = 0; /* visual column on screen */
+ unsigned off; /* offset in ScreenLines/ScreenAttrs */
+***************
+*** 3253,3464 ****
+ row = startrow;
+ screen_row = row + W_WINROW(wp);
+
+! /*
+! * To speed up the loop below, set extra_check when there is linebreak,
+! * trailing white space and/or syntax processing to be done.
+! */
+ #ifdef FEAT_LINEBREAK
+! extra_check = wp->w_p_lbr;
+ #else
+! extra_check = 0;
+ #endif
+ #ifdef FEAT_SYN_HL
+! if (syntax_present(wp) && !wp->w_s->b_syn_error
+ # ifdef SYN_TIME_LIMIT
+! && !wp->w_s->b_syn_slow
+ # endif
+! )
+! {
+! /* Prepare for syntax highlighting in this line. When there is an
+! * error, stop syntax highlighting. */
+! save_did_emsg = did_emsg;
+! did_emsg = FALSE;
+! syntax_start(wp, lnum);
+! if (did_emsg)
+! wp->w_s->b_syn_error = TRUE;
+! else
+ {
+! did_emsg = save_did_emsg;
+ #ifdef SYN_TIME_LIMIT
+! if (!wp->w_s->b_syn_slow)
+ #endif
+! {
+! has_syntax = TRUE;
+! extra_check = TRUE;
+ }
+ }
+- }
+
+! /* Check for columns to display for 'colorcolumn'. */
+! color_cols = wp->w_p_cc_cols;
+! if (color_cols != NULL)
+! draw_color_col = advance_color_col(VCOL_HLC, &color_cols);
+ #endif
+
+ #ifdef FEAT_TERMINAL
+! if (term_show_buffer(wp->w_buffer))
+! {
+! extra_check = TRUE;
+! get_term_attr = TRUE;
+! term_attr = term_get_attr(wp->w_buffer, lnum, -1);
+! }
+ #endif
+
+ #ifdef FEAT_SPELL
+! if (wp->w_p_spell
+! && *wp->w_s->b_p_spl != NUL
+! && wp->w_s->b_langp.ga_len > 0
+! && *(char **)(wp->w_s->b_langp.ga_data) != NULL)
+! {
+! /* Prepare for spell checking. */
+! has_spell = TRUE;
+! extra_check = TRUE;
+!
+! /* Get the start of the next line, so that words that wrap to the next
+! * line are found too: "et<line-break>al.".
+! * Trick: skip a few chars for C/shell/Vim comments */
+! nextline[SPWORDLEN] = NUL;
+! if (lnum < wp->w_buffer->b_ml.ml_line_count)
+ {
+! line = ml_get_buf(wp->w_buffer, lnum + 1, FALSE);
+! spell_cat_line(nextline + SPWORDLEN, line, SPWORDLEN);
+! }
+!
+! /* When a word wrapped from the previous line the start of the current
+! * line is valid. */
+! if (lnum == checked_lnum)
+! cur_checked_col = checked_col;
+! checked_lnum = 0;
+
+! /* When there was a sentence end in the previous line may require a
+! * word starting with capital in this line. In line 1 always check
+! * the first word. */
+! if (lnum != capcol_lnum)
+! cap_col = -1;
+! if (lnum == 1)
+! cap_col = 0;
+! capcol_lnum = 0;
+! }
+ #endif
+
+! /*
+! * handle visual active in this window
+! */
+! fromcol = -10;
+! tocol = MAXCOL;
+! if (VIsual_active && wp->w_buffer == curwin->w_buffer)
+! {
+! /* Visual is after curwin->w_cursor */
+! if (LTOREQ_POS(curwin->w_cursor, VIsual))
+! {
+! top = &curwin->w_cursor;
+! bot = &VIsual;
+! }
+! else /* Visual is before curwin->w_cursor */
+! {
+! top = &VIsual;
+! bot = &curwin->w_cursor;
+! }
+! lnum_in_visual_area = (lnum >= top->lnum && lnum <= bot->lnum);
+! if (VIsual_mode == Ctrl_V) /* block mode */
+ {
+! if (lnum_in_visual_area)
+ {
+! fromcol = wp->w_old_cursor_fcol;
+! tocol = wp->w_old_cursor_lcol;
+ }
+! }
+! else /* non-block mode */
+! {
+! if (lnum > top->lnum && lnum <= bot->lnum)
+! fromcol = 0;
+! else if (lnum == top->lnum)
+ {
+! if (VIsual_mode == 'V') /* linewise */
+! fromcol = 0;
+! else
+ {
+! getvvcol(wp, top, (colnr_T *)&fromcol, NULL, NULL);
+! if (gchar_pos(top) == NUL)
+! tocol = fromcol + 1;
+ }
+ }
+! if (VIsual_mode != 'V' && lnum == bot->lnum)
+ {
+! if (*p_sel == 'e' && bot->col == 0
+! #ifdef FEAT_VIRTUALEDIT
+! && bot->coladd == 0
+! #endif
+! )
+ {
+! fromcol = -10;
+! tocol = MAXCOL;
+ }
+! else if (bot->col == MAXCOL)
+! tocol = MAXCOL;
+! else
+ {
+! pos = *bot;
+! if (*p_sel == 'e')
+! getvvcol(wp, &pos, (colnr_T *)&tocol, NULL, NULL);
+ else
+ {
+! getvvcol(wp, &pos, NULL, NULL, (colnr_T *)&tocol);
+! ++tocol;
+ }
+ }
+ }
+- }
+
+! /* Check if the character under the cursor should not be inverted */
+! if (!highlight_match && lnum == curwin->w_cursor.lnum && wp == curwin
+ #ifdef FEAT_GUI
+! && !gui.in_use
+ #endif
+! )
+! noinvcur = TRUE;
+
+! /* if inverting in this line set area_highlighting */
+! if (fromcol >= 0)
+! {
+! area_highlighting = TRUE;
+! attr = HL_ATTR(HLF_V);
+ #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+! if ((clip_star.available && !clip_star.owned
+! && clip_isautosel_star())
+! || (clip_plus.available && !clip_plus.owned
+! && clip_isautosel_plus()))
+! attr = HL_ATTR(HLF_VNC);
+ #endif
+ }
+- }
+
+! /*
+! * handle 'incsearch' and ":s///c" highlighting
+! */
+! else if (highlight_match
+! && wp == curwin
+! && lnum >= curwin->w_cursor.lnum
+! && lnum <= curwin->w_cursor.lnum + search_match_lines)
+! {
+! if (lnum == curwin->w_cursor.lnum)
+! getvcol(curwin, &(curwin->w_cursor),
+! (colnr_T *)&fromcol, NULL, NULL);
+! else
+! fromcol = 0;
+! if (lnum == curwin->w_cursor.lnum + search_match_lines)
+! {
+! pos.lnum = lnum;
+! pos.col = search_match_endcol;
+! getvcol(curwin, &pos, (colnr_T *)&tocol, NULL, NULL);
+ }
+- else
+- tocol = MAXCOL;
+- /* do at least one character; happens when past end of line */
+- if (fromcol == tocol)
+- tocol = fromcol + 1;
+- area_highlighting = TRUE;
+- attr = HL_ATTR(HLF_I);
+ }
+
+ #ifdef FEAT_DIFF
+--- 3263,3477 ----
+ row = startrow;
+ screen_row = row + W_WINROW(wp);
+
+! if (!number_only)
+! {
+! /*
+! * To speed up the loop below, set extra_check when there is linebreak,
+! * trailing white space and/or syntax processing to be done.
+! */
+ #ifdef FEAT_LINEBREAK
+! extra_check = wp->w_p_lbr;
+ #else
+! extra_check = 0;
+ #endif
+ #ifdef FEAT_SYN_HL
+! if (syntax_present(wp) && !wp->w_s->b_syn_error
+ # ifdef SYN_TIME_LIMIT
+! && !wp->w_s->b_syn_slow
+ # endif
+! )
+ {
+! /* Prepare for syntax highlighting in this line. When there is an
+! * error, stop syntax highlighting. */
+! save_did_emsg = did_emsg;
+! did_emsg = FALSE;
+! syntax_start(wp, lnum);
+! if (did_emsg)
+! wp->w_s->b_syn_error = TRUE;
+! else
+! {
+! did_emsg = save_did_emsg;
+ #ifdef SYN_TIME_LIMIT
+! if (!wp->w_s->b_syn_slow)
+ #endif
+! {
+! has_syntax = TRUE;
+! extra_check = TRUE;
+! }
+ }
+ }
+
+! /* Check for columns to display for 'colorcolumn'. */
+! color_cols = wp->w_p_cc_cols;
+! if (color_cols != NULL)
+! draw_color_col = advance_color_col(VCOL_HLC, &color_cols);
+ #endif
+
+ #ifdef FEAT_TERMINAL
+! if (term_show_buffer(wp->w_buffer))
+! {
+! extra_check = TRUE;
+! get_term_attr = TRUE;
+! term_attr = term_get_attr(wp->w_buffer, lnum, -1);
+! }
+ #endif
+
+ #ifdef FEAT_SPELL
+! if (wp->w_p_spell
+! && *wp->w_s->b_p_spl != NUL
+! && wp->w_s->b_langp.ga_len > 0
+! && *(char **)(wp->w_s->b_langp.ga_data) != NULL)
+ {
+! /* Prepare for spell checking. */
+! has_spell = TRUE;
+! extra_check = TRUE;
+
+! /* Get the start of the next line, so that words that wrap to the next
+! * line are found too: "et<line-break>al.".
+! * Trick: skip a few chars for C/shell/Vim comments */
+! nextline[SPWORDLEN] = NUL;
+! if (lnum < wp->w_buffer->b_ml.ml_line_count)
+! {
+! line = ml_get_buf(wp->w_buffer, lnum + 1, FALSE);
+! spell_cat_line(nextline + SPWORDLEN, line, SPWORDLEN);
+! }
+!
+! /* When a word wrapped from the previous line the start of the current
+! * line is valid. */
+! if (lnum == checked_lnum)
+! cur_checked_col = checked_col;
+! checked_lnum = 0;
+!
+! /* When there was a sentence end in the previous line may require a
+! * word starting with capital in this line. In line 1 always check
+! * the first word. */
+! if (lnum != capcol_lnum)
+! cap_col = -1;
+! if (lnum == 1)
+! cap_col = 0;
+! capcol_lnum = 0;
+! }
+ #endif
+
+! /*
+! * handle visual active in this window
+! */
+! fromcol = -10;
+! tocol = MAXCOL;
+! if (VIsual_active && wp->w_buffer == curwin->w_buffer)
+ {
+! /* Visual is after curwin->w_cursor */
+! if (LTOREQ_POS(curwin->w_cursor, VIsual))
+ {
+! top = &curwin->w_cursor;
+! bot = &VIsual;
+ }
+! else /* Visual is before curwin->w_cursor */
+ {
+! top = &VIsual;
+! bot = &curwin->w_cursor;
+! }
+! lnum_in_visual_area = (lnum >= top->lnum && lnum <= bot->lnum);
+! if (VIsual_mode == Ctrl_V) /* block mode */
+! {
+! if (lnum_in_visual_area)
+ {
+! fromcol = wp->w_old_cursor_fcol;
+! tocol = wp->w_old_cursor_lcol;
+ }
+ }
+! else /* non-block mode */
+ {
+! if (lnum > top->lnum && lnum <= bot->lnum)
+! fromcol = 0;
+! else if (lnum == top->lnum)
+ {
+! if (VIsual_mode == 'V') /* linewise */
+! fromcol = 0;
+! else
+! {
+! getvvcol(wp, top, (colnr_T *)&fromcol, NULL, NULL);
+! if (gchar_pos(top) == NUL)
+! tocol = fromcol + 1;
+! }
+ }
+! if (VIsual_mode != 'V' && lnum == bot->lnum)
+ {
+! if (*p_sel == 'e' && bot->col == 0
+! #ifdef FEAT_VIRTUALEDIT
+! && bot->coladd == 0
+! #endif
+! )
+! {
+! fromcol = -10;
+! tocol = MAXCOL;
+! }
+! else if (bot->col == MAXCOL)
+! tocol = MAXCOL;
+ else
+ {
+! pos = *bot;
+! if (*p_sel == 'e')
+! getvvcol(wp, &pos, (colnr_T *)&tocol, NULL, NULL);
+! else
+! {
+! getvvcol(wp, &pos, NULL, NULL, (colnr_T *)&tocol);
+! ++tocol;
+! }
+ }
+ }
+ }
+
+! /* Check if the character under the cursor should not be inverted */
+! if (!highlight_match && lnum == curwin->w_cursor.lnum && wp == curwin
+ #ifdef FEAT_GUI
+! && !gui.in_use
+ #endif
+! )
+! noinvcur = TRUE;
+
+! /* if inverting in this line set area_highlighting */
+! if (fromcol >= 0)
+! {
+! area_highlighting = TRUE;
+! attr = HL_ATTR(HLF_V);
+ #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+! if ((clip_star.available && !clip_star.owned
+! && clip_isautosel_star())
+! || (clip_plus.available && !clip_plus.owned
+! && clip_isautosel_plus()))
+! attr = HL_ATTR(HLF_VNC);
+ #endif
++ }
+ }
+
+! /*
+! * handle 'incsearch' and ":s///c" highlighting
+! */
+! else if (highlight_match
+! && wp == curwin
+! && lnum >= curwin->w_cursor.lnum
+! && lnum <= curwin->w_cursor.lnum + search_match_lines)
+! {
+! if (lnum == curwin->w_cursor.lnum)
+! getvcol(curwin, &(curwin->w_cursor),
+! (colnr_T *)&fromcol, NULL, NULL);
+! else
+! fromcol = 0;
+! if (lnum == curwin->w_cursor.lnum + search_match_lines)
+! {
+! pos.lnum = lnum;
+! pos.col = search_match_endcol;
+! getvcol(curwin, &pos, (colnr_T *)&tocol, NULL, NULL);
+! }
+! else
+! tocol = MAXCOL;
+! /* do at least one character; happens when past end of line */
+! if (fromcol == tocol)
+! tocol = fromcol + 1;
+! area_highlighting = TRUE;
+! attr = HL_ATTR(HLF_I);
+ }
+ }
+
+ #ifdef FEAT_DIFF
+***************
+*** 3504,3510 ****
+ ptr = line;
+
+ #ifdef FEAT_SPELL
+! if (has_spell)
+ {
+ /* For checking first word with a capital skip white space. */
+ if (cap_col == 0)
+--- 3517,3523 ----
+ ptr = line;
+
+ #ifdef FEAT_SPELL
+! if (has_spell && !number_only)
+ {
+ /* For checking first word with a capital skip white space. */
+ if (cap_col == 0)
+***************
+*** 3564,3570 ****
+ v = wp->w_skipcol;
+ else
+ v = wp->w_leftcol;
+! if (v > 0)
+ {
+ #ifdef FEAT_MBYTE
+ char_u *prev_ptr = ptr;
+--- 3577,3583 ----
+ v = wp->w_skipcol;
+ else
+ v = wp->w_leftcol;
+! if (v > 0 && !number_only)
+ {
+ #ifdef FEAT_MBYTE
+ char_u *prev_ptr = ptr;
+***************
+*** 3707,3713 ****
+ */
+ cur = wp->w_match_head;
+ shl_flag = FALSE;
+! while (cur != NULL || shl_flag == FALSE)
+ {
+ if (shl_flag == FALSE)
+ {
+--- 3720,3726 ----
+ */
+ cur = wp->w_match_head;
+ shl_flag = FALSE;
+! while ((cur != NULL || shl_flag == FALSE) && !number_only)
+ {
+ if (shl_flag == FALSE)
+ {
+***************
+*** 4068,4080 ****
+ }
+ }
+
+! /* When still displaying '$' of change command, stop at cursor */
+! if (dollar_vcol >= 0 && wp == curwin
+ && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
+ #ifdef FEAT_DIFF
+ && filler_todo <= 0
+ #endif
+ )
+ {
+ screen_line(screen_row, wp->w_wincol, col, -(int)wp->w_width,
+ HAS_RIGHTLEFT(wp->w_p_rl));
+--- 4081,4096 ----
+ }
+ }
+
+! // When still displaying '$' of change command, stop at cursor.
+! // When only displaying the (relative) line number and that's done,
+! // stop here.
+! if ((dollar_vcol >= 0 && wp == curwin
+ && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
+ #ifdef FEAT_DIFF
+ && filler_todo <= 0
+ #endif
+ )
++ || (number_only && draw_state > WL_NR))
+ {
+ screen_line(screen_row, wp->w_wincol, col, -(int)wp->w_width,
+ HAS_RIGHTLEFT(wp->w_p_rl));
+*** ../vim-8.1.0373/src/move.c 2018-09-12 22:27:12.151940716 +0200
+--- src/move.c 2018-09-12 23:08:43.721012117 +0200
+***************
+*** 145,165 ****
+ # endif
+ )
+ {
+ #ifdef FEAT_SYN_HL
+! if (!wp->w_p_rnu && wp->w_redr_type <= VALID && last_cursorline != 0)
+ {
+! // "last_cursorline" may be set for another window, worst case we
+! // redraw too much. This is optimized for moving the cursor around
+! // in the same window.
+! redrawWinline(wp, last_cursorline, FALSE);
+! redrawWinline(wp, wp->w_cursor.lnum, FALSE);
+! redraw_win_later(wp, VALID);
+ }
+- else
+- #endif
+- redraw_win_later(wp, SOME_VALID);
+- #ifdef FEAT_SYN_HL
+- last_cursorline = wp->w_cursor.lnum;
+ #endif
+ }
+ }
+--- 145,169 ----
+ # endif
+ )
+ {
++ if (wp->w_p_rnu)
++ // win_line() will redraw the number column only.
++ redraw_win_later(wp, VALID);
+ #ifdef FEAT_SYN_HL
+! if (wp->w_p_cul)
+ {
+! if (wp->w_redr_type <= VALID && last_cursorline != 0)
+! {
+! // "last_cursorline" may be set for another window, worst case
+! // we redraw too much. This is optimized for moving the cursor
+! // around in the same window.
+! redrawWinline(wp, last_cursorline, FALSE);
+! redrawWinline(wp, wp->w_cursor.lnum, FALSE);
+! redraw_win_later(wp, VALID);
+! }
+! else
+! redraw_win_later(wp, SOME_VALID);
+! last_cursorline = wp->w_cursor.lnum;
+ }
+ #endif
+ }
+ }
+*** ../vim-8.1.0373/src/version.c 2018-09-12 22:27:12.151940716 +0200
+--- src/version.c 2018-09-12 23:06:23.110026307 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 374,
+ /**/
+
+--
+The 50-50-90 rule: Anytime you have a 50-50 chance of getting
+something right, there's a 90% probability you'll get it wrong.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0375 b/data/vim/patches/8.1.0375
new file mode 100644
index 000000000..54eb19fb0
--- /dev/null
+++ b/data/vim/patches/8.1.0375
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0375
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0375
+Problem: Cannot use diff mode with Cygwin diff.exe. (Igor Forca)
+Solution: Skip over unrecognized lines in the diff output.
+Files: src/diff.c, src/testdir/test_diffmode.vim
+
+
+*** ../vim-8.1.0374/src/diff.c 2018-09-12 18:00:08.937570191 +0200
+--- src/diff.c 2018-09-13 13:02:16.005128090 +0200
+***************
+*** 1600,1605 ****
+--- 1600,1609 ----
+ && (tag_fgets(linebuf, LBUFLEN, fd) == 0)
+ && (STRNCMP(line, "@@ ", 3) == 0))
+ diffstyle = DIFF_UNIFIED;
++ else
++ // Format not recognized yet, skip over this line. Cygwin diff
++ // may put a warning at the start of the file.
++ continue;
+ }
+
+ if (diffstyle == DIFF_ED)
+*** ../vim-8.1.0374/src/testdir/test_diffmode.vim 2018-09-10 17:50:32.713306941 +0200
+--- src/testdir/test_diffmode.vim 2018-09-13 13:01:54.181296798 +0200
+***************
+*** 519,525 ****
+ endif
+
+ func DiffExpr()
+! silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>' . v:fname_out
+ endfunc
+ set diffexpr=DiffExpr()
+ set diffopt=foldcolumn:0
+--- 519,527 ----
+ endif
+
+ func DiffExpr()
+! " Prepent some text to check diff type detection
+! call writefile(['warning', ' message'], v:fname_out)
+! silent exe '!diff ' . v:fname_in . ' ' . v:fname_new . '>>' . v:fname_out
+ endfunc
+ set diffexpr=DiffExpr()
+ set diffopt=foldcolumn:0
+*** ../vim-8.1.0374/src/version.c 2018-09-12 23:15:45.257659803 +0200
+--- src/version.c 2018-09-13 12:27:07.877584085 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 375,
+ /**/
+
+--
+A fine is a tax for doing wrong. A tax is a fine for doing well.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0376 b/data/vim/patches/8.1.0376
new file mode 100644
index 000000000..ddd99523d
--- /dev/null
+++ b/data/vim/patches/8.1.0376
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0376
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0376
+Problem: Compiler warning for uninitialized variable. (Tony Mechelynck)
+Solution: Initialize the variable.
+Files: src/screen.c
+
+
+*** ../vim-8.1.0375/src/screen.c 2018-09-12 23:15:45.257659803 +0200
+--- src/screen.c 2018-09-13 14:55:11.884608178 +0200
+***************
+*** 3147,3153 ****
+ static linenr_T capcol_lnum = 0; /* line number where "cap_col" used */
+ int cur_checked_col = 0; /* checked column for current line */
+ #endif
+! int extra_check; /* has syntax or linebreak */
+ #ifdef FEAT_MBYTE
+ int multi_attr = 0; /* attributes desired by multibyte */
+ int mb_l = 1; /* multi-byte byte length */
+--- 3147,3153 ----
+ static linenr_T capcol_lnum = 0; /* line number where "cap_col" used */
+ int cur_checked_col = 0; /* checked column for current line */
+ #endif
+! int extra_check = 0; // has syntax or linebreak
+ #ifdef FEAT_MBYTE
+ int multi_attr = 0; /* attributes desired by multibyte */
+ int mb_l = 1; /* multi-byte byte length */
+***************
+*** 3271,3278 ****
+ */
+ #ifdef FEAT_LINEBREAK
+ extra_check = wp->w_p_lbr;
+- #else
+- extra_check = 0;
+ #endif
+ #ifdef FEAT_SYN_HL
+ if (syntax_present(wp) && !wp->w_s->b_syn_error
+--- 3271,3276 ----
+*** ../vim-8.1.0375/src/version.c 2018-09-13 13:03:08.228724142 +0200
+--- src/version.c 2018-09-13 14:55:52.872229838 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 376,
+ /**/
+
+--
+Everybody lies, but it doesn't matter since nobody listens.
+ -- Lieberman's Law
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0377 b/data/vim/patches/8.1.0377
new file mode 100644
index 000000000..e4d9ccfd4
--- /dev/null
+++ b/data/vim/patches/8.1.0377
@@ -0,0 +1,771 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0377
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0377
+Problem: Xdiff doesn't use the Vim memory allocation functions.
+Solution: Change the xdl_ defines. Check for out-of-memory. Rename
+ "ignored" to "vim_ignored".
+Files: src/xdiff/xdiff.h, src/xdiff/xpatience.c, src/xdiff/xdiffi.c,
+ src/channel.c, src/diff.c, src/evalfunc.c, src/ex_cmds.c,
+ src/fileio.c, src/main.c, src/mbyte.c, src/netbeans.c,
+ src/os_unix.c, src/os_win32.c, src/ui.c, src/window.c,
+ src/globals.h, src/term.c
+
+
+*** ../vim-8.1.0376/src/xdiff/xdiff.h 2018-09-10 17:50:32.713306941 +0200
+--- src/xdiff/xdiff.h 2018-09-13 15:18:00.938808604 +0200
+***************
+*** 108,117 ****
+ long bsize;
+ } bdiffparam_t;
+
+
+! #define xdl_malloc(x) malloc(x)
+! #define xdl_free(ptr) free(ptr)
+! #define xdl_realloc(ptr,x) realloc(ptr,x)
+
+ void *xdl_mmfile_first(mmfile_t *mmf, long *size);
+ long xdl_mmfile_size(mmfile_t *mmf);
+--- 108,118 ----
+ long bsize;
+ } bdiffparam_t;
+
++ #include "vim.h"
+
+! #define xdl_malloc(x) lalloc((x), TRUE)
+! #define xdl_free(ptr) vim_free(ptr)
+! #define xdl_realloc(ptr,x) vim_realloc((ptr),(x))
+
+ void *xdl_mmfile_first(mmfile_t *mmf, long *size);
+ long xdl_mmfile_size(mmfile_t *mmf);
+*** ../vim-8.1.0376/src/xdiff/xpatience.c 2018-09-10 17:50:32.717306902 +0200
+--- src/xdiff/xpatience.c 2018-09-13 15:12:42.501925972 +0200
+***************
+*** 210,215 ****
+--- 210,219 ----
+ int longest = 0, i;
+ struct entry *entry;
+
++ /* Added to silence Coverity. */
++ if (sequence == NULL)
++ return map->first;
++
+ /*
+ * If not -1, this entry in sequence must never be overridden.
+ * Therefore, overriding entries before this has no effect, so
+*** ../vim-8.1.0376/src/xdiff/xdiffi.c 2018-09-10 17:50:32.713306941 +0200
+--- src/xdiff/xdiffi.c 2018-09-13 15:18:46.014371180 +0200
+***************
+*** 392,400 ****
+ }
+
+ /*
+! * If a line is indented more than this, get_indent() just returns this value.
+ * This avoids having to do absurd amounts of work for data that are not
+! * human-readable text, and also ensures that the output of get_indent fits within
+ * an int.
+ */
+ #define MAX_INDENT 200
+--- 392,400 ----
+ }
+
+ /*
+! * If a line is indented more than this, xget_indent() just returns this value.
+ * This avoids having to do absurd amounts of work for data that are not
+! * human-readable text, and also ensures that the output of xget_indent fits within
+ * an int.
+ */
+ #define MAX_INDENT 200
+***************
+*** 404,410 ****
+ * columns. Return -1 if line is empty or contains only whitespace. Clamp the
+ * output value at MAX_INDENT.
+ */
+! static int get_indent(xrecord_t *rec)
+ {
+ long i;
+ int ret = 0;
+--- 404,410 ----
+ * columns. Return -1 if line is empty or contains only whitespace. Clamp the
+ * output value at MAX_INDENT.
+ */
+! static int xget_indent(xrecord_t *rec)
+ {
+ long i;
+ int ret = 0;
+***************
+*** 492,504 ****
+ m->indent = -1;
+ } else {
+ m->end_of_file = 0;
+! m->indent = get_indent(xdf->recs[split]);
+ }
+
+ m->pre_blank = 0;
+ m->pre_indent = -1;
+ for (i = split - 1; i >= 0; i--) {
+! m->pre_indent = get_indent(xdf->recs[i]);
+ if (m->pre_indent != -1)
+ break;
+ m->pre_blank += 1;
+--- 492,504 ----
+ m->indent = -1;
+ } else {
+ m->end_of_file = 0;
+! m->indent = xget_indent(xdf->recs[split]);
+ }
+
+ m->pre_blank = 0;
+ m->pre_indent = -1;
+ for (i = split - 1; i >= 0; i--) {
+! m->pre_indent = xget_indent(xdf->recs[i]);
+ if (m->pre_indent != -1)
+ break;
+ m->pre_blank += 1;
+***************
+*** 511,517 ****
+ m->post_blank = 0;
+ m->post_indent = -1;
+ for (i = split + 1; i < xdf->nrec; i++) {
+! m->post_indent = get_indent(xdf->recs[i]);
+ if (m->post_indent != -1)
+ break;
+ m->post_blank += 1;
+--- 511,517 ----
+ m->post_blank = 0;
+ m->post_indent = -1;
+ for (i = split + 1; i < xdf->nrec; i++) {
+! m->post_indent = xget_indent(xdf->recs[i]);
+ if (m->post_indent != -1)
+ break;
+ m->post_blank += 1;
+*** ../vim-8.1.0376/src/channel.c 2018-09-06 16:27:20.664831945 +0200
+--- src/channel.c 2018-09-13 15:20:13.661522640 +0200
+***************
+*** 1858,1864 ****
+ {
+ ch_log_lead(lead, channel, part);
+ fprintf(log_fd, "'");
+! ignored = (int)fwrite(buf, len, 1, log_fd);
+ fprintf(log_fd, "'\n");
+ }
+ return OK;
+--- 1858,1864 ----
+ {
+ ch_log_lead(lead, channel, part);
+ fprintf(log_fd, "'");
+! vim_ignored = (int)fwrite(buf, len, 1, log_fd);
+ fprintf(log_fd, "'\n");
+ }
+ return OK;
+***************
+*** 2388,2394 ****
+
+ u_sync(TRUE);
+ /* ignore undo failure, undo is not very useful here */
+! ignored = u_save(lnum - empty, lnum + 1);
+
+ if (empty)
+ {
+--- 2388,2394 ----
+
+ u_sync(TRUE);
+ /* ignore undo failure, undo is not very useful here */
+! vim_ignored = u_save(lnum - empty, lnum + 1);
+
+ if (empty)
+ {
+***************
+*** 3730,3736 ****
+ {
+ ch_log_lead("SEND ", channel, part);
+ fprintf(log_fd, "'");
+! ignored = (int)fwrite(buf_arg, len_arg, 1, log_fd);
+ fprintf(log_fd, "'\n");
+ fflush(log_fd);
+ did_log_msg = TRUE;
+--- 3730,3736 ----
+ {
+ ch_log_lead("SEND ", channel, part);
+ fprintf(log_fd, "'");
+! vim_ignored = (int)fwrite(buf_arg, len_arg, 1, log_fd);
+ fprintf(log_fd, "'\n");
+ fflush(log_fd);
+ did_log_msg = TRUE;
+*** ../vim-8.1.0376/src/diff.c 2018-09-13 13:03:08.228724142 +0200
+--- src/diff.c 2018-09-13 15:20:28.509379140 +0200
+***************
+*** 1203,1212 ****
+ {
+ # ifdef TEMPDIRNAMES
+ if (vim_tempdir != NULL)
+! ignored = mch_chdir((char *)vim_tempdir);
+ else
+ # endif
+! ignored = mch_chdir("/tmp");
+ shorten_fnames(TRUE);
+ }
+ #endif
+--- 1203,1212 ----
+ {
+ # ifdef TEMPDIRNAMES
+ if (vim_tempdir != NULL)
+! vim_ignored = mch_chdir((char *)vim_tempdir);
+ else
+ # endif
+! vim_ignored = mch_chdir("/tmp");
+ shorten_fnames(TRUE);
+ }
+ #endif
+*** ../vim-8.1.0376/src/evalfunc.c 2018-09-11 20:10:17.138525018 +0200
+--- src/evalfunc.c 2018-09-13 15:20:58.541089065 +0200
+***************
+*** 14016,14022 ****
+ else if (do_fsync)
+ /* Ignore the error, the user wouldn't know what to do about it.
+ * May happen for a device. */
+! ignored = fsync(fileno(fd));
+ #endif
+ fclose(fd);
+ }
+--- 14016,14022 ----
+ else if (do_fsync)
+ /* Ignore the error, the user wouldn't know what to do about it.
+ * May happen for a device. */
+! vim_ignored = fsync(fileno(fd));
+ #endif
+ fclose(fd);
+ }
+*** ../vim-8.1.0376/src/ex_cmds.c 2018-08-21 15:12:10.835801673 +0200
+--- src/ex_cmds.c 2018-09-13 15:21:18.432897079 +0200
+***************
+*** 2117,2123 ****
+ if (st_old.st_uid != tmp_st.st_uid)
+ /* Changing the owner might fail, in which case the
+ * file will now owned by the current user, oh well. */
+! ignored = fchown(fileno(fp_out), st_old.st_uid, -1);
+ if (st_old.st_gid != tmp_st.st_gid
+ && fchown(fileno(fp_out), -1, st_old.st_gid) == -1)
+ /* can't set the group to what it should be, remove
+--- 2117,2123 ----
+ if (st_old.st_uid != tmp_st.st_uid)
+ /* Changing the owner might fail, in which case the
+ * file will now owned by the current user, oh well. */
+! vim_ignored = fchown(fileno(fp_out), st_old.st_uid, -1);
+ if (st_old.st_gid != tmp_st.st_gid
+ && fchown(fileno(fp_out), -1, st_old.st_gid) == -1)
+ /* can't set the group to what it should be, remove
+*** ../vim-8.1.0376/src/fileio.c 2018-09-10 21:04:09.868392665 +0200
+--- src/fileio.c 2018-09-13 15:25:58.942199081 +0200
+***************
+*** 2408,2414 ****
+ {
+ /* Use stderr for stdin, makes shell commands work. */
+ close(0);
+! ignored = dup(2);
+ }
+ #endif
+
+--- 2408,2414 ----
+ {
+ /* Use stderr for stdin, makes shell commands work. */
+ close(0);
+! vim_ignored = dup(2);
+ }
+ #endif
+
+***************
+*** 3751,3757 ****
+ {
+ # ifdef UNIX
+ # ifdef HAVE_FCHOWN
+! ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
+ # endif
+ if (mch_stat((char *)IObuff, &st) < 0
+ || st.st_uid != st_old.st_uid
+--- 3751,3757 ----
+ {
+ # ifdef UNIX
+ # ifdef HAVE_FCHOWN
+! vim_ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
+ # endif
+ if (mch_stat((char *)IObuff, &st) < 0
+ || st.st_uid != st_old.st_uid
+***************
+*** 4509,4515 ****
+ #endif
+ #ifdef HAVE_FTRUNCATE
+ if (!append)
+! ignored = ftruncate(fd, (off_t)0);
+ #endif
+
+ #if defined(WIN3264)
+--- 4509,4515 ----
+ #endif
+ #ifdef HAVE_FTRUNCATE
+ if (!append)
+! vim_ignored = ftruncate(fd, (off_t)0);
+ #endif
+
+ #if defined(WIN3264)
+***************
+*** 4789,4795 ****
+ || st.st_gid != st_old.st_gid)
+ {
+ /* changing owner might not be possible */
+! ignored = fchown(fd, st_old.st_uid, -1);
+ /* if changing group fails clear the group permissions */
+ if (fchown(fd, -1, st_old.st_gid) == -1 && perm > 0)
+ perm &= ~070;
+--- 4789,4795 ----
+ || st.st_gid != st_old.st_gid)
+ {
+ /* changing owner might not be possible */
+! vim_ignored = fchown(fd, st_old.st_uid, -1);
+ /* if changing group fails clear the group permissions */
+ if (fchown(fd, -1, st_old.st_gid) == -1 && perm > 0)
+ perm &= ~070;
+***************
+*** 6482,6490 ****
+ {
+ tbuf[FGETS_SIZE - 2] = NUL;
+ #ifdef USE_CR
+! ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
+ #else
+! ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
+ #endif
+ } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
+ }
+--- 6482,6490 ----
+ {
+ tbuf[FGETS_SIZE - 2] = NUL;
+ #ifdef USE_CR
+! vim_ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
+ #else
+! vim_ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
+ #endif
+ } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
+ }
+*** ../vim-8.1.0376/src/main.c 2018-09-10 21:04:09.872392623 +0200
+--- src/main.c 2018-09-13 15:22:28.516221441 +0200
+***************
+*** 2632,2638 ****
+ * Is there any other system that cannot do this?
+ */
+ close(0);
+! ignored = dup(2);
+ #endif
+ }
+
+--- 2632,2638 ----
+ * Is there any other system that cannot do this?
+ */
+ close(0);
+! vim_ignored = dup(2);
+ #endif
+ }
+
+*** ../vim-8.1.0376/src/mbyte.c 2018-09-11 21:30:05.253070476 +0200
+--- src/mbyte.c 2018-09-13 15:22:39.728113472 +0200
+***************
+*** 756,762 ****
+ * where mblen() returns 0 for invalid character.
+ * Therefore, following condition includes 0.
+ */
+! ignored = mblen(NULL, 0); /* First reset the state. */
+ if (mblen(buf, (size_t)1) <= 0)
+ n = 2;
+ else
+--- 756,762 ----
+ * where mblen() returns 0 for invalid character.
+ * Therefore, following condition includes 0.
+ */
+! vim_ignored = mblen(NULL, 0); // First reset the state.
+ if (mblen(buf, (size_t)1) <= 0)
+ n = 2;
+ else
+*** ../vim-8.1.0376/src/netbeans.c 2018-03-04 16:12:13.000000000 +0100
+--- src/netbeans.c 2018-09-13 15:23:17.979745287 +0200
+***************
+*** 1988,1997 ****
+ pos = get_off_or_lnum(buf->bufp, &args);
+
+ cp = (char *)args;
+! ignored = (int)strtol(cp, &cp, 10);
+ args = (char_u *)cp;
+ # ifdef NBDEBUG
+! if (ignored != -1)
+ {
+ nbdebug((" partial line annotation -- Not Yet Implemented!\n"));
+ }
+--- 1988,1997 ----
+ pos = get_off_or_lnum(buf->bufp, &args);
+
+ cp = (char *)args;
+! vim_ignored = (int)strtol(cp, &cp, 10);
+ args = (char_u *)cp;
+ # ifdef NBDEBUG
+! if (vim_ignored != -1)
+ {
+ nbdebug((" partial line annotation -- Not Yet Implemented!\n"));
+ }
+*** ../vim-8.1.0376/src/os_unix.c 2018-09-12 20:29:05.479670601 +0200
+--- src/os_unix.c 2018-09-13 15:24:00.571335689 +0200
+***************
+*** 357,363 ****
+ void
+ mch_write(char_u *s, int len)
+ {
+! ignored = (int)write(1, (char *)s, len);
+ if (p_wd) /* Unix is too fast, slow down a bit more */
+ RealWaitForChar(read_cmd_fd, p_wd, NULL, NULL);
+ }
+--- 357,363 ----
+ void
+ mch_write(char_u *s, int len)
+ {
+! vim_ignored = (int)write(1, (char *)s, len);
+ if (p_wd) /* Unix is too fast, slow down a bit more */
+ RealWaitForChar(read_cmd_fd, p_wd, NULL, NULL);
+ }
+***************
+*** 4693,4701 ****
+ */
+ if (fd >= 0)
+ {
+! ignored = dup(fd); /* To replace stdin (fd 0) */
+! ignored = dup(fd); /* To replace stdout (fd 1) */
+! ignored = dup(fd); /* To replace stderr (fd 2) */
+
+ /* Don't need this now that we've duplicated it */
+ close(fd);
+--- 4693,4701 ----
+ */
+ if (fd >= 0)
+ {
+! vim_ignored = dup(fd); /* To replace stdin (fd 0) */
+! vim_ignored = dup(fd); /* To replace stdout (fd 1) */
+! vim_ignored = dup(fd); /* To replace stderr (fd 2) */
+
+ /* Don't need this now that we've duplicated it */
+ close(fd);
+***************
+*** 4752,4764 ****
+
+ /* set up stdin/stdout/stderr for the child */
+ close(0);
+! ignored = dup(pty_slave_fd);
+ close(1);
+! ignored = dup(pty_slave_fd);
+ if (gui.in_use)
+ {
+ close(2);
+! ignored = dup(pty_slave_fd);
+ }
+
+ close(pty_slave_fd); /* has been dupped, close it now */
+--- 4752,4764 ----
+
+ /* set up stdin/stdout/stderr for the child */
+ close(0);
+! vim_ignored = dup(pty_slave_fd);
+ close(1);
+! vim_ignored = dup(pty_slave_fd);
+ if (gui.in_use)
+ {
+ close(2);
+! vim_ignored = dup(pty_slave_fd);
+ }
+
+ close(pty_slave_fd); /* has been dupped, close it now */
+***************
+*** 4769,4781 ****
+ /* set up stdin for the child */
+ close(fd_toshell[1]);
+ close(0);
+! ignored = dup(fd_toshell[0]);
+ close(fd_toshell[0]);
+
+ /* set up stdout for the child */
+ close(fd_fromshell[0]);
+ close(1);
+! ignored = dup(fd_fromshell[1]);
+ close(fd_fromshell[1]);
+
+ # ifdef FEAT_GUI
+--- 4769,4781 ----
+ /* set up stdin for the child */
+ close(fd_toshell[1]);
+ close(0);
+! vim_ignored = dup(fd_toshell[0]);
+ close(fd_toshell[0]);
+
+ /* set up stdout for the child */
+ close(fd_fromshell[0]);
+ close(1);
+! vim_ignored = dup(fd_fromshell[1]);
+ close(fd_fromshell[1]);
+
+ # ifdef FEAT_GUI
+***************
+*** 4783,4789 ****
+ {
+ /* set up stderr for the child */
+ close(2);
+! ignored = dup(1);
+ }
+ # endif
+ }
+--- 4783,4789 ----
+ {
+ /* set up stderr for the child */
+ close(2);
+! vim_ignored = dup(1);
+ }
+ # endif
+ }
+***************
+*** 4920,4926 ****
+ && (lnum !=
+ curbuf->b_ml.ml_line_count
+ || curbuf->b_p_eol)))
+! ignored = write(toshell_fd, "\n",
+ (size_t)1);
+ ++lnum;
+ if (lnum > curbuf->b_op_end.lnum)
+--- 4920,4926 ----
+ && (lnum !=
+ curbuf->b_ml.ml_line_count
+ || curbuf->b_p_eol)))
+! vim_ignored = write(toshell_fd, "\n",
+ (size_t)1);
+ ++lnum;
+ if (lnum > curbuf->b_op_end.lnum)
+***************
+*** 5611,5644 ****
+ /* set up stdin for the child */
+ close(0);
+ if (use_null_for_in && null_fd >= 0)
+! ignored = dup(null_fd);
+ else if (fd_in[0] < 0)
+! ignored = dup(pty_slave_fd);
+ else
+! ignored = dup(fd_in[0]);
+
+ /* set up stderr for the child */
+ close(2);
+ if (use_null_for_err && null_fd >= 0)
+ {
+! ignored = dup(null_fd);
+ stderr_works = FALSE;
+ }
+ else if (use_out_for_err)
+! ignored = dup(fd_out[1]);
+ else if (fd_err[1] < 0)
+! ignored = dup(pty_slave_fd);
+ else
+! ignored = dup(fd_err[1]);
+
+ /* set up stdout for the child */
+ close(1);
+ if (use_null_for_out && null_fd >= 0)
+! ignored = dup(null_fd);
+ else if (fd_out[1] < 0)
+! ignored = dup(pty_slave_fd);
+ else
+! ignored = dup(fd_out[1]);
+
+ if (fd_in[0] >= 0)
+ close(fd_in[0]);
+--- 5611,5644 ----
+ /* set up stdin for the child */
+ close(0);
+ if (use_null_for_in && null_fd >= 0)
+! vim_ignored = dup(null_fd);
+ else if (fd_in[0] < 0)
+! vim_ignored = dup(pty_slave_fd);
+ else
+! vim_ignored = dup(fd_in[0]);
+
+ /* set up stderr for the child */
+ close(2);
+ if (use_null_for_err && null_fd >= 0)
+ {
+! vim_ignored = dup(null_fd);
+ stderr_works = FALSE;
+ }
+ else if (use_out_for_err)
+! vim_ignored = dup(fd_out[1]);
+ else if (fd_err[1] < 0)
+! vim_ignored = dup(pty_slave_fd);
+ else
+! vim_ignored = dup(fd_err[1]);
+
+ /* set up stdout for the child */
+ close(1);
+ if (use_null_for_out && null_fd >= 0)
+! vim_ignored = dup(null_fd);
+ else if (fd_out[1] < 0)
+! vim_ignored = dup(pty_slave_fd);
+ else
+! vim_ignored = dup(fd_out[1]);
+
+ if (fd_in[0] >= 0)
+ close(fd_in[0]);
+*** ../vim-8.1.0376/src/os_win32.c 2018-09-06 13:14:39.144722527 +0200
+--- src/os_win32.c 2018-09-13 15:24:11.255233005 +0200
+***************
+*** 4388,4394 ****
+ && (lnum != curbuf->b_ml.ml_line_count
+ || curbuf->b_p_eol)))
+ {
+! WriteFile(g_hChildStd_IN_Wr, "\n", 1, (LPDWORD)&ignored, NULL);
+ }
+
+ ++lnum;
+--- 4388,4395 ----
+ && (lnum != curbuf->b_ml.ml_line_count
+ || curbuf->b_p_eol)))
+ {
+! WriteFile(g_hChildStd_IN_Wr, "\n", 1,
+! (LPDWORD)&vim_ignored, NULL);
+ }
+
+ ++lnum;
+*** ../vim-8.1.0376/src/ui.c 2018-05-11 21:58:49.000000000 +0200
+--- src/ui.c 2018-09-13 15:24:57.474788997 +0200
+***************
+*** 403,409 ****
+ void
+ ui_breakcheck_force(int force)
+ {
+! int save_us = updating_screen;
+
+ /* We do not want gui_resize_shell() to redraw the screen here. */
+ ++updating_screen;
+--- 403,409 ----
+ void
+ ui_breakcheck_force(int force)
+ {
+! int save_updating_screen = updating_screen;
+
+ /* We do not want gui_resize_shell() to redraw the screen here. */
+ ++updating_screen;
+***************
+*** 415,422 ****
+ #endif
+ mch_breakcheck(force);
+
+! if (save_us)
+! updating_screen = save_us;
+ else
+ reset_updating_screen(FALSE);
+ }
+--- 415,422 ----
+ #endif
+ mch_breakcheck(force);
+
+! if (save_updating_screen)
+! updating_screen = TRUE;
+ else
+ reset_updating_screen(FALSE);
+ }
+***************
+*** 1885,1891 ****
+ #ifdef HAVE_DUP
+ /* Use stderr for stdin, also works for shell commands. */
+ close(0);
+! ignored = dup(2);
+ #else
+ read_cmd_fd = 2; /* read from stderr instead of stdin */
+ #endif
+--- 1885,1891 ----
+ #ifdef HAVE_DUP
+ /* Use stderr for stdin, also works for shell commands. */
+ close(0);
+! vim_ignored = dup(2);
+ #else
+ read_cmd_fd = 2; /* read from stderr instead of stdin */
+ #endif
+*** ../vim-8.1.0376/src/window.c 2018-08-21 16:56:28.367325278 +0200
+--- src/window.c 2018-09-13 15:25:10.614662839 +0200
+***************
+*** 4436,4442 ****
+ {
+ /* Window doesn't have a local directory and we are not in the global
+ * directory: Change to the global directory. */
+! ignored = mch_chdir((char *)globaldir);
+ VIM_CLEAR(globaldir);
+ shorten_fnames(TRUE);
+ }
+--- 4436,4442 ----
+ {
+ /* Window doesn't have a local directory and we are not in the global
+ * directory: Change to the global directory. */
+! vim_ignored = mch_chdir((char *)globaldir);
+ VIM_CLEAR(globaldir);
+ shorten_fnames(TRUE);
+ }
+*** ../vim-8.1.0376/src/globals.h 2018-09-10 21:04:09.868392665 +0200
+--- src/globals.h 2018-09-13 15:26:19.670000302 +0200
+***************
+*** 1621,1628 ****
+ * can't do anything useful with the value. Assign to this variable to avoid
+ * the warning.
+ */
+! EXTERN int ignored;
+! EXTERN char *ignoredp;
+
+ #ifdef FEAT_EVAL
+ /* set by alloc_fail(): ID */
+--- 1621,1628 ----
+ * can't do anything useful with the value. Assign to this variable to avoid
+ * the warning.
+ */
+! EXTERN int vim_ignored;
+! EXTERN char *vim_ignoredp;
+
+ #ifdef FEAT_EVAL
+ /* set by alloc_fail(): ID */
+*** ../vim-8.1.0376/src/term.c 2018-09-10 21:04:09.872392623 +0200
+--- src/term.c 2018-09-13 15:26:15.598039345 +0200
+***************
+*** 7013,7019 ****
+ size_t len;
+ int pos;
+
+! ignoredp = fgets(line, LINE_LEN, fd);
+ len = strlen(line);
+
+ if (len <= 1 || line[len - 1] != '\n')
+--- 7013,7019 ----
+ size_t len;
+ int pos;
+
+! vim_ignoredp = fgets(line, LINE_LEN, fd);
+ len = strlen(line);
+
+ if (len <= 1 || line[len - 1] != '\n')
+*** ../vim-8.1.0376/src/version.c 2018-09-13 14:57:37.915261048 +0200
+--- src/version.c 2018-09-13 15:30:49.183420346 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 377,
+ /**/
+
+--
+Don't read everything you believe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0378 b/data/vim/patches/8.1.0378
new file mode 100644
index 000000000..4f60e53b9
--- /dev/null
+++ b/data/vim/patches/8.1.0378
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0378
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0378
+Problem: CI build failure.
+Solution: Include vim.h as ../vim.h. Fix compiler warning.
+Files: src/xdiff/xdiff.h
+
+
+*** ../vim-8.1.0377/src/xdiff/xdiff.h 2018-09-13 15:33:39.597712317 +0200
+--- src/xdiff/xdiff.h 2018-09-13 15:56:41.859054750 +0200
+***************
+*** 108,114 ****
+ long bsize;
+ } bdiffparam_t;
+
+! #include "vim.h"
+
+ #define xdl_malloc(x) lalloc((x), TRUE)
+ #define xdl_free(ptr) vim_free(ptr)
+--- 108,114 ----
+ long bsize;
+ } bdiffparam_t;
+
+! #include "../vim.h"
+
+ #define xdl_malloc(x) lalloc((x), TRUE)
+ #define xdl_free(ptr) vim_free(ptr)
+*** ../vim-8.1.0377/src/xdiff/xpatience.c 2018-09-13 15:33:39.597712317 +0200
+--- src/xdiff/xpatience.c 2018-09-13 15:56:55.350920262 +0200
+***************
+*** 206,212 ****
+ */
+ static struct entry *find_longest_common_sequence(struct hashmap *map)
+ {
+! struct entry **sequence = xdl_malloc(map->nr * sizeof(struct entry *));
+ int longest = 0, i;
+ struct entry *entry;
+
+--- 206,212 ----
+ */
+ static struct entry *find_longest_common_sequence(struct hashmap *map)
+ {
+! struct entry **sequence = (struct entry **)xdl_malloc(map->nr * sizeof(struct entry *));
+ int longest = 0, i;
+ struct entry *entry;
+
+*** ../vim-8.1.0377/src/version.c 2018-09-13 15:33:39.609712174 +0200
+--- src/version.c 2018-09-13 15:58:03.570241058 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 378,
+ /**/
+
+--
+Don't believe everything you hear or anything you say.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0379 b/data/vim/patches/8.1.0379
new file mode 100644
index 000000000..412f4ebe1
--- /dev/null
+++ b/data/vim/patches/8.1.0379
@@ -0,0 +1,3132 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0379
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0379
+Problem: Build dependencies are incomplete.
+Solution: Update the build dependencies, mainly for xdiff. Adjust object
+ directory for libvterm and xdiff.
+Files: src/Makefile, src/configure.ac, src/auto/configure,
+ src/libvterm/src/screen.c, src/libvterm/src/termscreen.c,
+ src/Make_cyg_ming.mak, src/Make_mvc.mak
+
+
+*** ../vim-8.1.0378/src/Makefile 2018-09-10 17:50:32.709306979 +0200
+--- src/Makefile 2018-09-13 17:20:07.798588758 +0200
+***************
+*** 1471,1476 ****
+--- 1471,1478 ----
+ .SUFFIXES:
+ .SUFFIXES: .c .o .pro
+
++ VTERM_CFLAGS = -Ilibvterm/include
++
+ PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
+ POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(EXTRA_DEFS)
+
+***************
+*** 1480,1486 ****
+ # with "-E".
+ OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
+
+! LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) $(TCL_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
+
+ LINT_EXTRA = -DHANGUL_INPUT -D"__attribute__(x)="
+
+--- 1482,1491 ----
+ # with "-E".
+ OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
+
+! LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) \
+! $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) \
+! $(PYTHON3_CFLAGS) $(TCL_CFLAGS) $(VTERM_CFLAGS) \
+! -Dinline= -D__extension__= -Dalloca=alloca
+
+ LINT_EXTRA = -DHANGUL_INPUT -D"__attribute__(x)="
+
+***************
+*** 1671,1677 ****
+ RUN_UNITTESTS = run_json_test run_kword_test run_memfile_test run_message_test
+
+ # All sources, also the ones that are not configured
+! ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
+
+ # Which files to check with lint. Select one of these three lines. ALL_SRC
+ # checks more, but may not work well for checking a GUI that wasn't configured.
+--- 1676,1683 ----
+ RUN_UNITTESTS = run_json_test run_kword_test run_memfile_test run_message_test
+
+ # All sources, also the ones that are not configured
+! ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) \
+! $(EXTRA_SRC) $(TERM_SRC) $(XDIFF_SRC)
+
+ # Which files to check with lint. Select one of these three lines. ALL_SRC
+ # checks more, but may not work well for checking a GUI that wasn't configured.
+***************
+*** 3225,3260 ****
+ Makefile:
+ @echo The name of the makefile MUST be "Makefile" (with capital M)!!!!
+
+! CCCTERM = $(CCC_NF) -Ilibvterm/include $(ALL_CFLAGS) -DINLINE="" \
+ -DVSNPRINTF=vim_vsnprintf \
+ -DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
+ -DWCWIDTH_FUNCTION=utf_uint2cells
+
+! objects/term_encoding.o: libvterm/src/encoding.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/encoding.c
+
+! objects/term_keyboard.o: libvterm/src/keyboard.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/keyboard.c
+
+! objects/term_mouse.o: libvterm/src/mouse.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/mouse.c
+
+! objects/term_parser.o: libvterm/src/parser.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/parser.c
+
+! objects/term_pen.o: libvterm/src/pen.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/pen.c
+
+! objects/term_screen.o: libvterm/src/screen.c $(TERM_DEPS)
+! $(CCCTERM) -o $@ libvterm/src/screen.c
+
+! objects/term_state.o: libvterm/src/state.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/state.c
+
+! objects/term_unicode.o: libvterm/src/unicode.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/unicode.c
+
+! objects/term_vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/vterm.c
+
+ CCCDIFF = $(CCC_NF) $(ALL_CFLAGS)
+--- 3231,3266 ----
+ Makefile:
+ @echo The name of the makefile MUST be "Makefile" (with capital M)!!!!
+
+! CCCTERM = $(CCC_NF) $(VTERM_CFLAGS) $(ALL_CFLAGS) -DINLINE="" \
+ -DVSNPRINTF=vim_vsnprintf \
+ -DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
+ -DWCWIDTH_FUNCTION=utf_uint2cells
+
+! objects/encoding.o: libvterm/src/encoding.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/encoding.c
+
+! objects/keyboard.o: libvterm/src/keyboard.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/keyboard.c
+
+! objects/mouse.o: libvterm/src/mouse.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/mouse.c
+
+! objects/parser.o: libvterm/src/parser.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/parser.c
+
+! objects/pen.o: libvterm/src/pen.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/pen.c
+
+! objects/termscreen.o: libvterm/src/termscreen.c $(TERM_DEPS)
+! $(CCCTERM) -o $@ libvterm/src/termscreen.c
+
+! objects/state.o: libvterm/src/state.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/state.c
+
+! objects/unicode.o: libvterm/src/unicode.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/unicode.c
+
+! objects/vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
+ $(CCCTERM) -o $@ libvterm/src/vterm.c
+
+ CCCDIFF = $(CCC_NF) $(ALL_CFLAGS)
+***************
+*** 3363,3629 ****
+ ###############################################################################
+ ### (automatically generated by 'make depend')
+ ### Dependencies:
+! objects/arabic.o: arabic.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/beval.o: beval.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/blowfish.o: blowfish.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/buffer.o: buffer.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h version.h
+! objects/charset.o: charset.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/crypt.o: crypt.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/crypt_zip.o: crypt_zip.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/dict.o: dict.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/diff.o: diff.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/digraph.o: digraph.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/edit.o: edit.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/eval.o: eval.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h version.h
+! objects/evalfunc.o: evalfunc.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/ex_cmds.o: ex_cmds.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h version.h
+! objects/ex_cmds2.o: ex_cmds2.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/ex_docmd.o: ex_docmd.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h ex_cmdidxs.h
+! objects/ex_eval.o: ex_eval.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/ex_getln.o: ex_getln.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/farsi.o: farsi.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/fileio.o: fileio.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/fold.o: fold.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/getchar.o: getchar.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/hardcopy.o: hardcopy.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/hashtab.o: hashtab.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/if_cscope.o: if_cscope.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h if_cscope.h
+! objects/if_xcmdsrv.o: if_xcmdsrv.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/json.o: json.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/list.o: list.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/main.o: main.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/mark.o: mark.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/memfile.o: memfile.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/memline.o: memline.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/menu.o: menu.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/message.o: message.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/misc1.o: misc1.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h version.h
+! objects/misc2.o: misc2.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/move.o: move.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/mbyte.o: mbyte.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/normal.o: normal.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/ops.o: ops.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
+! keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro structs.h \
+! regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h farsi.h \
+! arabic.h
+! objects/option.o: option.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h if_mzsch.h os_unixx.h
+! objects/pathdef.o: auto/pathdef.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/popupmnu.o: popupmnu.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/pty.o: pty.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
+! keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro structs.h \
+! regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h farsi.h \
+! arabic.h
+! objects/quickfix.o: quickfix.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/regexp.o: regexp.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h regexp_nfa.c
+! objects/screen.o: screen.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/search.o: search.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/sha256.o: sha256.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/spell.o: spell.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/spellfile.o: spellfile.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/syntax.o: syntax.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/tag.o: tag.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
+! keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro structs.h \
+! regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h farsi.h \
+! arabic.h
+! objects/term.o: term.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h libvterm/include/vterm.h \
+ libvterm/include/vterm_keycodes.h
+! objects/terminal.o: terminal.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h libvterm/include/vterm.h \
+ libvterm/include/vterm_keycodes.h
+! objects/ui.o: ui.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
+! keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro structs.h \
+! regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h farsi.h \
+! arabic.h
+! objects/undo.o: undo.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/userfunc.o: userfunc.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/version.o: version.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h version.h
+! objects/window.o: window.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/gui.o: gui.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
+! keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro structs.h \
+! regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h farsi.h \
+! arabic.h
+! objects/gui_gtk.o: gui_gtk.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h gui_gtk_f.h
+! objects/gui_gtk_f.o: gui_gtk_f.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h gui_gtk_f.h
+! objects/gui_motif.o: gui_motif.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h gui_xmebw.h ../pixmaps/alert.xpm \
+ ../pixmaps/error.xpm ../pixmaps/generic.xpm ../pixmaps/info.xpm \
+ ../pixmaps/quest.xpm gui_x11_pm.h ../pixmaps/tb_new.xpm \
+--- 3369,3635 ----
+ ###############################################################################
+ ### (automatically generated by 'make depend')
+ ### Dependencies:
+! objects/arabic.o: arabic.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/beval.o: beval.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/blowfish.o: blowfish.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/buffer.o: buffer.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h version.h
+! objects/charset.o: charset.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/crypt.o: crypt.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/crypt_zip.o: crypt_zip.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/dict.o: dict.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/diff.o: diff.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h xdiff/xdiff.h xdiff/../vim.h
+! objects/digraph.o: digraph.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/edit.o: edit.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/eval.o: eval.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h version.h
+! objects/evalfunc.o: evalfunc.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/ex_cmds.o: ex_cmds.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/ex_cmds2.o: ex_cmds2.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h version.h
+! objects/ex_docmd.o: ex_docmd.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h ex_cmdidxs.h
+! objects/ex_eval.o: ex_eval.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/ex_getln.o: ex_getln.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/farsi.o: farsi.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/fileio.o: fileio.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/fold.o: fold.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/getchar.o: getchar.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/hardcopy.o: hardcopy.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/hashtab.o: hashtab.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
++ proto.h globals.h farsi.h arabic.h
++ objects/if_cscope.o: if_cscope.c vim.h protodef.h auto/config.h feature.h \
++ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
++ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h if_cscope.h
+! objects/if_xcmdsrv.o: if_xcmdsrv.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h version.h
+! objects/json.o: json.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/list.o: list.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/main.o: main.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/mark.o: mark.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/memfile.o: memfile.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/memline.o: memline.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/menu.o: menu.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/message.o: message.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/misc1.o: misc1.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/misc2.o: misc2.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/move.o: move.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/mbyte.o: mbyte.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/normal.o: normal.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/ops.o: ops.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/option.o: option.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/os_unix.o: os_unix.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h os_unixx.h
+! objects/pathdef.o: auto/pathdef.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/popupmnu.o: popupmnu.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/pty.o: pty.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/quickfix.o: quickfix.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/regexp.o: regexp.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h regexp_nfa.c
+! objects/screen.o: screen.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/search.o: search.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/sha256.o: sha256.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/spell.o: spell.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/spellfile.o: spellfile.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/syntax.o: syntax.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/tag.o: tag.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/term.o: term.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h libvterm/include/vterm.h \
+ libvterm/include/vterm_keycodes.h
+! objects/terminal.o: terminal.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h libvterm/include/vterm.h \
+ libvterm/include/vterm_keycodes.h
+! objects/ui.o: ui.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/undo.o: undo.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/userfunc.o: userfunc.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/version.o: version.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h version.h
+! objects/window.o: window.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
++ proto.h globals.h farsi.h arabic.h
++ objects/gui.o: gui.c vim.h protodef.h auto/config.h feature.h os_unix.h \
++ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
++ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
++ proto.h globals.h farsi.h arabic.h
++ objects/gui_gtk.o: gui_gtk.c vim.h protodef.h auto/config.h feature.h os_unix.h \
++ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
++ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
++ proto.h globals.h farsi.h arabic.h gui_gtk_f.h
++ objects/gui_gtk_f.o: gui_gtk_f.c vim.h protodef.h auto/config.h feature.h \
++ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
++ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
++ proto.h globals.h farsi.h arabic.h gui_gtk_f.h
++ objects/gui_motif.o: gui_motif.c vim.h protodef.h auto/config.h feature.h \
++ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
++ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h gui_xmebw.h ../pixmaps/alert.xpm \
+ ../pixmaps/error.xpm ../pixmaps/generic.xpm ../pixmaps/info.xpm \
+ ../pixmaps/quest.xpm gui_x11_pm.h ../pixmaps/tb_new.xpm \
+***************
+*** 3642,3657 ****
+ ../pixmaps/tb_shell.xpm ../pixmaps/tb_replace.xpm \
+ ../pixmaps/tb_vsplit.xpm ../pixmaps/tb_maxwidth.xpm \
+ ../pixmaps/tb_minwidth.xpm
+! objects/gui_xmdlg.o: gui_xmdlg.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/gui_xmebw.o: gui_xmebw.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h gui_xmebwp.h gui_xmebw.h
+! objects/gui_athena.o: gui_athena.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h gui_at_sb.h gui_x11_pm.h \
+ ../pixmaps/tb_new.xpm ../pixmaps/tb_open.xpm ../pixmaps/tb_close.xpm \
+--- 3648,3663 ----
+ ../pixmaps/tb_shell.xpm ../pixmaps/tb_replace.xpm \
+ ../pixmaps/tb_vsplit.xpm ../pixmaps/tb_maxwidth.xpm \
+ ../pixmaps/tb_minwidth.xpm
+! objects/gui_xmdlg.o: gui_xmdlg.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/gui_xmebw.o: gui_xmebw.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h gui_xmebwp.h gui_xmebw.h
+! objects/gui_athena.o: gui_athena.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h gui_at_sb.h gui_x11_pm.h \
+ ../pixmaps/tb_new.xpm ../pixmaps/tb_open.xpm ../pixmaps/tb_close.xpm \
+***************
+*** 3669,3763 ****
+ ../pixmaps/tb_shell.xpm ../pixmaps/tb_replace.xpm \
+ ../pixmaps/tb_vsplit.xpm ../pixmaps/tb_maxwidth.xpm \
+ ../pixmaps/tb_minwidth.xpm
+! objects/gui_gtk_x11.o: gui_gtk_x11.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h auto/gui_gtk_gresources.h gui_gtk_f.h \
+ ../runtime/vim32x32.xpm ../runtime/vim16x16.xpm ../runtime/vim48x48.xpm
+! objects/gui_x11.o: gui_x11.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h ../runtime/vim32x32.xpm ../runtime/vim16x16.xpm \
+! ../runtime/vim48x48.xpm
+! objects/gui_at_sb.o: gui_at_sb.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h gui_at_sb.h
+! objects/gui_at_fs.o: gui_at_fs.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h gui_at_sb.h
+! objects/json_test.o: json_test.c main.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h json.c
+! objects/kword_test.o: kword_test.c main.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h charset.c
+! objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h memfile.c
+! objects/message_test.o: message_test.c main.c vim.h auto/config.h feature.h \
+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h message.c
+! objects/hangulin.o: hangulin.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/if_lua.o: if_lua.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h if_mzsch.h mzscheme_base.c
+! objects/if_perl.o: auto/if_perl.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/if_perlsfio.o: if_perlsfio.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/if_python.o: if_python.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h if_py_both.h
+! objects/if_python3.o: if_python3.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h if_py_both.h
+! objects/if_tcl.o: if_tcl.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+! objects/if_ruby.o: if_ruby.c auto/config.h vim.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h version.h
+! objects/gui_beval.o: gui_beval.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/workshop.o: workshop.c auto/config.h integration.h vim.h feature.h \
+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h version.h workshop.h
+ objects/wsdebug.o: wsdebug.c
+! objects/integration.o: integration.c vim.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h integration.h
+! objects/netbeans.o: netbeans.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/channel.o: channel.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+! ascii.h keymap.h term.h macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h
+ objects/gui_gtk_gresources.o: auto/gui_gtk_gresources.c
+--- 3675,3847 ----
+ ../pixmaps/tb_shell.xpm ../pixmaps/tb_replace.xpm \
+ ../pixmaps/tb_vsplit.xpm ../pixmaps/tb_maxwidth.xpm \
+ ../pixmaps/tb_minwidth.xpm
+! objects/gui_gtk_x11.o: gui_gtk_x11.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h auto/gui_gtk_gresources.h gui_gtk_f.h \
+ ../runtime/vim32x32.xpm ../runtime/vim16x16.xpm ../runtime/vim48x48.xpm
+! objects/gui_x11.o: gui_x11.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h ../runtime/vim32x32.xpm \
+! ../runtime/vim16x16.xpm ../runtime/vim48x48.xpm
+! objects/gui_at_sb.o: gui_at_sb.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h gui_at_sb.h
+! objects/gui_at_fs.o: gui_at_fs.c vim.h protodef.h auto/config.h feature.h \
+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h gui_at_sb.h
+! objects/json_test.o: json_test.c main.c vim.h protodef.h auto/config.h feature.h \
+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h json.c
+! objects/kword_test.o: kword_test.c main.c vim.h protodef.h auto/config.h \
+! feature.h os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h \
+! option.h beval.h proto/gui_beval.pro structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h farsi.h arabic.h charset.c
+! objects/memfile_test.o: memfile_test.c main.c vim.h protodef.h auto/config.h \
+! feature.h os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h \
+! option.h beval.h proto/gui_beval.pro structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h farsi.h arabic.h memfile.c
+! objects/message_test.o: message_test.c main.c vim.h protodef.h auto/config.h \
+! feature.h os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h \
+! option.h beval.h proto/gui_beval.pro structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h farsi.h arabic.h message.c
+! objects/hangulin.o: hangulin.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/if_lua.o: if_lua.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/if_mzsch.o: if_mzsch.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
++ proto.h globals.h farsi.h arabic.h if_mzsch.h
++ objects/if_perl.o: auto/if_perl.c vim.h protodef.h auto/config.h feature.h \
++ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
++ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/if_perlsfio.o: if_perlsfio.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/if_python.o: if_python.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h if_py_both.h
+! objects/if_python3.o: if_python3.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h if_py_both.h
+! objects/if_tcl.o: if_tcl.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h
+! objects/if_ruby.o: if_ruby.c protodef.h auto/config.h vim.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h version.h
+! objects/gui_beval.o: gui_beval.c vim.h protodef.h auto/config.h feature.h \
+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+! objects/workshop.o: workshop.c protodef.h auto/config.h integration.h vim.h \
+! feature.h os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h \
+! option.h beval.h proto/gui_beval.pro structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h farsi.h arabic.h version.h \
+! workshop.h
+ objects/wsdebug.o: wsdebug.c
+! objects/integration.o: integration.c vim.h protodef.h auto/config.h feature.h \
+! os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h integration.h
+! objects/netbeans.o: netbeans.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h version.h
+! objects/channel.o: channel.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+! proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h
+ objects/gui_gtk_gresources.o: auto/gui_gtk_gresources.c
++ objects/encoding.o: libvterm/src/encoding.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h \
++ libvterm/src/encoding/DECdrawing.inc libvterm/src/encoding/uk.inc
++ objects/keyboard.o: libvterm/src/keyboard.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h \
++ libvterm/src/utf8.h
++ objects/mouse.o: libvterm/src/mouse.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h \
++ libvterm/src/utf8.h
++ objects/parser.o: libvterm/src/parser.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h
++ objects/pen.o: libvterm/src/pen.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h
++ objects/state.o: libvterm/src/state.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h
++ objects/termscreen.o: libvterm/src/termscreen.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h \
++ libvterm/src/rect.h libvterm/src/utf8.h
++ objects/unicode.o: libvterm/src/unicode.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h
++ objects/vterm.o: libvterm/src/vterm.c libvterm/src/vterm_internal.h \
++ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h \
++ libvterm/src/utf8.h
++ objects/xdiffi.o: xdiff/xdiffi.c xdiff/xinclude.h xdiff/../auto/config.h \
++ xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
++ xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
++ xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
++ xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
++ xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
++ xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
++ xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
++ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
++ objects/xemit.o: xdiff/xemit.c xdiff/xinclude.h xdiff/../auto/config.h \
++ xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
++ xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
++ xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
++ xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
++ xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
++ xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
++ xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
++ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
++ objects/xprepare.o: xdiff/xprepare.c xdiff/xinclude.h xdiff/../auto/config.h \
++ xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
++ xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
++ xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
++ xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
++ xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
++ xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
++ xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
++ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
++ objects/xutils.o: xdiff/xutils.c xdiff/xinclude.h xdiff/../auto/config.h \
++ xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
++ xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
++ xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
++ xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
++ xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
++ xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
++ xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
++ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
++ objects/xhistogram.o: xdiff/xhistogram.c xdiff/xinclude.h xdiff/../auto/config.h \
++ xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
++ xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
++ xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
++ xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
++ xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
++ xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
++ xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
++ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
++ objects/xpatience.o: xdiff/xpatience.c xdiff/xinclude.h xdiff/../auto/config.h \
++ xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
++ xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
++ xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
++ xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
++ xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
++ xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
++ xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
++ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+*** ../vim-8.1.0378/src/configure.ac 2018-09-12 20:29:05.475670636 +0200
+--- src/configure.ac 2018-09-13 17:15:34.048615043 +0200
+***************
+*** 2114,2122 ****
+ fi
+ if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
+ AC_DEFINE(FEAT_TERMINAL)
+! TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/screen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
+ AC_SUBST(TERM_SRC)
+! TERM_OBJ="objects/term_encoding.o objects/term_keyboard.o objects/term_mouse.o objects/term_parser.o objects/term_pen.o objects/term_screen.o objects/term_state.o objects/term_unicode.o objects/term_vterm.o"
+ AC_SUBST(TERM_OBJ)
+ fi
+
+--- 2114,2122 ----
+ fi
+ if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
+ AC_DEFINE(FEAT_TERMINAL)
+! TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/termscreen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
+ AC_SUBST(TERM_SRC)
+! TERM_OBJ="objects/encoding.o objects/keyboard.o objects/mouse.o objects/parser.o objects/pen.o objects/termscreen.o objects/state.o objects/unicode.o objects/vterm.o"
+ AC_SUBST(TERM_OBJ)
+ fi
+
+*** ../vim-8.1.0378/src/auto/configure 2018-09-12 20:29:05.479670601 +0200
+--- src/auto/configure 2018-09-13 17:16:18.668305363 +0200
+***************
+*** 7916,7924 ****
+ if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
+ $as_echo "#define FEAT_TERMINAL 1" >>confdefs.h
+
+! TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/screen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
+
+! TERM_OBJ="objects/term_encoding.o objects/term_keyboard.o objects/term_mouse.o objects/term_parser.o objects/term_pen.o objects/term_screen.o objects/term_state.o objects/term_unicode.o objects/term_vterm.o"
+
+ fi
+
+--- 7916,7924 ----
+ if test "$enable_terminal" = "yes" -a "$enable_channel" = "yes"; then
+ $as_echo "#define FEAT_TERMINAL 1" >>confdefs.h
+
+! TERM_SRC="libvterm/src/encoding.c libvterm/src/keyboard.c libvterm/src/mouse.c libvterm/src/parser.c libvterm/src/pen.c libvterm/src/termscreen.c libvterm/src/state.c libvterm/src/unicode.c libvterm/src/vterm.c"
+
+! TERM_OBJ="objects/encoding.o objects/keyboard.o objects/mouse.o objects/parser.o objects/pen.o objects/termscreen.o objects/state.o objects/unicode.o objects/vterm.o"
+
+ fi
+
+*** ../vim-8.1.0378/src/libvterm/src/screen.c 2018-04-24 18:13:56.000000000 +0200
+--- src/libvterm/src/screen.c 1970-01-01 01:00:00.000000000 +0100
+***************
+*** 1,935 ****
+- #include "vterm_internal.h"
+-
+- #include <stdio.h>
+- #include <string.h>
+-
+- #include "rect.h"
+- #include "utf8.h"
+-
+- #define UNICODE_SPACE 0x20
+- #define UNICODE_LINEFEED 0x0a
+-
+- /* State of the pen at some moment in time, also used in a cell */
+- typedef struct
+- {
+- /* After the bitfield */
+- VTermColor fg, bg;
+-
+- unsigned int bold : 1;
+- unsigned int underline : 2;
+- unsigned int italic : 1;
+- unsigned int blink : 1;
+- unsigned int reverse : 1;
+- unsigned int strike : 1;
+- unsigned int font : 4; /* 0 to 9 */
+-
+- /* Extra state storage that isn't strictly pen-related */
+- unsigned int protected_cell : 1;
+- unsigned int dwl : 1; /* on a DECDWL or DECDHL line */
+- unsigned int dhl : 2; /* on a DECDHL line (1=top 2=bottom) */
+- } ScreenPen;
+-
+- /* Internal representation of a screen cell */
+- typedef struct
+- {
+- uint32_t chars[VTERM_MAX_CHARS_PER_CELL];
+- ScreenPen pen;
+- } ScreenCell;
+-
+- static int vterm_screen_set_cell(VTermScreen *screen, VTermPos pos, const VTermScreenCell *cell);
+-
+- struct VTermScreen
+- {
+- VTerm *vt;
+- VTermState *state;
+-
+- const VTermScreenCallbacks *callbacks;
+- void *cbdata;
+-
+- VTermDamageSize damage_merge;
+- /* start_row == -1 => no damage */
+- VTermRect damaged;
+- VTermRect pending_scrollrect;
+- int pending_scroll_downward, pending_scroll_rightward;
+-
+- int rows;
+- int cols;
+- int global_reverse;
+-
+- /* Primary and Altscreen. buffers[1] is lazily allocated as needed */
+- ScreenCell *buffers[2];
+-
+- /* buffer will == buffers[0] or buffers[1], depending on altscreen */
+- ScreenCell *buffer;
+-
+- /* buffer for a single screen row used in scrollback storage callbacks */
+- VTermScreenCell *sb_buffer;
+-
+- ScreenPen pen;
+- };
+-
+- static ScreenCell *getcell(const VTermScreen *screen, int row, int col)
+- {
+- if(row < 0 || row >= screen->rows)
+- return NULL;
+- if(col < 0 || col >= screen->cols)
+- return NULL;
+- return screen->buffer + (screen->cols * row) + col;
+- }
+-
+- static ScreenCell *realloc_buffer(VTermScreen *screen, ScreenCell *buffer, int new_rows, int new_cols)
+- {
+- ScreenCell *new_buffer = vterm_allocator_malloc(screen->vt, sizeof(ScreenCell) * new_rows * new_cols);
+- int row, col;
+-
+- for(row = 0; row < new_rows; row++) {
+- for(col = 0; col < new_cols; col++) {
+- ScreenCell *new_cell = new_buffer + row*new_cols + col;
+-
+- if(buffer && row < screen->rows && col < screen->cols)
+- *new_cell = buffer[row * screen->cols + col];
+- else {
+- new_cell->chars[0] = 0;
+- new_cell->pen = screen->pen;
+- }
+- }
+- }
+-
+- if(buffer)
+- vterm_allocator_free(screen->vt, buffer);
+-
+- return new_buffer;
+- }
+-
+- static void damagerect(VTermScreen *screen, VTermRect rect)
+- {
+- VTermRect emit;
+-
+- switch(screen->damage_merge) {
+- case VTERM_DAMAGE_CELL:
+- /* Always emit damage event */
+- emit = rect;
+- break;
+-
+- case VTERM_DAMAGE_ROW:
+- /* Emit damage longer than one row. Try to merge with existing damage in
+- * the same row */
+- if(rect.end_row > rect.start_row + 1) {
+- // Bigger than 1 line - flush existing, emit this
+- vterm_screen_flush_damage(screen);
+- emit = rect;
+- }
+- else if(screen->damaged.start_row == -1) {
+- // None stored yet
+- screen->damaged = rect;
+- return;
+- }
+- else if(rect.start_row == screen->damaged.start_row) {
+- // Merge with the stored line
+- if(screen->damaged.start_col > rect.start_col)
+- screen->damaged.start_col = rect.start_col;
+- if(screen->damaged.end_col < rect.end_col)
+- screen->damaged.end_col = rect.end_col;
+- return;
+- }
+- else {
+- // Emit the currently stored line, store a new one
+- emit = screen->damaged;
+- screen->damaged = rect;
+- }
+- break;
+-
+- case VTERM_DAMAGE_SCREEN:
+- case VTERM_DAMAGE_SCROLL:
+- /* Never emit damage event */
+- if(screen->damaged.start_row == -1)
+- screen->damaged = rect;
+- else {
+- rect_expand(&screen->damaged, &rect);
+- }
+- return;
+-
+- default:
+- DEBUG_LOG1("TODO: Maybe merge damage for level %d\n", screen->damage_merge);
+- return;
+- }
+-
+- if(screen->callbacks && screen->callbacks->damage)
+- (*screen->callbacks->damage)(emit, screen->cbdata);
+- }
+-
+- static void damagescreen(VTermScreen *screen)
+- {
+- VTermRect rect = {0,0,0,0};
+- rect.end_row = screen->rows;
+- rect.end_col = screen->cols;
+-
+- damagerect(screen, rect);
+- }
+-
+- static int putglyph(VTermGlyphInfo *info, VTermPos pos, void *user)
+- {
+- int i;
+- int col;
+- VTermRect rect;
+-
+- VTermScreen *screen = user;
+- ScreenCell *cell = getcell(screen, pos.row, pos.col);
+-
+- if(!cell)
+- return 0;
+-
+- for(i = 0; i < VTERM_MAX_CHARS_PER_CELL && info->chars[i]; i++) {
+- cell->chars[i] = info->chars[i];
+- cell->pen = screen->pen;
+- }
+- if(i < VTERM_MAX_CHARS_PER_CELL)
+- cell->chars[i] = 0;
+-
+- for(col = 1; col < info->width; col++)
+- getcell(screen, pos.row, pos.col + col)->chars[0] = (uint32_t)-1;
+-
+- rect.start_row = pos.row;
+- rect.end_row = pos.row+1;
+- rect.start_col = pos.col;
+- rect.end_col = pos.col+info->width;
+-
+- cell->pen.protected_cell = info->protected_cell;
+- cell->pen.dwl = info->dwl;
+- cell->pen.dhl = info->dhl;
+-
+- damagerect(screen, rect);
+-
+- return 1;
+- }
+-
+- static int moverect_internal(VTermRect dest, VTermRect src, void *user)
+- {
+- VTermScreen *screen = user;
+-
+- if(screen->callbacks && screen->callbacks->sb_pushline &&
+- dest.start_row == 0 && dest.start_col == 0 && // starts top-left corner
+- dest.end_col == screen->cols && // full width
+- screen->buffer == screen->buffers[0]) { // not altscreen
+- VTermPos pos;
+- for(pos.row = 0; pos.row < src.start_row; pos.row++) {
+- for(pos.col = 0; pos.col < screen->cols; pos.col++)
+- (void)vterm_screen_get_cell(screen, pos, screen->sb_buffer + pos.col);
+-
+- (screen->callbacks->sb_pushline)(screen->cols, screen->sb_buffer, screen->cbdata);
+- }
+- }
+-
+- {
+- int cols = src.end_col - src.start_col;
+- int downward = src.start_row - dest.start_row;
+- int init_row, test_row, inc_row;
+- int row;
+-
+- if(downward < 0) {
+- init_row = dest.end_row - 1;
+- test_row = dest.start_row - 1;
+- inc_row = -1;
+- }
+- else {
+- init_row = dest.start_row;
+- test_row = dest.end_row;
+- inc_row = +1;
+- }
+-
+- for(row = init_row; row != test_row; row += inc_row)
+- memmove(getcell(screen, row, dest.start_col),
+- getcell(screen, row + downward, src.start_col),
+- cols * sizeof(ScreenCell));
+- }
+-
+- return 1;
+- }
+-
+- static int moverect_user(VTermRect dest, VTermRect src, void *user)
+- {
+- VTermScreen *screen = user;
+-
+- if(screen->callbacks && screen->callbacks->moverect) {
+- if(screen->damage_merge != VTERM_DAMAGE_SCROLL)
+- // Avoid an infinite loop
+- vterm_screen_flush_damage(screen);
+-
+- if((*screen->callbacks->moverect)(dest, src, screen->cbdata))
+- return 1;
+- }
+-
+- damagerect(screen, dest);
+-
+- return 1;
+- }
+-
+- static int erase_internal(VTermRect rect, int selective, void *user)
+- {
+- VTermScreen *screen = user;
+- int row, col;
+-
+- for(row = rect.start_row; row < screen->state->rows && row < rect.end_row; row++) {
+- const VTermLineInfo *info = vterm_state_get_lineinfo(screen->state, row);
+-
+- for(col = rect.start_col; col < rect.end_col; col++) {
+- ScreenCell *cell = getcell(screen, row, col);
+-
+- if(selective && cell->pen.protected_cell)
+- continue;
+-
+- cell->chars[0] = 0;
+- cell->pen = screen->pen;
+- cell->pen.dwl = info->doublewidth;
+- cell->pen.dhl = info->doubleheight;
+- }
+- }
+-
+- return 1;
+- }
+-
+- static int erase_user(VTermRect rect, int selective UNUSED, void *user)
+- {
+- VTermScreen *screen = user;
+-
+- damagerect(screen, rect);
+-
+- return 1;
+- }
+-
+- static int erase(VTermRect rect, int selective, void *user)
+- {
+- erase_internal(rect, selective, user);
+- return erase_user(rect, 0, user);
+- }
+-
+- static int scrollrect(VTermRect rect, int downward, int rightward, void *user)
+- {
+- VTermScreen *screen = user;
+-
+- if(screen->damage_merge != VTERM_DAMAGE_SCROLL) {
+- vterm_scroll_rect(rect, downward, rightward,
+- moverect_internal, erase_internal, screen);
+-
+- vterm_screen_flush_damage(screen);
+-
+- vterm_scroll_rect(rect, downward, rightward,
+- moverect_user, erase_user, screen);
+-
+- return 1;
+- }
+-
+- if(screen->damaged.start_row != -1 &&
+- !rect_intersects(&rect, &screen->damaged)) {
+- vterm_screen_flush_damage(screen);
+- }
+-
+- if(screen->pending_scrollrect.start_row == -1) {
+- screen->pending_scrollrect = rect;
+- screen->pending_scroll_downward = downward;
+- screen->pending_scroll_rightward = rightward;
+- }
+- else if(rect_equal(&screen->pending_scrollrect, &rect) &&
+- ((screen->pending_scroll_downward == 0 && downward == 0) ||
+- (screen->pending_scroll_rightward == 0 && rightward == 0))) {
+- screen->pending_scroll_downward += downward;
+- screen->pending_scroll_rightward += rightward;
+- }
+- else {
+- vterm_screen_flush_damage(screen);
+-
+- screen->pending_scrollrect = rect;
+- screen->pending_scroll_downward = downward;
+- screen->pending_scroll_rightward = rightward;
+- }
+-
+- vterm_scroll_rect(rect, downward, rightward,
+- moverect_internal, erase_internal, screen);
+-
+- if(screen->damaged.start_row == -1)
+- return 1;
+-
+- if(rect_contains(&rect, &screen->damaged)) {
+- /* Scroll region entirely contains the damage; just move it */
+- vterm_rect_move(&screen->damaged, -downward, -rightward);
+- rect_clip(&screen->damaged, &rect);
+- }
+- /* There are a number of possible cases here, but lets restrict this to only
+- * the common case where we might actually gain some performance by
+- * optimising it. Namely, a vertical scroll that neatly cuts the damage
+- * region in half.
+- */
+- else if(rect.start_col <= screen->damaged.start_col &&
+- rect.end_col >= screen->damaged.end_col &&
+- rightward == 0) {
+- if(screen->damaged.start_row >= rect.start_row &&
+- screen->damaged.start_row < rect.end_row) {
+- screen->damaged.start_row -= downward;
+- if(screen->damaged.start_row < rect.start_row)
+- screen->damaged.start_row = rect.start_row;
+- if(screen->damaged.start_row > rect.end_row)
+- screen->damaged.start_row = rect.end_row;
+- }
+- if(screen->damaged.end_row >= rect.start_row &&
+- screen->damaged.end_row < rect.end_row) {
+- screen->damaged.end_row -= downward;
+- if(screen->damaged.end_row < rect.start_row)
+- screen->damaged.end_row = rect.start_row;
+- if(screen->damaged.end_row > rect.end_row)
+- screen->damaged.end_row = rect.end_row;
+- }
+- }
+- else {
+- DEBUG_LOG2("TODO: Just flush and redo damaged=" STRFrect " rect=" STRFrect "\n",
+- ARGSrect(screen->damaged), ARGSrect(rect));
+- }
+-
+- return 1;
+- }
+-
+- static int movecursor(VTermPos pos, VTermPos oldpos, int visible, void *user)
+- {
+- VTermScreen *screen = user;
+-
+- if(screen->callbacks && screen->callbacks->movecursor)
+- return (*screen->callbacks->movecursor)(pos, oldpos, visible, screen->cbdata);
+-
+- return 0;
+- }
+-
+- static int setpenattr(VTermAttr attr, VTermValue *val, void *user)
+- {
+- VTermScreen *screen = user;
+-
+- switch(attr) {
+- case VTERM_ATTR_BOLD:
+- screen->pen.bold = val->boolean;
+- return 1;
+- case VTERM_ATTR_UNDERLINE:
+- screen->pen.underline = val->number;
+- return 1;
+- case VTERM_ATTR_ITALIC:
+- screen->pen.italic = val->boolean;
+- return 1;
+- case VTERM_ATTR_BLINK:
+- screen->pen.blink = val->boolean;
+- return 1;
+- case VTERM_ATTR_REVERSE:
+- screen->pen.reverse = val->boolean;
+- return 1;
+- case VTERM_ATTR_STRIKE:
+- screen->pen.strike = val->boolean;
+- return 1;
+- case VTERM_ATTR_FONT:
+- screen->pen.font = val->number;
+- return 1;
+- case VTERM_ATTR_FOREGROUND:
+- screen->pen.fg = val->color;
+- return 1;
+- case VTERM_ATTR_BACKGROUND:
+- screen->pen.bg = val->color;
+- return 1;
+-
+- case VTERM_N_ATTRS:
+- return 0;
+- }
+-
+- return 0;
+- }
+-
+- static int settermprop(VTermProp prop, VTermValue *val, void *user)
+- {
+- VTermScreen *screen = user;
+-
+- switch(prop) {
+- case VTERM_PROP_ALTSCREEN:
+- if(val->boolean && !screen->buffers[1])
+- return 0;
+-
+- screen->buffer = val->boolean ? screen->buffers[1] : screen->buffers[0];
+- /* only send a damage event on disable; because during enable there's an
+- * erase that sends a damage anyway
+- */
+- if(!val->boolean)
+- damagescreen(screen);
+- break;
+- case VTERM_PROP_REVERSE:
+- screen->global_reverse = val->boolean;
+- damagescreen(screen);
+- break;
+- default:
+- ; /* ignore */
+- }
+-
+- if(screen->callbacks && screen->callbacks->settermprop)
+- return (*screen->callbacks->settermprop)(prop, val, screen->cbdata);
+-
+- return 1;
+- }
+-
+- static int bell(void *user)
+- {
+- VTermScreen *screen = user;
+-
+- if(screen->callbacks && screen->callbacks->bell)
+- return (*screen->callbacks->bell)(screen->cbdata);
+-
+- return 0;
+- }
+-
+- static int resize(int new_rows, int new_cols, VTermPos *delta, void *user)
+- {
+- VTermScreen *screen = user;
+-
+- int is_altscreen = (screen->buffers[1] && screen->buffer == screen->buffers[1]);
+-
+- int old_rows = screen->rows;
+- int old_cols = screen->cols;
+- int first_blank_row;
+-
+- if(!is_altscreen && new_rows < old_rows) {
+- // Fewer rows - determine if we're going to scroll at all, and if so, push
+- // those lines to scrollback
+- VTermPos pos = { 0, 0 };
+- VTermPos cursor = screen->state->pos;
+- // Find the first blank row after the cursor.
+- for(pos.row = old_rows - 1; pos.row >= new_rows; pos.row--)
+- if(!vterm_screen_is_eol(screen, pos) || cursor.row == pos.row)
+- break;
+-
+- first_blank_row = pos.row + 1;
+- if(first_blank_row > new_rows) {
+- VTermRect rect = {0,0,0,0};
+- rect.end_row = old_rows;
+- rect.end_col = old_cols;
+- scrollrect(rect, first_blank_row - new_rows, 0, user);
+- vterm_screen_flush_damage(screen);
+-
+- delta->row -= first_blank_row - new_rows;
+- }
+- }
+-
+- screen->buffers[0] = realloc_buffer(screen, screen->buffers[0], new_rows, new_cols);
+- if(screen->buffers[1])
+- screen->buffers[1] = realloc_buffer(screen, screen->buffers[1], new_rows, new_cols);
+-
+- screen->buffer = is_altscreen ? screen->buffers[1] : screen->buffers[0];
+-
+- screen->rows = new_rows;
+- screen->cols = new_cols;
+-
+- if(screen->sb_buffer)
+- vterm_allocator_free(screen->vt, screen->sb_buffer);
+-
+- screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * new_cols);
+-
+- if(new_cols > old_cols) {
+- VTermRect rect;
+- rect.start_row = 0;
+- rect.end_row = old_rows;
+- rect.start_col = old_cols;
+- rect.end_col = new_cols;
+- damagerect(screen, rect);
+- }
+-
+- if(new_rows > old_rows) {
+- if(!is_altscreen && screen->callbacks && screen->callbacks->sb_popline) {
+- int rows = new_rows - old_rows;
+- while(rows) {
+- VTermRect rect = {0,0,0,0};
+- VTermPos pos = { 0, 0 };
+- if(!(screen->callbacks->sb_popline(screen->cols, screen->sb_buffer, screen->cbdata)))
+- break;
+-
+- rect.end_row = screen->rows;
+- rect.end_col = screen->cols;
+- scrollrect(rect, -1, 0, user);
+-
+- for(pos.col = 0; pos.col < screen->cols; pos.col += screen->sb_buffer[pos.col].width)
+- vterm_screen_set_cell(screen, pos, screen->sb_buffer + pos.col);
+-
+- rect.end_row = 1;
+- damagerect(screen, rect);
+-
+- vterm_screen_flush_damage(screen);
+-
+- rows--;
+- delta->row++;
+- }
+- }
+-
+- {
+- VTermRect rect;
+- rect.start_row = old_rows;
+- rect.end_row = new_rows;
+- rect.start_col = 0;
+- rect.end_col = new_cols;
+- damagerect(screen, rect);
+- }
+- }
+-
+- if(screen->callbacks && screen->callbacks->resize)
+- return (*screen->callbacks->resize)(new_rows, new_cols, screen->cbdata);
+-
+- return 1;
+- }
+-
+- static int setlineinfo(int row, const VTermLineInfo *newinfo, const VTermLineInfo *oldinfo, void *user)
+- {
+- VTermScreen *screen = user;
+- int col;
+- VTermRect rect;
+-
+- if(newinfo->doublewidth != oldinfo->doublewidth ||
+- newinfo->doubleheight != oldinfo->doubleheight) {
+- for(col = 0; col < screen->cols; col++) {
+- ScreenCell *cell = getcell(screen, row, col);
+- cell->pen.dwl = newinfo->doublewidth;
+- cell->pen.dhl = newinfo->doubleheight;
+- }
+-
+- rect.start_row = row;
+- rect.end_row = row + 1;
+- rect.start_col = 0;
+- rect.end_col = newinfo->doublewidth ? screen->cols / 2 : screen->cols;
+- damagerect(screen, rect);
+-
+- if(newinfo->doublewidth) {
+- rect.start_col = screen->cols / 2;
+- rect.end_col = screen->cols;
+-
+- erase_internal(rect, 0, user);
+- }
+- }
+-
+- return 1;
+- }
+-
+- static VTermStateCallbacks state_cbs = {
+- &putglyph, /* putglyph */
+- &movecursor, /* movecursor */
+- &scrollrect, /* scrollrect */
+- NULL, /* moverect */
+- &erase, /* erase */
+- NULL, /* initpen */
+- &setpenattr, /* setpenattr */
+- &settermprop, /* settermprop */
+- &bell, /* bell */
+- &resize, /* resize */
+- &setlineinfo /* setlineinfo */
+- };
+-
+- static VTermScreen *screen_new(VTerm *vt)
+- {
+- VTermState *state = vterm_obtain_state(vt);
+- VTermScreen *screen;
+- int rows, cols;
+-
+- if(!state)
+- return NULL;
+-
+- screen = vterm_allocator_malloc(vt, sizeof(VTermScreen));
+-
+- vterm_get_size(vt, &rows, &cols);
+-
+- screen->vt = vt;
+- screen->state = state;
+-
+- screen->damage_merge = VTERM_DAMAGE_CELL;
+- screen->damaged.start_row = -1;
+- screen->pending_scrollrect.start_row = -1;
+-
+- screen->rows = rows;
+- screen->cols = cols;
+-
+- screen->callbacks = NULL;
+- screen->cbdata = NULL;
+-
+- screen->buffers[0] = realloc_buffer(screen, NULL, rows, cols);
+-
+- screen->buffer = screen->buffers[0];
+-
+- screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * cols);
+-
+- vterm_state_set_callbacks(screen->state, &state_cbs, screen);
+-
+- return screen;
+- }
+-
+- INTERNAL void vterm_screen_free(VTermScreen *screen)
+- {
+- vterm_allocator_free(screen->vt, screen->buffers[0]);
+- if(screen->buffers[1])
+- vterm_allocator_free(screen->vt, screen->buffers[1]);
+-
+- vterm_allocator_free(screen->vt, screen->sb_buffer);
+-
+- vterm_allocator_free(screen->vt, screen);
+- }
+-
+- void vterm_screen_reset(VTermScreen *screen, int hard)
+- {
+- screen->damaged.start_row = -1;
+- screen->pending_scrollrect.start_row = -1;
+- vterm_state_reset(screen->state, hard);
+- vterm_screen_flush_damage(screen);
+- }
+-
+- static size_t _get_chars(const VTermScreen *screen, const int utf8, void *buffer, size_t len, const VTermRect rect)
+- {
+- size_t outpos = 0;
+- int padding = 0;
+- int row, col;
+-
+- #define PUT(c) \
+- if(utf8) { \
+- size_t thislen = utf8_seqlen(c); \
+- if(buffer && outpos + thislen <= len) \
+- outpos += fill_utf8((c), (char *)buffer + outpos); \
+- else \
+- outpos += thislen; \
+- } \
+- else { \
+- if(buffer && outpos + 1 <= len) \
+- ((uint32_t*)buffer)[outpos++] = (c); \
+- else \
+- outpos++; \
+- }
+-
+- for(row = rect.start_row; row < rect.end_row; row++) {
+- for(col = rect.start_col; col < rect.end_col; col++) {
+- ScreenCell *cell = getcell(screen, row, col);
+- int i;
+-
+- if(cell->chars[0] == 0)
+- // Erased cell, might need a space
+- padding++;
+- else if(cell->chars[0] == (uint32_t)-1)
+- // Gap behind a double-width char, do nothing
+- ;
+- else {
+- while(padding) {
+- PUT(UNICODE_SPACE);
+- padding--;
+- }
+- for(i = 0; i < VTERM_MAX_CHARS_PER_CELL && cell->chars[i]; i++) {
+- PUT(cell->chars[i]);
+- }
+- }
+- }
+-
+- if(row < rect.end_row - 1) {
+- PUT(UNICODE_LINEFEED);
+- padding = 0;
+- }
+- }
+-
+- return outpos;
+- }
+-
+- size_t vterm_screen_get_chars(const VTermScreen *screen, uint32_t *chars, size_t len, const VTermRect rect)
+- {
+- return _get_chars(screen, 0, chars, len, rect);
+- }
+-
+- size_t vterm_screen_get_text(const VTermScreen *screen, char *str, size_t len, const VTermRect rect)
+- {
+- return _get_chars(screen, 1, str, len, rect);
+- }
+-
+- /* Copy internal to external representation of a screen cell */
+- int vterm_screen_get_cell(const VTermScreen *screen, VTermPos pos, VTermScreenCell *cell)
+- {
+- ScreenCell *intcell = getcell(screen, pos.row, pos.col);
+- int i;
+-
+- if(!intcell)
+- return 0;
+-
+- for(i = 0; ; i++) {
+- cell->chars[i] = intcell->chars[i];
+- if(!intcell->chars[i])
+- break;
+- }
+-
+- cell->attrs.bold = intcell->pen.bold;
+- cell->attrs.underline = intcell->pen.underline;
+- cell->attrs.italic = intcell->pen.italic;
+- cell->attrs.blink = intcell->pen.blink;
+- cell->attrs.reverse = intcell->pen.reverse ^ screen->global_reverse;
+- cell->attrs.strike = intcell->pen.strike;
+- cell->attrs.font = intcell->pen.font;
+-
+- cell->attrs.dwl = intcell->pen.dwl;
+- cell->attrs.dhl = intcell->pen.dhl;
+-
+- cell->fg = intcell->pen.fg;
+- cell->bg = intcell->pen.bg;
+-
+- if(pos.col < (screen->cols - 1) &&
+- getcell(screen, pos.row, pos.col + 1)->chars[0] == (uint32_t)-1)
+- cell->width = 2;
+- else
+- cell->width = 1;
+-
+- return 1;
+- }
+-
+- /* Copy external to internal representation of a screen cell */
+- /* static because it's only used internally for sb_popline during resize */
+- static int vterm_screen_set_cell(VTermScreen *screen, VTermPos pos, const VTermScreenCell *cell)
+- {
+- ScreenCell *intcell = getcell(screen, pos.row, pos.col);
+- int i;
+-
+- if(!intcell)
+- return 0;
+-
+- for(i = 0; ; i++) {
+- intcell->chars[i] = cell->chars[i];
+- if(!cell->chars[i])
+- break;
+- }
+-
+- intcell->pen.bold = cell->attrs.bold;
+- intcell->pen.underline = cell->attrs.underline;
+- intcell->pen.italic = cell->attrs.italic;
+- intcell->pen.blink = cell->attrs.blink;
+- intcell->pen.reverse = cell->attrs.reverse ^ screen->global_reverse;
+- intcell->pen.strike = cell->attrs.strike;
+- intcell->pen.font = cell->attrs.font;
+-
+- intcell->pen.fg = cell->fg;
+- intcell->pen.bg = cell->bg;
+-
+- if(cell->width == 2)
+- getcell(screen, pos.row, pos.col + 1)->chars[0] = (uint32_t)-1;
+-
+- return 1;
+- }
+-
+- int vterm_screen_is_eol(const VTermScreen *screen, VTermPos pos)
+- {
+- /* This cell is EOL if this and every cell to the right is black */
+- for(; pos.col < screen->cols; pos.col++) {
+- ScreenCell *cell = getcell(screen, pos.row, pos.col);
+- if(cell->chars[0] != 0)
+- return 0;
+- }
+-
+- return 1;
+- }
+-
+- VTermScreen *vterm_obtain_screen(VTerm *vt)
+- {
+- if(!vt->screen)
+- vt->screen = screen_new(vt);
+- return vt->screen;
+- }
+-
+- void vterm_screen_enable_altscreen(VTermScreen *screen, int altscreen)
+- {
+-
+- if(!screen->buffers[1] && altscreen) {
+- int rows, cols;
+- vterm_get_size(screen->vt, &rows, &cols);
+-
+- screen->buffers[1] = realloc_buffer(screen, NULL, rows, cols);
+- }
+- }
+-
+- void vterm_screen_set_callbacks(VTermScreen *screen, const VTermScreenCallbacks *callbacks, void *user)
+- {
+- screen->callbacks = callbacks;
+- screen->cbdata = user;
+- }
+-
+- void *vterm_screen_get_cbdata(VTermScreen *screen)
+- {
+- return screen->cbdata;
+- }
+-
+- void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const VTermParserCallbacks *fallbacks, void *user)
+- {
+- vterm_state_set_unrecognised_fallbacks(screen->state, fallbacks, user);
+- }
+-
+- void *vterm_screen_get_unrecognised_fbdata(VTermScreen *screen)
+- {
+- return vterm_state_get_unrecognised_fbdata(screen->state);
+- }
+-
+- void vterm_screen_flush_damage(VTermScreen *screen)
+- {
+- if(screen->pending_scrollrect.start_row != -1) {
+- vterm_scroll_rect(screen->pending_scrollrect, screen->pending_scroll_downward, screen->pending_scroll_rightward,
+- moverect_user, erase_user, screen);
+-
+- screen->pending_scrollrect.start_row = -1;
+- }
+-
+- if(screen->damaged.start_row != -1) {
+- if(screen->callbacks && screen->callbacks->damage)
+- (*screen->callbacks->damage)(screen->damaged, screen->cbdata);
+-
+- screen->damaged.start_row = -1;
+- }
+- }
+-
+- void vterm_screen_set_damage_merge(VTermScreen *screen, VTermDamageSize size)
+- {
+- vterm_screen_flush_damage(screen);
+- screen->damage_merge = size;
+- }
+-
+- static int attrs_differ(VTermAttrMask attrs, ScreenCell *a, ScreenCell *b)
+- {
+- if((attrs & VTERM_ATTR_BOLD_MASK) && (a->pen.bold != b->pen.bold))
+- return 1;
+- if((attrs & VTERM_ATTR_UNDERLINE_MASK) && (a->pen.underline != b->pen.underline))
+- return 1;
+- if((attrs & VTERM_ATTR_ITALIC_MASK) && (a->pen.italic != b->pen.italic))
+- return 1;
+- if((attrs & VTERM_ATTR_BLINK_MASK) && (a->pen.blink != b->pen.blink))
+- return 1;
+- if((attrs & VTERM_ATTR_REVERSE_MASK) && (a->pen.reverse != b->pen.reverse))
+- return 1;
+- if((attrs & VTERM_ATTR_STRIKE_MASK) && (a->pen.strike != b->pen.strike))
+- return 1;
+- if((attrs & VTERM_ATTR_FONT_MASK) && (a->pen.font != b->pen.font))
+- return 1;
+- if((attrs & VTERM_ATTR_FOREGROUND_MASK) && !vterm_color_equal(a->pen.fg, b->pen.fg))
+- return 1;
+- if((attrs & VTERM_ATTR_BACKGROUND_MASK) && !vterm_color_equal(a->pen.bg, b->pen.bg))
+- return 1;
+-
+- return 0;
+- }
+-
+- int vterm_screen_get_attrs_extent(const VTermScreen *screen, VTermRect *extent, VTermPos pos, VTermAttrMask attrs)
+- {
+- int col;
+-
+- ScreenCell *target = getcell(screen, pos.row, pos.col);
+-
+- // TODO: bounds check
+- extent->start_row = pos.row;
+- extent->end_row = pos.row + 1;
+-
+- if(extent->start_col < 0)
+- extent->start_col = 0;
+- if(extent->end_col < 0)
+- extent->end_col = screen->cols;
+-
+- for(col = pos.col - 1; col >= extent->start_col; col--)
+- if(attrs_differ(attrs, target, getcell(screen, pos.row, col)))
+- break;
+- extent->start_col = col + 1;
+-
+- for(col = pos.col + 1; col < extent->end_col; col++)
+- if(attrs_differ(attrs, target, getcell(screen, pos.row, col)))
+- break;
+- extent->end_col = col - 1;
+-
+- return 1;
+- }
+--- 0 ----
+*** ../vim-8.1.0378/src/libvterm/src/termscreen.c 2018-09-13 17:22:04.945647519 +0200
+--- src/libvterm/src/termscreen.c 2018-04-24 18:13:56.481237547 +0200
+***************
+*** 0 ****
+--- 1,935 ----
++ #include "vterm_internal.h"
++
++ #include <stdio.h>
++ #include <string.h>
++
++ #include "rect.h"
++ #include "utf8.h"
++
++ #define UNICODE_SPACE 0x20
++ #define UNICODE_LINEFEED 0x0a
++
++ /* State of the pen at some moment in time, also used in a cell */
++ typedef struct
++ {
++ /* After the bitfield */
++ VTermColor fg, bg;
++
++ unsigned int bold : 1;
++ unsigned int underline : 2;
++ unsigned int italic : 1;
++ unsigned int blink : 1;
++ unsigned int reverse : 1;
++ unsigned int strike : 1;
++ unsigned int font : 4; /* 0 to 9 */
++
++ /* Extra state storage that isn't strictly pen-related */
++ unsigned int protected_cell : 1;
++ unsigned int dwl : 1; /* on a DECDWL or DECDHL line */
++ unsigned int dhl : 2; /* on a DECDHL line (1=top 2=bottom) */
++ } ScreenPen;
++
++ /* Internal representation of a screen cell */
++ typedef struct
++ {
++ uint32_t chars[VTERM_MAX_CHARS_PER_CELL];
++ ScreenPen pen;
++ } ScreenCell;
++
++ static int vterm_screen_set_cell(VTermScreen *screen, VTermPos pos, const VTermScreenCell *cell);
++
++ struct VTermScreen
++ {
++ VTerm *vt;
++ VTermState *state;
++
++ const VTermScreenCallbacks *callbacks;
++ void *cbdata;
++
++ VTermDamageSize damage_merge;
++ /* start_row == -1 => no damage */
++ VTermRect damaged;
++ VTermRect pending_scrollrect;
++ int pending_scroll_downward, pending_scroll_rightward;
++
++ int rows;
++ int cols;
++ int global_reverse;
++
++ /* Primary and Altscreen. buffers[1] is lazily allocated as needed */
++ ScreenCell *buffers[2];
++
++ /* buffer will == buffers[0] or buffers[1], depending on altscreen */
++ ScreenCell *buffer;
++
++ /* buffer for a single screen row used in scrollback storage callbacks */
++ VTermScreenCell *sb_buffer;
++
++ ScreenPen pen;
++ };
++
++ static ScreenCell *getcell(const VTermScreen *screen, int row, int col)
++ {
++ if(row < 0 || row >= screen->rows)
++ return NULL;
++ if(col < 0 || col >= screen->cols)
++ return NULL;
++ return screen->buffer + (screen->cols * row) + col;
++ }
++
++ static ScreenCell *realloc_buffer(VTermScreen *screen, ScreenCell *buffer, int new_rows, int new_cols)
++ {
++ ScreenCell *new_buffer = vterm_allocator_malloc(screen->vt, sizeof(ScreenCell) * new_rows * new_cols);
++ int row, col;
++
++ for(row = 0; row < new_rows; row++) {
++ for(col = 0; col < new_cols; col++) {
++ ScreenCell *new_cell = new_buffer + row*new_cols + col;
++
++ if(buffer && row < screen->rows && col < screen->cols)
++ *new_cell = buffer[row * screen->cols + col];
++ else {
++ new_cell->chars[0] = 0;
++ new_cell->pen = screen->pen;
++ }
++ }
++ }
++
++ if(buffer)
++ vterm_allocator_free(screen->vt, buffer);
++
++ return new_buffer;
++ }
++
++ static void damagerect(VTermScreen *screen, VTermRect rect)
++ {
++ VTermRect emit;
++
++ switch(screen->damage_merge) {
++ case VTERM_DAMAGE_CELL:
++ /* Always emit damage event */
++ emit = rect;
++ break;
++
++ case VTERM_DAMAGE_ROW:
++ /* Emit damage longer than one row. Try to merge with existing damage in
++ * the same row */
++ if(rect.end_row > rect.start_row + 1) {
++ // Bigger than 1 line - flush existing, emit this
++ vterm_screen_flush_damage(screen);
++ emit = rect;
++ }
++ else if(screen->damaged.start_row == -1) {
++ // None stored yet
++ screen->damaged = rect;
++ return;
++ }
++ else if(rect.start_row == screen->damaged.start_row) {
++ // Merge with the stored line
++ if(screen->damaged.start_col > rect.start_col)
++ screen->damaged.start_col = rect.start_col;
++ if(screen->damaged.end_col < rect.end_col)
++ screen->damaged.end_col = rect.end_col;
++ return;
++ }
++ else {
++ // Emit the currently stored line, store a new one
++ emit = screen->damaged;
++ screen->damaged = rect;
++ }
++ break;
++
++ case VTERM_DAMAGE_SCREEN:
++ case VTERM_DAMAGE_SCROLL:
++ /* Never emit damage event */
++ if(screen->damaged.start_row == -1)
++ screen->damaged = rect;
++ else {
++ rect_expand(&screen->damaged, &rect);
++ }
++ return;
++
++ default:
++ DEBUG_LOG1("TODO: Maybe merge damage for level %d\n", screen->damage_merge);
++ return;
++ }
++
++ if(screen->callbacks && screen->callbacks->damage)
++ (*screen->callbacks->damage)(emit, screen->cbdata);
++ }
++
++ static void damagescreen(VTermScreen *screen)
++ {
++ VTermRect rect = {0,0,0,0};
++ rect.end_row = screen->rows;
++ rect.end_col = screen->cols;
++
++ damagerect(screen, rect);
++ }
++
++ static int putglyph(VTermGlyphInfo *info, VTermPos pos, void *user)
++ {
++ int i;
++ int col;
++ VTermRect rect;
++
++ VTermScreen *screen = user;
++ ScreenCell *cell = getcell(screen, pos.row, pos.col);
++
++ if(!cell)
++ return 0;
++
++ for(i = 0; i < VTERM_MAX_CHARS_PER_CELL && info->chars[i]; i++) {
++ cell->chars[i] = info->chars[i];
++ cell->pen = screen->pen;
++ }
++ if(i < VTERM_MAX_CHARS_PER_CELL)
++ cell->chars[i] = 0;
++
++ for(col = 1; col < info->width; col++)
++ getcell(screen, pos.row, pos.col + col)->chars[0] = (uint32_t)-1;
++
++ rect.start_row = pos.row;
++ rect.end_row = pos.row+1;
++ rect.start_col = pos.col;
++ rect.end_col = pos.col+info->width;
++
++ cell->pen.protected_cell = info->protected_cell;
++ cell->pen.dwl = info->dwl;
++ cell->pen.dhl = info->dhl;
++
++ damagerect(screen, rect);
++
++ return 1;
++ }
++
++ static int moverect_internal(VTermRect dest, VTermRect src, void *user)
++ {
++ VTermScreen *screen = user;
++
++ if(screen->callbacks && screen->callbacks->sb_pushline &&
++ dest.start_row == 0 && dest.start_col == 0 && // starts top-left corner
++ dest.end_col == screen->cols && // full width
++ screen->buffer == screen->buffers[0]) { // not altscreen
++ VTermPos pos;
++ for(pos.row = 0; pos.row < src.start_row; pos.row++) {
++ for(pos.col = 0; pos.col < screen->cols; pos.col++)
++ (void)vterm_screen_get_cell(screen, pos, screen->sb_buffer + pos.col);
++
++ (screen->callbacks->sb_pushline)(screen->cols, screen->sb_buffer, screen->cbdata);
++ }
++ }
++
++ {
++ int cols = src.end_col - src.start_col;
++ int downward = src.start_row - dest.start_row;
++ int init_row, test_row, inc_row;
++ int row;
++
++ if(downward < 0) {
++ init_row = dest.end_row - 1;
++ test_row = dest.start_row - 1;
++ inc_row = -1;
++ }
++ else {
++ init_row = dest.start_row;
++ test_row = dest.end_row;
++ inc_row = +1;
++ }
++
++ for(row = init_row; row != test_row; row += inc_row)
++ memmove(getcell(screen, row, dest.start_col),
++ getcell(screen, row + downward, src.start_col),
++ cols * sizeof(ScreenCell));
++ }
++
++ return 1;
++ }
++
++ static int moverect_user(VTermRect dest, VTermRect src, void *user)
++ {
++ VTermScreen *screen = user;
++
++ if(screen->callbacks && screen->callbacks->moverect) {
++ if(screen->damage_merge != VTERM_DAMAGE_SCROLL)
++ // Avoid an infinite loop
++ vterm_screen_flush_damage(screen);
++
++ if((*screen->callbacks->moverect)(dest, src, screen->cbdata))
++ return 1;
++ }
++
++ damagerect(screen, dest);
++
++ return 1;
++ }
++
++ static int erase_internal(VTermRect rect, int selective, void *user)
++ {
++ VTermScreen *screen = user;
++ int row, col;
++
++ for(row = rect.start_row; row < screen->state->rows && row < rect.end_row; row++) {
++ const VTermLineInfo *info = vterm_state_get_lineinfo(screen->state, row);
++
++ for(col = rect.start_col; col < rect.end_col; col++) {
++ ScreenCell *cell = getcell(screen, row, col);
++
++ if(selective && cell->pen.protected_cell)
++ continue;
++
++ cell->chars[0] = 0;
++ cell->pen = screen->pen;
++ cell->pen.dwl = info->doublewidth;
++ cell->pen.dhl = info->doubleheight;
++ }
++ }
++
++ return 1;
++ }
++
++ static int erase_user(VTermRect rect, int selective UNUSED, void *user)
++ {
++ VTermScreen *screen = user;
++
++ damagerect(screen, rect);
++
++ return 1;
++ }
++
++ static int erase(VTermRect rect, int selective, void *user)
++ {
++ erase_internal(rect, selective, user);
++ return erase_user(rect, 0, user);
++ }
++
++ static int scrollrect(VTermRect rect, int downward, int rightward, void *user)
++ {
++ VTermScreen *screen = user;
++
++ if(screen->damage_merge != VTERM_DAMAGE_SCROLL) {
++ vterm_scroll_rect(rect, downward, rightward,
++ moverect_internal, erase_internal, screen);
++
++ vterm_screen_flush_damage(screen);
++
++ vterm_scroll_rect(rect, downward, rightward,
++ moverect_user, erase_user, screen);
++
++ return 1;
++ }
++
++ if(screen->damaged.start_row != -1 &&
++ !rect_intersects(&rect, &screen->damaged)) {
++ vterm_screen_flush_damage(screen);
++ }
++
++ if(screen->pending_scrollrect.start_row == -1) {
++ screen->pending_scrollrect = rect;
++ screen->pending_scroll_downward = downward;
++ screen->pending_scroll_rightward = rightward;
++ }
++ else if(rect_equal(&screen->pending_scrollrect, &rect) &&
++ ((screen->pending_scroll_downward == 0 && downward == 0) ||
++ (screen->pending_scroll_rightward == 0 && rightward == 0))) {
++ screen->pending_scroll_downward += downward;
++ screen->pending_scroll_rightward += rightward;
++ }
++ else {
++ vterm_screen_flush_damage(screen);
++
++ screen->pending_scrollrect = rect;
++ screen->pending_scroll_downward = downward;
++ screen->pending_scroll_rightward = rightward;
++ }
++
++ vterm_scroll_rect(rect, downward, rightward,
++ moverect_internal, erase_internal, screen);
++
++ if(screen->damaged.start_row == -1)
++ return 1;
++
++ if(rect_contains(&rect, &screen->damaged)) {
++ /* Scroll region entirely contains the damage; just move it */
++ vterm_rect_move(&screen->damaged, -downward, -rightward);
++ rect_clip(&screen->damaged, &rect);
++ }
++ /* There are a number of possible cases here, but lets restrict this to only
++ * the common case where we might actually gain some performance by
++ * optimising it. Namely, a vertical scroll that neatly cuts the damage
++ * region in half.
++ */
++ else if(rect.start_col <= screen->damaged.start_col &&
++ rect.end_col >= screen->damaged.end_col &&
++ rightward == 0) {
++ if(screen->damaged.start_row >= rect.start_row &&
++ screen->damaged.start_row < rect.end_row) {
++ screen->damaged.start_row -= downward;
++ if(screen->damaged.start_row < rect.start_row)
++ screen->damaged.start_row = rect.start_row;
++ if(screen->damaged.start_row > rect.end_row)
++ screen->damaged.start_row = rect.end_row;
++ }
++ if(screen->damaged.end_row >= rect.start_row &&
++ screen->damaged.end_row < rect.end_row) {
++ screen->damaged.end_row -= downward;
++ if(screen->damaged.end_row < rect.start_row)
++ screen->damaged.end_row = rect.start_row;
++ if(screen->damaged.end_row > rect.end_row)
++ screen->damaged.end_row = rect.end_row;
++ }
++ }
++ else {
++ DEBUG_LOG2("TODO: Just flush and redo damaged=" STRFrect " rect=" STRFrect "\n",
++ ARGSrect(screen->damaged), ARGSrect(rect));
++ }
++
++ return 1;
++ }
++
++ static int movecursor(VTermPos pos, VTermPos oldpos, int visible, void *user)
++ {
++ VTermScreen *screen = user;
++
++ if(screen->callbacks && screen->callbacks->movecursor)
++ return (*screen->callbacks->movecursor)(pos, oldpos, visible, screen->cbdata);
++
++ return 0;
++ }
++
++ static int setpenattr(VTermAttr attr, VTermValue *val, void *user)
++ {
++ VTermScreen *screen = user;
++
++ switch(attr) {
++ case VTERM_ATTR_BOLD:
++ screen->pen.bold = val->boolean;
++ return 1;
++ case VTERM_ATTR_UNDERLINE:
++ screen->pen.underline = val->number;
++ return 1;
++ case VTERM_ATTR_ITALIC:
++ screen->pen.italic = val->boolean;
++ return 1;
++ case VTERM_ATTR_BLINK:
++ screen->pen.blink = val->boolean;
++ return 1;
++ case VTERM_ATTR_REVERSE:
++ screen->pen.reverse = val->boolean;
++ return 1;
++ case VTERM_ATTR_STRIKE:
++ screen->pen.strike = val->boolean;
++ return 1;
++ case VTERM_ATTR_FONT:
++ screen->pen.font = val->number;
++ return 1;
++ case VTERM_ATTR_FOREGROUND:
++ screen->pen.fg = val->color;
++ return 1;
++ case VTERM_ATTR_BACKGROUND:
++ screen->pen.bg = val->color;
++ return 1;
++
++ case VTERM_N_ATTRS:
++ return 0;
++ }
++
++ return 0;
++ }
++
++ static int settermprop(VTermProp prop, VTermValue *val, void *user)
++ {
++ VTermScreen *screen = user;
++
++ switch(prop) {
++ case VTERM_PROP_ALTSCREEN:
++ if(val->boolean && !screen->buffers[1])
++ return 0;
++
++ screen->buffer = val->boolean ? screen->buffers[1] : screen->buffers[0];
++ /* only send a damage event on disable; because during enable there's an
++ * erase that sends a damage anyway
++ */
++ if(!val->boolean)
++ damagescreen(screen);
++ break;
++ case VTERM_PROP_REVERSE:
++ screen->global_reverse = val->boolean;
++ damagescreen(screen);
++ break;
++ default:
++ ; /* ignore */
++ }
++
++ if(screen->callbacks && screen->callbacks->settermprop)
++ return (*screen->callbacks->settermprop)(prop, val, screen->cbdata);
++
++ return 1;
++ }
++
++ static int bell(void *user)
++ {
++ VTermScreen *screen = user;
++
++ if(screen->callbacks && screen->callbacks->bell)
++ return (*screen->callbacks->bell)(screen->cbdata);
++
++ return 0;
++ }
++
++ static int resize(int new_rows, int new_cols, VTermPos *delta, void *user)
++ {
++ VTermScreen *screen = user;
++
++ int is_altscreen = (screen->buffers[1] && screen->buffer == screen->buffers[1]);
++
++ int old_rows = screen->rows;
++ int old_cols = screen->cols;
++ int first_blank_row;
++
++ if(!is_altscreen && new_rows < old_rows) {
++ // Fewer rows - determine if we're going to scroll at all, and if so, push
++ // those lines to scrollback
++ VTermPos pos = { 0, 0 };
++ VTermPos cursor = screen->state->pos;
++ // Find the first blank row after the cursor.
++ for(pos.row = old_rows - 1; pos.row >= new_rows; pos.row--)
++ if(!vterm_screen_is_eol(screen, pos) || cursor.row == pos.row)
++ break;
++
++ first_blank_row = pos.row + 1;
++ if(first_blank_row > new_rows) {
++ VTermRect rect = {0,0,0,0};
++ rect.end_row = old_rows;
++ rect.end_col = old_cols;
++ scrollrect(rect, first_blank_row - new_rows, 0, user);
++ vterm_screen_flush_damage(screen);
++
++ delta->row -= first_blank_row - new_rows;
++ }
++ }
++
++ screen->buffers[0] = realloc_buffer(screen, screen->buffers[0], new_rows, new_cols);
++ if(screen->buffers[1])
++ screen->buffers[1] = realloc_buffer(screen, screen->buffers[1], new_rows, new_cols);
++
++ screen->buffer = is_altscreen ? screen->buffers[1] : screen->buffers[0];
++
++ screen->rows = new_rows;
++ screen->cols = new_cols;
++
++ if(screen->sb_buffer)
++ vterm_allocator_free(screen->vt, screen->sb_buffer);
++
++ screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * new_cols);
++
++ if(new_cols > old_cols) {
++ VTermRect rect;
++ rect.start_row = 0;
++ rect.end_row = old_rows;
++ rect.start_col = old_cols;
++ rect.end_col = new_cols;
++ damagerect(screen, rect);
++ }
++
++ if(new_rows > old_rows) {
++ if(!is_altscreen && screen->callbacks && screen->callbacks->sb_popline) {
++ int rows = new_rows - old_rows;
++ while(rows) {
++ VTermRect rect = {0,0,0,0};
++ VTermPos pos = { 0, 0 };
++ if(!(screen->callbacks->sb_popline(screen->cols, screen->sb_buffer, screen->cbdata)))
++ break;
++
++ rect.end_row = screen->rows;
++ rect.end_col = screen->cols;
++ scrollrect(rect, -1, 0, user);
++
++ for(pos.col = 0; pos.col < screen->cols; pos.col += screen->sb_buffer[pos.col].width)
++ vterm_screen_set_cell(screen, pos, screen->sb_buffer + pos.col);
++
++ rect.end_row = 1;
++ damagerect(screen, rect);
++
++ vterm_screen_flush_damage(screen);
++
++ rows--;
++ delta->row++;
++ }
++ }
++
++ {
++ VTermRect rect;
++ rect.start_row = old_rows;
++ rect.end_row = new_rows;
++ rect.start_col = 0;
++ rect.end_col = new_cols;
++ damagerect(screen, rect);
++ }
++ }
++
++ if(screen->callbacks && screen->callbacks->resize)
++ return (*screen->callbacks->resize)(new_rows, new_cols, screen->cbdata);
++
++ return 1;
++ }
++
++ static int setlineinfo(int row, const VTermLineInfo *newinfo, const VTermLineInfo *oldinfo, void *user)
++ {
++ VTermScreen *screen = user;
++ int col;
++ VTermRect rect;
++
++ if(newinfo->doublewidth != oldinfo->doublewidth ||
++ newinfo->doubleheight != oldinfo->doubleheight) {
++ for(col = 0; col < screen->cols; col++) {
++ ScreenCell *cell = getcell(screen, row, col);
++ cell->pen.dwl = newinfo->doublewidth;
++ cell->pen.dhl = newinfo->doubleheight;
++ }
++
++ rect.start_row = row;
++ rect.end_row = row + 1;
++ rect.start_col = 0;
++ rect.end_col = newinfo->doublewidth ? screen->cols / 2 : screen->cols;
++ damagerect(screen, rect);
++
++ if(newinfo->doublewidth) {
++ rect.start_col = screen->cols / 2;
++ rect.end_col = screen->cols;
++
++ erase_internal(rect, 0, user);
++ }
++ }
++
++ return 1;
++ }
++
++ static VTermStateCallbacks state_cbs = {
++ &putglyph, /* putglyph */
++ &movecursor, /* movecursor */
++ &scrollrect, /* scrollrect */
++ NULL, /* moverect */
++ &erase, /* erase */
++ NULL, /* initpen */
++ &setpenattr, /* setpenattr */
++ &settermprop, /* settermprop */
++ &bell, /* bell */
++ &resize, /* resize */
++ &setlineinfo /* setlineinfo */
++ };
++
++ static VTermScreen *screen_new(VTerm *vt)
++ {
++ VTermState *state = vterm_obtain_state(vt);
++ VTermScreen *screen;
++ int rows, cols;
++
++ if(!state)
++ return NULL;
++
++ screen = vterm_allocator_malloc(vt, sizeof(VTermScreen));
++
++ vterm_get_size(vt, &rows, &cols);
++
++ screen->vt = vt;
++ screen->state = state;
++
++ screen->damage_merge = VTERM_DAMAGE_CELL;
++ screen->damaged.start_row = -1;
++ screen->pending_scrollrect.start_row = -1;
++
++ screen->rows = rows;
++ screen->cols = cols;
++
++ screen->callbacks = NULL;
++ screen->cbdata = NULL;
++
++ screen->buffers[0] = realloc_buffer(screen, NULL, rows, cols);
++
++ screen->buffer = screen->buffers[0];
++
++ screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * cols);
++
++ vterm_state_set_callbacks(screen->state, &state_cbs, screen);
++
++ return screen;
++ }
++
++ INTERNAL void vterm_screen_free(VTermScreen *screen)
++ {
++ vterm_allocator_free(screen->vt, screen->buffers[0]);
++ if(screen->buffers[1])
++ vterm_allocator_free(screen->vt, screen->buffers[1]);
++
++ vterm_allocator_free(screen->vt, screen->sb_buffer);
++
++ vterm_allocator_free(screen->vt, screen);
++ }
++
++ void vterm_screen_reset(VTermScreen *screen, int hard)
++ {
++ screen->damaged.start_row = -1;
++ screen->pending_scrollrect.start_row = -1;
++ vterm_state_reset(screen->state, hard);
++ vterm_screen_flush_damage(screen);
++ }
++
++ static size_t _get_chars(const VTermScreen *screen, const int utf8, void *buffer, size_t len, const VTermRect rect)
++ {
++ size_t outpos = 0;
++ int padding = 0;
++ int row, col;
++
++ #define PUT(c) \
++ if(utf8) { \
++ size_t thislen = utf8_seqlen(c); \
++ if(buffer && outpos + thislen <= len) \
++ outpos += fill_utf8((c), (char *)buffer + outpos); \
++ else \
++ outpos += thislen; \
++ } \
++ else { \
++ if(buffer && outpos + 1 <= len) \
++ ((uint32_t*)buffer)[outpos++] = (c); \
++ else \
++ outpos++; \
++ }
++
++ for(row = rect.start_row; row < rect.end_row; row++) {
++ for(col = rect.start_col; col < rect.end_col; col++) {
++ ScreenCell *cell = getcell(screen, row, col);
++ int i;
++
++ if(cell->chars[0] == 0)
++ // Erased cell, might need a space
++ padding++;
++ else if(cell->chars[0] == (uint32_t)-1)
++ // Gap behind a double-width char, do nothing
++ ;
++ else {
++ while(padding) {
++ PUT(UNICODE_SPACE);
++ padding--;
++ }
++ for(i = 0; i < VTERM_MAX_CHARS_PER_CELL && cell->chars[i]; i++) {
++ PUT(cell->chars[i]);
++ }
++ }
++ }
++
++ if(row < rect.end_row - 1) {
++ PUT(UNICODE_LINEFEED);
++ padding = 0;
++ }
++ }
++
++ return outpos;
++ }
++
++ size_t vterm_screen_get_chars(const VTermScreen *screen, uint32_t *chars, size_t len, const VTermRect rect)
++ {
++ return _get_chars(screen, 0, chars, len, rect);
++ }
++
++ size_t vterm_screen_get_text(const VTermScreen *screen, char *str, size_t len, const VTermRect rect)
++ {
++ return _get_chars(screen, 1, str, len, rect);
++ }
++
++ /* Copy internal to external representation of a screen cell */
++ int vterm_screen_get_cell(const VTermScreen *screen, VTermPos pos, VTermScreenCell *cell)
++ {
++ ScreenCell *intcell = getcell(screen, pos.row, pos.col);
++ int i;
++
++ if(!intcell)
++ return 0;
++
++ for(i = 0; ; i++) {
++ cell->chars[i] = intcell->chars[i];
++ if(!intcell->chars[i])
++ break;
++ }
++
++ cell->attrs.bold = intcell->pen.bold;
++ cell->attrs.underline = intcell->pen.underline;
++ cell->attrs.italic = intcell->pen.italic;
++ cell->attrs.blink = intcell->pen.blink;
++ cell->attrs.reverse = intcell->pen.reverse ^ screen->global_reverse;
++ cell->attrs.strike = intcell->pen.strike;
++ cell->attrs.font = intcell->pen.font;
++
++ cell->attrs.dwl = intcell->pen.dwl;
++ cell->attrs.dhl = intcell->pen.dhl;
++
++ cell->fg = intcell->pen.fg;
++ cell->bg = intcell->pen.bg;
++
++ if(pos.col < (screen->cols - 1) &&
++ getcell(screen, pos.row, pos.col + 1)->chars[0] == (uint32_t)-1)
++ cell->width = 2;
++ else
++ cell->width = 1;
++
++ return 1;
++ }
++
++ /* Copy external to internal representation of a screen cell */
++ /* static because it's only used internally for sb_popline during resize */
++ static int vterm_screen_set_cell(VTermScreen *screen, VTermPos pos, const VTermScreenCell *cell)
++ {
++ ScreenCell *intcell = getcell(screen, pos.row, pos.col);
++ int i;
++
++ if(!intcell)
++ return 0;
++
++ for(i = 0; ; i++) {
++ intcell->chars[i] = cell->chars[i];
++ if(!cell->chars[i])
++ break;
++ }
++
++ intcell->pen.bold = cell->attrs.bold;
++ intcell->pen.underline = cell->attrs.underline;
++ intcell->pen.italic = cell->attrs.italic;
++ intcell->pen.blink = cell->attrs.blink;
++ intcell->pen.reverse = cell->attrs.reverse ^ screen->global_reverse;
++ intcell->pen.strike = cell->attrs.strike;
++ intcell->pen.font = cell->attrs.font;
++
++ intcell->pen.fg = cell->fg;
++ intcell->pen.bg = cell->bg;
++
++ if(cell->width == 2)
++ getcell(screen, pos.row, pos.col + 1)->chars[0] = (uint32_t)-1;
++
++ return 1;
++ }
++
++ int vterm_screen_is_eol(const VTermScreen *screen, VTermPos pos)
++ {
++ /* This cell is EOL if this and every cell to the right is black */
++ for(; pos.col < screen->cols; pos.col++) {
++ ScreenCell *cell = getcell(screen, pos.row, pos.col);
++ if(cell->chars[0] != 0)
++ return 0;
++ }
++
++ return 1;
++ }
++
++ VTermScreen *vterm_obtain_screen(VTerm *vt)
++ {
++ if(!vt->screen)
++ vt->screen = screen_new(vt);
++ return vt->screen;
++ }
++
++ void vterm_screen_enable_altscreen(VTermScreen *screen, int altscreen)
++ {
++
++ if(!screen->buffers[1] && altscreen) {
++ int rows, cols;
++ vterm_get_size(screen->vt, &rows, &cols);
++
++ screen->buffers[1] = realloc_buffer(screen, NULL, rows, cols);
++ }
++ }
++
++ void vterm_screen_set_callbacks(VTermScreen *screen, const VTermScreenCallbacks *callbacks, void *user)
++ {
++ screen->callbacks = callbacks;
++ screen->cbdata = user;
++ }
++
++ void *vterm_screen_get_cbdata(VTermScreen *screen)
++ {
++ return screen->cbdata;
++ }
++
++ void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const VTermParserCallbacks *fallbacks, void *user)
++ {
++ vterm_state_set_unrecognised_fallbacks(screen->state, fallbacks, user);
++ }
++
++ void *vterm_screen_get_unrecognised_fbdata(VTermScreen *screen)
++ {
++ return vterm_state_get_unrecognised_fbdata(screen->state);
++ }
++
++ void vterm_screen_flush_damage(VTermScreen *screen)
++ {
++ if(screen->pending_scrollrect.start_row != -1) {
++ vterm_scroll_rect(screen->pending_scrollrect, screen->pending_scroll_downward, screen->pending_scroll_rightward,
++ moverect_user, erase_user, screen);
++
++ screen->pending_scrollrect.start_row = -1;
++ }
++
++ if(screen->damaged.start_row != -1) {
++ if(screen->callbacks && screen->callbacks->damage)
++ (*screen->callbacks->damage)(screen->damaged, screen->cbdata);
++
++ screen->damaged.start_row = -1;
++ }
++ }
++
++ void vterm_screen_set_damage_merge(VTermScreen *screen, VTermDamageSize size)
++ {
++ vterm_screen_flush_damage(screen);
++ screen->damage_merge = size;
++ }
++
++ static int attrs_differ(VTermAttrMask attrs, ScreenCell *a, ScreenCell *b)
++ {
++ if((attrs & VTERM_ATTR_BOLD_MASK) && (a->pen.bold != b->pen.bold))
++ return 1;
++ if((attrs & VTERM_ATTR_UNDERLINE_MASK) && (a->pen.underline != b->pen.underline))
++ return 1;
++ if((attrs & VTERM_ATTR_ITALIC_MASK) && (a->pen.italic != b->pen.italic))
++ return 1;
++ if((attrs & VTERM_ATTR_BLINK_MASK) && (a->pen.blink != b->pen.blink))
++ return 1;
++ if((attrs & VTERM_ATTR_REVERSE_MASK) && (a->pen.reverse != b->pen.reverse))
++ return 1;
++ if((attrs & VTERM_ATTR_STRIKE_MASK) && (a->pen.strike != b->pen.strike))
++ return 1;
++ if((attrs & VTERM_ATTR_FONT_MASK) && (a->pen.font != b->pen.font))
++ return 1;
++ if((attrs & VTERM_ATTR_FOREGROUND_MASK) && !vterm_color_equal(a->pen.fg, b->pen.fg))
++ return 1;
++ if((attrs & VTERM_ATTR_BACKGROUND_MASK) && !vterm_color_equal(a->pen.bg, b->pen.bg))
++ return 1;
++
++ return 0;
++ }
++
++ int vterm_screen_get_attrs_extent(const VTermScreen *screen, VTermRect *extent, VTermPos pos, VTermAttrMask attrs)
++ {
++ int col;
++
++ ScreenCell *target = getcell(screen, pos.row, pos.col);
++
++ // TODO: bounds check
++ extent->start_row = pos.row;
++ extent->end_row = pos.row + 1;
++
++ if(extent->start_col < 0)
++ extent->start_col = 0;
++ if(extent->end_col < 0)
++ extent->end_col = screen->cols;
++
++ for(col = pos.col - 1; col >= extent->start_col; col--)
++ if(attrs_differ(attrs, target, getcell(screen, pos.row, col)))
++ break;
++ extent->start_col = col + 1;
++
++ for(col = pos.col + 1; col < extent->end_col; col++)
++ if(attrs_differ(attrs, target, getcell(screen, pos.row, col)))
++ break;
++ extent->end_col = col - 1;
++
++ return 1;
++ }
+*** ../vim-8.1.0378/src/Make_cyg_ming.mak 2018-09-10 17:50:32.709306979 +0200
+--- src/Make_cyg_ming.mak 2018-09-13 17:19:08.403051373 +0200
+***************
+*** 818,832 ****
+
+ ifeq ($(TERMINAL),yes)
+ OBJ += $(OUTDIR)/terminal.o \
+! $(OUTDIR)/term_encoding.o \
+! $(OUTDIR)/term_keyboard.o \
+! $(OUTDIR)/term_mouse.o \
+! $(OUTDIR)/term_parser.o \
+! $(OUTDIR)/term_pen.o \
+! $(OUTDIR)/term_screen.o \
+! $(OUTDIR)/term_state.o \
+! $(OUTDIR)/term_unicode.o \
+! $(OUTDIR)/term_vterm.o
+ endif
+
+ # Include xdiff
+--- 818,832 ----
+
+ ifeq ($(TERMINAL),yes)
+ OBJ += $(OUTDIR)/terminal.o \
+! $(OUTDIR)/encoding.o \
+! $(OUTDIR)/keyboard.o \
+! $(OUTDIR)/mouse.o \
+! $(OUTDIR)/parser.o \
+! $(OUTDIR)/pen.o \
+! $(OUTDIR)/termscreen.o \
+! $(OUTDIR)/state.o \
+! $(OUTDIR)/unicode.o \
+! $(OUTDIR)/vterm.o
+ endif
+
+ # Include xdiff
+***************
+*** 1064,1094 ****
+ -DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
+ -DWCWIDTH_FUNCTION=utf_uint2cells
+
+! $(OUTDIR)/term_encoding.o: libvterm/src/encoding.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/encoding.c -o $@
+
+! $(OUTDIR)/term_keyboard.o: libvterm/src/keyboard.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/keyboard.c -o $@
+
+! $(OUTDIR)/term_mouse.o: libvterm/src/mouse.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/mouse.c -o $@
+
+! $(OUTDIR)/term_parser.o: libvterm/src/parser.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/parser.c -o $@
+
+! $(OUTDIR)/term_pen.o: libvterm/src/pen.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/pen.c -o $@
+
+! $(OUTDIR)/term_screen.o: libvterm/src/screen.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/screen.c -o $@
+
+! $(OUTDIR)/term_state.o: libvterm/src/state.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/state.c -o $@
+
+! $(OUTDIR)/term_unicode.o: libvterm/src/unicode.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/unicode.c -o $@
+
+! $(OUTDIR)/term_vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/vterm.c -o $@
+
+ $(OUTDIR)/xdiffi.o: xdiff/xdiffi.c $(XDIFF_DEPS)
+--- 1064,1094 ----
+ -DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
+ -DWCWIDTH_FUNCTION=utf_uint2cells
+
+! $(OUTDIR)/encoding.o: libvterm/src/encoding.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/encoding.c -o $@
+
+! $(OUTDIR)/keyboard.o: libvterm/src/keyboard.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/keyboard.c -o $@
+
+! $(OUTDIR)/mouse.o: libvterm/src/mouse.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/mouse.c -o $@
+
+! $(OUTDIR)/parser.o: libvterm/src/parser.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/parser.c -o $@
+
+! $(OUTDIR)/pen.o: libvterm/src/pen.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/pen.c -o $@
+
+! $(OUTDIR)/termscreen.o: libvterm/src/termscreen.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/termscreen.c -o $@
+
+! $(OUTDIR)/state.o: libvterm/src/state.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/state.c -o $@
+
+! $(OUTDIR)/unicode.o: libvterm/src/unicode.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/unicode.c -o $@
+
+! $(OUTDIR)/vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
+ $(CCCTERM) libvterm/src/vterm.c -o $@
+
+ $(OUTDIR)/xdiffi.o: xdiff/xdiffi.c $(XDIFF_DEPS)
+*** ../vim-8.1.0378/src/Make_mvc.mak 2018-09-10 17:50:32.709306979 +0200
+--- src/Make_mvc.mak 2018-09-13 17:19:45.166766309 +0200
+***************
+*** 380,394 ****
+ !if "$(TERMINAL)" == "yes"
+ TERM_OBJ = \
+ $(OBJDIR)/terminal.obj \
+! $(OBJDIR)/term_encoding.obj \
+! $(OBJDIR)/term_keyboard.obj \
+! $(OBJDIR)/term_mouse.obj \
+! $(OBJDIR)/term_parser.obj \
+! $(OBJDIR)/term_pen.obj \
+! $(OBJDIR)/term_screen.obj \
+! $(OBJDIR)/term_state.obj \
+! $(OBJDIR)/term_unicode.obj \
+! $(OBJDIR)/term_vterm.obj
+ TERM_DEFS = -DFEAT_TERMINAL
+ TERM_DEPS = \
+ libvterm/include/vterm.h \
+--- 380,394 ----
+ !if "$(TERMINAL)" == "yes"
+ TERM_OBJ = \
+ $(OBJDIR)/terminal.obj \
+! $(OBJDIR)/encoding.obj \
+! $(OBJDIR)/keyboard.obj \
+! $(OBJDIR)/mouse.obj \
+! $(OBJDIR)/parser.obj \
+! $(OBJDIR)/pen.obj \
+! $(OBJDIR)/termscreen.obj \
+! $(OBJDIR)/state.obj \
+! $(OBJDIR)/unicode.obj \
+! $(OBJDIR)/vterm.obj
+ TERM_DEFS = -DFEAT_TERMINAL
+ TERM_DEPS = \
+ libvterm/include/vterm.h \
+***************
+*** 1561,1591 ****
+ -DWCWIDTH_FUNCTION=utf_uint2cells \
+ -D_CRT_SECURE_NO_WARNINGS
+
+! $(OUTDIR)/term_encoding.obj: $(OUTDIR) libvterm/src/encoding.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/encoding.c
+
+! $(OUTDIR)/term_keyboard.obj: $(OUTDIR) libvterm/src/keyboard.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/keyboard.c
+
+! $(OUTDIR)/term_mouse.obj: $(OUTDIR) libvterm/src/mouse.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/mouse.c
+
+! $(OUTDIR)/term_parser.obj: $(OUTDIR) libvterm/src/parser.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/parser.c
+
+! $(OUTDIR)/term_pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/pen.c
+
+! $(OUTDIR)/term_screen.obj: $(OUTDIR) libvterm/src/screen.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/screen.c
+
+! $(OUTDIR)/term_state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/state.c
+
+! $(OUTDIR)/term_unicode.obj: $(OUTDIR) libvterm/src/unicode.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/unicode.c
+
+! $(OUTDIR)/term_vterm.obj: $(OUTDIR) libvterm/src/vterm.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/vterm.c
+
+
+--- 1561,1591 ----
+ -DWCWIDTH_FUNCTION=utf_uint2cells \
+ -D_CRT_SECURE_NO_WARNINGS
+
+! $(OUTDIR)/encoding.obj: $(OUTDIR) libvterm/src/encoding.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/encoding.c
+
+! $(OUTDIR)/keyboard.obj: $(OUTDIR) libvterm/src/keyboard.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/keyboard.c
+
+! $(OUTDIR)/mouse.obj: $(OUTDIR) libvterm/src/mouse.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/mouse.c
+
+! $(OUTDIR)/parser.obj: $(OUTDIR) libvterm/src/parser.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/parser.c
+
+! $(OUTDIR)/pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/pen.c
+
+! $(OUTDIR)/termscreen.obj: $(OUTDIR) libvterm/src/screen.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/screen.c
+
+! $(OUTDIR)/state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/state.c
+
+! $(OUTDIR)/unicode.obj: $(OUTDIR) libvterm/src/unicode.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/unicode.c
+
+! $(OUTDIR)/vterm.obj: $(OUTDIR) libvterm/src/vterm.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/vterm.c
+
+
+*** ../vim-8.1.0378/src/version.c 2018-09-13 15:58:55.745722402 +0200
+--- src/version.c 2018-09-13 16:44:24.695181110 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 379,
+ /**/
+
+--
+Well, you come from nothing, you go back to nothing... What have you
+lost? Nothing!
+ -- Monty Python: The life of Brian
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0380 b/data/vim/patches/8.1.0380
new file mode 100644
index 000000000..484ff7518
--- /dev/null
+++ b/data/vim/patches/8.1.0380
@@ -0,0 +1,214 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0380
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0380
+Problem: "make proto" doesn't work well.
+Solution: Define a few more types for cproto. Update proto files. Fix that
+ workshop didn't build.
+Files: src/vim.h, src/protodef.h, src/if_ruby.c, src/workshop.c,
+ src/proto/digraph.pro, src/proto/hardcopy.pro,
+ src/proto/option.pro, src/proto/window.pro
+
+
+*** ../vim-8.1.0379/src/vim.h 2018-09-11 21:30:05.253070476 +0200
+--- src/vim.h 2018-09-13 16:39:27.014182296 +0200
+***************
+*** 9,18 ****
+ #ifndef VIM__H
+ # define VIM__H
+
+! #ifdef PROTO
+! /* cproto runs into trouble when this type is missing */
+! typedef double _Float128;
+! #endif
+
+ /* use fastcall for Borland, when compiling for Win32 */
+ #if defined(__BORLANDC__) && defined(WIN32) && !defined(DEBUG)
+--- 9,15 ----
+ #ifndef VIM__H
+ # define VIM__H
+
+! #include "protodef.h"
+
+ /* use fastcall for Borland, when compiling for Win32 */
+ #if defined(__BORLANDC__) && defined(WIN32) && !defined(DEBUG)
+*** ../vim-8.1.0379/src/protodef.h 2018-09-13 17:25:18.544025832 +0200
+--- src/protodef.h 2018-09-13 16:39:03.850408009 +0200
+***************
+*** 0 ****
+--- 1,18 ----
++ /* vi:set ts=8 sts=4 sw=4 noet:
++ *
++ * VIM - Vi IMproved by Bram Moolenaar
++ *
++ * Do ":help uganda" in Vim to read copying and usage conditions.
++ * Do ":help credits" in Vim to see a list of people who contributed.
++ */
++
++ #ifdef PROTO
++ // cproto runs into trouble when these types are missing
++ typedef double _Float16;
++ typedef double _Float32;
++ typedef double _Float64;
++ typedef double _Float128;
++ typedef double _Float32x;
++ typedef double _Float64x;
++ #endif
++
+*** ../vim-8.1.0379/src/if_ruby.c 2018-08-11 14:24:06.945748177 +0200
+--- src/if_ruby.c 2018-09-13 16:38:17.706857582 +0200
+***************
+*** 11,16 ****
+--- 11,17 ----
+ * See README.txt for an overview of the Vim source code.
+ */
+
++ #include "protodef.h"
+ #ifdef HAVE_CONFIG_H
+ # include "auto/config.h"
+ #endif
+*** ../vim-8.1.0379/src/workshop.c 2018-06-23 19:22:45.618486231 +0200
+--- src/workshop.c 2018-09-13 16:42:46.020194024 +0200
+***************
+*** 8,13 ****
+--- 8,14 ----
+ * See README.txt for an overview of the Vim source code.
+ */
+
++ #include "protodef.h"
+ #ifdef HAVE_CONFIG_H
+ # include "auto/config.h"
+ #endif
+***************
+*** 1541,1547 ****
+ #ifdef FEAT_VARTABS
+ idx = computeIndex(col, text, beval->ts, beval->vts);
+ #else
+! idx = computeIndex(col, text, beval->ts);
+ #endif
+ if (idx > 0)
+ {
+--- 1542,1548 ----
+ #ifdef FEAT_VARTABS
+ idx = computeIndex(col, text, beval->ts, beval->vts);
+ #else
+! idx = computeIndex(col, text, beval->ts, 0);
+ #endif
+ if (idx > 0)
+ {
+***************
+*** 1577,1587 ****
+ computeIndex(
+ int wantedCol,
+ char_u *line,
+! int ts
+! #ifdef FEAT_VARTABS
+! int *vts
+! #else
+! )
+ {
+ int col = 0;
+ int idx = 0;
+--- 1578,1585 ----
+ computeIndex(
+ int wantedCol,
+ char_u *line,
+! int ts,
+! int *vts UNUSED)
+ {
+ int col = 0;
+ int idx = 0;
+*** ../vim-8.1.0379/src/proto/digraph.pro 2018-05-17 13:52:31.000000000 +0200
+--- src/proto/digraph.pro 2018-09-13 17:24:19.032531752 +0200
+***************
+*** 1,6 ****
+ /* digraph.c */
+ int do_digraph(int c);
+! char_u *get_digraph_for_char(int val);
+ int get_digraph(int cmdline);
+ int getdigraph(int char1, int char2, int meta_char);
+ void putdigraph(char_u *str);
+--- 1,6 ----
+ /* digraph.c */
+ int do_digraph(int c);
+! char_u *get_digraph_for_char(int val_arg);
+ int get_digraph(int cmdline);
+ int getdigraph(int char1, int char2, int meta_char);
+ void putdigraph(char_u *str);
+*** ../vim-8.1.0379/src/proto/hardcopy.pro 2018-05-17 13:52:37.000000000 +0200
+--- src/proto/hardcopy.pro 2018-09-13 17:24:22.172505209 +0200
+***************
+*** 13,19 ****
+ int mch_print_begin_page(char_u *str);
+ int mch_print_blank_page(void);
+ void mch_print_start_line(int margin, int page_line);
+! int mch_print_text_out(char_u *p, int len);
+ void mch_print_set_font(int iBold, int iItalic, int iUnderline);
+ void mch_print_set_bg(long_u bgcol);
+ void mch_print_set_fg(long_u fgcol);
+--- 13,19 ----
+ int mch_print_begin_page(char_u *str);
+ int mch_print_blank_page(void);
+ void mch_print_start_line(int margin, int page_line);
+! int mch_print_text_out(char_u *textp, int len);
+ void mch_print_set_font(int iBold, int iItalic, int iUnderline);
+ void mch_print_set_bg(long_u bgcol);
+ void mch_print_set_fg(long_u fgcol);
+*** ../vim-8.1.0379/src/proto/option.pro 2018-06-23 19:22:45.614486258 +0200
+--- src/proto/option.pro 2018-09-13 17:24:28.040455557 +0200
+***************
+*** 64,70 ****
+ int tabstop_padding(colnr_T col, int ts_arg, int *vts);
+ int tabstop_at(colnr_T col, int ts, int *vts);
+ colnr_T tabstop_start(colnr_T col, int ts, int *vts);
+! void tabstop_fromto(colnr_T start_col, colnr_T end_col, int ts, int *vts, int *ntabs, int *nspcs);
+ int tabstop_eq(int *ts1, int *ts2);
+ int *tabstop_copy(int *oldts);
+ int tabstop_count(int *ts);
+--- 64,70 ----
+ int tabstop_padding(colnr_T col, int ts_arg, int *vts);
+ int tabstop_at(colnr_T col, int ts, int *vts);
+ colnr_T tabstop_start(colnr_T col, int ts, int *vts);
+! void tabstop_fromto(colnr_T start_col, colnr_T end_col, int ts_arg, int *vts, int *ntabs, int *nspcs);
+ int tabstop_eq(int *ts1, int *ts2);
+ int *tabstop_copy(int *oldts);
+ int tabstop_count(int *ts);
+*** ../vim-8.1.0379/src/proto/window.pro 2018-08-21 16:56:28.367325278 +0200
+--- src/proto/window.pro 2018-09-13 17:24:32.976413749 +0200
+***************
+*** 94,98 ****
+ win_T *win_id2wp(typval_T *argvars);
+ int win_id2win(typval_T *argvars);
+ void win_findbuf(typval_T *argvars, list_T *list);
+! void get_framelayout(frame_T *fr, list_T *l, int topframe);
+ /* vim: set ft=c : */
+--- 94,98 ----
+ win_T *win_id2wp(typval_T *argvars);
+ int win_id2win(typval_T *argvars);
+ void win_findbuf(typval_T *argvars, list_T *list);
+! void get_framelayout(frame_T *fr, list_T *l, int outer);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0379/src/version.c 2018-09-13 17:23:05.169150892 +0200
+--- src/version.c 2018-09-13 17:24:14.340571382 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 380,
+ /**/
+
+--
+George: "I just got a new set of golf clubs for my wife!"
+ John: "Great trade!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0381 b/data/vim/patches/8.1.0381
new file mode 100644
index 000000000..7c85a1202
--- /dev/null
+++ b/data/vim/patches/8.1.0381
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0381
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0381
+Problem: Variable declaration not at start of block.
+Solution: Fix line ordering.
+Files: src/xdiff/xpatience.c
+
+
+*** ../vim-8.1.0380/src/xdiff/xpatience.c 2018-09-13 15:58:55.745722402 +0200
+--- src/xdiff/xpatience.c 2018-09-13 17:29:31.541819795 +0200
+***************
+*** 209,219 ****
+ struct entry **sequence = (struct entry **)xdl_malloc(map->nr * sizeof(struct entry *));
+ int longest = 0, i;
+ struct entry *entry;
+-
+- /* Added to silence Coverity. */
+- if (sequence == NULL)
+- return map->first;
+-
+ /*
+ * If not -1, this entry in sequence must never be overridden.
+ * Therefore, overriding entries before this has no effect, so
+--- 209,214 ----
+***************
+*** 221,226 ****
+--- 216,225 ----
+ */
+ int anchor_i = -1;
+
++ /* Added to silence Coverity. */
++ if (sequence == NULL)
++ return map->first;
++
+ for (entry = map->first; entry; entry = entry->next) {
+ if (!entry->line2 || entry->line2 == NON_UNIQUE)
+ continue;
+*** ../vim-8.1.0380/src/version.c 2018-09-13 17:26:31.091401618 +0200
+--- src/version.c 2018-09-13 17:30:22.473367156 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 381,
+ /**/
+
+--
+Light travels faster than sound. This is why some people
+appear bright until you hear them speak
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0382 b/data/vim/patches/8.1.0382
new file mode 100644
index 000000000..1672ad71e
--- /dev/null
+++ b/data/vim/patches/8.1.0382
@@ -0,0 +1,186 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0382
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0382
+Problem: Some make programs can't handle dependency on "xdiff/../".
+Solution: Strip it out.
+Files: src/Makefile
+
+
+*** ../vim-8.1.0381/src/Makefile 2018-09-13 17:23:05.165150925 +0200
+--- src/Makefile 2018-09-13 17:59:08.999447845 +0200
+***************
+*** 2845,2851 ****
+ sed -e '/\#\#\# Dependencies/q' < Makefile > tmp_make
+ -for i in $(ALL_SRC); do echo $$i; \
+ $(CPP_DEPEND) $$i | \
+! sed -e 's+^\([^ ]*\.o\)+objects/\1+' >> tmp_make; done
+ mv tmp_make Makefile
+
+ # Run lint. Clean up the *.ln files that are sometimes left behind.
+--- 2845,2851 ----
+ sed -e '/\#\#\# Dependencies/q' < Makefile > tmp_make
+ -for i in $(ALL_SRC); do echo $$i; \
+ $(CPP_DEPEND) $$i | \
+! sed -e 's+^\([^ ]*\.o\)+objects/\1+' -e 's+xdiff/\.\./++g' >> tmp_make; done
+ mv tmp_make Makefile
+
+ # Run lint. Clean up the *.ln files that are sometimes left behind.
+***************
+*** 3404,3410 ****
+ objects/diff.o: diff.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h xdiff/xdiff.h xdiff/../vim.h
+ objects/digraph.o: digraph.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+--- 3404,3410 ----
+ objects/diff.o: diff.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+! proto.h globals.h farsi.h arabic.h xdiff/xdiff.h vim.h
+ objects/digraph.o: digraph.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+***************
+*** 3791,3847 ****
+ objects/vterm.o: libvterm/src/vterm.c libvterm/src/vterm_internal.h \
+ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h \
+ libvterm/src/utf8.h
+! objects/xdiffi.o: xdiff/xdiffi.c xdiff/xinclude.h xdiff/../auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
+! xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
+! xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
+! xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
+! xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
+! xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
+! xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xemit.o: xdiff/xemit.c xdiff/xinclude.h xdiff/../auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
+! xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
+! xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
+! xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
+! xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
+! xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
+! xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xprepare.o: xdiff/xprepare.c xdiff/xinclude.h xdiff/../auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
+! xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
+! xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
+! xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
+! xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
+! xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
+! xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xutils.o: xdiff/xutils.c xdiff/xinclude.h xdiff/../auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
+! xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
+! xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
+! xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
+! xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
+! xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
+! xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xhistogram.o: xdiff/xhistogram.c xdiff/xinclude.h xdiff/../auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
+! xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
+! xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
+! xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
+! xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
+! xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
+! xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xpatience.o: xdiff/xpatience.c xdiff/xinclude.h xdiff/../auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h xdiff/../vim.h xdiff/../protodef.h \
+! xdiff/../auto/config.h xdiff/../feature.h xdiff/../os_unix.h \
+! xdiff/../auto/osdef.h xdiff/../ascii.h xdiff/../keymap.h xdiff/../term.h \
+! xdiff/../macros.h xdiff/../option.h xdiff/../beval.h proto/gui_beval.pro \
+! xdiff/../structs.h xdiff/../regexp.h xdiff/../gui.h xdiff/../alloc.h \
+! xdiff/../ex_cmds.h xdiff/../spell.h xdiff/../proto.h xdiff/../globals.h \
+! xdiff/../farsi.h xdiff/../arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+--- 3791,3847 ----
+ objects/vterm.o: libvterm/src/vterm.c libvterm/src/vterm_internal.h \
+ libvterm/include/vterm.h libvterm/include/vterm_keycodes.h \
+ libvterm/src/utf8.h
+! objects/xdiffi.o: xdiff/xdiffi.c xdiff/xinclude.h auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h vim.h protodef.h \
+! auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h \
+! macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xemit.o: xdiff/xemit.c xdiff/xinclude.h auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h vim.h protodef.h \
+! auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h \
+! macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xprepare.o: xdiff/xprepare.c xdiff/xinclude.h auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h vim.h protodef.h \
+! auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h \
+! macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xutils.o: xdiff/xutils.c xdiff/xinclude.h auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h vim.h protodef.h \
+! auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h \
+! macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xhistogram.o: xdiff/xhistogram.c xdiff/xinclude.h auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h vim.h protodef.h \
+! auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h \
+! macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+! objects/xpatience.o: xdiff/xpatience.c xdiff/xinclude.h auto/config.h \
+! xdiff/xmacros.h xdiff/xdiff.h vim.h protodef.h \
+! auto/config.h feature.h os_unix.h \
+! auto/osdef.h ascii.h keymap.h term.h \
+! macros.h option.h beval.h proto/gui_beval.pro \
+! structs.h regexp.h gui.h alloc.h \
+! ex_cmds.h spell.h proto.h globals.h \
+! farsi.h arabic.h xdiff/xtypes.h xdiff/xutils.h \
+ xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
+*** ../vim-8.1.0381/src/version.c 2018-09-13 17:32:03.156465946 +0200
+--- src/version.c 2018-09-13 18:01:04.738133170 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 382,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+39. You move into a new house and decide to Netscape before you landscape.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0383 b/data/vim/patches/8.1.0383
new file mode 100644
index 000000000..bbd3183fb
--- /dev/null
+++ b/data/vim/patches/8.1.0383
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0383
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0383
+Problem: Missing source file rename.
+Solution: Update the dependency.
+Files: src/Make_mvc.mak
+
+
+*** ../vim-8.1.0382/src/Make_mvc.mak 2018-09-13 17:23:05.169150892 +0200
+--- src/Make_mvc.mak 2018-09-13 18:04:21.243973088 +0200
+***************
+*** 1576,1583 ****
+ $(OUTDIR)/pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/pen.c
+
+! $(OUTDIR)/termscreen.obj: $(OUTDIR) libvterm/src/screen.c $(TERM_DEPS)
+! $(CCCTERM) -Fo$@ libvterm/src/screen.c
+
+ $(OUTDIR)/state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/state.c
+--- 1576,1583 ----
+ $(OUTDIR)/pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/pen.c
+
+! $(OUTDIR)/termscreen.obj: $(OUTDIR) libvterm/src/termscreen.c $(TERM_DEPS)
+! $(CCCTERM) -Fo$@ libvterm/src/termscreen.c
+
+ $(OUTDIR)/state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
+ $(CCCTERM) -Fo$@ libvterm/src/state.c
+*** ../vim-8.1.0382/src/version.c 2018-09-13 18:01:27.637877198 +0200
+--- src/version.c 2018-09-13 18:05:04.691505179 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 383,
+ /**/
+
+--
+The future isn't what it used to be.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0384 b/data/vim/patches/8.1.0384
new file mode 100644
index 000000000..f48352fc0
--- /dev/null
+++ b/data/vim/patches/8.1.0384
@@ -0,0 +1,189 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0384
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0384
+Problem: Sign ordering depends on +netbeans feature.
+Solution: Also order signs without +netbeans. (Christian Brabandt,
+ closes #3224)
+Files: src/structs.h, src/buffer.c
+
+
+*** ../vim-8.1.0383/src/structs.h 2018-09-10 21:04:09.872392623 +0200
+--- src/structs.h 2018-09-13 18:27:54.241504400 +0200
+***************
+*** 704,712 ****
+ linenr_T lnum; /* line number which has this sign */
+ int typenr; /* typenr of sign */
+ signlist_T *next; /* next signlist entry */
+- # ifdef FEAT_NETBEANS_INTG
+ signlist_T *prev; /* previous entry -- for easy reordering */
+- # endif
+ };
+
+ /* type argument for buf_getsigntype() */
+--- 704,710 ----
+*** ../vim-8.1.0383/src/buffer.c 2018-09-10 21:04:09.864392710 +0200
+--- src/buffer.c 2018-09-13 18:27:43.673610125 +0200
+***************
+*** 5856,5866 ****
+ newsign->lnum = lnum;
+ newsign->typenr = typenr;
+ newsign->next = next;
+- #ifdef FEAT_NETBEANS_INTG
+ newsign->prev = prev;
+ if (next != NULL)
+ next->prev = newsign;
+- #endif
+
+ if (prev == NULL)
+ {
+--- 5856,5864 ----
+***************
+*** 5905,5942 ****
+ sign->typenr = typenr;
+ return;
+ }
+! else if (
+! #ifndef FEAT_NETBEANS_INTG /* keep signs sorted by lnum */
+! id < 0 &&
+! #endif
+! lnum < sign->lnum)
+ {
+! #ifdef FEAT_NETBEANS_INTG /* insert new sign at head of list for this lnum */
+! /* XXX - GRP: Is this because of sign slide problem? Or is it
+! * really needed? Or is it because we allow multiple signs per
+! * line? If so, should I add that feature to FEAT_SIGNS?
+! */
+ while (prev != NULL && prev->lnum == lnum)
+ prev = prev->prev;
+ if (prev == NULL)
+ sign = buf->b_signlist;
+ else
+ sign = prev->next;
+- #endif
+ insert_sign(buf, prev, sign, id, lnum, typenr);
+ return;
+ }
+ prev = sign;
+ }
+! #ifdef FEAT_NETBEANS_INTG /* insert new sign at head of list for this lnum */
+! /* XXX - GRP: See previous comment */
+ while (prev != NULL && prev->lnum == lnum)
+ prev = prev->prev;
+ if (prev == NULL)
+ sign = buf->b_signlist;
+ else
+ sign = prev->next;
+- #endif
+ insert_sign(buf, prev, sign, id, lnum, typenr);
+
+ return;
+--- 5903,5931 ----
+ sign->typenr = typenr;
+ return;
+ }
+! else if (lnum < sign->lnum)
+ {
+! // keep signs sorted by lnum: insert new sign at head of list for
+! // this lnum
+ while (prev != NULL && prev->lnum == lnum)
+ prev = prev->prev;
+ if (prev == NULL)
+ sign = buf->b_signlist;
+ else
+ sign = prev->next;
+ insert_sign(buf, prev, sign, id, lnum, typenr);
+ return;
+ }
+ prev = sign;
+ }
+!
+! // insert new sign at head of list for this lnum
+ while (prev != NULL && prev->lnum == lnum)
+ prev = prev->prev;
+ if (prev == NULL)
+ sign = buf->b_signlist;
+ else
+ sign = prev->next;
+ insert_sign(buf, prev, sign, id, lnum, typenr);
+
+ return;
+***************
+*** 6008,6017 ****
+ if (sign->id == id)
+ {
+ *lastp = next;
+- #ifdef FEAT_NETBEANS_INTG
+ if (next != NULL)
+ next->prev = sign->prev;
+- #endif
+ lnum = sign->lnum;
+ vim_free(sign);
+ break;
+--- 5997,6004 ----
+***************
+*** 6067,6073 ****
+
+
+ # if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
+! /* see if a given type of sign exists on a specific line */
+ int
+ buf_findsigntype_id(
+ buf_T *buf, /* buffer whose sign we are searching for */
+--- 6054,6062 ----
+
+
+ # if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
+! /*
+! * See if a given type of sign exists on a specific line.
+! */
+ int
+ buf_findsigntype_id(
+ buf_T *buf, /* buffer whose sign we are searching for */
+***************
+*** 6085,6091 ****
+
+
+ # if defined(FEAT_SIGN_ICONS) || defined(PROTO)
+! /* return the number of icons on the given line */
+ int
+ buf_signcount(buf_T *buf, linenr_T lnum)
+ {
+--- 6074,6082 ----
+
+
+ # if defined(FEAT_SIGN_ICONS) || defined(PROTO)
+! /*
+! * Return the number of icons on the given line.
+! */
+ int
+ buf_signcount(buf_T *buf, linenr_T lnum)
+ {
+*** ../vim-8.1.0383/src/version.c 2018-09-13 18:05:45.291070558 +0200
+--- src/version.c 2018-09-13 18:32:47.474574781 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 384,
+ /**/
+
+--
+"Oh, no! NOT the Spanish Inquisition!"
+"NOBODY expects the Spanish Inquisition!!!"
+ -- Monty Python sketch --
+"Oh, no! NOT another option!"
+"EVERYBODY expects another option!!!"
+ -- Discussion in vim-dev mailing list --
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0385 b/data/vim/patches/8.1.0385
new file mode 100644
index 000000000..0fdfd6c57
--- /dev/null
+++ b/data/vim/patches/8.1.0385
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0385
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0385
+Problem: Coveralls badge doesn't update.
+Solution: Update the URL
+Files: README.md
+
+
+*** ../vim-8.1.0384/README.md 2018-08-09 21:33:34.800134541 +0200
+--- README.md 2018-09-13 19:02:49.346186094 +0200
+***************
+*** 2,8 ****
+
+ [![Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim)
+ [![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master)
+! [![Coverage Status](https://coveralls.io/repos/vim/vim/badge.svg?branch=master&service=github)](https://coveralls.io/github/vim/vim?branch=master)
+ [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim)
+ [![Coverity Scan](https://scan.coverity.com/projects/241/badge.svg)](https://scan.coverity.com/projects/vim)
+ [![Language Grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/vim/vim.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/vim/vim/context:cpp)
+--- 2,8 ----
+
+ [![Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim)
+ [![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master)
+! [![Coverage Status](https://coveralls.io/repos/github/vim/vim/badge.svg?branch=master)](https://coveralls.io/github/vim/vim?branch=master)
+ [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/o2qht2kjm02sgghk?svg=true)](https://ci.appveyor.com/project/chrisbra/vim)
+ [![Coverity Scan](https://scan.coverity.com/projects/241/badge.svg)](https://scan.coverity.com/projects/vim)
+ [![Language Grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/vim/vim.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/vim/vim/context:cpp)
+*** ../vim-8.1.0384/src/version.c 2018-09-13 18:33:02.366426166 +0200
+--- src/version.c 2018-09-13 19:03:22.997988798 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 385,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+42. Your virtual girlfriend finds a new net sweetheart with a larger bandwidth.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0386 b/data/vim/patches/8.1.0386
new file mode 100644
index 000000000..3f77f9cdd
--- /dev/null
+++ b/data/vim/patches/8.1.0386
@@ -0,0 +1,181 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0386
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0386
+Problem: Cannot test with non-default option value.
+Solution: Add test_option_not_set().
+Files: runtime/doc/eval.txt, src/option.c, src/proto/option.pro,
+ src/evalfunc.c
+
+
+*** ../vim-8.1.0385/runtime/doc/eval.txt 2018-09-10 21:04:09.860392752 +0200
+--- runtime/doc/eval.txt 2018-09-13 20:30:37.739701623 +0200
+***************
+*** 2466,2471 ****
+--- 2473,2479 ----
+ test_null_list() List null value for testing
+ test_null_partial() Funcref null value for testing
+ test_null_string() String null value for testing
++ test_option_not_set({name}) none reset flag indicating option was set
+ test_override({expr}, {val}) none test with Vim internal overrides
+ test_settime({expr}) none set current time for testing
+ timer_info([{id}]) List information about timers
+***************
+*** 8723,8728 ****
+--- 8738,8752 ----
+ test_null_string() *test_null_string()*
+ Return a String that is null. Only useful for testing.
+
++ test_option_not_set({name}) *test_option_not_set()*
++ Reset the flag that indicates option {name} was set. Thus it
++ looks like it still has the default value. Use like this: >
++ set ambiwidth=double
++ call test_option_not_set('ambiwidth')
++ < Now the 'ambiwidth' option behaves like it was never changed,
++ even though the value is "double".
++ Only to be used for testing!
++
+ test_override({name}, {val}) *test_override()*
+ Overrides certain parts of Vims internal processing to be able
+ to run tests. Only to be used for testing Vim!
+--- 11734,11737 ----
+ Find more information in the file src/testdir/README.txt.
+
+
+! vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0385/src/option.c 2018-09-10 21:15:34.637000672 +0200
+--- src/option.c 2018-09-13 20:25:54.982495459 +0200
+***************
+*** 12480,12492 ****
+ /*
+ * Reset the flag indicating option "name" was set.
+ */
+! void
+ reset_option_was_set(char_u *name)
+ {
+ int idx = findoption(name);
+
+ if (idx >= 0)
+ options[idx].flags &= ~P_WAS_SET;
+ }
+
+ /*
+--- 12480,12496 ----
+ /*
+ * Reset the flag indicating option "name" was set.
+ */
+! int
+ reset_option_was_set(char_u *name)
+ {
+ int idx = findoption(name);
+
+ if (idx >= 0)
++ {
+ options[idx].flags &= ~P_WAS_SET;
++ return OK;
++ }
++ return FAIL;
+ }
+
+ /*
+*** ../vim-8.1.0385/src/proto/option.pro 2018-09-13 17:26:31.091401618 +0200
+--- src/proto/option.pro 2018-09-13 20:25:58.654459076 +0200
+***************
+*** 55,61 ****
+ void vimrc_found(char_u *fname, char_u *envname);
+ void change_compatible(int on);
+ int option_was_set(char_u *name);
+! void reset_option_was_set(char_u *name);
+ int can_bs(int what);
+ void save_file_ff(buf_T *buf);
+ int file_ff_differs(buf_T *buf, int ignore_empty);
+--- 55,61 ----
+ void vimrc_found(char_u *fname, char_u *envname);
+ void change_compatible(int on);
+ int option_was_set(char_u *name);
+! int reset_option_was_set(char_u *name);
+ int can_bs(int what);
+ void save_file_ff(buf_T *buf);
+ int file_ff_differs(buf_T *buf, int ignore_empty);
+*** ../vim-8.1.0385/src/evalfunc.c 2018-09-13 15:33:39.601712271 +0200
+--- src/evalfunc.c 2018-09-13 20:26:35.782091366 +0200
+***************
+*** 415,420 ****
+--- 415,421 ----
+ static void f_test_alloc_fail(typval_T *argvars, typval_T *rettv);
+ static void f_test_autochdir(typval_T *argvars, typval_T *rettv);
+ static void f_test_feedinput(typval_T *argvars, typval_T *rettv);
++ static void f_test_option_not_set(typval_T *argvars, typval_T *rettv);
+ static void f_test_override(typval_T *argvars, typval_T *rettv);
+ static void f_test_garbagecollect_now(typval_T *argvars, typval_T *rettv);
+ static void f_test_ignore_error(typval_T *argvars, typval_T *rettv);
+***************
+*** 922,927 ****
+--- 923,929 ----
+ {"test_null_list", 0, 0, f_test_null_list},
+ {"test_null_partial", 0, 0, f_test_null_partial},
+ {"test_null_string", 0, 0, f_test_null_string},
++ {"test_option_not_set", 1, 1, f_test_option_not_set},
+ {"test_override", 2, 2, f_test_override},
+ {"test_settime", 1, 1, f_test_settime},
+ #ifdef FEAT_TIMERS
+***************
+*** 13062,13068 ****
+ }
+
+ /*
+! * "test_disable({name}, {val})" function
+ */
+ static void
+ f_test_override(typval_T *argvars, typval_T *rettv UNUSED)
+--- 13064,13088 ----
+ }
+
+ /*
+! * "test_option_not_set({name})" function
+! */
+! static void
+! f_test_option_not_set(typval_T *argvars, typval_T *rettv UNUSED)
+! {
+! char_u *name = (char_u *)"";
+!
+! if (argvars[0].v_type != VAR_STRING)
+! EMSG(_(e_invarg));
+! else
+! {
+! name = get_tv_string_chk(&argvars[0]);
+! if (reset_option_was_set(name) == FAIL)
+! EMSG2(_(e_invarg2), name);
+! }
+! }
+!
+! /*
+! * "test_override({name}, {val})" function
+ */
+ static void
+ f_test_override(typval_T *argvars, typval_T *rettv UNUSED)
+*** ../vim-8.1.0385/src/version.c 2018-09-13 19:04:45.437477554 +0200
+--- src/version.c 2018-09-13 20:29:01.432651600 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 386,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+43. You tell the kids they can't use the computer because "Daddy's got work to
+ do" and you don't even have a job.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0387 b/data/vim/patches/8.1.0387
new file mode 100644
index 000000000..d7c27be1f
--- /dev/null
+++ b/data/vim/patches/8.1.0387
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0387
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0387
+Problem: No test for 'ambiwidth' detection.
+Solution: Add a test.
+Files: src/testdir/test_startup_utf8.vim
+
+
+*** ../vim-8.1.0386/src/testdir/test_startup_utf8.vim 2016-08-09 22:02:09.000000000 +0200
+--- src/testdir/test_startup_utf8.vim 2018-09-13 20:43:32.424363080 +0200
+***************
+*** 4,9 ****
+--- 4,10 ----
+ endif
+
+ source shared.vim
++ source screendump.vim
+
+ func Test_read_stdin_utf8()
+ let linesin = ['テスト', '€ÀÈÌÒÙ']
+***************
+*** 62,64 ****
+--- 63,86 ----
+ call delete('Xtestout')
+ call delete('Xtestin')
+ endfunc
++
++ func Test_detect_ambiwidth()
++ if !CanRunVimInTerminal()
++ return
++ endif
++
++ " Use the title termcap entries to output the escape sequence.
++ call writefile([
++ \ 'set enc=utf-8',
++ \ 'set ambiwidth=double',
++ \ 'call test_option_not_set("ambiwidth")',
++ \ 'redraw',
++ \ ], 'Xscript')
++ let buf = RunVimInTerminal('-S Xscript', {})
++ call term_wait(buf)
++ call term_sendkeys(buf, "S\<C-R>=&ambiwidth\<CR>\<Esc>")
++ call WaitForAssert({-> assert_match('single', term_getline(buf, 1))})
++
++ call StopVimInTerminal(buf)
++ call delete('Xscript')
++ endfunc
+*** ../vim-8.1.0386/src/version.c 2018-09-13 20:31:47.103018229 +0200
+--- src/version.c 2018-09-13 20:44:22.175933419 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 387,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+45. You buy a Captain Kirk chair with a built-in keyboard and mouse.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0388 b/data/vim/patches/8.1.0388
new file mode 100644
index 000000000..e0a3aedb6
--- /dev/null
+++ b/data/vim/patches/8.1.0388
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0388
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0388
+Problem: Coverity complains about possible NULL pointer use.
+Solution: Use get_tv_string() instead of get_tv_string_chk().
+Files: src/evalfunc.c
+
+
+*** ../vim-8.1.0387/src/evalfunc.c 2018-09-13 20:31:47.103018229 +0200
+--- src/evalfunc.c 2018-09-13 21:27:59.619230226 +0200
+***************
+*** 13075,13081 ****
+ EMSG(_(e_invarg));
+ else
+ {
+! name = get_tv_string_chk(&argvars[0]);
+ if (reset_option_was_set(name) == FAIL)
+ EMSG2(_(e_invarg2), name);
+ }
+--- 13075,13081 ----
+ EMSG(_(e_invarg));
+ else
+ {
+! name = get_tv_string(&argvars[0]);
+ if (reset_option_was_set(name) == FAIL)
+ EMSG2(_(e_invarg2), name);
+ }
+*** ../vim-8.1.0387/src/version.c 2018-09-13 20:46:48.994641008 +0200
+--- src/version.c 2018-09-13 21:28:53.350713378 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 388,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+46. Your wife makes a new rule: "The computer cannot come to bed."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0389 b/data/vim/patches/8.1.0389
new file mode 100644
index 000000000..eb8b59b74
--- /dev/null
+++ b/data/vim/patches/8.1.0389
@@ -0,0 +1,91 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0389
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0389
+Problem: :behave command is not tested.
+Solution: Add a test. (Dominique Pelle, closes #3429)
+Files: src/Make_all.mak, src/testdir/test_alot.vim,
+ src/testdir/test_behave.vim
+
+
+*** ../vim-8.1.0388/src/Make_all.mak 2018-09-10 21:04:09.864392710 +0200
+--- src/Make_all.mak 2018-09-14 20:07:48.456062947 +0200
+***************
+*** 14,19 ****
+--- 14,20 ----
+ test_autoload \
+ test_backspace_opt \
+ test_backup \
++ test_behave \
+ test_blockedit \
+ test_breakindent \
+ test_bufline \
+*** ../vim-8.1.0388/src/testdir/test_alot.vim 2018-09-10 21:04:09.872392623 +0200
+--- src/testdir/test_alot.vim 2018-09-14 20:07:48.456062947 +0200
+***************
+*** 3,8 ****
+--- 3,9 ----
+
+ source test_assign.vim
+ source test_backup.vim
++ source test_behave.vim
+ source test_bufline.vim
+ source test_cd.vim
+ source test_changedtick.vim
+*** ../vim-8.1.0388/src/testdir/test_behave.vim 2018-09-14 20:10:11.270547147 +0200
+--- src/testdir/test_behave.vim 2018-09-14 20:07:48.456062947 +0200
+***************
+*** 0 ****
+--- 1,29 ----
++ " Test the :behave command
++
++ func Test_behave()
++ behave mswin
++ call assert_equal('mouse,key', &selectmode)
++ call assert_equal('popup', &mousemodel)
++ call assert_equal('startsel,stopsel', &keymodel)
++ call assert_equal('exclusive', &selection)
++
++ behave xterm
++ call assert_equal('', &selectmode)
++ call assert_equal('extend', &mousemodel)
++ call assert_equal('', &keymodel)
++ call assert_equal('inclusive', &selection)
++
++ set selection&
++ set mousemodel&
++ set keymodel&
++ set selection&
++ endfunc
++
++ func Test_behave_completion()
++ call feedkeys(":behave \<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"behave mswin xterm', @:)
++ endfunc
++
++ func Test_behave_error()
++ call assert_fails('behave x', 'E475:')
++ endfunc
+*** ../vim-8.1.0388/src/version.c 2018-09-13 21:30:01.622056753 +0200
+--- src/version.c 2018-09-14 20:08:53.075367719 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 389,
+ /**/
+
+--
+Never go to the toilet in a paperless office.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0390 b/data/vim/patches/8.1.0390
new file mode 100644
index 000000000..a6b5e47c0
--- /dev/null
+++ b/data/vim/patches/8.1.0390
@@ -0,0 +1,189 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0390
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0390
+Problem: Scrollbars are not tested.
+Solution: Add test_scrollbar() and a test.
+Files: runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test_gui.vim
+
+
+*** ../vim-8.1.0389/runtime/doc/eval.txt 2018-09-13 20:31:47.099018267 +0200
+--- runtime/doc/eval.txt 2018-09-14 21:26:26.864033563 +0200
+***************
+*** 2468,2473 ****
+--- 2475,2482 ----
+ test_null_string() String null value for testing
+ test_option_not_set({name}) none reset flag indicating option was set
+ test_override({expr}, {val}) none test with Vim internal overrides
++ test_scrollbar({which}, {value}, {dragging})
++ none scroll in the GUI for testing
+ test_settime({expr}) none set current time for testing
+ timer_info([{id}]) List information about timers
+ timer_pause({id}, {pause}) none pause or unpause a timer
+***************
+*** 8759,8764 ****
+--- 8775,8797 ----
+ < The value of "starting" is saved. It is restored by: >
+ call test_override('starting', 0)
+
++ test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()*
++ Pretend using scrollbar {which} to move it to position
++ {value}. {which} can be:
++ left Left scrollbar of the current window
++ right Right scrollbar of the current window
++ hor Horizontal scrollbar
++
++ For the vertical scrollbars {value} can be 1 to the
++ line-count of the buffer. For the horizontal scrollbar the
++ {value} can be between 1 and the maximum line length, assuming
++ 'wrap' is not set.
++
++ When {dragging} is non-zero it's like dragging the scrollbar,
++ otherwise it's like clicking in the scrollbar.
++ Only works when the {which} scrollbar actually exists,
++ obviously only when using the GUI.
++
+ test_settime({expr}) *test_settime()*
+ Set the time Vim uses internally. Currently only used for
+ timestamps in the history, as they are used in viminfo, and
+*** ../vim-8.1.0389/src/evalfunc.c 2018-09-13 21:30:01.622056753 +0200
+--- src/evalfunc.c 2018-09-14 21:01:40.062704672 +0200
+***************
+*** 429,434 ****
+--- 429,437 ----
+ static void f_test_null_list(typval_T *argvars, typval_T *rettv);
+ static void f_test_null_partial(typval_T *argvars, typval_T *rettv);
+ static void f_test_null_string(typval_T *argvars, typval_T *rettv);
++ #ifdef FEAT_GUI
++ static void f_test_scrollbar(typval_T *argvars, typval_T *rettv);
++ #endif
+ static void f_test_settime(typval_T *argvars, typval_T *rettv);
+ #ifdef FEAT_FLOAT
+ static void f_tan(typval_T *argvars, typval_T *rettv);
+***************
+*** 925,930 ****
+--- 928,936 ----
+ {"test_null_string", 0, 0, f_test_null_string},
+ {"test_option_not_set", 1, 1, f_test_option_not_set},
+ {"test_override", 2, 2, f_test_override},
++ #ifdef FEAT_GUI
++ {"test_scrollbar", 3, 3, f_test_scrollbar},
++ #endif
+ {"test_settime", 1, 1, f_test_settime},
+ #ifdef FEAT_TIMERS
+ {"timer_info", 0, 1, f_timer_info},
+***************
+*** 13202,13207 ****
+--- 13208,13248 ----
+ rettv->vval.v_string = NULL;
+ }
+
++ #ifdef FEAT_GUI
++ static void
++ f_test_scrollbar(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ char_u *which;
++ long value;
++ int dragging;
++ scrollbar_T *sb = NULL;
++
++ if (argvars[0].v_type != VAR_STRING
++ || (argvars[1].v_type) != VAR_NUMBER
++ || (argvars[2].v_type) != VAR_NUMBER)
++ {
++ EMSG(_(e_invarg));
++ return;
++ }
++ which = get_tv_string(&argvars[0]);
++ value = get_tv_number(&argvars[1]);
++ dragging = get_tv_number(&argvars[2]);
++
++ if (STRCMP(which, "left") == 0)
++ sb = &curwin->w_scrollbars[SBAR_LEFT];
++ else if (STRCMP(which, "right") == 0)
++ sb = &curwin->w_scrollbars[SBAR_RIGHT];
++ else if (STRCMP(which, "hor") == 0)
++ sb = &gui.bottom_sbar;
++ if (sb == NULL)
++ {
++ EMSG2(_(e_invarg2), which);
++ return;
++ }
++ gui_drag_scrollbar(sb, value, dragging);
++ }
++ #endif
++
+ static void
+ f_test_settime(typval_T *argvars, typval_T *rettv UNUSED)
+ {
+*** ../vim-8.1.0389/src/testdir/test_gui.vim 2018-05-14 21:29:28.000000000 +0200
+--- src/testdir/test_gui.vim 2018-09-14 21:24:26.053001659 +0200
+***************
+*** 667,672 ****
+--- 667,707 ----
+ let &guioptions = guioptions_saved
+ endfunc
+
++ func Test_scrollbars()
++ new
++ " buffer with 200 lines
++ call setline(1, repeat(['one', 'two'], 100))
++ set guioptions+=rlb
++
++ " scroll to move line 11 at top, moves the cursor there
++ call test_scrollbar('left', 10, 0)
++ redraw
++ call assert_equal(1, winline())
++ call assert_equal(11, line('.'))
++
++ " scroll to move line 1 at top, cursor stays in line 11
++ call test_scrollbar('right', 0, 0)
++ redraw
++ call assert_equal(11, winline())
++ call assert_equal(11, line('.'))
++
++ set nowrap
++ call setline(11, repeat('x', 150))
++ redraw
++ call assert_equal(1, wincol())
++ call assert_equal(1, col('.'))
++
++ " scroll to character 11, cursor is moved
++ call test_scrollbar('hor', 10, 0)
++ redraw
++ call assert_equal(1, wincol())
++ call assert_equal(11, col('.'))
++
++ set guioptions&
++ set wrap&
++ bwipe!
++ endfunc
++
+ func Test_set_guipty()
+ let guipty_saved = &guipty
+
+*** ../vim-8.1.0389/src/version.c 2018-09-14 20:10:15.878499433 +0200
+--- src/version.c 2018-09-14 21:25:18.748582439 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 390,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+52. You ask a plumber how much it would cost to replace the chair in front of
+ your computer with a toilet.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0391 b/data/vim/patches/8.1.0391
new file mode 100644
index 000000000..28f290c48
--- /dev/null
+++ b/data/vim/patches/8.1.0391
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0391
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0391
+Problem: Building in a shadow directory fails.
+Solution: Don't link the xdiff directory but what's in it. (closes #3428)
+Files: src/Makefile
+
+
+*** ../vim-8.1.0390/src/Makefile 2018-09-13 18:01:27.637877198 +0200
+--- src/Makefile 2018-09-15 15:05:00.842489223 +0200
+***************
+*** 2765,2771 ****
+
+ shadow: runtime pixmaps
+ $(MKDIR_P) $(SHADOWDIR)
+! cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../xdiff ../libvterm ../vimtutor ../gvimtutor ../install-sh ../Make_all.mak .
+ mkdir $(SHADOWDIR)/auto
+ cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
+ $(MKDIR_P) $(SHADOWDIR)/po
+--- 2765,2771 ----
+
+ shadow: runtime pixmaps
+ $(MKDIR_P) $(SHADOWDIR)
+! cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../libvterm ../vimtutor ../gvimtutor ../install-sh ../Make_all.mak .
+ mkdir $(SHADOWDIR)/auto
+ cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
+ $(MKDIR_P) $(SHADOWDIR)/po
+***************
+*** 2777,2782 ****
+--- 2777,2784 ----
+ cp config.mk.dist $(SHADOWDIR)
+ $(MKDIR_P) $(SHADOWDIR)/xxd
+ cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* .
++ $(MKDIR_P) $(SHADOWDIR)/xdiff
++ cd $(SHADOWDIR)/xdiff; ln -s ../../xdiff/*.[ch] .
+ if test -d $(RSRC_DIR); then \
+ cd $(SHADOWDIR); \
+ ln -s ../infplist.xml .; \
+*** ../vim-8.1.0390/src/version.c 2018-09-14 21:27:02.775741320 +0200
+--- src/version.c 2018-09-15 15:07:04.769597806 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 391,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+57. You begin to wonder how on earth your service provider is allowed to call
+ 200 hours per month "unlimited."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0392 b/data/vim/patches/8.1.0392
new file mode 100644
index 000000000..0795a546c
--- /dev/null
+++ b/data/vim/patches/8.1.0392
@@ -0,0 +1,282 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0392
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0392
+Problem: Error while typing :/foo/s// with 'incsearch' enabled.
+Solution: Do not give search errors when highlighting matches.
+Files: src/ex_docmd.c, src/proto/ex_docmd.pro, src/ex_getln.c,
+ src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0391/src/ex_docmd.c 2018-09-10 21:04:09.868392665 +0200
+--- src/ex_docmd.c 2018-09-15 15:36:02.434389657 +0200
+***************
+*** 117,123 ****
+ #endif
+
+ static int check_more(int, int);
+! static linenr_T get_address(exarg_T *, char_u **, int addr_type, int skip, int to_other_file, int address_count);
+ static void get_flags(exarg_T *eap);
+ #if !defined(FEAT_PERL) \
+ || !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
+--- 117,123 ----
+ #endif
+
+ static int check_more(int, int);
+! static linenr_T get_address(exarg_T *, char_u **, int addr_type, int skip, int silent, int to_other_file, int address_count);
+ static void get_flags(exarg_T *eap);
+ #if !defined(FEAT_PERL) \
+ || !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
+***************
+*** 1853,1859 ****
+ }
+
+ ea.cmd = cmd;
+! if (parse_cmd_address(&ea, &errormsg) == FAIL)
+ goto doend;
+
+ /*
+--- 1853,1859 ----
+ }
+
+ ea.cmd = cmd;
+! if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
+ goto doend;
+
+ /*
+***************
+*** 2836,2842 ****
+ case 't': if (checkforcmd(&p, "tab", 3))
+ {
+ long tabnr = get_address(eap, &eap->cmd, ADDR_TABS,
+! eap->skip, FALSE, 1);
+ if (tabnr == MAXLNUM)
+ cmdmod.tab = tabpage_index(curtab) + 1;
+ else
+--- 2836,2842 ----
+ case 't': if (checkforcmd(&p, "tab", 3))
+ {
+ long tabnr = get_address(eap, &eap->cmd, ADDR_TABS,
+! eap->skip, skip_only, FALSE, 1);
+ if (tabnr == MAXLNUM)
+ cmdmod.tab = tabpage_index(curtab) + 1;
+ else
+***************
+*** 2911,2921 ****
+
+ /*
+ * Parse the address range, if any, in "eap".
+! * May set the last search pattern.
+ * Return FAIL and set "errormsg" or return OK.
+ */
+ int
+! parse_cmd_address(exarg_T *eap, char_u **errormsg)
+ {
+ int address_count = 1;
+ linenr_T lnum;
+--- 2911,2921 ----
+
+ /*
+ * Parse the address range, if any, in "eap".
+! * May set the last search pattern, unless "silent" is TRUE.
+ * Return FAIL and set "errormsg" or return OK.
+ */
+ int
+! parse_cmd_address(exarg_T *eap, char_u **errormsg, int silent)
+ {
+ int address_count = 1;
+ linenr_T lnum;
+***************
+*** 2955,2961 ****
+ #endif
+ }
+ eap->cmd = skipwhite(eap->cmd);
+! lnum = get_address(eap, &eap->cmd, eap->addr_type, eap->skip,
+ eap->addr_count == 0, address_count++);
+ if (eap->cmd == NULL) // error detected
+ return FAIL;
+--- 2955,2961 ----
+ #endif
+ }
+ eap->cmd = skipwhite(eap->cmd);
+! lnum = get_address(eap, &eap->cmd, eap->addr_type, eap->skip, silent,
+ eap->addr_count == 0, address_count++);
+ if (eap->cmd == NULL) // error detected
+ return FAIL;
+***************
+*** 4450,4459 ****
+ get_address(
+ exarg_T *eap UNUSED,
+ char_u **ptr,
+! int addr_type, /* flag: one of ADDR_LINES, ... */
+! int skip, /* only skip the address, don't use it */
+! int to_other_file, /* flag: may jump to other file */
+! int address_count UNUSED) /* 1 for first address, >1 after comma */
+ {
+ int c;
+ int i;
+--- 4450,4460 ----
+ get_address(
+ exarg_T *eap UNUSED,
+ char_u **ptr,
+! int addr_type, // flag: one of ADDR_LINES, ...
+! int skip, // only skip the address, don't use it
+! int silent, // no errors or side effects
+! int to_other_file, // flag: may jump to other file
+! int address_count UNUSED) // 1 for first address, >1 after comma
+ {
+ int c;
+ int i;
+***************
+*** 4599,4626 ****
+ }
+ else
+ {
+! pos = curwin->w_cursor; /* save curwin->w_cursor */
+! /*
+! * When '/' or '?' follows another address, start
+! * from there.
+! */
+ if (lnum != MAXLNUM)
+ curwin->w_cursor.lnum = lnum;
+! /*
+! * Start a forward search at the end of the line (unless
+! * before the first line).
+! * Start a backward search at the start of the line.
+! * This makes sure we never match in the current
+! * line, and can match anywhere in the
+! * next/previous line.
+! */
+ if (c == '/' && curwin->w_cursor.lnum > 0)
+ curwin->w_cursor.col = MAXCOL;
+ else
+ curwin->w_cursor.col = 0;
+ searchcmdlen = 0;
+! if (!do_search(NULL, c, cmd, 1L,
+! SEARCH_HIS | SEARCH_MSG, NULL, NULL))
+ {
+ curwin->w_cursor = pos;
+ cmd = NULL;
+--- 4600,4627 ----
+ }
+ else
+ {
+! int flags;
+!
+! pos = curwin->w_cursor; // save curwin->w_cursor
+!
+! // When '/' or '?' follows another address, start from
+! // there.
+ if (lnum != MAXLNUM)
+ curwin->w_cursor.lnum = lnum;
+!
+! // Start a forward search at the end of the line (unless
+! // before the first line).
+! // Start a backward search at the start of the line.
+! // This makes sure we never match in the current
+! // line, and can match anywhere in the
+! // next/previous line.
+ if (c == '/' && curwin->w_cursor.lnum > 0)
+ curwin->w_cursor.col = MAXCOL;
+ else
+ curwin->w_cursor.col = 0;
+ searchcmdlen = 0;
+! flags = silent ? 0 : SEARCH_HIS | SEARCH_MSG;
+! if (!do_search(NULL, c, cmd, 1L, flags, NULL, NULL))
+ {
+ curwin->w_cursor = pos;
+ cmd = NULL;
+***************
+*** 9529,9535 ****
+ {
+ long n;
+
+! n = get_address(eap, &eap->arg, eap->addr_type, FALSE, FALSE, 1);
+ if (eap->arg == NULL) /* error detected */
+ {
+ eap->nextcmd = NULL;
+--- 9530,9536 ----
+ {
+ long n;
+
+! n = get_address(eap, &eap->arg, eap->addr_type, FALSE, FALSE, FALSE, 1);
+ if (eap->arg == NULL) /* error detected */
+ {
+ eap->nextcmd = NULL;
+*** ../vim-8.1.0391/src/proto/ex_docmd.pro 2018-08-15 20:59:44.227025009 +0200
+--- src/proto/ex_docmd.pro 2018-09-15 15:34:59.291237418 +0200
+***************
+*** 5,11 ****
+ int getline_equal(char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int));
+ void *getline_cookie(char_u *(*fgetline)(int, void *, int), void *cookie);
+ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, int skip_only);
+! int parse_cmd_address(exarg_T *eap, char_u **errormsg);
+ int checkforcmd(char_u **pp, char *cmd, int len);
+ int modifier_len(char_u *cmd);
+ int cmd_exists(char_u *name);
+--- 5,11 ----
+ int getline_equal(char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int));
+ void *getline_cookie(char_u *(*fgetline)(int, void *, int), void *cookie);
+ int parse_command_modifiers(exarg_T *eap, char_u **errormsg, int skip_only);
+! int parse_cmd_address(exarg_T *eap, char_u **errormsg, int silent);
+ int checkforcmd(char_u **pp, char *cmd, int len);
+ int modifier_len(char_u *cmd);
+ int cmd_exists(char_u *name);
+*** ../vim-8.1.0391/src/ex_getln.c 2018-09-10 21:04:09.868392665 +0200
+--- src/ex_getln.c 2018-09-15 15:41:01.610658110 +0200
+***************
+*** 388,394 ****
+ // parse the address range
+ save_cursor = curwin->w_cursor;
+ curwin->w_cursor = is_state->search_start;
+! parse_cmd_address(&ea, &dummy);
+ if (ea.addr_count > 0)
+ {
+ // Allow for reverse match.
+--- 388,394 ----
+ // parse the address range
+ save_cursor = curwin->w_cursor;
+ curwin->w_cursor = is_state->search_start;
+! parse_cmd_address(&ea, &dummy, TRUE);
+ if (ea.addr_count > 0)
+ {
+ // Allow for reverse match.
+*** ../vim-8.1.0391/src/testdir/test_search.vim 2018-09-09 15:54:11.232857907 +0200
+--- src/testdir/test_search.vim 2018-09-15 15:40:22.183128106 +0200
+***************
+*** 1055,1060 ****
+--- 1055,1064 ----
+ call feedkeys(":/foo/s//\<Esc>", 'ntx')
+ call assert_equal('bar', @/)
+
++ " no error message if pattern not found
++ call feedkeys(":/xyz/s//\<Esc>", 'ntx')
++ call assert_equal('bar', @/)
++
+ bwipe!
+ call test_override("ALL", 0)
+ set noincsearch
+*** ../vim-8.1.0391/src/version.c 2018-09-15 15:08:48.348852704 +0200
+--- src/version.c 2018-09-15 15:40:58.334696955 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 392,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+58. You turn on your computer and turn off your wife.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0393 b/data/vim/patches/8.1.0393
new file mode 100644
index 000000000..2bf27d593
--- /dev/null
+++ b/data/vim/patches/8.1.0393
@@ -0,0 +1,567 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0393
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0393
+Solution: Add "iblank", "iwhiteall" and "iwhiteeol" to 'diffopt'.
+Files: src/diff.c, src/testdir/test_diffmode.vim,
+ src/testdir/dumps/Test_diff_17.dump,
+ src/testdir/dumps/Test_diff_18.dump,
+ src/testdir/dumps/Test_diff_19.dump,
+ src/testdir/dumps/Test_diff_20.dump
+
+
+*** ../vim-8.1.0392/src/diff.c 2018-09-13 15:33:39.601712271 +0200
+--- src/diff.c 2018-09-15 18:52:00.815797976 +0200
+***************
+*** 24,36 ****
+ static int diff_busy = FALSE; /* ex_diffgetput() is busy */
+
+ /* flags obtained from the 'diffopt' option */
+! #define DIFF_FILLER 1 // display filler lines
+! #define DIFF_ICASE 2 // ignore case
+! #define DIFF_IWHITE 4 // ignore change in white space
+! #define DIFF_HORIZONTAL 8 // horizontal splits
+! #define DIFF_VERTICAL 16 // vertical splits
+! #define DIFF_HIDDEN_OFF 32 // diffoff when hidden
+! #define DIFF_INTERNAL 64 // use internal xdiff algorithm
+ static int diff_flags = DIFF_INTERNAL | DIFF_FILLER;
+
+ static long diff_algorithm = 0;
+--- 24,40 ----
+ static int diff_busy = FALSE; /* ex_diffgetput() is busy */
+
+ /* flags obtained from the 'diffopt' option */
+! #define DIFF_FILLER 0x001 // display filler lines
+! #define DIFF_IBLANK 0x002 // ignore empty lines
+! #define DIFF_ICASE 0x004 // ignore case
+! #define DIFF_IWHITE 0x008 // ignore change in white space
+! #define DIFF_IWHITEALL 0x010 // ignore all white space changes
+! #define DIFF_IWHITEEOL 0x020 // ignore change in white space at EOL
+! #define DIFF_HORIZONTAL 0x040 // horizontal splits
+! #define DIFF_VERTICAL 0x080 // vertical splits
+! #define DIFF_HIDDEN_OFF 0x100 // diffoff when hidden
+! #define DIFF_INTERNAL 0x200 // use internal xdiff algorithm
+! #define ALL_WHITE_DIFF (DIFF_IWHITE | DIFF_IWHITEALL | DIFF_IWHITEEOL)
+ static int diff_flags = DIFF_INTERNAL | DIFF_FILLER;
+
+ static long diff_algorithm = 0;
+***************
+*** 1050,1055 ****
+--- 1054,1065 ----
+
+ if (diff_flags & DIFF_IWHITE)
+ param.flags |= XDF_IGNORE_WHITESPACE_CHANGE;
++ if (diff_flags & DIFF_IWHITEALL)
++ param.flags |= XDF_IGNORE_WHITESPACE;
++ if (diff_flags & DIFF_IWHITEEOL)
++ param.flags |= XDF_IGNORE_WHITESPACE_AT_EOL;
++ if (diff_flags & DIFF_IBLANK)
++ param.flags |= XDF_IGNORE_BLANK_LINES;
+
+ emit_cfg.ctxlen = 0; // don't need any diff_context here
+ emit_cb.priv = &diffio->dio_diff;
+***************
+*** 1106,1112 ****
+ // Build the diff command and execute it. Always use -a, binary
+ // differences are of no use. Ignore errors, diff returns
+ // non-zero when differences have been found.
+! vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s %s",
+ diff_a_works == FALSE ? "" : "-a ",
+ #if defined(MSWIN)
+ diff_bin_works == TRUE ? "--binary " : "",
+--- 1116,1122 ----
+ // Build the diff command and execute it. Always use -a, binary
+ // differences are of no use. Ignore errors, diff returns
+ // non-zero when differences have been found.
+! vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s%s%s%s %s",
+ diff_a_works == FALSE ? "" : "-a ",
+ #if defined(MSWIN)
+ diff_bin_works == TRUE ? "--binary " : "",
+***************
+*** 1114,1119 ****
+--- 1124,1132 ----
+ "",
+ #endif
+ (diff_flags & DIFF_IWHITE) ? "-b " : "",
++ (diff_flags & DIFF_IWHITEALL) ? "-w " : "",
++ (diff_flags & DIFF_IWHITEEOL) ? "-Z " : "",
++ (diff_flags & DIFF_IBLANK) ? "-B " : "",
+ (diff_flags & DIFF_ICASE) ? "-i " : "",
+ tmp_orig, tmp_new);
+ append_redir(cmd, (int)len, p_srr, tmp_diff);
+***************
+*** 1946,1962 ****
+ char_u *p1, *p2;
+ int l;
+
+! if ((diff_flags & (DIFF_ICASE | DIFF_IWHITE)) == 0)
+ return STRCMP(s1, s2);
+! if ((diff_flags & DIFF_ICASE) && !(diff_flags & DIFF_IWHITE))
+ return MB_STRICMP(s1, s2);
+
+- /* Ignore white space changes and possibly ignore case. */
+ p1 = s1;
+ p2 = s2;
+ while (*p1 != NUL && *p2 != NUL)
+ {
+! if (VIM_ISWHITE(*p1) && VIM_ISWHITE(*p2))
+ {
+ p1 = skipwhite(p1);
+ p2 = skipwhite(p2);
+--- 1959,1983 ----
+ char_u *p1, *p2;
+ int l;
+
+! if ((diff_flags & DIFF_IBLANK)
+! && (*skipwhite(s1) == NUL || *skipwhite(s2) == NUL))
+! return 0;
+!
+! if ((diff_flags & (DIFF_ICASE | ALL_WHITE_DIFF)) == 0)
+ return STRCMP(s1, s2);
+! if ((diff_flags & DIFF_ICASE) && !(diff_flags & ALL_WHITE_DIFF))
+ return MB_STRICMP(s1, s2);
+
+ p1 = s1;
+ p2 = s2;
++
++ // Ignore white space changes and possibly ignore case.
+ while (*p1 != NUL && *p2 != NUL)
+ {
+! if (((diff_flags & DIFF_IWHITE)
+! && VIM_ISWHITE(*p1) && VIM_ISWHITE(*p2))
+! || ((diff_flags & DIFF_IWHITEALL)
+! && (VIM_ISWHITE(*p1) || VIM_ISWHITE(*p2))))
+ {
+ p1 = skipwhite(p1);
+ p2 = skipwhite(p2);
+***************
+*** 1970,1976 ****
+ }
+ }
+
+! /* Ignore trailing white space. */
+ p1 = skipwhite(p1);
+ p2 = skipwhite(p2);
+ if (*p1 != NUL || *p2 != NUL)
+--- 1991,1997 ----
+ }
+ }
+
+! // Ignore trailing white space.
+ p1 = skipwhite(p1);
+ p2 = skipwhite(p2);
+ if (*p1 != NUL || *p2 != NUL)
+***************
+*** 2142,2152 ****
+--- 2163,2188 ----
+ p += 8;
+ diff_context_new = getdigits(&p);
+ }
++ else if (STRNCMP(p, "iblank", 6) == 0)
++ {
++ p += 6;
++ diff_flags_new |= DIFF_IBLANK;
++ }
+ else if (STRNCMP(p, "icase", 5) == 0)
+ {
+ p += 5;
+ diff_flags_new |= DIFF_ICASE;
+ }
++ else if (STRNCMP(p, "iwhiteall", 9) == 0)
++ {
++ p += 9;
++ diff_flags_new |= DIFF_IWHITEALL;
++ }
++ else if (STRNCMP(p, "iwhiteeol", 9) == 0)
++ {
++ p += 9;
++ diff_flags_new |= DIFF_IWHITEEOL;
++ }
+ else if (STRNCMP(p, "iwhite", 6) == 0)
+ {
+ p += 6;
+***************
+*** 2315,2323 ****
+ si_org = si_new = 0;
+ while (line_org[si_org] != NUL)
+ {
+! if ((diff_flags & DIFF_IWHITE)
+! && VIM_ISWHITE(line_org[si_org])
+! && VIM_ISWHITE(line_new[si_new]))
+ {
+ si_org = (int)(skipwhite(line_org + si_org) - line_org);
+ si_new = (int)(skipwhite(line_new + si_new) - line_new);
+--- 2351,2362 ----
+ si_org = si_new = 0;
+ while (line_org[si_org] != NUL)
+ {
+! if (((diff_flags & DIFF_IWHITE)
+! && VIM_ISWHITE(line_org[si_org])
+! && VIM_ISWHITE(line_new[si_new]))
+! || ((diff_flags & DIFF_IWHITEALL)
+! && (VIM_ISWHITE(line_org[si_org])
+! || VIM_ISWHITE(line_new[si_new]))))
+ {
+ si_org = (int)(skipwhite(line_org + si_org) - line_org);
+ si_new = (int)(skipwhite(line_new + si_new) - line_new);
+***************
+*** 2351,2359 ****
+ while (ei_org >= *startp && ei_new >= si_new
+ && ei_org >= 0 && ei_new >= 0)
+ {
+! if ((diff_flags & DIFF_IWHITE)
+! && VIM_ISWHITE(line_org[ei_org])
+! && VIM_ISWHITE(line_new[ei_new]))
+ {
+ while (ei_org >= *startp
+ && VIM_ISWHITE(line_org[ei_org]))
+--- 2390,2401 ----
+ while (ei_org >= *startp && ei_new >= si_new
+ && ei_org >= 0 && ei_new >= 0)
+ {
+! if (((diff_flags & DIFF_IWHITE)
+! && VIM_ISWHITE(line_org[ei_org])
+! && VIM_ISWHITE(line_new[ei_new]))
+! || ((diff_flags & DIFF_IWHITEALL)
+! && (VIM_ISWHITE(line_org[ei_org])
+! || VIM_ISWHITE(line_new[ei_new]))))
+ {
+ while (ei_org >= *startp
+ && VIM_ISWHITE(line_org[ei_org]))
+*** ../vim-8.1.0392/src/testdir/test_diffmode.vim 2018-09-13 13:03:08.228724142 +0200
+--- src/testdir/test_diffmode.vim 2018-09-15 19:02:43.814040268 +0200
+***************
+*** 671,686 ****
+ bwipe!
+ endfunc
+
+! func WriteDiffFiles(list1, list2)
+ call writefile(a:list1, 'Xfile1')
+ call writefile(a:list2, 'Xfile2')
+ endfunc
+
+! " Verify a screendump with both the external and external diff.
+ func VerifyBoth(buf, dumpfile, extra)
+- call term_sendkeys(a:buf, ":diffupdate!\<cr>")
+ " trailing : for leaving the cursor on the command line
+! for cmd in [":set diffopt=filler" . a:extra . "\<cr>:", ":set diffopt+=internal\<cr>:"]
+ call term_sendkeys(a:buf, cmd)
+ if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
+ break " don't let the next iteration overwrite the "failed" file.
+--- 671,688 ----
+ bwipe!
+ endfunc
+
+! func WriteDiffFiles(buf, list1, list2)
+ call writefile(a:list1, 'Xfile1')
+ call writefile(a:list2, 'Xfile2')
++ if a:buf
++ call term_sendkeys(a:buf, ":checktime\<CR>")
++ endif
+ endfunc
+
+! " Verify a screendump with both the internal and external diff.
+ func VerifyBoth(buf, dumpfile, extra)
+ " trailing : for leaving the cursor on the command line
+! for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"]
+ call term_sendkeys(a:buf, cmd)
+ if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external')
+ break " don't let the next iteration overwrite the "failed" file.
+***************
+*** 688,693 ****
+--- 690,703 ----
+ endfor
+ endfunc
+
++ " Verify a screendump with the internal diff only.
++ func VerifyInternal(buf, dumpfile, extra)
++ call term_sendkeys(a:buf, ":diffupdate!\<CR>")
++ " trailing : for leaving the cursor on the command line
++ call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:")
++ call VerifyScreenDump(a:buf, a:dumpfile, {})
++ endfunc
++
+ func Test_diff_screen()
+ if !CanRunVimInTerminal() || !has('menu')
+ return
+***************
+*** 697,732 ****
+ call delete('.Xfile2.swp')
+
+ " Test 1: Add a line in beginning of file 2
+! call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+ let buf = RunVimInTerminal('-d Xfile1 Xfile2', {})
+ " Set autoread mode, ,so that Vim won't complain once we re-write the test
+ " files
+! call term_sendkeys(buf, ":set autoread\<cr>\<c-w>w:set autoread\<cr>\<c-w>w")
+
+ call VerifyBoth(buf, 'Test_diff_01', '')
+
+ " Test 2: Add a line in beginning of file 1
+! call WriteDiffFiles([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+ call VerifyBoth(buf, 'Test_diff_02', '')
+
+ " Test 3: Add a line at the end of file 2
+! call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
+ call VerifyBoth(buf, 'Test_diff_03', '')
+
+ " Test 4: Add a line at the end of file 1
+! call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+ call VerifyBoth(buf, 'Test_diff_04', '')
+
+ " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
+! call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10])
+ call VerifyBoth(buf, 'Test_diff_05', '')
+
+ " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
+! call WriteDiffFiles([1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
+ call VerifyBoth(buf, 'Test_diff_06', '')
+
+ " Test 7 - 9: Test normal/patience/histogram diff algorithm
+! call WriteDiffFiles(['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
+ \ ' int i;', ' for(i = 0; i < 10; i++)', ' {', ' printf("Your answer is: ");',
+ \ ' printf("%d\n", foo);', ' }', '}', '', 'int fact(int n)', '{', ' if(n > 1)', ' {',
+ \ ' return fact(n-1) * n;', ' }', ' return 1;', '}', '', 'int main(int argc, char **argv)',
+--- 707,742 ----
+ call delete('.Xfile2.swp')
+
+ " Test 1: Add a line in beginning of file 2
+! call WriteDiffFiles(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+ let buf = RunVimInTerminal('-d Xfile1 Xfile2', {})
+ " Set autoread mode, ,so that Vim won't complain once we re-write the test
+ " files
+! call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w")
+
+ call VerifyBoth(buf, 'Test_diff_01', '')
+
+ " Test 2: Add a line in beginning of file 1
+! call WriteDiffFiles(buf, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+ call VerifyBoth(buf, 'Test_diff_02', '')
+
+ " Test 3: Add a line at the end of file 2
+! call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
+ call VerifyBoth(buf, 'Test_diff_03', '')
+
+ " Test 4: Add a line at the end of file 1
+! call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+ call VerifyBoth(buf, 'Test_diff_04', '')
+
+ " Test 5: Add a line in the middle of file 2, remove on at the end of file 1
+! call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10])
+ call VerifyBoth(buf, 'Test_diff_05', '')
+
+ " Test 6: Add a line in the middle of file 1, remove on at the end of file 2
+! call WriteDiffFiles(buf, [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
+ call VerifyBoth(buf, 'Test_diff_06', '')
+
+ " Test 7 - 9: Test normal/patience/histogram diff algorithm
+! call WriteDiffFiles(buf, ['#include <stdio.h>', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{',
+ \ ' int i;', ' for(i = 0; i < 10; i++)', ' {', ' printf("Your answer is: ");',
+ \ ' printf("%d\n", foo);', ' }', '}', '', 'int fact(int n)', '{', ' if(n > 1)', ' {',
+ \ ' return fact(n-1) * n;', ' }', ' return 1;', '}', '', 'int main(int argc, char **argv)',
+***************
+*** 748,754 ****
+
+ " Test 10-11: normal/indent-heuristic
+ call term_sendkeys(buf, ":set diffopt&vim\<cr>")
+! call WriteDiffFiles(['', ' def finalize(values)', '', ' values.each do |v|', ' v.finalize', ' end'],
+ \ ['', ' def finalize(values)', '', ' values.each do |v|', ' v.prepare', ' end', '',
+ \ ' values.each do |v|', ' v.finalize', ' end'])
+ call term_sendkeys(buf, ":diffupdate!\<cr>")
+--- 758,764 ----
+
+ " Test 10-11: normal/indent-heuristic
+ call term_sendkeys(buf, ":set diffopt&vim\<cr>")
+! call WriteDiffFiles(buf, ['', ' def finalize(values)', '', ' values.each do |v|', ' v.finalize', ' end'],
+ \ ['', ' def finalize(values)', '', ' values.each do |v|', ' v.prepare', ' end', '',
+ \ ' values.each do |v|', ' v.finalize', ' end'])
+ call term_sendkeys(buf, ":diffupdate!\<cr>")
+***************
+*** 759,777 ****
+ call VerifyScreenDump(buf, 'Test_diff_11', {})
+
+ " Test 12: diff the same file
+! call WriteDiffFiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+ call VerifyBoth(buf, 'Test_diff_12', '')
+
+ " Test 13: diff an empty file
+! call WriteDiffFiles([], [])
+ call VerifyBoth(buf, 'Test_diff_13', '')
+
+ " Test 14: test diffopt+=icase
+! call WriteDiffFiles(['a', 'b', 'cd'], ['A', 'b', 'cDe'])
+ call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
+
+ " Test 15-16: test diffopt+=iwhite
+! call WriteDiffFiles(['int main()', '{', ' printf("Hello, World!");', ' return 0;', '}'],
+ \ ['int main()', '{', ' if (0)', ' {', ' printf("Hello, World!");', ' return 0;', ' }', '}'])
+ call term_sendkeys(buf, ":diffupdate!\<cr>")
+ call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
+--- 769,787 ----
+ call VerifyScreenDump(buf, 'Test_diff_11', {})
+
+ " Test 12: diff the same file
+! call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+ call VerifyBoth(buf, 'Test_diff_12', '')
+
+ " Test 13: diff an empty file
+! call WriteDiffFiles(buf, [], [])
+ call VerifyBoth(buf, 'Test_diff_13', '')
+
+ " Test 14: test diffopt+=icase
+! call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe'])
+ call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase")
+
+ " Test 15-16: test diffopt+=iwhite
+! call WriteDiffFiles(buf, ['int main()', '{', ' printf("Hello, World!");', ' return 0;', '}'],
+ \ ['int main()', '{', ' if (0)', ' {', ' printf("Hello, World!");', ' return 0;', ' }', '}'])
+ call term_sendkeys(buf, ":diffupdate!\<cr>")
+ call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\<cr>")
+***************
+*** 779,784 ****
+--- 789,810 ----
+ call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
+ call VerifyScreenDump(buf, 'Test_diff_16', {})
+
++ " Test 17: test diffopt+=iblank
++ call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy'])
++ call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank")
++
++ " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol
++ call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite")
++ call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall")
++ call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol")
++
++ " Test 19: test diffopt+=iwhiteeol
++ call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar'])
++ call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol")
++
++ " Test 19: test diffopt+=iwhiteall
++ call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall")
++
+ " clean up
+ call StopVimInTerminal(buf)
+ call delete('Xfile1')
+*** ../vim-8.1.0392/src/testdir/dumps/Test_diff_17.dump 2018-09-15 19:15:54.443272696 +0200
+--- src/testdir/dumps/Test_diff_17.dump 2018-09-15 17:55:58.742090613 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32
++ | +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1|x+2#0000000#ff404010@2| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|y+2#0000000#ff404010@2| +0&#ffd7ff255@31
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0392/src/testdir/dumps/Test_diff_18.dump 2018-09-15 19:15:54.447272663 +0200
+--- src/testdir/dumps/Test_diff_18.dump 2018-09-15 18:52:17.627640956 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32
++ | +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@34
++ | +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32||+1&&| +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32
++ | +0#0000e05#a8a8a8255@1|x+2#0000000#ff404010@2| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|y+2#0000000#ff404010@2| +0&#ffd7ff255@31
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0392/src/testdir/dumps/Test_diff_19.dump 2018-09-15 19:15:54.451272630 +0200
+--- src/testdir/dumps/Test_diff_19.dump 2018-09-15 19:02:49.693989182 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|c+0#0000000#ffd7ff255|d| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1|c+0#0000000#ffd7ff255| +2&#ff404010|d+0&#ffd7ff255| @31
++ | +0#0000e05#a8a8a8255@1|e+0#0000000#ffd7ff255|f| @32||+1&#ffffff0| +0#0000e05#a8a8a8255@1| +2#0000000#ff404010|e+0&#ffd7ff255|f| @31
++ | +0#0000e05#a8a8a8255@1|x+0#0000000#ffd7ff255@1| | +2&#ff404010|x+0&#ffd7ff255@1| @28||+1&#ffffff0| +0#0000e05#a8a8a8255@1|x+0#0000000#ffd7ff255@1| |x@1| @29
++ | +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34
++ | +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0392/src/testdir/dumps/Test_diff_20.dump 2018-09-15 19:15:54.455272594 +0200
+--- src/testdir/dumps/Test_diff_20.dump 2018-09-15 19:02:50.741980079 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0| @33||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0|d| @32||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0| |d| @31
++ | +0#0000e05#a8a8a8255@1|e+0#0000000#ffffff0|f| @32||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0|e|f| @31
++ | +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@1| @1|x@1| @28||+1&&| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@1| |x@1| @29
++ | +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@34
++ | +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0|a|r| @31
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |X+3#0000000&|f|i|l|e|1| @12|1|,|1| @11|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|A|l@1
++ |:+0&&> @73
+*** ../vim-8.1.0392/src/version.c 2018-09-15 15:42:36.501547749 +0200
+--- src/version.c 2018-09-15 19:05:26.212635237 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 393,
+ /**/
+
+--
+I'm trying to be an optimist, but I don't think it'll work.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0394 b/data/vim/patches/8.1.0394
new file mode 100644
index 000000000..9bd8ee970
--- /dev/null
+++ b/data/vim/patches/8.1.0394
@@ -0,0 +1,196 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0394
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0394
+Problem: Diffs are not always updated correctly.
+Solution: When using internal diff update for any changes properly.
+Files: src/structs.h, src/diff.c, src/proto/diff.pro, src/misc1.c,
+ src/main.c
+
+
+*** ../vim-8.1.0393/src/structs.h 2018-09-13 18:33:02.366426166 +0200
+--- src/structs.h 2018-09-16 13:55:20.676506925 +0200
+***************
+*** 2509,2515 ****
+ #ifdef FEAT_DIFF
+ diff_T *tp_first_diff;
+ buf_T *(tp_diffbuf[DB_COUNT]);
+! int tp_diff_invalid; /* list of diffs is outdated */
+ #endif
+ frame_T *(tp_snapshot[SNAP_COUNT]); /* window layout snapshots */
+ #ifdef FEAT_EVAL
+--- 2509,2516 ----
+ #ifdef FEAT_DIFF
+ diff_T *tp_first_diff;
+ buf_T *(tp_diffbuf[DB_COUNT]);
+! int tp_diff_invalid; // list of diffs is outdated
+! int tp_diff_update; // update diffs before redrawing
+ #endif
+ frame_T *(tp_snapshot[SNAP_COUNT]); /* window layout snapshots */
+ #ifdef FEAT_EVAL
+*** ../vim-8.1.0393/src/diff.c 2018-09-15 19:17:07.510653263 +0200
+--- src/diff.c 2018-09-16 13:57:36.259501809 +0200
+***************
+*** 292,297 ****
+--- 292,307 ----
+ linenr_T lnum_deleted = line1; /* lnum of remaining deletion */
+ int check_unchanged;
+
++ if (diff_internal())
++ {
++ // Will udpate diffs before redrawing. Set _invalid to update the
++ // diffs themselves, set _update to also update folds properly just
++ // before redrawing.
++ tp->tp_diff_invalid = TRUE;
++ tp->tp_diff_update = TRUE;
++ return;
++ }
++
+ if (line2 == MAXLNUM)
+ {
+ /* mark_adjust(99, MAXLNUM, 9, 0): insert lines */
+***************
+*** 640,646 ****
+ */
+ static void
+ diff_redraw(
+! int dofold) /* also recompute the folds */
+ {
+ win_T *wp;
+ int n;
+--- 650,656 ----
+ */
+ static void
+ diff_redraw(
+! int dofold) // also recompute the folds
+ {
+ win_T *wp;
+ int n;
+***************
+*** 863,869 ****
+ * Note that if the internal diff failed for one of the buffers, the external
+ * diff will be used anyway.
+ */
+! static int
+ diff_internal(void)
+ {
+ return (diff_flags & DIFF_INTERNAL) != 0 && *p_dex == NUL;
+--- 873,879 ----
+ * Note that if the internal diff failed for one of the buffers, the external
+ * diff will be used anyway.
+ */
+! int
+ diff_internal(void)
+ {
+ return (diff_flags & DIFF_INTERNAL) != 0 && *p_dex == NUL;
+***************
+*** 887,895 ****
+
+ /*
+ * Completely update the diffs for the buffers involved.
+! * This uses the ordinary "diff" command.
+! * The buffers are written to a file, also for unmodified buffers (the file
+! * could have been produced by autocommands, e.g. the netrw plugin).
+ */
+ void
+ ex_diffupdate(exarg_T *eap) // "eap" can be NULL
+--- 897,905 ----
+
+ /*
+ * Completely update the diffs for the buffers involved.
+! * When using the external "diff" command the buffers are written to a file,
+! * also for unmodified buffers (the file could have been produced by
+! * autocommands, e.g. the netrw plugin).
+ */
+ void
+ ex_diffupdate(exarg_T *eap) // "eap" can be NULL
+*** ../vim-8.1.0393/src/proto/diff.pro 2018-05-17 13:52:31.000000000 +0200
+--- src/proto/diff.pro 2018-09-15 19:36:03.456884220 +0200
+***************
+*** 4,9 ****
+--- 4,10 ----
+ void diff_buf_add(buf_T *buf);
+ void diff_invalidate(buf_T *buf);
+ void diff_mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after);
++ int diff_internal(void);
+ void ex_diffupdate(exarg_T *eap);
+ void ex_diffpatch(exarg_T *eap);
+ void ex_diffsplit(exarg_T *eap);
+*** ../vim-8.1.0393/src/misc1.c 2018-09-10 19:03:01.641716307 +0200
+--- src/misc1.c 2018-09-16 14:00:38.606151494 +0200
+***************
+*** 3093,3099 ****
+ changed_lines_buf(curbuf, lnum, lnume, xtra);
+
+ #ifdef FEAT_DIFF
+! if (xtra == 0 && curwin->w_p_diff)
+ {
+ /* When the number of lines doesn't change then mark_adjust() isn't
+ * called and other diff buffers still need to be marked for
+--- 3093,3099 ----
+ changed_lines_buf(curbuf, lnum, lnume, xtra);
+
+ #ifdef FEAT_DIFF
+! if (xtra == 0 && curwin->w_p_diff && !diff_internal())
+ {
+ /* When the number of lines doesn't change then mark_adjust() isn't
+ * called and other diff buffers still need to be marked for
+***************
+*** 3173,3178 ****
+--- 3173,3183 ----
+ /* mark the buffer as modified */
+ changed();
+
++ #ifdef FEAT_DIFF
++ if (curwin->w_p_diff && diff_internal())
++ curtab->tp_diff_update = TRUE;
++ #endif
++
+ /* set the '. mark */
+ if (!cmdmod.keepjumps)
+ {
+*** ../vim-8.1.0393/src/main.c 2018-09-13 15:33:39.605712221 +0200
+--- src/main.c 2018-09-16 14:01:36.921719929 +0200
+***************
+*** 1200,1205 ****
+--- 1200,1214 ----
+ }
+
+ #if defined(FEAT_DIFF)
++ // Updating diffs from changed() does not always work properly,
++ // esp. updating folds. Do an update just before redrawing if
++ // needed.
++ if (curtab->tp_diff_update || curtab->tp_diff_invalid)
++ {
++ ex_diffupdate(NULL);
++ curtab->tp_diff_update = FALSE;
++ }
++
+ /* Scroll-binding for diff mode may have been postponed until
+ * here. Avoids doing it for every change. */
+ if (diff_need_scrollbind)
+*** ../vim-8.1.0393/src/version.c 2018-09-15 19:17:07.514653227 +0200
+--- src/version.c 2018-09-15 20:13:51.888452794 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 394,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+60. As your car crashes through the guardrail on a mountain road, your first
+ instinct is to search for the "back" button.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0395 b/data/vim/patches/8.1.0395
new file mode 100644
index 000000000..bd9fdfad5
--- /dev/null
+++ b/data/vim/patches/8.1.0395
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0395
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0395
+Problem: Compiler warning on 64-bit MS-Windows.
+Solution: Add type cast. (Mike Williams)
+Files: src/diff.c
+
+
+*** ../vim-8.1.0394/src/diff.c 2018-09-16 14:10:28.300323360 +0200
+--- src/diff.c 2018-09-16 14:49:24.928809679 +0200
+***************
+*** 712,718 ****
+
+ // xdiff requires one big block of memory with all the text.
+ for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
+! len += STRLEN(ml_get_buf(buf, lnum, FALSE)) + 1;
+ ptr = lalloc(len, TRUE);
+ if (ptr == NULL)
+ {
+--- 712,718 ----
+
+ // xdiff requires one big block of memory with all the text.
+ for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
+! len += (long)STRLEN(ml_get_buf(buf, lnum, FALSE)) + 1;
+ ptr = lalloc(len, TRUE);
+ if (ptr == NULL)
+ {
+*** ../vim-8.1.0394/src/version.c 2018-09-16 14:10:28.300323360 +0200
+--- src/version.c 2018-09-16 14:50:28.972105814 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 395,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+63. You start using smileys in your snail mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0396 b/data/vim/patches/8.1.0396
new file mode 100644
index 000000000..3765bea14
--- /dev/null
+++ b/data/vim/patches/8.1.0396
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0396
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0396
+Problem: Another compiler warning on 64-bit MS-Windows.
+Solution: Add type cast. (Mike Williams)
+Files: src/xdiff/xutils.c
+
+
+*** ../vim-8.1.0395/src/xdiff/xutils.c 2018-09-10 17:50:32.717306902 +0200
+--- src/xdiff/xutils.c 2018-09-16 15:09:34.372976456 +0200
+***************
+*** 51,57 ****
+ mb[1].size = size;
+ if (size > 0 && rec[size - 1] != '\n') {
+ mb[2].ptr = (char *) "\n\\ No newline at end of file\n";
+! mb[2].size = strlen(mb[2].ptr);
+ i++;
+ }
+ if (ecb->outf(ecb->priv, mb, i) < 0) {
+--- 51,57 ----
+ mb[1].size = size;
+ if (size > 0 && rec[size - 1] != '\n') {
+ mb[2].ptr = (char *) "\n\\ No newline at end of file\n";
+! mb[2].size = (long)strlen(mb[2].ptr);
+ i++;
+ }
+ if (ecb->outf(ecb->priv, mb, i) < 0) {
+*** ../vim-8.1.0395/src/version.c 2018-09-16 14:51:34.003406787 +0200
+--- src/version.c 2018-09-16 15:14:09.618468629 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 396,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+65. The last time you looked at the clock it was 11:30pm, and in what
+ seems like only a few seconds later, your sister runs past you to
+ catch her 7am school bus.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0397 b/data/vim/patches/8.1.0397
new file mode 100644
index 000000000..3fab4180c
--- /dev/null
+++ b/data/vim/patches/8.1.0397
@@ -0,0 +1,335 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0397
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0397
+Problem: No event triggered after updating diffs.
+Solution: Add the DiffUpdated event.
+Files: src/vim.h, src/diff.c, src/fileio.c,
+ src/testdir/test_diffmode.vim, runtime/doc/autocmd.txt
+
+
+*** ../vim-8.1.0396/src/vim.h 2018-09-13 17:26:31.091401618 +0200
+--- src/vim.h 2018-09-16 15:28:57.984413860 +0200
+***************
+*** 1251,1354 ****
+ */
+ enum auto_event
+ {
+! EVENT_BUFADD = 0, /* after adding a buffer to the buffer list */
+! EVENT_BUFDELETE, /* deleting a buffer from the buffer list */
+! EVENT_BUFENTER, /* after entering a buffer */
+! EVENT_BUFFILEPOST, /* after renaming a buffer */
+! EVENT_BUFFILEPRE, /* before renaming a buffer */
+! EVENT_BUFHIDDEN, /* just after buffer becomes hidden */
+! EVENT_BUFLEAVE, /* before leaving a buffer */
+! EVENT_BUFNEW, /* after creating any buffer */
+! EVENT_BUFNEWFILE, /* when creating a buffer for a new file */
+! EVENT_BUFREADCMD, /* read buffer using command */
+! EVENT_BUFREADPOST, /* after reading a buffer */
+! EVENT_BUFREADPRE, /* before reading a buffer */
+! EVENT_BUFUNLOAD, /* just before unloading a buffer */
+! EVENT_BUFWINENTER, /* after showing a buffer in a window */
+! EVENT_BUFWINLEAVE, /* just after buffer removed from window */
+! EVENT_BUFWIPEOUT, /* just before really deleting a buffer */
+! EVENT_BUFWRITECMD, /* write buffer using command */
+! EVENT_BUFWRITEPOST, /* after writing a buffer */
+! EVENT_BUFWRITEPRE, /* before writing a buffer */
+! EVENT_CMDLINECHANGED, /* command line was modified*/
+! EVENT_CMDLINEENTER, /* after entering the command line */
+! EVENT_CMDLINELEAVE, /* before leaving the command line */
+! EVENT_CMDUNDEFINED, /* command undefined */
+! EVENT_CMDWINENTER, /* after entering the cmdline window */
+! EVENT_CMDWINLEAVE, /* before leaving the cmdline window */
+! EVENT_COLORSCHEME, /* after loading a colorscheme */
+! EVENT_COLORSCHEMEPRE, /* before loading a colorscheme */
+! EVENT_COMPLETEDONE, /* after finishing insert complete */
+! EVENT_CURSORHOLD, /* cursor in same position for a while */
+! EVENT_CURSORHOLDI, /* idem, in Insert mode */
+! EVENT_CURSORMOVED, /* cursor was moved */
+! EVENT_CURSORMOVEDI, /* cursor was moved in Insert mode */
+! EVENT_DIRCHANGED, /* after user changed directory */
+! EVENT_ENCODINGCHANGED, /* after changing the 'encoding' option */
+! EVENT_EXITPRE, /* before exiting */
+! EVENT_FILEAPPENDCMD, /* append to a file using command */
+! EVENT_FILEAPPENDPOST, /* after appending to a file */
+! EVENT_FILEAPPENDPRE, /* before appending to a file */
+! EVENT_FILECHANGEDRO, /* before first change to read-only file */
+! EVENT_FILECHANGEDSHELL, /* after shell command that changed file */
+! EVENT_FILECHANGEDSHELLPOST, /* after (not) reloading changed file */
+! EVENT_FILEREADCMD, /* read from a file using command */
+! EVENT_FILEREADPOST, /* after reading a file */
+! EVENT_FILEREADPRE, /* before reading a file */
+! EVENT_FILETYPE, /* new file type detected (user defined) */
+! EVENT_FILEWRITECMD, /* write to a file using command */
+! EVENT_FILEWRITEPOST, /* after writing a file */
+! EVENT_FILEWRITEPRE, /* before writing a file */
+! EVENT_FILTERREADPOST, /* after reading from a filter */
+! EVENT_FILTERREADPRE, /* before reading from a filter */
+! EVENT_FILTERWRITEPOST, /* after writing to a filter */
+! EVENT_FILTERWRITEPRE, /* before writing to a filter */
+! EVENT_FOCUSGAINED, /* got the focus */
+! EVENT_FOCUSLOST, /* lost the focus to another app */
+! EVENT_FUNCUNDEFINED, /* if calling a function which doesn't exist */
+! EVENT_GUIENTER, /* after starting the GUI */
+! EVENT_GUIFAILED, /* after starting the GUI failed */
+! EVENT_INSERTCHANGE, /* when changing Insert/Replace mode */
+! EVENT_INSERTCHARPRE, /* before inserting a char */
+! EVENT_INSERTENTER, /* when entering Insert mode */
+! EVENT_INSERTLEAVE, /* when leaving Insert mode */
+! EVENT_MENUPOPUP, /* just before popup menu is displayed */
+! EVENT_OPTIONSET, /* option was set */
+! EVENT_QUICKFIXCMDPOST, /* after :make, :grep etc. */
+! EVENT_QUICKFIXCMDPRE, /* before :make, :grep etc. */
+! EVENT_QUITPRE, /* before :quit */
+! EVENT_REMOTEREPLY, /* upon string reception from a remote vim */
+! EVENT_SESSIONLOADPOST, /* after loading a session file */
+! EVENT_SHELLCMDPOST, /* after ":!cmd" */
+! EVENT_SHELLFILTERPOST, /* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
+! EVENT_SOURCECMD, /* sourcing a Vim script using command */
+! EVENT_SOURCEPRE, /* before sourcing a Vim script */
+! EVENT_SPELLFILEMISSING, /* spell file missing */
+! EVENT_STDINREADPOST, /* after reading from stdin */
+! EVENT_STDINREADPRE, /* before reading from stdin */
+! EVENT_SWAPEXISTS, /* found existing swap file */
+! EVENT_SYNTAX, /* syntax selected */
+! EVENT_TABCLOSED, /* after closing a tab page */
+! EVENT_TABENTER, /* after entering a tab page */
+! EVENT_TABLEAVE, /* before leaving a tab page */
+! EVENT_TABNEW, /* when entering a new tab page */
+! EVENT_TERMCHANGED, /* after changing 'term' */
+! EVENT_TERMINALOPEN, /* after a terminal buffer was created */
+! EVENT_TERMRESPONSE, /* after setting "v:termresponse" */
+! EVENT_TEXTCHANGED, /* text was modified not in Insert mode */
+! EVENT_TEXTCHANGEDI, /* text was modified in Insert mode */
+! EVENT_TEXTCHANGEDP, /* TextChangedI with popup menu visible */
+! EVENT_TEXTYANKPOST, /* after some text was yanked */
+! EVENT_USER, /* user defined autocommand */
+! EVENT_VIMENTER, /* after starting Vim */
+! EVENT_VIMLEAVE, /* before exiting Vim */
+! EVENT_VIMLEAVEPRE, /* before exiting Vim and writing .viminfo */
+! EVENT_VIMRESIZED, /* after Vim window was resized */
+! EVENT_WINENTER, /* after entering a window */
+! EVENT_WINLEAVE, /* before leaving a window */
+! EVENT_WINNEW, /* when entering a new window */
+
+! NUM_EVENTS /* MUST be the last one */
+ };
+
+ typedef enum auto_event event_T;
+--- 1251,1355 ----
+ */
+ enum auto_event
+ {
+! EVENT_BUFADD = 0, // after adding a buffer to the buffer list
+! EVENT_BUFDELETE, // deleting a buffer from the buffer list
+! EVENT_BUFENTER, // after entering a buffer
+! EVENT_BUFFILEPOST, // after renaming a buffer
+! EVENT_BUFFILEPRE, // before renaming a buffer
+! EVENT_BUFHIDDEN, // just after buffer becomes hidden
+! EVENT_BUFLEAVE, // before leaving a buffer
+! EVENT_BUFNEW, // after creating any buffer
+! EVENT_BUFNEWFILE, // when creating a buffer for a new file
+! EVENT_BUFREADCMD, // read buffer using command
+! EVENT_BUFREADPOST, // after reading a buffer
+! EVENT_BUFREADPRE, // before reading a buffer
+! EVENT_BUFUNLOAD, // just before unloading a buffer
+! EVENT_BUFWINENTER, // after showing a buffer in a window
+! EVENT_BUFWINLEAVE, // just after buffer removed from window
+! EVENT_BUFWIPEOUT, // just before really deleting a buffer
+! EVENT_BUFWRITECMD, // write buffer using command
+! EVENT_BUFWRITEPOST, // after writing a buffer
+! EVENT_BUFWRITEPRE, // before writing a buffer
+! EVENT_CMDLINECHANGED, // command line was modified*/
+! EVENT_CMDLINEENTER, // after entering the command line
+! EVENT_CMDLINELEAVE, // before leaving the command line
+! EVENT_CMDUNDEFINED, // command undefined
+! EVENT_CMDWINENTER, // after entering the cmdline window
+! EVENT_CMDWINLEAVE, // before leaving the cmdline window
+! EVENT_COLORSCHEME, // after loading a colorscheme
+! EVENT_COLORSCHEMEPRE, // before loading a colorscheme
+! EVENT_COMPLETEDONE, // after finishing insert complete
+! EVENT_CURSORHOLD, // cursor in same position for a while
+! EVENT_CURSORHOLDI, // idem, in Insert mode
+! EVENT_CURSORMOVED, // cursor was moved
+! EVENT_CURSORMOVEDI, // cursor was moved in Insert mode
+! EVENT_DIFFUPDATED, // after diffs were updated
+! EVENT_DIRCHANGED, // after user changed directory
+! EVENT_ENCODINGCHANGED, // after changing the 'encoding' option
+! EVENT_EXITPRE, // before exiting
+! EVENT_FILEAPPENDCMD, // append to a file using command
+! EVENT_FILEAPPENDPOST, // after appending to a file
+! EVENT_FILEAPPENDPRE, // before appending to a file
+! EVENT_FILECHANGEDRO, // before first change to read-only file
+! EVENT_FILECHANGEDSHELL, // after shell command that changed file
+! EVENT_FILECHANGEDSHELLPOST, // after (not) reloading changed file
+! EVENT_FILEREADCMD, // read from a file using command
+! EVENT_FILEREADPOST, // after reading a file
+! EVENT_FILEREADPRE, // before reading a file
+! EVENT_FILETYPE, // new file type detected (user defined)
+! EVENT_FILEWRITECMD, // write to a file using command
+! EVENT_FILEWRITEPOST, // after writing a file
+! EVENT_FILEWRITEPRE, // before writing a file
+! EVENT_FILTERREADPOST, // after reading from a filter
+! EVENT_FILTERREADPRE, // before reading from a filter
+! EVENT_FILTERWRITEPOST, // after writing to a filter
+! EVENT_FILTERWRITEPRE, // before writing to a filter
+! EVENT_FOCUSGAINED, // got the focus
+! EVENT_FOCUSLOST, // lost the focus to another app
+! EVENT_FUNCUNDEFINED, // if calling a function which doesn't exist
+! EVENT_GUIENTER, // after starting the GUI
+! EVENT_GUIFAILED, // after starting the GUI failed
+! EVENT_INSERTCHANGE, // when changing Insert/Replace mode
+! EVENT_INSERTCHARPRE, // before inserting a char
+! EVENT_INSERTENTER, // when entering Insert mode
+! EVENT_INSERTLEAVE, // when leaving Insert mode
+! EVENT_MENUPOPUP, // just before popup menu is displayed
+! EVENT_OPTIONSET, // option was set
+! EVENT_QUICKFIXCMDPOST, // after :make, :grep etc.
+! EVENT_QUICKFIXCMDPRE, // before :make, :grep etc.
+! EVENT_QUITPRE, // before :quit
+! EVENT_REMOTEREPLY, // upon string reception from a remote vim
+! EVENT_SESSIONLOADPOST, // after loading a session file
+! EVENT_SHELLCMDPOST, // after ":!cmd"
+! EVENT_SHELLFILTERPOST, // after ":1,2!cmd", ":w !cmd", ":r !cmd".
+! EVENT_SOURCECMD, // sourcing a Vim script using command
+! EVENT_SOURCEPRE, // before sourcing a Vim script
+! EVENT_SPELLFILEMISSING, // spell file missing
+! EVENT_STDINREADPOST, // after reading from stdin
+! EVENT_STDINREADPRE, // before reading from stdin
+! EVENT_SWAPEXISTS, // found existing swap file
+! EVENT_SYNTAX, // syntax selected
+! EVENT_TABCLOSED, // after closing a tab page
+! EVENT_TABENTER, // after entering a tab page
+! EVENT_TABLEAVE, // before leaving a tab page
+! EVENT_TABNEW, // when entering a new tab page
+! EVENT_TERMCHANGED, // after changing 'term'
+! EVENT_TERMINALOPEN, // after a terminal buffer was created
+! EVENT_TERMRESPONSE, // after setting "v:termresponse"
+! EVENT_TEXTCHANGED, // text was modified not in Insert mode
+! EVENT_TEXTCHANGEDI, // text was modified in Insert mode
+! EVENT_TEXTCHANGEDP, // TextChangedI with popup menu visible
+! EVENT_TEXTYANKPOST, // after some text was yanked
+! EVENT_USER, // user defined autocommand
+! EVENT_VIMENTER, // after starting Vim
+! EVENT_VIMLEAVE, // before exiting Vim
+! EVENT_VIMLEAVEPRE, // before exiting Vim and writing .viminfo
+! EVENT_VIMRESIZED, // after Vim window was resized
+! EVENT_WINENTER, // after entering a window
+! EVENT_WINLEAVE, // before leaving a window
+! EVENT_WINNEW, // when entering a new window
+
+! NUM_EVENTS // MUST be the last one
+ };
+
+ typedef enum auto_event event_T;
+*** ../vim-8.1.0396/src/diff.c 2018-09-16 14:51:34.003406787 +0200
+--- src/diff.c 2018-09-16 15:29:52.787858129 +0200
+***************
+*** 942,947 ****
+--- 942,949 ----
+ curwin->w_valid_cursor.lnum = 0;
+
+ diff_redraw(TRUE);
++
++ apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
+ }
+
+ /*
+*** ../vim-8.1.0396/src/fileio.c 2018-09-13 15:33:39.605712221 +0200
+--- src/fileio.c 2018-09-16 15:30:10.519679152 +0200
+***************
+*** 7761,7766 ****
+--- 7761,7767 ----
+ {"CursorHoldI", EVENT_CURSORHOLDI},
+ {"CursorMoved", EVENT_CURSORMOVED},
+ {"CursorMovedI", EVENT_CURSORMOVEDI},
++ {"DiffUpdated", EVENT_DIFFUPDATED},
+ {"DirChanged", EVENT_DIRCHANGED},
+ {"EncodingChanged", EVENT_ENCODINGCHANGED},
+ {"ExitPre", EVENT_EXITPRE},
+*** ../vim-8.1.0396/src/testdir/test_diffmode.vim 2018-09-15 19:17:07.510653263 +0200
+--- src/testdir/test_diffmode.vim 2018-09-16 15:42:46.704283160 +0200
+***************
+*** 4,9 ****
+--- 4,12 ----
+
+ func Test_diff_fold_sync()
+ enew!
++ let g:update_count = 0
++ au DiffUpdated * let g:update_count += 1
++
+ let l = range(50)
+ call setline(1, l)
+ diffthis
+***************
+*** 29,34 ****
+--- 32,40 ----
+ call win_gotoid(winone)
+ call assert_equal(23, getcurpos()[1])
+
++ call assert_equal(1, g:update_count)
++ au! DiffUpdated
++
+ windo diffoff
+ close!
+ set nomodified
+*** ../vim-8.1.0396/runtime/doc/autocmd.txt 2018-05-17 13:40:51.000000000 +0200
+--- runtime/doc/autocmd.txt 2018-09-16 15:46:22.166221491 +0200
+***************
+*** 656,667 ****
+ *E881*
+ If the number of lines changes saving for undo
+ may fail and the change will be aborted.
+ *DirChanged*
+ DirChanged The working directory has changed in response
+ to the |:cd| or |:lcd| commands, or as a
+ result of the 'autochdir' option.
+ The pattern can be:
+! "window" to trigger on `:lcd
+ "global" to trigger on `:cd`
+ "auto" to trigger on 'autochdir'.
+ "drop" to trigger on editing a file
+--- 656,672 ----
+ *E881*
+ If the number of lines changes saving for undo
+ may fail and the change will be aborted.
++ *DiffUpdated*
++ DiffUpdated After diffs have been updated. Depending on
++ what kind of diff is being used (internal or
++ external) this can be triggered on every
++ change or when doing |:diffupdate|.
+ *DirChanged*
+ DirChanged The working directory has changed in response
+ to the |:cd| or |:lcd| commands, or as a
+ result of the 'autochdir' option.
+ The pattern can be:
+! "window" to trigger on `:lcd`
+ "global" to trigger on `:cd`
+ "auto" to trigger on 'autochdir'.
+ "drop" to trigger on editing a file
+*** ../vim-8.1.0396/src/version.c 2018-09-16 15:14:15.078419097 +0200
+--- src/version.c 2018-09-16 15:44:10.039484480 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 397,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+67. Your hard drive crashes. You haven't logged in for two hours. You start
+ to twitch. You pick up the phone and manually dial your ISP's access
+ number. You try to hum to communicate with the modem. You succeed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0398 b/data/vim/patches/8.1.0398
new file mode 100644
index 000000000..f30e8260f
--- /dev/null
+++ b/data/vim/patches/8.1.0398
@@ -0,0 +1,121 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0398
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0398
+Problem: No test for -o and -O command line arguments.
+Solution: Add a test. (Dominique Pelle, closes #3438)
+Files: src/testdir/test_startup.vim
+
+
+*** ../vim-8.1.0397/src/testdir/test_startup.vim 2018-02-03 15:11:32.000000000 +0100
+--- src/testdir/test_startup.vim 2018-09-16 16:26:35.258985223 +0200
+***************
+*** 148,153 ****
+--- 148,230 ----
+ call delete('Xtestout')
+ endfunc
+
++ " Test the -o[N] and -O[N] arguments to open N windows split
++ " horizontally or vertically.
++ func Test_o_arg()
++ let after = [
++ \ 'call writefile([winnr("$"),
++ \ winheight(1), winheight(2), &lines,
++ \ winwidth(1), winwidth(2), &columns,
++ \ bufname(winbufnr(1)), bufname(winbufnr(2))],
++ \ "Xtestout")',
++ \ 'qall',
++ \ ]
++ if RunVim([], after, '-o2')
++ " Open 2 windows split horizontally. Expect:
++ " - 2 windows
++ " - both windows should have the same or almost the same height
++ " - sum of both windows height (+ 3 for both statusline and Ex command)
++ " should be equal to the number of lines
++ " - both windows should have the same width which should be equal to the
++ " number of columns
++ " - buffer of both windows should have no name
++ let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout')
++ call assert_equal('2', wn)
++ call assert_inrange(0, 1, wh1 - wh2)
++ call assert_equal(string(wh1 + wh2 + 3), ln)
++ call assert_equal(ww1, ww2)
++ call assert_equal(ww1, cn)
++ call assert_equal('', bn1)
++ call assert_equal('', bn2)
++ endif
++
++ if RunVim([], after, '-o foo bar')
++ " Same expectations as for -o2 but buffer names should be foo and bar
++ let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout')
++ call assert_equal('2', wn)
++ call assert_inrange(0, 1, wh1 - wh2)
++ call assert_equal(string(wh1 + wh2 + 3), ln)
++ call assert_equal(ww1, ww2)
++ call assert_equal(ww1, cn)
++ call assert_equal('foo', bn1)
++ call assert_equal('bar', bn2)
++ endif
++
++ if RunVim([], after, '-O2')
++ " Open 2 windows split vertically. Expect:
++ " - 2 windows
++ " - both windows should have the same or almost the same width
++ " - sum of both windows width (+ 1 separator) should be equal to the
++ " number of columns
++ " - both windows should have the same height
++ " - window height (+ 2 for the statusline and Ex command) should be equal
++ " to the number of lines
++ " - buffer of both windowns should have no name
++ let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout')
++ call assert_equal('2', wn)
++ call assert_inrange(0, 1, ww1 - ww2)
++ call assert_equal(string(ww1 + ww2 + 1), cn)
++ call assert_equal(wh1, wh2)
++ call assert_equal(string(wh1 + 2), ln)
++ call assert_equal('', bn1)
++ call assert_equal('', bn2)
++ endif
++
++ if RunVim([], after, '-O foo bar')
++ " Same expectations as for -O2 but buffer names should be foo and bar
++ let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout')
++ call assert_equal('2', wn)
++ call assert_inrange(0, 1, ww1 - ww2)
++ call assert_equal(string(ww1 + ww2 + 1), cn)
++ call assert_equal(wh1, wh2)
++ call assert_equal(string(wh1 + 2), ln)
++ call assert_equal('foo', bn1)
++ call assert_equal('bar', bn2)
++ endif
++
++ call delete('Xtestout')
++ endfunc
++
+ func Test_file_args()
+ let after = [
+ \ 'call writefile(argv(), "Xtestout")',
+*** ../vim-8.1.0397/src/version.c 2018-09-16 15:47:45.629425398 +0200
+--- src/version.c 2018-09-16 16:26:03.503223237 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 398,
+ /**/
+
+--
+"Thou shalt not follow the Null Pointer, for at its end Chaos and
+Madness lie."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0399 b/data/vim/patches/8.1.0399
new file mode 100644
index 000000000..b6bad8d03
--- /dev/null
+++ b/data/vim/patches/8.1.0399
@@ -0,0 +1,270 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0399
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0399
+Problem: 'hlsearch' highlight remains in other window after cancelling
+ command.
+Solution: Redraw all windows. Also remove unnecessary delays. (closes #3437)
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_11.dump,
+ src/testdir/dumps/Test_incsearch_substitute_12.dump,
+ src/testdir/dumps/Test_incsearch_substitute_13.dump
+
+
+*** ../vim-8.1.0398/src/ex_getln.c 2018-09-15 15:42:36.501547749 +0200
+--- src/ex_getln.c 2018-09-16 17:05:34.778903616 +0200
+***************
+*** 445,454 ****
+ p_magic = is_state->magic_save;
+
+ validate_cursor(); /* needed for TAB */
+ if (call_update_screen)
+ update_screen(SOME_VALID);
+- else
+- redraw_all_later(SOME_VALID);
+ }
+ }
+
+--- 445,453 ----
+ p_magic = is_state->magic_save;
+
+ validate_cursor(); /* needed for TAB */
++ redraw_all_later(SOME_VALID);
+ if (call_update_screen)
+ update_screen(SOME_VALID);
+ }
+ }
+
+***************
+*** 589,596 ****
+ {
+ next_char = ccline.cmdbuff[skiplen + patlen];
+ ccline.cmdbuff[skiplen + patlen] = NUL;
+! if (empty_pattern(ccline.cmdbuff))
+ set_no_hlsearch(TRUE);
+ ccline.cmdbuff[skiplen + patlen] = next_char;
+ }
+
+--- 588,598 ----
+ {
+ next_char = ccline.cmdbuff[skiplen + patlen];
+ ccline.cmdbuff[skiplen + patlen] = NUL;
+! if (empty_pattern(ccline.cmdbuff) && !no_hlsearch)
+! {
+! redraw_all_later(SOME_VALID);
+ set_no_hlsearch(TRUE);
++ }
+ ccline.cmdbuff[skiplen + patlen] = next_char;
+ }
+
+*** ../vim-8.1.0398/src/testdir/test_search.vim 2018-09-15 15:42:36.501547749 +0200
+--- src/testdir/test_search.vim 2018-09-16 16:55:11.543875312 +0200
+***************
+*** 834,846 ****
+
+ " Need to send one key at a time to force a redraw.
+ call term_sendkeys(buf, '/fo')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_search_01', {})
+ call term_sendkeys(buf, "\<Esc>")
+ sleep 100m
+
+ call term_sendkeys(buf, '/\v')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_search_02', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+--- 834,844 ----
+***************
+*** 899,905 ****
+ call term_sendkeys(buf, 'o')
+ sleep 100m
+ call term_sendkeys(buf, 'o')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_01', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+--- 897,902 ----
+***************
+*** 907,936 ****
+ call term_sendkeys(buf, "/foo\<CR>")
+ sleep 100m
+ call term_sendkeys(buf, ':.,.+2s//')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_02', {})
+
+ " Deleting last slash should remove the match.
+ call term_sendkeys(buf, "\<BS>")
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_03', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ " Reverse range is accepted
+ call term_sendkeys(buf, ':5,2s/foo')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_04', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ " White space after the command is skipped
+ call term_sendkeys(buf, ':2,3sub /fo')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_05', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ " Command modifiers are skipped
+ call term_sendkeys(buf, ':above below browse botr confirm keepmar keepalt keeppat keepjum filter xxx hide lockm leftabove noau noswap rightbel sandbox silent silent! $tab top unsil vert verbose 4,5s/fo.')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_06', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+--- 904,928 ----
+***************
+*** 938,950 ****
+ call term_sendkeys(buf, ":set cursorline\<CR>")
+ call term_sendkeys(buf, 'G9G')
+ call term_sendkeys(buf, ':9,11s/bar')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_07', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ " Cursorline highlighting at cursor when no match
+ call term_sendkeys(buf, ':9,10s/bar')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_08', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+--- 930,940 ----
+***************
+*** 952,958 ****
+ call term_sendkeys(buf, '3G4G')
+ call term_sendkeys(buf, ":nohlsearch\<CR>")
+ call term_sendkeys(buf, ':6,7s/\v')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_09', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+--- 942,947 ----
+***************
+*** 965,970 ****
+--- 954,968 ----
+ call term_sendkeys(buf, "\<Esc>")
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_10', {})
+
++ call term_sendkeys(buf, ":split\<CR>")
++ call term_sendkeys(buf, ":let @/ = 'xyz'\<CR>")
++ call term_sendkeys(buf, ":%s/.")
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_11', {})
++ call term_sendkeys(buf, "\<BS>")
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_12', {})
++ call term_sendkeys(buf, "\<Esc>")
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_13', {})
++
+ call StopVimInTerminal(buf)
+ call delete('Xis_subst_script')
+ endfunc
+***************
+*** 988,994 ****
+
+ " Need to send one key at a time to force a redraw.
+ call term_sendkeys(buf, ':sort ni u /on')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_sort_01', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+--- 986,991 ----
+***************
+*** 1015,1041 ****
+
+ " Need to send one key at a time to force a redraw.
+ call term_sendkeys(buf, ':vimgrep on')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_01', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ call term_sendkeys(buf, ':vimg /on/ *.txt')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_02', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ call term_sendkeys(buf, ':vimgrepadd "\<on')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_03', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ call term_sendkeys(buf, ':lv "tha')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_04', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+ call term_sendkeys(buf, ':lvimgrepa "the" **/*.txt')
+- sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_vimgrep_05', {})
+ call term_sendkeys(buf, "\<Esc>")
+
+--- 1012,1033 ----
+*** ../vim-8.1.0398/src/testdir/dumps/Test_incsearch_substitute_11.dump 2018-09-16 17:07:07.942125313 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_11.dump 2018-09-16 16:51:19.114021175 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+1&#ffffff0|o+0&#ffff4012@1| |1| +0&#ffffff0@64
++ |f+0&#ffff4012|o@1| |2| +0&#ffffff0@64
++ |f+0&#ffff4012|o@1| |3| +0&#ffffff0@64
++ |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @38|1|,|1| @11|T|o|p
++ |f+0&#ffff4012|o@1| |1| +0&#ffffff0@64
++ |f+0&#ffff4012|o@1| |2| +0&#ffffff0@64
++ |f+0&#ffff4012|o@1| |3| +0&#ffffff0@64
++ |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @38|2|,|1| @11|T|o|p
++ |:+0&&|%|s|/|.> @64
+*** ../vim-8.1.0398/src/testdir/dumps/Test_incsearch_substitute_12.dump 2018-09-16 17:07:07.946125279 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_12.dump 2018-09-16 17:02:35.668361451 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |1| @64
++ |f|o@1| |2| @64
++ |f|o@1| |3| @64
++ |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @38|1|,|1| @11|T|o|p
++ |f+0&&|o@1| |1| @64
++ |f|o@1| |2| @64
++ |f|o@1| |3| @64
++ |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @38|2|,|1| @11|T|o|p
++ |:+0&&|%|s|/> @65
+*** ../vim-8.1.0398/src/testdir/dumps/Test_incsearch_substitute_13.dump 2018-09-16 17:07:07.950125246 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_13.dump 2018-09-16 16:56:55.698917689 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |1| @64
++ >f|o@1| |2| @64
++ |f|o@1| |3| @64
++ |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @38|2|,|1| @11|T|o|p
++ |f+0&&|o@1| |1| @64
++ |f|o@1| |2| @64
++ |f|o@1| |3| @64
++ |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @38|2|,|1| @11|T|o|p
++ | +0&&@69
+*** ../vim-8.1.0398/src/version.c 2018-09-16 16:28:08.358268312 +0200
+--- src/version.c 2018-09-16 17:06:16.446556974 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 399,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+73. You give your dog used motherboards instead of bones
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0400 b/data/vim/patches/8.1.0400
new file mode 100644
index 000000000..ded7bfb9c
--- /dev/null
+++ b/data/vim/patches/8.1.0400
@@ -0,0 +1,101 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0400
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0400
+Problem: Using freed memory with :diffget.
+Solution: Skip ex_diffupdate() while updating diffs. (closes #3442)
+Files: src/diff.c
+
+
+*** ../vim-8.1.0399/src/diff.c 2018-09-16 15:47:45.629425398 +0200
+--- src/diff.c 2018-09-16 18:05:01.223981230 +0200
+***************
+*** 21,27 ****
+
+ #if defined(FEAT_DIFF) || defined(PROTO)
+
+! static int diff_busy = FALSE; /* ex_diffgetput() is busy */
+
+ /* flags obtained from the 'diffopt' option */
+ #define DIFF_FILLER 0x001 // display filler lines
+--- 21,28 ----
+
+ #if defined(FEAT_DIFF) || defined(PROTO)
+
+! static int diff_busy = FALSE; // using diff structs, don't change them
+! static int diff_need_update = FALSE; // ex_diffupdate needs to be called
+
+ /* flags obtained from the 'diffopt' option */
+ #define DIFF_FILLER 0x001 // display filler lines
+***************
+*** 908,913 ****
+--- 909,920 ----
+ int idx_new;
+ diffio_T diffio;
+
++ if (diff_busy)
++ {
++ diff_need_update = TRUE;
++ return;
++ }
++
+ // Delete all diffblocks.
+ diff_clear(curtab);
+ curtab->tp_diff_invalid = FALSE;
+***************
+*** 2660,2666 ****
+ if (diff_buf_idx(curbuf) != idx_to)
+ {
+ EMSG(_("E787: Buffer changed unexpectedly"));
+! return;
+ }
+ }
+
+--- 2667,2673 ----
+ if (diff_buf_idx(curbuf) != idx_to)
+ {
+ EMSG(_("E787: Buffer changed unexpectedly"));
+! goto theend;
+ }
+ }
+
+***************
+*** 2831,2837 ****
+--- 2838,2850 ----
+ aucmd_restbuf(&aco);
+ }
+
++ theend:
+ diff_busy = FALSE;
++ if (diff_need_update)
++ {
++ diff_need_update = FALSE;
++ ex_diffupdate(NULL);
++ }
+
+ /* Check that the cursor is on a valid character and update it's position.
+ * When there were filler lines the topline has become invalid. */
+*** ../vim-8.1.0399/src/version.c 2018-09-16 17:07:40.125853848 +0200
+--- src/version.c 2018-09-16 18:09:16.718696612 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 400,
+ /**/
+
+--
+Q: How many legs does a giraffe have?
+A: Eight: two in front, two behind, two on the left and two on the right
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0401 b/data/vim/patches/8.1.0401
new file mode 100644
index 000000000..bc570efd6
--- /dev/null
+++ b/data/vim/patches/8.1.0401
@@ -0,0 +1,259 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0401
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0401
+Problem: Can't get swap name of another buffer.
+Solution: Add swapname(). (Ozaki Kiichi, closes #3441)
+Files: runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test_swap.vim
+
+
+*** ../vim-8.1.0400/runtime/doc/eval.txt 2018-09-14 21:27:02.771741354 +0200
+--- runtime/doc/eval.txt 2018-09-16 18:41:36.931933772 +0200
+***************
+*** 2410,2415 ****
+--- 2417,2423 ----
+ substitute({expr}, {pat}, {sub}, {flags})
+ String all {pat} in {expr} replaced with {sub}
+ swapinfo({fname}) Dict information about swap file {fname}
++ swapname({expr}) String swap file of buffer {expr}
+ synID({lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col}
+ synIDattr({synID}, {what} [, {mode}])
+ String attribute {what} of syntax ID {synID}
+***************
+*** 8011,8017 ****
+ |submatch()| returns. Example: >
+ :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
+
+! swapinfo({fname}) swapinfo()
+ The result is a dictionary, which holds information about the
+ swapfile {fname}. The available fields are:
+ version VIM version
+--- 8024,8030 ----
+ |submatch()| returns. Example: >
+ :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
+
+! swapinfo({fname}) *swapinfo()*
+ The result is a dictionary, which holds information about the
+ swapfile {fname}. The available fields are:
+ version VIM version
+***************
+*** 8023,8034 ****
+--- 8036,8055 ----
+ mtime last modification time in seconds
+ inode Optional: INODE number of the file
+ dirty 1 if file was modified, 0 if not
++ Note that "user" and "host" are truncated to at most 39 bytes.
+ In case of failure an "error" item is added with the reason:
+ Cannot open file: file not found or in accessible
+ Cannot read file: cannot read first block
+ Not a swap file: does not contain correct block ID
+ Magic number mismatch: Info in first block is invalid
+
++ swapname({expr}) *swapname()*
++ The result is the swap file path of the buffer {expr}.
++ For the use of {expr}, see |bufname()| above.
++ If buffer {expr} is the current buffer, the result is equal to
++ |:swapname| (unless no swap file).
++ If buffer {expr} has no swap file, returns an empty string.
++
+ synID({lnum}, {col}, {trans}) *synID()*
+ The result is a Number, which is the syntax ID at the position
+ {lnum} and {col} in the current window.
+*** ../vim-8.1.0400/src/evalfunc.c 2018-09-14 21:27:02.775741320 +0200
+--- src/evalfunc.c 2018-09-16 18:41:36.935933733 +0200
+***************
+*** 399,404 ****
+--- 399,405 ----
+ static void f_submatch(typval_T *argvars, typval_T *rettv);
+ static void f_substitute(typval_T *argvars, typval_T *rettv);
+ static void f_swapinfo(typval_T *argvars, typval_T *rettv);
++ static void f_swapname(typval_T *argvars, typval_T *rettv);
+ static void f_synID(typval_T *argvars, typval_T *rettv);
+ static void f_synIDattr(typval_T *argvars, typval_T *rettv);
+ static void f_synIDtrans(typval_T *argvars, typval_T *rettv);
+***************
+*** 865,870 ****
+--- 866,872 ----
+ {"submatch", 1, 2, f_submatch},
+ {"substitute", 4, 4, f_substitute},
+ {"swapinfo", 1, 1, f_swapinfo},
++ {"swapname", 1, 1, f_swapname},
+ {"synID", 3, 3, f_synID},
+ {"synIDattr", 2, 3, f_synIDattr},
+ {"synIDtrans", 1, 1, f_synIDtrans},
+***************
+*** 12342,12347 ****
+--- 12344,12366 ----
+ }
+
+ /*
++ * "swapname(expr)" function
++ */
++ static void
++ f_swapname(typval_T *argvars, typval_T *rettv)
++ {
++ buf_T *buf;
++
++ rettv->v_type = VAR_STRING;
++ buf = get_buf_tv(&argvars[0], FALSE);
++ if (buf == NULL || buf->b_ml.ml_mfp == NULL
++ || buf->b_ml.ml_mfp->mf_fname == NULL)
++ rettv->vval.v_string = NULL;
++ else
++ rettv->vval.v_string = vim_strsave(buf->b_ml.ml_mfp->mf_fname);
++ }
++
++ /*
+ * "synID(lnum, col, trans)" function
+ */
+ static void
+*** ../vim-8.1.0400/src/testdir/test_swap.vim 2018-08-22 11:27:57.118946770 +0200
+--- src/testdir/test_swap.vim 2018-09-16 18:41:36.935933733 +0200
+***************
+*** 1,5 ****
+--- 1,9 ----
+ " Tests for the swap feature
+
++ func s:swapname()
++ return trim(execute('swapname'))
++ endfunc
++
+ " Tests for 'directory' option.
+ func Test_swap_directory()
+ if !has("unix")
+***************
+*** 17,23 ****
+ " Verify that the swap file doesn't exist in the current directory
+ call assert_equal([], glob(".Xtest1*.swp", 1, 1, 1))
+ edit Xtest1
+! let swfname = split(execute("swapname"))[0]
+ call assert_equal([swfname], glob(swfname, 1, 1, 1))
+
+ " './dir', swap file in a directory relative to the file
+--- 21,27 ----
+ " Verify that the swap file doesn't exist in the current directory
+ call assert_equal([], glob(".Xtest1*.swp", 1, 1, 1))
+ edit Xtest1
+! let swfname = s:swapname()
+ call assert_equal([swfname], glob(swfname, 1, 1, 1))
+
+ " './dir', swap file in a directory relative to the file
+***************
+*** 27,33 ****
+ edit Xtest1
+ call assert_equal([], glob(swfname, 1, 1, 1))
+ let swfname = "Xtest2/Xtest1.swp"
+! call assert_equal(swfname, split(execute("swapname"))[0])
+ call assert_equal([swfname], glob("Xtest2/*", 1, 1, 1))
+
+ " 'dir', swap file in directory relative to the current dir
+--- 31,37 ----
+ edit Xtest1
+ call assert_equal([], glob(swfname, 1, 1, 1))
+ let swfname = "Xtest2/Xtest1.swp"
+! call assert_equal(swfname, s:swapname())
+ call assert_equal([swfname], glob("Xtest2/*", 1, 1, 1))
+
+ " 'dir', swap file in directory relative to the current dir
+***************
+*** 38,44 ****
+ edit Xtest2/Xtest3
+ call assert_equal(["Xtest2/Xtest3"], glob("Xtest2/*", 1, 1, 1))
+ let swfname = "Xtest.je/Xtest3.swp"
+! call assert_equal(swfname, split(execute("swapname"))[0])
+ call assert_equal([swfname], glob("Xtest.je/*", 1, 1, 1))
+
+ set dir&
+--- 42,48 ----
+ edit Xtest2/Xtest3
+ call assert_equal(["Xtest2/Xtest3"], glob("Xtest2/*", 1, 1, 1))
+ let swfname = "Xtest.je/Xtest3.swp"
+! call assert_equal(swfname, s:swapname())
+ call assert_equal([swfname], glob("Xtest.je/*", 1, 1, 1))
+
+ set dir&
+***************
+*** 70,76 ****
+ throw 'Skipped: cannot set second group on test file'
+ else
+ split Xtest
+! let swapname = substitute(execute('swapname'), '[[:space:]]', '', 'g')
+ call assert_match('Xtest', swapname)
+ " Group of swapfile must now match original file.
+ call assert_match(' ' . groups[1] . ' \d', system('ls -l ' . swapname))
+--- 74,80 ----
+ throw 'Skipped: cannot set second group on test file'
+ else
+ split Xtest
+! let swapname = s:swapname()
+ call assert_match('Xtest', swapname)
+ " Group of swapfile must now match original file.
+ call assert_match(' ' . groups[1] . ' \d', system('ls -l ' . swapname))
+***************
+*** 102,108 ****
+ new Xswapinfo
+ call setline(1, ['one', 'two', 'three'])
+ w
+! let fname = trim(execute('swapname'))
+ call assert_match('Xswapinfo', fname)
+ let info = swapinfo(fname)
+
+--- 106,112 ----
+ new Xswapinfo
+ call setline(1, ['one', 'two', 'three'])
+ w
+! let fname = s:swapname()
+ call assert_match('Xswapinfo', fname)
+ let info = swapinfo(fname)
+
+***************
+*** 136,138 ****
+--- 140,163 ----
+ call assert_equal('Not a swap file', info.error)
+ call delete('Xnotaswapfile')
+ endfunc
++
++ func Test_swapname()
++ edit Xtest1
++ let expected = s:swapname()
++ call assert_equal(expected, swapname('%'))
++
++ new Xtest2
++ let buf = bufnr('%')
++ let expected = s:swapname()
++ wincmd p
++ call assert_equal(expected, swapname(buf))
++
++ new Xtest3
++ setlocal noswapfile
++ call assert_equal('', swapname('%'))
++
++ bwipe!
++ call delete('Xtest1')
++ call delete('Xtest2')
++ call delete('Xtest3')
++ endfunc
+*** ../vim-8.1.0400/src/version.c 2018-09-16 18:10:45.246181729 +0200
+--- src/version.c 2018-09-16 18:42:35.483369791 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 401,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+77. The phone company asks you to test drive their new PBX system
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0402 b/data/vim/patches/8.1.0402
new file mode 100644
index 000000000..f5e1ac782
--- /dev/null
+++ b/data/vim/patches/8.1.0402
@@ -0,0 +1,171 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0402
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0402
+Problem: The DiffUpdate event isn't triggered for :diffput.
+Solution: Also trigger DiffUpdate for :diffget and :diffput.
+Files: src/diff.c
+
+
+*** ../vim-8.1.0401/src/diff.c 2018-09-16 18:10:45.246181729 +0200
+--- src/diff.c 2018-09-18 20:54:19.844268349 +0200
+***************
+*** 295,301 ****
+
+ if (diff_internal())
+ {
+! // Will udpate diffs before redrawing. Set _invalid to update the
+ // diffs themselves, set _update to also update folds properly just
+ // before redrawing.
+ tp->tp_diff_invalid = TRUE;
+--- 295,301 ----
+
+ if (diff_internal())
+ {
+! // Will update diffs before redrawing. Set _invalid to update the
+ // diffs themselves, set _update to also update folds properly just
+ // before redrawing.
+ tp->tp_diff_invalid = TRUE;
+***************
+*** 908,913 ****
+--- 908,914 ----
+ int idx_orig;
+ int idx_new;
+ diffio_T diffio;
++ int had_diffs = curtab->tp_first_diff != NULL;
+
+ if (diff_busy)
+ {
+***************
+*** 924,937 ****
+ if (curtab->tp_diffbuf[idx_orig] != NULL)
+ break;
+ if (idx_orig == DB_COUNT)
+! return;
+
+ // Only need to do something when there is another buffer.
+ for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
+ if (curtab->tp_diffbuf[idx_new] != NULL)
+ break;
+ if (idx_new == DB_COUNT)
+! return;
+
+ // Only use the internal method if it did not fail for one of the buffers.
+ vim_memset(&diffio, 0, sizeof(diffio));
+--- 925,938 ----
+ if (curtab->tp_diffbuf[idx_orig] != NULL)
+ break;
+ if (idx_orig == DB_COUNT)
+! goto theend;
+
+ // Only need to do something when there is another buffer.
+ for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
+ if (curtab->tp_diffbuf[idx_new] != NULL)
+ break;
+ if (idx_new == DB_COUNT)
+! goto theend;
+
+ // Only use the internal method if it did not fail for one of the buffers.
+ vim_memset(&diffio, 0, sizeof(diffio));
+***************
+*** 948,956 ****
+ // force updating cursor position on screen
+ curwin->w_valid_cursor.lnum = 0;
+
+! diff_redraw(TRUE);
+!
+! apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
+ }
+
+ /*
+--- 949,962 ----
+ // force updating cursor position on screen
+ curwin->w_valid_cursor.lnum = 0;
+
+! theend:
+! // A redraw is needed if there were diffs and they were cleared, or there
+! // are diffs now, which means they got updated.
+! if (had_diffs || curtab->tp_first_diff != NULL)
+! {
+! diff_redraw(TRUE);
+! apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
+! }
+ }
+
+ /*
+***************
+*** 2272,2278 ****
+ if ((diff_flags_new & DIFF_HORIZONTAL) && (diff_flags_new & DIFF_VERTICAL))
+ return FAIL;
+
+! /* If "icase" or "iwhite" was added or removed, need to update the diff. */
+ if (diff_flags != diff_flags_new || diff_algorithm != diff_algorithm_new)
+ FOR_ALL_TABPAGES(tp)
+ tp->tp_diff_invalid = TRUE;
+--- 2278,2285 ----
+ if ((diff_flags_new & DIFF_HORIZONTAL) && (diff_flags_new & DIFF_VERTICAL))
+ return FAIL;
+
+! // If flags were added or removed, or the algorithm was changed, need to
+! // update the diff.
+ if (diff_flags != diff_flags_new || diff_algorithm != diff_algorithm_new)
+ FOR_ALL_TABPAGES(tp)
+ tp->tp_diff_invalid = TRUE;
+***************
+*** 2845,2858 ****
+ diff_need_update = FALSE;
+ ex_diffupdate(NULL);
+ }
+!
+! /* Check that the cursor is on a valid character and update it's position.
+! * When there were filler lines the topline has become invalid. */
+! check_cursor();
+! changed_line_abv_curs();
+!
+! /* Also need to redraw the other buffers. */
+! diff_redraw(FALSE);
+ }
+
+ #ifdef FEAT_FOLDING
+--- 2852,2869 ----
+ diff_need_update = FALSE;
+ ex_diffupdate(NULL);
+ }
+! else
+! {
+! // Check that the cursor is on a valid character and update it's
+! // position. When there were filler lines the topline has become
+! // invalid.
+! check_cursor();
+! changed_line_abv_curs();
+!
+! // Also need to redraw the other buffers.
+! diff_redraw(FALSE);
+! apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
+! }
+ }
+
+ #ifdef FEAT_FOLDING
+*** ../vim-8.1.0401/src/version.c 2018-09-16 18:46:36.189127529 +0200
+--- src/version.c 2018-09-18 20:55:27.799635739 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 402,
+ /**/
+
+--
+If your nose runs, and your feet smell, you might be upside down.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0403 b/data/vim/patches/8.1.0403
new file mode 100644
index 000000000..a27814227
--- /dev/null
+++ b/data/vim/patches/8.1.0403
@@ -0,0 +1,45 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0403
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0403
+Problem: Header file missing from distribution.
+Solution: Add src/protodef.h.
+Files: Filelist
+
+
+*** ../vim-8.1.0402/Filelist 2018-09-10 21:15:34.637000672 +0200
+--- Filelist 2018-09-18 21:38:54.686006138 +0200
+***************
+*** 141,146 ****
+--- 141,147 ----
+ src/testdir/if_ver*.vim \
+ src/testdir/color_ramp.vim \
+ src/proto.h \
++ src/protodef.h \
+ src/proto/arabic.pro \
+ src/proto/beval.pro \
+ src/proto/blowfish.pro \
+*** ../vim-8.1.0402/src/version.c 2018-09-18 21:20:22.507148523 +0200
+--- src/version.c 2018-09-18 21:39:33.961691227 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 403,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+90. Instead of calling you to dinner, your spouse sends e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0404 b/data/vim/patches/8.1.0404
new file mode 100644
index 000000000..351e3096e
--- /dev/null
+++ b/data/vim/patches/8.1.0404
@@ -0,0 +1,69 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0404
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0404
+Problem: Accessing invalid memory with long argument name.
+Solution: Use item_count instead of checking for a terminating NULL.
+ (Dominique Pelle, closes #3444)
+Files: src/testdir/test_arglist.vim, src/version.c
+
+
+*** ../vim-8.1.0403/src/testdir/test_arglist.vim 2018-08-31 23:06:18.735841246 +0200
+--- src/testdir/test_arglist.vim 2018-09-18 21:48:47.705268287 +0200
+***************
+*** 411,413 ****
+--- 411,420 ----
+ call assert_equal('notexist Xx\ x runtest.vim', expand('##'))
+ call delete('Xx x')
+ endfunc
++
++ func Test_large_arg()
++ " Argument longer or equal to the number of columns used to cause
++ " access to invalid memory.
++ exe 'argadd ' .repeat('x', &columns)
++ args
++ endfunc
+*** ../vim-8.1.0403/src/version.c 2018-09-18 21:41:43.716652306 +0200
+--- src/version.c 2018-09-18 21:50:15.188571404 +0200
+***************
+*** 1725,1731 ****
+ if (Columns < width)
+ {
+ /* Not enough screen columns - show one per line */
+! for (i = 0; items[i] != NULL; ++i)
+ {
+ version_msg_wrap(items[i], i == current);
+ if (msg_col > 0)
+--- 1727,1733 ----
+ if (Columns < width)
+ {
+ /* Not enough screen columns - show one per line */
+! for (i = 0; i < item_count; ++i)
+ {
+ version_msg_wrap(items[i], i == current);
+ if (msg_col > 0)
+*** ../vim-8.1.0403/src/version.c 2018-09-18 21:41:43.716652306 +0200
+--- src/version.c 2018-09-18 21:50:15.188571404 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 404,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+91. It's Saturday afternoon in the middle of May and you
+ are on computer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0405 b/data/vim/patches/8.1.0405
new file mode 100644
index 000000000..c287e078b
--- /dev/null
+++ b/data/vim/patches/8.1.0405
@@ -0,0 +1,2286 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0405
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0405
+Problem: Too many #ifdefs for GTK.
+Solution: Define macros instead of using #ifdef. (Ken Takata, closes #3436)
+Files: src/gui_beval.c, src/gui_gtk.c, src/gui_gtk_f.c,
+ src/gui_gtk_x11.c, src/vim.h
+
+
+*** ../vim-8.1.0404/src/gui_beval.c 2018-09-11 21:30:05.249070508 +0200
+--- src/gui_beval.c 2018-09-18 22:23:38.699477631 +0200
+***************
+*** 244,259 ****
+ * This allows us to catch events independently of the signal handlers
+ * in gui_gtk_x11.c.
+ */
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(target), "event",
+ G_CALLBACK(target_event_cb),
+ beval);
+- # else
+- /* Should use GTK_OBJECT() here, but that causes a lint warning... */
+- gtk_signal_connect((GtkObject*)(target), "event",
+- GTK_SIGNAL_FUNC(target_event_cb),
+- beval);
+- # endif
+ /*
+ * Nasty: Key press events go to the main window thus the drawing area
+ * will never see them. This means we have to connect to the main window
+--- 244,252 ----
+***************
+*** 262,306 ****
+ if (gtk_socket_id == 0 && gui.mainwin != NULL
+ && gtk_widget_is_ancestor(target, gui.mainwin))
+ {
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.mainwin), "event",
+ G_CALLBACK(mainwin_event_cb),
+ beval);
+- # else
+- gtk_signal_connect((GtkObject*)(gui.mainwin), "event",
+- GTK_SIGNAL_FUNC(mainwin_event_cb),
+- beval);
+- # endif
+ }
+ }
+
+ static void
+ removeEventHandler(BalloonEval *beval)
+ {
+- /* LINTED: avoid warning: dubious operation on enum */
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_handlers_disconnect_by_func(G_OBJECT(beval->target),
+ FUNC2GENERIC(target_event_cb),
+ beval);
+- # else
+- gtk_signal_disconnect_by_func((GtkObject*)(beval->target),
+- GTK_SIGNAL_FUNC(target_event_cb),
+- beval);
+- # endif
+
+ if (gtk_socket_id == 0 && gui.mainwin != NULL
+ && gtk_widget_is_ancestor(beval->target, gui.mainwin))
+ {
+- /* LINTED: avoid warning: dubious operation on enum */
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_handlers_disconnect_by_func(G_OBJECT(gui.mainwin),
+ FUNC2GENERIC(mainwin_event_cb),
+ beval);
+- # else
+- gtk_signal_disconnect_by_func((GtkObject*)(gui.mainwin),
+- GTK_SIGNAL_FUNC(mainwin_event_cb),
+- beval);
+- # endif
+ }
+ }
+
+--- 255,279 ----
+***************
+*** 433,445 ****
+ }
+ else
+ {
+- # if GTK_CHECK_VERSION(3,0,0)
+ beval->timerID = g_timeout_add((guint)p_bdlay,
+ &timeout_cb, beval);
+- # else
+- beval->timerID = gtk_timeout_add((guint32)p_bdlay,
+- &timeout_cb, beval);
+- # endif
+ }
+ }
+ }
+--- 406,413 ----
+***************
+*** 1039,1049 ****
+
+ if (beval->timerID != 0)
+ {
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_source_remove(beval->timerID);
+- # else
+- gtk_timeout_remove(beval->timerID);
+- # endif
+ beval->timerID = 0;
+ }
+ beval->showState = ShS_NEUTRAL;
+--- 1007,1013 ----
+***************
+*** 1055,1071 ****
+ beval->balloonShell = gtk_window_new(GTK_WINDOW_POPUP);
+
+ gtk_widget_set_app_paintable(beval->balloonShell, TRUE);
+- # if GTK_CHECK_VERSION(3,0,0)
+ gtk_window_set_resizable(GTK_WINDOW(beval->balloonShell), FALSE);
+- # else
+- gtk_window_set_policy(GTK_WINDOW(beval->balloonShell), FALSE, FALSE, TRUE);
+- # endif
+ gtk_widget_set_name(beval->balloonShell, "gtk-tooltips");
+- # if GTK_CHECK_VERSION(3,0,0)
+ gtk_container_set_border_width(GTK_CONTAINER(beval->balloonShell), 4);
+- # else
+- gtk_container_border_width(GTK_CONTAINER(beval->balloonShell), 4);
+- # endif
+
+ # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(beval->balloonShell), "draw",
+--- 1019,1027 ----
+*** ../vim-8.1.0404/src/gui_gtk.c 2018-09-11 21:30:05.249070508 +0200
+--- src/gui_gtk.c 2018-09-18 22:23:38.699477631 +0200
+***************
+*** 756,768 ****
+ # endif
+
+ if (gtk_socket_id != 0)
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(menu->id), "focus-in-event",
+ G_CALLBACK(toolbar_button_focus_in_event), NULL);
+- # else
+- gtk_signal_connect(GTK_OBJECT(menu->id), "focus_in_event",
+- GTK_SIGNAL_FUNC(toolbar_button_focus_in_event), NULL);
+- # endif
+
+ CONVERT_TO_UTF8_FREE(text);
+ CONVERT_TO_UTF8_FREE(tooltip);
+--- 756,763 ----
+***************
+*** 792,803 ****
+ gtk_widget_set_sensitive(menu->id, FALSE);
+ # endif
+ gtk_widget_show(menu->id);
+- # if GTK_CHECK_VERSION(3,0,0)
+ gtk_menu_shell_insert(GTK_MENU_SHELL(parent->submenu_id),
+ menu->id, idx);
+- # else
+- gtk_menu_insert(GTK_MENU(parent->submenu_id), menu->id, idx);
+- # endif
+
+ return;
+ }
+--- 787,794 ----
+***************
+*** 805,825 ****
+ /* Add textual menu item. */
+ menu_item_new(menu, parent->submenu_id);
+ gtk_widget_show(menu->id);
+- # if GTK_CHECK_VERSION(3,0,0)
+ gtk_menu_shell_insert(GTK_MENU_SHELL(parent->submenu_id),
+ menu->id, idx);
+- # else
+- gtk_menu_insert(GTK_MENU(parent->submenu_id), menu->id, idx);
+- # endif
+
+ if (menu->id != NULL)
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(menu->id), "activate",
+ G_CALLBACK(menu_item_activate), menu);
+- # else
+- gtk_signal_connect(GTK_OBJECT(menu->id), "activate",
+- GTK_SIGNAL_FUNC(menu_item_activate), menu);
+- # endif
+ }
+ }
+ #endif /* FEAT_MENU */
+--- 796,807 ----
+***************
+*** 1000,1006 ****
+
+ adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id));
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_adjustment_set_lower(adjustment, 0.0);
+ gtk_adjustment_set_value(adjustment, val);
+ gtk_adjustment_set_upper(adjustment, max + 1);
+--- 982,987 ----
+***************
+*** 1008,1041 ****
+ gtk_adjustment_set_page_increment(adjustment,
+ size < 3L ? 1L : size - 2L);
+ gtk_adjustment_set_step_increment(adjustment, 1.0);
+- #else
+- adjustment->lower = 0.0;
+- adjustment->value = val;
+- adjustment->upper = max + 1;
+- adjustment->page_size = size;
+- adjustment->page_increment = size < 3L ? 1L : size - 2L;
+- adjustment->step_increment = 1.0;
+- #endif
+
+! #if GTK_CHECK_VERSION(3,0,0)
+! g_signal_handler_block(G_OBJECT(adjustment),
+! (gulong)sb->handler_id);
+! #else
+! g_signal_handler_block(GTK_OBJECT(adjustment),
+! (gulong)sb->handler_id);
+! #endif
+
+ #if !GTK_CHECK_VERSION(3,18,0)
+ gtk_adjustment_changed(adjustment);
+ #endif
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_handler_unblock(G_OBJECT(adjustment),
+ (gulong)sb->handler_id);
+- #else
+- g_signal_handler_unblock(GTK_OBJECT(adjustment),
+- (gulong)sb->handler_id);
+- #endif
+ }
+ }
+
+--- 989,1003 ----
+ gtk_adjustment_set_page_increment(adjustment,
+ size < 3L ? 1L : size - 2L);
+ gtk_adjustment_set_step_increment(adjustment, 1.0);
+
+! g_signal_handler_block(G_OBJECT(adjustment), (gulong)sb->handler_id);
+
+ #if !GTK_CHECK_VERSION(3,18,0)
+ gtk_adjustment_changed(adjustment);
+ #endif
+
+ g_signal_handler_unblock(G_OBJECT(adjustment),
+ (gulong)sb->handler_id);
+ }
+ }
+
+***************
+*** 1063,1073 ****
+ #endif
+
+ sb = gui_find_scrollbar((long)data);
+- #if GTK_CHECK_VERSION(3,0,0)
+ value = gtk_adjustment_get_value(adjustment);
+- #else
+- value = (long)adjustment->value;
+- #endif
+ #if !GTK_CHECK_VERSION(3,0,0)
+ /*
+ * The dragging argument must be right for the scrollbar to work with
+--- 1025,1031 ----
+***************
+*** 1136,1161 ****
+ {
+ GtkAdjustment *adjustment;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_can_focus(sb->id, FALSE);
+- #else
+- GTK_WIDGET_UNSET_FLAGS(sb->id, GTK_CAN_FOCUS);
+- #endif
+ gtk_form_put(GTK_FORM(gui.formwin), sb->id, 0, 0);
+
+ adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id));
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ sb->handler_id = g_signal_connect(
+ G_OBJECT(adjustment), "value-changed",
+ G_CALLBACK(adjustment_value_changed),
+ GINT_TO_POINTER(sb->ident));
+- #else
+- sb->handler_id = gtk_signal_connect(
+- GTK_OBJECT(adjustment), "value_changed",
+- GTK_SIGNAL_FUNC(adjustment_value_changed),
+- GINT_TO_POINTER(sb->ident));
+- #endif
+ gui_mch_update();
+ }
+ }
+--- 1094,1108 ----
+***************
+*** 1803,1809 ****
+
+ /* Allow activation of mnemonic accelerators without pressing <Alt> when
+ * there is no textfield. Handle pressing Esc. */
+! g_signal_connect(G_OBJECT(dialog), "key_press_event",
+ G_CALLBACK(&dialog_key_press_event_cb), &dialoginfo);
+
+ if (def_but > 0)
+--- 1750,1756 ----
+
+ /* Allow activation of mnemonic accelerators without pressing <Alt> when
+ * there is no textfield. Handle pressing Esc. */
+! g_signal_connect(G_OBJECT(dialog), "key-press-event",
+ G_CALLBACK(&dialog_key_press_event_cb), &dialoginfo);
+
+ if (def_but > 0)
+***************
+*** 2203,2219 ****
+ if (entry_text != NULL)
+ {
+ gtk_entry_set_text(GTK_ENTRY(frdp->what), (char *)entry_text);
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->wword),
+ (gboolean)wword);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->mcase),
+ (gboolean)mcase);
+- #else
+- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->wword),
+- (gboolean)wword);
+- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->mcase),
+- (gboolean)mcase);
+- #endif
+ }
+ gtk_window_present(GTK_WINDOW(frdp->dialog));
+
+--- 2150,2159 ----
+***************
+*** 2278,2288 ****
+ table = gtk_table_new(1024, 3, FALSE);
+ #endif
+ gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0);
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+- #else
+- gtk_container_border_width(GTK_CONTAINER(table), 4);
+- #endif
+
+ tmp = gtk_label_new(CONV(_("Find what:")));
+ #if GTK_CHECK_VERSION(3,16,0)
+--- 2218,2224 ----
+***************
+*** 2315,2333 ****
+ sensitive = (entry_text != NULL && entry_text[0] != NUL);
+ if (entry_text != NULL)
+ gtk_entry_set_text(GTK_ENTRY(frdp->what), (char *)entry_text);
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(frdp->what), "changed",
+ G_CALLBACK(entry_changed_cb), frdp->dialog);
+ g_signal_connect_after(G_OBJECT(frdp->what), "key-press-event",
+ G_CALLBACK(find_key_press_event),
+ (gpointer) frdp);
+- #else
+- gtk_signal_connect(GTK_OBJECT(frdp->what), "changed",
+- GTK_SIGNAL_FUNC(entry_changed_cb), frdp->dialog);
+- gtk_signal_connect_after(GTK_OBJECT(frdp->what), "key_press_event",
+- GTK_SIGNAL_FUNC(find_key_press_event),
+- (gpointer) frdp);
+- #endif
+ #if GTK_CHECK_VERSION(3,4,0)
+ gtk_grid_attach(GTK_GRID(table), frdp->what, 2, 0, 5, 1);
+ #else
+--- 2251,2261 ----
+***************
+*** 2365,2385 ****
+ GTK_FILL, GTK_EXPAND, 2, 2);
+ #endif
+ frdp->with = gtk_entry_new();
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(frdp->with), "activate",
+ G_CALLBACK(find_replace_cb),
+ GINT_TO_POINTER(FRD_R_FINDNEXT));
+ g_signal_connect_after(G_OBJECT(frdp->with), "key-press-event",
+ G_CALLBACK(find_key_press_event),
+ (gpointer) frdp);
+- #else
+- gtk_signal_connect(GTK_OBJECT(frdp->with), "activate",
+- GTK_SIGNAL_FUNC(find_replace_cb),
+- GINT_TO_POINTER(FRD_R_FINDNEXT));
+- gtk_signal_connect_after(GTK_OBJECT(frdp->with), "key_press_event",
+- GTK_SIGNAL_FUNC(find_key_press_event),
+- (gpointer) frdp);
+- #endif
+ #if GTK_CHECK_VERSION(3,4,0)
+ gtk_grid_attach(GTK_GRID(table), frdp->with, 2, 1, 5, 1);
+ #else
+--- 2293,2304 ----
+***************
+*** 2391,2429 ****
+ * Make the entry activation only change the input focus onto the
+ * with item.
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(frdp->what), "activate",
+ G_CALLBACK(entry_activate_cb), frdp->with);
+- #else
+- gtk_signal_connect(GTK_OBJECT(frdp->what), "activate",
+- GTK_SIGNAL_FUNC(entry_activate_cb), frdp->with);
+- #endif
+ }
+ else
+ {
+ /*
+ * Make the entry activation do the search.
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(frdp->what), "activate",
+ G_CALLBACK(find_replace_cb),
+ GINT_TO_POINTER(FRD_FINDNEXT));
+- #else
+- gtk_signal_connect(GTK_OBJECT(frdp->what), "activate",
+- GTK_SIGNAL_FUNC(find_replace_cb),
+- GINT_TO_POINTER(FRD_FINDNEXT));
+- #endif
+ }
+
+ /* whole word only button */
+ frdp->wword = gtk_check_button_new_with_label(CONV(_("Match whole word only")));
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->wword),
+ (gboolean)wword);
+- #else
+- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->wword),
+- (gboolean)wword);
+- #endif
+ if (do_replace)
+ #if GTK_CHECK_VERSION(3,4,0)
+ gtk_grid_attach(GTK_GRID(table), frdp->wword, 0, 2, 5, 1);
+--- 2310,2332 ----
+***************
+*** 2441,2453 ****
+
+ /* match case button */
+ frdp->mcase = gtk_check_button_new_with_label(CONV(_("Match case")));
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->mcase),
+ (gboolean)mcase);
+- #else
+- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->mcase),
+- (gboolean)mcase);
+- #endif
+ if (do_replace)
+ #if GTK_CHECK_VERSION(3,4,0)
+ gtk_grid_attach(GTK_GRID(table), frdp->mcase, 0, 3, 5, 1);
+--- 2344,2351 ----
+***************
+*** 2484,2513 ****
+ #else
+ vbox = gtk_vbox_new(FALSE, 0);
+ #endif
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 0);
+- #else
+- gtk_container_border_width(GTK_CONTAINER(vbox), 0);
+- #endif
+ gtk_container_add(GTK_CONTAINER(tmp), vbox);
+
+ /* 'Up' and 'Down' buttons */
+ frdp->up = gtk_radio_button_new_with_label(NULL, CONV(_("Up")));
+ gtk_box_pack_start(GTK_BOX(vbox), frdp->up, TRUE, TRUE, 0);
+- #if GTK_CHECK_VERSION(3,0,0)
+ frdp->down = gtk_radio_button_new_with_label(
+ gtk_radio_button_get_group(GTK_RADIO_BUTTON(frdp->up)),
+ CONV(_("Down")));
+- #else
+- frdp->down = gtk_radio_button_new_with_label(
+- gtk_radio_button_group(GTK_RADIO_BUTTON(frdp->up)),
+- CONV(_("Down")));
+- #endif
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->down), TRUE);
+- #else
+- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->down), TRUE);
+- #endif
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 2);
+ gtk_box_pack_start(GTK_BOX(vbox), frdp->down, TRUE, TRUE, 0);
+
+--- 2382,2397 ----
+***************
+*** 2517,2527 ****
+ #else
+ actionarea = gtk_vbutton_box_new();
+ #endif
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_container_set_border_width(GTK_CONTAINER(actionarea), 2);
+- #else
+- gtk_container_border_width(GTK_CONTAINER(actionarea), 2);
+- #endif
+ gtk_box_pack_end(GTK_BOX(hbox), actionarea, FALSE, FALSE, 0);
+
+ /* 'Find Next' button */
+--- 2401,2407 ----
+***************
+*** 2532,2554 ****
+ #endif
+ gtk_widget_set_sensitive(frdp->find, sensitive);
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(frdp->find), "clicked",
+ G_CALLBACK(find_replace_cb),
+ (do_replace) ? GINT_TO_POINTER(FRD_R_FINDNEXT)
+ : GINT_TO_POINTER(FRD_FINDNEXT));
+- #else
+- gtk_signal_connect(GTK_OBJECT(frdp->find), "clicked",
+- GTK_SIGNAL_FUNC(find_replace_cb),
+- (do_replace) ? GINT_TO_POINTER(FRD_R_FINDNEXT)
+- : GINT_TO_POINTER(FRD_FINDNEXT));
+- #endif
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_can_default(frdp->find, TRUE);
+- #else
+- GTK_WIDGET_SET_FLAGS(frdp->find, GTK_CAN_DEFAULT);
+- #endif
+ gtk_box_pack_start(GTK_BOX(actionarea), frdp->find, FALSE, FALSE, 0);
+ gtk_widget_grab_default(frdp->find);
+
+--- 2412,2423 ----
+***************
+*** 2561,2581 ****
+ frdp->replace = create_image_button(GTK_STOCK_CONVERT, _("Replace"));
+ #endif
+ gtk_widget_set_sensitive(frdp->replace, sensitive);
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_can_default(frdp->find, TRUE);
+- #else
+- GTK_WIDGET_SET_FLAGS(frdp->replace, GTK_CAN_DEFAULT);
+- #endif
+ gtk_box_pack_start(GTK_BOX(actionarea), frdp->replace, FALSE, FALSE, 0);
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(frdp->replace), "clicked",
+ G_CALLBACK(find_replace_cb),
+ GINT_TO_POINTER(FRD_REPLACE));
+- #else
+- gtk_signal_connect(GTK_OBJECT(frdp->replace), "clicked",
+- GTK_SIGNAL_FUNC(find_replace_cb),
+- GINT_TO_POINTER(FRD_REPLACE));
+- #endif
+
+ /* 'Replace All' button */
+ #if GTK_CHECK_VERSION(3,10,0)
+--- 2430,2440 ----
+***************
+*** 2584,2604 ****
+ frdp->all = create_image_button(GTK_STOCK_CONVERT, _("Replace All"));
+ #endif
+ gtk_widget_set_sensitive(frdp->all, sensitive);
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_can_default(frdp->all, TRUE);
+- #else
+- GTK_WIDGET_SET_FLAGS(frdp->all, GTK_CAN_DEFAULT);
+- #endif
+ gtk_box_pack_start(GTK_BOX(actionarea), frdp->all, FALSE, FALSE, 0);
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(frdp->all), "clicked",
+ G_CALLBACK(find_replace_cb),
+ GINT_TO_POINTER(FRD_REPLACEALL));
+- #else
+- gtk_signal_connect(GTK_OBJECT(frdp->all), "clicked",
+- GTK_SIGNAL_FUNC(find_replace_cb),
+- GINT_TO_POINTER(FRD_REPLACEALL));
+- #endif
+ }
+
+ /* 'Cancel' button */
+--- 2443,2453 ----
+***************
+*** 2607,2633 ****
+ #else
+ tmp = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ #endif
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_can_default(tmp, TRUE);
+- #else
+- GTK_WIDGET_SET_FLAGS(tmp, GTK_CAN_DEFAULT);
+- #endif
+ gtk_box_pack_end(GTK_BOX(actionarea), tmp, FALSE, FALSE, 0);
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect_swapped(G_OBJECT(tmp),
+ "clicked", G_CALLBACK(gtk_widget_hide),
+ G_OBJECT(frdp->dialog));
+ g_signal_connect_swapped(G_OBJECT(frdp->dialog),
+ "delete-event", G_CALLBACK(gtk_widget_hide_on_delete),
+ G_OBJECT(frdp->dialog));
+- #else
+- gtk_signal_connect_object(GTK_OBJECT(tmp),
+- "clicked", GTK_SIGNAL_FUNC(gtk_widget_hide),
+- GTK_OBJECT(frdp->dialog));
+- gtk_signal_connect_object(GTK_OBJECT(frdp->dialog),
+- "delete_event", GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
+- GTK_OBJECT(frdp->dialog));
+- #endif
+
+ #if GTK_CHECK_VERSION(3,2,0)
+ tmp = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
+--- 2456,2469 ----
+***************
+*** 2693,2715 ****
+ }
+
+ find_text = (char_u *)gtk_entry_get_text(GTK_ENTRY(sfr->what));
+- #if GTK_CHECK_VERSION(3,0,0)
+ direction_down = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sfr->down));
+- #else
+- direction_down = GTK_TOGGLE_BUTTON(sfr->down)->active;
+- #endif
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sfr->wword)))
+- #else
+- if (GTK_TOGGLE_BUTTON(sfr->wword)->active)
+- #endif
+ flags |= FRD_WHOLE_WORD;
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sfr->mcase)))
+- #else
+- if (GTK_TOGGLE_BUTTON(sfr->mcase)->active)
+- #endif
+ flags |= FRD_MATCH_CASE;
+
+ repl_text = CONVERT_FROM_UTF8(repl_text);
+--- 2529,2539 ----
+*** ../vim-8.1.0404/src/gui_gtk_f.c 2018-09-11 21:30:05.249070508 +0200
+--- src/gui_gtk_f.c 2018-09-18 22:23:38.699477631 +0200
+***************
+*** 150,170 ****
+ * that gtk_widget_set_parent() realizes the widget if it's visible
+ * and its parent is mapped.
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_realized(GTK_WIDGET(form)))
+- #else
+- if (GTK_WIDGET_REALIZED(form))
+- #endif
+ gtk_form_attach_child_window(form, child);
+
+ gtk_widget_set_parent(child_widget, GTK_WIDGET(form));
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_realized(GTK_WIDGET(form))
+ && !gtk_widget_get_realized(child_widget))
+- #else
+- if (GTK_WIDGET_REALIZED(form) && !GTK_WIDGET_REALIZED(child_widget))
+- #endif
+ gtk_form_realize_child(form, child);
+
+ gtk_form_position_child(form, child, TRUE);
+--- 150,162 ----
+***************
+*** 300,331 ****
+ GtkForm *form;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+
+ g_return_if_fail(GTK_IS_FORM(widget));
+
+ form = GTK_FORM(widget);
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_realized(widget, TRUE);
+- #else
+- GTK_WIDGET_SET_FLAGS(form, GTK_REALIZED);
+- #endif
+
+ attributes.window_type = GDK_WINDOW_CHILD;
+! #if GTK_CHECK_VERSION(3,0,0)
+! {
+! GtkAllocation allocation;
+! gtk_widget_get_allocation(widget, &allocation);
+! attributes.x = allocation.x;
+! attributes.y = allocation.y;
+! attributes.width = allocation.width;
+! attributes.height = allocation.height;
+! }
+! #else
+! attributes.x = widget->allocation.x;
+! attributes.y = widget->allocation.y;
+! attributes.width = widget->allocation.width;
+! attributes.height = widget->allocation.height;
+! #endif
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.visual = gtk_widget_get_visual(widget);
+ #if GTK_CHECK_VERSION(3,0,0)
+--- 292,310 ----
+ GtkForm *form;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
++ GtkAllocation allocation;
+
+ g_return_if_fail(GTK_IS_FORM(widget));
+
+ form = GTK_FORM(widget);
+ gtk_widget_set_realized(widget, TRUE);
+
++ gtk_widget_get_allocation(widget, &allocation);
+ attributes.window_type = GDK_WINDOW_CHILD;
+! attributes.x = allocation.x;
+! attributes.y = allocation.y;
+! attributes.width = allocation.width;
+! attributes.height = allocation.height;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.visual = gtk_widget_get_visual(widget);
+ #if GTK_CHECK_VERSION(3,0,0)
+***************
+*** 341,354 ****
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+ #endif
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_window(widget,
+ gdk_window_new(gtk_widget_get_parent_window(widget),
+ &attributes, attributes_mask));
+- #else
+- widget->window = gdk_window_new(gtk_widget_get_parent_window(widget),
+- &attributes, attributes_mask);
+- #endif
+ gdk_window_set_user_data(gtk_widget_get_window(widget), widget);
+
+ attributes.x = 0;
+--- 320,328 ----
+***************
+*** 382,392 ****
+
+ gtk_form_attach_child_window(form, child);
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_visible(child->widget))
+- #else
+- if (GTK_WIDGET_VISIBLE(child->widget))
+- #endif
+ gtk_form_realize_child(form, child);
+ }
+ }
+--- 356,362 ----
+***************
+*** 410,420 ****
+
+ form = GTK_FORM(widget);
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_mapped(widget, TRUE);
+- #else
+- GTK_WIDGET_SET_FLAGS(widget, GTK_MAPPED);
+- #endif
+
+ gdk_window_show(gtk_widget_get_window(widget));
+ gdk_window_show(form->bin_window);
+--- 380,386 ----
+***************
+*** 423,435 ****
+ {
+ GtkFormChild *child = tmp_list->data;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_visible(child->widget)
+ && !gtk_widget_get_mapped(child->widget))
+- #else
+- if (GTK_WIDGET_VISIBLE(child->widget)
+- && !GTK_WIDGET_MAPPED(child->widget))
+- #endif
+ gtk_widget_map(child->widget);
+ }
+ }
+--- 389,396 ----
+***************
+*** 456,476 ****
+
+ if (child->window != NULL)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
+ FUNC2GENERIC(gtk_form_child_map),
+ child);
+ g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
+ FUNC2GENERIC(gtk_form_child_unmap),
+ child);
+- #else
+- gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
+- GTK_SIGNAL_FUNC(gtk_form_child_map),
+- child);
+- gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
+- GTK_SIGNAL_FUNC(gtk_form_child_unmap),
+- child);
+- #endif
+
+ gdk_window_set_user_data(child->window, NULL);
+ gdk_window_destroy(child->window);
+--- 417,428 ----
+***************
+*** 534,567 ****
+ GList *tmp_list;
+ GtkForm *form;
+ gboolean need_reposition;
+- #if GTK_CHECK_VERSION(3,0,0)
+ GtkAllocation cur_alloc;
+- #endif
+
+ g_return_if_fail(GTK_IS_FORM(widget));
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_get_allocation(widget, &cur_alloc);
+
+ if (cur_alloc.x == allocation->x
+ && cur_alloc.y == allocation->y
+ && cur_alloc.width == allocation->width
+ && cur_alloc.height == allocation->height)
+- #else
+- if (widget->allocation.x == allocation->x
+- && widget->allocation.y == allocation->y
+- && widget->allocation.width == allocation->width
+- && widget->allocation.height == allocation->height)
+- #endif
+ return;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ need_reposition = cur_alloc.width != allocation->width
+ || cur_alloc.height != allocation->height;
+- #else
+- need_reposition = widget->allocation.width != allocation->width
+- || widget->allocation.height != allocation->height;
+- #endif
+ form = GTK_FORM(widget);
+
+ if (need_reposition)
+--- 486,505 ----
+***************
+*** 577,587 ****
+ }
+ }
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_realized(widget))
+- #else
+- if (GTK_WIDGET_REALIZED(widget))
+- #endif
+ {
+ gdk_window_move_resize(gtk_widget_get_window(widget),
+ allocation->x, allocation->y,
+--- 515,521 ----
+***************
+*** 590,600 ****
+ 0, 0,
+ allocation->width, allocation->height);
+ }
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_allocation(widget, allocation);
+- #else
+- widget->allocation = *allocation;
+- #endif
+ if (need_reposition)
+ gtk_form_send_configure(form);
+ }
+--- 524,530 ----
+***************
+*** 697,713 ****
+ #endif
+ if (child->window)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
+ FUNC2GENERIC(&gtk_form_child_map), child);
+ g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
+ FUNC2GENERIC(&gtk_form_child_unmap), child);
+- #else
+- gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
+- GTK_SIGNAL_FUNC(&gtk_form_child_map), child);
+- gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
+- GTK_SIGNAL_FUNC(&gtk_form_child_unmap), child);
+- #endif
+
+ /* FIXME: This will cause problems for reparenting NO_WINDOW
+ * widgets out of a GtkForm
+--- 627,636 ----
+***************
+*** 760,793 ****
+ if (child->window != NULL)
+ return; /* been there, done that */
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (!gtk_widget_get_has_window(child->widget))
+- #else
+- if (GTK_WIDGET_NO_WINDOW(child->widget))
+- #endif
+ {
+ GtkWidget *widget;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+
+ widget = GTK_WIDGET(form);
+
+- attributes.window_type = GDK_WINDOW_CHILD;
+- attributes.x = child->x;
+- attributes.y = child->y;
+ #if GTK_CHECK_VERSION(3,0,0)
+! {
+! GtkRequisition requisition;
+!
+! gtk_widget_get_preferred_size(child->widget, &requisition, NULL);
+!
+! attributes.width = requisition.width;
+! attributes.height = requisition.height;
+! }
+ #else
+! attributes.width = child->widget->requisition.width;
+! attributes.height = child->widget->requisition.height;
+ #endif
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.visual = gtk_widget_get_visual(widget);
+ #if !GTK_CHECK_VERSION(3,0,0)
+--- 683,707 ----
+ if (child->window != NULL)
+ return; /* been there, done that */
+
+ if (!gtk_widget_get_has_window(child->widget))
+ {
+ GtkWidget *widget;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
++ GtkRequisition requisition;
+
+ widget = GTK_WIDGET(form);
+
+ #if GTK_CHECK_VERSION(3,0,0)
+! gtk_widget_get_preferred_size(child->widget, &requisition, NULL);
+ #else
+! requisition = child->widget->requisition;
+ #endif
++ attributes.window_type = GDK_WINDOW_CHILD;
++ attributes.x = child->x;
++ attributes.y = child->y;
++ attributes.width = requisition.width;
++ attributes.height = requisition.height;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.visual = gtk_widget_get_visual(widget);
+ #if !GTK_CHECK_VERSION(3,0,0)
+***************
+*** 824,846 ****
+ * Install signal handlers to map/unmap child->window
+ * alongside with the actual widget.
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(child->widget), "map",
+ G_CALLBACK(&gtk_form_child_map), child);
+ g_signal_connect(G_OBJECT(child->widget), "unmap",
+ G_CALLBACK(&gtk_form_child_unmap), child);
+- #else
+- gtk_signal_connect(GTK_OBJECT(child->widget), "map",
+- GTK_SIGNAL_FUNC(&gtk_form_child_map), child);
+- gtk_signal_connect(GTK_OBJECT(child->widget), "unmap",
+- GTK_SIGNAL_FUNC(&gtk_form_child_unmap), child);
+- #endif
+ }
+- #if GTK_CHECK_VERSION(3,0,0)
+ else if (!gtk_widget_get_realized(child->widget))
+- #else
+- else if (!GTK_WIDGET_REALIZED(child->widget))
+- #endif
+ {
+ gtk_widget_set_parent_window(child->widget, form->bin_window);
+ }
+--- 738,749 ----
+***************
+*** 868,885 ****
+ {
+ if (!child->mapped)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_mapped(GTK_WIDGET(form))
+ && gtk_widget_get_visible(child->widget))
+- #else
+- if (GTK_WIDGET_MAPPED(form) && GTK_WIDGET_VISIBLE(child->widget))
+- #endif
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (!gtk_widget_get_mapped(child->widget))
+- #else
+- if (!GTK_WIDGET_MAPPED(child->widget))
+- #endif
+ gtk_widget_map(child->widget);
+
+ child->mapped = TRUE;
+--- 771,780 ----
+***************
+*** 890,920 ****
+ if (force_allocate)
+ {
+ GtkAllocation allocation;
+- #if GTK_CHECK_VERSION(3,0,0)
+ GtkRequisition requisition;
+
+ gtk_widget_get_preferred_size(child->widget, &requisition, NULL);
+ #endif
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (!gtk_widget_get_has_window(child->widget))
+- #else
+- if (GTK_WIDGET_NO_WINDOW(child->widget))
+- #endif
+ {
+ if (child->window)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_move_resize(child->window,
+ x, y,
+ requisition.width,
+ requisition.height);
+- #else
+- gdk_window_move_resize(child->window,
+- x, y,
+- child->widget->requisition.width,
+- child->widget->requisition.height);
+- #endif
+ }
+
+ allocation.x = 0;
+--- 785,806 ----
+ if (force_allocate)
+ {
+ GtkAllocation allocation;
+ GtkRequisition requisition;
+
++ #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_get_preferred_size(child->widget, &requisition, NULL);
++ #else
++ requisition = child->widget->requisition;
+ #endif
+
+ if (!gtk_widget_get_has_window(child->widget))
+ {
+ if (child->window)
+ {
+ gdk_window_move_resize(child->window,
+ x, y,
+ requisition.width,
+ requisition.height);
+ }
+
+ allocation.x = 0;
+***************
+*** 926,938 ****
+ allocation.y = y;
+ }
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ allocation.width = requisition.width;
+ allocation.height = requisition.height;
+- #else
+- allocation.width = child->widget->requisition.width;
+- allocation.height = child->widget->requisition.height;
+- #endif
+
+ gtk_widget_size_allocate(child->widget, &allocation);
+ }
+--- 812,819 ----
+***************
+*** 943,953 ****
+ {
+ child->mapped = FALSE;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_mapped(child->widget))
+- #else
+- if (GTK_WIDGET_MAPPED(child->widget))
+- #endif
+ gtk_widget_unmap(child->widget);
+ }
+ }
+--- 824,830 ----
+***************
+*** 981,1008 ****
+ {
+ GtkWidget *widget;
+ GdkEventConfigure event;
+
+ widget = GTK_WIDGET(form);
+
+ event.type = GDK_CONFIGURE;
+- #if GTK_CHECK_VERSION(3,0,0)
+ event.window = gtk_widget_get_window(widget);
+! {
+! GtkAllocation allocation;
+!
+! gtk_widget_get_allocation(widget, &allocation);
+! event.x = allocation.x;
+! event.y = allocation.y;
+! event.width = allocation.width;
+! event.height = allocation.height;
+! }
+! #else
+! event.window = widget->window;
+! event.x = widget->allocation.x;
+! event.y = widget->allocation.y;
+! event.width = widget->allocation.width;
+! event.height = widget->allocation.height;
+! #endif
+
+ gtk_main_do_event((GdkEvent*)&event);
+ }
+--- 858,874 ----
+ {
+ GtkWidget *widget;
+ GdkEventConfigure event;
++ GtkAllocation allocation;
+
+ widget = GTK_WIDGET(form);
+
++ gtk_widget_get_allocation(widget, &allocation);
+ event.type = GDK_CONFIGURE;
+ event.window = gtk_widget_get_window(widget);
+! event.x = allocation.x;
+! event.y = allocation.y;
+! event.width = allocation.width;
+! event.height = allocation.height;
+
+ gtk_main_do_event((GdkEvent*)&event);
+ }
+*** ../vim-8.1.0404/src/gui_gtk_x11.c 2018-09-11 21:30:05.253070476 +0200
+--- src/gui_gtk_x11.c 2018-09-18 22:23:38.699477631 +0200
+***************
+*** 804,814 ****
+ }
+ }
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ typedef gboolean timeout_cb_type;
+- #else
+- typedef gint timeout_cb_type;
+- #endif
+
+ /*
+ * Start a timer that will invoke the specified callback.
+--- 804,810 ----
+***************
+*** 817,837 ****
+ static guint
+ timeout_add(int time, timeout_cb_type (*callback)(gpointer), int *flagp)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ return g_timeout_add((guint)time, (GSourceFunc)callback, flagp);
+- #else
+- return gtk_timeout_add((guint32)time, (GtkFunction)callback, flagp);
+- #endif
+ }
+
+ static void
+ timeout_remove(guint timer)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_source_remove(timer);
+- #else
+- gtk_timeout_remove(timer);
+- #endif
+ }
+
+
+--- 813,825 ----
+***************
+*** 974,984 ****
+ gui_mch_start_blink();
+
+ /* make sure keyboard input goes there */
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_socket_id == 0 || !gtk_widget_has_focus(gui.drawarea))
+- #else
+- if (gtk_socket_id == 0 || !GTK_WIDGET_HAS_FOCUS(gui.drawarea))
+- #endif
+ gtk_widget_grab_focus(gui.drawarea);
+
+ return FALSE;
+--- 962,968 ----
+***************
+*** 1418,1439 ****
+ int len;
+ int motion_type = MAUTO;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_selection_data_get_selection(data) == clip_plus.gtk_sel_atom)
+- #else
+- if (data->selection == clip_plus.gtk_sel_atom)
+- #endif
+ cbd = &clip_plus;
+ else
+ cbd = &clip_star;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ text = (char_u *)gtk_selection_data_get_data(data);
+ len = gtk_selection_data_get_length(data);
+- #else
+- text = (char_u *)data->data;
+- len = data->length;
+- #endif
+
+ if (text == NULL || len <= 0)
+ {
+--- 1402,1414 ----
+***************
+*** 1443,1462 ****
+ return;
+ }
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_selection_data_get_data_type(data) == vim_atom)
+- #else
+- if (data->type == vim_atom)
+- #endif
+ {
+ motion_type = *text++;
+ --len;
+ }
+- #if GTK_CHECK_VERSION(3,0,0)
+ else if (gtk_selection_data_get_data_type(data) == vimenc_atom)
+- #else
+- else if (data->type == vimenc_atom)
+- #endif
+ {
+ char_u *enc;
+ vimconv_T conv;
+--- 1418,1429 ----
+***************
+*** 1547,1558 ****
+ GdkAtom type;
+ VimClipboard *cbd;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_selection_data_get_selection(selection_data)
+ == clip_plus.gtk_sel_atom)
+- #else
+- if (selection_data->selection == clip_plus.gtk_sel_atom)
+- #endif
+ cbd = &clip_plus;
+ else
+ cbd = &clip_star;
+--- 1514,1521 ----
+***************
+*** 1785,1793 ****
+ {
+ int button;
+ int_u vim_modifiers;
+- #if GTK_CHECK_VERSION(3,0,0)
+ GtkAllocation allocation;
+- #endif
+
+ button = (state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK |
+ GDK_BUTTON3_MASK | GDK_BUTTON4_MASK |
+--- 1748,1754 ----
+***************
+*** 1814,1830 ****
+ /*
+ * Auto repeat timer handling.
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_get_allocation(gui.drawarea, &allocation);
+
+ if (x < 0 || y < 0
+ || x >= allocation.width
+ || y >= allocation.height)
+- #else
+- if (x < 0 || y < 0
+- || x >= gui.drawarea->allocation.width
+- || y >= gui.drawarea->allocation.height)
+- #endif
+ {
+
+ int dx;
+--- 1775,1785 ----
+***************
+*** 1835,1847 ****
+ /* Calculate the maximal distance of the cursor from the drawing area.
+ * (offshoot can't become negative here!).
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ dx = x < 0 ? -x : x - allocation.width;
+ dy = y < 0 ? -y : y - allocation.height;
+- #else
+- dx = x < 0 ? -x : x - gui.drawarea->allocation.width;
+- dy = y < 0 ? -y : y - gui.drawarea->allocation.height;
+- #endif
+
+ offshoot = dx > dy ? dx : dy;
+
+--- 1790,1797 ----
+***************
+*** 1907,1912 ****
+--- 1857,1866 ----
+ return gdk_device_get_window_at_position(dev, x, y);
+ }
+ # endif
++ #else /* !GTK_CHECK_VERSION(3,0,0) */
++ # define gui_gtk_get_pointer(wid, x, y, s) \
++ gdk_window_get_pointer((wid)->window, x, y, s)
++ # define gui_gtk_window_at_position(wid, x, y) gdk_window_at_pointer(x, y)
+ #endif
+
+ /*
+***************
+*** 1919,1929 ****
+ int y;
+ GdkModifierType state;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gui_gtk_get_pointer(gui.drawarea, &x, &y, &state);
+- #else
+- gdk_window_get_pointer(gui.drawarea->window, &x, &y, &state);
+- #endif
+
+ if (!(state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK |
+ GDK_BUTTON3_MASK | GDK_BUTTON4_MASK |
+--- 1873,1879 ----
+***************
+*** 1968,1978 ****
+ int y;
+ GdkModifierType state;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gui_gtk_get_pointer(widget, &x, &y, &state);
+- #else
+- gdk_window_get_pointer(widget->window, &x, &y, &state);
+- #endif
+ process_motion_notify(x, y, state);
+ }
+ else
+--- 1918,1924 ----
+***************
+*** 2003,2013 ****
+ gui.event_time = event->time;
+
+ /* Make sure we have focus now we've been selected */
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_socket_id != 0 && !gtk_widget_has_focus(widget))
+- #else
+- if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
+- #endif
+ gtk_widget_grab_focus(widget);
+
+ /*
+--- 1949,1955 ----
+***************
+*** 2069,2079 ****
+ int button;
+ int_u vim_modifiers;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_socket_id != 0 && !gtk_widget_has_focus(widget))
+- #else
+- if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
+- #endif
+ gtk_widget_grab_focus(widget);
+
+ switch (event->direction)
+--- 2011,2017 ----
+***************
+*** 2239,2251 ****
+ char_u **fnames;
+ int nfiles = 0;
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ fnames = parse_uri_list(&nfiles,
+ (char_u *)gtk_selection_data_get_data(data),
+ gtk_selection_data_get_length(data));
+- # else
+- fnames = parse_uri_list(&nfiles, data->data, data->length);
+- # endif
+
+ if (fnames != NULL && nfiles > 0)
+ {
+--- 2177,2185 ----
+***************
+*** 2272,2290 ****
+ int len;
+ char_u *tmpbuf = NULL;
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ text = (char_u *)gtk_selection_data_get_data(data);
+ len = gtk_selection_data_get_length(data);
+- # else
+- text = data->data;
+- len = data->length;
+- # endif
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_selection_data_get_data_type(data) == utf8_string_atom)
+- # else
+- if (data->type == utf8_string_atom)
+- # endif
+ {
+ if (input_conv.vc_type != CONV_NONE)
+ tmpbuf = string_convert(&input_conv, text, &len);
+--- 2206,2215 ----
+***************
+*** 2320,2326 ****
+ GdkModifierType state;
+
+ /* Guard against trash */
+- # if GTK_CHECK_VERSION(3,0,0)
+ const guchar * const data_data = gtk_selection_data_get_data(data);
+ const gint data_length = gtk_selection_data_get_length(data);
+ const gint data_format = gtk_selection_data_get_format(data);
+--- 2245,2250 ----
+***************
+*** 2329,2340 ****
+ || data_length <= 0
+ || data_format != 8
+ || data_data[data_length] != '\0')
+- # else
+- if (data->data == NULL
+- || data->length <= 0
+- || data->format != 8
+- || data->data[data->length] != '\0')
+- # endif
+ {
+ gtk_drag_finish(context, FALSE, FALSE, time_);
+ return;
+--- 2253,2258 ----
+***************
+*** 2342,2352 ****
+
+ /* Get the current modifier state for proper distinguishment between
+ * different operations later. */
+- #if GTK_CHECK_VERSION(3,0,0)
+ gui_gtk_get_pointer(widget, NULL, NULL, &state);
+- # else
+- gdk_window_get_pointer(widget->window, NULL, NULL, &state);
+- # endif
+
+ /* Not sure about the role of "text/plain" here... */
+ if (info == (guint)TARGET_TEXT_URI_LIST)
+--- 2260,2266 ----
+***************
+*** 2810,2822 ****
+ GDK_WINDOW_XID(mainwin_win));
+ }
+ gtk_widget_add_events(gui.mainwin, GDK_PROPERTY_CHANGE_MASK);
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.mainwin), "property-notify-event",
+ G_CALLBACK(property_event), NULL);
+- # else
+- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "property_notify_event",
+- GTK_SIGNAL_FUNC(property_event), NULL);
+- # endif
+ #endif
+ }
+
+--- 2724,2731 ----
+***************
+*** 2935,2943 ****
+ drawarea_realize_cb(GtkWidget *widget, gpointer data UNUSED)
+ {
+ GtkWidget *sbar;
+- #if GTK_CHECK_VERSION(3,0,0)
+ GtkAllocation allocation;
+- #endif
+
+ #ifdef FEAT_XIM
+ xim_init();
+--- 2844,2850 ----
+***************
+*** 2962,2984 ****
+ if (!sbar || (!gui.which_scrollbars[SBAR_LEFT]
+ && firstwin->w_scrollbars[SBAR_RIGHT].id))
+ sbar = firstwin->w_scrollbars[SBAR_RIGHT].id;
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_get_allocation(sbar, &allocation);
+ if (sbar && gtk_widget_get_realized(sbar) && allocation.width)
+ gui.scrollbar_width = allocation.width;
+- #else
+- if (sbar && GTK_WIDGET_REALIZED(sbar) && sbar->allocation.width)
+- gui.scrollbar_width = sbar->allocation.width;
+- #endif
+
+ sbar = gui.bottom_sbar.id;
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (sbar && gtk_widget_get_realized(sbar) && allocation.height)
+ gui.scrollbar_height = allocation.height;
+- #else
+- if (sbar && GTK_WIDGET_REALIZED(sbar) && sbar->allocation.height)
+- gui.scrollbar_height = sbar->allocation.height;
+- #endif
+ }
+
+ /*
+--- 2869,2881 ----
+***************
+*** 3142,3173 ****
+ # define item_orientation GTK_ORIENTATION_HORIZONTAL
+ # endif
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (widget != NULL
+ && item_orientation == orientation
+ && gtk_widget_get_realized(widget)
+ && gtk_widget_get_visible(widget))
+- # else
+- if (widget != NULL
+- && item_orientation == orientation
+- && GTK_WIDGET_REALIZED(widget)
+- && GTK_WIDGET_VISIBLE(widget))
+- # endif
+ {
+! # if GTK_CHECK_VERSION(3,0,0)
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation(widget, &allocation);
+ return allocation.height;
+ # else
+- # ifdef FEAT_GUI_GNOME
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ return widget->allocation.height;
+ else
+ return widget->allocation.width;
+- # else
+- return widget->allocation.height;
+- # endif
+ # endif
+ }
+ return 0;
+--- 3039,3059 ----
+ # define item_orientation GTK_ORIENTATION_HORIZONTAL
+ # endif
+
+ if (widget != NULL
+ && item_orientation == orientation
+ && gtk_widget_get_realized(widget)
+ && gtk_widget_get_visible(widget))
+ {
+! # if GTK_CHECK_VERSION(3,0,0) || !defined(FEAT_GUI_GNOME)
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation(widget, &allocation);
+ return allocation.height;
+ # else
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ return widget->allocation.height;
+ else
+ return widget->allocation.width;
+ # endif
+ }
+ return 0;
+***************
+*** 3438,3452 ****
+ CONVERT_TO_UTF8_FREE(utf_text);
+
+ gtk_container_add(GTK_CONTAINER(menu), item);
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(tabline_menu_handler),
+ GINT_TO_POINTER(resp));
+- # else
+- gtk_signal_connect(GTK_OBJECT(item), "activate",
+- GTK_SIGNAL_FUNC(tabline_menu_handler),
+- (gpointer)(long)resp);
+- # endif
+ }
+
+ /*
+--- 3324,3332 ----
+***************
+*** 3488,3507 ****
+ )
+ return TRUE;
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ tabwin = gui_gtk_window_at_position(gui.mainwin, &x, &y);
+- # else
+- tabwin = gdk_window_at_pointer(&x, &y);
+- # endif
+
+ gdk_window_get_user_data(tabwin, (gpointer)&tabwidget);
+- # if GTK_CHECK_VERSION(3,0,0)
+ clicked_page = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(tabwidget),
+ "tab_num"));
+- # else
+- clicked_page = (int)(long)gtk_object_get_user_data(
+- GTK_OBJECT(tabwidget));
+- # endif
+
+ /* If the event was generated for 3rd button popup the menu. */
+ if (bevent->button == 3)
+--- 3368,3378 ----
+***************
+*** 3536,3546 ****
+ static void
+ on_select_tab(
+ GtkNotebook *notebook UNUSED,
+- # if GTK_CHECK_VERSION(3,0,0)
+ gpointer *page UNUSED,
+- # else
+- GtkNotebookPage *page UNUSED,
+- # endif
+ gint idx,
+ gpointer data UNUSED)
+ {
+--- 3407,3413 ----
+***************
+*** 3554,3564 ****
+ static void
+ on_tab_reordered(
+ GtkNotebook *notebook UNUSED,
+- # if GTK_CHECK_VERSION(3,0,0)
+ gpointer *page UNUSED,
+- # else
+- GtkNotebookPage *page UNUSED,
+- # endif
+ gint idx,
+ gpointer data UNUSED)
+ {
+--- 3421,3427 ----
+***************
+*** 3586,3596 ****
+ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gui.tabline), showit);
+ update_window_manager_hints(0, 0);
+ if (showit)
+- # if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_can_focus(GTK_WIDGET(gui.tabline), FALSE);
+- # else
+- GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(gui.tabline), GTK_CAN_FOCUS);
+- # endif
+ }
+
+ gui_mch_update();
+--- 3449,3455 ----
+***************
+*** 3663,3680 ****
+ }
+
+ event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_object_set_data(G_OBJECT(event_box), "tab_num",
+ GINT_TO_POINTER(tab_num));
+- # else
+- gtk_object_set_user_data(GTK_OBJECT(event_box),
+- (gpointer)(long)tab_num);
+- # endif
+- # if GTK_CHECK_VERSION(3,0,0)
+ label = gtk_bin_get_child(GTK_BIN(event_box));
+- # else
+- label = GTK_BIN(event_box)->child;
+- # endif
+ get_tabline_label(tp, FALSE);
+ labeltext = CONVERT_TO_UTF8(NameBuff);
+ gtk_label_set_text(GTK_LABEL(label), (const char *)labeltext);
+--- 3522,3530 ----
+***************
+*** 3695,3707 ****
+ while (gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline), nr) != NULL)
+ gtk_notebook_remove_page(GTK_NOTEBOOK(gui.tabline), nr);
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(gui.tabline)) != curtabidx)
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(gui.tabline), curtabidx);
+- # else
+- if (gtk_notebook_current_page(GTK_NOTEBOOK(gui.tabline)) != curtabidx)
+- gtk_notebook_set_page(GTK_NOTEBOOK(gui.tabline), curtabidx);
+- # endif
+
+ /* Make sure everything is in place before drawing text. */
+ gui_mch_update();
+--- 3545,3552 ----
+***************
+*** 3719,3731 ****
+ return;
+
+ ignore_tabline_evt = TRUE;
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(gui.tabline)) != nr - 1)
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(gui.tabline), nr - 1);
+- # else
+- if (gtk_notebook_current_page(GTK_NOTEBOOK(gui.tabline)) != nr - 1)
+- gtk_notebook_set_page(GTK_NOTEBOOK(gui.tabline), nr - 1);
+- # endif
+ ignore_tabline_evt = FALSE;
+ }
+
+--- 3564,3571 ----
+***************
+*** 3872,3882 ****
+ /* Use GtkSocket from another app. */
+ plug = gtk_plug_new_for_display(gdk_display_get_default(),
+ gtk_socket_id);
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (plug != NULL && gtk_plug_get_socket_window(GTK_PLUG(plug)) != NULL)
+- #else
+- if (plug != NULL && GTK_PLUG(plug)->socket_window != NULL)
+- #endif
+ {
+ gui.mainwin = plug;
+ }
+--- 3712,3718 ----
+***************
+*** 3911,3936 ****
+ gui.text_context = gtk_widget_create_pango_context(gui.mainwin);
+ pango_context_set_base_dir(gui.text_context, PANGO_DIRECTION_LTR);
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_container_set_border_width(GTK_CONTAINER(gui.mainwin), 0);
+- #else
+- gtk_container_border_width(GTK_CONTAINER(gui.mainwin), 0);
+- #endif
+ gtk_widget_add_events(gui.mainwin, GDK_VISIBILITY_NOTIFY_MASK);
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.mainwin), "delete-event",
+ G_CALLBACK(&delete_event_cb), NULL);
+
+ g_signal_connect(G_OBJECT(gui.mainwin), "realize",
+ G_CALLBACK(&mainwin_realize), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "delete_event",
+- GTK_SIGNAL_FUNC(&delete_event_cb), NULL);
+-
+- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "realize",
+- GTK_SIGNAL_FUNC(&mainwin_realize), NULL);
+- #endif
+
+ g_signal_connect(G_OBJECT(gui.mainwin), "screen-changed",
+ G_CALLBACK(&mainwin_screen_changed_cb), NULL);
+--- 3747,3760 ----
+***************
+*** 4084,4094 ****
+ gtk_widget_show(label);
+ event_box = gtk_event_box_new();
+ gtk_widget_show(event_box);
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_object_set_data(G_OBJECT(event_box), "tab_num", GINT_TO_POINTER(1L));
+- # else
+- gtk_object_set_user_data(GTK_OBJECT(event_box), (gpointer)1L);
+- # endif
+ # if !GTK_CHECK_VERSION(3,14,0)
+ gtk_misc_set_padding(GTK_MISC(label), 2, 2);
+ # endif
+--- 3908,3914 ----
+***************
+*** 4097,4131 ****
+ gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(gui.tabline), page, TRUE);
+ }
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.tabline), "switch-page",
+ G_CALLBACK(on_select_tab), NULL);
+ g_signal_connect(G_OBJECT(gui.tabline), "page-reordered",
+ G_CALLBACK(on_tab_reordered), NULL);
+- # else
+- gtk_signal_connect(GTK_OBJECT(gui.tabline), "switch_page",
+- GTK_SIGNAL_FUNC(on_select_tab), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.tabline), "page-reordered",
+- GTK_SIGNAL_FUNC(on_tab_reordered), NULL);
+- # endif
+
+ /* Create a popup menu for the tab line and connect it. */
+ tabline_menu = create_tabline_menu();
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect_swapped(G_OBJECT(gui.tabline), "button-press-event",
+ G_CALLBACK(on_tabline_menu), G_OBJECT(tabline_menu));
+- # else
+- gtk_signal_connect_object(GTK_OBJECT(gui.tabline), "button_press_event",
+- GTK_SIGNAL_FUNC(on_tabline_menu), GTK_OBJECT(tabline_menu));
+- # endif
+ #endif /* FEAT_GUI_TABLINE */
+
+ gui.formwin = gtk_form_new();
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_container_set_border_width(GTK_CONTAINER(gui.formwin), 0);
+- #else
+- gtk_container_border_width(GTK_CONTAINER(gui.formwin), 0);
+- #endif
+ #if !GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_events(gui.formwin, GDK_EXPOSURE_MASK);
+ #endif
+--- 3917,3935 ----
+***************
+*** 4159,4175 ****
+
+ /* For GtkSockets, key-presses must go to the focus widget (drawarea)
+ * and not the window. */
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect((gtk_socket_id == 0) ? G_OBJECT(gui.mainwin)
+ : G_OBJECT(gui.drawarea),
+ "key-press-event",
+ G_CALLBACK(key_press_event), NULL);
+- #else
+- gtk_signal_connect((gtk_socket_id == 0) ? GTK_OBJECT(gui.mainwin)
+- : GTK_OBJECT(gui.drawarea),
+- "key_press_event",
+- GTK_SIGNAL_FUNC(key_press_event), NULL);
+- #endif
+ #if defined(FEAT_XIM) || GTK_CHECK_VERSION(3,0,0)
+ /* Also forward key release events for the benefit of GTK+ 2 input
+ * modules. Try CTRL-SHIFT-xdigits to enter a Unicode code point. */
+--- 3963,3972 ----
+***************
+*** 4178,4205 ****
+ "key-release-event",
+ G_CALLBACK(&key_release_event), NULL);
+ #endif
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.drawarea), "realize",
+ G_CALLBACK(drawarea_realize_cb), NULL);
+ g_signal_connect(G_OBJECT(gui.drawarea), "unrealize",
+ G_CALLBACK(drawarea_unrealize_cb), NULL);
+ g_signal_connect(G_OBJECT(gui.drawarea), "configure-event",
+ G_CALLBACK(drawarea_configure_event_cb), NULL);
+! # if GTK_CHECK_VERSION(3,22,2)
+ g_signal_connect_after(G_OBJECT(gui.drawarea), "style-updated",
+ G_CALLBACK(&drawarea_style_updated_cb), NULL);
+! # else
+ g_signal_connect_after(G_OBJECT(gui.drawarea), "style-set",
+ G_CALLBACK(&drawarea_style_set_cb), NULL);
+- # endif
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "realize",
+- GTK_SIGNAL_FUNC(drawarea_realize_cb), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "unrealize",
+- GTK_SIGNAL_FUNC(drawarea_unrealize_cb), NULL);
+-
+- gtk_signal_connect_after(GTK_OBJECT(gui.drawarea), "style_set",
+- GTK_SIGNAL_FUNC(&drawarea_style_set_cb), NULL);
+ #endif
+
+ #if !GTK_CHECK_VERSION(3,0,0)
+--- 3975,3994 ----
+ "key-release-event",
+ G_CALLBACK(&key_release_event), NULL);
+ #endif
+ g_signal_connect(G_OBJECT(gui.drawarea), "realize",
+ G_CALLBACK(drawarea_realize_cb), NULL);
+ g_signal_connect(G_OBJECT(gui.drawarea), "unrealize",
+ G_CALLBACK(drawarea_unrealize_cb), NULL);
++ #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.drawarea), "configure-event",
+ G_CALLBACK(drawarea_configure_event_cb), NULL);
+! #endif
+! #if GTK_CHECK_VERSION(3,22,2)
+ g_signal_connect_after(G_OBJECT(gui.drawarea), "style-updated",
+ G_CALLBACK(&drawarea_style_updated_cb), NULL);
+! #else
+ g_signal_connect_after(G_OBJECT(gui.drawarea), "style-set",
+ G_CALLBACK(&drawarea_style_set_cb), NULL);
+ #endif
+
+ #if !GTK_CHECK_VERSION(3,0,0)
+***************
+*** 4213,4223 ****
+
+ if (gtk_socket_id != 0)
+ /* make sure keyboard input can go to the drawarea */
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_can_focus(gui.drawarea, TRUE);
+- #else
+- GTK_WIDGET_SET_FLAGS(gui.drawarea, GTK_CAN_FOCUS);
+- #endif
+
+ /*
+ * Set clipboard specific atoms
+--- 4002,4008 ----
+***************
+*** 4248,4264 ****
+ */
+ if (vim_strchr(p_go, GO_POINTER) != NULL)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.drawarea), "leave-notify-event",
+ G_CALLBACK(leave_notify_event), NULL);
+ g_signal_connect(G_OBJECT(gui.drawarea), "enter-notify-event",
+ G_CALLBACK(enter_notify_event), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "leave_notify_event",
+- GTK_SIGNAL_FUNC(leave_notify_event), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "enter_notify_event",
+- GTK_SIGNAL_FUNC(enter_notify_event), NULL);
+- #endif
+ }
+
+ /* Real windows can get focus ... GtkPlug, being a mere container can't,
+--- 4033,4042 ----
+***************
+*** 4267,4313 ****
+ */
+ if (gtk_socket_id == 0)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.mainwin), "focus-out-event",
+ G_CALLBACK(focus_out_event), NULL);
+ g_signal_connect(G_OBJECT(gui.mainwin), "focus-in-event",
+ G_CALLBACK(focus_in_event), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "focus_out_event",
+- GTK_SIGNAL_FUNC(focus_out_event), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "focus_in_event",
+- GTK_SIGNAL_FUNC(focus_in_event), NULL);
+- #endif
+ }
+ else
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.drawarea), "focus-out-event",
+ G_CALLBACK(focus_out_event), NULL);
+ g_signal_connect(G_OBJECT(gui.drawarea), "focus-in-event",
+ G_CALLBACK(focus_in_event), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "focus_out_event",
+- GTK_SIGNAL_FUNC(focus_out_event), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "focus_in_event",
+- GTK_SIGNAL_FUNC(focus_in_event), NULL);
+- #endif
+ #ifdef FEAT_GUI_TABLINE
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.tabline), "focus-out-event",
+ G_CALLBACK(focus_out_event), NULL);
+ g_signal_connect(G_OBJECT(gui.tabline), "focus-in-event",
+ G_CALLBACK(focus_in_event), NULL);
+- # else
+- gtk_signal_connect(GTK_OBJECT(gui.tabline), "focus_out_event",
+- GTK_SIGNAL_FUNC(focus_out_event), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.tabline), "focus_in_event",
+- GTK_SIGNAL_FUNC(focus_in_event), NULL);
+- # endif
+ #endif /* FEAT_GUI_TABLINE */
+ }
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.drawarea), "motion-notify-event",
+ G_CALLBACK(motion_notify_event), NULL);
+ g_signal_connect(G_OBJECT(gui.drawarea), "button-press-event",
+--- 4045,4069 ----
+***************
+*** 4316,4356 ****
+ G_CALLBACK(button_release_event), NULL);
+ g_signal_connect(G_OBJECT(gui.drawarea), "scroll-event",
+ G_CALLBACK(&scroll_event), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "motion_notify_event",
+- GTK_SIGNAL_FUNC(motion_notify_event), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "button_press_event",
+- GTK_SIGNAL_FUNC(button_press_event), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "button_release_event",
+- GTK_SIGNAL_FUNC(button_release_event), NULL);
+- g_signal_connect(G_OBJECT(gui.drawarea), "scroll_event",
+- G_CALLBACK(&scroll_event), NULL);
+- #endif
+
+ /*
+ * Add selection handler functions.
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.drawarea), "selection-clear-event",
+ G_CALLBACK(selection_clear_event), NULL);
+ g_signal_connect(G_OBJECT(gui.drawarea), "selection-received",
+ G_CALLBACK(selection_received_cb), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_clear_event",
+- GTK_SIGNAL_FUNC(selection_clear_event), NULL);
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_received",
+- GTK_SIGNAL_FUNC(selection_received_cb), NULL);
+- #endif
+
+ gui_gtk_set_selection_targets();
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.drawarea), "selection-get",
+ G_CALLBACK(selection_get_cb), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_get",
+- GTK_SIGNAL_FUNC(selection_get_cb), NULL);
+- #endif
+
+ /* Pretend we don't have input focus, we will get an event if we do. */
+ gui.in_focus = FALSE;
+--- 4072,4090 ----
+***************
+*** 4415,4430 ****
+ void
+ gui_mch_new_colors(void)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+- # if !GTK_CHECK_VERSION(3,22,2)
+- GdkWindow * const da_win = gtk_widget_get_window(gui.drawarea);
+- # endif
+-
+ if (gui.drawarea != NULL && gtk_widget_get_window(gui.drawarea) != NULL)
+- #else
+- if (gui.drawarea != NULL && gui.drawarea->window != NULL)
+- #endif
+ {
+ #if GTK_CHECK_VERSION(3,22,2)
+ GtkStyleContext * const context
+ = gtk_widget_get_style_context(gui.drawarea);
+--- 4149,4160 ----
+ void
+ gui_mch_new_colors(void)
+ {
+ if (gui.drawarea != NULL && gtk_widget_get_window(gui.drawarea) != NULL)
+ {
++ #if !GTK_CHECK_VERSION(3,22,2)
++ GdkWindow * const da_win = gtk_widget_get_window(gui.drawarea);
++ #endif
++
+ #if GTK_CHECK_VERSION(3,22,2)
+ GtkStyleContext * const context
+ = gtk_widget_get_style_context(gui.drawarea);
+***************
+*** 4462,4472 ****
+ GdkColor color = { 0, 0, 0, 0 };
+
+ color.pixel = gui.back_pixel;
+- # if GTK_CHECK_VERSION(3,0,0)
+ gdk_window_set_background(da_win, &color);
+- # else
+- gdk_window_set_background(gui.drawarea->window, &color);
+- # endif
+ #endif /* !GTK_CHECK_VERSION(3,22,2) */
+ }
+ }
+--- 4192,4198 ----
+***************
+*** 4524,4536 ****
+ * We can't do much more here than to trying to preserve what had been done,
+ * since the window is already inevitably going away.
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ static void
+ mainwin_destroy_cb(GObject *object UNUSED, gpointer data UNUSED)
+- #else
+- static void
+- mainwin_destroy_cb(GtkObject *object UNUSED, gpointer data UNUSED)
+- #endif
+ {
+ /* Don't write messages to the GUI anymore */
+ full_screen = FALSE;
+--- 4250,4257 ----
+***************
+*** 4709,4721 ****
+ * changed them). */
+ highlight_gui_started(); /* re-init colors and fonts */
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.mainwin), "destroy",
+ G_CALLBACK(mainwin_destroy_cb), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.mainwin), "destroy",
+- GTK_SIGNAL_FUNC(mainwin_destroy_cb), NULL);
+- #endif
+
+ #ifdef FEAT_HANGULIN
+ hangul_keyboard_set();
+--- 4430,4437 ----
+***************
+*** 4731,4755 ****
+ * manager upon us and should not interfere with what VIM is requesting
+ * upon startup.
+ */
+- #if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.formwin), "configure-event",
+ G_CALLBACK(form_configure_event), NULL);
+- #else
+- gtk_signal_connect(GTK_OBJECT(gui.formwin), "configure_event",
+- GTK_SIGNAL_FUNC(form_configure_event), NULL);
+- #endif
+
+ #ifdef FEAT_DND
+ /* Set up for receiving DND items. */
+ gui_gtk_set_dnd_targets();
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(gui.drawarea), "drag-data-received",
+ G_CALLBACK(drag_data_received_cb), NULL);
+- # else
+- gtk_signal_connect(GTK_OBJECT(gui.drawarea), "drag_data_received",
+- GTK_SIGNAL_FUNC(drag_data_received_cb), NULL);
+- # endif
+ #endif
+
+ /* With GTK+ 2, we need to iconify the window before calling show()
+--- 4447,4461 ----
+***************
+*** 5036,5046 ****
+ widget = gui.menubar;
+
+ /* Do not disable the menu while starting up, otherwise F10 doesn't work. */
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (!showit != !gtk_widget_get_visible(widget) && !gui.starting)
+- # else
+- if (!showit != !GTK_WIDGET_VISIBLE(widget) && !gui.starting)
+- # endif
+ {
+ if (showit)
+ gtk_widget_show(widget);
+--- 4742,4748 ----
+***************
+*** 5071,5081 ****
+ if (showit)
+ set_toolbar_style(GTK_TOOLBAR(gui.toolbar));
+
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (!showit != !gtk_widget_get_visible(widget))
+- # else
+- if (!showit != !GTK_WIDGET_VISIBLE(widget))
+- # endif
+ {
+ if (showit)
+ gtk_widget_show(widget);
+--- 4773,4779 ----
+***************
+*** 6336,6346 ****
+ {
+ GdkDisplay *display;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gui.mainwin != NULL && gtk_widget_get_realized(gui.mainwin))
+- #else
+- if (gui.mainwin != NULL && GTK_WIDGET_REALIZED(gui.mainwin))
+- #endif
+ display = gtk_widget_get_display(gui.mainwin);
+ else
+ display = gdk_display_get_default();
+--- 6034,6040 ----
+***************
+*** 6700,6710 ****
+ void
+ gui_mch_flush(void)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ if (gui.mainwin != NULL && gtk_widget_get_realized(gui.mainwin))
+- #else
+- if (gui.mainwin != NULL && GTK_WIDGET_REALIZED(gui.mainwin))
+- #endif
+ gdk_display_flush(gtk_widget_get_display(gui.mainwin));
+ }
+
+--- 6394,6400 ----
+***************
+*** 7060,7070 ****
+
+ gui_mch_menu_hidden(menu, FALSE);
+ /* Be clever about bitfields versus true booleans here! */
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (!gtk_widget_get_sensitive(menu->id) == !grey)
+- # else
+- if (!GTK_WIDGET_SENSITIVE(menu->id) == !grey)
+- # endif
+ {
+ gtk_widget_set_sensitive(menu->id, !grey);
+ gui_mch_update();
+--- 6750,6756 ----
+***************
+*** 7082,7092 ****
+
+ if (hidden)
+ {
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (gtk_widget_get_visible(menu->id))
+- # else
+- if (GTK_WIDGET_VISIBLE(menu->id))
+- # endif
+ {
+ gtk_widget_hide(menu->id);
+ gui_mch_update();
+--- 6768,6774 ----
+***************
+*** 7094,7104 ****
+ }
+ else
+ {
+- # if GTK_CHECK_VERSION(3,0,0)
+ if (!gtk_widget_get_visible(menu->id))
+- # else
+- if (!GTK_WIDGET_VISIBLE(menu->id))
+- # endif
+ {
+ gtk_widget_show(menu->id);
+ gui_mch_update();
+--- 6776,6782 ----
+***************
+*** 7126,7140 ****
+ if (sb->id == NULL)
+ return;
+
+- #if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_set_visible(sb->id, flag);
+- #else
+- if (flag)
+- gtk_widget_show(sb->id);
+- else
+- gtk_widget_hide(sb->id);
+- #endif
+-
+ update_window_manager_hints(0, 0);
+ }
+
+--- 6804,6810 ----
+***************
+*** 7166,7176 ****
+ void
+ gui_mch_getmouse(int *x, int *y)
+ {
+- #if GTK_CHECK_VERSION(3,0,0)
+ gui_gtk_get_pointer(gui.drawarea, x, y, NULL);
+- #else
+- gdk_window_get_pointer(gui.drawarea->window, x, y, NULL);
+- #endif
+ }
+
+ void
+--- 6836,6842 ----
+*** ../vim-8.1.0404/src/vim.h 2018-09-16 15:47:45.629425398 +0200
+--- src/vim.h 2018-09-18 22:23:38.699477631 +0200
+***************
+*** 2330,2335 ****
+--- 2330,2384 ----
+ #ifdef FEAT_GUI_GTK
+ # if !GTK_CHECK_VERSION(2,14,0)
+ # define gtk_widget_get_window(wid) ((wid)->window)
++ # define gtk_plug_get_socket_window(wid) ((wid)->socket_window)
++ # define gtk_selection_data_get_data(sel) ((sel)->data)
++ # define gtk_selection_data_get_data_type(sel) ((sel)->type)
++ # define gtk_selection_data_get_format(sel) ((sel)->format)
++ # define gtk_selection_data_get_length(sel) ((sel)->length)
++ # define gtk_adjustment_set_lower(adj, low) \
++ do { (adj)->lower = low; } while (0)
++ # define gtk_adjustment_set_upper(adj, up) \
++ do { (adj)->upper = up; } while (0)
++ # define gtk_adjustment_set_page_size(adj, size) \
++ do { (adj)->page_size = size; } while (0)
++ # define gtk_adjustment_set_page_increment(adj, inc) \
++ do { (adj)->page_increment = inc; } while (0)
++ # define gtk_adjustment_set_step_increment(adj, inc) \
++ do { (adj)->step_increment = inc; } while (0)
++ # endif
++ # if !GTK_CHECK_VERSION(2,16,0)
++ # define gtk_selection_data_get_selection(sel) ((sel)->selection)
++ # endif
++ # if !GTK_CHECK_VERSION(2,18,0)
++ # define gtk_widget_get_allocation(wid, alloc) \
++ do { *(alloc) = (wid)->allocation; } while (0)
++ # define gtk_widget_set_allocation(wid, alloc) \
++ do { (wid)->allocation = *(alloc); } while (0)
++ # define gtk_widget_get_has_window(wid) !GTK_WIDGET_NO_WINDOW(wid)
++ # define gtk_widget_get_sensitive(wid) GTK_WIDGET_SENSITIVE(wid)
++ # define gtk_widget_get_visible(wid) GTK_WIDGET_VISIBLE(wid)
++ # define gtk_widget_has_focus(wid) GTK_WIDGET_HAS_FOCUS(wid)
++ # define gtk_widget_set_window(wid, win) \
++ do { (wid)->window = (win); } while (0)
++ # define gtk_widget_set_can_default(wid, can) \
++ do { if (can) { GTK_WIDGET_SET_FLAGS(wid, GTK_CAN_DEFAULT); } \
++ else { GTK_WIDGET_UNSET_FLAGS(wid, GTK_CAN_DEFAULT); } } while (0)
++ # define gtk_widget_set_can_focus(wid, can) \
++ do { if (can) { GTK_WIDGET_SET_FLAGS(wid, GTK_CAN_FOCUS); } \
++ else { GTK_WIDGET_UNSET_FLAGS(wid, GTK_CAN_FOCUS); } } while (0)
++ # define gtk_widget_set_visible(wid, vis) \
++ do { if (vis) { gtk_widget_show(wid); } \
++ else { gtk_widget_hide(wid); } } while (0)
++ # endif
++ # if !GTK_CHECK_VERSION(2,20,0)
++ # define gtk_widget_get_mapped(wid) GTK_WIDGET_MAPPED(wid)
++ # define gtk_widget_get_realized(wid) GTK_WIDGET_REALIZED(wid)
++ # define gtk_widget_set_mapped(wid, map) \
++ do { if (map) { GTK_WIDGET_SET_FLAGS(wid, GTK_MAPPED); } \
++ else { GTK_WIDGET_UNSET_FLAGS(wid, GTK_MAPPED); } } while (0)
++ # define gtk_widget_set_realized(wid, rea) \
++ do { if (rea) { GTK_WIDGET_SET_FLAGS(wid, GTK_REALIZED); } \
++ else { GTK_WIDGET_UNSET_FLAGS(wid, GTK_REALIZED); } } while (0)
+ # endif
+ #endif
+
+*** ../vim-8.1.0404/src/version.c 2018-09-18 21:51:42.423876797 +0200
+--- src/version.c 2018-09-18 22:24:58.906658670 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 405,
+ /**/
+
+--
+From "know your smileys":
+ y:-) Bad toupee
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0406 b/data/vim/patches/8.1.0406
new file mode 100644
index 000000000..3614d17f8
--- /dev/null
+++ b/data/vim/patches/8.1.0406
@@ -0,0 +1,125 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0406
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0406
+Problem: Several command line arguments are not tested.
+Solution: Add tests for -A, -F, -H, -p and -V. (Dominique Pelle,
+ closes #3446)
+Files: src/testdir/test_startup.vim
+
+
+*** ../vim-8.1.0405/src/testdir/test_startup.vim 2018-09-16 16:28:08.358268312 +0200
+--- src/testdir/test_startup.vim 2018-09-18 22:34:16.977798058 +0200
+***************
+*** 199,205 ****
+ " - both windows should have the same height
+ " - window height (+ 2 for the statusline and Ex command) should be equal
+ " to the number of lines
+! " - buffer of both windowns should have no name
+ let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout')
+ call assert_equal('2', wn)
+ call assert_inrange(0, 1, ww1 - ww2)
+--- 199,205 ----
+ " - both windows should have the same height
+ " - window height (+ 2 for the statusline and Ex command) should be equal
+ " to the number of lines
+! " - buffer of both windows should have no name
+ let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout')
+ call assert_equal('2', wn)
+ call assert_inrange(0, 1, ww1 - ww2)
+***************
+*** 223,228 ****
+--- 223,291 ----
+ endif
+
+ call delete('Xtestout')
++ endfunc
++
++ " Test the -p[N] argument to open N tabpages.
++ func Test_p_arg()
++ let after = [
++ \ 'call writefile(split(execute("tabs"), "\n"), "Xtestout")',
++ \ 'qall',
++ \ ]
++ if RunVim([], after, '-p2')
++ let lines = readfile('Xtestout')
++ call assert_equal(4, len(lines))
++ call assert_equal('Tab page 1', lines[0])
++ call assert_equal('> [No Name]', lines[1])
++ call assert_equal('Tab page 2', lines[2])
++ call assert_equal(' [No Name]', lines[3])
++ endif
++
++ if RunVim([], after, '-p foo bar')
++ let lines = readfile('Xtestout')
++ call assert_equal(4, len(lines))
++ call assert_equal('Tab page 1', lines[0])
++ call assert_equal('> foo', lines[1])
++ call assert_equal('Tab page 2', lines[2])
++ call assert_equal(' bar', lines[3])
++ endif
++
++ call delete('Xtestout')
++ endfunc
++
++ " Test the -V[N] argument to set the 'version' option to [N]
++ func Test_V_arg()
++ let out = system(GetVimCommand() . ' --clean -es -X -V0 -c "set verbose?" -cq')
++ call assert_equal(" verbose=0\n", out)
++
++ let out = system(GetVimCommand() . ' --clean -es -X -V2 -c "set verbose?" -cq')
++ call assert_match("^sourcing \"$VIMRUNTIME/defaults\.vim\"\r\nSearching for \"filetype\.vim\".*\n verbose=2\n$", out)
++
++ let out = system(GetVimCommand() . ' --clean -es -X -V15 -c "set verbose?" -cq')
++ call assert_match("\+*\nsourcing \"$VIMRUNTIME/defaults\.vim\"\r\nline 1: \" The default vimrc file\..*\n verbose=15\n\+*", out)
++ endfunc
++
++ " Test the -A, -F and -H arguments (Arabic, Farsi and Hebrew modes).
++ func Test_A_F_H_arg()
++ let after = [
++ \ 'call writefile([&rightleft, &arabic, &fkmap, &hkmap], "Xtestout")',
++ \ 'qall',
++ \ ]
++ if has('arabic') && RunVim([], after, '-A')
++ let lines = readfile('Xtestout')
++ call assert_equal(['1', '1', '0', '0'], lines)
++ endif
++
++ if has('farsi') && RunVim([], after, '-F')
++ let lines = readfile('Xtestout')
++ call assert_equal(['1', '0', '1', '0'], lines)
++ endif
++
++ if has('rightleft') && RunVim([], after, '-H')
++ let lines = readfile('Xtestout')
++ call assert_equal(['1', '0', '0', '1'], lines)
++ endif
++
++ call delete('Xtestout')
+ endfunc
+
+ func Test_file_args()
+*** ../vim-8.1.0405/src/version.c 2018-09-18 22:29:59.888041388 +0200
+--- src/version.c 2018-09-18 22:35:58.352883122 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 406,
+ /**/
+
+--
+From "know your smileys":
+ :----} You lie like Pinocchio
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0407 b/data/vim/patches/8.1.0407
new file mode 100644
index 000000000..aef42ebe7
--- /dev/null
+++ b/data/vim/patches/8.1.0407
@@ -0,0 +1,1253 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0407
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0407
+Problem: Quickfix code mixes using the stack and a list pointer.
+Solution: Use a list pointer in more places. (Yegappan Lakshmanan,
+ closes #3443)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0406/src/quickfix.c 2018-09-02 15:18:38.910627833 +0200
+--- src/quickfix.c 2018-09-18 22:47:16.706525861 +0200
+***************
+*** 136,153 ****
+
+ static void qf_new_list(qf_info_T *qi, char_u *qf_title);
+ static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid);
+! static void qf_free(qf_info_T *qi, int idx);
+ static char_u *qf_types(int, int);
+ static int qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *, char_u *);
+ static char_u *qf_push_dir(char_u *, struct dir_stack_T **, int is_file_stack);
+ static char_u *qf_pop_dir(struct dir_stack_T **);
+! static char_u *qf_guess_filepath(qf_info_T *qi, int qf_idx, char_u *);
+ static void qf_fmt_text(char_u *text, char_u *buf, int bufsize);
+ static int qf_win_pos_update(qf_info_T *qi, int old_qf_index);
+ static win_T *qf_find_win(qf_info_T *qi);
+ static buf_T *qf_find_buf(qf_info_T *qi);
+ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last);
+- static void qf_set_title_var(qf_info_T *qi);
+ static void qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last);
+ static char_u *get_mef_name(void);
+ static buf_T *load_dummy_buffer(char_u *fname, char_u *dirname_start, char_u *resulting_dir);
+--- 136,152 ----
+
+ static void qf_new_list(qf_info_T *qi, char_u *qf_title);
+ static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid);
+! static void qf_free(qf_list_T *qfl);
+ static char_u *qf_types(int, int);
+ static int qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *, char_u *);
+ static char_u *qf_push_dir(char_u *, struct dir_stack_T **, int is_file_stack);
+ static char_u *qf_pop_dir(struct dir_stack_T **);
+! static char_u *qf_guess_filepath(qf_list_T *qfl, char_u *);
+ static void qf_fmt_text(char_u *text, char_u *buf, int bufsize);
+ static int qf_win_pos_update(qf_info_T *qi, int old_qf_index);
+ static win_T *qf_find_win(qf_info_T *qi);
+ static buf_T *qf_find_buf(qf_info_T *qi);
+ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last);
+ static void qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last);
+ static char_u *get_mef_name(void);
+ static buf_T *load_dummy_buffer(char_u *fname, char_u *dirname_start, char_u *resulting_dir);
+***************
+*** 1757,1763 ****
+ if (!adding)
+ {
+ /* Error when creating a new list. Free the new list */
+! qf_free(qi, qi->qf_curlist);
+ qi->qf_listcount--;
+ if (qi->qf_curlist > 0)
+ --qi->qf_curlist;
+--- 1756,1762 ----
+ if (!adding)
+ {
+ /* Error when creating a new list. Free the new list */
+! qf_free(&qi->qf_lists[qi->qf_curlist]);
+ qi->qf_listcount--;
+ if (qi->qf_curlist > 0)
+ --qi->qf_curlist;
+***************
+*** 1802,1816 ****
+ * Prepends ':' to the title.
+ */
+ static void
+! qf_store_title(qf_info_T *qi, int qf_idx, char_u *title)
+ {
+! VIM_CLEAR(qi->qf_lists[qf_idx].qf_title);
+
+ if (title != NULL)
+ {
+ char_u *p = alloc((int)STRLEN(title) + 2);
+
+! qi->qf_lists[qf_idx].qf_title = p;
+ if (p != NULL)
+ STRCPY(p, title);
+ }
+--- 1801,1815 ----
+ * Prepends ':' to the title.
+ */
+ static void
+! qf_store_title(qf_list_T *qfl, char_u *title)
+ {
+! VIM_CLEAR(qfl->qf_title);
+
+ if (title != NULL)
+ {
+ char_u *p = alloc((int)STRLEN(title) + 2);
+
+! qfl->qf_title = p;
+ if (p != NULL)
+ STRCPY(p, title);
+ }
+***************
+*** 1847,1853 ****
+ * way with ":grep'.
+ */
+ while (qi->qf_listcount > qi->qf_curlist + 1)
+! qf_free(qi, --qi->qf_listcount);
+
+ /*
+ * When the stack is full, remove to oldest entry
+--- 1846,1852 ----
+ * way with ":grep'.
+ */
+ while (qi->qf_listcount > qi->qf_curlist + 1)
+! qf_free(&qi->qf_lists[--qi->qf_listcount]);
+
+ /*
+ * When the stack is full, remove to oldest entry
+***************
+*** 1855,1861 ****
+ */
+ if (qi->qf_listcount == LISTCOUNT)
+ {
+! qf_free(qi, 0);
+ for (i = 1; i < LISTCOUNT; ++i)
+ qi->qf_lists[i - 1] = qi->qf_lists[i];
+ qi->qf_curlist = LISTCOUNT - 1;
+--- 1854,1860 ----
+ */
+ if (qi->qf_listcount == LISTCOUNT)
+ {
+! qf_free(&qi->qf_lists[0]);
+ for (i = 1; i < LISTCOUNT; ++i)
+ qi->qf_lists[i - 1] = qi->qf_lists[i];
+ qi->qf_curlist = LISTCOUNT - 1;
+***************
+*** 1863,1874 ****
+ else
+ qi->qf_curlist = qi->qf_listcount++;
+ vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
+! qf_store_title(qi, qi->qf_curlist, qf_title);
+ qi->qf_lists[qi->qf_curlist].qf_id = ++last_qf_id;
+ }
+
+ /*
+! * Free a location list
+ */
+ static void
+ ll_free_all(qf_info_T **pqi)
+--- 1862,1873 ----
+ else
+ qi->qf_curlist = qi->qf_listcount++;
+ vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
+! qf_store_title(&qi->qf_lists[qi->qf_curlist], qf_title);
+ qi->qf_lists[qi->qf_curlist].qf_id = ++last_qf_id;
+ }
+
+ /*
+! * Free a location list stack
+ */
+ static void
+ ll_free_all(qf_info_T **pqi)
+***************
+*** 1886,1892 ****
+ {
+ /* No references to this location list */
+ for (i = 0; i < qi->qf_listcount; ++i)
+! qf_free(qi, i);
+ vim_free(qi);
+ }
+ }
+--- 1885,1891 ----
+ {
+ /* No references to this location list */
+ for (i = 0; i < qi->qf_listcount; ++i)
+! qf_free(&qi->qf_lists[i]);
+ vim_free(qi);
+ }
+ }
+***************
+*** 1909,1915 ****
+ else
+ /* quickfix list */
+ for (i = 0; i < qi->qf_listcount; ++i)
+! qf_free(qi, i);
+ }
+
+ /*
+--- 1908,1914 ----
+ else
+ /* quickfix list */
+ for (i = 0; i < qi->qf_listcount; ++i)
+! qf_free(&qi->qf_lists[i]);
+ }
+
+ /*
+***************
+*** 1933,1938 ****
+--- 1932,1938 ----
+ int type, /* type character */
+ int valid) /* valid entry */
+ {
++ qf_list_T *qfl = &qi->qf_lists[qf_idx];
+ qfline_T *qfp;
+ qfline_T **lastp; /* pointer to qf_last or NULL */
+
+***************
+*** 1980,1991 ****
+ qfp->qf_type = type;
+ qfp->qf_valid = valid;
+
+! lastp = &qi->qf_lists[qf_idx].qf_last;
+ if (qf_list_empty(qi, qf_idx)) /* first element in the list */
+ {
+! qi->qf_lists[qf_idx].qf_start = qfp;
+! qi->qf_lists[qf_idx].qf_ptr = qfp;
+! qi->qf_lists[qf_idx].qf_index = 0;
+ qfp->qf_prev = NULL;
+ }
+ else
+--- 1980,1991 ----
+ qfp->qf_type = type;
+ qfp->qf_valid = valid;
+
+! lastp = &qfl->qf_last;
+ if (qf_list_empty(qi, qf_idx)) /* first element in the list */
+ {
+! qfl->qf_start = qfp;
+! qfl->qf_ptr = qfp;
+! qfl->qf_index = 0;
+ qfp->qf_prev = NULL;
+ }
+ else
+***************
+*** 1996,2015 ****
+ qfp->qf_next = NULL;
+ qfp->qf_cleared = FALSE;
+ *lastp = qfp;
+! ++qi->qf_lists[qf_idx].qf_count;
+! if (qi->qf_lists[qf_idx].qf_index == 0 && qfp->qf_valid)
+ /* first valid entry */
+ {
+! qi->qf_lists[qf_idx].qf_index =
+! qi->qf_lists[qf_idx].qf_count;
+! qi->qf_lists[qf_idx].qf_ptr = qfp;
+ }
+
+ return OK;
+ }
+
+ /*
+! * Allocate a new location list
+ */
+ static qf_info_T *
+ ll_new_list(void)
+--- 1996,2014 ----
+ qfp->qf_next = NULL;
+ qfp->qf_cleared = FALSE;
+ *lastp = qfp;
+! ++qfl->qf_count;
+! if (qfl->qf_index == 0 && qfp->qf_valid)
+ /* first valid entry */
+ {
+! qfl->qf_index = qfl->qf_count;
+! qfl->qf_ptr = qfp;
+ }
+
+ return OK;
+ }
+
+ /*
+! * Allocate a new location list stack
+ */
+ static qf_info_T *
+ ll_new_list(void)
+***************
+*** 2023,2030 ****
+ }
+
+ /*
+! * Return the location list for window 'wp'.
+! * If not present, allocate a location list
+ */
+ static qf_info_T *
+ ll_get_or_alloc_list(win_T *wp)
+--- 2022,2029 ----
+ }
+
+ /*
+! * Return the location list stack for window 'wp'.
+! * If not present, allocate a location list stack
+ */
+ static qf_info_T *
+ ll_get_or_alloc_list(win_T *wp)
+***************
+*** 2197,2203 ****
+ if (mch_getperm(ptr) < 0)
+ {
+ vim_free(ptr);
+! directory = qf_guess_filepath(qi, qf_idx, fname);
+ if (directory)
+ ptr = concat_fnames(directory, fname, TRUE);
+ else
+--- 2196,2202 ----
+ if (mch_getperm(ptr) < 0)
+ {
+ vim_free(ptr);
+! directory = qf_guess_filepath(&qi->qf_lists[qf_idx], fname);
+ if (directory)
+ ptr = concat_fnames(directory, fname, TRUE);
+ else
+***************
+*** 2365,2376 ****
+ * qf_guess_filepath will return NULL.
+ */
+ static char_u *
+! qf_guess_filepath(qf_info_T *qi, int qf_idx, char_u *filename)
+ {
+ struct dir_stack_T *ds_ptr;
+ struct dir_stack_T *ds_tmp;
+ char_u *fullname;
+- qf_list_T *qfl = &qi->qf_lists[qf_idx];
+
+ /* no dirs on the stack - there's nothing we can do */
+ if (qfl->qf_dir_stack == NULL)
+--- 2364,2374 ----
+ * qf_guess_filepath will return NULL.
+ */
+ static char_u *
+! qf_guess_filepath(qf_list_T *qfl, char_u *filename)
+ {
+ struct dir_stack_T *ds_ptr;
+ struct dir_stack_T *ds_tmp;
+ char_u *fullname;
+
+ /* no dirs on the stack - there's nothing we can do */
+ if (qfl->qf_dir_stack == NULL)
+***************
+*** 2436,2449 ****
+ * Similar to location list.
+ */
+ static int
+! is_qf_entry_present(qf_info_T *qi, qfline_T *qf_ptr)
+ {
+- qf_list_T *qfl;
+ qfline_T *qfp;
+ int i;
+
+- qfl = &qi->qf_lists[qi->qf_curlist];
+-
+ /* Search for the entry in the current list */
+ for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count;
+ ++i, qfp = qfp->qf_next)
+--- 2434,2444 ----
+ * Similar to location list.
+ */
+ static int
+! is_qf_entry_present(qf_list_T *qfl, qfline_T *qf_ptr)
+ {
+ qfline_T *qfp;
+ int i;
+
+ /* Search for the entry in the current list */
+ for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count;
+ ++i, qfp = qfp->qf_next)
+***************
+*** 2462,2468 ****
+ */
+ static qfline_T *
+ get_next_valid_entry(
+! qf_info_T *qi,
+ qfline_T *qf_ptr,
+ int *qf_index,
+ int dir)
+--- 2457,2463 ----
+ */
+ static qfline_T *
+ get_next_valid_entry(
+! qf_list_T *qfl,
+ qfline_T *qf_ptr,
+ int *qf_index,
+ int dir)
+***************
+*** 2475,2487 ****
+
+ do
+ {
+! if (idx == qi->qf_lists[qi->qf_curlist].qf_count
+! || qf_ptr->qf_next == NULL)
+ return NULL;
+ ++idx;
+ qf_ptr = qf_ptr->qf_next;
+! } while ((!qi->qf_lists[qi->qf_curlist].qf_nonevalid
+! && !qf_ptr->qf_valid)
+ || (dir == FORWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum));
+
+ *qf_index = idx;
+--- 2470,2480 ----
+
+ do
+ {
+! if (idx == qfl->qf_count || qf_ptr->qf_next == NULL)
+ return NULL;
+ ++idx;
+ qf_ptr = qf_ptr->qf_next;
+! } while ((!qfl->qf_nonevalid && !qf_ptr->qf_valid)
+ || (dir == FORWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum));
+
+ *qf_index = idx;
+***************
+*** 2494,2500 ****
+ */
+ static qfline_T *
+ get_prev_valid_entry(
+! qf_info_T *qi,
+ qfline_T *qf_ptr,
+ int *qf_index,
+ int dir)
+--- 2487,2493 ----
+ */
+ static qfline_T *
+ get_prev_valid_entry(
+! qf_list_T *qfl,
+ qfline_T *qf_ptr,
+ int *qf_index,
+ int dir)
+***************
+*** 2511,2518 ****
+ return NULL;
+ --idx;
+ qf_ptr = qf_ptr->qf_prev;
+! } while ((!qi->qf_lists[qi->qf_curlist].qf_nonevalid
+! && !qf_ptr->qf_valid)
+ || (dir == BACKWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum));
+
+ *qf_index = idx;
+--- 2504,2510 ----
+ return NULL;
+ --idx;
+ qf_ptr = qf_ptr->qf_prev;
+! } while ((!qfl->qf_nonevalid && !qf_ptr->qf_valid)
+ || (dir == BACKWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum));
+
+ *qf_index = idx;
+***************
+*** 2527,2533 ****
+ */
+ static qfline_T *
+ get_nth_valid_entry(
+! qf_info_T *qi,
+ int errornr,
+ qfline_T *qf_ptr,
+ int *qf_index,
+--- 2519,2525 ----
+ */
+ static qfline_T *
+ get_nth_valid_entry(
+! qf_list_T *qfl,
+ int errornr,
+ qfline_T *qf_ptr,
+ int *qf_index,
+***************
+*** 2544,2552 ****
+ prev_index = *qf_index;
+
+ if (dir == FORWARD || dir == FORWARD_FILE)
+! qf_ptr = get_next_valid_entry(qi, qf_ptr, qf_index, dir);
+ else
+! qf_ptr = get_prev_valid_entry(qi, qf_ptr, qf_index, dir);
+ if (qf_ptr == NULL)
+ {
+ qf_ptr = prev_qf_ptr;
+--- 2536,2544 ----
+ prev_index = *qf_index;
+
+ if (dir == FORWARD || dir == FORWARD_FILE)
+! qf_ptr = get_next_valid_entry(qfl, qf_ptr, qf_index, dir);
+ else
+! qf_ptr = get_prev_valid_entry(qfl, qf_ptr, qf_index, dir);
+ if (qf_ptr == NULL)
+ {
+ qf_ptr = prev_qf_ptr;
+***************
+*** 2570,2576 ****
+ */
+ static qfline_T *
+ get_nth_entry(
+! qf_info_T *qi,
+ int errornr,
+ qfline_T *qf_ptr,
+ int *cur_qfidx)
+--- 2562,2568 ----
+ */
+ static qfline_T *
+ get_nth_entry(
+! qf_list_T *qfl,
+ int errornr,
+ qfline_T *qf_ptr,
+ int *cur_qfidx)
+***************
+*** 2584,2592 ****
+ qf_ptr = qf_ptr->qf_prev;
+ }
+ /* New error number is greater than the current error number */
+! while (errornr > qf_idx &&
+! qf_idx < qi->qf_lists[qi->qf_curlist].qf_count &&
+! qf_ptr->qf_next != NULL)
+ {
+ ++qf_idx;
+ qf_ptr = qf_ptr->qf_next;
+--- 2576,2583 ----
+ qf_ptr = qf_ptr->qf_prev;
+ }
+ /* New error number is greater than the current error number */
+! while (errornr > qf_idx && qf_idx < qfl->qf_count &&
+! qf_ptr->qf_next != NULL)
+ {
+ ++qf_idx;
+ qf_ptr = qf_ptr->qf_next;
+***************
+*** 2784,2792 ****
+ }
+
+ /*
+! * Go to a window that shows the specified file. If a window is not found, go
+! * to the window just above the quickfix window. This is used for opening a
+! * file from a quickfix window and not from a location window.
+ */
+ static void
+ qf_goto_win_with_qfl_file(int qf_fnum)
+--- 2775,2784 ----
+ }
+
+ /*
+! * Go to a window that contains the specified buffer 'qf_fnum'. If a window is
+! * not found, then go to the window just above the quickfix window. This is
+! * used for opening a file from a quickfix window and not from a location
+! * window.
+ */
+ static void
+ qf_goto_win_with_qfl_file(int qf_fnum)
+***************
+*** 2899,2904 ****
+--- 2891,2897 ----
+ int *opened_window,
+ int *abort)
+ {
++ qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
+ int retval = OK;
+
+ if (qf_ptr->qf_type == 1)
+***************
+*** 2918,2924 ****
+ else
+ {
+ int old_qf_curlist = qi->qf_curlist;
+! int save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+
+ retval = buflist_getfile(qf_ptr->qf_fnum,
+ (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+--- 2911,2917 ----
+ else
+ {
+ int old_qf_curlist = qi->qf_curlist;
+! int save_qfid = qfl->qf_id;
+
+ retval = buflist_getfile(qf_ptr->qf_fnum,
+ (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+***************
+*** 2942,2948 ****
+ }
+ }
+ else if (old_qf_curlist != qi->qf_curlist
+! || !is_qf_entry_present(qi, qf_ptr))
+ {
+ if (IS_QF_STACK(qi))
+ EMSG(_("E925: Current quickfix was changed"));
+--- 2935,2941 ----
+ }
+ }
+ else if (old_qf_curlist != qi->qf_curlist
+! || !is_qf_entry_present(qfl, qf_ptr))
+ {
+ if (IS_QF_STACK(qi))
+ EMSG(_("E925: Current quickfix was changed"));
+***************
+*** 3087,3092 ****
+--- 3080,3086 ----
+ int errornr,
+ int forceit)
+ {
++ qf_list_T *qfl;
+ qfline_T *qf_ptr;
+ qfline_T *old_qf_ptr;
+ int qf_index;
+***************
+*** 3113,3125 ****
+ return;
+ }
+
+! qf_ptr = qi->qf_lists[qi->qf_curlist].qf_ptr;
+ old_qf_ptr = qf_ptr;
+! qf_index = qi->qf_lists[qi->qf_curlist].qf_index;
+ old_qf_index = qf_index;
+ if (dir != 0) /* next/prev valid entry */
+ {
+! qf_ptr = get_nth_valid_entry(qi, errornr, qf_ptr, &qf_index, dir);
+ if (qf_ptr == NULL)
+ {
+ qf_ptr = old_qf_ptr;
+--- 3107,3121 ----
+ return;
+ }
+
+! qfl = &qi->qf_lists[qi->qf_curlist];
+!
+! qf_ptr = qfl->qf_ptr;
+ old_qf_ptr = qf_ptr;
+! qf_index = qfl->qf_index;
+ old_qf_index = qf_index;
+ if (dir != 0) /* next/prev valid entry */
+ {
+! qf_ptr = get_nth_valid_entry(qfl, errornr, qf_ptr, &qf_index, dir);
+ if (qf_ptr == NULL)
+ {
+ qf_ptr = old_qf_ptr;
+***************
+*** 3128,3136 ****
+ }
+ }
+ else if (errornr != 0) /* go to specified number */
+! qf_ptr = get_nth_entry(qi, errornr, qf_ptr, &qf_index);
+
+! qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ if (qf_win_pos_update(qi, old_qf_index))
+ /* No need to print the error message if it's visible in the error
+ * window */
+--- 3124,3132 ----
+ }
+ }
+ else if (errornr != 0) /* go to specified number */
+! qf_ptr = get_nth_entry(qfl, errornr, qf_ptr, &qf_index);
+
+! qfl->qf_index = qf_index;
+ if (qf_win_pos_update(qi, old_qf_index))
+ /* No need to print the error message if it's visible in the error
+ * window */
+***************
+*** 3215,3222 ****
+ theend:
+ if (qi != NULL)
+ {
+! qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
+! qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ }
+ if (p_swb != old_swb && opened_window)
+ {
+--- 3211,3218 ----
+ theend:
+ if (qi != NULL)
+ {
+! qfl->qf_ptr = qf_ptr;
+! qfl->qf_index = qf_index;
+ }
+ if (p_swb != old_swb && opened_window)
+ {
+***************
+*** 3242,3250 ****
+ /*
+ * Display information about a single entry from the quickfix/location list.
+ * Used by ":clist/:llist" commands.
+ */
+ static void
+! qf_list_entry(qf_info_T *qi, qfline_T *qfp, int qf_idx)
+ {
+ char_u *fname;
+ buf_T *buf;
+--- 3238,3248 ----
+ /*
+ * Display information about a single entry from the quickfix/location list.
+ * Used by ":clist/:llist" commands.
++ * 'cursel' will be set to TRUE for the currently selected entry in the
++ * quickfix list.
+ */
+ static void
+! qf_list_entry(qfline_T *qfp, int qf_idx, int cursel)
+ {
+ char_u *fname;
+ buf_T *buf;
+***************
+*** 3285,3292 ****
+ return;
+
+ msg_putchar('\n');
+! msg_outtrans_attr(IObuff, qf_idx == qi->qf_lists[qi->qf_curlist].qf_index
+! ? HL_ATTR(HLF_QFL) : qfFileAttr);
+
+ if (qfp->qf_lnum != 0)
+ msg_puts_attr((char_u *)":", qfSepAttr);
+--- 3283,3289 ----
+ return;
+
+ msg_putchar('\n');
+! msg_outtrans_attr(IObuff, cursel ? HL_ATTR(HLF_QFL) : qfFileAttr);
+
+ if (qfp->qf_lnum != 0)
+ msg_puts_attr((char_u *)":", qfSepAttr);
+***************
+*** 3326,3331 ****
+--- 3323,3329 ----
+ void
+ qf_list(exarg_T *eap)
+ {
++ qf_list_T *qfl;
+ qfline_T *qfp;
+ int i;
+ int idx1 = 1;
+***************
+*** 3362,3376 ****
+ EMSG(_(e_trailing));
+ return;
+ }
+ if (plus)
+ {
+! i = qi->qf_lists[qi->qf_curlist].qf_index;
+ idx2 = i + idx1;
+ idx1 = i;
+ }
+ else
+ {
+! i = qi->qf_lists[qi->qf_curlist].qf_count;
+ if (idx1 < 0)
+ idx1 = (-idx1 > i) ? 0 : idx1 + i + 1;
+ if (idx2 < 0)
+--- 3360,3375 ----
+ EMSG(_(e_trailing));
+ return;
+ }
++ qfl = &qi->qf_lists[qi->qf_curlist];
+ if (plus)
+ {
+! i = qfl->qf_index;
+ idx2 = i + idx1;
+ idx1 = i;
+ }
+ else
+ {
+! i = qfl->qf_count;
+ if (idx1 < 0)
+ idx1 = (-idx1 > i) ? 0 : idx1 + i + 1;
+ if (idx2 < 0)
+***************
+*** 3394,3410 ****
+ if (qfLineAttr == 0)
+ qfLineAttr = HL_ATTR(HLF_N);
+
+! if (qi->qf_lists[qi->qf_curlist].qf_nonevalid)
+ all = TRUE;
+! qfp = qi->qf_lists[qi->qf_curlist].qf_start;
+! for (i = 1; !got_int && i <= qi->qf_lists[qi->qf_curlist].qf_count; )
+ {
+ if ((qfp->qf_valid || all) && idx1 <= i && i <= idx2)
+ {
+ if (got_int)
+ break;
+
+! qf_list_entry(qi, qfp, i);
+ }
+
+ qfp = qfp->qf_next;
+--- 3393,3409 ----
+ if (qfLineAttr == 0)
+ qfLineAttr = HL_ATTR(HLF_N);
+
+! if (qfl->qf_nonevalid)
+ all = TRUE;
+! qfp = qfl->qf_start;
+! for (i = 1; !got_int && i <= qfl->qf_count; )
+ {
+ if ((qfp->qf_valid || all) && idx1 <= i && i <= idx2)
+ {
+ if (got_int)
+ break;
+
+! qf_list_entry(qfp, i, i == qfl->qf_index);
+ }
+
+ qfp = qfp->qf_next;
+***************
+*** 3547,3558 ****
+ * associated with the list like context and title are not freed.
+ */
+ static void
+! qf_free_items(qf_info_T *qi, int idx)
+ {
+ qfline_T *qfp;
+ qfline_T *qfpnext;
+ int stop = FALSE;
+- qf_list_T *qfl = &qi->qf_lists[idx];
+
+ while (qfl->qf_count && qfl->qf_start != NULL)
+ {
+--- 3546,3556 ----
+ * associated with the list like context and title are not freed.
+ */
+ static void
+! qf_free_items(qf_list_T *qfl)
+ {
+ qfline_T *qfp;
+ qfline_T *qfpnext;
+ int stop = FALSE;
+
+ while (qfl->qf_count && qfl->qf_start != NULL)
+ {
+***************
+*** 3595,3605 ****
+ * associated context information and the title.
+ */
+ static void
+! qf_free(qf_info_T *qi, int idx)
+ {
+! qf_list_T *qfl = &qi->qf_lists[idx];
+!
+! qf_free_items(qi, idx);
+
+ VIM_CLEAR(qfl->qf_title);
+ free_tv(qfl->qf_ctx);
+--- 3593,3601 ----
+ * associated context information and the title.
+ */
+ static void
+! qf_free(qf_list_T *qfl)
+ {
+! qf_free_items(qfl);
+
+ VIM_CLEAR(qfl->qf_title);
+ free_tv(qfl->qf_ctx);
+***************
+*** 3801,3806 ****
+--- 3797,3812 ----
+ }
+
+ /*
++ * Set "w:quickfix_title" if "qi" has a title.
++ */
++ static void
++ qf_set_title_var(qf_list_T *qfl)
++ {
++ if (qfl->qf_title != NULL)
++ set_internal_string_var((char_u *)"w:quickfix_title", qfl->qf_title);
++ }
++
++ /*
+ * ":copen": open a window that shows the list of errors.
+ * ":lopen": open a window that shows the location list.
+ */
+***************
+*** 3919,3925 ****
+ prevwin = win;
+ }
+
+! qf_set_title_var(qi);
+
+ /*
+ * Fill the buffer with the quickfix list.
+--- 3925,3931 ----
+ prevwin = win;
+ }
+
+! qf_set_title_var(&qi->qf_lists[qi->qf_curlist]);
+
+ /*
+ * Fill the buffer with the quickfix list.
+***************
+*** 4033,4039 ****
+
+ /*
+ * Check whether the given window is displaying the specified quickfix/location
+! * list buffer
+ */
+ static int
+ is_qf_win(win_T *win, qf_info_T *qi)
+--- 4039,4045 ----
+
+ /*
+ * Check whether the given window is displaying the specified quickfix/location
+! * stack.
+ */
+ static int
+ is_qf_win(win_T *win, qf_info_T *qi)
+***************
+*** 4053,4059 ****
+ }
+
+ /*
+! * Find a window displaying the quickfix/location list 'qi'
+ * Only searches in the current tabpage.
+ */
+ static win_T *
+--- 4059,4065 ----
+ }
+
+ /*
+! * Find a window displaying the quickfix/location stack 'qi'
+ * Only searches in the current tabpage.
+ */
+ static win_T *
+***************
+*** 4097,4103 ****
+ {
+ curwin_save = curwin;
+ curwin = win;
+! qf_set_title_var(qi);
+ curwin = curwin_save;
+ }
+ }
+--- 4103,4109 ----
+ {
+ curwin_save = curwin;
+ curwin = win;
+! qf_set_title_var(&qi->qf_lists[qi->qf_curlist]);
+ curwin = curwin_save;
+ }
+ }
+***************
+*** 4143,4159 ****
+ }
+
+ /*
+- * Set "w:quickfix_title" if "qi" has a title.
+- */
+- static void
+- qf_set_title_var(qf_info_T *qi)
+- {
+- if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
+- set_internal_string_var((char_u *)"w:quickfix_title",
+- qi->qf_lists[qi->qf_curlist].qf_title);
+- }
+-
+- /*
+ * Add an error line to the quickfix buffer.
+ */
+ static int
+--- 4149,4154 ----
+***************
+*** 4679,4687 ****
+ * For :cfdo and :lfdo returns the 'n'th valid file entry.
+ */
+ static int
+! qf_get_nth_valid_entry(qf_info_T *qi, int n, int fdo)
+ {
+- qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
+ qfline_T *qfp = qfl->qf_start;
+ int i, eidx;
+ int prev_fnum = 0;
+--- 4674,4681 ----
+ * For :cfdo and :lfdo returns the 'n'th valid file entry.
+ */
+ static int
+! qf_get_nth_valid_entry(qf_list_T *qfl, int n, int fdo)
+ {
+ qfline_T *qfp = qfl->qf_start;
+ int i, eidx;
+ int prev_fnum = 0;
+***************
+*** 4762,4768 ****
+ */
+ if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
+ || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
+! errornr = qf_get_nth_valid_entry(qi,
+ eap->addr_count > 0 ? (int)eap->line1 : 1,
+ eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo);
+
+--- 4756,4762 ----
+ */
+ if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
+ || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
+! errornr = qf_get_nth_valid_entry(&qi->qf_lists[qi->qf_curlist],
+ eap->addr_count > 0 ? (int)eap->line1 : 1,
+ eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo);
+
+***************
+*** 5712,5718 ****
+ TRUE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0)
+ {
+ (void)get_errorlist(qi, NULL, 0, l);
+! qf_free(qi, 0);
+ }
+ free(qi);
+ }
+--- 5706,5712 ----
+ TRUE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0)
+ {
+ (void)get_errorlist(qi, NULL, 0, l);
+! qf_free(&qi->qf_lists[0]);
+ }
+ free(qi);
+ }
+***************
+*** 5983,5988 ****
+--- 5977,5983 ----
+ qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict)
+ {
+ qf_info_T *qi = &ql_info;
++ qf_list_T *qfl;
+ int status = OK;
+ int qf_idx;
+ dictitem_T *di;
+***************
+*** 6003,6008 ****
+--- 5998,6005 ----
+ if (qi == NULL || qi->qf_listcount == 0 || qf_idx == INVALID_QFIDX)
+ return qf_getprop_defaults(qi, flags, retdict);
+
++ qfl = &qi->qf_lists[qf_idx];
++
+ if (flags & QF_GETLIST_TITLE)
+ status = qf_getprop_title(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_NR))
+***************
+*** 6014,6028 ****
+ if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
+ status = qf_getprop_ctx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_ID))
+! status = dict_add_number(retdict, "id", qi->qf_lists[qf_idx].qf_id);
+ if ((status == OK) && (flags & QF_GETLIST_IDX))
+ status = qf_getprop_idx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_SIZE))
+! status = dict_add_number(retdict, "size",
+! qi->qf_lists[qf_idx].qf_count);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+! status = dict_add_number(retdict, "changedtick",
+! qi->qf_lists[qf_idx].qf_changedtick);
+ if ((status == OK) && (wp != NULL) && (flags & QF_GETLIST_FILEWINID))
+ status = qf_getprop_filewinid(wp, qi, retdict);
+
+--- 6011,6023 ----
+ if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
+ status = qf_getprop_ctx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_ID))
+! status = dict_add_number(retdict, "id", qfl->qf_id);
+ if ((status == OK) && (flags & QF_GETLIST_IDX))
+ status = qf_getprop_idx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_SIZE))
+! status = dict_add_number(retdict, "size", qfl->qf_count);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+! status = dict_add_number(retdict, "changedtick", qfl->qf_changedtick);
+ if ((status == OK) && (wp != NULL) && (flags & QF_GETLIST_FILEWINID))
+ status = qf_getprop_filewinid(wp, qi, retdict);
+
+***************
+*** 6118,6123 ****
+--- 6113,6119 ----
+ char_u *title,
+ int action)
+ {
++ qf_list_T *qfl = &qi->qf_lists[qf_idx];
+ listitem_T *li;
+ dict_T *d;
+ qfline_T *old_last = NULL;
+***************
+*** 6128,6141 ****
+ /* make place for a new list */
+ qf_new_list(qi, title);
+ qf_idx = qi->qf_curlist;
+ }
+ else if (action == 'a' && !qf_list_empty(qi, qf_idx))
+ /* Adding to existing list, use last entry. */
+! old_last = qi->qf_lists[qf_idx].qf_last;
+ else if (action == 'r')
+ {
+! qf_free_items(qi, qf_idx);
+! qf_store_title(qi, qf_idx, title);
+ }
+
+ for (li = list->lv_first; li != NULL; li = li->li_next)
+--- 6124,6138 ----
+ /* make place for a new list */
+ qf_new_list(qi, title);
+ qf_idx = qi->qf_curlist;
++ qfl = &qi->qf_lists[qf_idx];
+ }
+ else if (action == 'a' && !qf_list_empty(qi, qf_idx))
+ /* Adding to existing list, use last entry. */
+! old_last = qfl->qf_last;
+ else if (action == 'r')
+ {
+! qf_free_items(qfl);
+! qf_store_title(qfl, title);
+ }
+
+ for (li = list->lv_first; li != NULL; li = li->li_next)
+***************
+*** 6152,6168 ****
+ break;
+ }
+
+! if (qi->qf_lists[qf_idx].qf_index == 0)
+ /* no valid entry */
+! qi->qf_lists[qf_idx].qf_nonevalid = TRUE;
+ else
+! qi->qf_lists[qf_idx].qf_nonevalid = FALSE;
+ if (action != 'a')
+ {
+! qi->qf_lists[qf_idx].qf_ptr =
+! qi->qf_lists[qf_idx].qf_start;
+ if (!qf_list_empty(qi, qf_idx))
+! qi->qf_lists[qf_idx].qf_index = 1;
+ }
+
+ /* Don't update the cursor in quickfix window when appending entries */
+--- 6149,6164 ----
+ break;
+ }
+
+! if (qfl->qf_index == 0)
+ /* no valid entry */
+! qfl->qf_nonevalid = TRUE;
+ else
+! qfl->qf_nonevalid = FALSE;
+ if (action != 'a')
+ {
+! qfl->qf_ptr = qfl->qf_start;
+ if (!qf_list_empty(qi, qf_idx))
+! qfl->qf_index = 1;
+ }
+
+ /* Don't update the cursor in quickfix window when appending entries */
+***************
+*** 6302,6308 ****
+ return FAIL;
+
+ if (action == 'r')
+! qf_free_items(qi, qf_idx);
+ if (qf_init_ext(qi, qf_idx, NULL, NULL, &di->di_tv, errorformat,
+ FALSE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0)
+ retval = OK;
+--- 6298,6304 ----
+ return FAIL;
+
+ if (action == 'r')
+! qf_free_items(&qi->qf_lists[qf_idx]);
+ if (qf_init_ext(qi, qf_idx, NULL, NULL, &di->di_tv, errorformat,
+ FALSE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0)
+ retval = OK;
+***************
+*** 6314,6328 ****
+ * Set quickfix list context.
+ */
+ static int
+! qf_setprop_context(qf_info_T *qi, int qf_idx, dictitem_T *di)
+ {
+ typval_T *ctx;
+
+! free_tv(qi->qf_lists[qf_idx].qf_ctx);
+ ctx = alloc_tv();
+ if (ctx != NULL)
+ copy_tv(&di->di_tv, ctx);
+! qi->qf_lists[qf_idx].qf_ctx = ctx;
+
+ return OK;
+ }
+--- 6310,6324 ----
+ * Set quickfix list context.
+ */
+ static int
+! qf_setprop_context(qf_list_T *qfl, dictitem_T *di)
+ {
+ typval_T *ctx;
+
+! free_tv(qfl->qf_ctx);
+ ctx = alloc_tv();
+ if (ctx != NULL)
+ copy_tv(&di->di_tv, ctx);
+! qfl->qf_ctx = ctx;
+
+ return OK;
+ }
+***************
+*** 6361,6367 ****
+ if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL)
+ retval = qf_setprop_items_from_lines(qi, qf_idx, what, di, action);
+ if ((di = dict_find(what, (char_u *)"context", -1)) != NULL)
+! retval = qf_setprop_context(qi, qf_idx, di);
+
+ if (retval == OK)
+ qf_list_changed(qi, qf_idx);
+--- 6357,6363 ----
+ if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL)
+ retval = qf_setprop_items_from_lines(qi, qf_idx, what, di, action);
+ if ((di = dict_find(what, (char_u *)"context", -1)) != NULL)
+! retval = qf_setprop_context(&qi->qf_lists[qf_idx], di);
+
+ if (retval == OK)
+ qf_list_changed(qi, qf_idx);
+***************
+*** 6370,6376 ****
+ }
+
+ /*
+! * Find the non-location list window with the specified location list.
+ */
+ static win_T *
+ find_win_with_ll(qf_info_T *qi)
+--- 6366,6373 ----
+ }
+
+ /*
+! * Find the non-location list window with the specified location list in the
+! * current tabpage.
+ */
+ static win_T *
+ find_win_with_ll(qf_info_T *qi)
+***************
+*** 6399,6405 ****
+ {
+ /* If the quickfix/location list window is open, then clear it */
+ if (qi->qf_curlist < qi->qf_listcount)
+! qf_free(qi, qi->qf_curlist);
+ qf_update_buffer(qi, NULL);
+ }
+
+--- 6396,6402 ----
+ {
+ /* If the quickfix/location list window is open, then clear it */
+ if (qi->qf_curlist < qi->qf_listcount)
+! qf_free(&qi->qf_lists[qi->qf_curlist]);
+ qf_update_buffer(qi, NULL);
+ }
+
+*** ../vim-8.1.0406/src/version.c 2018-09-18 22:37:26.976072822 +0200
+--- src/version.c 2018-09-18 22:49:11.893423547 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 407,
+ /**/
+
+--
+From "know your smileys":
+¯\_(ツ)_/¯ Shrug
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0408 b/data/vim/patches/8.1.0408
new file mode 100644
index 000000000..7502a0142
--- /dev/null
+++ b/data/vim/patches/8.1.0408
@@ -0,0 +1,219 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0408
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0408
+Problem: MSVC: cannot use the "x64" native compiler option.
+Solution: Ignore case for %Platform%. Improve documentation. (Ken Takata)
+Files: src/INSTALLpc.txt, src/msvc2015.bat
+
+
+*** ../vim-8.1.0407/src/INSTALLpc.txt 2018-06-30 17:06:50.424853479 +0200
+--- src/INSTALLpc.txt 2018-09-18 22:57:48.532445642 +0200
+***************
+*** 3,9 ****
+ This file contains instructions for compiling Vim. If you already have an
+ executable version of Vim, you don't need this.
+
+! You can find the lastest here: https://github.com/vim/vim-win32-installer
+ This page also has links to install support for interfaces such as Perl,
+ Python, Lua, etc.
+
+--- 3,9 ----
+ This file contains instructions for compiling Vim. If you already have an
+ executable version of Vim, you don't need this.
+
+! You can find the latest here: https://github.com/vim/vim-win32-installer
+ This page also has links to install support for interfaces such as Perl,
+ Python, Lua, etc.
+
+***************
+*** 164,169 ****
+--- 164,174 ----
+ msvc2015
+ For x64 builds run this with the "x86_amd64" option:
+ msvc2015 x86_amd64
++ This enables x86_x64 cross compiler. This works on any editions including
++ Express edition.
++ If you use Community (or Professional) edition, you can enable the x64 native
++ compiler by using the "x64" option:
++ msvc2015 x64
+
+ The following Visual C++ team blog can serve as a reference page:
+ http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx
+***************
+*** 182,188 ****
+
+ You could download the Microsoft Visual C++ Toolkit 2003 from
+ http://msdn.microsoft.com/visualc/vctoolkit2003/
+! Unfortunately this URL is no longer valid. Inofficial downloads appear to be
+ available from links mentioned on these pages (use at your own risk):
+ http://www.filewatcher.com/m/VCToolkitSetup.exe.32952488.0.0.html
+ http://feargame.net/wiki/index.php?title=Building_Source_with_the_VC2003_Toolkit
+--- 187,193 ----
+
+ You could download the Microsoft Visual C++ Toolkit 2003 from
+ http://msdn.microsoft.com/visualc/vctoolkit2003/
+! Unfortunately this URL is no longer valid. Unofficial downloads appear to be
+ available from links mentioned on these pages (use at your own risk):
+ http://www.filewatcher.com/m/VCToolkitSetup.exe.32952488.0.0.html
+ http://feargame.net/wiki/index.php?title=Building_Source_with_the_VC2003_Toolkit
+***************
+*** 276,287 ****
+
+ Execute the installer and follow the instructions to update basic packages.
+ At the end keep the checkbox checked to run msys2 now. If needed, you can
+! open the window from the start menu, MSYS2 64 bit / MSYS2 MSYS
+
+ Execute:
+ $ pacman -Syu
+!
+! And restart MSYS2 window (select "MSYS2 MSYS" icon from the Start Menu).
+ Then execute:
+ $ pacman -Su
+
+--- 281,292 ----
+
+ Execute the installer and follow the instructions to update basic packages.
+ At the end keep the checkbox checked to run msys2 now. If needed, you can
+! open the window from the start menu, MSYS2 64 bit / MSYS2 MSYS.
+
+ Execute:
+ $ pacman -Syu
+!
+! And restart MSYS2 console (select "MSYS2 MSYS" icon from the Start Menu).
+ Then execute:
+ $ pacman -Su
+
+***************
+*** 297,302 ****
+--- 302,308 ----
+ * mingw-w64-i686-toolchain (for building 32-bit Vim)
+ * mingw-w64-x86_64-toolchain (for building 64-bit Vim)
+
++ (These groups also include some useful packages which are not used by Vim.)
+ Use the following command to install them:
+
+ $ pacman -S base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
+***************
+*** 305,312 ****
+--- 311,328 ----
+
+ $ pacboy -S base-devel: toolchain:m
+
++ The suffix ":" means that it disables the package name translation.
++ The suffix ":m" means both i686 and x86_64. You can also use the ":i" suffix
++ to install only i686, and the ":x" suffix to install only x86_64.
+ (See `pacboy help` for the help.)
+
++ See also the pacman page in ArchWiki for the general usage of pacman:
++ https://wiki.archlinux.org/index.php/pacman
++
++ MSYS2 has its own git package, and you can also install it via pacman:
++
++ $ pacman -S git
++
+
+ 2.3. Keep the build environment up-to-date
+
+***************
+*** 316,322 ****
+ $ pacman -Syu
+
+
+! # Build Vim
+
+ Select one of the following icon from the Start Menu:
+
+--- 332,338 ----
+ $ pacman -Syu
+
+
+! 2.4. Build Vim
+
+ Select one of the following icon from the Start Menu:
+
+***************
+*** 329,340 ****
+ make -f Make_ming.mak GUI=no
+ make -f Make_ming.mak GUI=no DEBUG=yes
+
+! NOTE: you can't execute the vim.exe in the MSYS console, open a normal Windows
+ console for that. You need to set $PATH to be able to build there, e.g.:
+
+ set PATH=c:\msys64\mingw32\bin;c:\msys64\usr\bin;%PATH%
+
+! This command is in msys32.bat. Or or the 64 bit compiler use msys64.bat:
+
+ set PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;%PATH%
+
+--- 345,356 ----
+ make -f Make_ming.mak GUI=no
+ make -f Make_ming.mak GUI=no DEBUG=yes
+
+! NOTE: you can't execute vim.exe in the MSYS2 console, open a normal Windows
+ console for that. You need to set $PATH to be able to build there, e.g.:
+
+ set PATH=c:\msys64\mingw32\bin;c:\msys64\usr\bin;%PATH%
+
+! This command is in msys32.bat. Or for the 64 bit compiler use msys64.bat:
+
+ set PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;%PATH%
+
+*** ../vim-8.1.0407/src/msvc2015.bat 2017-10-07 17:58:14.000000000 +0200
+--- src/msvc2015.bat 2018-09-18 22:52:10.463708085 +0200
+***************
+*** 7,12 ****
+--- 7,16 ----
+ rem msvc2015
+ rem For x64 builds run this with "x86_amd64" option:
+ rem msvc2015 x86_amd64
++ rem This works on any editions including Express edition.
++ rem If you use Community (or Professional) edition, you can also use "x64"
++ rem option:
++ rem msvc2015 x64
+ @echo on
+
+ call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %*
+***************
+*** 23,29 ****
+ )
+
+ set INCLUDE=%WinSdk71%\Include;%INCLUDE%
+! if "%Platform%"=="x64" (
+ set "LIB=%WinSdk71%\Lib\x64;%LIB%"
+ set SUBSYSTEM_VER=5.02
+ ) else (
+--- 27,33 ----
+ )
+
+ set INCLUDE=%WinSdk71%\Include;%INCLUDE%
+! if /i "%Platform%"=="x64" (
+ set "LIB=%WinSdk71%\Lib\x64;%LIB%"
+ set SUBSYSTEM_VER=5.02
+ ) else (
+*** ../vim-8.1.0407/src/version.c 2018-09-18 22:50:02.692936259 +0200
+--- src/version.c 2018-09-18 22:54:22.394436775 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 408,
+ /**/
+
+--
+From "know your smileys":
+ :-) Funny
+ |-) Funny Oriental
+ (-: Funny Australian
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0409 b/data/vim/patches/8.1.0409
new file mode 100644
index 000000000..9f2a52606
--- /dev/null
+++ b/data/vim/patches/8.1.0409
@@ -0,0 +1,93 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0409
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0409 (after 8.1.0406)
+Problem: Startup test fails on MS-Windows.
+Solution: Do the Arabic test in silent Ex mode. Loosen the check for -V2.
+Files: src/testdir/test_startup.vim
+
+
+*** ../vim-8.1.0408/src/testdir/test_startup.vim 2018-09-18 22:37:26.976072822 +0200
+--- src/testdir/test_startup.vim 2018-09-19 21:05:48.480522312 +0200
+***************
+*** 252,267 ****
+ call delete('Xtestout')
+ endfunc
+
+! " Test the -V[N] argument to set the 'version' option to [N]
+ func Test_V_arg()
+ let out = system(GetVimCommand() . ' --clean -es -X -V0 -c "set verbose?" -cq')
+ call assert_equal(" verbose=0\n", out)
+
+ let out = system(GetVimCommand() . ' --clean -es -X -V2 -c "set verbose?" -cq')
+! call assert_match("^sourcing \"$VIMRUNTIME/defaults\.vim\"\r\nSearching for \"filetype\.vim\".*\n verbose=2\n$", out)
+
+ let out = system(GetVimCommand() . ' --clean -es -X -V15 -c "set verbose?" -cq')
+! call assert_match("\+*\nsourcing \"$VIMRUNTIME/defaults\.vim\"\r\nline 1: \" The default vimrc file\..*\n verbose=15\n\+*", out)
+ endfunc
+
+ " Test the -A, -F and -H arguments (Arabic, Farsi and Hebrew modes).
+--- 252,272 ----
+ call delete('Xtestout')
+ endfunc
+
+! " Test the -V[N] argument to set the 'verbose' option to [N]
+ func Test_V_arg()
++ if has('gui_running')
++ " Can't catch the output of gvim.
++ return
++ endif
+ let out = system(GetVimCommand() . ' --clean -es -X -V0 -c "set verbose?" -cq')
+ call assert_equal(" verbose=0\n", out)
+
+ let out = system(GetVimCommand() . ' --clean -es -X -V2 -c "set verbose?" -cq')
+! call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\r\nSearching for \"filetype\.vim\".*\n", out)
+! call assert_match(" verbose=2\n", out)
+
+ let out = system(GetVimCommand() . ' --clean -es -X -V15 -c "set verbose?" -cq')
+! call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\r\nline 1: \" The default vimrc file\..* verbose=15\n", out)
+ endfunc
+
+ " Test the -A, -F and -H arguments (Arabic, Farsi and Hebrew modes).
+***************
+*** 270,276 ****
+ \ 'call writefile([&rightleft, &arabic, &fkmap, &hkmap], "Xtestout")',
+ \ 'qall',
+ \ ]
+! if has('arabic') && RunVim([], after, '-A')
+ let lines = readfile('Xtestout')
+ call assert_equal(['1', '1', '0', '0'], lines)
+ endif
+--- 275,283 ----
+ \ 'call writefile([&rightleft, &arabic, &fkmap, &hkmap], "Xtestout")',
+ \ 'qall',
+ \ ]
+! " Use silent Ex mode to avoid the hit-Enter prompt for the warning that
+! " 'encoding' is not utf-8.
+! if has('arabic') && &encoding == 'utf-8' && RunVim([], after, '-e -s -A')
+ let lines = readfile('Xtestout')
+ call assert_equal(['1', '1', '0', '0'], lines)
+ endif
+*** ../vim-8.1.0408/src/version.c 2018-09-18 22:58:36.999976835 +0200
+--- src/version.c 2018-09-19 21:01:31.298375990 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 409,
+ /**/
+
+--
+How many light bulbs does it take to change a person?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0410 b/data/vim/patches/8.1.0410
new file mode 100644
index 000000000..0a1cac9e0
--- /dev/null
+++ b/data/vim/patches/8.1.0410
@@ -0,0 +1,307 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0410
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0410
+Problem: The ex_copen() function is too long.
+Solution: Refactor to split off two functions. (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0409/src/quickfix.c 2018-09-18 22:50:02.692936259 +0200
+--- src/quickfix.c 2018-09-19 21:54:26.509737127 +0200
+***************
+*** 3807,3812 ****
+--- 3807,3918 ----
+ }
+
+ /*
++ * Goto a quickfix or location list window (if present).
++ * Returns OK if the window is found, FAIL otherwise.
++ */
++ static int
++ qf_goto_cwindow(qf_info_T *qi, int resize, int sz, int vertsplit)
++ {
++ win_T *win;
++
++ win = qf_find_win(qi);
++ if (win == NULL)
++ return FAIL;
++
++ win_goto(win);
++ if (resize)
++ {
++ if (vertsplit)
++ {
++ if (sz != win->w_width)
++ win_setwidth(sz);
++ }
++ else if (sz != win->w_height)
++ win_setheight(sz);
++ }
++
++ return OK;
++ }
++
++ /*
++ * Open a new quickfix or location list window, load the quickfix buffer and
++ * set the appropriate options for the window.
++ * Returns FAIL if the window could not be opened.
++ */
++ static int
++ qf_open_new_cwindow(qf_info_T *qi, int height)
++ {
++ buf_T *qf_buf;
++ win_T *oldwin = curwin;
++ tabpage_T *prevtab = curtab;
++ int flags = 0;
++ win_T *win;
++
++ qf_buf = qf_find_buf(qi);
++
++ // The current window becomes the previous window afterwards.
++ win = curwin;
++
++ if (IS_QF_STACK(qi) && cmdmod.split == 0)
++ // Create the new quickfix window at the very bottom, except when
++ // :belowright or :aboveleft is used.
++ win_goto(lastwin);
++ // Default is to open the window below the current window
++ if (cmdmod.split == 0)
++ flags = WSP_BELOW;
++ flags |= WSP_NEWLOC;
++ if (win_split(height, flags) == FAIL)
++ return FAIL; // not enough room for window
++ RESET_BINDING(curwin);
++
++ if (IS_LL_STACK(qi))
++ {
++ // For the location list window, create a reference to the
++ // location list from the window 'win'.
++ curwin->w_llist_ref = win->w_llist;
++ win->w_llist->qf_refcount++;
++ }
++
++ if (oldwin != curwin)
++ oldwin = NULL; // don't store info when in another window
++ if (qf_buf != NULL)
++ {
++ // Use the existing quickfix buffer
++ (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
++ ECMD_HIDE + ECMD_OLDBUF, oldwin);
++ }
++ else
++ {
++ // Create a new quickfix buffer
++ (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin);
++
++ // switch off 'swapfile'
++ set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
++ set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
++ OPT_LOCAL);
++ set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
++ RESET_BINDING(curwin);
++ #ifdef FEAT_DIFF
++ curwin->w_p_diff = FALSE;
++ #endif
++ #ifdef FEAT_FOLDING
++ set_option_value((char_u *)"fdm", 0L, (char_u *)"manual",
++ OPT_LOCAL);
++ #endif
++ }
++
++ // Only set the height when still in the same tab page and there is no
++ // window to the side.
++ if (curtab == prevtab && curwin->w_width == Columns)
++ win_setheight(height);
++ curwin->w_p_wfh = TRUE; // set 'winfixheight'
++ if (win_valid(win))
++ prevwin = win;
++
++ return OK;
++ }
++
++ /*
+ * ":copen": open a window that shows the list of errors.
+ * ":lopen": open a window that shows the location list.
+ */
+***************
+*** 3815,3824 ****
+ {
+ qf_info_T *qi = &ql_info;
+ int height;
+! win_T *win;
+! tabpage_T *prevtab = curtab;
+! buf_T *qf_buf;
+! win_T *oldwin = curwin;
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+--- 3921,3927 ----
+ {
+ qf_info_T *qi = &ql_info;
+ int height;
+! int status = FAIL;
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+***************
+*** 3835,3941 ****
+ else
+ height = QF_WINHEIGHT;
+
+! reset_VIsual_and_resel(); /* stop Visual mode */
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+
+! /*
+! * Find existing quickfix window, or open a new one.
+! */
+! win = qf_find_win(qi);
+!
+! if (win != NULL && cmdmod.tab == 0)
+! {
+! win_goto(win);
+! if (eap->addr_count != 0)
+! {
+! if (cmdmod.split & WSP_VERT)
+! {
+! if (height != win->w_width)
+! win_setwidth(height);
+! }
+! else if (height != win->w_height)
+! win_setheight(height);
+! }
+! }
+! else
+! {
+! int flags = 0;
+!
+! qf_buf = qf_find_buf(qi);
+!
+! /* The current window becomes the previous window afterwards. */
+! win = curwin;
+!
+! if ((eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
+! && cmdmod.split == 0)
+! /* Create the new quickfix window at the very bottom, except when
+! * :belowright or :aboveleft is used. */
+! win_goto(lastwin);
+! /* Default is to open the window below the current window */
+! if (cmdmod.split == 0)
+! flags = WSP_BELOW;
+! flags |= WSP_NEWLOC;
+! if (win_split(height, flags) == FAIL)
+! return; /* not enough room for window */
+! RESET_BINDING(curwin);
+!
+! if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
+! {
+! /*
+! * For the location list window, create a reference to the
+! * location list from the window 'win'.
+! */
+! curwin->w_llist_ref = win->w_llist;
+! win->w_llist->qf_refcount++;
+! }
+!
+! if (oldwin != curwin)
+! oldwin = NULL; /* don't store info when in another window */
+! if (qf_buf != NULL)
+! /* Use the existing quickfix buffer */
+! (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
+! ECMD_HIDE + ECMD_OLDBUF, oldwin);
+! else
+! {
+! /* Create a new quickfix buffer */
+! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin);
+! /* switch off 'swapfile' */
+! set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
+! set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
+! OPT_LOCAL);
+! set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
+! RESET_BINDING(curwin);
+! #ifdef FEAT_DIFF
+! curwin->w_p_diff = FALSE;
+! #endif
+! #ifdef FEAT_FOLDING
+! set_option_value((char_u *)"fdm", 0L, (char_u *)"manual",
+! OPT_LOCAL);
+! #endif
+! }
+!
+! /* Only set the height when still in the same tab page and there is no
+! * window to the side. */
+! if (curtab == prevtab && curwin->w_width == Columns)
+! win_setheight(height);
+! curwin->w_p_wfh = TRUE; /* set 'winfixheight' */
+! if (win_valid(win))
+! prevwin = win;
+! }
+
+ qf_set_title_var(&qi->qf_lists[qi->qf_curlist]);
+
+! /*
+! * Fill the buffer with the quickfix list.
+! */
+ qf_fill_buffer(qi, curbuf, NULL);
+
+ curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+ curwin->w_cursor.col = 0;
+ check_cursor();
+! update_topline(); /* scroll to show the line */
+ }
+
+ /*
+--- 3938,3965 ----
+ else
+ height = QF_WINHEIGHT;
+
+! reset_VIsual_and_resel(); // stop Visual mode
+ #ifdef FEAT_GUI
+ need_mouse_correct = TRUE;
+ #endif
+
+! // Find an existing quickfix window, or open a new one.
+! if (cmdmod.tab == 0)
+! status = qf_goto_cwindow(qi, eap->addr_count != 0, height,
+! cmdmod.split & WSP_VERT);
+! if (status == FAIL)
+! if (qf_open_new_cwindow(qi, height) == FAIL)
+! return;
+
+ qf_set_title_var(&qi->qf_lists[qi->qf_curlist]);
+
+! // Fill the buffer with the quickfix list.
+ qf_fill_buffer(qi, curbuf, NULL);
+
+ curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+ curwin->w_cursor.col = 0;
+ check_cursor();
+! update_topline(); // scroll to show the line
+ }
+
+ /*
+*** ../vim-8.1.0409/src/version.c 2018-09-19 21:06:28.344234982 +0200
+--- src/version.c 2018-09-19 21:54:49.149575674 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 410,
+ /**/
+
+--
+You are only young once, but you can stay immature indefinitely.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0411 b/data/vim/patches/8.1.0411
new file mode 100644
index 000000000..bed221b9f
--- /dev/null
+++ b/data/vim/patches/8.1.0411
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0411
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0411
+Problem: Renamed file missing from distribution.
+Solution: Rename screen.c to termscreen.c (Zdenek Dohnal, closes #3449)
+Files: Filelist
+
+
+*** ../vim-8.1.0410/Filelist 2018-09-18 21:41:43.716652306 +0200
+--- Filelist 2018-09-19 21:57:47.544243757 +0200
+***************
+*** 228,234 ****
+ src/libvterm/src/parser.c \
+ src/libvterm/src/pen.c \
+ src/libvterm/src/rect.h \
+! src/libvterm/src/screen.c \
+ src/libvterm/src/state.c \
+ src/libvterm/src/unicode.c \
+ src/libvterm/src/utf8.h \
+--- 228,234 ----
+ src/libvterm/src/parser.c \
+ src/libvterm/src/pen.c \
+ src/libvterm/src/rect.h \
+! src/libvterm/src/termscreen.c \
+ src/libvterm/src/state.c \
+ src/libvterm/src/unicode.c \
+ src/libvterm/src/utf8.h \
+*** ../vim-8.1.0410/src/version.c 2018-09-19 21:55:58.681068412 +0200
+--- src/version.c 2018-09-19 21:59:01.431666094 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 411,
+ /**/
+
+--
+Where do you want to crash today?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0412 b/data/vim/patches/8.1.0412
new file mode 100644
index 000000000..f41303905
--- /dev/null
+++ b/data/vim/patches/8.1.0412
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0412
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0412
+Problem: Cannot build with GTK 2.4.
+Solution: Add back a few #ifdefs. (Ken Takata, closes #3447)
+ Also support older GTK. (Tom Christensen)
+Files: src/gui_gtk_x11.c
+
+
+*** ../vim-8.1.0411/src/gui_gtk_x11.c 2018-09-18 22:29:59.888041388 +0200
+--- src/gui_gtk_x11.c 2018-09-19 22:38:37.832960461 +0200
+***************
+*** 3415,3420 ****
+--- 3415,3421 ----
+ send_tabline_event(idx + 1);
+ }
+
++ # if GTK_CHECK_VERSION(2,10,0)
+ /*
+ * Handle reordering the tabs (using D&D).
+ */
+***************
+*** 3433,3438 ****
+--- 3434,3440 ----
+ tabpage_move(idx);
+ }
+ }
++ # endif
+
+ /*
+ * Show or hide the tabline.
+***************
+*** 3516,3524 ****
+--- 3518,3528 ----
+ page,
+ event_box,
+ nr++);
++ # if GTK_CHECK_VERSION(2,10,0)
+ gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(gui.tabline),
+ page,
+ TRUE);
++ # endif
+ }
+
+ event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
+***************
+*** 3914,3926 ****
+--- 3918,3934 ----
+ # endif
+ gtk_container_add(GTK_CONTAINER(event_box), label);
+ gtk_notebook_set_tab_label(GTK_NOTEBOOK(gui.tabline), page, event_box);
++ # if GTK_CHECK_VERSION(2,10,0)
+ gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(gui.tabline), page, TRUE);
++ # endif
+ }
+
+ g_signal_connect(G_OBJECT(gui.tabline), "switch-page",
+ G_CALLBACK(on_select_tab), NULL);
++ # if GTK_CHECK_VERSION(2,10,0)
+ g_signal_connect(G_OBJECT(gui.tabline), "page-reordered",
+ G_CALLBACK(on_tab_reordered), NULL);
++ # endif
+
+ /* Create a popup menu for the tab line and connect it. */
+ tabline_menu = create_tabline_menu();
+***************
+*** 6395,6401 ****
+--- 6403,6413 ----
+ gui_mch_flush(void)
+ {
+ if (gui.mainwin != NULL && gtk_widget_get_realized(gui.mainwin))
++ #if GTK_CHECK_VERSION(2,4,0)
+ gdk_display_flush(gtk_widget_get_display(gui.mainwin));
++ #else
++ gdk_display_sync(gtk_widget_get_display(gui.mainwin));
++ #endif
+ }
+
+ /*
+*** ../vim-8.1.0411/src/version.c 2018-09-19 22:00:26.150988737 +0200
+--- src/version.c 2018-09-19 22:39:13.452611172 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 412,
+ /**/
+
+--
+From "know your smileys":
+ (:-# Said something he shouldn't have
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0413 b/data/vim/patches/8.1.0413
new file mode 100644
index 000000000..766ff2756
--- /dev/null
+++ b/data/vim/patches/8.1.0413
@@ -0,0 +1,75 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0413
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0413
+Problem: Test output is duplicated or missing.
+Solution: Adjust the MS-Windows and Unix test makefiles. (Ken Takata,
+ closes #3452)
+Files: src/testdir/Make_dos.mak, src/testdir/Makefile
+
+
+*** ../vim-8.1.0412/src/testdir/Make_dos.mak 2018-07-14 21:48:42.444978086 +0200
+--- src/testdir/Make_dos.mak 2018-09-20 21:33:05.054779441 +0200
+***************
+*** 112,118 ****
+ # to write and a lot easier to read and debug.
+ # Limitation: Only works with the +eval feature.
+
+! newtests: $(NEW_TESTS)
+
+ .vim.res:
+ @echo $(VIMPROG) > vimcmd
+--- 112,121 ----
+ # to write and a lot easier to read and debug.
+ # Limitation: Only works with the +eval feature.
+
+! newtests: newtestssilent
+! @if exist messages (findstr "SKIPPED FAILED" messages > nul) && type messages
+!
+! newtestssilent: $(NEW_TESTS)
+
+ .vim.res:
+ @echo $(VIMPROG) > vimcmd
+*** ../vim-8.1.0412/src/testdir/Makefile 2018-07-14 21:48:42.448978060 +0200
+--- src/testdir/Makefile 2018-09-20 21:33:05.054779441 +0200
+***************
+*** 121,127 ****
+ RUN_VIMTEST = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim
+
+ newtests: newtestssilent
+! @/bin/sh -c "if test -f messages && grep -q 'SKIPPED\|FAILED' messages; then cat messages && if test -f test.log; then cat test.log; fi ; fi"
+
+ newtestssilent: $(NEW_TESTS)
+
+--- 121,127 ----
+ RUN_VIMTEST = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim
+
+ newtests: newtestssilent
+! @/bin/sh -c "if test -f messages && grep -q 'SKIPPED\|FAILED' messages; then cat messages; fi"
+
+ newtestssilent: $(NEW_TESTS)
+
+*** ../vim-8.1.0412/src/version.c 2018-09-19 22:39:59.816157865 +0200
+--- src/version.c 2018-09-20 21:36:32.656899510 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 413,
+ /**/
+
+--
+From "know your smileys":
+ =):-) Uncle Sam
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0414 b/data/vim/patches/8.1.0414
new file mode 100644
index 000000000..1de47e6b2
--- /dev/null
+++ b/data/vim/patches/8.1.0414
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0414
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0414
+Problem: v:option_old and v:option_new are cleared when using :set in
+ OptionSet autocmd. (Gary Johnson)
+Solution: Don't trigger OptionSet recursively.
+Files: src/option.c
+
+
+*** ../vim-8.1.0413/src/option.c 2018-09-13 20:31:47.103018229 +0200
+--- src/option.c 2018-09-20 21:26:55.954190027 +0200
+***************
+*** 4359,4365 ****
+ char_u *oldval,
+ char_u *newval)
+ {
+! if (oldval != NULL && newval != NULL)
+ {
+ char_u buf_type[7];
+
+--- 4359,4367 ----
+ char_u *oldval,
+ char_u *newval)
+ {
+! // Don't do this recursively.
+! if (oldval != NULL && newval != NULL
+! && *get_vim_var_str(VV_OPTION_TYPE) == NUL)
+ {
+ char_u buf_type[7];
+
+***************
+*** 8858,8866 ****
+ options[opt_idx].flags |= P_WAS_SET;
+
+ #if defined(FEAT_EVAL)
+! if (!starting)
+ {
+ char_u buf_old[2], buf_new[2], buf_type[7];
+ vim_snprintf((char *)buf_old, 2, "%d", old_value ? TRUE: FALSE);
+ vim_snprintf((char *)buf_new, 2, "%d", value ? TRUE: FALSE);
+ vim_snprintf((char *)buf_type, 7, "%s", (opt_flags & OPT_LOCAL) ? "local" : "global");
+--- 8860,8870 ----
+ options[opt_idx].flags |= P_WAS_SET;
+
+ #if defined(FEAT_EVAL)
+! // Don't do this while starting up or recursively.
+! if (!starting && *get_vim_var_str(VV_OPTION_TYPE) == NUL)
+ {
+ char_u buf_old[2], buf_new[2], buf_type[7];
++
+ vim_snprintf((char *)buf_old, 2, "%d", old_value ? TRUE: FALSE);
+ vim_snprintf((char *)buf_new, 2, "%d", value ? TRUE: FALSE);
+ vim_snprintf((char *)buf_type, 7, "%s", (opt_flags & OPT_LOCAL) ? "local" : "global");
+***************
+*** 9415,9421 ****
+ options[opt_idx].flags |= P_WAS_SET;
+
+ #if defined(FEAT_EVAL)
+! if (!starting && errmsg == NULL)
+ {
+ char_u buf_old[11], buf_new[11], buf_type[7];
+ vim_snprintf((char *)buf_old, 10, "%ld", old_value);
+--- 9419,9426 ----
+ options[opt_idx].flags |= P_WAS_SET;
+
+ #if defined(FEAT_EVAL)
+! // Don't do this while starting up, failure or recursively.
+! if (!starting && errmsg == NULL && *get_vim_var_str(VV_OPTION_TYPE) == NUL)
+ {
+ char_u buf_old[11], buf_new[11], buf_type[7];
+ vim_snprintf((char *)buf_old, 10, "%ld", old_value);
+*** ../vim-8.1.0413/src/version.c 2018-09-20 21:39:29.643309960 +0200
+--- src/version.c 2018-09-21 11:58:57.971879329 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 414,
+ /**/
+
+--
+From "know your smileys":
+ (X0||) Double hamburger with lettuce and tomato
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0415 b/data/vim/patches/8.1.0415
new file mode 100644
index 000000000..68dd40a34
--- /dev/null
+++ b/data/vim/patches/8.1.0415
@@ -0,0 +1,122 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0415
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0415
+Problem: Not actually using 16 colors with vtp.
+Solution: Always use 256 colors when vtp is used. (Nobuhiro Takasaki,
+ closes #3432)
+Files: src/option.c, src/term.c
+
+
+*** ../vim-8.1.0414/src/option.c 2018-09-21 11:59:28.287579498 +0200
+--- src/option.c 2018-09-21 12:14:29.955639702 +0200
+***************
+*** 7785,7792 ****
+ #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS)
+ if (did_swaptcap)
+ {
+- if (t_colors < 256)
+- p_tgc = 0;
+ set_termname((char_u *)"win32");
+ init_highlight(TRUE, FALSE);
+ }
+--- 7785,7790 ----
+*** ../vim-8.1.0414/src/term.c 2018-09-13 15:33:39.609712174 +0200
+--- src/term.c 2018-09-21 12:14:05.095844454 +0200
+***************
+*** 6743,6777 ****
+ # define KSSIZE 20
+ struct ks_tbl_s
+ {
+! int code; /* value of KS_ */
+! char *vtp; /* code in vtp mode */
+! char *vtp2; /* code in vtp2 mode */
+! char buf[KSSIZE]; /* save buffer in non-vtp mode */
+! char vbuf[KSSIZE]; /* save buffer in vtp mode */
+! char v2buf[KSSIZE]; /* save buffer in vtp2 mode */
+! char arr[KSSIZE]; /* real buffer */
+ };
+
+ static struct ks_tbl_s ks_tbl[] =
+ {
+! {(int)KS_ME, "\033|0m", "\033|0m"}, /* normal */
+! {(int)KS_MR, "\033|7m", "\033|7m"}, /* reverse */
+! {(int)KS_MD, "\033|1m", "\033|1m"}, /* bold */
+! {(int)KS_SO, "\033|91m", "\033|91m"}, /* standout: bright red text */
+! {(int)KS_SE, "\033|39m", "\033|39m"}, /* standout end: default color */
+! {(int)KS_CZH, "\033|95m", "\033|95m"}, /* italic: bright magenta text */
+! {(int)KS_CZR, "\033|0m", "\033|0m"}, /* italic end */
+! {(int)KS_US, "\033|4m", "\033|4m"}, /* underscore */
+! {(int)KS_UE, "\033|24m", "\033|24m"}, /* underscore end */
+ # ifdef TERMINFO
+! {(int)KS_CAB, "\033|%p1%db", "\033|%p14%dm"}, /* set background color */
+! {(int)KS_CAF, "\033|%p1%df", "\033|%p13%dm"}, /* set foreground color */
+ # else
+! {(int)KS_CAB, "\033|%db", "\033|4%dm"}, /* set background color */
+! {(int)KS_CAF, "\033|%df", "\033|3%dm"}, /* set foreground color */
+ # endif
+! {(int)KS_CCO, "16", "256"}, /* colors */
+! {(int)KS_NAME} /* terminator */
+ };
+
+ static struct builtin_term *
+--- 6743,6777 ----
+ # define KSSIZE 20
+ struct ks_tbl_s
+ {
+! int code; // value of KS_
+! char *vtp; // code in vtp mode
+! char *vtp2; // code in vtp2 mode
+! char buf[KSSIZE]; // save buffer in non-vtp mode
+! char vbuf[KSSIZE]; // save buffer in vtp mode
+! char v2buf[KSSIZE]; // save buffer in vtp2 mode
+! char arr[KSSIZE]; // real buffer
+ };
+
+ static struct ks_tbl_s ks_tbl[] =
+ {
+! {(int)KS_ME, "\033|0m", "\033|0m"}, // normal
+! {(int)KS_MR, "\033|7m", "\033|7m"}, // reverse
+! {(int)KS_MD, "\033|1m", "\033|1m"}, // bold
+! {(int)KS_SO, "\033|91m", "\033|91m"}, // standout: bright red text
+! {(int)KS_SE, "\033|39m", "\033|39m"}, // standout end: default color
+! {(int)KS_CZH, "\033|95m", "\033|95m"}, // italic: bright magenta text
+! {(int)KS_CZR, "\033|0m", "\033|0m"}, // italic end
+! {(int)KS_US, "\033|4m", "\033|4m"}, // underscore
+! {(int)KS_UE, "\033|24m", "\033|24m"}, // underscore end
+ # ifdef TERMINFO
+! {(int)KS_CAB, "\033|%p1%db", "\033|%p14%dm"}, // set background color
+! {(int)KS_CAF, "\033|%p1%df", "\033|%p13%dm"}, // set foreground color
+ # else
+! {(int)KS_CAB, "\033|%db", "\033|4%dm"}, // set background color
+! {(int)KS_CAF, "\033|%df", "\033|3%dm"}, // set foreground color
+ # endif
+! {(int)KS_CCO, "256", "256"}, // colors
+! {(int)KS_NAME} // terminator
+ };
+
+ static struct builtin_term *
+*** ../vim-8.1.0414/src/version.c 2018-09-21 11:59:28.291579459 +0200
+--- src/version.c 2018-09-21 12:23:58.275038358 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 415,
+ /**/
+
+--
+From "know your smileys":
+ 8<}} Glasses, big nose, beard
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0416 b/data/vim/patches/8.1.0416
new file mode 100644
index 000000000..2c53c5f63
--- /dev/null
+++ b/data/vim/patches/8.1.0416
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0416
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0416
+Problem: Sort doesn't report deleted lines.
+Solution: Call msgmore(). (Christian Brabandt, closes #3454)
+Files: src/ex_cmds.c, src/testdir/test_sort.vim
+
+
+*** ../vim-8.1.0415/src/ex_cmds.c 2018-09-13 15:33:39.605712221 +0200
+--- src/ex_cmds.c 2018-09-21 12:44:17.494880453 +0200
+***************
+*** 649,655 ****
+--- 649,658 ----
+ /* Adjust marks for deleted (or added) lines and prepare for displaying. */
+ deleted = (long)(count - (lnum - eap->line2));
+ if (deleted > 0)
++ {
+ mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted);
++ msgmore(-deleted);
++ }
+ else if (deleted < 0)
+ mark_adjust(eap->line2, MAXLNUM, -deleted, 0L);
+
+*** ../vim-8.1.0415/src/testdir/test_sort.vim 2018-06-28 11:28:04.797455530 +0200
+--- src/testdir/test_sort.vim 2018-09-21 12:43:02.327593721 +0200
+***************
+*** 1221,1223 ****
+--- 1221,1253 ----
+
+ enew!
+ endfunc
++
++ func Test_sort_cmd_report()
++ enew!
++ call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3))
++ $delete _
++ setlocal nomodified
++ let res = execute('%sort u')
++
++ call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0'))
++ call assert_match("6 fewer lines", res)
++ enew!
++ call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3))
++ $delete _
++ setlocal nomodified report=10
++ let res = execute('%sort u')
++
++ call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0'))
++ call assert_equal("", res)
++ enew!
++ call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3))
++ $delete _
++ setl report&vim
++ setlocal nomodified
++ let res = execute('1g/^/%sort u')
++
++ call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0'))
++ " the output comes from the :g command, not from the :sort
++ call assert_match("6 fewer lines", res)
++ enew!
++ endfunc
+*** ../vim-8.1.0415/src/version.c 2018-09-21 12:24:08.618955563 +0200
+--- src/version.c 2018-09-21 12:45:59.157931707 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 416,
+ /**/
+
+--
+From "know your smileys":
+ %-) After staring at screen for 15 hours
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0417 b/data/vim/patches/8.1.0417
new file mode 100644
index 000000000..3fb1603be
--- /dev/null
+++ b/data/vim/patches/8.1.0417
@@ -0,0 +1,140 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0417
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0417
+Problem: Several command line arguments are not tested.
+Solution: Add tests for -m, -M, -R and -Vfile. (Dominique Pelle,
+ closes #3458)
+Files: src/testdir/test_startup.vim
+
+
+*** ../vim-8.1.0416/src/testdir/test_startup.vim 2018-09-19 21:06:28.344234982 +0200
+--- src/testdir/test_startup.vim 2018-09-21 12:52:01.786654278 +0200
+***************
+*** 194,201 ****
+ " Open 2 windows split vertically. Expect:
+ " - 2 windows
+ " - both windows should have the same or almost the same width
+! " - sum of both windows width (+ 1 separator) should be equal to the
+! " number of columns
+ " - both windows should have the same height
+ " - window height (+ 2 for the statusline and Ex command) should be equal
+ " to the number of lines
+--- 194,201 ----
+ " Open 2 windows split vertically. Expect:
+ " - 2 windows
+ " - both windows should have the same or almost the same width
+! " - sum of both windows width (+ 1 for the separator) should be equal to
+! " the number of columns
+ " - both windows should have the same height
+ " - window height (+ 2 for the statusline and Ex command) should be equal
+ " to the number of lines
+***************
+*** 269,274 ****
+--- 269,316 ----
+ call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\r\nline 1: \" The default vimrc file\..* verbose=15\n", out)
+ endfunc
+
++ " Test the -V[N]{filename} argument to set the 'verbose' option to N
++ " and set 'verbosefile' to filename.
++ func Test_V_file_arg()
++ if RunVim([], [], ' --clean -X -V2Xverbosefile -c "set verbose? verbosefile?" -cq')
++ let out = join(readfile('Xverbosefile'), "\n")
++ call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\n", out)
++ call assert_match("\n verbose=2\n", out)
++ call assert_match("\n verbosefile=Xverbosefile", out)
++ endif
++
++ call delete('Xverbosefile')
++ endfunc
++
++ " Test the -m, -M and -R arguments:
++ " -m resets 'write'
++ " -M resets 'modifiable' and 'write'
++ " -R sets 'readonly'
++ func Test_m_M_R()
++ let after = [
++ \ 'call writefile([&write, &modifiable, &readonly, &updatecount], "Xtestout")',
++ \ 'qall',
++ \ ]
++ if RunVim([], after, '')
++ let lines = readfile('Xtestout')
++ call assert_equal(['1', '1', '0', '200'], lines)
++ endif
++ if RunVim([], after, '-m')
++ let lines = readfile('Xtestout')
++ call assert_equal(['0', '1', '0', '200'], lines)
++ endif
++ if RunVim([], after, '-M')
++ let lines = readfile('Xtestout')
++ call assert_equal(['0', '0', '0', '200'], lines)
++ endif
++ if RunVim([], after, '-R')
++ let lines = readfile('Xtestout')
++ call assert_equal(['1', '1', '1', '10000'], lines)
++ endif
++
++ call delete('Xtestout')
++ endfunc
++
+ " Test the -A, -F and -H arguments (Arabic, Farsi and Hebrew modes).
+ func Test_A_F_H_arg()
+ let after = [
+***************
+*** 430,436 ****
+ call writefile(['123456'], 'Xtestout')
+ let after = [
+ \ ':startinsert',
+! \ 'call feedkeys("foobar\<c-o>:wq\<cr>","t")'
+ \ ]
+ if RunVim([], after, 'Xtestout')
+ let lines = readfile('Xtestout')
+--- 472,478 ----
+ call writefile(['123456'], 'Xtestout')
+ let after = [
+ \ ':startinsert',
+! \ 'call feedkeys("foobar\<c-o>:wq\<cr>","t")'
+ \ ]
+ if RunVim([], after, 'Xtestout')
+ let lines = readfile('Xtestout')
+***************
+*** 440,446 ****
+ call writefile(['123456'], 'Xtestout')
+ let after = [
+ \ ':startinsert!',
+! \ 'call feedkeys("foobar\<c-o>:wq\<cr>","t")'
+ \ ]
+ if RunVim([], after, 'Xtestout')
+ let lines = readfile('Xtestout')
+--- 482,488 ----
+ call writefile(['123456'], 'Xtestout')
+ let after = [
+ \ ':startinsert!',
+! \ 'call feedkeys("foobar\<c-o>:wq\<cr>","t")'
+ \ ]
+ if RunVim([], after, 'Xtestout')
+ let lines = readfile('Xtestout')
+*** ../vim-8.1.0416/src/version.c 2018-09-21 12:46:16.341772938 +0200
+--- src/version.c 2018-09-21 12:53:03.382109316 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 417,
+ /**/
+
+--
+From "know your smileys":
+ <>:-) Bishop
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0418 b/data/vim/patches/8.1.0418
new file mode 100644
index 000000000..db473f74e
--- /dev/null
+++ b/data/vim/patches/8.1.0418
@@ -0,0 +1,82 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0418
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0418
+Problem: MS-Windows: cannot separate Lua include and library directories.
+Solution: Add LUA_LIBDIR and LUA_INCDIR. (Ken Takata, closes #3464)
+Files: src/Make_cyg_ming.mak
+
+
+*** ../vim-8.1.0417/src/Make_cyg_ming.mak 2018-09-13 17:23:05.169150892 +0200
+--- src/Make_cyg_ming.mak 2018-09-21 13:42:59.711938356 +0200
+***************
+*** 244,249 ****
+--- 244,251 ----
+
+ # Lua interface:
+ # LUA=[Path to Lua directory] (Set inside Make_cyg.mak or Make_ming.mak)
++ # LUA_LIBDIR=[Path to Lua library directory] (default: $LUA/lib)
++ # LUA_INCDIR=[Path to Lua include directory] (default: $LUA/include)
+ # DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
+ # LUA_VER=[Lua version, eg 51, 52] (default is 53)
+ ifdef LUA
+***************
+*** 256,262 ****
+ endif
+
+ ifeq (no,$(DYNAMIC_LUA))
+! LUA_LIB = -L$(LUA)/lib -llua
+ endif
+
+ endif
+--- 258,265 ----
+ endif
+
+ ifeq (no,$(DYNAMIC_LUA))
+! LUA_LIBDIR = $(LUA)/lib
+! LUA_LIB = -L$(LUA_LIBDIR) -llua
+ endif
+
+ endif
+***************
+*** 524,530 ****
+ endif
+
+ ifdef LUA
+! CFLAGS += -I$(LUA)/include -I$(LUA) -DFEAT_LUA
+ ifeq (yes, $(DYNAMIC_LUA))
+ CFLAGS += -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
+ endif
+--- 527,534 ----
+ endif
+
+ ifdef LUA
+! LUA_INCDIR = $(LUA)/include
+! CFLAGS += -I$(LUA_INCDIR) -I$(LUA) -DFEAT_LUA
+ ifeq (yes, $(DYNAMIC_LUA))
+ CFLAGS += -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
+ endif
+*** ../vim-8.1.0417/src/version.c 2018-09-21 12:54:02.685586971 +0200
+--- src/version.c 2018-09-21 13:43:17.639865260 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 418,
+ /**/
+
+--
+From "know your smileys":
+ +<(:-) The Pope
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0419 b/data/vim/patches/8.1.0419
new file mode 100644
index 000000000..737189835
--- /dev/null
+++ b/data/vim/patches/8.1.0419
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0419
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0419
+Problem: Cygwin: running cproto fails with -O2.
+Solution: Strip -O2 for cproto. (Ken Takata, closes #3465)
+Files: src/Makefile
+
+
+*** ../vim-8.1.0418/src/Makefile 2018-09-15 15:08:48.348852704 +0200
+--- src/Makefile 2018-09-21 13:55:37.399172113 +0200
+***************
+*** 2028,2035 ****
+ # them as a list of individual flags.
+ # The -E"gcc -E" argument must be separate to avoid problems with shell
+ # quoting.
+ CPROTO = cproto $(PROTO_FLAGS) -DPROTO \
+! `echo '$(LINT_CFLAGS)' | sed -e 's/ -[a-z-]\+//g'`
+
+ ### Would be nice if this would work for "normal" make.
+ ### Currently it only works for (Free)BSD make.
+--- 2028,2036 ----
+ # them as a list of individual flags.
+ # The -E"gcc -E" argument must be separate to avoid problems with shell
+ # quoting.
++ # Strip -O2, it may cause cproto to write stderr to the file "2".
+ CPROTO = cproto $(PROTO_FLAGS) -DPROTO \
+! `echo '$(LINT_CFLAGS)' | sed -e 's/ -[a-z-]\+//g' -e 's/ -O[^ ]\+//g'`
+
+ ### Would be nice if this would work for "normal" make.
+ ### Currently it only works for (Free)BSD make.
+*** ../vim-8.1.0418/src/version.c 2018-09-21 13:44:04.307661575 +0200
+--- src/version.c 2018-09-21 13:53:52.263969338 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 419,
+ /**/
+
+--
+From "know your smileys":
+ 2B|^2B Message from Shakespeare
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0420 b/data/vim/patches/8.1.0420
new file mode 100644
index 000000000..a630103f3
--- /dev/null
+++ b/data/vim/patches/8.1.0420
@@ -0,0 +1,73 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0420
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0420
+Problem: Generating vim.lib when using ActivePerl 5.20.3 or later.
+Solution: Redefine XS_EXTERNAL(). (Ken Takata, closes #3462)
+Files: src/if_perl.xs
+
+
+*** ../vim-8.1.0419/src/if_perl.xs 2018-08-02 21:46:47.575548793 +0200
+--- src/if_perl.xs 2018-09-21 13:59:48.885177259 +0200
+***************
+*** 88,97 ****
+ # endif
+ #endif
+
+! /* Perl compatibility stuff. This should ensure compatibility with older
+! * versions of Perl.
+! */
+!
+ #ifndef PERL_VERSION
+ # include <patchlevel.h>
+ # define PERL_REVISION 5
+--- 88,95 ----
+ # endif
+ #endif
+
+! // Perl compatibility stuff. This should ensure compatibility with older
+! // versions of Perl.
+ #ifndef PERL_VERSION
+ # include <patchlevel.h>
+ # define PERL_REVISION 5
+***************
+*** 99,104 ****
+--- 97,110 ----
+ # define PERL_SUBVERSION SUBVERSION
+ #endif
+
++
++ // Work around for ActivePerl 5.20.3+: Avoid generating (g)vim.lib.
++ #if defined(ACTIVEPERL_VERSION) && (ACTIVEPERL_VERSION >= 2003) \
++ && defined(WIN32) && defined(USE_DYNAMIC_LOADING)
++ # undef XS_EXTERNAL
++ # define XS_EXTERNAL(name) XSPROTO(name)
++ #endif
++
+ /*
+ * Quoting Jan Dubois of Active State:
+ * ActivePerl build 822 still identifies itself as 5.8.8 but already
+*** ../vim-8.1.0419/src/version.c 2018-09-21 13:56:21.522830206 +0200
+--- src/version.c 2018-09-21 14:00:53.928646015 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 420,
+ /**/
+
+--
+From "know your smileys":
+ :-D Big smile
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0421 b/data/vim/patches/8.1.0421
new file mode 100644
index 000000000..81dc863a7
--- /dev/null
+++ b/data/vim/patches/8.1.0421
@@ -0,0 +1,76 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0421
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0421
+Problem: MS-Windows: Ruby path is wrong for Ruby 1.9 and later.
+Solution: Let -I argument depend on Ruby version. (Ken Takata, closes #3461)
+Files: src/Make_cyg_ming.mak, src/Make_mvc.mak
+
+
+*** ../vim-8.1.0420/src/Make_cyg_ming.mak 2018-09-21 13:44:04.307661575 +0200
+--- src/Make_cyg_ming.mak 2018-09-21 14:13:13.894175913 +0200
+***************
+*** 475,483 ****
+ RUBY_19_OR_LATER = 1
+ endif
+
+- RUBYINC = -I $(RUBY)/lib/ruby/$(RUBY_API_VER_LONG)/$(RUBY_PLATFORM)
+ ifdef RUBY_19_OR_LATER
+! RUBYINC += -I $(RUBY)/include/ruby-$(RUBY_API_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_API_VER_LONG)/$(RUBY_PLATFORM)
+ endif
+ ifeq (no, $(DYNAMIC_RUBY))
+ RUBYLIB = -L$(RUBY)/lib -l$(RUBY_INSTALL_NAME)
+--- 475,484 ----
+ RUBY_19_OR_LATER = 1
+ endif
+
+ ifdef RUBY_19_OR_LATER
+! RUBYINC = -I $(RUBY)/include/ruby-$(RUBY_API_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_API_VER_LONG)/$(RUBY_PLATFORM)
+! else
+! RUBYINC = -I $(RUBY)/lib/ruby/$(RUBY_API_VER_LONG)/$(RUBY_PLATFORM)
+ endif
+ ifeq (no, $(DYNAMIC_RUBY))
+ RUBYLIB = -L$(RUBY)/lib -l$(RUBY_INSTALL_NAME)
+*** ../vim-8.1.0420/src/Make_mvc.mak 2018-09-13 18:05:45.291070558 +0200
+--- src/Make_mvc.mak 2018-09-21 14:13:13.894175913 +0200
+***************
+*** 1136,1142 ****
+ CFLAGS = $(CFLAGS) -DFEAT_RUBY
+ RUBY_OBJ = $(OUTDIR)\if_ruby.obj
+ !if $(RUBY_VER) >= 19
+! RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)"
+ !else
+ RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)"
+ !endif
+--- 1136,1142 ----
+ CFLAGS = $(CFLAGS) -DFEAT_RUBY
+ RUBY_OBJ = $(OUTDIR)\if_ruby.obj
+ !if $(RUBY_VER) >= 19
+! RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)"
+ !else
+ RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_API_VER_LONG)\$(RUBY_PLATFORM)"
+ !endif
+*** ../vim-8.1.0420/src/version.c 2018-09-21 14:01:23.152405707 +0200
+--- src/version.c 2018-09-21 14:12:58.190389981 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 421,
+ /**/
+
+--
+From "know your smileys":
+ :'-D Laughing so much that they're crying
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0422 b/data/vim/patches/8.1.0422
new file mode 100644
index 000000000..c7fc13658
--- /dev/null
+++ b/data/vim/patches/8.1.0422
@@ -0,0 +1,60 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0422
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0422
+Problem: Cannot create map file with MinGW.
+Solution: Add support for $MAP. (Ken Takata, closes #3460)
+Files: src/Make_cyg_ming.mak
+
+
+*** ../vim-8.1.0421/src/Make_cyg_ming.mak 2018-09-21 14:31:48.037839069 +0200
+--- src/Make_cyg_ming.mak 2018-09-21 14:42:31.835638592 +0200
+***************
+*** 35,40 ****
+--- 35,43 ----
+ # set to yes for a debug build
+ DEBUG=no
+
++ # set to yes to create a mapfile
++ # MAP=yes
++
+ # set to SIZE for size, SPEED for speed, MAXSPEED for maximum optimization
+ OPTIMIZE=MAXSPEED
+
+***************
+*** 936,941 ****
+--- 939,948 ----
+ LIB += -Wl,-Bstatic -lwinpthread -Wl,-Bdynamic
+ endif
+
++ ifeq (yes, $(MAP))
++ LFLAGS += -Wl,-Map=$(TARGET).map
++ endif
++
+ all: $(TARGET) vimrun.exe xxd/xxd.exe install.exe uninstal.exe GvimExt/gvimext.dll
+
+ vimrun.exe: vimrun.c
+*** ../vim-8.1.0421/src/version.c 2018-09-21 14:31:48.037839069 +0200
+--- src/version.c 2018-09-21 14:40:52.312584994 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 422,
+ /**/
+
+--
+From "know your smileys":
+ @:-() Elvis Presley
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0423 b/data/vim/patches/8.1.0423
new file mode 100644
index 000000000..3ce553fe2
--- /dev/null
+++ b/data/vim/patches/8.1.0423
@@ -0,0 +1,96 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0423
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0423
+Problem: MS-Windows: using dup-close for flushing a file.
+Solution: Use _commit(). (Ken Takata, closes #3463)
+Files: src/memfile.c, src/os_mac.h, src/os_win32.h
+
+
+*** ../vim-8.1.0422/src/memfile.c 2018-02-10 18:34:22.000000000 +0100
+--- src/memfile.c 2018-09-21 14:47:04.965080463 +0200
+***************
+*** 539,547 ****
+ {
+ int status;
+ bhdr_T *hp;
+- #if defined(SYNC_DUP_CLOSE)
+- int fd;
+- #endif
+ int got_int_save = got_int;
+
+ if (mfp->mf_fd < 0) /* there is no file, nothing to do */
+--- 539,544 ----
+***************
+*** 624,636 ****
+ status = FAIL;
+ }
+ #endif
+! #ifdef SYNC_DUP_CLOSE
+! /*
+! * Win32 is a bit more work: Duplicate the file handle and close it.
+! * This should flush the file to disk.
+! */
+! if ((fd = dup(mfp->mf_fd)) >= 0)
+! close(fd);
+ #endif
+ #ifdef AMIGA
+ # if defined(__AROS__) || defined(__amigaos4__)
+--- 621,629 ----
+ status = FAIL;
+ }
+ #endif
+! #ifdef WIN32
+! if (_commit(mfp->mf_fd))
+! status = FAIL;
+ #endif
+ #ifdef AMIGA
+ # if defined(__AROS__) || defined(__amigaos4__)
+*** ../vim-8.1.0422/src/os_mac.h 2018-03-01 21:50:36.000000000 +0100
+--- src/os_mac.h 2018-09-21 14:47:04.965080463 +0200
+***************
+*** 101,107 ****
+ #define HAVE_AVAIL_MEM
+
+ #ifndef HAVE_CONFIG_H
+- /* #define SYNC_DUP_CLOSE sync() a file with dup() and close() */
+ # define HAVE_STRING_H
+ # define HAVE_STRCSPN
+ # define HAVE_MEMSET
+--- 101,106 ----
+*** ../vim-8.1.0422/src/os_win32.h 2018-08-21 19:47:44.724053803 +0200
+--- src/os_win32.h 2018-09-21 14:47:04.965080463 +0200
+***************
+*** 26,32 ****
+
+ #define BINARY_FILE_IO
+ #define USE_EXE_NAME /* use argv[0] for $VIM */
+- #define SYNC_DUP_CLOSE /* sync() a file with dup() and close() */
+ #define USE_TERM_CONSOLE
+ #ifndef HAVE_STRING_H
+ # define HAVE_STRING_H
+--- 26,31 ----
+*** ../vim-8.1.0422/src/version.c 2018-09-21 14:43:06.795306782 +0200
+--- src/version.c 2018-09-21 14:47:32.464854956 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 423,
+ /**/
+
+--
+From "know your smileys":
+ :-F Bucktoothed vampire with one tooth missing
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0424 b/data/vim/patches/8.1.0424
new file mode 100644
index 000000000..e1ea78f41
--- /dev/null
+++ b/data/vim/patches/8.1.0424
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0424
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0424
+Problem: Test output is very verbose, loading CI log is slow.
+Solution: Redirect output to /dev/null. (Ken Takata, closes #3456)
+Files: src/testdir/Makefile
+
+
+*** ../vim-8.1.0423/src/testdir/Makefile 2018-09-20 21:39:29.643309960 +0200
+--- src/testdir/Makefile 2018-09-21 16:32:28.010556536 +0200
+***************
+*** 9,14 ****
+--- 9,17 ----
+
+ SCRIPTSOURCE = ../../runtime
+
++ # Change this to empty to see the verbose output of tests.
++ REDIR_TEST_TO_NULL = > /dev/null
++
+ # Uncomment this line to use valgrind for memory leaks and extra warnings.
+ # The output goes into a file "valgrind.testN"
+ # Vim should be compiled with EXITFREE to avoid false warnings.
+***************
+*** 59,65 ****
+
+ test1.out: test1.in
+ -rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START) wrongtermsize
+! $(RUN_VIM) $*.in
+ @/bin/sh -c "if test -f wrongtermsize; \
+ then echo; \
+ echo test1 FAILED - terminal size must be 80x24 or larger; \
+--- 62,68 ----
+
+ test1.out: test1.in
+ -rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START) wrongtermsize
+! $(RUN_VIM) $*.in $(REDIR_TEST_TO_NULL)
+ @/bin/sh -c "if test -f wrongtermsize; \
+ then echo; \
+ echo test1 FAILED - terminal size must be 80x24 or larger; \
+***************
+*** 78,84 ****
+ # 200 msec is sufficient, but only modern sleep supports a fraction of
+ # a second, fall back to a second if it fails.
+ @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
+! $(RUN_VIM) $*.in
+
+ # For flaky tests retry one time. No tests at the moment.
+ #@/bin/sh -c "if test -f test.out -a $* = test61; then \
+--- 81,87 ----
+ # 200 msec is sufficient, but only modern sleep supports a fraction of
+ # a second, fall back to a second if it fails.
+ @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
+! $(RUN_VIM) $*.in $(REDIR_TEST_TO_NULL)
+
+ # For flaky tests retry one time. No tests at the moment.
+ #@/bin/sh -c "if test -f test.out -a $* = test61; then \
+***************
+*** 108,114 ****
+ # 200 msec is sufficient, but only modern sleep supports a fraction of
+ # a second, fall back to a second if it fails.
+ @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
+! $(RUN_VIM) $*.in
+ @/bin/sh -c "if test -f benchmark.out; then cat benchmark.out; fi"
+
+ nolog:
+--- 111,117 ----
+ # 200 msec is sufficient, but only modern sleep supports a fraction of
+ # a second, fall back to a second if it fails.
+ @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
+! $(RUN_VIM) $*.in $(REDIR_TEST_TO_NULL)
+ @/bin/sh -c "if test -f benchmark.out; then cat benchmark.out; fi"
+
+ nolog:
+***************
+*** 129,135 ****
+ .vim.res: writevimcmd
+ @echo "$(VIMPROG)" > vimcmd
+ @echo "$(RUN_VIMTEST)" >> vimcmd
+! $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim
+ @rm vimcmd
+
+ test_gui.res: test_gui.vim
+--- 132,138 ----
+ .vim.res: writevimcmd
+ @echo "$(VIMPROG)" > vimcmd
+ @echo "$(RUN_VIMTEST)" >> vimcmd
+! $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim $(REDIR_TEST_TO_NULL)
+ @rm vimcmd
+
+ test_gui.res: test_gui.vim
+*** ../vim-8.1.0423/src/version.c 2018-09-21 14:48:49.644214400 +0200
+--- src/version.c 2018-09-21 16:35:42.513022884 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 424,
+ /**/
+
+--
+I AM THANKFUL...
+...for the taxes that I pay because it means that I am employed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0425 b/data/vim/patches/8.1.0425
new file mode 100644
index 000000000..cde8ff826
--- /dev/null
+++ b/data/vim/patches/8.1.0425
@@ -0,0 +1,99 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0425
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0425
+Problem: ml_get error and crash with appendbufline(). (Masashi Iizuka)
+Solution: Set per-window buffer info. (Hirohito Higashi, closes #3455)
+Files: src/buffer.c, src/testdir/test_bufline.vim
+
+
+*** ../vim-8.1.0424/src/buffer.c 2018-09-13 18:33:02.366426166 +0200
+--- src/buffer.c 2018-09-21 16:58:58.049829001 +0200
+***************
+*** 428,434 ****
+--- 428,437 ----
+
+ FOR_ALL_WINDOWS(wp)
+ if (wp->w_buffer == buf)
++ {
+ can_unload = FALSE;
++ break;
++ }
+ }
+ if (!can_unload)
+ EMSG(_("E937: Attempt to delete a buffer that is in use"));
+***************
+*** 1742,1747 ****
+--- 1745,1753 ----
+ /* mark cursor position as being invalid */
+ curwin->w_valid = 0;
+
++ buflist_setfpos(curbuf, curwin, curbuf->b_last_cursor.lnum,
++ curbuf->b_last_cursor.col, TRUE);
++
+ /* Make sure the buffer is loaded. */
+ if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */
+ {
+*** ../vim-8.1.0424/src/testdir/test_bufline.vim 2018-06-07 18:17:42.278227523 +0200
+--- src/testdir/test_bufline.vim 2018-09-21 16:49:25.778439112 +0200
+***************
+*** 91,96 ****
+--- 91,123 ----
+ exe "bwipe! " . b
+ endfunc
+
++ func Test_appendbufline_no_E315()
++ let after = [
++ \ 'set stl=%f ls=2',
++ \ 'new',
++ \ 'let buf = bufnr("%")',
++ \ 'quit',
++ \ 'vsp',
++ \ 'exec "buffer" buf',
++ \ 'wincmd w',
++ \ 'call appendbufline(buf, 0, "abc")',
++ \ 'redraw',
++ \ 'while getbufline(buf, 1)[0] =~ "^\\s*$"',
++ \ ' sleep 10m',
++ \ 'endwhile',
++ \ 'au VimLeavePre * call writefile([v:errmsg], "Xerror")',
++ \ 'au VimLeavePre * call writefile(["done"], "Xdone")',
++ \ 'qall!',
++ \ ]
++ if !RunVim([], after, '--clean')
++ return
++ endif
++ call assert_notmatch("^E315:", readfile("Xerror")[0])
++ call assert_equal("done", readfile("Xdone")[0])
++ call delete("Xerror")
++ call delete("Xdone")
++ endfunc
++
+ func Test_deletebufline()
+ new
+ let b = bufnr('%')
+*** ../vim-8.1.0424/src/version.c 2018-09-21 16:37:20.084248861 +0200
+--- src/version.c 2018-09-21 16:58:24.382100516 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 425,
+ /**/
+
+--
+I AM THANKFUL...
+...for the mess to clean after a party because it means I have
+been surrounded by friends.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0426 b/data/vim/patches/8.1.0426
new file mode 100644
index 000000000..cd096bb5f
--- /dev/null
+++ b/data/vim/patches/8.1.0426
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0426
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0426
+Problem: Accessing invalid memory in SmcOpenConnection().
+Solution: Reduce size of errorstring by one. (Dominique Pelle, closes #3469)
+Files: src/os_unix.c, src/testdir/test_startup.vim
+
+
+*** ../vim-8.1.0425/src/os_unix.c 2018-09-13 15:33:39.609712174 +0200
+--- src/os_unix.c 2018-09-22 14:02:39.348661291 +0200
+***************
+*** 8032,8038 ****
+ &smcallbacks,
+ NULL,
+ &xsmp.clientid,
+! sizeof(errorstring),
+ errorstring);
+ if (xsmp.smcconn == NULL)
+ {
+--- 8032,8038 ----
+ &smcallbacks,
+ NULL,
+ &xsmp.clientid,
+! sizeof(errorstring) - 1,
+ errorstring);
+ if (xsmp.smcconn == NULL)
+ {
+*** ../vim-8.1.0425/src/testdir/test_startup.vim 2018-09-21 12:54:02.685586971 +0200
+--- src/testdir/test_startup.vim 2018-09-22 14:02:39.348661291 +0200
+***************
+*** 272,278 ****
+ " Test the -V[N]{filename} argument to set the 'verbose' option to N
+ " and set 'verbosefile' to filename.
+ func Test_V_file_arg()
+! if RunVim([], [], ' --clean -X -V2Xverbosefile -c "set verbose? verbosefile?" -cq')
+ let out = join(readfile('Xverbosefile'), "\n")
+ call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\n", out)
+ call assert_match("\n verbose=2\n", out)
+--- 272,278 ----
+ " Test the -V[N]{filename} argument to set the 'verbose' option to N
+ " and set 'verbosefile' to filename.
+ func Test_V_file_arg()
+! if RunVim([], [], ' --clean -V2Xverbosefile -c "set verbose? verbosefile?" -cq')
+ let out = join(readfile('Xverbosefile'), "\n")
+ call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\n", out)
+ call assert_match("\n verbose=2\n", out)
+*** ../vim-8.1.0425/src/version.c 2018-09-21 16:59:40.113489779 +0200
+--- src/version.c 2018-09-22 14:06:41.382926281 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 426,
+ /**/
+
+--
+I AM THANKFUL...
+...for a lawn that needs mowing, windows that need cleaning
+and gutters that need fixing because it means I have a home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0427 b/data/vim/patches/8.1.0427
new file mode 100644
index 000000000..9f073acfa
--- /dev/null
+++ b/data/vim/patches/8.1.0427
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0427
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0427
+Problem: MS-Windows GUI: using invalid encoded file name.
+Solution: Drop the file name and return NULL. (Ken Takata, closes #3467)
+Files: src/gui_w32.c
+
+
+*** ../vim-8.1.0426/src/gui_w32.c 2018-07-20 05:03:10.561146715 +0200
+--- src/gui_w32.c 2018-09-22 14:32:47.488261584 +0200
+***************
+*** 3627,3633 ****
+ WCHAR *extp = NULL;
+ WCHAR *initdirp = NULL;
+ WCHAR *filterp;
+! char_u *p;
+
+ if (dflt == NULL)
+ fileBuf[0] = NUL;
+--- 3627,3633 ----
+ WCHAR *extp = NULL;
+ WCHAR *initdirp = NULL;
+ WCHAR *filterp;
+! char_u *p, *q;
+
+ if (dflt == NULL)
+ fileBuf[0] = NUL;
+***************
+*** 3713,3728 ****
+
+ /* Convert from UCS2 to 'encoding'. */
+ p = utf16_to_enc(fileBuf, NULL);
+! if (p != NULL)
+! /* when out of memory we get garbage for non-ASCII chars */
+! STRCPY(fileBuf, p);
+! vim_free(p);
+
+ /* Give focus back to main window (when using MDI). */
+ SetFocus(s_hwnd);
+
+ /* Shorten the file name if possible */
+! return vim_strsave(shorten_fname1((char_u *)fileBuf));
+ }
+ # endif /* FEAT_MBYTE */
+
+--- 3713,3728 ----
+
+ /* Convert from UCS2 to 'encoding'. */
+ p = utf16_to_enc(fileBuf, NULL);
+! if (p == NULL)
+! return NULL;
+
+ /* Give focus back to main window (when using MDI). */
+ SetFocus(s_hwnd);
+
+ /* Shorten the file name if possible */
+! q = vim_strsave(shorten_fname1(p));
+! vim_free(p);
+! return q;
+ }
+ # endif /* FEAT_MBYTE */
+
+*** ../vim-8.1.0426/src/version.c 2018-09-22 14:08:41.926157823 +0200
+--- src/version.c 2018-09-22 14:38:22.921907692 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 427,
+ /**/
+
+--
+A fool learns from his mistakes, a wise man from someone else's.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0428 b/data/vim/patches/8.1.0428
new file mode 100644
index 000000000..6e3a7b264
--- /dev/null
+++ b/data/vim/patches/8.1.0428
@@ -0,0 +1,114 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0428
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0428
+Problem: The :suspend command is not tested.
+Solution: Add a test. (Dominique Pelle, closes #3472)
+Files: src/Make_all.mak, src/testdir/test_alot.vim,
+ src/testdir/test_suspend.vim
+
+
+*** ../vim-8.1.0427/src/Make_all.mak 2018-09-14 20:10:15.874499472 +0200
+--- src/Make_all.mak 2018-09-22 21:27:23.453506886 +0200
+***************
+*** 168,173 ****
+--- 168,174 ----
+ test_stat \
+ test_statusline \
+ test_substitute \
++ test_suspend \
+ test_swap \
+ test_syn_attr \
+ test_syntax \
+*** ../vim-8.1.0427/src/testdir/test_alot.vim 2018-09-14 20:10:15.874499472 +0200
+--- src/testdir/test_alot.vim 2018-09-22 21:27:23.453506886 +0200
+***************
+*** 52,57 ****
+--- 52,58 ----
+ source test_sort.vim
+ source test_sha256.vim
+ source test_statusline.vim
++ source test_suspend.vim
+ source test_syn_attr.vim
+ source test_tabline.vim
+ source test_tabpage.vim
+*** ../vim-8.1.0427/src/testdir/test_suspend.vim 2018-09-22 21:36:00.066330569 +0200
+--- src/testdir/test_suspend.vim 2018-09-22 21:27:23.453506886 +0200
+***************
+*** 0 ****
+--- 1,51 ----
++ " Test :suspend
++
++ source shared.vim
++
++ func Test_suspend()
++ if !has('terminal') || !executable('/bin/sh')
++ return
++ endif
++
++ let buf = term_start('/bin/sh')
++ " Wait for shell prompt.
++ call WaitForAssert({-> assert_match('$ $', term_getline(buf, '.'))})
++
++ call term_sendkeys(buf, v:progpath
++ \ . " --clean -X"
++ \ . " -c 'set nu'"
++ \ . " -c 'call setline(1, \"foo\")'"
++ \ . " Xfoo\<CR>")
++ " Cursor in terminal buffer should be on first line in spawned vim.
++ call WaitForAssert({-> assert_equal(' 1 foo', term_getline(buf, '.'))})
++
++ for suspend_cmd in [":suspend\<CR>",
++ \ ":stop\<CR>",
++ \ ":suspend!\<CR>",
++ \ ":stop!\<CR>",
++ \ "\<C-Z>"]
++ " Suspend and wait for shell prompt.
++ call term_sendkeys(buf, suspend_cmd)
++ call WaitForAssert({-> assert_match('$ $', term_getline(buf, '.'))})
++
++ " Without 'autowrite', buffer should not be written.
++ call assert_equal(0, filereadable('Xfoo'))
++
++ call term_sendkeys(buf, "fg\<CR>")
++ call WaitForAssert({-> assert_equal(' 1 foo', term_getline(buf, '.'))})
++ endfor
++
++ " Test that :suspend! with 'autowrite' writes content of buffers if modified.
++ call term_sendkeys(buf, ":set autowrite\<CR>")
++ call assert_equal(0, filereadable('Xfoo'))
++ call term_sendkeys(buf, ":suspend\<CR>")
++ " Wait for shell prompt.
++ call WaitForAssert({-> assert_match('$ $', term_getline(buf, '.'))})
++ call assert_equal(['foo'], readfile('Xfoo'))
++ call term_sendkeys(buf, "fg\<CR>")
++ call WaitForAssert({-> assert_equal(' 1 foo', term_getline(buf, '.'))})
++
++ exe buf . 'bwipe!'
++ call delete('Xfoo')
++ set autowrite&
++ endfunc
+*** ../vim-8.1.0427/src/version.c 2018-09-22 14:39:07.681593221 +0200
+--- src/version.c 2018-09-22 21:29:51.436437049 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 428,
+ /**/
+
+--
+From "know your smileys":
+ [:-) Frankenstein's monster
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0429 b/data/vim/patches/8.1.0429
new file mode 100644
index 000000000..462fae42d
--- /dev/null
+++ b/data/vim/patches/8.1.0429
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0429
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0429 (after 8.1.0343)
+Problem: No test for :lcd with 'shellslash'.
+Solution: Add a test. (Daniel Hahler, closes #3475)
+Files: src/testdir/test_getcwd.vim
+
+
+*** ../vim-8.1.0428/src/testdir/test_getcwd.vim 2018-02-09 20:40:03.000000000 +0100
+--- src/testdir/test_getcwd.vim 2018-09-23 19:32:18.801561143 +0200
+***************
+*** 98,100 ****
+--- 98,112 ----
+ call assert_equal("z Xdir3 1", GetCwdInfo(1, tp_nr))
+ call assert_equal(g:topdir, getcwd(-1))
+ endfunc
++
++ function Test_GetCwd_lcd_shellslash()
++ new
++ let root = fnamemodify('/', ':p')
++ exe 'lcd '.root
++ let cwd = getcwd()
++ if !exists('+shellslash') || &shellslash
++ call assert_equal(cwd[-1:], '/')
++ else
++ call assert_equal(cwd[-1:], '\')
++ endif
++ endfunc
+*** ../vim-8.1.0428/src/version.c 2018-09-22 21:36:38.162098496 +0200
+--- src/version.c 2018-09-23 19:34:59.448311507 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 429,
+ /**/
+
+--
+From "know your smileys":
+ C=}>;*{)) Drunk, devilish chef with a toupee in an updraft,
+ a mustache, and a double chin
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0430 b/data/vim/patches/8.1.0430
new file mode 100644
index 000000000..92a8df2ca
--- /dev/null
+++ b/data/vim/patches/8.1.0430
@@ -0,0 +1,44 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0430
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0430
+Problem: Xargadd file left behind after running test.
+Solution: Delete the file. (Dominique Pelle)
+Files: src/testdir/test_arglist.vim
+
+
+*** ../vim-8.1.0429/src/testdir/test_arglist.vim 2018-09-18 21:51:42.419876829 +0200
+--- src/testdir/test_arglist.vim 2018-09-23 23:15:06.204835313 +0200
+***************
+*** 94,99 ****
+--- 94,100 ----
+ call assert_equal('Xargadd', bufname('%'))
+ call assert_equal(2, line('$'))
+
++ call delete('Xargadd')
+ %argd
+ bwipe!
+ endfunc
+*** ../vim-8.1.0429/src/version.c 2018-09-23 19:36:10.215763496 +0200
+--- src/version.c 2018-09-24 21:20:21.845295031 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 430,
+ /**/
+
+--
+Common sense is what tells you that the world is flat.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0431 b/data/vim/patches/8.1.0431
new file mode 100644
index 000000000..3ccc35c90
--- /dev/null
+++ b/data/vim/patches/8.1.0431
@@ -0,0 +1,562 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0431
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0431
+Problem: The qf_jump() function is too long.
+Solution: Refactor to split it into several functions. (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0430/src/quickfix.c 2018-09-19 21:55:58.681068412 +0200
+--- src/quickfix.c 2018-09-24 21:46:42.589868380 +0200
+***************
+*** 2521,2530 ****
+ get_nth_valid_entry(
+ qf_list_T *qfl,
+ int errornr,
+! qfline_T *qf_ptr,
+! int *qf_index,
+! int dir)
+ {
+ qfline_T *prev_qf_ptr;
+ int prev_index;
+ static char_u *e_no_more_items = (char_u *)N_("E553: No more items");
+--- 2521,2531 ----
+ get_nth_valid_entry(
+ qf_list_T *qfl,
+ int errornr,
+! int dir,
+! int *new_qfidx)
+ {
++ qfline_T *qf_ptr = qfl->qf_ptr;
++ int qf_idx = qfl->qf_index;
+ qfline_T *prev_qf_ptr;
+ int prev_index;
+ static char_u *e_no_more_items = (char_u *)N_("E553: No more items");
+***************
+*** 2533,2548 ****
+ while (errornr--)
+ {
+ prev_qf_ptr = qf_ptr;
+! prev_index = *qf_index;
+
+ if (dir == FORWARD || dir == FORWARD_FILE)
+! qf_ptr = get_next_valid_entry(qfl, qf_ptr, qf_index, dir);
+ else
+! qf_ptr = get_prev_valid_entry(qfl, qf_ptr, qf_index, dir);
+ if (qf_ptr == NULL)
+ {
+ qf_ptr = prev_qf_ptr;
+! *qf_index = prev_index;
+ if (err != NULL)
+ {
+ EMSG(_(err));
+--- 2534,2549 ----
+ while (errornr--)
+ {
+ prev_qf_ptr = qf_ptr;
+! prev_index = qf_idx;
+
+ if (dir == FORWARD || dir == FORWARD_FILE)
+! qf_ptr = get_next_valid_entry(qfl, qf_ptr, &qf_idx, dir);
+ else
+! qf_ptr = get_prev_valid_entry(qfl, qf_ptr, &qf_idx, dir);
+ if (qf_ptr == NULL)
+ {
+ qf_ptr = prev_qf_ptr;
+! qf_idx = prev_index;
+ if (err != NULL)
+ {
+ EMSG(_(err));
+***************
+*** 2554,2581 ****
+ err = NULL;
+ }
+
+ return qf_ptr;
+ }
+
+ /*
+! * Get n'th (errornr) quickfix entry
+ */
+ static qfline_T *
+! get_nth_entry(
+! qf_list_T *qfl,
+! int errornr,
+! qfline_T *qf_ptr,
+! int *cur_qfidx)
+ {
+! int qf_idx = *cur_qfidx;
+
+! /* New error number is less than the current error number */
+ while (errornr < qf_idx && qf_idx > 1 && qf_ptr->qf_prev != NULL)
+ {
+ --qf_idx;
+ qf_ptr = qf_ptr->qf_prev;
+ }
+! /* New error number is greater than the current error number */
+ while (errornr > qf_idx && qf_idx < qfl->qf_count &&
+ qf_ptr->qf_next != NULL)
+ {
+--- 2555,2581 ----
+ err = NULL;
+ }
+
++ *new_qfidx = qf_idx;
+ return qf_ptr;
+ }
+
+ /*
+! * Get n'th (errornr) quickfix entry from the current entry in the quickfix
+! * list 'qfl'. Returns a pointer to the new entry and the index in 'new_qfidx'
+ */
+ static qfline_T *
+! get_nth_entry(qf_list_T *qfl, int errornr, int *new_qfidx)
+ {
+! qfline_T *qf_ptr = qfl->qf_ptr;
+! int qf_idx = qfl->qf_index;
+
+! // New error number is less than the current error number
+ while (errornr < qf_idx && qf_idx > 1 && qf_ptr->qf_prev != NULL)
+ {
+ --qf_idx;
+ qf_ptr = qf_ptr->qf_prev;
+ }
+! // New error number is greater than the current error number
+ while (errornr > qf_idx && qf_idx < qfl->qf_count &&
+ qf_ptr->qf_next != NULL)
+ {
+***************
+*** 2583,2589 ****
+ qf_ptr = qf_ptr->qf_next;
+ }
+
+! *cur_qfidx = qf_idx;
+ return qf_ptr;
+ }
+
+--- 2583,2615 ----
+ qf_ptr = qf_ptr->qf_next;
+ }
+
+! *new_qfidx = qf_idx;
+! return qf_ptr;
+! }
+!
+! /*
+! * Get a entry specied by 'errornr' and 'dir' from the current
+! * quickfix/location list. 'errornr' specifies the index of the entry and 'dir'
+! * specifies the direction (FORWARD/BACKWARD/FORWARD_FILE/BACKWARD_FILE).
+! * Returns a pointer to the entry and the index of the new entry is stored in
+! * 'new_qfidx'.
+! */
+! static qfline_T *
+! qf_get_entry(
+! qf_list_T *qfl,
+! int errornr,
+! int dir,
+! int *new_qfidx)
+! {
+! qfline_T *qf_ptr = qfl->qf_ptr;
+! int qfidx = qfl->qf_index;
+!
+! if (dir != 0) // next/prev valid entry
+! qf_ptr = get_nth_valid_entry(qfl, errornr, dir, &qfidx);
+! else if (errornr != 0) // go to specified number
+! qf_ptr = get_nth_entry(qfl, errornr, &qfidx);
+!
+! *new_qfidx = qfidx;
+ return qf_ptr;
+ }
+
+***************
+*** 2881,2886 ****
+--- 2907,2915 ----
+
+ /*
+ * Edit the selected file or help file.
++ * Returns OK if successfully edited the file, FAIL on failing to open the
++ * buffer and NOTDONE if the quickfix/location list was freed by an autocmd
++ * when opening the buffer.
+ */
+ static int
+ qf_jump_edit_buffer(
+***************
+*** 2888,2895 ****
+ qfline_T *qf_ptr,
+ int forceit,
+ win_T *oldwin,
+! int *opened_window,
+! int *abort)
+ {
+ qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
+ int retval = OK;
+--- 2917,2923 ----
+ qfline_T *qf_ptr,
+ int forceit,
+ win_T *oldwin,
+! int *opened_window)
+ {
+ qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
+ int retval = OK;
+***************
+*** 2925,2937 ****
+ if (!win_valid_any_tab(oldwin))
+ {
+ EMSG(_("E924: Current window was closed"));
+- *abort = TRUE;
+ *opened_window = FALSE;
+ }
+ else if (!qflist_valid(oldwin, save_qfid))
+ {
+ EMSG(_(e_loc_list_changed));
+! *abort = TRUE;
+ }
+ }
+ else if (old_qf_curlist != qi->qf_curlist
+--- 2953,2965 ----
+ if (!win_valid_any_tab(oldwin))
+ {
+ EMSG(_("E924: Current window was closed"));
+ *opened_window = FALSE;
++ return NOTDONE;
+ }
+ else if (!qflist_valid(oldwin, save_qfid))
+ {
+ EMSG(_(e_loc_list_changed));
+! return NOTDONE;
+ }
+ }
+ else if (old_qf_curlist != qi->qf_curlist
+***************
+*** 2941,2951 ****
+ EMSG(_("E925: Current quickfix was changed"));
+ else
+ EMSG(_(e_loc_list_changed));
+! *abort = TRUE;
+ }
+-
+- if (*abort)
+- retval = FAIL;
+ }
+
+ return retval;
+--- 2969,2976 ----
+ EMSG(_("E925: Current quickfix was changed"));
+ else
+ EMSG(_(e_loc_list_changed));
+! return NOTDONE;
+ }
+ }
+
+ return retval;
+***************
+*** 3066,3071 ****
+--- 3091,3180 ----
+ }
+
+ /*
++ * Find a usable window for opening a file from the quickfix/location list. If
++ * a window is not found then open a new window.
++ * Returns OK if successfully jumped or opened a window. Returns FAIL if not
++ * able to jump/open a window. Returns NOTDONE if a file is not associated
++ * with the entry.
++ */
++ static int
++ qf_jump_open_window(qf_info_T *qi, qfline_T *qf_ptr, int *opened_window)
++ {
++ // For ":helpgrep" find a help window or open one.
++ if (qf_ptr->qf_type == 1 && (!bt_help(curwin->w_buffer) || cmdmod.tab != 0))
++ if (jump_to_help_window(qi, opened_window) == FAIL)
++ return FAIL;
++
++ // If currently in the quickfix window, find another window to show the
++ // file in.
++ if (bt_quickfix(curbuf) && !*opened_window)
++ {
++ // If there is no file specified, we don't know where to go.
++ // But do advance, otherwise ":cn" gets stuck.
++ if (qf_ptr->qf_fnum == 0)
++ return NOTDONE;
++
++ if (qf_jump_to_usable_window(qf_ptr->qf_fnum, opened_window) == FAIL)
++ return FAIL;
++ }
++
++ return OK;
++ }
++
++ /*
++ * Edit a selected file from the quickfix/location list and jump to a
++ * particular line/column, adjust the folds and display a message about the
++ * jump.
++ * Returns OK on success and FAIL on failing to open the file/buffer. Returns
++ * NOTDONE if the quickfix/location list is freed by an autocmd when opening
++ * the file.
++ */
++ static int
++ qf_jump_to_buffer(
++ qf_info_T *qi,
++ int qf_index,
++ qfline_T *qf_ptr,
++ int forceit,
++ win_T *oldwin,
++ int *opened_window,
++ int openfold,
++ int print_message)
++ {
++ buf_T *old_curbuf;
++ linenr_T old_lnum;
++ int retval = OK;
++
++ // If there is a file name, read the wanted file if needed, and check
++ // autowrite etc.
++ old_curbuf = curbuf;
++ old_lnum = curwin->w_cursor.lnum;
++
++ if (qf_ptr->qf_fnum != 0)
++ {
++ retval = qf_jump_edit_buffer(qi, qf_ptr, forceit, oldwin,
++ opened_window);
++ if (retval != OK)
++ return retval;
++ }
++
++ // When not switched to another buffer, still need to set pc mark
++ if (curbuf == old_curbuf)
++ setpcmark();
++
++ qf_jump_goto_line(qf_ptr->qf_lnum, qf_ptr->qf_col, qf_ptr->qf_viscol,
++ qf_ptr->qf_pattern);
++
++ #ifdef FEAT_FOLDING
++ if ((fdo_flags & FDO_QUICKFIX) && openfold)
++ foldOpenCursor();
++ #endif
++ if (print_message)
++ qf_jump_print_msg(qi, qf_index, qf_ptr, old_curbuf, old_lnum);
++
++ return retval;
++ }
++
++ /*
+ * jump to a quickfix line
+ * if dir == FORWARD go "errornr" valid entries forward
+ * if dir == BACKWARD go "errornr" valid entries backward
+***************
+*** 3085,3099 ****
+ qfline_T *old_qf_ptr;
+ int qf_index;
+ int old_qf_index;
+- buf_T *old_curbuf;
+- linenr_T old_lnum;
+ char_u *old_swb = p_swb;
+ unsigned old_swb_flags = swb_flags;
+ int opened_window = FALSE;
+ win_T *oldwin = curwin;
+ int print_message = TRUE;
+ #ifdef FEAT_FOLDING
+! int old_KeyTyped = KeyTyped; /* getting file may reset it */
+ #endif
+ int retval = OK;
+
+--- 3194,3206 ----
+ qfline_T *old_qf_ptr;
+ int qf_index;
+ int old_qf_index;
+ char_u *old_swb = p_swb;
+ unsigned old_swb_flags = swb_flags;
+ int opened_window = FALSE;
+ win_T *oldwin = curwin;
+ int print_message = TRUE;
+ #ifdef FEAT_FOLDING
+! int old_KeyTyped = KeyTyped; // getting file may reset it
+ #endif
+ int retval = OK;
+
+***************
+*** 3113,3208 ****
+ old_qf_ptr = qf_ptr;
+ qf_index = qfl->qf_index;
+ old_qf_index = qf_index;
+! if (dir != 0) /* next/prev valid entry */
+ {
+! qf_ptr = get_nth_valid_entry(qfl, errornr, qf_ptr, &qf_index, dir);
+! if (qf_ptr == NULL)
+! {
+! qf_ptr = old_qf_ptr;
+! qf_index = old_qf_index;
+! goto theend;
+! }
+ }
+- else if (errornr != 0) /* go to specified number */
+- qf_ptr = get_nth_entry(qfl, errornr, qf_ptr, &qf_index);
+
+ qfl->qf_index = qf_index;
+ if (qf_win_pos_update(qi, old_qf_index))
+! /* No need to print the error message if it's visible in the error
+! * window */
+ print_message = FALSE;
+
+! /*
+! * For ":helpgrep" find a help window or open one.
+! */
+! if (qf_ptr->qf_type == 1 && (!bt_help(curwin->w_buffer) || cmdmod.tab != 0))
+! if (jump_to_help_window(qi, &opened_window) == FAIL)
+! goto theend;
+!
+! /*
+! * If currently in the quickfix window, find another window to show the
+! * file in.
+! */
+! if (bt_quickfix(curbuf) && !opened_window)
+! {
+! /*
+! * If there is no file specified, we don't know where to go.
+! * But do advance, otherwise ":cn" gets stuck.
+! */
+! if (qf_ptr->qf_fnum == 0)
+! goto theend;
+!
+! if (qf_jump_to_usable_window(qf_ptr->qf_fnum, &opened_window) == FAIL)
+! goto failed;
+ }
+
+! /*
+! * If there is a file name,
+! * read the wanted file if needed, and check autowrite etc.
+! */
+! old_curbuf = curbuf;
+! old_lnum = curwin->w_cursor.lnum;
+!
+! if (qf_ptr->qf_fnum != 0)
+! {
+! int abort = FALSE;
+!
+! retval = qf_jump_edit_buffer(qi, qf_ptr, forceit, oldwin,
+! &opened_window, &abort);
+! if (abort)
+! {
+! qi = NULL;
+! qf_ptr = NULL;
+! }
+! }
+!
+! if (retval == OK)
+! {
+! /* When not switched to another buffer, still need to set pc mark */
+! if (curbuf == old_curbuf)
+! setpcmark();
+!
+! if (qf_ptr != NULL)
+! qf_jump_goto_line(qf_ptr->qf_lnum, qf_ptr->qf_col,
+! qf_ptr->qf_viscol, qf_ptr->qf_pattern);
+!
+! #ifdef FEAT_FOLDING
+! if ((fdo_flags & FDO_QUICKFIX) && old_KeyTyped)
+! foldOpenCursor();
+! #endif
+! if (print_message)
+! qf_jump_print_msg(qi, qf_index, qf_ptr, old_curbuf, old_lnum);
+! }
+! else
+ {
+ if (opened_window)
+! win_close(curwin, TRUE); /* Close opened window */
+ if (qf_ptr != NULL && qf_ptr->qf_fnum != 0)
+ {
+! /*
+! * Couldn't open file, so put index back where it was. This could
+! * happen if the file was readonly and we changed something.
+! */
+ failed:
+ qf_ptr = old_qf_ptr;
+ qf_index = old_qf_index;
+--- 3220,3263 ----
+ old_qf_ptr = qf_ptr;
+ qf_index = qfl->qf_index;
+ old_qf_index = qf_index;
+!
+! qf_ptr = qf_get_entry(qfl, errornr, dir, &qf_index);
+! if (qf_ptr == NULL)
+ {
+! qf_ptr = old_qf_ptr;
+! qf_index = old_qf_index;
+! goto theend;
+ }
+
+ qfl->qf_index = qf_index;
+ if (qf_win_pos_update(qi, old_qf_index))
+! // No need to print the error message if it's visible in the error
+! // window
+ print_message = FALSE;
+
+! retval = qf_jump_open_window(qi, qf_ptr, &opened_window);
+! if (retval == FAIL)
+! goto failed;
+! if (retval == NOTDONE)
+! goto theend;
+!
+! retval = qf_jump_to_buffer(qi, qf_index, qf_ptr, forceit, oldwin,
+! &opened_window, old_KeyTyped, print_message);
+! if (retval == NOTDONE)
+! {
+! // Quickfix/location list is freed by an autocmd
+! qi = NULL;
+! qf_ptr = NULL;
+ }
+
+! if (retval != OK)
+ {
+ if (opened_window)
+! win_close(curwin, TRUE); // Close opened window
+ if (qf_ptr != NULL && qf_ptr->qf_fnum != 0)
+ {
+! // Couldn't open file, so put index back where it was. This could
+! // happen if the file was readonly and we changed something.
+ failed:
+ qf_ptr = old_qf_ptr;
+ qf_index = old_qf_index;
+***************
+*** 3216,3223 ****
+ }
+ if (p_swb != old_swb && opened_window)
+ {
+! /* Restore old 'switchbuf' value, but not when an autocommand or
+! * modeline has changed the value. */
+ if (p_swb == empty_option)
+ {
+ p_swb = old_swb;
+--- 3271,3278 ----
+ }
+ if (p_swb != old_swb && opened_window)
+ {
+! // Restore old 'switchbuf' value, but not when an autocommand or
+! // modeline has changed the value.
+ if (p_swb == empty_option)
+ {
+ p_swb = old_swb;
+*** ../vim-8.1.0430/src/version.c 2018-09-24 21:32:07.321727079 +0200
+--- src/version.c 2018-09-24 21:47:33.241429809 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 431,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+92. It takes you two hours to check all 14 of your mailboxes.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0432 b/data/vim/patches/8.1.0432
new file mode 100644
index 000000000..fa1b786f9
--- /dev/null
+++ b/data/vim/patches/8.1.0432
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0432
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0432
+Problem: Compiler warning for signed/unsigned.
+Solution: Add type cast. (Mike Williams)
+Files: src/xdiff/xemit.c
+
+
+*** ../vim-8.1.0431/src/xdiff/xemit.c 2018-09-10 22:18:47.785610418 +0200
+--- src/xdiff/xemit.c 2018-09-25 18:57:25.291739843 +0200
+***************
+*** 31,37 ****
+
+
+ static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *ecb) {
+! long size, psize = strlen(pre);
+ char const *rec;
+
+ size = xdl_get_rec(xdf, ri, &rec);
+--- 31,37 ----
+
+
+ static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *ecb) {
+! long size, psize = (long)strlen(pre);
+ char const *rec;
+
+ size = xdl_get_rec(xdf, ri, &rec);
+*** ../vim-8.1.0431/src/version.c 2018-09-24 21:50:08.932086794 +0200
+--- src/version.c 2018-09-25 18:58:40.595292389 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 432,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+96. On Super Bowl Sunday, you followed the score by going to the
+ Yahoo main page instead of turning on the TV.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0433 b/data/vim/patches/8.1.0433
new file mode 100644
index 000000000..0a8dddde8
--- /dev/null
+++ b/data/vim/patches/8.1.0433
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0433
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0433
+Problem: Mapping can obtain text from inputsecret(). (Tommy Allen)
+Solution: Disallow CTRL-R = and CTRL-\ e when using inputsecret().
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0432/src/ex_getln.c 2018-09-16 17:07:40.125853848 +0200
+--- src/ex_getln.c 2018-09-25 20:44:56.972610421 +0200
+***************
+*** 1308,1314 ****
+ /* CTRL-\ e doesn't work when obtaining an expression, unless it
+ * is in a mapping. */
+ if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
+! || (ccline.cmdfirstc == '=' && KeyTyped)))
+ {
+ vungetc(c);
+ c = Ctrl_BSL;
+--- 1308,1318 ----
+ /* CTRL-\ e doesn't work when obtaining an expression, unless it
+ * is in a mapping. */
+ if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
+! || (ccline.cmdfirstc == '=' && KeyTyped)
+! #ifdef FEAT_EVAL
+! || cmdline_star
+! #endif
+! ))
+ {
+ vungetc(c);
+ c = Ctrl_BSL;
+***************
+*** 1801,1807 ****
+ new_cmdpos = -1;
+ if (c == '=')
+ {
+! if (ccline.cmdfirstc == '=')/* can't do this recursively */
+ {
+ beep_flush();
+ c = ESC;
+--- 1805,1812 ----
+ new_cmdpos = -1;
+ if (c == '=')
+ {
+! if (ccline.cmdfirstc == '=' // can't do this recursively
+! || cmdline_star) // or when typing a password
+ {
+ beep_flush();
+ c = ESC;
+*** ../vim-8.1.0432/src/version.c 2018-09-25 18:59:16.903072148 +0200
+--- src/version.c 2018-09-25 20:46:03.368127754 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 433,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+99. The hum of a cooling fan and the click of keys is comforting to you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0434 b/data/vim/patches/8.1.0434
new file mode 100644
index 000000000..4fd7d7394
--- /dev/null
+++ b/data/vim/patches/8.1.0434
@@ -0,0 +1,335 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0434
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0434
+Problem: copy_loclist() is too long.
+Solution: Split in multiple functions. (Yegappan Lakshmanan)
+Files: src/proto/quickfix.pro, src/quickfix.c, src/window.c
+
+
+*** ../vim-8.1.0433/src/proto/quickfix.pro 2018-07-25 22:36:48.987518583 +0200
+--- src/proto/quickfix.pro 2018-09-25 22:06:03.183095511 +0200
+***************
+*** 1,7 ****
+ /* quickfix.c */
+ int qf_init(win_T *wp, char_u *efile, char_u *errorformat, int newlist, char_u *qf_title, char_u *enc);
+ void qf_free_all(win_T *wp);
+! void copy_loclist(win_T *from, win_T *to);
+ void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit);
+ void qf_list(exarg_T *eap);
+ void qf_age(exarg_T *eap);
+--- 1,7 ----
+ /* quickfix.c */
+ int qf_init(win_T *wp, char_u *efile, char_u *errorformat, int newlist, char_u *qf_title, char_u *enc);
+ void qf_free_all(win_T *wp);
+! void copy_loclist_stack(win_T *from, win_T *to);
+ void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit);
+ void qf_list(exarg_T *eap);
+ void qf_age(exarg_T *eap);
+*** ../vim-8.1.0433/src/quickfix.c 2018-09-24 21:50:08.932086794 +0200
+--- src/quickfix.c 2018-09-25 22:06:03.187095471 +0200
+***************
+*** 2044,2165 ****
+ }
+
+ /*
+! * Copy the location list from window "from" to window "to".
+ */
+ void
+! copy_loclist(win_T *from, win_T *to)
+ {
+ qf_info_T *qi;
+ int idx;
+- int i;
+
+! /*
+! * When copying from a location list window, copy the referenced
+! * location list. For other windows, copy the location list for
+! * that window.
+! */
+ if (IS_LL_WINDOW(from))
+ qi = from->w_llist_ref;
+ else
+ qi = from->w_llist;
+
+! if (qi == NULL) /* no location list to copy */
+ return;
+
+! /* allocate a new location list */
+ if ((to->w_llist = ll_new_list()) == NULL)
+ return;
+
+ to->w_llist->qf_listcount = qi->qf_listcount;
+
+! /* Copy the location lists one at a time */
+ for (idx = 0; idx < qi->qf_listcount; ++idx)
+ {
+- qf_list_T *from_qfl;
+- qf_list_T *to_qfl;
+-
+ to->w_llist->qf_curlist = idx;
+
+! from_qfl = &qi->qf_lists[idx];
+! to_qfl = &to->w_llist->qf_lists[idx];
+!
+! /* Some of the fields are populated by qf_add_entry() */
+! to_qfl->qf_nonevalid = from_qfl->qf_nonevalid;
+! to_qfl->qf_count = 0;
+! to_qfl->qf_index = 0;
+! to_qfl->qf_start = NULL;
+! to_qfl->qf_last = NULL;
+! to_qfl->qf_ptr = NULL;
+! if (from_qfl->qf_title != NULL)
+! to_qfl->qf_title = vim_strsave(from_qfl->qf_title);
+! else
+! to_qfl->qf_title = NULL;
+! if (from_qfl->qf_ctx != NULL)
+! {
+! to_qfl->qf_ctx = alloc_tv();
+! if (to_qfl->qf_ctx != NULL)
+! copy_tv(from_qfl->qf_ctx, to_qfl->qf_ctx);
+! }
+! else
+! to_qfl->qf_ctx = NULL;
+!
+! if (from_qfl->qf_count)
+! {
+! qfline_T *from_qfp;
+! qfline_T *prevp;
+!
+! /* copy all the location entries in this list */
+! for (i = 0, from_qfp = from_qfl->qf_start;
+! i < from_qfl->qf_count && from_qfp != NULL;
+! ++i, from_qfp = from_qfp->qf_next)
+! {
+! if (qf_add_entry(to->w_llist,
+! to->w_llist->qf_curlist,
+! NULL,
+! NULL,
+! from_qfp->qf_module,
+! 0,
+! from_qfp->qf_text,
+! from_qfp->qf_lnum,
+! from_qfp->qf_col,
+! from_qfp->qf_viscol,
+! from_qfp->qf_pattern,
+! from_qfp->qf_nr,
+! 0,
+! from_qfp->qf_valid) == FAIL)
+! {
+! qf_free_all(to);
+! return;
+! }
+! /*
+! * qf_add_entry() will not set the qf_num field, as the
+! * directory and file names are not supplied. So the qf_fnum
+! * field is copied here.
+! */
+! prevp = to->w_llist->qf_lists[to->w_llist->qf_curlist].qf_last;
+! prevp->qf_fnum = from_qfp->qf_fnum; /* file number */
+! prevp->qf_type = from_qfp->qf_type; /* error type */
+! if (from_qfl->qf_ptr == from_qfp)
+! to_qfl->qf_ptr = prevp; /* current location */
+! }
+! }
+!
+! to_qfl->qf_index = from_qfl->qf_index; /* current index in the list */
+!
+! /* Assign a new ID for the location list */
+! to_qfl->qf_id = ++last_qf_id;
+! to_qfl->qf_changedtick = 0L;
+!
+! /* When no valid entries are present in the list, qf_ptr points to
+! * the first item in the list */
+! if (to_qfl->qf_nonevalid)
+ {
+! to_qfl->qf_ptr = to_qfl->qf_start;
+! to_qfl->qf_index = 1;
+ }
+ }
+
+! to->w_llist->qf_curlist = qi->qf_curlist; /* current list */
+ }
+
+ /*
+--- 2044,2179 ----
+ }
+
+ /*
+! * Copy location list entries from 'from_qfl' to 'to_qfl'.
+! */
+! static int
+! copy_loclist_entries(qf_list_T *from_qfl, qf_list_T *to_qfl, qf_info_T *to_qi)
+! {
+! int i;
+! qfline_T *from_qfp;
+! qfline_T *prevp;
+!
+! // copy all the location entries in this list
+! for (i = 0, from_qfp = from_qfl->qf_start;
+! i < from_qfl->qf_count && from_qfp != NULL;
+! ++i, from_qfp = from_qfp->qf_next)
+! {
+! if (qf_add_entry(to_qi,
+! to_qi->qf_curlist,
+! NULL,
+! NULL,
+! from_qfp->qf_module,
+! 0,
+! from_qfp->qf_text,
+! from_qfp->qf_lnum,
+! from_qfp->qf_col,
+! from_qfp->qf_viscol,
+! from_qfp->qf_pattern,
+! from_qfp->qf_nr,
+! 0,
+! from_qfp->qf_valid) == FAIL)
+! return FAIL;
+!
+! // qf_add_entry() will not set the qf_num field, as the
+! // directory and file names are not supplied. So the qf_fnum
+! // field is copied here.
+! prevp = to_qfl->qf_last;
+! prevp->qf_fnum = from_qfp->qf_fnum; // file number
+! prevp->qf_type = from_qfp->qf_type; // error type
+! if (from_qfl->qf_ptr == from_qfp)
+! to_qfl->qf_ptr = prevp; // current location
+! }
+!
+! return OK;
+! }
+!
+! /*
+! * Copy the specified location list 'from_qfl' to 'to_qfl'.
+! */
+! static int
+! copy_loclist(qf_list_T *from_qfl, qf_list_T *to_qfl, qf_info_T *to_qi)
+! {
+! // Some of the fields are populated by qf_add_entry()
+! to_qfl->qf_nonevalid = from_qfl->qf_nonevalid;
+! to_qfl->qf_count = 0;
+! to_qfl->qf_index = 0;
+! to_qfl->qf_start = NULL;
+! to_qfl->qf_last = NULL;
+! to_qfl->qf_ptr = NULL;
+! if (from_qfl->qf_title != NULL)
+! to_qfl->qf_title = vim_strsave(from_qfl->qf_title);
+! else
+! to_qfl->qf_title = NULL;
+! if (from_qfl->qf_ctx != NULL)
+! {
+! to_qfl->qf_ctx = alloc_tv();
+! if (to_qfl->qf_ctx != NULL)
+! copy_tv(from_qfl->qf_ctx, to_qfl->qf_ctx);
+! }
+! else
+! to_qfl->qf_ctx = NULL;
+!
+! if (from_qfl->qf_count)
+! if (copy_loclist_entries(from_qfl, to_qfl, to_qi) == FAIL)
+! return FAIL;
+!
+! to_qfl->qf_index = from_qfl->qf_index; // current index in the list
+!
+! // Assign a new ID for the location list
+! to_qfl->qf_id = ++last_qf_id;
+! to_qfl->qf_changedtick = 0L;
+!
+! // When no valid entries are present in the list, qf_ptr points to
+! // the first item in the list
+! if (to_qfl->qf_nonevalid)
+! {
+! to_qfl->qf_ptr = to_qfl->qf_start;
+! to_qfl->qf_index = 1;
+! }
+!
+! return OK;
+! }
+!
+! /*
+! * Copy the location list stack 'from' window to 'to' window.
+ */
+ void
+! copy_loclist_stack(win_T *from, win_T *to)
+ {
+ qf_info_T *qi;
+ int idx;
+
+! // When copying from a location list window, copy the referenced
+! // location list. For other windows, copy the location list for
+! // that window.
+ if (IS_LL_WINDOW(from))
+ qi = from->w_llist_ref;
+ else
+ qi = from->w_llist;
+
+! if (qi == NULL) // no location list to copy
+ return;
+
+! // allocate a new location list
+ if ((to->w_llist = ll_new_list()) == NULL)
+ return;
+
+ to->w_llist->qf_listcount = qi->qf_listcount;
+
+! // Copy the location lists one at a time
+ for (idx = 0; idx < qi->qf_listcount; ++idx)
+ {
+ to->w_llist->qf_curlist = idx;
+
+! if (copy_loclist(&qi->qf_lists[idx],
+! &to->w_llist->qf_lists[idx], to->w_llist) == FAIL)
+ {
+! qf_free_all(to);
+! return;
+ }
+ }
+
+! to->w_llist->qf_curlist = qi->qf_curlist; // current list
+ }
+
+ /*
+*** ../vim-8.1.0433/src/window.c 2018-09-13 15:33:39.609712174 +0200
+--- src/window.c 2018-09-25 22:06:03.187095471 +0200
+***************
+*** 1308,1314 ****
+ newp->w_llist_ref = NULL;
+ }
+ else
+! copy_loclist(oldp, newp);
+ #endif
+ newp->w_localdir = (oldp->w_localdir == NULL)
+ ? NULL : vim_strsave(oldp->w_localdir);
+--- 1308,1314 ----
+ newp->w_llist_ref = NULL;
+ }
+ else
+! copy_loclist_stack(oldp, newp);
+ #endif
+ newp->w_localdir = (oldp->w_localdir == NULL)
+ ? NULL : vim_strsave(oldp->w_localdir);
+*** ../vim-8.1.0433/src/version.c 2018-09-25 20:48:53.882887698 +0200
+--- src/version.c 2018-09-25 22:07:03.802483924 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 434,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+100. The most exciting sporting events you noticed during summer 1996
+ was Netscape vs. Microsoft.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0435 b/data/vim/patches/8.1.0435
new file mode 100644
index 000000000..f31fa31f3
--- /dev/null
+++ b/data/vim/patches/8.1.0435
@@ -0,0 +1,78 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0435
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0435
+Problem: Cursorline highlight not removed in some situation. (Vitaly
+ Yashin)
+Solution: Reset last_cursorline when resetting 'cursorline'. (Christian
+ Brabandt, closes #3481)
+Files: src/move.c, src/proto/move.pro, src/option.c
+
+
+*** ../vim-8.1.0434/src/move.c 2018-09-12 23:15:45.257659803 +0200
+--- src/move.c 2018-09-25 22:17:39.176082368 +0200
+***************
+*** 125,130 ****
+--- 125,136 ----
+
+ #ifdef FEAT_SYN_HL
+ static linenr_T last_cursorline = 0;
++
++ void
++ reset_cursorline(void)
++ {
++ last_cursorline = 0;
++ }
+ #endif
+
+ /*
+*** ../vim-8.1.0434/src/proto/move.pro 2018-05-17 13:52:46.000000000 +0200
+--- src/proto/move.pro 2018-09-25 22:13:06.338829816 +0200
+***************
+*** 1,4 ****
+--- 1,5 ----
+ /* move.c */
++ void reset_cursorline(void);
+ void update_topline_redraw(void);
+ void update_topline(void);
+ void update_curswant(void);
+*** ../vim-8.1.0434/src/option.c 2018-09-21 12:24:08.618955563 +0200
+--- src/option.c 2018-09-25 22:14:29.057996665 +0200
+***************
+*** 8306,8311 ****
+--- 8306,8316 ----
+ p_lrm = !p_lnr;
+ #endif
+
++ #ifdef FEAT_SYN_HL
++ else if ((int *)varp == &curwin->w_p_cul && !value && old_value)
++ reset_cursorline();
++ #endif
++
+ #ifdef FEAT_PERSISTENT_UNDO
+ /* 'undofile' */
+ else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf)
+*** ../vim-8.1.0434/src/version.c 2018-09-25 22:08:10.933806882 +0200
+--- src/version.c 2018-09-25 22:16:09.888981316 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 435,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+101. U can read htis w/o ny porblm and cant figur eout Y its evn listd.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0436 b/data/vim/patches/8.1.0436
new file mode 100644
index 000000000..4f8fabb03
--- /dev/null
+++ b/data/vim/patches/8.1.0436
@@ -0,0 +1,92 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0436
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0436
+Problem: Can get the text of inputsecret() with getcmdline(). (Tommy Allen)
+Solution: Don't return the text.
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0435/src/ex_getln.c 2018-09-25 20:48:53.882887698 +0200
+--- src/ex_getln.c 2018-09-25 22:24:49.489341379 +0200
+***************
+*** 1310,1316 ****
+ if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
+ || (ccline.cmdfirstc == '=' && KeyTyped)
+ #ifdef FEAT_EVAL
+! || cmdline_star
+ #endif
+ ))
+ {
+--- 1310,1316 ----
+ if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
+ || (ccline.cmdfirstc == '=' && KeyTyped)
+ #ifdef FEAT_EVAL
+! || cmdline_star > 0
+ #endif
+ ))
+ {
+***************
+*** 1805,1812 ****
+ new_cmdpos = -1;
+ if (c == '=')
+ {
+! if (ccline.cmdfirstc == '=' // can't do this recursively
+! || cmdline_star) // or when typing a password
+ {
+ beep_flush();
+ c = ESC;
+--- 1805,1812 ----
+ new_cmdpos = -1;
+ if (c == '=')
+ {
+! if (ccline.cmdfirstc == '=' // can't do this recursively
+! || cmdline_star > 0) // or when typing a password
+ {
+ beep_flush();
+ c = ESC;
+***************
+*** 6506,6513 ****
+ char_u *
+ get_cmdline_str(void)
+ {
+! struct cmdline_info *p = get_ccline_ptr();
+
+ if (p == NULL)
+ return NULL;
+ return vim_strnsave(p->cmdbuff, p->cmdlen);
+--- 6506,6516 ----
+ char_u *
+ get_cmdline_str(void)
+ {
+! struct cmdline_info *p;
+
++ if (cmdline_star > 0)
++ return NULL;
++ p = get_ccline_ptr();
+ if (p == NULL)
+ return NULL;
+ return vim_strnsave(p->cmdbuff, p->cmdlen);
+*** ../vim-8.1.0435/src/version.c 2018-09-25 22:17:51.111962197 +0200
+--- src/version.c 2018-09-25 22:27:15.498025693 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 436,
+ /**/
+
+--
+To be rich is not the end, but only a change of worries.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0437 b/data/vim/patches/8.1.0437
new file mode 100644
index 000000000..0e573f976
--- /dev/null
+++ b/data/vim/patches/8.1.0437
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0437
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0437
+Problem: May access freed memory when syntax HL times out. (Philipp Gesang)
+Solution: Clear b_sst_first when clearing b_sst_array.
+Files: src/syntax.c
+
+
+*** ../vim-8.1.0436/src/syntax.c 2018-09-10 21:04:09.872392623 +0200
+--- src/syntax.c 2018-09-28 22:18:50.261769939 +0200
+***************
+*** 1192,1197 ****
+--- 1192,1198 ----
+ for (p = block->b_sst_first; p != NULL; p = p->sst_next)
+ clear_syn_state(p);
+ VIM_CLEAR(block->b_sst_array);
++ block->b_sst_first = NULL;
+ block->b_sst_len = 0;
+ }
+ }
+***************
+*** 1323,1331 ****
+ synstate_T *p, *prev, *np;
+ linenr_T n;
+
+- if (block->b_sst_array == NULL) /* nothing to do */
+- return;
+-
+ prev = NULL;
+ for (p = block->b_sst_first; p != NULL; )
+ {
+--- 1324,1329 ----
+***************
+*** 1378,1384 ****
+ int dist;
+ int retval = FALSE;
+
+! if (syn_block->b_sst_array == NULL || syn_block->b_sst_first == NULL)
+ return retval;
+
+ /* Compute normal distance between non-displayed entries. */
+--- 1376,1382 ----
+ int dist;
+ int retval = FALSE;
+
+! if (syn_block->b_sst_first == NULL)
+ return retval;
+
+ /* Compute normal distance between non-displayed entries. */
+*** ../vim-8.1.0436/src/version.c 2018-09-25 22:27:31.958075001 +0200
+--- src/version.c 2018-09-28 22:18:00.054149809 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 437,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+109. You actually read -- and enjoy -- lists like this.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0438 b/data/vim/patches/8.1.0438
new file mode 100644
index 000000000..b3354224c
--- /dev/null
+++ b/data/vim/patches/8.1.0438
@@ -0,0 +1,344 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0438
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0438
+Problem: The ex_make() function is too long.
+Solution: Split it into several functions. (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0437/src/quickfix.c 2018-09-25 22:08:10.933806882 +0200
+--- src/quickfix.c 2018-09-28 23:07:22.967590997 +0200
+***************
+*** 148,154 ****
+ static buf_T *qf_find_buf(qf_info_T *qi);
+ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last);
+ static void qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last);
+- static char_u *get_mef_name(void);
+ static buf_T *load_dummy_buffer(char_u *fname, char_u *dirname_start, char_u *resulting_dir);
+ static void wipe_dummy_buffer(buf_T *buf, char_u *dirname_start);
+ static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start);
+--- 148,153 ----
+***************
+*** 4480,4485 ****
+--- 4479,4594 ----
+ }
+
+ /*
++ * Return the make/grep autocmd name.
++ */
++ static char_u *
++ make_get_auname(cmdidx_T cmdidx)
++ {
++ switch (cmdidx)
++ {
++ case CMD_make: return (char_u *)"make";
++ case CMD_lmake: return (char_u *)"lmake";
++ case CMD_grep: return (char_u *)"grep";
++ case CMD_lgrep: return (char_u *)"lgrep";
++ case CMD_grepadd: return (char_u *)"grepadd";
++ case CMD_lgrepadd: return (char_u *)"lgrepadd";
++ default: return NULL;
++ }
++ }
++
++ /*
++ * Return the name for the errorfile, in allocated memory.
++ * Find a new unique name when 'makeef' contains "##".
++ * Returns NULL for error.
++ */
++ static char_u *
++ get_mef_name(void)
++ {
++ char_u *p;
++ char_u *name;
++ static int start = -1;
++ static int off = 0;
++ #ifdef HAVE_LSTAT
++ stat_T sb;
++ #endif
++
++ if (*p_mef == NUL)
++ {
++ name = vim_tempname('e', FALSE);
++ if (name == NULL)
++ EMSG(_(e_notmp));
++ return name;
++ }
++
++ for (p = p_mef; *p; ++p)
++ if (p[0] == '#' && p[1] == '#')
++ break;
++
++ if (*p == NUL)
++ return vim_strsave(p_mef);
++
++ // Keep trying until the name doesn't exist yet.
++ for (;;)
++ {
++ if (start == -1)
++ start = mch_get_pid();
++ else
++ off += 19;
++
++ name = alloc((unsigned)STRLEN(p_mef) + 30);
++ if (name == NULL)
++ break;
++ STRCPY(name, p_mef);
++ sprintf((char *)name + (p - p_mef), "%d%d", start, off);
++ STRCAT(name, p + 2);
++ if (mch_getperm(name) < 0
++ #ifdef HAVE_LSTAT
++ // Don't accept a symbolic link, it's a security risk.
++ && mch_lstat((char *)name, &sb) < 0
++ #endif
++ )
++ break;
++ vim_free(name);
++ }
++ return name;
++ }
++
++ /*
++ * Form the complete command line to invoke 'make'/'grep'. Quote the command
++ * using 'shellquote' and append 'shellpipe'. Echo the fully formed command.
++ */
++ static char_u *
++ make_get_fullcmd(char_u *makecmd, char_u *fname)
++ {
++ char_u *cmd;
++ unsigned len;
++
++ len = (unsigned)STRLEN(p_shq) * 2 + (unsigned)STRLEN(makecmd) + 1;
++ if (*p_sp != NUL)
++ len += (unsigned)STRLEN(p_sp) + (unsigned)STRLEN(fname) + 3;
++ cmd = alloc(len);
++ if (cmd == NULL)
++ return NULL;
++ sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)makecmd,
++ (char *)p_shq);
++
++ // If 'shellpipe' empty: don't redirect to 'errorfile'.
++ if (*p_sp != NUL)
++ append_redir(cmd, len, p_sp, fname);
++
++ // Display the fully formed command. Output a newline if there's something
++ // else than the :make command that was typed (in which case the cursor is
++ // in column 0).
++ if (msg_col == 0)
++ msg_didout = FALSE;
++ msg_start();
++ MSG_PUTS(":!");
++ msg_outtrans(cmd); // show what we are doing
++
++ return cmd;
++ }
++
++ /*
+ * Used for ":make", ":lmake", ":grep", ":lgrep", ":grepadd", and ":lgrepadd"
+ */
+ void
+***************
+*** 4488,4517 ****
+ char_u *fname;
+ char_u *cmd;
+ char_u *enc = NULL;
+- unsigned len;
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
+ int res;
+ char_u *au_name = NULL;
+ int_u save_qfid;
+
+! /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
+ if (grep_internal(eap->cmdidx))
+ {
+ ex_vimgrep(eap);
+ return;
+ }
+
+! switch (eap->cmdidx)
+! {
+! case CMD_make: au_name = (char_u *)"make"; break;
+! case CMD_lmake: au_name = (char_u *)"lmake"; break;
+! case CMD_grep: au_name = (char_u *)"grep"; break;
+! case CMD_lgrep: au_name = (char_u *)"lgrep"; break;
+! case CMD_grepadd: au_name = (char_u *)"grepadd"; break;
+! case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
+! default: break;
+! }
+ if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
+ curbuf->b_fname, TRUE, curbuf))
+ {
+--- 4597,4616 ----
+ char_u *fname;
+ char_u *cmd;
+ char_u *enc = NULL;
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
+ int res;
+ char_u *au_name = NULL;
+ int_u save_qfid;
+
+! // Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal".
+ if (grep_internal(eap->cmdidx))
+ {
+ ex_vimgrep(eap);
+ return;
+ }
+
+! au_name = make_get_auname(eap->cmdidx);
+ if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
+ curbuf->b_fname, TRUE, curbuf))
+ {
+***************
+*** 4531,4567 ****
+ fname = get_mef_name();
+ if (fname == NULL)
+ return;
+! mch_remove(fname); /* in case it's not unique */
+
+! /*
+! * If 'shellpipe' empty: don't redirect to 'errorfile'.
+! */
+! len = (unsigned)STRLEN(p_shq) * 2 + (unsigned)STRLEN(eap->arg) + 1;
+! if (*p_sp != NUL)
+! len += (unsigned)STRLEN(p_sp) + (unsigned)STRLEN(fname) + 3;
+! cmd = alloc(len);
+ if (cmd == NULL)
+ return;
+- sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)eap->arg,
+- (char *)p_shq);
+- if (*p_sp != NUL)
+- append_redir(cmd, len, p_sp, fname);
+- /*
+- * Output a newline if there's something else than the :make command that
+- * was typed (in which case the cursor is in column 0).
+- */
+- if (msg_col == 0)
+- msg_didout = FALSE;
+- msg_start();
+- MSG_PUTS(":!");
+- msg_outtrans(cmd); /* show what we are doing */
+
+! /* let the shell know if we are redirecting output or not */
+ do_shell(cmd, *p_sp != NUL ? SHELL_DOOUT : 0);
+
+ #ifdef AMIGA
+ out_flush();
+! /* read window status report and redraw before message */
+ (void)char_avail();
+ #endif
+
+--- 4630,4647 ----
+ fname = get_mef_name();
+ if (fname == NULL)
+ return;
+! mch_remove(fname); // in case it's not unique
+
+! cmd = make_get_fullcmd(eap->arg, fname);
+ if (cmd == NULL)
+ return;
+
+! // let the shell know if we are redirecting output or not
+ do_shell(cmd, *p_sp != NUL ? SHELL_DOOUT : 0);
+
+ #ifdef AMIGA
+ out_flush();
+! // read window status report and redraw before message
+ (void)char_avail();
+ #endif
+
+***************
+*** 4596,4658 ****
+ }
+
+ /*
+- * Return the name for the errorfile, in allocated memory.
+- * Find a new unique name when 'makeef' contains "##".
+- * Returns NULL for error.
+- */
+- static char_u *
+- get_mef_name(void)
+- {
+- char_u *p;
+- char_u *name;
+- static int start = -1;
+- static int off = 0;
+- #ifdef HAVE_LSTAT
+- stat_T sb;
+- #endif
+-
+- if (*p_mef == NUL)
+- {
+- name = vim_tempname('e', FALSE);
+- if (name == NULL)
+- EMSG(_(e_notmp));
+- return name;
+- }
+-
+- for (p = p_mef; *p; ++p)
+- if (p[0] == '#' && p[1] == '#')
+- break;
+-
+- if (*p == NUL)
+- return vim_strsave(p_mef);
+-
+- /* Keep trying until the name doesn't exist yet. */
+- for (;;)
+- {
+- if (start == -1)
+- start = mch_get_pid();
+- else
+- off += 19;
+-
+- name = alloc((unsigned)STRLEN(p_mef) + 30);
+- if (name == NULL)
+- break;
+- STRCPY(name, p_mef);
+- sprintf((char *)name + (p - p_mef), "%d%d", start, off);
+- STRCAT(name, p + 2);
+- if (mch_getperm(name) < 0
+- #ifdef HAVE_LSTAT
+- /* Don't accept a symbolic link, it's a security risk. */
+- && mch_lstat((char *)name, &sb) < 0
+- #endif
+- )
+- break;
+- vim_free(name);
+- }
+- return name;
+- }
+-
+- /*
+ * Returns the number of valid entries in the current quickfix/location list.
+ */
+ int
+--- 4676,4681 ----
+*** ../vim-8.1.0437/src/version.c 2018-09-28 22:26:47.790139298 +0200
+--- src/version.c 2018-09-28 23:08:51.738912574 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 438,
+ /**/
+
+--
+Nobody will ever need more than 640 kB RAM.
+ -- Bill Gates, 1983
+Windows 98 requires 16 MB RAM.
+ -- Bill Gates, 1999
+Logical conclusion: Nobody will ever need Windows 98.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0439 b/data/vim/patches/8.1.0439
new file mode 100644
index 000000000..98670415a
--- /dev/null
+++ b/data/vim/patches/8.1.0439
@@ -0,0 +1,600 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0439
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0439
+Problem: Recursive use of getcmdline() still not protected.
+Solution: Instead of saving the command buffer when making a call which may
+ cause recursiveness, save the buffer when actually being called
+ recursively.
+Files: src/ex_getln.c, src/proto/ex_getln.pro, src/getchar.c, src/main.c
+
+
+*** ../vim-8.1.0438/src/ex_getln.c 2018-09-25 22:27:31.958075001 +0200
+--- src/ex_getln.c 2018-09-30 17:09:47.106527162 +0200
+***************
+*** 44,56 ****
+ # endif
+ };
+
+! /* The current cmdline_info. It is initialized in getcmdline() and after that
+! * used by other functions. When invoking getcmdline() recursively it needs
+! * to be saved with save_cmdline() and restored with restore_cmdline().
+! * TODO: make it local to getcmdline() and pass it around. */
+ static struct cmdline_info ccline;
+
+! static int cmd_showtail; /* Only show path tail in lists ? */
+
+ #ifdef FEAT_EVAL
+ static int new_cmdpos; /* position set by set_cmdline_pos() */
+--- 44,55 ----
+ # endif
+ };
+
+! // The current cmdline_info. It is initialized in getcmdline() and after that
+! // used by other functions. When invoking getcmdline() recursively it needs
+! // to be saved with save_cmdline() and restored with restore_cmdline().
+ static struct cmdline_info ccline;
+
+! static int cmd_showtail; /* Only show path tail in lists ? */
+
+ #ifdef FEAT_EVAL
+ static int new_cmdpos; /* position set by set_cmdline_pos() */
+***************
+*** 91,96 ****
+--- 90,96 ----
+ static int cmd_fkmap = 0; /* Farsi mapping during command line */
+ #endif
+
++ static char_u *getcmdline_int(int firstc, long count, int indent, int init_ccline);
+ static int cmdline_charsize(int idx);
+ static void set_cmdspos(void);
+ static void set_cmdspos_cursor(void);
+***************
+*** 463,469 ****
+ int skiplen, patlen;
+ int found; // do_search() result
+ pos_T end_pos;
+- struct cmdline_info save_ccline;
+ #ifdef FEAT_RELTIME
+ proftime_T tm;
+ #endif
+--- 463,468 ----
+***************
+*** 601,609 ****
+ if (p_ru && curwin->w_status_height > 0)
+ curwin->w_redr_status = TRUE;
+
+- save_cmdline(&save_ccline);
+ update_screen(SOME_VALID);
+- restore_cmdline(&save_ccline);
+ restore_last_search_pattern();
+
+ // Leave it at the end to make CTRL-R CTRL-W work. But not when beyond the
+--- 600,606 ----
+***************
+*** 800,807 ****
+ char_u *
+ getcmdline(
+ int firstc,
+! long count UNUSED, /* only used for incremental search */
+! int indent) /* indent for inside conditionals */
+ {
+ int c;
+ int i;
+--- 797,814 ----
+ char_u *
+ getcmdline(
+ int firstc,
+! long count, // only used for incremental search
+! int indent) // indent for inside conditionals
+! {
+! return getcmdline_int(firstc, count, indent, TRUE);
+! }
+!
+! static char_u *
+! getcmdline_int(
+! int firstc,
+! long count UNUSED, // only used for incremental search
+! int indent, // indent for inside conditionals
+! int init_ccline) // clear ccline first
+ {
+ int c;
+ int i;
+***************
+*** 832,845 ****
+ #endif
+ expand_T xpc;
+ long *b_im_ptr = NULL;
+- #if defined(FEAT_WILDMENU) || defined(FEAT_EVAL)
+- /* Everything that may work recursively should save and restore the
+- * current command line in save_ccline. That includes update_screen(), a
+- * custom status line may invoke ":normal". */
+ struct cmdline_info save_ccline;
+! #endif
+ int cmdline_type;
+
+ #ifdef FEAT_EVAL
+ if (firstc == -1)
+ {
+--- 839,858 ----
+ #endif
+ expand_T xpc;
+ long *b_im_ptr = NULL;
+ struct cmdline_info save_ccline;
+! int did_save_ccline = FALSE;
+ int cmdline_type;
+
++ if (ccline.cmdbuff != NULL)
++ {
++ // Being called recursively. Since ccline is global, we need to save
++ // the current buffer and restore it when returning.
++ save_cmdline(&save_ccline);
++ did_save_ccline = TRUE;
++ }
++ if (init_ccline)
++ vim_memset(&ccline, 0, sizeof(struct cmdline_info));
++
+ #ifdef FEAT_EVAL
+ if (firstc == -1)
+ {
+***************
+*** 868,874 ****
+ /* alloc initial ccline.cmdbuff */
+ alloc_cmdbuff(exmode_active ? 250 : indent + 1);
+ if (ccline.cmdbuff == NULL)
+! return NULL; /* out of memory */
+ ccline.cmdlen = ccline.cmdpos = 0;
+ ccline.cmdbuff[0] = NUL;
+ sb_text_start_cmdline();
+--- 881,887 ----
+ /* alloc initial ccline.cmdbuff */
+ alloc_cmdbuff(exmode_active ? 250 : indent + 1);
+ if (ccline.cmdbuff == NULL)
+! goto theend; // out of memory
+ ccline.cmdlen = ccline.cmdpos = 0;
+ ccline.cmdbuff[0] = NUL;
+ sb_text_start_cmdline();
+***************
+*** 1125,1133 ****
+ p_ls = save_p_ls;
+ p_wmh = save_p_wmh;
+ last_status(FALSE);
+- save_cmdline(&save_ccline);
+ update_screen(VALID); /* redraw the screen NOW */
+- restore_cmdline(&save_ccline);
+ redrawcmd();
+ save_p_ls = -1;
+ }
+--- 1138,1144 ----
+***************
+*** 1333,1351 ****
+ else
+ new_cmdpos = ccline.cmdpos;
+
+- save_cmdline(&save_ccline);
+ c = get_expr_register();
+- restore_cmdline(&save_ccline);
+ if (c == '=')
+ {
+ /* Need to save and restore ccline. And set "textlock"
+ * to avoid nasty things like going to another buffer when
+ * evaluating an expression. */
+- save_cmdline(&save_ccline);
+ ++textlock;
+ p = get_expr_line();
+ --textlock;
+- restore_cmdline(&save_ccline);
+
+ if (p != NULL)
+ {
+--- 1344,1358 ----
+***************
+*** 1812,1822 ****
+ c = ESC;
+ }
+ else
+- {
+- save_cmdline(&save_ccline);
+ c = get_expr_register();
+- restore_cmdline(&save_ccline);
+- }
+ }
+ #endif
+ if (c != ESC) /* use ESC to cancel inserting register */
+--- 1819,1825 ----
+***************
+*** 2187,2193 ****
+ int len;
+ int old_firstc;
+
+! vim_free(ccline.cmdbuff);
+ xpc.xp_context = EXPAND_NOTHING;
+ if (hiscnt == hislen)
+ p = lookfor; /* back to the old one */
+--- 2190,2196 ----
+ int len;
+ int old_firstc;
+
+! VIM_CLEAR(ccline.cmdbuff);
+ xpc.xp_context = EXPAND_NOTHING;
+ if (hiscnt == hislen)
+ p = lookfor; /* back to the old one */
+***************
+*** 2486,2496 ****
+ #endif
+ sb_text_end_cmdline();
+
+ {
+ char_u *p = ccline.cmdbuff;
+
+! /* Make ccline empty, getcmdline() may try to use it. */
+! ccline.cmdbuff = NULL;
+ return p;
+ }
+ }
+--- 2489,2502 ----
+ #endif
+ sb_text_end_cmdline();
+
++ theend:
+ {
+ char_u *p = ccline.cmdbuff;
+
+! if (did_save_ccline)
+! restore_cmdline(&save_ccline);
+! else
+! ccline.cmdbuff = NULL;
+ return p;
+ }
+ }
+***************
+*** 2512,2521 ****
+ {
+ char_u *s;
+ struct cmdline_info save_ccline;
+ int msg_col_save = msg_col;
+ int msg_silent_save = msg_silent;
+
+! save_cmdline(&save_ccline);
+ ccline.cmdprompt = prompt;
+ ccline.cmdattr = attr;
+ # ifdef FEAT_EVAL
+--- 2518,2535 ----
+ {
+ char_u *s;
+ struct cmdline_info save_ccline;
++ int did_save_ccline = FALSE;
+ int msg_col_save = msg_col;
+ int msg_silent_save = msg_silent;
+
+! if (ccline.cmdbuff != NULL)
+! {
+! // Save the values of the current cmdline and restore them below.
+! save_cmdline(&save_ccline);
+! did_save_ccline = TRUE;
+! }
+!
+! vim_memset(&ccline, 0, sizeof(struct cmdline_info));
+ ccline.cmdprompt = prompt;
+ ccline.cmdattr = attr;
+ # ifdef FEAT_EVAL
+***************
+*** 2524,2531 ****
+ ccline.input_fn = (firstc == '@');
+ # endif
+ msg_silent = 0;
+! s = getcmdline(firstc, 1L, 0);
+! restore_cmdline(&save_ccline);
+ msg_silent = msg_silent_save;
+ /* Restore msg_col, the prompt from input() may have changed it.
+ * But only if called recursively and the commandline is therefore being
+--- 2538,2548 ----
+ ccline.input_fn = (firstc == '@');
+ # endif
+ msg_silent = 0;
+! s = getcmdline_int(firstc, 1L, 0, FALSE);
+!
+! if (did_save_ccline)
+! restore_cmdline(&save_ccline);
+!
+ msg_silent = msg_silent_save;
+ /* Restore msg_col, the prompt from input() may have changed it.
+ * But only if called recursively and the commandline is therefore being
+***************
+*** 3121,3127 ****
+ /*
+ * Allocate a new command line buffer.
+ * Assigns the new buffer to ccline.cmdbuff and ccline.cmdbufflen.
+- * Returns the new value of ccline.cmdbuff and ccline.cmdbufflen.
+ */
+ static void
+ alloc_cmdbuff(int len)
+--- 3138,3143 ----
+***************
+*** 3542,3550 ****
+ }
+ *ccp = prev_ccline;
+ prev_ccline = ccline;
+! ccline.cmdbuff = NULL;
+! ccline.cmdprompt = NULL;
+! ccline.xpc = NULL;
+ }
+
+ /*
+--- 3558,3564 ----
+ }
+ *ccp = prev_ccline;
+ prev_ccline = ccline;
+! ccline.cmdbuff = NULL; // signal that ccline is not in use
+ }
+
+ /*
+***************
+*** 3557,3593 ****
+ prev_ccline = *ccp;
+ }
+
+- #if defined(FEAT_EVAL) || defined(PROTO)
+- /*
+- * Save the command line into allocated memory. Returns a pointer to be
+- * passed to restore_cmdline_alloc() later.
+- * Returns NULL when failed.
+- */
+- char_u *
+- save_cmdline_alloc(void)
+- {
+- struct cmdline_info *p;
+-
+- p = (struct cmdline_info *)alloc((unsigned)sizeof(struct cmdline_info));
+- if (p != NULL)
+- save_cmdline(p);
+- return (char_u *)p;
+- }
+-
+- /*
+- * Restore the command line from the return value of save_cmdline_alloc().
+- */
+- void
+- restore_cmdline_alloc(char_u *p)
+- {
+- if (p != NULL)
+- {
+- restore_cmdline((struct cmdline_info *)p);
+- vim_free(p);
+- }
+- }
+- #endif
+-
+ /*
+ * Paste a yank register into the command line.
+ * Used by CTRL-R command in command-line mode.
+--- 3571,3576 ----
+***************
+*** 3606,3612 ****
+ char_u *arg;
+ char_u *p;
+ int allocated;
+- struct cmdline_info save_ccline;
+
+ /* check for valid regname; also accept special characters for CTRL-R in
+ * the command line */
+--- 3589,3594 ----
+***************
+*** 3625,3637 ****
+ regname = may_get_selection(regname);
+ #endif
+
+! /* Need to save and restore ccline. And set "textlock" to avoid nasty
+! * things like going to another buffer when evaluating an expression. */
+! save_cmdline(&save_ccline);
+ ++textlock;
+ i = get_spec_reg(regname, &arg, &allocated, TRUE);
+ --textlock;
+- restore_cmdline(&save_ccline);
+
+ if (i)
+ {
+--- 3607,3617 ----
+ regname = may_get_selection(regname);
+ #endif
+
+! // Need to set "textlock" to avoid nasty things like going to another
+! // buffer when evaluating an expression.
+ ++textlock;
+ i = get_spec_reg(regname, &arg, &allocated, TRUE);
+ --textlock;
+
+ if (i)
+ {
+***************
+*** 5601,5607 ****
+ sctx_T save_current_sctx = current_sctx;
+ char_u *pat = NULL;
+ void *ret;
+- struct cmdline_info save_ccline;
+
+ if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0' || xp->xp_line == NULL)
+ return NULL;
+--- 5581,5586 ----
+***************
+*** 5624,5638 ****
+ args[2].vval.v_number = xp->xp_col;
+ args[3].v_type = VAR_UNKNOWN;
+
+- /* Save the cmdline, we don't know what the function may do. */
+- save_ccline = ccline;
+- ccline.cmdbuff = NULL;
+- ccline.cmdprompt = NULL;
+ current_sctx = xp->xp_script_ctx;
+
+ ret = user_expand_func(xp->xp_arg, 3, args);
+
+- ccline = save_ccline;
+ current_sctx = save_current_sctx;
+ if (ccline.cmdbuff != NULL)
+ ccline.cmdbuff[ccline.cmdlen] = keep;
+--- 5603,5612 ----
+***************
+*** 6481,6487 ****
+
+ #if defined(FEAT_EVAL) || defined(FEAT_CMDWIN) || defined(PROTO)
+ /*
+! * Get pointer to the command line info to use. cmdline_paste() may clear
+ * ccline and put the previous value in prev_ccline.
+ */
+ static struct cmdline_info *
+--- 6455,6461 ----
+
+ #if defined(FEAT_EVAL) || defined(FEAT_CMDWIN) || defined(PROTO)
+ /*
+! * Get pointer to the command line info to use. save_ccline() may clear
+ * ccline and put the previous value in prev_ccline.
+ */
+ static struct cmdline_info *
+***************
+*** 7072,7077 ****
+--- 7046,7057 ----
+ }
+ }
+
++ void
++ cmdline_init(void)
++ {
++ vim_memset(&ccline, 0, sizeof(struct cmdline_info));
++ }
++
+ /*
+ * Write history to viminfo file in "fp".
+ * When "merge" is TRUE merge history lines with a previously read viminfo
+***************
+*** 7238,7244 ****
+ static int
+ open_cmdwin(void)
+ {
+- struct cmdline_info save_ccline;
+ bufref_T old_curbuf;
+ win_T *old_curwin = curwin;
+ bufref_T bufref;
+--- 7218,7223 ----
+***************
+*** 7355,7363 ****
+ invalidate_botline();
+ redraw_later(SOME_VALID);
+
+- /* Save the command line info, can be used recursively. */
+- save_cmdline(&save_ccline);
+-
+ /* No Ex mode here! */
+ exmode_active = 0;
+
+--- 7334,7339 ----
+***************
+*** 7394,7403 ****
+ KeyTyped = save_KeyTyped;
+ # endif
+
+- /* Restore the command line info. */
+- restore_cmdline(&save_ccline);
+ cmdwin_type = 0;
+-
+ exmode_active = save_exmode;
+
+ /* Safety check: The old window or buffer was deleted: It's a bug when
+--- 7370,7376 ----
+*** ../vim-8.1.0438/src/proto/ex_getln.pro 2018-05-17 13:52:35.000000000 +0200
+--- src/proto/ex_getln.pro 2018-09-30 15:11:35.810356311 +0200
+***************
+*** 15,22 ****
+ void putcmdline(int c, int shift);
+ void unputcmdline(void);
+ int put_on_cmdline(char_u *str, int len, int redraw);
+- char_u *save_cmdline_alloc(void);
+- void restore_cmdline_alloc(char_u *p);
+ void cmdline_paste_str(char_u *s, int literally);
+ void redrawcmdline(void);
+ void redrawcmdline_ex(int do_compute_cmdrow);
+--- 15,20 ----
+***************
+*** 54,59 ****
+--- 52,58 ----
+ int read_viminfo_history(vir_T *virp, int writing);
+ void handle_viminfo_history(garray_T *values, int writing);
+ void finish_viminfo_history(vir_T *virp);
++ void cmdline_init(void);
+ void write_viminfo_history(FILE *fp, int merge);
+ void cmd_pchar(int c, int offset);
+ int cmd_gchar(int offset);
+*** ../vim-8.1.0438/src/getchar.c 2018-09-10 21:04:09.868392665 +0200
+--- src/getchar.c 2018-09-30 14:32:29.424816910 +0200
+***************
+*** 4666,4672 ****
+ char_u *res;
+ char_u *p;
+ char_u *expr;
+- char_u *save_cmd;
+ pos_T save_cursor;
+ int save_msg_col;
+ int save_msg_row;
+--- 4666,4671 ----
+***************
+*** 4678,4690 ****
+ return NULL;
+ vim_unescape_csi(expr);
+
+- save_cmd = save_cmdline_alloc();
+- if (save_cmd == NULL)
+- {
+- vim_free(expr);
+- return NULL;
+- }
+-
+ /* Forbid changing text or using ":normal" to avoid most of the bad side
+ * effects. Also restore the cursor position. */
+ ++textlock;
+--- 4677,4682 ----
+***************
+*** 4700,4706 ****
+ msg_col = save_msg_col;
+ msg_row = save_msg_row;
+
+- restore_cmdline_alloc(save_cmd);
+ vim_free(expr);
+
+ if (p == NULL)
+--- 4692,4697 ----
+*** ../vim-8.1.0438/src/main.c 2018-09-16 14:10:28.300323360 +0200
+--- src/main.c 2018-09-30 15:10:50.358720630 +0200
+***************
+*** 929,934 ****
+--- 929,935 ----
+ void
+ common_init(mparm_T *paramp)
+ {
++ cmdline_init();
+
+ #ifdef FEAT_MBYTE
+ (void)mb_init(); /* init mb_bytelen_tab[] to ones */
+*** ../vim-8.1.0438/src/version.c 2018-09-28 23:09:50.558463030 +0200
+--- src/version.c 2018-09-30 17:07:43.183446960 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 439,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+124. You begin conversations with, "Who is your internet service provider?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0440 b/data/vim/patches/8.1.0440
new file mode 100644
index 000000000..ca0bfe05a
--- /dev/null
+++ b/data/vim/patches/8.1.0440
@@ -0,0 +1,100 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0440
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0440
+Problem: remove() with a range not sufficiently tested.
+Solution: Add a test. (Dominique Pelle, closes #3497)
+Files: src/testdir/test_listdict.vim
+
+
+*** ../vim-8.1.0439/src/testdir/test_listdict.vim 2017-11-05 20:53:03.000000000 +0100
+--- src/testdir/test_listdict.vim 2018-09-30 17:14:40.140106358 +0200
+***************
+*** 106,111 ****
+--- 106,148 ----
+ call assert_equal([1, 2], l)
+ endfunc
+
++ " Test removing items in list
++ func Test_list_func_remove()
++ " Test removing 1 element
++ let l = [1, 2, 3, 4]
++ call assert_equal(1, remove(l, 0))
++ call assert_equal([2, 3, 4], l)
++
++ let l = [1, 2, 3, 4]
++ call assert_equal(2, remove(l, 1))
++ call assert_equal([1, 3, 4], l)
++
++ let l = [1, 2, 3, 4]
++ call assert_equal(4, remove(l, -1))
++ call assert_equal([1, 2, 3], l)
++
++ " Test removing range of element(s)
++ let l = [1, 2, 3, 4]
++ call assert_equal([3], remove(l, 2, 2))
++ call assert_equal([1, 2, 4], l)
++
++ let l = [1, 2, 3, 4]
++ call assert_equal([2, 3], remove(l, 1, 2))
++ call assert_equal([1, 4], l)
++
++ let l = [1, 2, 3, 4]
++ call assert_equal([2, 3], remove(l, -3, -2))
++ call assert_equal([1, 4], l)
++
++ " Test invalid cases
++ let l = [1, 2, 3, 4]
++ call assert_fails("call remove(l, 5)", 'E684:')
++ call assert_fails("call remove(l, 1, 5)", 'E684:')
++ call assert_fails("call remove(l, 3, 2)", 'E16:')
++ call assert_fails("call remove(1, 0)", 'E712:')
++ call assert_fails("call remove(l, l)", 'E745:')
++ endfunc
++
+ " Tests for Dictionary type
+
+ func Test_dict()
+***************
+*** 222,227 ****
+--- 259,275 ----
+ unlet g:dict
+ endfunc
+
++ " Test removing items in la dictionary
++ func Test_dict_func_remove()
++ let d = {1:'a', 2:'b', 3:'c'}
++ call assert_equal('b', remove(d, 2))
++ call assert_equal({1:'a', 3:'c'}, d)
++
++ call assert_fails("call remove(d, 1, 2)", 'E118:')
++ call assert_fails("call remove(d, 'a')", 'E716:')
++ call assert_fails("call remove(d, [])", 'E730:')
++ endfunc
++
+ " Nasty: remove func from Dict that's being called (works)
+ func Test_dict_func_remove_in_use()
+ let d = {1:1}
+*** ../vim-8.1.0439/src/version.c 2018-09-30 17:11:45.305649987 +0200
+--- src/version.c 2018-09-30 17:15:38.475550891 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 440,
+ /**/
+
+--
+I have a watch cat! Just break in and she'll watch.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0441 b/data/vim/patches/8.1.0441
new file mode 100644
index 000000000..5c003113f
--- /dev/null
+++ b/data/vim/patches/8.1.0441
@@ -0,0 +1,66 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0441
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0441
+Problem: Build failure without command line history.
+Solution: Move cmdline_init() outside of #ifdef.
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0440/src/ex_getln.c 2018-09-30 17:11:45.301650017 +0200
+--- src/ex_getln.c 2018-09-30 17:44:23.961403257 +0200
+***************
+*** 775,780 ****
+--- 775,786 ----
+ }
+ #endif
+
++ void
++ cmdline_init(void)
++ {
++ vim_memset(&ccline, 0, sizeof(struct cmdline_info));
++ }
++
+ /*
+ * getcmdline() - accept a command line starting with firstc.
+ *
+***************
+*** 7046,7057 ****
+ }
+ }
+
+- void
+- cmdline_init(void)
+- {
+- vim_memset(&ccline, 0, sizeof(struct cmdline_info));
+- }
+-
+ /*
+ * Write history to viminfo file in "fp".
+ * When "merge" is TRUE merge history lines with a previously read viminfo
+--- 7052,7057 ----
+*** ../vim-8.1.0440/src/version.c 2018-09-30 17:16:22.203142058 +0200
+--- src/version.c 2018-09-30 17:44:59.609126418 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 441,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+125. You begin to wonder how often it REALLY is necessary to get up
+ and shower or bathe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0442 b/data/vim/patches/8.1.0442
new file mode 100644
index 000000000..cb1f89f12
--- /dev/null
+++ b/data/vim/patches/8.1.0442
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0442
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0442
+Problem: GUI: Cursor not drawn after ":redraw | sleep".
+Solution: Flush the output. (closes #3496)
+Files: src/ex_docmd.c
+
+
+*** ../vim-8.1.0441/src/ex_docmd.c 2018-09-15 15:42:36.501547749 +0200
+--- src/ex_docmd.c 2018-09-30 18:19:29.578225817 +0200
+***************
+*** 9272,9278 ****
+ long wait_now;
+
+ cursor_on();
+! out_flush();
+ for (done = 0; !got_int && done < msec; done += wait_now)
+ {
+ wait_now = msec - done > 1000L ? 1000L : msec - done;
+--- 9272,9278 ----
+ long wait_now;
+
+ cursor_on();
+! out_flush_cursor(FALSE, FALSE);
+ for (done = 0; !got_int && done < msec; done += wait_now)
+ {
+ wait_now = msec - done > 1000L ? 1000L : msec - done;
+*** ../vim-8.1.0441/src/version.c 2018-09-30 17:45:26.860914873 +0200
+--- src/version.c 2018-09-30 18:21:43.617240782 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 442,
+ /**/
+
+--
+A: Because it messes up the order in which people normally read text.
+Q: Why is top-posting such a bad thing?
+A: Top-posting.
+Q: What is the most annoying thing on usenet and in e-mail?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0443 b/data/vim/patches/8.1.0443
new file mode 100644
index 000000000..be17858f0
--- /dev/null
+++ b/data/vim/patches/8.1.0443
@@ -0,0 +1,3395 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0443
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0443
+Problem: Unnecessary static function prototypes.
+Solution: Remove unnecessary prototypes.
+Files: src/arabic.c, src/blowfish.c, src/buffer.c, src/charset.c,
+ src/crypt_zip.c, src/digraph.c, src/edit.c, src/eval.c,
+ src/evalfunc.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c,
+ src/ex_eval.c, src/ex_getln.c, src/fileio.c, src/getchar.c,
+ src/gui.c, src/gui_at_fs.c, src/gui_athena.c, src/gui_gtk_x11.c,
+ src/gui_mac.c, src/gui_motif.c, src/gui_photon.c, src/gui_w32.c,
+ src/gui_x11.c, src/hangulin.c, src/hardcopy.c, src/if_cscope.c,
+ src/if_mzsch.c, src/if_python3.c, src/if_xcmdsrv.c,
+ src/integration.c, src/json.c, src/main.c, src/mbyte.c,
+ src/memline.c, src/message.c, src/misc1.c, src/misc2.c,
+ src/move.c, src/netbeans.c, src/normal.c, src/ops.c, src/option.c,
+ src/os_unix.c, src/os_win32.c, src/pty.c, src/regexp.c,
+ src/screen.c, src/search.c, src/sha256.c, src/spell.c,
+ src/spellfile.c, src/syntax.c, src/tag.c, src/term.c, src/ui.c,
+ src/undo.c, src/version.c, src/window.c, src/workshop.c
+
+
+*** ../vim-8.1.0442/src/arabic.c 2017-03-21 12:31:49.000000000 +0100
+--- src/arabic.c 2018-09-30 20:13:36.792906838 +0200
+***************
+*** 17,36 ****
+
+ #if defined(FEAT_ARABIC) || defined(PROTO)
+
+- static int A_is_a(int cur_c);
+- static int A_is_s(int cur_c);
+- static int A_is_f(int cur_c);
+- static int chg_c_a2s(int cur_c);
+- static int chg_c_a2i(int cur_c);
+- static int chg_c_a2m(int cur_c);
+- static int chg_c_a2f(int cur_c);
+- #if 0
+- static int chg_c_i2m(int cur_c);
+- #endif
+- static int chg_c_f2m(int cur_c);
+- static int chg_c_laa2i(int hid_c);
+- static int chg_c_laa2f(int hid_c);
+- static int half_shape(int c);
+ static int A_firstc_laa(int c1, int c);
+ static int A_is_harakat(int c);
+ static int A_is_iso(int c);
+--- 17,22 ----
+*** ../vim-8.1.0442/src/blowfish.c 2016-11-12 20:08:09.000000000 +0100
+--- src/blowfish.c 2018-09-30 20:14:12.496675423 +0200
+***************
+*** 56,68 ****
+ } bf_state_T;
+
+
+- static void bf_e_block(bf_state_T *state, UINT32_T *p_xl, UINT32_T *p_xr);
+- static void bf_e_cblock(bf_state_T *state, char_u *block);
+- static int bf_check_tables(UINT32_T pax[18], UINT32_T sbx[4][256], UINT32_T val);
+- static int bf_self_test(void);
+- static void bf_key_init(bf_state_T *state, char_u *password, char_u *salt, int salt_len);
+- static void bf_cfb_init(bf_state_T *state, char_u *seed, int seed_len);
+-
+ /* Blowfish code */
+ static UINT32_T pax_init[18] = {
+ 0x243f6a88u, 0x85a308d3u, 0x13198a2eu,
+--- 56,61 ----
+*** ../vim-8.1.0442/src/buffer.c 2018-09-21 16:59:40.113489779 +0200
+--- src/buffer.c 2018-09-30 20:14:44.852464316 +0200
+***************
+*** 51,60 ****
+ # define dev_T unsigned
+ #endif
+
+- #if defined(FEAT_SIGNS)
+- static void insert_sign(buf_T *buf, signlist_T *prev, signlist_T *next, int id, linenr_T lnum, int typenr);
+- #endif
+-
+ #if defined(FEAT_QUICKFIX)
+ static char *msg_loclist = N_("[Location List]");
+ static char *msg_qflist = N_("[Quickfix List]");
+--- 51,56 ----
+***************
+*** 2839,2846 ****
+ }
+
+ #ifdef FEAT_DIFF
+- static int wininfo_other_tab_diff(wininfo_T *wip);
+-
+ /*
+ * Return TRUE when "wip" has 'diff' set and the diff is only for another tab
+ * page. That's because a diff is local to a tab page.
+--- 2835,2840 ----
+*** ../vim-8.1.0442/src/charset.c 2018-06-23 19:22:45.602486336 +0200
+--- src/charset.c 2018-09-30 20:16:46.467660371 +0200
+***************
+*** 9,18 ****
+
+ #include "vim.h"
+
+- #ifdef FEAT_LINEBREAK
+- static int win_chartabsize(win_T *wp, char_u *p, colnr_T col);
+- #endif
+-
+ #ifdef FEAT_MBYTE
+ # if defined(HAVE_WCHAR_H)
+ # include <wchar.h> /* for towupper() and towlower() */
+--- 9,14 ----
+*** ../vim-8.1.0442/src/crypt_zip.c 2016-08-29 22:42:20.000000000 +0200
+--- src/crypt_zip.c 2018-09-30 20:17:36.571324947 +0200
+***************
+*** 36,43 ****
+ } zip_state_T;
+
+
+- static void make_crc_tab(void);
+-
+ static u32_T crc_32_table[256];
+
+ /*
+--- 36,41 ----
+*** ../vim-8.1.0442/src/digraph.c 2018-06-16 17:25:17.997346631 +0200
+--- src/digraph.c 2018-09-30 20:17:55.407198290 +0200
+***************
+*** 28,34 ****
+ result_T result;
+ } digr_T;
+
+- static int getexactdigraph(int, int, int);
+ static void printdigraph(digr_T *);
+
+ /* digraphs added by the user */
+--- 28,33 ----
+*** ../vim-8.1.0442/src/edit.c 2018-09-12 21:52:14.319799760 +0200
+--- src/edit.c 2018-09-30 20:19:36.046516906 +0200
+***************
+*** 155,169 ****
+ static int has_compl_option(int dict_opt);
+ static int ins_compl_accept_char(int c);
+ static int ins_compl_add(char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup);
+- static int ins_compl_equal(compl_T *match, char_u *str, int len);
+ static void ins_compl_longest_match(compl_T *match);
+- static void ins_compl_add_matches(int num_matches, char_u **matches, int icase);
+- static int ins_compl_make_cyclic(void);
+- static void ins_compl_upd_pum(void);
+ static void ins_compl_del_pum(void);
+ static int pum_wanted(void);
+- static int pum_enough_matches(void);
+- static void ins_compl_dictionaries(char_u *dict, char_u *pat, int flags, int thesaurus);
+ static void ins_compl_files(int count, char_u **files, int thesaurus, int flags, regmatch_T *regmatch, char_u *buf, int *dir);
+ static char_u *find_line_end(char_u *ptr);
+ static void ins_compl_free(void);
+--- 155,163 ----
+***************
+*** 178,196 ****
+ static void ins_compl_addfrommatch(void);
+ static int ins_compl_prep(int c);
+ static void ins_compl_fixRedoBufForLeader(char_u *ptr_arg);
+- static buf_T *ins_compl_next_buf(buf_T *buf, int flag);
+ # if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
+ static void ins_compl_add_list(list_T *list);
+ static void ins_compl_add_dict(dict_T *dict);
+ # endif
+- static int ins_compl_get_exp(pos_T *ini);
+ static void ins_compl_delete(void);
+ static void ins_compl_insert(int in_compl_func);
+- static int ins_compl_next(int allow_get_expansion, int count, int insert_match, int in_compl_func);
+ static int ins_compl_key2dir(int c);
+ static int ins_compl_pum_key(int c);
+ static int ins_compl_key2count(int c);
+- static int ins_compl_use_match(int c);
+ static int ins_complete(int c, int enable_pum);
+ static void show_pum(int prev_w_wrow, int prev_w_leftcol);
+ static unsigned quote_meta(char_u *dest, char_u *str, int len);
+--- 172,186 ----
+***************
+*** 212,218 ****
+ static void check_auto_format(int);
+ static void redo_literal(int c);
+ static void start_arrow(pos_T *end_insert_pos);
+- static void start_arrow_with_change(pos_T *end_insert_pos, int change);
+ static void start_arrow_common(pos_T *end_insert_pos, int change);
+ #ifdef FEAT_SPELL
+ static void check_spell_redraw(void);
+--- 202,207 ----
+***************
+*** 221,229 ****
+ #endif
+ static void stop_insert(pos_T *end_insert_pos, int esc, int nomove);
+ static int echeck_abbr(int);
+- static int replace_pop(void);
+ static void replace_join(int off);
+- static void replace_pop_ins(void);
+ #ifdef FEAT_MBYTE
+ static void mb_replace_pop_ins(int cc);
+ #endif
+--- 210,216 ----
+***************
+*** 9052,9059 ****
+ AppendCharToRedobuff(K_DEL);
+ }
+
+- static void ins_bs_one(colnr_T *vcolp);
+-
+ /*
+ * Delete one character for ins_bs().
+ */
+--- 9039,9044 ----
+*** ../vim-8.1.0442/src/eval.c 2018-09-10 21:04:09.864392710 +0200
+--- src/eval.c 2018-09-30 20:20:38.942087538 +0200
+***************
+*** 232,238 ****
+ static int eval6(char_u **arg, typval_T *rettv, int evaluate, int want_string);
+ static int eval7(char_u **arg, typval_T *rettv, int evaluate, int want_string);
+
+- static int eval_index(char_u **arg, typval_T *rettv, int evaluate, int verbose);
+ static int get_string_tv(char_u **arg, typval_T *rettv, int evaluate);
+ static int get_lit_string_tv(char_u **arg, typval_T *rettv, int evaluate);
+ static int free_unref_items(int copyID);
+--- 232,237 ----
+***************
+*** 3050,3057 ****
+ * get_user_var_name().
+ */
+
+- static char_u *cat_prefix_varname(int prefix, char_u *name);
+-
+ static char_u *varnamebuf = NULL;
+ static int varnamebuflen = 0;
+
+--- 3049,3054 ----
+***************
+*** 7957,7962 ****
+--- 7954,7960 ----
+ if (defstr != NULL)
+ {
+ int save_ex_normal_busy = ex_normal_busy;
++
+ ex_normal_busy = 0;
+ rettv->vval.v_string =
+ getcmdline_prompt(secret ? NUL : '@', p, echo_attr,
+***************
+*** 8507,8514 ****
+ VAR_FLAVOUR_VIMINFO /* all uppercase */
+ } var_flavour_T;
+
+- static var_flavour_T var_flavour(char_u *varname);
+-
+ static var_flavour_T
+ var_flavour(char_u *varname)
+ {
+--- 8505,8510 ----
+***************
+*** 9431,9439 ****
+ /*
+ * Functions for ":8" filename modifier: get 8.3 version of a filename.
+ */
+- static int get_short_pathname(char_u **fnamep, char_u **bufp, int *fnamelen);
+- static int shortpath_for_invalid_fname(char_u **fname, char_u **bufp, int *fnamelen);
+- static int shortpath_for_partial(char_u **fnamep, char_u **bufp, int *fnamelen);
+
+ /*
+ * Get the short path (8.3) for the filename in "fnamep".
+--- 9427,9432 ----
+*** ../vim-8.1.0442/src/evalfunc.c 2018-09-16 18:46:36.189127529 +0200
+--- src/evalfunc.c 2018-09-30 20:23:18.824986134 +0200
+***************
+*** 1121,1128 ****
+ }
+
+ #ifdef FEAT_FLOAT
+- static int get_float_arg(typval_T *argvars, float_T *f);
+-
+ /*
+ * Get the float value of "argvars[0]" into "f".
+ * Returns FAIL when the argument is not a Number or Float.
+--- 1121,1126 ----
+***************
+*** 1722,1729 ****
+ rettv->v_type = VAR_STRING;
+ }
+
+- static buf_T *find_buffer(typval_T *avar);
+-
+ /*
+ * Find a buffer by number or exact name.
+ */
+--- 1720,1725 ----
+***************
+*** 3826,3833 ****
+ vim_free(fbuf);
+ }
+
+- static void foldclosed_both(typval_T *argvars, typval_T *rettv, int end);
+-
+ /*
+ * "foldclosed()" function
+ */
+--- 3822,3827 ----
+***************
+*** 4485,4492 ****
+ }
+ }
+
+- static void get_buffer_lines(buf_T *buf, linenr_T start, linenr_T end, int retlist, typval_T *rettv);
+-
+ /*
+ * Get line or list of lines from buffer "buf" into "rettv".
+ * Return a range (from start to end) of lines in rettv from the specified
+--- 4479,4484 ----
+***************
+*** 7566,7573 ****
+ rettv->vval.v_number = (varnumber_T)time(NULL);
+ }
+
+- static void get_maparg(typval_T *argvars, typval_T *rettv, int exact);
+-
+ static void
+ get_maparg(typval_T *argvars, typval_T *rettv, int exact)
+ {
+--- 7558,7563 ----
+***************
+*** 8177,8184 ****
+ find_some_match(argvars, rettv, MATCH_POS);
+ }
+
+- static void max_min(typval_T *argvars, typval_T *rettv, int domax);
+-
+ static void
+ max_min(typval_T *argvars, typval_T *rettv, int domax)
+ {
+--- 8167,8172 ----
+***************
+*** 8261,8268 ****
+ max_min(argvars, rettv, FALSE);
+ }
+
+- static int mkdir_recurse(char_u *dir, int prot);
+-
+ /*
+ * Create the directory in which "dir" is located, and higher levels when
+ * needed.
+--- 8249,8254 ----
+***************
+*** 9057,9064 ****
+ }
+
+ #if defined(FEAT_RELTIME)
+- static int list2proftime(typval_T *arg, proftime_T *tm);
+-
+ /*
+ * Convert a List to proftime_T.
+ * Return FAIL when there is something wrong.
+--- 9043,9048 ----
+***************
+*** 9171,9179 ****
+ }
+
+ #if defined(FEAT_CLIENTSERVER) && defined(FEAT_X11)
+- static void make_connection(void);
+- static int check_connection(void);
+-
+ static void
+ make_connection(void)
+ {
+--- 9155,9160 ----
+***************
+*** 9843,9850 ****
+ #define SP_END 0x40 /* leave cursor at end of match */
+ #define SP_COLUMN 0x80 /* start at cursor column */
+
+- static int get_search_arg(typval_T *varp, int *flagsp);
+-
+ /*
+ * Get flags for a search function.
+ * Possibly sets "p_ws".
+--- 9824,9829 ----
+***************
+*** 10674,10681 ****
+ set_buffer_lines(curbuf, lnum, FALSE, &argvars[1], rettv);
+ }
+
+- static void set_qf_ll_list(win_T *wp, typval_T *list_arg, typval_T *action_arg, typval_T *what_arg, typval_T *rettv);
+-
+ /*
+ * Used by "setqflist()" and "setloclist()" functions
+ */
+--- 10653,10658 ----
+***************
+*** 11215,11221 ****
+ int item_compare_keep_zero;
+ } sortinfo_T;
+ static sortinfo_T *sortinfo = NULL;
+- static void do_sort_uniq(typval_T *argvars, typval_T *rettv, int sort);
+ #define ITEM_COMPARE_FAIL 999
+
+ /*
+--- 11192,11197 ----
+***************
+*** 12860,12867 ****
+ }
+
+
+- static int get_winnr(tabpage_T *tp, typval_T *argvar);
+-
+ /*
+ * Common code for tabpagewinnr() and winnr().
+ */
+--- 12836,12841 ----
+*** ../vim-8.1.0442/src/ex_cmds.c 2018-09-21 12:46:16.341772938 +0200
+--- src/ex_cmds.c 2018-09-30 20:23:56.636723898 +0200
+***************
+*** 1813,1819 ****
+
+ #if defined(FEAT_VIMINFO) || defined(PROTO)
+
+- static int no_viminfo(void);
+ static int read_viminfo_barline(vir_T *virp, int got_encoding, int force, int writing);
+ static void write_viminfo_version(FILE *fp_out);
+ static void write_viminfo_barlines(vir_T *virp, FILE *fp_out);
+--- 1813,1818 ----
+***************
+*** 7568,7574 ****
+ static sign_T *first_sign = NULL;
+ static int next_sign_typenr = 1;
+
+- static int sign_cmd_idx(char_u *begin_cmd, char_u *end_cmd);
+ static void sign_list_defined(sign_T *sp);
+ static void sign_undefine(sign_T *sp, sign_T *sp_prev);
+
+--- 7567,7572 ----
+*** ../vim-8.1.0442/src/ex_cmds2.c 2018-09-11 22:36:48.125548396 +0200
+--- src/ex_cmds2.c 2018-09-30 20:24:55.984311160 +0200
+***************
+*** 68,74 ****
+ #if defined(FEAT_EVAL) || defined(PROTO)
+ static int debug_greedy = FALSE; /* batch mode debugging: don't save
+ and restore typeahead. */
+- static int get_maxbacktrace_level(void);
+ static void do_setdebugtracelevel(char_u *arg);
+ static void do_checkbacktracelevel(void);
+ static void do_showbacktrace(char_u *cmd);
+--- 68,73 ----
+***************
+*** 573,579 ****
+ #define DBG_FILE 2
+ #define DBG_EXPR 3
+
+- static int dbg_parsearg(char_u *arg, garray_T *gap);
+ static linenr_T debuggy_find(int file,char_u *fname, linenr_T after, garray_T *gap, int *fp);
+
+ /*
+--- 572,577 ----
+***************
+*** 1611,1617 ****
+ /*
+ * Functions for profiling.
+ */
+- static void script_do_profile(scriptitem_T *si);
+ static void script_dump_profile(FILE *fd);
+ static proftime_T prof_wait_time;
+
+--- 1609,1614 ----
+***************
+*** 2242,2249 ****
+ || forceit);
+ }
+
+- static void add_bufnum(int *bufnrs, int *bufnump, int nr);
+-
+ /*
+ * Add a buffer number to "bufnrs", unless it's already there.
+ */
+--- 2239,2244 ----
+***************
+*** 2444,2453 ****
+ * Code to handle the argument list.
+ */
+
+- static char_u *do_one_arg(char_u *str);
+ static int do_arglist(char_u *str, int what, int after, int will_edit);
+ static void alist_check_arg_idx(void);
+- static int editing_arg_idx(win_T *win);
+ static void alist_add_list(int count, char_u **files, int after, int will_edit);
+ #define AL_SET 1
+ #define AL_ADD 2
+--- 2439,2446 ----
+***************
+*** 4299,4306 ****
+
+ #if (defined(WIN32) && defined(FEAT_CSCOPE)) || defined(HAVE_FD_CLOEXEC)
+ # define USE_FOPEN_NOINH
+- static FILE *fopen_noinh_readbin(char *filename);
+-
+ /*
+ * Special function to open a file without handle inheritance.
+ * When possible the handle is closed on exec().
+--- 4292,4297 ----
+***************
+*** 5291,5298 ****
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_EVAL) || defined(FEAT_MULTI_LANG))
+ # define HAVE_GET_LOCALE_VAL
+- static char_u *get_locale_val(int what);
+-
+ static char_u *
+ get_locale_val(int what)
+ {
+--- 5282,5287 ----
+***************
+*** 5410,5417 ****
+ || ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE)) \
+ && !defined(LC_MESSAGES))
+- static char_u *get_mess_env(void);
+-
+ /*
+ * Get the language used for messages from the environment.
+ */
+--- 5399,5404 ----
+*** ../vim-8.1.0442/src/ex_docmd.c 2018-09-30 18:22:22.568974801 +0200
+--- src/ex_docmd.c 2018-09-30 20:31:05.769715873 +0200
+***************
+*** 61,67 ****
+ # define IS_USER_CMDIDX(idx) (FALSE)
+ #endif
+
+- static int compute_buffer_local_count(int addr_type, int lnum, int local);
+ #ifdef FEAT_EVAL
+ static char_u *do_one_cmd(char_u **, int, struct condstack *, char_u *(*fgetline)(int, void *, int), void *cookie);
+ #else
+--- 61,66 ----
+***************
+*** 116,122 ****
+ # define ex_cexpr ex_ni
+ #endif
+
+- static int check_more(int, int);
+ static linenr_T get_address(exarg_T *, char_u **, int addr_type, int skip, int silent, int to_other_file, int address_count);
+ static void get_flags(exarg_T *eap);
+ #if !defined(FEAT_PERL) \
+--- 115,120 ----
+***************
+*** 498,506 ****
+ except_T *current_exception;
+ };
+
+- static void save_dbg_stuff(struct dbg_stuff *dsp);
+- static void restore_dbg_stuff(struct dbg_stuff *dsp);
+-
+ static void
+ save_dbg_stuff(struct dbg_stuff *dsp)
+ {
+--- 496,501 ----
+***************
+*** 1633,1641 ****
+ return buf->b_fnum;
+ }
+
+- static int current_win_nr(win_T *win);
+- static int current_tab_nr(tabpage_T *tab);
+-
+ static int
+ current_win_nr(win_T *win)
+ {
+--- 1628,1633 ----
+***************
+*** 4910,4917 ****
+ }
+
+ #ifdef FEAT_QUICKFIX
+- static char_u *skip_grep_pat(exarg_T *eap);
+-
+ /*
+ * For a ":vimgrep" or ":vimgrepadd" command return a pointer past the
+ * pattern. Otherwise return eap->arg.
+--- 4902,4907 ----
+***************
+*** 5818,5829 ****
+ #endif
+
+ #if defined(FEAT_USR_CMDS) || defined(PROTO)
+- static int uc_add_command(char_u *name, size_t name_len, char_u *rep, long argt, long def, int flags, int compl, char_u *compl_arg, int addr_type, int force);
+- static void uc_list(char_u *name, size_t name_len);
+- static int uc_scan_attr(char_u *attr, size_t len, long *argt, long *def, int *flags, int *compl, char_u **compl_arg, int* attr_type_arg);
+- static char_u *uc_split_args(char_u *arg, size_t *lenp);
+- static size_t uc_check_code(char_u *code, size_t len, char_u *buf, ucmd_T *cmd, exarg_T *eap, char_u **split_buf, size_t *split_len);
+-
+ static int
+ uc_add_command(
+ char_u *name,
+--- 5808,5813 ----
+*** ../vim-8.1.0442/src/ex_eval.c 2017-07-10 21:50:04.000000000 +0200
+--- src/ex_eval.c 2018-09-30 20:12:01.345516685 +0200
+***************
+*** 15,21 ****
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+
+- static void free_msglist(struct msglist *l);
+ static int throw_exception(void *, except_type_T, char_u *);
+ static char_u *get_end_emsg(struct condstack *cstack);
+
+--- 15,20 ----
+***************
+*** 65,75 ****
+ # define THROW_ON_INTERRUPT_TRUE
+ #endif
+
+- static void catch_exception(except_T *excp);
+- static void finish_exception(except_T *excp);
+- static void discard_exception(except_T *excp, int was_finished);
+- static void report_pending(int action, int pending, void *value);
+-
+ /*
+ * When several errors appear in a row, setting "force_abort" is delayed until
+ * the failing command returned. "cause_abort" is set to TRUE meanwhile, in
+--- 64,69 ----
+*** ../vim-8.1.0442/src/ex_getln.c 2018-09-30 17:45:26.860914873 +0200
+--- src/ex_getln.c 2018-09-30 20:32:06.389287602 +0200
+***************
+*** 75,85 ****
+ static int hislen = 0; /* actual length of history tables */
+
+ static int hist_char2type(int c);
+-
+- static int in_history(int, char_u *, int, int, int);
+- # ifdef FEAT_EVAL
+- static int calc_hist_idx(int histype, int num);
+- # endif
+ #endif
+
+ #ifdef FEAT_RIGHTLEFT
+--- 75,80 ----
+***************
+*** 103,111 ****
+ static void save_cmdline(struct cmdline_info *ccp);
+ static void restore_cmdline(struct cmdline_info *ccp);
+ static int cmdline_paste(int regname, int literally, int remcr);
+- #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+- static void redrawcmd_preedit(void);
+- #endif
+ #ifdef FEAT_WILDMENU
+ static void cmdline_del(int from);
+ #endif
+--- 98,103 ----
+***************
+*** 5049,5056 ****
+ * Remove "@ab" if the top of 'helplang' is "ab" and the language of the first
+ * tag matches it. Otherwise remove "@en" if "en" is the only language.
+ */
+- static void cleanup_help_tags(int num_file, char_u **file);
+-
+ static void
+ cleanup_help_tags(int num_file, char_u **file)
+ {
+--- 5041,5046 ----
+***************
+*** 6707,6714 ****
+ static int viminfo_hislen[HIST_COUNT] = {0, 0, 0, 0, 0};
+ static int viminfo_add_at_front = FALSE;
+
+- static int hist_type2char(int type, int use_question);
+-
+ /*
+ * Translate a history type number to the associated character.
+ */
+--- 6697,6702 ----
+*** ../vim-8.1.0442/src/fileio.c 2018-09-16 15:47:45.629425398 +0200
+--- src/fileio.c 2018-09-30 20:33:44.836590897 +0200
+***************
+*** 39,47 ****
+ #ifdef FEAT_CRYPT
+ static char_u *check_for_cryptkey(char_u *cryptkey, char_u *ptr, long *sizep, off_T *filesizep, int newfile, char_u *fname, int *did_ask);
+ #endif
+- #ifdef UNIX
+- static void set_file_time(char_u *fname, time_t atime, time_t mtime);
+- #endif
+ static int set_rw_fname(char_u *fname, char_u *sfname);
+ static int msg_add_fileformat(int eol_type);
+ static void msg_add_eol(void);
+--- 39,44 ----
+***************
+*** 129,138 ****
+ static int get_mac_fio_flags(char_u *ptr);
+ # endif
+ #endif
+- static int move_lines(buf_T *frombuf, buf_T *tobuf);
+- #ifdef TEMPDIRNAMES
+- static void vim_settempdir(char_u *tempdir);
+- #endif
+ static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name");
+
+ /*
+--- 126,131 ----
+***************
+*** 7884,7899 ****
+
+ static int au_need_clean = FALSE; /* need to delete marked patterns */
+
+- static void show_autocmd(AutoPat *ap, event_T event);
+- static void au_remove_pat(AutoPat *ap);
+- static void au_remove_cmds(AutoPat *ap);
+- static void au_cleanup(void);
+- static int au_new_group(char_u *name);
+- static void au_del_group(char_u *name);
+- static event_T event_name2nr(char_u *start, char_u **end);
+ static char_u *event_nr2name(event_T event);
+- static char_u *find_end_event(char_u *arg, int have_group);
+- static int event_ignored(event_T event);
+ static int au_get_grouparg(char_u **argp);
+ static int do_autocmd_event(event_T event, char_u *pat, int nested, char_u *cmd, int forceit, int group);
+ static int apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap);
+--- 7877,7883 ----
+*** ../vim-8.1.0442/src/getchar.c 2018-09-30 17:11:45.305649987 +0200
+--- src/getchar.c 2018-09-30 20:34:39.744201771 +0200
+***************
+*** 108,124 ****
+
+ static int last_recorded_len = 0; /* number of last recorded chars */
+
+- static char_u *get_buffcont(buffheader_T *, int);
+- static void add_buff(buffheader_T *, char_u *, long n);
+- static void add_num_buff(buffheader_T *, long);
+- static void add_char_buff(buffheader_T *, int);
+- static int read_readbuffers(int advance);
+ static int read_readbuf(buffheader_T *buf, int advance);
+- static void start_stuff(void);
+- static int read_redo(int, int);
+- static void copy_redo(int);
+ static void init_typebuf(void);
+- static void gotchars(char_u *, int);
+ static void may_sync_undo(void);
+ static void closescript(void);
+ static int vgetorpeek(int);
+--- 108,115 ----
+*** ../vim-8.1.0442/src/gui.c 2018-07-29 17:35:19.493750319 +0200
+--- src/gui.c 2018-09-30 20:35:36.795797084 +0200
+***************
+*** 17,37 ****
+ static void set_guifontwide(char_u *font_name);
+ #endif
+ static void gui_check_pos(void);
+- static void gui_position_components(int);
+ static void gui_outstr(char_u *, int);
+ static int gui_screenchar(int off, int flags, guicolor_T fg, guicolor_T bg, int back);
+- #ifdef FEAT_GUI_GTK
+- static int gui_screenstr(int off, int len, int flags, guicolor_T fg, guicolor_T bg, int back);
+- #endif
+ static void gui_delete_lines(int row, int count);
+ static void gui_insert_lines(int row, int count);
+- static void fill_mouse_coord(char_u *p, int col, int row);
+ #if defined(FEAT_GUI_TABLINE) || defined(PROTO)
+ static int gui_has_tabline(void);
+ #endif
+ static void gui_do_scrollbar(win_T *wp, int which, int enable);
+- static colnr_T scroll_line_len(linenr_T lnum);
+- static linenr_T gui_find_longest_lnum(void);
+ static void gui_update_horiz_scrollbar(int);
+ static void gui_set_fg_color(char_u *name);
+ static void gui_set_bg_color(char_u *name);
+--- 17,30 ----
+***************
+*** 5023,5029 ****
+ /*
+ * This is shared between Athena, Motif and GTK.
+ */
+- static void gfp_setname(char_u *fname, void *cookie);
+
+ /*
+ * Callback function for do_in_runtimepath().
+--- 5016,5021 ----
+***************
+*** 5384,5392 ****
+ #endif
+
+ #if defined(HAVE_DROP_FILE) || defined(PROTO)
+-
+- static void gui_wingoto_xy(int x, int y);
+-
+ /*
+ * Jump to the window at specified point (x, y).
+ */
+--- 5376,5381 ----
+*** ../vim-8.1.0442/src/gui_at_fs.c 2016-08-29 22:42:20.000000000 +0200
+--- src/gui_at_fs.c 2018-09-30 20:38:54.746400534 +0200
+***************
+*** 170,207 ****
+
+ static int SFstatus = SEL_FILE_NULL;
+
+! /***************** static functions */
+
+ static void SFsetText(char *path);
+ static void SFtextChanged(void);
+- static char *SFgetText(void);
+- static void SFupdatePath(void);
+ static int SFgetDir(SFDir *dir);
+ static void SFdrawLists(int doScroll);
+ static void SFdrawList(int n, int doScroll);
+ static void SFclearList(int n, int doScroll);
+- static void SFbuttonPressList(Widget w, int n, XButtonPressedEvent *event);
+- static void SFbuttonReleaseList(Widget w, int n, XButtonReleasedEvent *event);
+- static void SFdirModTimer(XtPointer cl, XtIntervalId *id);
+ static char SFstatChar(stat_T *statBuf);
+- static void SFdrawStrings(Window w, SFDir *dir, int from, int to);
+- static int SFnewInvertEntry(int n, XMotionEvent *event);
+- static void SFinvertEntry(int n);
+- static void SFenterList(Widget w, int n, XEnterWindowEvent *event);
+- static void SFleaveList(Widget w, int n, XEvent *event);
+ static void SFmotionList(Widget w, int n, XMotionEvent *event);
+- static void SFvFloatSliderMovedCallback(Widget w, XtPointer n, XtPointer fnew);
+ static void SFvSliderMovedCallback(Widget w, int n, int nw);
+- static void SFvAreaSelectedCallback(Widget w, XtPointer n, XtPointer pnew);
+- static void SFhSliderMovedCallback(Widget w, XtPointer n, XtPointer nw);
+- static void SFhAreaSelectedCallback(Widget w, XtPointer n, XtPointer pnew);
+- static void SFpathSliderMovedCallback(Widget w, XtPointer client_data, XtPointer nw);
+- static void SFpathAreaSelectedCallback(Widget w, XtPointer client_data, XtPointer pnew);
+ static Boolean SFworkProc(void);
+ static int SFcompareEntries(const void *p, const void *q);
+- static void SFprepareToReturn(void);
+- static void SFcreateWidgets(Widget toplevel, char *prompt, char *ok, char *cancel);
+- static void SFsetColors(guicolor_T bg, guicolor_T fg, guicolor_T scroll_bg, guicolor_T scrollfg);
+
+ /***************** xstat.h */
+
+--- 170,188 ----
+
+ static int SFstatus = SEL_FILE_NULL;
+
+! /***************** forward declare static functions */
+
+ static void SFsetText(char *path);
+ static void SFtextChanged(void);
+ static int SFgetDir(SFDir *dir);
+ static void SFdrawLists(int doScroll);
+ static void SFdrawList(int n, int doScroll);
+ static void SFclearList(int n, int doScroll);
+ static char SFstatChar(stat_T *statBuf);
+ static void SFmotionList(Widget w, int n, XMotionEvent *event);
+ static void SFvSliderMovedCallback(Widget w, int n, int nw);
+ static Boolean SFworkProc(void);
+ static int SFcompareEntries(const void *p, const void *q);
+
+ /***************** xstat.h */
+
+***************
+*** 237,244 ****
+
+ static int SFtwiddle = 0;
+
+- static int SFchdir(char *path);
+-
+ static int
+ SFchdir(char *path)
+ {
+--- 218,223 ----
+***************
+*** 256,263 ****
+ return result;
+ }
+
+- static void SFfree(int i);
+-
+ static void
+ SFfree(int i)
+ {
+--- 235,240 ----
+***************
+*** 279,294 ****
+ dir->dir = NULL;
+ }
+
+- static void SFstrdup(char **s1, char *s2);
+-
+ static void
+ SFstrdup(char **s1, char *s2)
+ {
+ *s1 = strcpy(XtMalloc((unsigned)(strlen(s2) + 1)), s2);
+ }
+
+- static void SFunreadableDir(SFDir *dir);
+-
+ static void
+ SFunreadableDir(SFDir *dir)
+ {
+--- 256,267 ----
+***************
+*** 302,309 ****
+ dir->nChars = strlen(cannotOpen);
+ }
+
+- static void SFreplaceText(SFDir *dir, char *str);
+-
+ static void
+ SFreplaceText(SFDir *dir, char *str)
+ {
+--- 275,280 ----
+***************
+*** 323,330 ****
+ SFtextChanged();
+ }
+
+- static void SFexpand(char *str);
+-
+ static void
+ SFexpand(char *str)
+ {
+--- 294,299 ----
+***************
+*** 379,386 ****
+ XtFree(growing);
+ }
+
+- static int SFfindFile(SFDir *dir, char *str);
+-
+ static int
+ SFfindFile(SFDir *dir, char *str)
+ {
+--- 348,353 ----
+***************
+*** 478,485 ****
+ return 0;
+ }
+
+- static void SFunselect(void);
+-
+ static void
+ SFunselect(void)
+ {
+--- 445,450 ----
+***************
+*** 492,507 ****
+ dir->endSelection = -1;
+ }
+
+- static int SFcompareLogins(const void *p, const void *q);
+-
+ static int
+ SFcompareLogins(const void *p, const void *q)
+ {
+ return strcmp(((SFLogin *)p)->name, ((SFLogin *)q)->name);
+ }
+
+- static void SFgetHomeDirs(void);
+-
+ static void
+ SFgetHomeDirs(void)
+ {
+--- 457,468 ----
+***************
+*** 568,575 ****
+ (void)strcat(entries[i].real, "/");
+ }
+
+- static int SFfindHomeDir(char *begin, char *end);
+-
+ static int
+ SFfindHomeDir(char *begin, char *end)
+ {
+--- 529,534 ----
+***************
+*** 868,875 ****
+ }
+ }
+
+- static int SFcheckDir(int n, SFDir *dir);
+-
+ static int
+ SFcheckDir(int n, SFDir *dir)
+ {
+--- 827,832 ----
+***************
+*** 932,939 ****
+ return 0;
+ }
+
+- static int SFcheckFiles(SFDir *dir);
+-
+ static int
+ SFcheckFiles(SFDir *dir)
+ {
+--- 889,894 ----
+***************
+*** 1077,1084 ****
+
+ static XtIntervalId SFscrollTimerId;
+
+- static void SFinitFont(void);
+-
+ static void
+ SFinitFont(void)
+ {
+--- 1032,1037 ----
+***************
+*** 1128,1135 ****
+ #endif
+ }
+
+- static void SFcreateGC(void);
+-
+ static void
+ SFcreateGC(void)
+ {
+--- 1081,1086 ----
+***************
+*** 1261,1268 ****
+ }
+ }
+
+- static void SFdeleteEntry(SFDir *dir, SFEntry *entry);
+-
+ static void
+ SFdeleteEntry(SFDir *dir, SFEntry *entry)
+ {
+--- 1212,1217 ----
+***************
+*** 1313,1320 ****
+ #endif
+ }
+
+- static void SFwriteStatChar(char *name, int last, stat_T *statBuf);
+-
+ static void
+ SFwriteStatChar(
+ char *name,
+--- 1262,1267 ----
+***************
+*** 1324,1331 ****
+ name[last] = SFstatChar(statBuf);
+ }
+
+- static int SFstatAndCheck(SFDir *dir, SFEntry *entry);
+-
+ static int
+ SFstatAndCheck(SFDir *dir, SFEntry *entry)
+ {
+--- 1271,1276 ----
+***************
+*** 1532,1539 ****
+ SFentryHeight);
+ }
+
+- static unsigned long SFscrollTimerInterval(void);
+-
+ static unsigned long
+ SFscrollTimerInterval(void)
+ {
+--- 1477,1482 ----
+***************
+*** 1561,1568 ****
+ return (unsigned long)t;
+ }
+
+- static void SFscrollTimer(XtPointer p, XtIntervalId *id);
+-
+ static void
+ SFscrollTimer(XtPointer p, XtIntervalId *id UNUSED)
+ {
+--- 1504,1509 ----
+***************
+*** 2131,2138 ****
+ Ctrl<Key>M: redraw-display()\n\
+ ";
+
+- static void SFexposeList(Widget w, XtPointer n, XEvent *event, Boolean *cont);
+-
+ static void
+ SFexposeList(
+ Widget w UNUSED,
+--- 2072,2077 ----
+***************
+*** 2146,2153 ****
+ SFdrawList((int)(long)n, SF_DO_NOT_SCROLL);
+ }
+
+- static void SFmodVerifyCallback(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
+-
+ static void
+ SFmodVerifyCallback(
+ Widget w UNUSED,
+--- 2085,2090 ----
+***************
+*** 2164,2171 ****
+ SFstatus = SEL_FILE_TEXT;
+ }
+
+- static void SFokCallback(Widget w, XtPointer cl, XtPointer cd);
+-
+ static void
+ SFokCallback(Widget w UNUSED, XtPointer cl UNUSED, XtPointer cd UNUSED)
+ {
+--- 2101,2106 ----
+***************
+*** 2178,2185 ****
+ { NULL, (XtPointer) NULL },
+ };
+
+- static void SFcancelCallback(Widget w, XtPointer cl, XtPointer cd);
+-
+ static void
+ SFcancelCallback(Widget w UNUSED, XtPointer cl UNUSED, XtPointer cd UNUSED)
+ {
+--- 2113,2118 ----
+***************
+*** 2192,2199 ****
+ { NULL, (XtPointer) NULL },
+ };
+
+- static void SFdismissAction(Widget w, XEvent *event, String *params, Cardinal *num_params);
+-
+ static void
+ SFdismissAction(
+ Widget w UNUSED,
+--- 2125,2130 ----
+*** ../vim-8.1.0442/src/gui_athena.c 2017-11-18 20:37:02.000000000 +0100
+--- src/gui_athena.c 2018-09-30 20:40:00.885938817 +0200
+***************
+*** 52,59 ****
+ static vimmenu_T *a_cur_menu = NULL;
+ static Cardinal athena_calculate_ins_pos(Widget);
+
+- static Pixmap gui_athena_create_pullright_pixmap(Widget);
+- static void gui_athena_menu_timeout(XtPointer, XtIntervalId *);
+ static void gui_athena_popup_callback(Widget, XtPointer, XtPointer);
+ static void gui_athena_delayed_arm_action(Widget, XEvent *, String *,
+ Cardinal *);
+--- 52,57 ----
+***************
+*** 70,77 ****
+ static Widget toolBar = (Widget)0;
+ #endif
+
+- static void gui_athena_scroll_cb_jump(Widget, XtPointer, XtPointer);
+- static void gui_athena_scroll_cb_scroll(Widget, XtPointer, XtPointer);
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_MENU)
+ static void gui_athena_menu_colors(Widget id);
+ #endif
+--- 68,73 ----
+***************
+*** 445,451 ****
+ # endif
+
+ static void createXpmImages(char_u *path, char **xpm, Pixmap *sen);
+- static void get_toolbar_pixmap(vimmenu_T *menu, Pixmap *sen);
+
+ /*
+ * Allocated a pixmap for toolbar menu "menu".
+--- 441,446 ----
+***************
+*** 646,652 ****
+ static Boolean has_submenu(Widget);
+ static void gui_mch_submenu_change(vimmenu_T *mp, int colors);
+ static void gui_athena_menu_font(Widget id);
+- static Boolean gui_athena_menu_has_submenus(Widget, Widget);
+
+ void
+ gui_mch_enable_menu(int flag)
+--- 641,646 ----
+***************
+*** 2041,2050 ****
+ static int dialogStatus;
+ static Atom dialogatom;
+
+- static void keyhit_callback(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
+- static void butproc(Widget w, XtPointer client_data, XtPointer call_data);
+- static void dialog_wm_handler(Widget w, XtPointer client_data, XEvent *event, Boolean *dum);
+-
+ /*
+ * Callback function for the textfield. When CR is hit this works like
+ * hitting the "OK" button, ESC like "Cancel".
+--- 2035,2040 ----
+*** ../vim-8.1.0442/src/gui_gtk_x11.c 2018-09-19 22:39:59.816157865 +0200
+--- src/gui_gtk_x11.c 2018-09-30 20:41:32.733295842 +0200
+***************
+*** 618,624 ****
+ static gboolean blink_mode = TRUE;
+
+ static gboolean gui_gtk_is_blink_on(void);
+- static void gui_gtk_window_clear(GdkWindow *win);
+
+ static void
+ gui_gtk3_redraw(int x, int y, int width, int height)
+--- 618,623 ----
+*** ../vim-8.1.0442/src/gui_mac.c 2018-07-29 17:35:19.497750288 +0200
+--- src/gui_mac.c 2018-09-30 20:41:48.389186056 +0200
+***************
+*** 300,306 ****
+
+ #ifdef USE_ATSUI_DRAWING
+ static void gui_mac_set_font_attributes(GuiFont font);
+- static void gui_mac_dispose_atsui_style(void);
+ #endif
+
+ /*
+--- 300,305 ----
+*** ../vim-8.1.0442/src/gui_motif.c 2017-11-18 20:37:55.000000000 +0100
+--- src/gui_motif.c 2018-09-30 20:43:31.232463721 +0200
+***************
+*** 83,95 ****
+ static Widget menuBar;
+ #endif
+
+- static void scroll_cb(Widget w, XtPointer client_data, XtPointer call_data);
+- #ifdef FEAT_GUI_TABLINE
+- static void tabline_cb(Widget w, XtPointer client_data, XtPointer call_data);
+- static void tabline_button_cb(Widget w, XtPointer client_data, XtPointer call_data);
+- static void tabline_menu_cb(Widget w, XtPointer closure, XEvent *e, Boolean *continue_dispatch);
+- static void tabline_balloon_cb(BalloonEval *beval, int state);
+- #endif
+ #ifdef FEAT_TOOLBAR
+ # ifdef FEAT_FOOTER
+ static void toolbarbutton_enter_cb(Widget, XtPointer, XEvent *, Boolean *);
+--- 83,88 ----
+***************
+*** 97,108 ****
+ # endif
+ static void reset_focus(void);
+ #endif
+- #ifdef FEAT_FOOTER
+- static int gui_mch_compute_footer_height(void);
+- #endif
+- #ifdef WSDEBUG
+- static void attachDump(Widget, char *);
+- #endif
+
+ static void gui_motif_menu_colors(Widget id);
+ static void gui_motif_scroll_colors(Widget id);
+--- 90,95 ----
+***************
+*** 306,313 ****
+
+ static XtExposeProc old_label_expose = NULL;
+
+- static void label_expose(Widget _w, XEvent *_event, Region _region);
+-
+ static void
+ label_expose(Widget _w, XEvent *_event, Region _region)
+ {
+--- 293,298 ----
+***************
+*** 1173,1181 ****
+ */
+ #include "gui_x11_pm.h"
+
+- static int check_xpm(char_u *path);
+ static char **get_toolbar_pixmap(vimmenu_T *menu, char **fname);
+- static int add_pixmap_args(vimmenu_T *menu, Arg *args, int n);
+
+ /*
+ * Read an Xpm file. Return OK or FAIL.
+--- 1158,1164 ----
+***************
+*** 2088,2095 ****
+ }
+
+ #if defined(FEAT_BROWSE) || defined(FEAT_GUI_DIALOG)
+- static void set_fontlist(Widget wg);
+-
+ /*
+ * Use the 'guifont' or 'guifontset' as a fontlist for a dialog widget.
+ */
+--- 2071,2076 ----
+***************
+*** 2172,2179 ****
+ * - equalize the messages between different GUI implementations as far as
+ * possible.
+ */
+- static void set_predefined_label(Widget parent, String name, char *new_label);
+-
+ static void
+ set_predefined_label(Widget parent, String name, char *new_label)
+ {
+--- 2153,2158 ----
+***************
+*** 2404,2412 ****
+
+ static int dialogStatus;
+
+- static void keyhit_callback(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
+- static void butproc(Widget w, XtPointer client_data, XtPointer call_data);
+-
+ /*
+ * Callback function for the textfield. When CR is hit this works like
+ * hitting the "OK" button, ESC like "Cancel".
+--- 2383,2388 ----
+***************
+*** 2444,2451 ****
+
+ #ifdef HAVE_XPM
+
+- static Widget create_pixmap_label(Widget parent, String name, char **data, ArgList args, Cardinal arg);
+-
+ static Widget
+ create_pixmap_label(
+ Widget parent,
+--- 2420,2425 ----
+***************
+*** 3492,3504 ****
+ static SharedFindReplace find_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+ static SharedFindReplace repl_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+
+- static void find_replace_destroy_callback(Widget w, XtPointer client_data, XtPointer call_data);
+- static void find_replace_dismiss_callback(Widget w, XtPointer client_data, XtPointer call_data);
+- static void entry_activate_callback(Widget w, XtPointer client_data, XtPointer call_data);
+- static void find_replace_callback(Widget w, XtPointer client_data, XtPointer call_data);
+- static void find_replace_keypress(Widget w, SharedFindReplace * frdp, XKeyEvent * event);
+- static void find_replace_dialog_create(char_u *entry_text, int do_replace);
+-
+ static void
+ find_replace_destroy_callback(
+ Widget w UNUSED,
+--- 3466,3471 ----
+*** ../vim-8.1.0442/src/gui_photon.c 2018-02-10 18:34:22.000000000 +0100
+--- src/gui_photon.c 2018-09-30 20:43:50.156330604 +0200
+***************
+*** 212,221 ****
+ static void gui_ph_get_panelgroup_margins(short*, short*, short*, short*);
+ #endif
+
+- #ifdef FEAT_TOOLBAR
+- static PhImage_t *gui_ph_toolbar_find_icon(vimmenu_T *menu);
+- #endif
+-
+ static void gui_ph_draw_start(void);
+ static void gui_ph_draw_end(void);
+
+--- 212,217 ----
+*** ../vim-8.1.0442/src/gui_w32.c 2018-09-22 14:39:07.681593221 +0200
+--- src/gui_w32.c 2018-09-30 20:44:47.155929310 +0200
+***************
+*** 4336,4345 ****
+ # define UINT_PTR UINT
+ #endif
+
+- static void make_tooltip(BalloonEval *beval, char *text, POINT pt);
+- static void delete_tooltip(BalloonEval *beval);
+- static VOID CALLBACK BevalTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
+-
+ static BalloonEval *cur_beval = NULL;
+ static UINT_PTR BevalTimerId = 0;
+ static DWORD LastActivity = 0;
+--- 4336,4341 ----
+***************
+*** 4463,4472 ****
+ /*
+ * stuff for dialogs, menus, tearoffs etc.
+ */
+- static LRESULT APIENTRY dialog_callback(HWND, UINT, WPARAM, LPARAM);
+- #ifdef FEAT_TEAROFF
+- static LRESULT APIENTRY tearoff_callback(HWND, UINT, WPARAM, LPARAM);
+- #endif
+ static PWORD
+ add_dialog_element(
+ PWORD p,
+--- 4459,4464 ----
+*** ../vim-8.1.0442/src/gui_x11.c 2018-05-13 16:21:50.000000000 +0200
+--- src/gui_x11.c 2018-09-30 20:45:11.659756649 +0200
+***************
+*** 138,144 ****
+ #endif
+ static void gui_x11_wm_protocol_handler(Widget, XtPointer, XEvent *, Boolean *);
+ static Cursor gui_x11_create_blank_mouse(void);
+- static void draw_curl(int row, int col, int cells);
+
+
+ /*
+--- 138,143 ----
+***************
+*** 1309,1316 ****
+ */
+ static XtInputId _xsmp_xtinputid;
+
+- static void local_xsmp_handle_requests(XtPointer c, int *s, XtInputId *i);
+-
+ static void
+ local_xsmp_handle_requests(
+ XtPointer c UNUSED,
+--- 1308,1313 ----
+*** ../vim-8.1.0442/src/hangulin.c 2016-11-10 18:24:37.000000000 +0100
+--- src/hangulin.c 2018-09-30 20:45:38.015570851 +0200
+***************
+*** 37,44 ****
+
+ static void convert_ks_to_3(const char_u *src, int *fp, int *mp, int *lp);
+ static int convert_3_to_ks(int fv, int mv, int lv, char_u *des);
+- static int hangul_automata2(char_u *buf, unsigned int *c);
+- static int hangul_automata3(char_u *buf, unsigned int *c);
+
+ #define push(x) {stack[ sp++ ] = *(x); stack[sp++] = *((x)+1);}
+ #define pop(x) {*((x) + 1) = stack[--sp]; *(x) = stack[--sp];}
+--- 37,42 ----
+*** ../vim-8.1.0442/src/hardcopy.c 2018-06-23 19:22:45.606486311 +0200
+--- src/hardcopy.c 2018-09-30 20:48:36.238312294 +0200
+***************
+*** 137,156 ****
+
+ static char_u *parse_list_options(char_u *option_str, option_table_T *table, int table_size);
+
+- #ifdef FEAT_SYN_HL
+- static long_u darken_rgb(long_u rgb);
+- static long_u prt_get_term_color(int colorindex);
+- #endif
+- static void prt_set_fg(long_u fg);
+- static void prt_set_bg(long_u bg);
+- static void prt_set_font(int bold, int italic, int underline);
+- static void prt_line_number(prt_settings_T *psettings, int page_line, linenr_T lnum);
+- static void prt_header(prt_settings_T *psettings, int pagenum, linenr_T lnum);
+- static void prt_message(char_u *s);
+ static colnr_T hardcopy_line(prt_settings_T *psettings, int page_line, prt_pos_T *ppos);
+- #ifdef FEAT_SYN_HL
+- static void prt_get_attr(int hl_id, prt_text_attr_T* pattr, int modec);
+- #endif
+
+ /*
+ * Parse 'printoptions' and set the flags in "printer_opts".
+--- 137,143 ----
+***************
+*** 1357,1404 ****
+ PRT_DSC_ENDCOMMENTS_TYPE}
+ };
+
+- static void prt_write_file_raw_len(char_u *buffer, int bytes);
+- static void prt_write_file(char_u *buffer);
+ static void prt_write_file_len(char_u *buffer, int bytes);
+- static void prt_write_string(char *s);
+- static void prt_write_int(int i);
+- static void prt_write_boolean(int b);
+- static void prt_def_font(char *new_name, char *encoding, int height, char *font);
+- static void prt_real_bits(double real, int precision, int *pinteger, int *pfraction);
+- static void prt_write_real(double val, int prec);
+- static void prt_def_var(char *name, double value, int prec);
+- static void prt_flush_buffer(void);
+- static void prt_resource_name(char_u *filename, void *cookie);
+- static int prt_find_resource(char *name, struct prt_ps_resource_S *resource);
+- static int prt_open_resource(struct prt_ps_resource_S *resource);
+- static int prt_check_resource(struct prt_ps_resource_S *resource, char_u *version);
+- static void prt_dsc_start(void);
+- static void prt_dsc_noarg(char *comment);
+- static void prt_dsc_textline(char *comment, char *text);
+- static void prt_dsc_text(char *comment, char *text);
+- static void prt_dsc_ints(char *comment, int count, int *ints);
+- static void prt_dsc_requirements(int duplex, int tumble, int collate, int color, int num_copies);
+- static void prt_dsc_docmedia(char *paper_name, double width, double height, double weight, char *colour, char *type);
+- static void prt_dsc_resources(char *comment, char *type, char *strings);
+- static void prt_dsc_font_resource(char *resource, struct prt_ps_font_S *ps_font);
+- static float to_device_units(int idx, double physsize, int def_number);
+- static void prt_page_margins(double width, double height, double *left, double *right, double *top, double *bottom);
+- static void prt_font_metrics(int font_scale);
+- static int prt_get_cpl(void);
+- static int prt_get_lpp(void);
+- static int prt_add_resource(struct prt_ps_resource_S *resource);
+- static int prt_resfile_next_line(void);
+- static int prt_resfile_strncmp(int offset, char *string, int len);
+- static int prt_resfile_skip_nonws(int offset);
+- static int prt_resfile_skip_ws(int offset);
+ static int prt_next_dsc(struct prt_dsc_line_S *p_dsc_line);
+- #ifdef FEAT_MBYTE
+- static int prt_build_cid_fontname(int font, char_u *name, int name_len);
+- static void prt_def_cidfont(char *new_name, int height, char *cidfont);
+- static void prt_dup_cidfont(char *original_name, char *new_name);
+- static int prt_match_encoding(char *p_encoding, struct prt_ps_mbfont_S *p_cmap, struct prt_ps_encoding_S **pp_mbenc);
+- static int prt_match_charset(char *p_charset, struct prt_ps_mbfont_S *p_cmap, struct prt_ps_charset_S **pp_mbchar);
+- #endif
+
+ /*
+ * Variables for the output PostScript file.
+--- 1344,1351 ----
+*** ../vim-8.1.0442/src/if_cscope.c 2018-08-11 13:57:16.211969806 +0200
+--- src/if_cscope.c 2018-09-30 20:49:35.845890662 +0200
+***************
+*** 20,37 ****
+ #endif
+ #include "if_cscope.h"
+
+- static void cs_usage_msg(csid_e x);
+ static int cs_add(exarg_T *eap);
+- static void cs_stat_emsg(char *fname);
+ static int cs_add_common(char *, char *, char *);
+ static int cs_check_for_connections(void);
+ static int cs_check_for_tags(void);
+ static int cs_cnt_connections(void);
+- static void cs_reading_emsg(int idx);
+- static int cs_cnt_matches(int idx);
+- static char * cs_create_cmd(char *csoption, char *pattern);
+ static int cs_create_connection(int i);
+- static void do_cscope_general(exarg_T *eap, int make_split);
+ #ifdef FEAT_QUICKFIX
+ static void cs_file_results(FILE *, int *);
+ #endif
+--- 20,31 ----
+***************
+*** 40,46 ****
+ static int cs_find(exarg_T *eap);
+ static int cs_find_common(char *opt, char *pat, int, int, int, char_u *cmdline);
+ static int cs_help(exarg_T *eap);
+- static void clear_csinfo(int i);
+ static int cs_insert_filelist(char *, char *, char *,
+ stat_T *);
+ static int cs_kill(exarg_T *eap);
+--- 34,39 ----
+***************
+*** 49,56 ****
+ static char * cs_make_vim_style_matches(char *, char *,
+ char *, char *);
+ static char * cs_manage_matches(char **, char **, int, mcmd_e);
+- static char * cs_parse_results(int cnumber, char *buf, int bufsize, char **context, char **linenumber, char **search);
+- static char * cs_pathcomponents(char *path);
+ static void cs_print_tags_priv(char **, char **, int);
+ static int cs_read_prompt(int);
+ static void cs_release_csp(int, int freefnpp);
+--- 42,47 ----
+***************
+*** 1345,1352 ****
+ }
+
+ #ifndef UNIX
+- static char *GetWin32Error(void);
+-
+ static char *
+ GetWin32Error(void)
+ {
+--- 1336,1341 ----
+*** ../vim-8.1.0442/src/if_mzsch.c 2018-07-25 22:02:32.231966301 +0200
+--- src/if_mzsch.c 2018-09-30 21:00:03.033441617 +0200
+***************
+*** 117,168 ****
+ #endif
+ /* Buffer-related commands */
+ static Scheme_Object *buffer_new(buf_T *buf);
+- static Scheme_Object *get_buffer_by_name(void *, int, Scheme_Object **);
+ static Scheme_Object *get_buffer_by_num(void *, int, Scheme_Object **);
+- static Scheme_Object *get_buffer_count(void *, int, Scheme_Object **);
+- static Scheme_Object *get_buffer_line(void *, int, Scheme_Object **);
+- static Scheme_Object *get_buffer_line_list(void *, int, Scheme_Object **);
+- static Scheme_Object *get_buffer_name(void *, int, Scheme_Object **);
+- static Scheme_Object *get_buffer_num(void *, int, Scheme_Object **);
+- static Scheme_Object *get_buffer_size(void *, int, Scheme_Object **);
+- static Scheme_Object *get_curr_buffer(void *, int, Scheme_Object **);
+- static Scheme_Object *get_next_buffer(void *, int, Scheme_Object **);
+- static Scheme_Object *get_prev_buffer(void *, int, Scheme_Object **);
+- static Scheme_Object *mzscheme_open_buffer(void *, int, Scheme_Object **);
+- static Scheme_Object *set_buffer_line(void *, int, Scheme_Object **);
+- static Scheme_Object *set_buffer_line_list(void *, int, Scheme_Object **);
+- static Scheme_Object *insert_buffer_line_list(void *, int, Scheme_Object **);
+- static Scheme_Object *get_range_start(void *, int, Scheme_Object **);
+- static Scheme_Object *get_range_end(void *, int, Scheme_Object **);
+ static vim_mz_buffer *get_vim_curr_buffer(void);
+
+ /* Window-related commands */
+ static Scheme_Object *window_new(win_T *win);
+- static Scheme_Object *get_curr_win(void *, int, Scheme_Object **);
+- static Scheme_Object *get_window_count(void *, int, Scheme_Object **);
+- static Scheme_Object *get_window_by_num(void *, int, Scheme_Object **);
+- static Scheme_Object *get_window_num(void *, int, Scheme_Object **);
+- static Scheme_Object *get_window_buffer(void *, int, Scheme_Object **);
+- static Scheme_Object *get_window_height(void *, int, Scheme_Object **);
+- static Scheme_Object *set_window_height(void *, int, Scheme_Object **);
+- static Scheme_Object *get_window_width(void *, int, Scheme_Object **);
+- static Scheme_Object *set_window_width(void *, int, Scheme_Object **);
+- static Scheme_Object *get_cursor(void *, int, Scheme_Object **);
+- static Scheme_Object *set_cursor(void *, int, Scheme_Object **);
+- static Scheme_Object *get_window_list(void *, int, Scheme_Object **);
+ static vim_mz_window *get_vim_curr_window(void);
+
+- /* Vim-related commands */
+- static Scheme_Object *mzscheme_beep(void *, int, Scheme_Object **);
+- static Scheme_Object *get_option(void *, int, Scheme_Object **);
+- static Scheme_Object *set_option(void *, int, Scheme_Object **);
+- static Scheme_Object *vim_command(void *, int, Scheme_Object **);
+- static Scheme_Object *vim_eval(void *, int, Scheme_Object **);
+- static Scheme_Object *vim_bufferp(void *data, int, Scheme_Object **);
+- static Scheme_Object *vim_windowp(void *data, int, Scheme_Object **);
+- static Scheme_Object *vim_buffer_validp(void *data, int, Scheme_Object **);
+- static Scheme_Object *vim_window_validp(void *data, int, Scheme_Object **);
+-
+ /*
+ *========================================================================
+ * Internal Function Prototypes
+--- 117,129 ----
+*** ../vim-8.1.0442/src/if_python3.c 2018-07-04 22:03:22.106919847 +0200
+--- src/if_python3.c 2018-09-30 21:10:55.304803503 +0200
+***************
+*** 709,716 ****
+ /* Load the standard Python exceptions - don't import the symbols from the
+ * DLL, as this can cause errors (importing data symbols is not reliable).
+ */
+- static void get_py3_exceptions(void);
+-
+ static void
+ get_py3_exceptions(void)
+ {
+--- 709,714 ----
+***************
+*** 788,795 ****
+ static int ListSetattro(PyObject *, PyObject *, PyObject *);
+ static PyObject *FunctionGetattro(PyObject *, PyObject *);
+
+- static PyObject *VimPathHook(PyObject *, PyObject *);
+-
+ static struct PyModuleDef vimmodule;
+
+ #define PY_CAN_RECURSE
+--- 786,791 ----
+*** ../vim-8.1.0442/src/if_xcmdsrv.c 2018-03-04 16:07:56.000000000 +0100
+--- src/if_xcmdsrv.c 2018-09-30 21:05:05.415292167 +0200
+***************
+*** 192,201 ****
+ static void DeleteAnyLingerer(Display *dpy, Window w);
+ static int GetRegProp(Display *dpy, char_u **regPropp, long_u *numItemsp, int domsg);
+ static int WaitForPend(void *p);
+- static int WaitForReply(void *p);
+ static int WindowValid(Display *dpy, Window w);
+ static void ServerWait(Display *dpy, Window w, EndCond endCond, void *endData, int localLoop, int seconds);
+- static struct ServerReply *ServerReplyFind(Window w, enum ServerReplyOp op);
+ static int AppendPropCarefully(Display *display, Window window, Atom property, char_u *value, int length);
+ static int x_error_check(Display *dpy, XErrorEvent *error_event);
+ static int IsSerialName(char_u *name);
+--- 192,199 ----
+*** ../vim-8.1.0442/src/integration.c 2017-11-18 20:39:10.000000000 +0100
+--- src/integration.c 2018-09-30 21:07:49.510125154 +0200
+***************
+*** 76,83 ****
+ #endif
+
+ /* Functions private to this file */
+- static void workshop_connection_closed(void);
+- static void messageFromEserve(XtPointer clientData, int *dum1, XtInputId *dum2);
+ static void workshop_disconnect(void);
+ static void workshop_sensitivity(int num, char *table);
+ static void adjust_sign_name(char *filename);
+--- 76,81 ----
+***************
+*** 111,117 ****
+
+ Boolean save_files = True; /* When true, save all files before build actions */
+
+! void
+ workshop_connection_closed(void)
+ {
+ /*
+--- 109,115 ----
+
+ Boolean save_files = True; /* When true, save all files before build actions */
+
+! static void
+ workshop_connection_closed(void)
+ {
+ /*
+***************
+*** 157,163 ****
+
+ }
+
+! void
+ messageFromEserve(XtPointer clientData UNUSED,
+ int *dum1 UNUSED,
+ XtInputId *dum2 UNUSED)
+--- 155,161 ----
+
+ }
+
+! static void
+ messageFromEserve(XtPointer clientData UNUSED,
+ int *dum1 UNUSED,
+ XtInputId *dum2 UNUSED)
+***************
+*** 518,524 ****
+ }
+ }
+
+! static void
+ process_menuItem(
+ char *cmd)
+ {
+--- 516,522 ----
+ }
+ }
+
+! static void
+ process_menuItem(
+ char *cmd)
+ {
+***************
+*** 540,546 ****
+ }
+
+
+! static void
+ process_toolbarButton(
+ char *cmd) /* button definition */
+ {
+--- 538,544 ----
+ }
+
+
+! static void
+ process_toolbarButton(
+ char *cmd) /* button definition */
+ {
+***************
+*** 571,577 ****
+
+
+ #ifdef DEBUG
+! void
+ unrecognised_message(
+ char *cmd)
+ {
+--- 569,575 ----
+
+
+ #ifdef DEBUG
+! static void
+ unrecognised_message(
+ char *cmd)
+ {
+***************
+*** 587,593 ****
+ * x.xpm : largest icon
+ * x1.xpm : smaller icon
+ * x2.xpm : smallest icon */
+! void
+ adjust_sign_name(char *filename)
+ {
+ char *s;
+--- 585,591 ----
+ * x.xpm : largest icon
+ * x1.xpm : smaller icon
+ * x2.xpm : smallest icon */
+! static void
+ adjust_sign_name(char *filename)
+ {
+ char *s;
+***************
+*** 735,741 ****
+ dummy = write(sd, buf, strlen(buf));
+ }
+
+! void workshop_disconnect(void)
+ {
+ /* Probably need to send some message here */
+
+--- 733,740 ----
+ dummy = write(sd, buf, strlen(buf));
+ }
+
+! static void
+! workshop_disconnect(void)
+ {
+ /* Probably need to send some message here */
+
+***************
+*** 891,897 ****
+ * Toolbar code
+ */
+
+! void workshop_sensitivity(int num, char *table)
+ {
+ /* build up a verb table */
+ VerbSense *vs;
+--- 890,897 ----
+ * Toolbar code
+ */
+
+! static void
+! workshop_sensitivity(int num, char *table)
+ {
+ /* build up a verb table */
+ VerbSense *vs;
+***************
+*** 947,953 ****
+ /* Set an editor option.
+ * IGNORE an option if you do not recognize it.
+ */
+! void workshop_set_option_first(char *name, char *value)
+ {
+ /* Currently value can only be on/off. This may change later (for
+ * example to set an option like "balloon evaluate delay", but
+--- 947,954 ----
+ /* Set an editor option.
+ * IGNORE an option if you do not recognize it.
+ */
+! static void
+! workshop_set_option_first(char *name, char *value)
+ {
+ /* Currently value can only be on/off. This may change later (for
+ * example to set an option like "balloon evaluate delay", but
+***************
+*** 1092,1098 ****
+
+ #ifdef DEBUG
+
+! void
+ pldebug(
+ char *fmt, /* a printf style format line */
+ ...)
+--- 1093,1099 ----
+
+ #ifdef DEBUG
+
+! static void
+ pldebug(
+ char *fmt, /* a printf style format line */
+ ...)
+*** ../vim-8.1.0442/src/json.c 2018-04-08 12:53:40.000000000 +0200
+--- src/json.c 2018-09-30 21:11:23.644601886 +0200
+***************
+*** 19,25 ****
+ #if defined(FEAT_EVAL) || defined(PROTO)
+
+ static int json_encode_item(garray_T *gap, typval_T *val, int copyID, int options);
+- static int json_decode_item(js_read_T *reader, typval_T *res, int options);
+
+ /*
+ * Encode "val" into a JSON format string.
+--- 19,24 ----
+*** ../vim-8.1.0442/src/main.c 2018-09-30 17:11:45.305649987 +0200
+--- src/main.c 2018-09-30 21:12:02.308333694 +0200
+***************
+*** 39,47 ****
+ # endif
+ static void early_arg_scan(mparm_T *parmp);
+ #ifndef NO_VIM_MAIN
+- static void main_msg(char *s);
+ static void usage(void);
+- static int get_number_arg(char_u *p, int *idx, int def);
+ static void parse_command_name(mparm_T *parmp);
+ static void command_line_scan(mparm_T *parmp);
+ static void check_tty(mparm_T *parmp);
+--- 39,45 ----
+***************
+*** 3476,3483 ****
+ #endif /* NO_VIM_MAIN */
+
+ #if defined(STARTUPTIME) || defined(PROTO)
+- static void time_diff(struct timeval *then, struct timeval *now);
+-
+ static struct timeval prev_timeval;
+
+ # ifdef WIN3264
+--- 3474,3479 ----
+*** ../vim-8.1.0442/src/mbyte.c 2018-09-13 15:33:39.605712221 +0200
+--- src/mbyte.c 2018-09-30 21:12:44.184079214 +0200
+***************
+*** 138,144 ****
+
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+
+- static int enc_canon_search(char_u *name);
+ static int dbcs_char2len(int c);
+ static int dbcs_char2bytes(int c, char_u *buf);
+ static int dbcs_ptr2len(char_u *p);
+--- 138,143 ----
+***************
+*** 147,153 ****
+ static int dbcs_char2cells(int c);
+ static int dbcs_ptr2cells_len(char_u *p, int size);
+ static int dbcs_ptr2char(char_u *p);
+- static int utf_safe_read_char_adv(char_u **s, size_t *n);
+
+ /*
+ * Lookup table to quickly get the length in bytes of a UTF-8 character from
+--- 146,151 ----
+***************
+*** 3133,3141 ****
+ {0x1e900,0x1e921,1,34}
+ };
+
+- static int utf_convert(int a, convertStruct table[], int tableSize);
+- static int utf_strnicmp(char_u *s1, char_u *s2, size_t n1, size_t n2);
+-
+ /*
+ * Generic conversion function for case operations.
+ * Return the converted equivalent of "a", which is a UCS-4 character. Use
+--- 3131,3136 ----
+***************
+*** 4542,4549 ****
+
+ # if defined(USE_ICONV) || defined(PROTO)
+
+- static char_u *iconv_string(vimconv_T *vcp, char_u *str, int slen, int *unconvlenp, int *resultlenp);
+-
+ /*
+ * Call iconv_open() with a check if iconv() works properly (there are broken
+ * versions).
+--- 4537,4542 ----
+***************
+*** 6053,6060 ****
+
+
+ # ifdef USE_X11R6_XIM
+- static void xim_destroy_cb(XIM im, XPointer client_data, XPointer call_data);
+-
+ static void
+ xim_instantiate_cb(
+ Display *display,
+--- 6046,6051 ----
+*** ../vim-8.1.0442/src/memline.c 2018-08-23 23:01:22.898019607 +0200
+--- src/memline.c 2018-09-30 21:13:19.415862753 +0200
+***************
+*** 235,244 ****
+ } upd_block0_T;
+
+ #ifdef FEAT_CRYPT
+- static void ml_set_mfp_crypt(buf_T *buf);
+ static void ml_set_b0_crypt(buf_T *buf, ZERO_BL *b0p);
+ #endif
+- static int ml_check_b0_id(ZERO_BL *b0p);
+ static void ml_upd_block0(buf_T *buf, upd_block0_T what);
+ static void set_b0_fname(ZERO_BL *, buf_T *buf);
+ static void set_b0_dir_flag(ZERO_BL *b0p, buf_T *buf);
+--- 235,242 ----
+***************
+*** 4070,4077 ****
+ return retval;
+ }
+
+- static void attention_message(buf_T *buf, char_u *fname);
+-
+ /*
+ * Print the ATTENTION message: info about an existing swap file.
+ */
+--- 4068,4073 ----
+*** ../vim-8.1.0442/src/message.c 2018-07-01 16:43:59.850736541 +0200
+--- src/message.c 2018-09-30 21:14:50.747292645 +0200
+***************
+*** 16,30 ****
+
+ #include "vim.h"
+
+- static int other_sourcing_name(void);
+- static char_u *get_emsg_source(void);
+- static char_u *get_emsg_lnum(void);
+ static void add_msg_hist(char_u *s, int len, int attr);
+ static void hit_return_msg(void);
+ static void msg_home_replace_attr(char_u *fname, int attr);
+- #ifdef FEAT_MBYTE
+- static char_u *screen_puts_mbyte(char_u *s, int l, int attr);
+- #endif
+ static void msg_puts_attr_len(char_u *str, int maxlen, int attr);
+ static void msg_puts_display(char_u *str, int maxlen, int attr, int recurse);
+ static void msg_scroll_up(void);
+--- 16,24 ----
+***************
+*** 2407,2413 ****
+ static msgchunk_T *last_msgchunk = NULL; /* last displayed text */
+
+ static msgchunk_T *msg_sb_start(msgchunk_T *mps);
+- static msgchunk_T *disp_sb_line(int row, msgchunk_T *smp);
+
+ typedef enum {
+ SB_CLEAR_NONE = 0,
+--- 2401,2406 ----
+***************
+*** 3686,3693 ****
+ return retval;
+ }
+
+- static int copy_char(char_u *from, char_u *to, int lowercase);
+-
+ /*
+ * Copy one character from "*from" to "*to", taking care of multi-byte
+ * characters. Return the length of the character in bytes.
+--- 3679,3684 ----
+***************
+*** 4131,4142 ****
+ #if defined(FEAT_EVAL)
+ static char *e_printf = N_("E766: Insufficient arguments for printf()");
+
+- static varnumber_T tv_nr(typval_T *tvs, int *idxp);
+- static char *tv_str(typval_T *tvs, int *idxp, char_u **tofree);
+- # ifdef FEAT_FLOAT
+- static double tv_float(typval_T *tvs, int *idxp);
+- # endif
+-
+ /*
+ * Get number argument from "idxp" entry in "tvs". First entry is 1.
+ */
+--- 4122,4127 ----
+*** ../vim-8.1.0442/src/misc1.c 2018-09-16 14:10:28.300323360 +0200
+--- src/misc1.c 2018-09-30 21:18:08.322023222 +0200
+***************
+*** 20,29 ****
+
+ static char_u *vim_version_dir(char_u *vimdir);
+ static char_u *remove_tail(char_u *p, char_u *pend, char_u *name);
+- #if defined(FEAT_CMDL_COMPL)
+- static void init_users(void);
+- #endif
+- static int copy_indent(int size, char_u *src);
+
+ /* All user names (for ~user completion as done by shell). */
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+--- 20,25 ----
+***************
+*** 705,712 ****
+
+ #if defined(FEAT_CINDENT) || defined(FEAT_SMARTINDENT)
+
+- static int cin_is_cinword(char_u *line);
+-
+ /*
+ * Return TRUE if the string "line" starts with a word from 'cinwords'.
+ */
+--- 701,706 ----
+***************
+*** 5103,5110 ****
+ }
+
+ #if defined(FEAT_SEARCHPATH)
+- static char_u *gettail_dir(char_u *fname);
+-
+ /*
+ * Return the end of the directory name, on the first path
+ * separator:
+--- 5097,5102 ----
+***************
+*** 5455,5462 ****
+ #if defined(FEAT_CINDENT) || defined(FEAT_SYN_HL)
+
+ static char_u *skip_string(char_u *p);
+- static pos_T *ind_find_start_comment(void);
+- static pos_T *ind_find_start_CORS(linenr_T *is_raw);
+ static pos_T *find_start_rawstring(int ind_maxcomment);
+
+ /*
+--- 5447,5452 ----
+***************
+*** 5680,5721 ****
+ * Below "XXX" means that this function may unlock the current line.
+ */
+
+- static char_u *cin_skipcomment(char_u *);
+- static int cin_nocode(char_u *);
+- static pos_T *find_line_comment(void);
+- static int cin_has_js_key(char_u *text);
+- static int cin_islabel_skip(char_u **);
+ static int cin_isdefault(char_u *);
+- static char_u *after_label(char_u *l);
+- static int get_indent_nolabel(linenr_T lnum);
+- static int skip_label(linenr_T, char_u **pp);
+- static int cin_first_id_amount(void);
+- static int cin_get_equal_amount(linenr_T lnum);
+ static int cin_ispreproc(char_u *);
+ static int cin_iscomment(char_u *);
+ static int cin_islinecomment(char_u *);
+ static int cin_isterminated(char_u *, int, int);
+- static int cin_isinit(void);
+- static int cin_isfuncdecl(char_u **, linenr_T, linenr_T);
+- static int cin_isif(char_u *);
+ static int cin_iselse(char_u *);
+- static int cin_isdo(char_u *);
+- static int cin_iswhileofdo(char_u *, linenr_T);
+- static int cin_is_if_for_while_before_offset(char_u *line, int *poffset);
+- static int cin_iswhileofdo_end(int terminated);
+- static int cin_isbreak(char_u *);
+- static int cin_is_cpp_baseclass(cpp_baseclass_cache_T *cached);
+- static int get_baseclass_amount(int col);
+ static int cin_ends_in(char_u *, char_u *, char_u *);
+ static int cin_starts_with(char_u *s, char *word);
+- static int cin_skip2pos(pos_T *trypos);
+- static pos_T *find_start_brace(void);
+ static pos_T *find_match_paren(int);
+ static pos_T *find_match_char(int c, int ind_maxparen);
+- static int corr_ind_maxparen(pos_T *startpos);
+ static int find_last_paren(char_u *l, int start, int end);
+ static int find_match(int lookfor, linenr_T ourscope);
+- static int cin_is_cpp_namespace(char_u *);
+
+ /*
+ * Skip over white space and C comments within the line.
+--- 5670,5687 ----
+***************
+*** 7028,7034 ****
+ }
+
+ static pos_T *
+! find_match_char (int c, int ind_maxparen) /* XXX */
+ {
+ pos_T cursor_save;
+ pos_T *trypos;
+--- 6994,7000 ----
+ }
+
+ static pos_T *
+! find_match_char(int c, int ind_maxparen) /* XXX */
+ {
+ pos_T cursor_save;
+ pos_T *trypos;
+***************
+*** 9570,9577 ****
+
+ #if defined(FEAT_LISP) || defined(PROTO)
+
+- static int lisp_match(char_u *p);
+-
+ static int
+ lisp_match(char_u *p)
+ {
+--- 9536,9541 ----
+***************
+*** 10391,10398 ****
+ * Unix style wildcard expansion code.
+ * It's here because it's used both for Unix and Mac.
+ */
+- static int pstrcmp(const void *, const void *);
+-
+ static int
+ pstrcmp(const void *a, const void *b)
+ {
+--- 10355,10360 ----
+***************
+*** 10624,10636 ****
+ #endif
+
+ #if defined(FEAT_SEARCHPATH)
+- static int find_previous_pathsep(char_u *path, char_u **psep);
+- static int is_unique(char_u *maybe_unique, garray_T *gap, int i);
+- static void expand_path_option(char_u *curdir, garray_T *gap);
+- static char_u *get_path_cutoff(char_u *fname, garray_T *gap);
+- static void uniquefy_paths(garray_T *gap, char_u *pattern);
+- static int expand_in_path(garray_T *gap, char_u *pattern, int flags);
+-
+ /*
+ * Moves "*psep" back to the previous path separator in "path".
+ * Returns FAIL is "*psep" ends up at the beginning of "path".
+--- 10586,10591 ----
+***************
+*** 11055,11062 ****
+ }
+ #endif
+
+- static int has_env_var(char_u *p);
+-
+ /*
+ * Return TRUE if "p" contains what looks like an environment variable.
+ * Allowing for escaping.
+--- 11010,11015 ----
+***************
+*** 11081,11088 ****
+ }
+
+ #ifdef SPECIAL_WILDCHAR
+- static int has_special_wildchar(char_u *p);
+-
+ /*
+ * Return TRUE if "p" contains a special wildcard character, one that Vim
+ * cannot expand, requires using a shell.
+--- 11034,11039 ----
+*** ../vim-8.1.0442/src/misc2.c 2018-09-01 15:29:58.754429402 +0200
+--- src/misc2.c 2018-09-30 21:18:43.737791457 +0200
+***************
+*** 744,754 ****
+ static long_u num_alloc;
+ static long_u num_freed;
+
+- static void mem_pre_alloc_s(size_t *sizep);
+- static void mem_pre_alloc_l(long_u *sizep);
+- static void mem_post_alloc(void **pp, size_t size);
+- static void mem_pre_free(void **pp);
+-
+ static void
+ mem_pre_alloc_s(size_t *sizep)
+ {
+--- 744,749 ----
+***************
+*** 840,847 ****
+ #endif /* MEM_PROFILE */
+
+ #ifdef FEAT_EVAL
+- static int alloc_does_fail(long_u size);
+-
+ static int
+ alloc_does_fail(long_u size)
+ {
+--- 835,840 ----
+***************
+*** 4035,4043 ****
+ static void vim_findfile_free_visited_list(ff_visited_list_hdr_T **list_headp);
+ static void ff_free_visited_list(ff_visited_T *vl);
+ static ff_visited_list_hdr_T* ff_get_visited_list(char_u *, ff_visited_list_hdr_T **list_headp);
+- #ifdef FEAT_PATH_EXTRA
+- static int ff_wc_equal(char_u *s1, char_u *s2);
+- #endif
+
+ static void ff_push(ff_search_ctx_T *search_ctx, ff_stack_T *stack_ptr);
+ static ff_stack_T *ff_pop(ff_search_ctx_T *search_ctx);
+--- 4028,4033 ----
+*** ../vim-8.1.0442/src/move.c 2018-09-25 22:17:51.111962197 +0200
+--- src/move.c 2018-09-30 21:19:14.405589893 +0200
+***************
+*** 19,30 ****
+
+ #include "vim.h"
+
+- static void comp_botline(win_T *wp);
+ static void redraw_for_cursorline(win_T *wp);
+ static int scrolljump_value(void);
+ static int check_top_offset(void);
+ static void curs_rows(win_T *wp);
+- static void validate_cheight(void);
+
+ typedef struct
+ {
+--- 19,28 ----
+***************
+*** 37,47 ****
+
+ static void topline_back(lineoff_T *lp);
+ static void botline_forw(lineoff_T *lp);
+- #ifdef FEAT_DIFF
+- static void botline_topline(lineoff_T *lp);
+- static void topline_botline(lineoff_T *lp);
+- static void max_topfill(void);
+- #endif
+
+ /*
+ * Compute wp->w_botline for the current wp->w_topline. Can be called after
+--- 35,40 ----
+*** ../vim-8.1.0442/src/netbeans.c 2018-09-13 15:33:39.605712221 +0200
+--- src/netbeans.c 2018-09-30 21:19:43.449398298 +0200
+***************
+*** 49,58 ****
+ static pos_T *get_off_or_lnum(buf_T *buf, char_u **argp);
+ static long get_buf_size(buf_T *);
+ static int netbeans_keystring(char_u *keystr);
+- static void postpone_keycommand(char_u *keystr);
+ static void special_keys(char_u *args);
+
+- static int netbeans_connect(char *, int);
+ static int getConnInfo(char *file, char **host, char **port, char **password);
+
+ static void nb_init_graphics(void);
+--- 49,56 ----
+*** ../vim-8.1.0442/src/normal.c 2018-08-01 19:05:59.286223185 +0200
+--- src/normal.c 2018-09-30 21:20:26.917110378 +0200
+***************
+*** 32,38 ****
+ _RTLENTRYF
+ #endif
+ nv_compare(const void *s1, const void *s2);
+- static int find_command(int cmdchar);
+ static void op_colon(oparg_T *oap);
+ static void op_function(oparg_T *oap);
+ #if defined(FEAT_MOUSE)
+--- 32,37 ----
+***************
+*** 40,49 ****
+ static void find_end_of_word(pos_T *);
+ static int get_mouse_class(char_u *p);
+ #endif
+- static void prep_redo_cmd(cmdarg_T *cap);
+ static void prep_redo(int regname, long, int, int, int, int, int);
+- static int checkclearop(oparg_T *oap);
+- static int checkclearopq(oparg_T *oap);
+ static void clearop(oparg_T *oap);
+ static void clearopbeep(oparg_T *oap);
+ static void unshift_special(cmdarg_T *cap);
+--- 39,45 ----
+***************
+*** 63,70 ****
+ static void nv_help(cmdarg_T *cap);
+ static void nv_addsub(cmdarg_T *cap);
+ static void nv_page(cmdarg_T *cap);
+- static void nv_gd(oparg_T *oap, int nchar, int thisblock);
+- static int nv_screengo(oparg_T *oap, int dir, long dist);
+ #ifdef FEAT_MOUSE
+ static void nv_mousescroll(cmdarg_T *cap);
+ static void nv_mouse(cmdarg_T *cap);
+--- 59,64 ----
+***************
+*** 94,102 ****
+ static void nv_left(cmdarg_T *cap);
+ static void nv_up(cmdarg_T *cap);
+ static void nv_down(cmdarg_T *cap);
+- #ifdef FEAT_SEARCHPATH
+- static void nv_gotofile(cmdarg_T *cap);
+- #endif
+ static void nv_end(cmdarg_T *cap);
+ static void nv_dollar(cmdarg_T *cap);
+ static void nv_search(cmdarg_T *cap);
+--- 88,93 ----
+***************
+*** 111,120 ****
+ static void nv_undo(cmdarg_T *cap);
+ static void nv_kundo(cmdarg_T *cap);
+ static void nv_Replace(cmdarg_T *cap);
+- static void nv_vreplace(cmdarg_T *cap);
+- static void v_swap_corners(int cmdchar);
+ static void nv_replace(cmdarg_T *cap);
+- static void n_swapchar(cmdarg_T *cap);
+ static void nv_cursormark(cmdarg_T *cap, int flag, pos_T *pos);
+ static void v_visop(cmdarg_T *cap);
+ static void nv_subst(cmdarg_T *cap);
+--- 102,108 ----
+***************
+*** 128,134 ****
+ static void nv_window(cmdarg_T *cap);
+ static void nv_suspend(cmdarg_T *cap);
+ static void nv_g_cmd(cmdarg_T *cap);
+- static void n_opencmd(cmdarg_T *cap);
+ static void nv_dot(cmdarg_T *cap);
+ static void nv_redo(cmdarg_T *cap);
+ static void nv_Undo(cmdarg_T *cap);
+--- 116,121 ----
+*** ../vim-8.1.0442/src/ops.c 2018-08-21 15:12:10.843801621 +0200
+--- src/ops.c 2018-09-30 21:21:10.520820228 +0200
+***************
+*** 95,101 ****
+
+ #ifdef FEAT_VISUALEXTRA
+ static void shift_block(oparg_T *oap, int amount);
+- static void block_insert(oparg_T *oap, char_u *s, int b_insert, struct block_def*bdp);
+ #endif
+ static int stuff_yank(int, char_u *);
+ static void put_reedit_in_typebuf(int silent);
+--- 95,100 ----
+***************
+*** 105,111 ****
+ #ifdef FEAT_MBYTE
+ static void mb_adjust_opend(oparg_T *oap);
+ #endif
+- static void free_yank(long);
+ static void free_yank_all(void);
+ static int yank_copy_line(struct block_def *bd, long y_idx);
+ #ifdef FEAT_CLIPBOARD
+--- 104,109 ----
+***************
+*** 120,126 ****
+ #endif
+ static int ends_in_white(linenr_T lnum);
+ #ifdef FEAT_COMMENTS
+- static int same_leader(linenr_T lnum, int, char_u *, int, char_u *);
+ static int fmt_check_par(linenr_T, int *, char_u **, int do_comments);
+ #else
+ static int fmt_check_par(linenr_T);
+--- 118,123 ----
+***************
+*** 6829,6836 ****
+ return MAUTO;
+ }
+
+- static char_u *getreg_wrap_one_line(char_u *s, int flags);
+-
+ /*
+ * When "flags" has GREG_LIST return a list with text "s".
+ * Otherwise just return "s".
+--- 6826,6831 ----
+***************
+*** 7302,7309 ****
+ vim_memset(oap, 0, sizeof(oparg_T));
+ }
+
+- static varnumber_T line_count_info(char_u *line, varnumber_T *wc, varnumber_T *cc, varnumber_T limit, int eol_size);
+-
+ /*
+ * Count the number of bytes, characters and "words" in a line.
+ *
+--- 7297,7302 ----
+*** ../vim-8.1.0442/src/option.c 2018-09-25 22:17:51.111962197 +0200
+--- src/option.c 2018-09-30 21:22:02.368473644 +0200
+***************
+*** 3281,3295 ****
+ static char *(p_scl_values[]) = {"yes", "no", "auto", NULL};
+ #endif
+
+- static void set_option_default(int, int opt_flags, int compatible);
+ static void set_options_default(int opt_flags);
+ static void set_string_default_esc(char *name, char_u *val, int escape);
+ static char_u *term_bg_default(void);
+ static void did_set_option(int opt_idx, int opt_flags, int new_value);
+- static char_u *illegal_char(char_u *, int);
+- #ifdef FEAT_CMDWIN
+- static char_u *check_cedit(void);
+- #endif
+ static char_u *option_expand(int opt_idx, char_u *val);
+ static void didset_options(void);
+ static void didset_options2(void);
+--- 3281,3290 ----
+***************
+*** 3300,3311 ****
+ # define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags)
+ #endif
+ static void set_string_option_global(int opt_idx, char_u **varp);
+- static char_u *set_string_option(int opt_idx, char_u *value, int opt_flags);
+ static char_u *did_set_string_option(int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags);
+ static char_u *set_chars_option(char_u **varp);
+- #ifdef FEAT_SYN_HL
+- static int int_cmp(const void *a, const void *b);
+- #endif
+ #ifdef FEAT_CLIPBOARD
+ static char_u *check_clipboard_option(void);
+ #endif
+--- 3295,3302 ----
+***************
+*** 4279,4286 ****
+ #endif
+
+ #ifdef FEAT_GUI
+- static char_u *gui_bg_default(void);
+-
+ static char_u *
+ gui_bg_default(void)
+ {
+--- 4270,4275 ----
+***************
+*** 5875,5882 ****
+ #endif
+
+ #ifdef FEAT_TITLE
+- static void redraw_titles(void);
+-
+ /*
+ * Redraw the window title and/or tab page text later.
+ */
+--- 5864,5869 ----
+***************
+*** 12027,12033 ****
+ } langmap_entry_T;
+
+ static garray_T langmap_mapga;
+- static void langmap_set_entry(int from, int to);
+
+ /*
+ * Search for an entry in "langmap_mapga" for "from". If found set the "to"
+--- 12014,12019 ----
+*** ../vim-8.1.0442/src/os_unix.c 2018-09-22 14:08:41.926157823 +0200
+--- src/os_unix.c 2018-09-30 21:25:32.319055740 +0200
+***************
+*** 128,144 ****
+ Window x11_window = 0;
+ # endif
+ Display *x11_display = NULL;
+-
+- # ifdef FEAT_TITLE
+- static int get_x11_windis(void);
+- static void set_x11_title(char_u *);
+- static void set_x11_icon(char_u *);
+- # endif
+ #endif
+
+ #ifdef FEAT_TITLE
+ static int get_x11_title(int);
+- static int get_x11_icon(int);
+
+ static char_u *oldtitle = NULL;
+ static volatile sig_atomic_t oldtitle_outdated = FALSE;
+--- 128,137 ----
+***************
+*** 154,161 ****
+ #else
+ typedef int waitstatus;
+ #endif
+- static pid_t wait4pid(pid_t, waitstatus *);
+-
+ static int WaitForChar(long msec, int *interrupted, int ignore_input);
+ static int WaitForCharOrMouse(long msec, int *interrupted, int ignore_input);
+ #if defined(__BEOS__) || defined(VMS)
+--- 147,152 ----
+***************
+*** 789,795 ****
+ * Return a pointer to an item on the stack. Used to find out if the stack
+ * grows up or down.
+ */
+- static void check_stack_growth(char *p);
+ static int stack_grows_downwards;
+
+ /*
+--- 780,785 ----
+***************
+*** 907,913 ****
+ static struct sigstack sigstk; /* for sigstack() */
+ # endif
+
+- static void init_signal_stack(void);
+ static char *signal_stack;
+
+ static void
+--- 897,902 ----
+***************
+*** 1273,1284 ****
+ }
+ #endif
+
+! # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+! static void loose_clipboard(void);
+ # ifdef USE_SYSTEM
+- static void save_clipboard(void);
+- static void restore_clipboard(void);
+-
+ static void *clip_star_save = NULL;
+ static void *clip_plus_save = NULL;
+ # endif
+--- 1262,1269 ----
+ }
+ #endif
+
+! #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+ # ifdef USE_SYSTEM
+ static void *clip_star_save = NULL;
+ static void *clip_plus_save = NULL;
+ # endif
+***************
+*** 1644,1653 ****
+ /*
+ * A few functions shared by X11 title and clipboard code.
+ */
+- static int x_error_handler(Display *dpy, XErrorEvent *error_event);
+- static int x_error_check(Display *dpy, XErrorEvent *error_event);
+- static int x_connect_to_server(void);
+- static int test_x11_window(Display *dpy);
+
+ static int got_x_error = FALSE;
+
+--- 1629,1634 ----
+***************
+*** 1683,1690 ****
+ /*
+ * An X IO Error handler, used to catch error while opening the display.
+ */
+- static int x_IOerror_check(Display *dpy);
+-
+ static int
+ x_IOerror_check(Display *dpy UNUSED)
+ {
+--- 1664,1669 ----
+***************
+*** 1699,1706 ****
+ /*
+ * An X IO Error handler, used to catch terminal errors.
+ */
+- static int x_IOerror_handler(Display *dpy);
+- static void may_restore_clipboard(void);
+ static int xterm_dpy_was_reset = FALSE;
+
+ static int
+--- 1678,1683 ----
+***************
+*** 2510,2517 ****
+ }
+
+ #if !defined(HAVE_STRERROR) && defined(USE_GETCWD)
+- static char *strerror(int);
+-
+ static char *
+ strerror(int err)
+ {
+--- 2487,2492 ----
+***************
+*** 3136,3143 ****
+ return (S_ISDIR(statb.st_mode) ? TRUE : FALSE);
+ }
+
+- static int executable_file(char_u *name);
+-
+ /*
+ * Return 1 if "name" is an executable file, 0 if not or it doesn't exist.
+ */
+--- 3111,3116 ----
+***************
+*** 3340,3347 ****
+ }
+ #endif
+
+- static void exit_scroll(void);
+-
+ /*
+ * Output a newline when exiting.
+ * Make sure the newline goes to the same stream as the text.
+--- 3313,3318 ----
+***************
+*** 7818,7833 ****
+ /*
+ * Code for X Session Management Protocol.
+ */
+- static void xsmp_handle_save_yourself(SmcConn smc_conn, SmPointer client_data, int save_type, Bool shutdown, int interact_style, Bool fast);
+- static void xsmp_die(SmcConn smc_conn, SmPointer client_data);
+- static void xsmp_save_complete(SmcConn smc_conn, SmPointer client_data);
+- static void xsmp_shutdown_cancelled(SmcConn smc_conn, SmPointer client_data);
+- static void xsmp_ice_connection(IceConn iceConn, IcePointer clientData, Bool opening, IcePointer *watchData);
+-
+
+ # if defined(FEAT_GUI) && defined(USE_XSMP_INTERACT)
+- static void xsmp_handle_interaction(SmcConn smc_conn, SmPointer client_data);
+-
+ /*
+ * This is our chance to ask the user if they want to save,
+ * or abort the logout
+--- 7789,7796 ----
+*** ../vim-8.1.0442/src/os_win32.c 2018-09-13 15:33:39.609712174 +0200
+--- src/os_win32.c 2018-09-30 21:27:20.702316630 +0200
+***************
+*** 168,195 ****
+ static int g_fCtrlCPressed = FALSE; /* set when ctrl-C or ctrl-break detected */
+ static int g_fForceExit = FALSE; /* set when forcefully exiting */
+
+- static void termcap_mode_start(void);
+- static void termcap_mode_end(void);
+- static void clear_chars(COORD coord, DWORD n);
+- static void clear_screen(void);
+- static void clear_to_end_of_display(void);
+- static void clear_to_end_of_line(void);
+ static void scroll(unsigned cLines);
+ static void set_scroll_region(unsigned left, unsigned top,
+ unsigned right, unsigned bottom);
+- static void insert_lines(unsigned cLines);
+ static void delete_lines(unsigned cLines);
+ static void gotoxy(unsigned x, unsigned y);
+- static void normvideo(void);
+- static void textattr(WORD wAttr);
+- static void textcolor(WORD wAttr);
+- static void textbackground(WORD wAttr);
+ static void standout(void);
+- static void standend(void);
+- static void visual_bell(void);
+- static void cursor_visible(BOOL fVisible);
+- static DWORD write_chars(char_u *pchBuf, DWORD cbToWrite);
+- static void create_conin(void);
+ static int s_cursor_visible = TRUE;
+ static int did_create_conin = FALSE;
+ #else
+--- 168,179 ----
+***************
+*** 3487,3494 ****
+ *
+ * return -1 for failure, 0 otherwise
+ */
+! static
+! int
+ win32_setattrs(char_u *name, int attrs)
+ {
+ int res;
+--- 3471,3477 ----
+ *
+ * return -1 for failure, 0 otherwise
+ */
+! static int
+ win32_setattrs(char_u *name, int attrs)
+ {
+ int res;
+***************
+*** 3513,3520 ****
+ /*
+ * Set archive flag for "name".
+ */
+! static
+! int
+ win32_set_archive(char_u *name)
+ {
+ int attrs = win32_getattrs(name);
+--- 3496,3502 ----
+ /*
+ * Set archive flag for "name".
+ */
+! static int
+ win32_set_archive(char_u *name)
+ {
+ int attrs = win32_getattrs(name);
+*** ../vim-8.1.0442/src/pty.c 2018-02-04 14:39:45.000000000 +0100
+--- src/pty.c 2018-09-30 21:27:44.854151402 +0200
+***************
+*** 126,133 ****
+ # undef HAVE_SVR4_PTYS
+ #endif
+
+- static void initmaster(int);
+-
+ /*
+ * Open all ptys with O_NOCTTY, just to be on the safe side.
+ */
+--- 126,131 ----
+*** ../vim-8.1.0442/src/regexp.c 2018-07-18 06:02:04.084736178 +0200
+--- src/regexp.c 2018-09-30 21:28:48.185717335 +0200
+***************
+*** 3466,3472 ****
+ save_se_T save_end[NSUBEXP];
+ } regbehind_T;
+
+- static char_u *reg_getline(linenr_T lnum);
+ static long bt_regexec_both(char_u *line, colnr_T col, proftime_T *tm, int *timed_out);
+ static long regtry(bt_regprog_T *prog, colnr_T col, proftime_T *tm, int *timed_out);
+ static void cleanup_subexpr(void);
+--- 3466,3471 ----
+***************
+*** 4009,4016 ****
+ }
+
+ #ifdef FEAT_SYN_HL
+- static reg_extmatch_T *make_extmatch(void);
+-
+ /*
+ * Create a new extmatch and mark it as referenced once.
+ */
+--- 4008,4013 ----
+***************
+*** 4137,4144 ****
+ }
+
+ #ifdef FEAT_MBYTE
+- static int reg_prev_class(void);
+-
+ /*
+ * Get class of previous character.
+ */
+--- 4134,4139 ----
+***************
+*** 4152,4159 ****
+ }
+ #endif
+
+- static int reg_match_visual(void);
+-
+ /*
+ * Return TRUE if the current rex.input position matches the Visual area.
+ */
+--- 4147,4152 ----
+***************
+*** 7010,7017 ****
+ }
+
+ #ifdef FEAT_MBYTE
+- static void mb_decompose(int c, int *c1, int *c2, int *c3);
+-
+ typedef struct
+ {
+ int a, b, c;
+--- 7003,7008 ----
+***************
+*** 7215,7225 ****
+ */
+ typedef void (*(*fptr_T)(int *, int))();
+
+- static fptr_T do_upper(int *, int);
+- static fptr_T do_Upper(int *, int);
+- static fptr_T do_lower(int *, int);
+- static fptr_T do_Lower(int *, int);
+-
+ static int vim_regsub_both(char_u *source, typval_T *expr, char_u *dest, int copy, int magic, int backslash);
+
+ static fptr_T
+--- 7206,7211 ----
+***************
+*** 7883,7890 ****
+ }
+
+ #ifdef FEAT_EVAL
+- static char_u *reg_getline_submatch(linenr_T lnum);
+-
+ /*
+ * Call reg_getline() with the line numbers from the submatch. If a
+ * substitute() was used the reg_maxline and other values have been
+--- 7869,7874 ----
+***************
+*** 8212,8219 ****
+ }
+
+ #ifdef FEAT_EVAL
+- static void report_re_switch(char_u *pat);
+-
+ static void
+ report_re_switch(char_u *pat)
+ {
+--- 8196,8201 ----
+*** ../vim-8.1.0442/src/screen.c 2018-09-13 14:57:37.915261048 +0200
+--- src/screen.c 2018-09-30 21:29:41.773349225 +0200
+***************
+*** 107,115 ****
+ static match_T search_hl; /* used for 'hlsearch' highlight matching */
+ #endif
+
+- #if defined(FEAT_MENU) || defined(FEAT_FOLDING)
+- static int text_to_screenline(win_T *wp, char_u *text, int col);
+- #endif
+ #ifdef FEAT_FOLDING
+ static foldinfo_T win_foldinfo; /* info for 'foldcolumn' */
+ static int compute_foldcolumn(win_T *wp, int col);
+--- 107,112 ----
+***************
+*** 133,139 ****
+ static void copy_text_attr(int off, char_u *buf, int len, int attr);
+ #endif
+ static int win_line(win_T *, linenr_T, int, int, int nochange, int number_only);
+- static int char_needs_redraw(int off_from, int off_to, int cols);
+ static void draw_vsep_win(win_T *wp, int row);
+ #ifdef FEAT_STL_OPT
+ static void redraw_custom_statusline(win_T *wp);
+--- 130,135 ----
+***************
+*** 147,153 ****
+ static void next_search_hl(win_T *win, match_T *shl, linenr_T lnum, colnr_T mincol, matchitem_T *cur);
+ static int next_search_hl_pos(match_T *shl, linenr_T lnum, posmatch_T *pos, colnr_T mincol);
+ #endif
+- static void screen_start_highlight(int attr);
+ static void screen_char(unsigned off, int row, int col);
+ #ifdef FEAT_MBYTE
+ static void screen_char_2(unsigned off, int row, int col);
+--- 143,148 ----
+***************
+*** 155,162 ****
+ static void screenclear2(void);
+ static void lineclear(unsigned off, int width, int attr);
+ static void lineinvalid(unsigned off, int width);
+- static void linecopy(int to, int from, win_T *wp);
+- static void redraw_block(int row, int end, win_T *wp);
+ static int win_do_lines(win_T *wp, int row, int line_count, int mayclear, int del, int clear_attr);
+ static void win_rest_invalid(win_T *wp);
+ static void msg_pos_mode(void);
+--- 150,155 ----
+***************
+*** 2495,2502 ****
+ }
+
+ #ifdef FEAT_SYN_HL
+- static int advance_color_col(int vcol, int **color_cols);
+-
+ /*
+ * Advance **color_cols and return TRUE when there are columns to draw.
+ */
+--- 2488,2493 ----
+***************
+*** 6034,6041 ****
+ }
+
+ #ifdef FEAT_MBYTE
+- static int comp_char_differs(int, int);
+-
+ /*
+ * Return if the composing characters at "off_from" and "off_to" differ.
+ * Only to be used when ScreenLinesUC[off_from] != 0.
+--- 6025,6030 ----
+***************
+*** 6617,6623 ****
+ }
+
+ #ifdef FEAT_WILDMENU
+- static int status_match_len(expand_T *xp, char_u *s);
+ static int skip_status_match_char(expand_T *xp, char_u *s);
+
+ /*
+--- 6606,6611 ----
+***************
+*** 7414,7421 ****
+ }
+
+ #ifdef FEAT_MBYTE
+- static int screen_comp_differs(int, int*);
+-
+ /*
+ * Return TRUE if composing characters for screen posn "off" differs from
+ * composing characters in "u8cc".
+--- 7402,7407 ----
+*** ../vim-8.1.0442/src/search.c 2018-08-16 21:37:46.389318767 +0200
+--- src/search.c 2018-09-30 21:30:25.877045753 +0200
+***************
+*** 16,31 ****
+ static void set_vv_searchforward(void);
+ static int first_submatch(regmmatch_T *rp);
+ #endif
+- static int check_prevcol(char_u *linep, int col, int ch, int *prevcol);
+- static int inmacro(char_u *, char_u *);
+ static int check_linecomment(char_u *line);
+ static int cls(void);
+ static int skip_chars(int, int);
+- #ifdef FEAT_TEXTOBJ
+- static void back_in_line(void);
+- static void find_first_blank(pos_T *);
+- static void findsent_forward(long count, int at_start_sent);
+- #endif
+ #ifdef FEAT_FIND_ID
+ static void show_pat_in_path(char_u *, int,
+ int, int, FILE *, linenr_T *, long);
+--- 16,24 ----
+***************
+*** 1835,1842 ****
+ return (col >= 0 && linep[col] == ch) ? TRUE : FALSE;
+ }
+
+- static int find_rawstring_end(char_u *linep, pos_T *startpos, pos_T *endpos);
+-
+ /*
+ * Raw string start is found at linep[startpos.col - 1].
+ * Return TRUE if the matching end can be found between startpos and endpos.
+--- 1828,1833 ----
+***************
+*** 3866,3873 ****
+ return OK;
+ }
+
+- static int in_html_tag(int);
+-
+ /*
+ * Return TRUE if the cursor is on a "<aaa>" tag. Ignore "<aaa/>".
+ * When "end_tag" is TRUE return TRUE if the cursor is on "</aaa>".
+--- 3857,3862 ----
+***************
+*** 4326,4334 ****
+ return OK;
+ }
+
+- static int find_next_quote(char_u *top_ptr, int col, int quotechar, char_u *escape);
+- static int find_prev_quote(char_u *line, int col_start, int quotechar, char_u *escape);
+-
+ /*
+ * Search quote char from string line[col].
+ * Quote character escaped by one of the characters in "escape" is not counted
+--- 4315,4320 ----
+*** ../vim-8.1.0442/src/sha256.c 2017-01-24 20:06:49.000000000 +0100
+--- src/sha256.c 2018-09-30 21:30:54.716847080 +0200
+***************
+*** 24,31 ****
+
+ #if defined(FEAT_CRYPT) || defined(FEAT_PERSISTENT_UNDO)
+
+- static void sha256_process(context_sha256_T *ctx, char_u data[64]);
+-
+ #define GET_UINT32(n, b, i) \
+ { \
+ (n) = ( (UINT32_T)(b)[(i) ] << 24) \
+--- 24,29 ----
+***************
+*** 265,272 ****
+ #endif /* FEAT_CRYPT || FEAT_PERSISTENT_UNDO */
+
+ #if defined(FEAT_CRYPT) || defined(PROTO)
+- static unsigned int get_some_time(void);
+-
+ /*
+ * Returns hex digest of "buf[buf_len]" in a static array.
+ * if "salt" is not NULL also do "salt[salt_len]".
+--- 263,268 ----
+*** ../vim-8.1.0442/src/spell.c 2018-03-04 16:22:07.000000000 +0100
+--- src/spell.c 2018-09-30 21:31:37.576551512 +0200
+***************
+*** 251,257 ****
+ static int spell_iswordp(char_u *p, win_T *wp);
+ #ifdef FEAT_MBYTE
+ static int spell_mb_isword_class(int cl, win_T *wp);
+- static int spell_iswordp_w(int *p, win_T *wp);
+ #endif
+
+ /*
+--- 251,256 ----
+***************
+*** 337,358 ****
+ static void find_word(matchinf_T *mip, int mode);
+ static int match_checkcompoundpattern(char_u *ptr, int wlen, garray_T *gap);
+ static int can_compound(slang_T *slang, char_u *word, char_u *flags);
+- static int can_be_compound(trystate_T *sp, slang_T *slang, char_u *compflags, int flag);
+ static int match_compoundrule(slang_T *slang, char_u *compflags);
+ static int valid_word_prefix(int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req);
+ static void find_prefix(matchinf_T *mip, int mode);
+ static int fold_more(matchinf_T *mip);
+ static int spell_valid_case(int wordflags, int treeflags);
+- static int no_spell_checking(win_T *wp);
+- static void spell_load_lang(char_u *lang);
+- static void int_wordlist_spl(char_u *fname);
+ static void spell_load_cb(char_u *fname, void *cookie);
+- static int score_wordcount_adj(slang_T *slang, int score, char_u *word, int split);
+ static int count_syllables(slang_T *slang, char_u *word);
+ static void clear_midword(win_T *buf);
+ static void use_midword(slang_T *lp, win_T *buf);
+ static int find_region(char_u *rp, char_u *region);
+- static int badword_captype(char_u *word, char_u *end);
+ static int check_need_cap(linenr_T lnum, colnr_T col);
+ static void spell_find_suggest(char_u *badptr, int badlen, suginfo_T *su, int maxcount, int banbadword, int need_cap, int interactive);
+ #ifdef FEAT_EVAL
+--- 336,351 ----
+***************
+*** 361,367 ****
+ static void spell_suggest_file(suginfo_T *su, char_u *fname);
+ static void spell_suggest_intern(suginfo_T *su, int interactive);
+ static void spell_find_cleanup(suginfo_T *su);
+- static void allcap_copy(char_u *word, char_u *wcopy);
+ static void suggest_try_special(suginfo_T *su);
+ static void suggest_try_change(suginfo_T *su);
+ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, int soundfold);
+--- 354,359 ----
+*** ../vim-8.1.0442/src/spellfile.c 2018-06-19 14:23:50.298866932 +0200
+--- src/spellfile.c 2018-09-30 21:32:30.492186122 +0200
+***************
+*** 296,302 ****
+
+ static int set_spell_finish(spelltab_T *new_st);
+ static int write_spell_prefcond(FILE *fd, garray_T *gap);
+- static char_u *read_cnt_string(FILE *fd, int cnt_bytes, int *lenp);
+ static int read_region_section(FILE *fd, slang_T *slang, int len);
+ static int read_charflags_section(FILE *fd);
+ static int read_prefcond_section(FILE *fd, slang_T *lp);
+--- 296,301 ----
+***************
+*** 312,318 ****
+ #endif
+ static int spell_read_tree(FILE *fd, char_u **bytsp, idx_T **idxsp, int prefixtree, int prefixcnt);
+ static idx_T read_tree_node(FILE *fd, char_u *byts, idx_T *idxs, int maxidx, idx_T startidx, int prefixtree, int maxprefcondnr);
+- static void spell_reload_one(char_u *fname, int added_word);
+ static void set_spell_charflags(char_u *flags, int cnt, char_u *upp);
+ static int set_spell_chartab(char_u *fol, char_u *low, char_u *upp);
+ static void set_map_str(slang_T *lp, char_u *map);
+--- 311,316 ----
+***************
+*** 1985,1991 ****
+ int si_newcompID; /* current value for compound ID */
+ } spellinfo_T;
+
+- static afffile_T *spell_read_aff(spellinfo_T *spin, char_u *fname);
+ static int is_aff_rule(char_u **items, int itemcnt, char *rulename, int mincount);
+ static void aff_process_flags(afffile_T *affile, affentry_T *entry);
+ static int spell_info_item(char_u *s);
+--- 1983,1988 ----
+***************
+*** 1993,2027 ****
+ static unsigned get_affitem(int flagtype, char_u **pp);
+ static void process_compflags(spellinfo_T *spin, afffile_T *aff, char_u *compflags);
+ static void check_renumber(spellinfo_T *spin);
+- static int flag_in_afflist(int flagtype, char_u *afflist, unsigned flag);
+ static void aff_check_number(int spinval, int affval, char *name);
+ static void aff_check_string(char_u *spinval, char_u *affval, char *name);
+ static int str_equal(char_u *s1, char_u *s2);
+ static void add_fromto(spellinfo_T *spin, garray_T *gap, char_u *from, char_u *to);
+ static int sal_to_bool(char_u *s);
+- static void spell_free_aff(afffile_T *aff);
+- static int spell_read_dic(spellinfo_T *spin, char_u *fname, afffile_T *affile);
+ static int get_affix_flags(afffile_T *affile, char_u *afflist);
+ static int get_pfxlist(afffile_T *affile, char_u *afflist, char_u *store_afflist);
+ static void get_compflags(afffile_T *affile, char_u *afflist, char_u *store_afflist);
+ static int store_aff_word(spellinfo_T *spin, char_u *word, char_u *afflist, afffile_T *affile, hashtab_T *ht, hashtab_T *xht, int condit, int flags, char_u *pfxlist, int pfxlen);
+- static int spell_read_wordfile(spellinfo_T *spin, char_u *fname);
+ static void *getroom(spellinfo_T *spin, size_t len, int align);
+ static char_u *getroom_save(spellinfo_T *spin, char_u *s);
+- static void free_blocks(sblock_T *bl);
+- static wordnode_T *wordtree_alloc(spellinfo_T *spin);
+ static int store_word(spellinfo_T *spin, char_u *word, int flags, int region, char_u *pfxlist, int need_affix);
+ static int tree_add_word(spellinfo_T *spin, char_u *word, wordnode_T *tree, int flags, int region, int affixID);
+ static wordnode_T *get_wordnode(spellinfo_T *spin);
+- static int deref_wordnode(spellinfo_T *spin, wordnode_T *node);
+ static void free_wordnode(spellinfo_T *spin, wordnode_T *n);
+ static void wordtree_compress(spellinfo_T *spin, wordnode_T *root);
+ static int node_compress(spellinfo_T *spin, wordnode_T *node, hashtab_T *ht, int *tot);
+ static int node_equal(wordnode_T *n1, wordnode_T *n2);
+- static int write_vim_spell(spellinfo_T *spin, char_u *fname);
+ static void clear_node(wordnode_T *node);
+ static int put_node(FILE *fd, wordnode_T *node, int idx, int regionmask, int prefixtree);
+- static void spell_make_sugfile(spellinfo_T *spin, char_u *wfname);
+ static int sug_filltree(spellinfo_T *spin, slang_T *slang);
+ static int sug_maketable(spellinfo_T *spin);
+ static int sug_filltable(spellinfo_T *spin, wordnode_T *node, int startwordnr, garray_T *gap);
+--- 1990,2015 ----
+*** ../vim-8.1.0442/src/syntax.c 2018-09-28 22:26:47.786139328 +0200
+--- src/syntax.c 2018-09-30 21:35:08.551092059 +0200
+***************
+*** 91,97 ****
+ {HL_BOLD, HL_STANDOUT, HL_UNDERLINE, HL_UNDERCURL, HL_ITALIC, HL_INVERSE, HL_INVERSE, HL_NOCOMBINE, HL_STRIKETHROUGH, 0};
+ #define ATTR_COMBINE(attr_a, attr_b) ((((attr_b) & HL_NOCOMBINE) ? attr_b : (attr_a)) | (attr_b))
+
+- static int get_attr_entry(garray_T *table, attrentry_T *aep);
+ static void syn_unadd_group(void);
+ static void set_hl_attr(int idx);
+ static void highlight_list_one(int id);
+--- 91,96 ----
+***************
+*** 106,115 ****
+ #endif
+ #ifdef FEAT_GUI
+ static int set_group_colors(char_u *name, guicolor_T *fgp, guicolor_T *bgp, int do_menu, int use_norm, int do_tooltip);
+- static GuiFont font_name2handle(char_u *name);
+- # ifdef FEAT_XFONTSET
+- static GuiFontset fontset_name2handle(char_u *name, int fixed_width);
+- # endif
+ static void hl_do_font(int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font);
+ #endif
+
+--- 105,110 ----
+***************
+*** 386,393 ****
+ #define CUR_STATE(idx) ((stateitem_T *)(current_state.ga_data))[idx]
+
+ static void syn_sync(win_T *wp, linenr_T lnum, synstate_T *last_valid);
+- static void save_chartab(char_u *chartab);
+- static void restore_chartab(char_u *chartab);
+ static int syn_match_linecont(linenr_T lnum);
+ static void syn_start_line(void);
+ static void syn_update_ends(int startofline);
+--- 381,386 ----
+***************
+*** 415,425 ****
+ #ifdef FEAT_PROFILE
+ static void syn_clear_time(syn_time_T *tt);
+ static void syntime_clear(void);
+- #ifdef __BORLANDC__
+- static int _RTLENTRYF syn_compare_syntime(const void *v1, const void *v2);
+- #else
+- static int syn_compare_syntime(const void *v1, const void *v2);
+- #endif
+ static void syntime_report(void);
+ static int syn_time_on = FALSE;
+ # define IF_SYN_TIME(p) (p)
+--- 408,413 ----
+***************
+*** 430,437 ****
+
+ static void syn_stack_apply_changes_block(synblock_T *block, buf_T *buf);
+ static void find_endpos(int idx, lpos_T *startpos, lpos_T *m_endpos, lpos_T *hl_endpos, long *flagsp, lpos_T *end_endpos, int *end_idx, reg_extmatch_T *start_ext);
+- static void clear_syn_state(synstate_T *p);
+- static void clear_current_state(void);
+
+ static void limit_pos(lpos_T *pos, lpos_T *limit);
+ static void limit_pos_zero(lpos_T *pos, lpos_T *limit);
+--- 418,423 ----
+***************
+*** 440,464 ****
+ static char_u *syn_getcurline(void);
+ static int syn_regexec(regmmatch_T *rmp, linenr_T lnum, colnr_T col, syn_time_T *st);
+ static int check_keyword_id(char_u *line, int startcol, int *endcol, long *flags, short **next_list, stateitem_T *cur_si, int *ccharp);
+- static void syn_cmd_case(exarg_T *eap, int syncing);
+- static void syn_cmd_spell(exarg_T *eap, int syncing);
+- static void syntax_sync_clear(void);
+ static void syn_remove_pattern(synblock_T *block, int idx);
+ static void syn_clear_pattern(synblock_T *block, int i);
+ static void syn_clear_cluster(synblock_T *block, int i);
+- static void syn_cmd_clear(exarg_T *eap, int syncing);
+- static void syn_cmd_conceal(exarg_T *eap, int syncing);
+ static void syn_clear_one(int id, int syncing);
+- static void syn_cmd_on(exarg_T *eap, int syncing);
+- static void syn_cmd_enable(exarg_T *eap, int syncing);
+- static void syn_cmd_reset(exarg_T *eap, int syncing);
+- static void syn_cmd_manual(exarg_T *eap, int syncing);
+- static void syn_cmd_off(exarg_T *eap, int syncing);
+ static void syn_cmd_onoff(exarg_T *eap, char *name);
+- static void syn_cmd_list(exarg_T *eap, int syncing);
+ static void syn_lines_msg(void);
+ static void syn_match_msg(void);
+- static void syn_stack_free_block(synblock_T *block);
+ static void syn_list_one(int id, int syncing, int link_only);
+ static void syn_list_cluster(int id);
+ static void put_id_list(char_u *name, short *list, int attr);
+--- 426,438 ----
+***************
+*** 466,495 ****
+ static int syn_list_keywords(int id, hashtab_T *ht, int did_header, int attr);
+ static void syn_clear_keyword(int id, hashtab_T *ht);
+ static void clear_keywtab(hashtab_T *ht);
+- static void add_keyword(char_u *name, int id, int flags, short *cont_in_list, short *next_list, int conceal_char);
+- static char_u *get_group_name(char_u *arg, char_u **name_end);
+- static char_u *get_syn_options(char_u *arg, syn_opt_arg_T *opt, int *conceal_char, int skip);
+- static void syn_cmd_include(exarg_T *eap, int syncing);
+- static void syn_cmd_iskeyword(exarg_T *eap, int syncing);
+- static void syn_cmd_keyword(exarg_T *eap, int syncing);
+- static void syn_cmd_match(exarg_T *eap, int syncing);
+- static void syn_cmd_region(exarg_T *eap, int syncing);
+- #ifdef __BORLANDC__
+- static int _RTLENTRYF syn_compare_stub(const void *v1, const void *v2);
+- #else
+- static int syn_compare_stub(const void *v1, const void *v2);
+- #endif
+- static void syn_cmd_cluster(exarg_T *eap, int syncing);
+- static int syn_scl_name2id(char_u *name);
+ static int syn_scl_namen2id(char_u *linep, int len);
+ static int syn_check_cluster(char_u *pp, int len);
+ static int syn_add_cluster(char_u *name);
+ static void init_syn_patterns(void);
+ static char_u *get_syn_pattern(char_u *arg, synpat_T *ci);
+- static void syn_cmd_sync(exarg_T *eap, int syncing);
+ static int get_id_list(char_u **arg, int keylen, short **list, int skip);
+ static void syn_combine_list(short **clstr1, short **clstr2, int list_op);
+- static void syn_incl_toplevel(int id, int *flagsp);
+
+ #if defined(FEAT_RELTIME) || defined(PROTO)
+ /*
+--- 440,452 ----
+*** ../vim-8.1.0442/src/tag.c 2018-07-08 16:50:33.111216814 +0200
+--- src/tag.c 2018-09-30 21:35:32.702924583 +0200
+***************
+*** 1155,1162 ****
+ #endif
+
+ #ifdef FEAT_TAG_BINS
+- static int tag_strnicmp(char_u *s1, char_u *s2, size_t len);
+-
+ /*
+ * Compare two strings, for length "len", ignoring case the ASCII way.
+ * return 0 for match, < 0 for smaller, > 0 for bigger
+--- 1155,1160 ----
+***************
+*** 1194,1201 ****
+ regmatch_T regmatch; /* regexp program, may be NULL */
+ } pat_T;
+
+- static void prepare_pats(pat_T *pats, int has_re);
+-
+ /*
+ * Extract info from the tag search pattern "pats->pat".
+ */
+--- 1192,1197 ----
+***************
+*** 3878,3885 ****
+ #endif
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+- static int add_tag_field(dict_T *dict, char *field_name, char_u *start, char_u *end);
+-
+ /*
+ * Add a tag field to the dictionary "dict".
+ * Return OK or FAIL.
+--- 3874,3879 ----
+*** ../vim-8.1.0442/src/term.c 2018-09-21 12:24:08.618955563 +0200
+--- src/term.c 2018-09-30 21:39:43.881179267 +0200
+***************
+*** 74,80 ****
+ /* start of keys that are not directly used by Vim but can be mapped */
+ #define BT_EXTRA_KEYS 0x101
+
+- static struct builtin_term *find_builtin_term(char_u *name);
+ static void parse_builtin_tcap(char_u *s);
+ static void gather_termleader(void);
+ #ifdef FEAT_TERMRESPONSE
+--- 74,79 ----
+***************
+*** 91,99 ****
+ static void del_termcode_idx(int idx);
+ static int term_is_builtin(char_u *name);
+ static int term_7to8bit(char_u *p);
+- #ifdef FEAT_TERMRESPONSE
+- static void switch_to_8bit(void);
+- #endif
+
+ #ifdef HAVE_TGETENT
+ static char_u *tgetent_error(char_u *, char_u *);
+--- 90,95 ----
+***************
+*** 2429,2436 ****
+ * minimal tgoto() implementation.
+ * no padding and we only parse for %i %d and %+char
+ */
+- static char *tgoto(char *, int, int);
+-
+ static char *
+ tgoto(char *cm, int x, int y)
+ {
+--- 2425,2430 ----
+***************
+*** 3147,3154 ****
+ }
+ }
+
+- static int get_long_from_buf(char_u *buf, long_u *val);
+-
+ /*
+ * Interpret the next string of bytes in buf as a long integer, with the most
+ * significant byte first. Note that it is assumed that buf has been through
+--- 3141,3146 ----
+*** ../vim-8.1.0442/src/ui.c 2018-09-13 15:33:39.609712174 +0200
+--- src/ui.c 2018-09-30 21:36:42.842437833 +0200
+***************
+*** 715,721 ****
+ * Stuff for general mouse selection, without using Visual mode.
+ */
+
+- static int clip_compare_pos(int row1, int col1, int row2, int col2);
+ static void clip_invert_area(int, int, int, int, int how);
+ static void clip_invert_rectangle(int row, int col, int height, int width, int invert);
+ static void clip_get_word_boundaries(VimClipboard *, int, int);
+--- 715,720 ----
+***************
+*** 2069,2076 ****
+ static Boolean clip_x11_convert_selection_cb(Widget w, Atom *sel_atom, Atom *target, Atom *type, XtPointer *value, long_u *length, int *format);
+ static void clip_x11_lose_ownership_cb(Widget w, Atom *sel_atom);
+ static void clip_x11_notify_cb(Widget w, Atom *sel_atom, Atom *target);
+- static void clip_x11_timestamp_cb(Widget w, XtPointer n, XEvent *event, Boolean *cont);
+- static void clip_x11_request_selection_cb(Widget w, XtPointer success, Atom *sel_atom, Atom *type, XtPointer value, long_u *length, int *format);
+
+ /*
+ * Property callback to get a timestamp for XtOwnSelection.
+--- 2068,2073 ----
+*** ../vim-8.1.0442/src/undo.c 2018-08-21 17:07:40.155188638 +0200
+--- src/undo.c 2018-09-30 21:37:48.205983765 +0200
+***************
+*** 100,106 ****
+ } bufinfo_T;
+
+
+- static long get_undolevel(void);
+ static void u_unch_branch(u_header_T *uhp);
+ static u_entry_T *u_get_headentry(void);
+ static void u_getbot(void);
+--- 100,105 ----
+***************
+*** 113,136 ****
+ static void u_freeentries(buf_T *buf, u_header_T *uhp, u_header_T **uhpp);
+ static void u_freeentry(u_entry_T *, long);
+ #ifdef FEAT_PERSISTENT_UNDO
+- static void corruption_error(char *mesg, char_u *file_name);
+- static void u_free_uhp(u_header_T *uhp);
+- static int undo_write(bufinfo_T *bi, char_u *ptr, size_t len);
+ # ifdef FEAT_CRYPT
+ static int undo_flush(bufinfo_T *bi);
+ # endif
+- static int fwrite_crypt(bufinfo_T *bi, char_u *ptr, size_t len);
+- static int undo_write_bytes(bufinfo_T *bi, long_u nr, int len);
+- static void put_header_ptr(bufinfo_T *bi, u_header_T *uhp);
+- static int undo_read_4c(bufinfo_T *bi);
+- static int undo_read_2c(bufinfo_T *bi);
+- static int undo_read_byte(bufinfo_T *bi);
+- static time_t undo_read_time(bufinfo_T *bi);
+ static int undo_read(bufinfo_T *bi, char_u *buffer, size_t size);
+- static char_u *read_string_decrypt(bufinfo_T *bi, int len);
+- static int serialize_header(bufinfo_T *bi, char_u *hash);
+- static int serialize_uhp(bufinfo_T *bi, u_header_T *uhp);
+- static u_header_T *unserialize_uhp(bufinfo_T *bi, char_u *file_name);
+ static int serialize_uep(bufinfo_T *bi, u_entry_T *uep);
+ static u_entry_T *unserialize_uep(bufinfo_T *bi, int *error, char_u *file_name);
+ static void serialize_pos(bufinfo_T *bi, pos_T pos);
+--- 112,121 ----
+*** ../vim-8.1.0442/src/version.c 2018-09-30 18:22:22.568974801 +0200
+--- src/version.c 2018-09-30 21:40:06.745020131 +0200
+***************
+*** 79,86 ****
+ }
+ #endif
+
+- static void list_features(void);
+-
+ static char *(features[]) =
+ {
+ #ifdef HAVE_ACL
+--- 79,84 ----
+*** ../vim-8.1.0442/src/window.c 2018-09-25 22:08:10.933806882 +0200
+--- src/window.c 2018-09-30 21:38:45.485585533 +0200
+***************
+*** 20,27 ****
+ static void win_rotate(int, int);
+ static void win_totop(int size, int flags);
+ static void win_equal_rec(win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height);
+- static int last_window(void);
+- static int close_last_window_tabpage(win_T *win, int free_buf, tabpage_T *prev_curtab);
+ static win_T *win_free_mem(win_T *win, int *dirp, tabpage_T *tp);
+ static frame_T *win_altframe(win_T *win, tabpage_T *tp);
+ static tabpage_T *alt_tabpage(void);
+--- 20,25 ----
+***************
+*** 6246,6253 ****
+ }
+
+ # if defined(FEAT_FIND_ID) && defined(FEAT_EVAL)
+- static char_u *eval_includeexpr(char_u *ptr, int len);
+-
+ static char_u *
+ eval_includeexpr(char_u *ptr, int len)
+ {
+--- 6244,6249 ----
+*** ../vim-8.1.0442/src/workshop.c 2018-09-13 17:26:31.091401618 +0200
+--- src/workshop.c 2018-09-30 21:39:05.577445783 +0200
+***************
+*** 45,51 ****
+ static char *fixup(char *);
+ static char *get_selection(buf_T *);
+ static char *append_selection(int, char *, int *, int *);
+- static void load_buffer_by_name(char *, int);
+ static void load_window(char *, int lnum);
+ static void warp_to_pc(int);
+ #ifdef FEAT_BEVAL_GUI
+--- 45,50 ----
+***************
+*** 1228,1234 ****
+ }
+
+
+-
+ static void
+ load_buffer_by_name(
+ char *filename, /* the file to load */
+--- 1227,1232 ----
+*** ../vim-8.1.0442/src/version.c 2018-09-30 18:22:22.568974801 +0200
+--- src/version.c 2018-09-30 21:40:06.745020131 +0200
+***************
+*** 796,797 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 443,
+ /**/
+
+--
+The difference between theory and practice, is that in theory, there
+is no difference between theory and practice.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0444 b/data/vim/patches/8.1.0444
new file mode 100644
index 000000000..1281471d0
--- /dev/null
+++ b/data/vim/patches/8.1.0444
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0444
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0444
+Problem: Unnecessary check for NULL pointer.
+Solution: Remove check and call vim_free() directly.
+Files: src/beval.c
+
+
+*** ../vim-8.1.0443/src/beval.c 2018-06-23 19:22:45.598486362 +0200
+--- src/beval.c 2018-06-28 12:03:47.277451318 +0200
+***************
+*** 125,132 ****
+ *textp = lbuf;
+ *colp = col;
+ #ifdef FEAT_VARTABS
+! if (beval->vts)
+! vim_free(beval->vts);
+ beval->vts = tabstop_copy(wp->w_buffer->b_p_vts_array);
+ #endif
+ beval->ts = wp->w_buffer->b_p_ts;
+--- 125,131 ----
+ *textp = lbuf;
+ *colp = col;
+ #ifdef FEAT_VARTABS
+! vim_free(beval->vts);
+ beval->vts = tabstop_copy(wp->w_buffer->b_p_vts_array);
+ #endif
+ beval->ts = wp->w_buffer->b_p_ts;
+*** ../vim-8.1.0443/src/version.c 2018-09-30 21:43:17.207693209 +0200
+--- src/version.c 2018-10-02 14:14:26.115583047 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 444,
+ /**/
+
+--
+In a world without fences, who needs Gates and Windows?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0445 b/data/vim/patches/8.1.0445
new file mode 100644
index 000000000..41076aeeb
--- /dev/null
+++ b/data/vim/patches/8.1.0445
@@ -0,0 +1,317 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0445
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0445
+Problem: Setting 'term' does not store location for termcap options.
+Solution: Set the script context for termcap options that are changed when
+ 'term' is set.
+Files: src/option.c, src/proto/option.pro, src/term.c,
+ src/testdir/test_options.vim
+
+
+*** ../vim-8.1.0444/src/option.c 2018-09-30 21:43:17.199693265 +0200
+--- src/option.c 2018-10-02 14:12:11.856267373 +0200
+***************
+*** 1755,1766 ****
+ {"langmap", "lmap", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_SECURE,
+ #ifdef FEAT_LANGMAP
+ (char_u *)&p_langmap, PV_NONE,
+! {(char_u *)"", /* unmatched } */
+ #else
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)NULL,
+ #endif
+! (char_u *)0L} SCTX_INIT},
+ {"langmenu", "lm", P_STRING|P_VI_DEF|P_NFNAME,
+ #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG)
+ (char_u *)&p_lm, PV_NONE,
+--- 1755,1766 ----
+ {"langmap", "lmap", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP|P_SECURE,
+ #ifdef FEAT_LANGMAP
+ (char_u *)&p_langmap, PV_NONE,
+! {(char_u *)"", (char_u *)0L}
+ #else
+ (char_u *)NULL, PV_NONE,
+! {(char_u *)NULL, (char_u *)0L}
+ #endif
+! SCTX_INIT},
+ {"langmenu", "lm", P_STRING|P_VI_DEF|P_NFNAME,
+ #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG)
+ (char_u *)&p_lm, PV_NONE,
+***************
+*** 5790,5809 ****
+ }
+
+ /*
+! * Mark a terminal option as allocated, found by a pointer into term_strings[].
+ */
+! void
+! set_term_option_alloced(char_u **p)
+ {
+! int opt_idx;
+
+ for (opt_idx = 1; options[opt_idx].fullname != NULL; opt_idx++)
+ if (options[opt_idx].var == (char_u *)p)
+! {
+! options[opt_idx].flags |= P_ALLOCED;
+! return;
+! }
+! return; /* cannot happen: didn't find it! */
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+--- 5790,5821 ----
+ }
+
+ /*
+! * Return the option index found by a pointer into term_strings[].
+! * Return -1 if not found.
+ */
+! int
+! get_term_opt_idx(char_u **p)
+ {
+! int opt_idx;
+
+ for (opt_idx = 1; options[opt_idx].fullname != NULL; opt_idx++)
+ if (options[opt_idx].var == (char_u *)p)
+! return opt_idx;
+! return -1; // cannot happen: didn't find it!
+! }
+!
+! /*
+! * Mark a terminal option as allocated, found by a pointer into term_strings[].
+! * Return the option index or -1 if not found.
+! */
+! int
+! set_term_option_alloced(char_u **p)
+! {
+! int opt_idx = get_term_opt_idx(p);
+!
+! if (opt_idx >= 0)
+! options[opt_idx].flags |= P_ALLOCED;
+! return opt_idx;
+ }
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+***************
+*** 8237,8242 ****
+--- 8249,8280 ----
+ curwin->w_p_script_ctx[indir & PV_MASK] = new_script_ctx;
+ }
+ }
++
++ /*
++ * Set the script_ctx for a termcap option.
++ * "name" must be the two character code, e.g. "RV".
++ * When "name" is NULL use "opt_idx".
++ */
++ void
++ set_term_option_sctx_idx(char *name, int opt_idx)
++ {
++ char_u buf[5];
++ int idx;
++
++ if (name == NULL)
++ idx = opt_idx;
++ else
++ {
++ buf[0] = 't';
++ buf[1] = '_';
++ buf[2] = name[0];
++ buf[3] = name[1];
++ buf[4] = 0;
++ idx = findoption(buf);
++ }
++ if (idx >= 0)
++ set_option_sctx_idx(idx, OPT_GLOBAL, current_sctx);
++ }
+ #endif
+
+ /*
+***************
+*** 10445,10451 ****
+ {
+ struct vimoption *p;
+
+! for (p = &options[0]; p->fullname != NULL; p++)
+ if (istermoption(p))
+ {
+ if (p->flags & P_ALLOCED)
+--- 10483,10489 ----
+ {
+ struct vimoption *p;
+
+! for (p = options; p->fullname != NULL; p++)
+ if (istermoption(p))
+ {
+ if (p->flags & P_ALLOCED)
+***************
+*** 10455,10460 ****
+--- 10493,10502 ----
+ *(char_u **)(p->var) = empty_option;
+ p->def_val[VI_DEFAULT] = empty_option;
+ p->flags &= ~(P_ALLOCED|P_DEF_ALLOCED);
++ #ifdef FEAT_EVAL
++ // remember where the option was cleared
++ set_option_sctx_idx((int)(p - options), OPT_GLOBAL, current_sctx);
++ #endif
+ }
+ clear_termcodes();
+ }
+*** ../vim-8.1.0444/src/proto/option.pro 2018-09-13 20:31:47.103018229 +0200
+--- src/proto/option.pro 2018-10-02 14:12:15.040243605 +0200
+***************
+*** 17,27 ****
+ void check_buf_options(buf_T *buf);
+ void free_string_option(char_u *p);
+ void clear_string_option(char_u **pp);
+! void set_term_option_alloced(char_u **p);
+ int was_set_insecurely(char_u *opt, int opt_flags);
+ void set_string_option_direct(char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid);
+ char_u *check_colorcolumn(win_T *wp);
+ char_u *check_stl_option(char_u *s);
+ int get_option_value(char_u *name, long *numval, char_u **stringval, int opt_flags);
+ int get_option_value_strict(char_u *name, long *numval, char_u **stringval, int opt_type, void *from);
+ char_u *option_iter_next(void **option, int opt_type);
+--- 17,29 ----
+ void check_buf_options(buf_T *buf);
+ void free_string_option(char_u *p);
+ void clear_string_option(char_u **pp);
+! int get_term_opt_idx(char_u **p);
+! int set_term_option_alloced(char_u **p);
+ int was_set_insecurely(char_u *opt, int opt_flags);
+ void set_string_option_direct(char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid);
+ char_u *check_colorcolumn(win_T *wp);
+ char_u *check_stl_option(char_u *s);
++ void set_term_option_sctx_idx(char *name, int opt_idx);
+ int get_option_value(char_u *name, long *numval, char_u **stringval, int opt_flags);
+ int get_option_value_strict(char_u *name, long *numval, char_u **stringval, int opt_type, void *from);
+ char_u *option_iter_next(void **option, int opt_type);
+*** ../vim-8.1.0444/src/term.c 2018-09-30 21:43:17.207693209 +0200
+--- src/term.c 2018-10-02 14:44:51.335763377 +0200
+***************
+*** 1471,1476 ****
+--- 1471,1479 ----
+ if (term_strings[p->bt_entry] == NULL
+ || term_strings[p->bt_entry] == empty_option)
+ {
++ #ifdef FEAT_EVAL
++ int opt_idx = -1;
++ #endif
+ /* 8bit terminal: use CSI instead of <Esc>[ */
+ if (term_8bit && term_7to8bit((char_u *)p->bt_string) != 0)
+ {
+***************
+*** 1486,1496 ****
+ STRMOVE(t + 1, t + 2);
+ }
+ term_strings[p->bt_entry] = s;
+! set_term_option_alloced(&term_strings[p->bt_entry]);
+ }
+ }
+ else
+ term_strings[p->bt_entry] = (char_u *)p->bt_string;
+ }
+ }
+ else
+--- 1489,1511 ----
+ STRMOVE(t + 1, t + 2);
+ }
+ term_strings[p->bt_entry] = s;
+! #ifdef FEAT_EVAL
+! opt_idx =
+! #endif
+! set_term_option_alloced(
+! &term_strings[p->bt_entry]);
+ }
+ }
+ else
++ {
+ term_strings[p->bt_entry] = (char_u *)p->bt_string;
++ #ifdef FEAT_EVAL
++ opt_idx = get_term_opt_idx(&term_strings[p->bt_entry]);
++ #endif
++ }
++ #ifdef FEAT_EVAL
++ set_term_option_sctx_idx(NULL, opt_idx);
++ #endif
+ }
+ }
+ else
+***************
+*** 1616,1622 ****
+--- 1631,1642 ----
+ {
+ if (TERM_STR(string_names[i].dest) == NULL
+ || TERM_STR(string_names[i].dest) == empty_option)
++ {
+ TERM_STR(string_names[i].dest) = TGETSTR(string_names[i].name, &tp);
++ #ifdef FEAT_EVAL
++ set_term_option_sctx_idx(string_names[i].name, -1);
++ #endif
++ }
+ }
+
+ /* tgetflag() returns 1 if the flag is present, 0 if not and
+***************
+*** 1658,1664 ****
+--- 1678,1689 ----
+ * Get number of colors (if not done already).
+ */
+ if (TERM_STR(KS_CCO) == NULL || TERM_STR(KS_CCO) == empty_option)
++ {
+ set_color_count(tgetnum("Co"));
++ #ifdef FEAT_EVAL
++ set_term_option_sctx_idx("Co", -1);
++ #endif
++ }
+
+ # ifndef hpux
+ BC = (char *)TGETSTR("bc", &tp);
+*** ../vim-8.1.0444/src/testdir/test_options.vim 2018-08-23 22:20:31.449852029 +0200
+--- src/testdir/test_options.vim 2018-10-02 14:42:18.764840113 +0200
+***************
+*** 270,275 ****
+--- 270,287 ----
+ call assert_fails('set t_foo=', 'E846:')
+ endfunc
+
++ " Must be executed before other tests that set 'term'.
++ func Test_000_term_option_verbose()
++ let verb_cm = execute('verbose set t_cm')
++ call assert_notmatch('Last set from', verb_cm)
++
++ let term_save = &term
++ set term=ansi
++ let verb_cm = execute('verbose set t_cm')
++ call assert_match('Last set from.*test_options.vim', verb_cm)
++ let &term = term_save
++ endfunc
++
+ func Test_set_ttytype()
+ if !has('gui_running') && has('unix')
+ " Setting 'ttytype' used to cause a double-free when exiting vim and
+*** ../vim-8.1.0444/src/version.c 2018-10-02 14:15:08.991376909 +0200
+--- src/version.c 2018-10-02 14:42:46.984641236 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 445,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+132. You come back and check this list every half-hour.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0446 b/data/vim/patches/8.1.0446
new file mode 100644
index 000000000..83d1ec3f5
--- /dev/null
+++ b/data/vim/patches/8.1.0446
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0446
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0446
+Problem: Options test fails in the GUI.
+Solution: Don't try changing 'term' in the GUI.
+Files: src/testdir/test_options.vim
+
+
+*** ../vim-8.1.0445/src/testdir/test_options.vim 2018-10-02 14:45:07.023652468 +0200
+--- src/testdir/test_options.vim 2018-10-02 15:04:35.238391450 +0200
+***************
+*** 272,277 ****
+--- 272,280 ----
+
+ " Must be executed before other tests that set 'term'.
+ func Test_000_term_option_verbose()
++ if has('gui_running')
++ return
++ endif
+ let verb_cm = execute('verbose set t_cm')
+ call assert_notmatch('Last set from', verb_cm)
+
+*** ../vim-8.1.0445/src/version.c 2018-10-02 14:45:07.023652468 +0200
+--- src/version.c 2018-10-02 15:05:10.390126789 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 446,
+ /**/
+
+--
+There are three kinds of persons: Those who can count and those who can't.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0447 b/data/vim/patches/8.1.0447
new file mode 100644
index 000000000..34d400d02
--- /dev/null
+++ b/data/vim/patches/8.1.0447
@@ -0,0 +1,133 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0447
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0447
+Problem: GUI scrollbar test fails with Athena and Motif.
+Solution: When not using on-the-fly scrolling call normal_cmd().
+Files: src/evalfunc.c, src/ex_docmd.c, src/proto/ex_docmd.pro
+
+
+*** ../vim-8.1.0446/src/evalfunc.c 2018-09-30 21:43:17.183693376 +0200
+--- src/evalfunc.c 2018-10-02 16:21:11.584227329 +0200
+***************
+*** 3588,3594 ****
+
+ if (!dangerous)
+ ++ex_normal_busy;
+! exec_normal(TRUE, TRUE);
+ if (!dangerous)
+ --ex_normal_busy;
+
+--- 3588,3594 ----
+
+ if (!dangerous)
+ ++ex_normal_busy;
+! exec_normal(TRUE, FALSE, TRUE);
+ if (!dangerous)
+ --ex_normal_busy;
+
+***************
+*** 13233,13238 ****
+--- 13233,13242 ----
+ return;
+ }
+ gui_drag_scrollbar(sb, value, dragging);
++ # ifndef USE_ON_FLY_SCROLL
++ // need to loop through normal_cmd() to handle the scroll events
++ exec_normal(FALSE, TRUE, FALSE);
++ # endif
+ }
+ #endif
+
+*** ../vim-8.1.0446/src/ex_docmd.c 2018-09-30 21:43:17.187693348 +0200
+--- src/ex_docmd.c 2018-10-02 16:22:09.711805347 +0200
+***************
+*** 10471,10491 ****
+ {
+ /* Stuff the argument into the typeahead buffer. */
+ ins_typebuf(cmd, remap, 0, TRUE, silent);
+! exec_normal(FALSE, FALSE);
+ }
+
+ /*
+ * Execute normal_cmd() until there is no typeahead left.
+ */
+ void
+! exec_normal(int was_typed, int may_use_terminal_loop UNUSED)
+ {
+ oparg_T oa;
+
+ clear_oparg(&oa);
+ finish_op = FALSE;
+! while ((!stuff_empty() || ((was_typed || !typebuf_typed())
+! && typebuf.tb_len > 0)) && !got_int)
+ {
+ update_topline_cursor();
+ #ifdef FEAT_TERMINAL
+--- 10471,10494 ----
+ {
+ /* Stuff the argument into the typeahead buffer. */
+ ins_typebuf(cmd, remap, 0, TRUE, silent);
+! exec_normal(FALSE, FALSE, FALSE);
+ }
+
+ /*
+ * Execute normal_cmd() until there is no typeahead left.
++ * When "use_vpeekc" is TRUE use vpeekc() to check for available chars.
+ */
+ void
+! exec_normal(int was_typed, int use_vpeekc, int may_use_terminal_loop UNUSED)
+ {
+ oparg_T oa;
+
+ clear_oparg(&oa);
+ finish_op = FALSE;
+! while ((!stuff_empty()
+! || ((was_typed || !typebuf_typed()) && typebuf.tb_len > 0)
+! || (use_vpeekc && vpeekc() != NUL))
+! && !got_int)
+ {
+ update_topline_cursor();
+ #ifdef FEAT_TERMINAL
+*** ../vim-8.1.0446/src/proto/ex_docmd.pro 2018-09-15 15:42:36.501547749 +0200
+--- src/proto/ex_docmd.pro 2018-10-02 16:21:31.332084040 +0200
+***************
+*** 59,65 ****
+ void restore_current_state(save_state_T *sst);
+ void ex_normal(exarg_T *eap);
+ void exec_normal_cmd(char_u *cmd, int remap, int silent);
+! void exec_normal(int was_typed, int may_use_terminal_loop);
+ int find_cmdline_var(char_u *src, int *usedlen);
+ char_u *eval_vars(char_u *src, char_u *srcstart, int *usedlen, linenr_T *lnump, char_u **errormsg, int *escaped);
+ char_u *expand_sfile(char_u *arg);
+--- 59,65 ----
+ void restore_current_state(save_state_T *sst);
+ void ex_normal(exarg_T *eap);
+ void exec_normal_cmd(char_u *cmd, int remap, int silent);
+! void exec_normal(int was_typed, int use_vpeekc, int may_use_terminal_loop);
+ int find_cmdline_var(char_u *src, int *usedlen);
+ char_u *eval_vars(char_u *src, char_u *srcstart, int *usedlen, linenr_T *lnump, char_u **errormsg, int *escaped);
+ char_u *expand_sfile(char_u *arg);
+*** ../vim-8.1.0446/src/version.c 2018-10-02 15:06:36.761478333 +0200
+--- src/version.c 2018-10-02 16:22:59.479443571 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 447,
+ /**/
+
+--
+Birthdays are healthy. The more you have them, the longer you live.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0448 b/data/vim/patches/8.1.0448
new file mode 100644
index 000000000..f67b31d48
--- /dev/null
+++ b/data/vim/patches/8.1.0448
@@ -0,0 +1,233 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0448
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0448
+Problem: Cursorline not removed when using 'cursorbind'. (Justin Keyes)
+Solution: Store the last cursor line per window. (closes #3488)
+Files: src/testdir/test_diffmode.vim,
+ src/testdir/dumps/Test_diff_with_cursorline_01.dump,
+ src/testdir/dumps/Test_diff_with_cursorline_02.dump,
+ src/testdir/dumps/Test_diff_with_cursorline_03.dump,
+ src/structs.h, src/move.c
+
+
+*** ../vim-8.1.0447/src/testdir/test_diffmode.vim 2018-09-16 15:47:45.629425398 +0200
+--- src/testdir/test_diffmode.vim 2018-10-02 17:13:44.568029822 +0200
+***************
+*** 817,819 ****
+--- 817,845 ----
+ call delete('Xfile2')
+ endfunc
+
++ func Test_diff_with_cursorline()
++ if !CanRunVimInTerminal()
++ return
++ endif
++
++ call writefile([
++ \ 'hi CursorLine ctermbg=red ctermfg=white',
++ \ 'set cursorline',
++ \ 'call setline(1, ["foo","foo","foo","bar"])',
++ \ 'vnew',
++ \ 'call setline(1, ["bee","foo","foo","baz"])',
++ \ 'windo diffthis',
++ \ '2wincmd w',
++ \ ], 'Xtest_diff_cursorline')
++ let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {})
++
++ call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {})
++ call term_sendkeys(buf, "j")
++ call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {})
++ call term_sendkeys(buf, "j")
++ call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {})
++
++ " clean up
++ call StopVimInTerminal(buf)
++ call delete('Xtest_diff_cursorline')
++ endfunc
+*** ../vim-8.1.0447/src/testdir/dumps/Test_diff_with_cursorline_01.dump 2018-10-02 18:24:28.837408182 +0200
+--- src/testdir/dumps/Test_diff_with_cursorline_01.dump 2018-10-02 17:13:50.367983071 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|b+8#ffffff16#ff404010|e@1| @31||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1>f+8#ffffff16#ff404010|o@1| @31
++ | +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
++ | +0#0000e05#a8a8a8255@1|b+2#0000000#ff404010|a|z| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|f+2#0000000#ff404010|o@1| +0&#ffd7ff255@31
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|b+0#0000000#5fd7ff255|a|r| @31
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|A|l@1
++ | +0&&@74
+*** ../vim-8.1.0447/src/testdir/dumps/Test_diff_with_cursorline_02.dump 2018-10-02 18:24:28.841408152 +0200
+--- src/testdir/dumps/Test_diff_with_cursorline_02.dump 2018-10-02 17:58:28.616935305 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|b+0#0000000#5fd7ff255|e@1| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
++ | +0#0000e05#a8a8a8255@1|f+8#ffffff16#ff404010|o@1| @31||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1>f+8#ffffff16#ff404010|o@1| @31
++ | +0#0000e05#a8a8a8255@1|b+2#0000000#ff404010|a|z| +0&#ffd7ff255@31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|f+2#0000000#ff404010|o@1| +0&#ffd7ff255@31
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|b+0#0000000#5fd7ff255|a|r| @31
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @5|3|,|1| @11|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|2|,|1| @11|A|l@1
++ | +0&&@74
+*** ../vim-8.1.0447/src/testdir/dumps/Test_diff_with_cursorline_03.dump 2018-10-02 18:24:28.845408122 +0200
+--- src/testdir/dumps/Test_diff_with_cursorline_03.dump 2018-10-02 17:58:29.668927931 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|b+0#0000000#5fd7ff255|e@1| @31||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
++ | +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
++ | +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31||+1&&| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @31
++ | +0#0000e05#a8a8a8255@1|b+10#ffffff16#ff404010|a|z| +8&&@31||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1>f+10#ffffff16#ff404010|o@1| +8&&@31
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|b+0#0000000#5fd7ff255|a|r| @31
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @5|4|,|1| @11|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|3|,|1| @11|A|l@1
++ | +0&&@74
+*** ../vim-8.1.0447/src/structs.h 2018-09-16 14:10:28.300323360 +0200
+--- src/structs.h 2018-10-02 17:27:47.385431264 +0200
+***************
+*** 2686,2691 ****
+--- 2686,2695 ----
+ time through cursupdate() to the
+ current virtual column */
+
++ #ifdef FEAT_SYN_HL
++ linenr_T w_last_cursorline; // where last time 'cursorline' was drawn
++ #endif
++
+ /*
+ * the next seven are used to update the visual part
+ */
+*** ../vim-8.1.0447/src/move.c 2018-09-30 21:43:17.195693290 +0200
+--- src/move.c 2018-10-02 17:29:27.368662974 +0200
+***************
+*** 117,128 ****
+ }
+
+ #ifdef FEAT_SYN_HL
+- static linenr_T last_cursorline = 0;
+-
+ void
+ reset_cursorline(void)
+ {
+! last_cursorline = 0;
+ }
+ #endif
+
+--- 117,126 ----
+ }
+
+ #ifdef FEAT_SYN_HL
+ void
+ reset_cursorline(void)
+ {
+! curwin->w_last_cursorline = 0;
+ }
+ #endif
+
+***************
+*** 150,167 ****
+ #ifdef FEAT_SYN_HL
+ if (wp->w_p_cul)
+ {
+! if (wp->w_redr_type <= VALID && last_cursorline != 0)
+ {
+! // "last_cursorline" may be set for another window, worst case
+! // we redraw too much. This is optimized for moving the cursor
+! // around in the same window.
+! redrawWinline(wp, last_cursorline, FALSE);
+ redrawWinline(wp, wp->w_cursor.lnum, FALSE);
+ redraw_win_later(wp, VALID);
+ }
+ else
+ redraw_win_later(wp, SOME_VALID);
+! last_cursorline = wp->w_cursor.lnum;
+ }
+ #endif
+ }
+--- 148,165 ----
+ #ifdef FEAT_SYN_HL
+ if (wp->w_p_cul)
+ {
+! if (wp->w_redr_type <= VALID && wp->w_last_cursorline != 0)
+ {
+! // "w_last_cursorline" may be outdated, worst case we redraw
+! // too much. This is optimized for moving the cursor around in
+! // the current window.
+! redrawWinline(wp, wp->w_last_cursorline, FALSE);
+ redrawWinline(wp, wp->w_cursor.lnum, FALSE);
+ redraw_win_later(wp, VALID);
+ }
+ else
+ redraw_win_later(wp, SOME_VALID);
+! wp->w_last_cursorline = wp->w_cursor.lnum;
+ }
+ #endif
+ }
+*** ../vim-8.1.0447/src/version.c 2018-10-02 16:23:55.323037143 +0200
+--- src/version.c 2018-10-02 18:24:16.109503149 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 448,
+ /**/
+
+--
+"The sun oozed over the horizon, shoved aside darkness, crept along the
+greensward, and, with sickly fingers, pushed through the castle window,
+revealing the pillaged princess, hand at throat, crown asunder, gaping
+in frenzied horror at the sated, sodden amphibian lying beside her,
+disbelieving the magnitude of the frog's deception, screaming madly,
+"You lied!"
+ - Winner of the Bulwer-Lytton contest (San Jose State University),
+ wherein one writes only the first line of a bad novel
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0449 b/data/vim/patches/8.1.0449
new file mode 100644
index 000000000..c5d31defa
--- /dev/null
+++ b/data/vim/patches/8.1.0449
@@ -0,0 +1,188 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0449
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0449
+Problem: When 'rnu' is set folded lines are not displayed correctly.
+ (Vitaly Yashin)
+Solution: When only redrawing line numbers do draw folded lines.
+ (closes #3484)
+Files: src/screen.c, src/testdir/test_fold.vim,
+ src/testdir/dumps/Test_folds_with_rnu_01.dump,
+ src/testdir/dumps/Test_folds_with_rnu_02.dump
+
+
+*** ../vim-8.1.0448/src/screen.c 2018-09-30 21:43:17.203693237 +0200
+--- src/screen.c 2018-10-02 21:17:41.161356069 +0200
+***************
+*** 2176,2182 ****
+ {
+ // 'relativenumber' set: The text doesn't need to be drawn, but
+ // the number column nearly always does.
+! (void)win_line(wp, lnum, srow, wp->w_height, TRUE, TRUE);
+ }
+
+ // This line does not need to be drawn, advance to the next one.
+--- 2176,2189 ----
+ {
+ // 'relativenumber' set: The text doesn't need to be drawn, but
+ // the number column nearly always does.
+! fold_count = foldedCount(wp, lnum, &win_foldinfo);
+! if (fold_count != 0)
+! {
+! fold_line(wp, fold_count, &win_foldinfo, lnum, row);
+! --fold_count;
+! }
+! else
+! (void)win_line(wp, lnum, srow, wp->w_height, TRUE, TRUE);
+ }
+
+ // This line does not need to be drawn, advance to the next one.
+***************
+*** 3315,3322 ****
+ has_spell = TRUE;
+ extra_check = TRUE;
+
+! /* Get the start of the next line, so that words that wrap to the next
+! * line are found too: "et<line-break>al.".
+ * Trick: skip a few chars for C/shell/Vim comments */
+ nextline[SPWORDLEN] = NUL;
+ if (lnum < wp->w_buffer->b_ml.ml_line_count)
+--- 3322,3329 ----
+ has_spell = TRUE;
+ extra_check = TRUE;
+
+! /* Get the start of the next line, so that words that wrap to the
+! * next line are found too: "et<line-break>al.".
+ * Trick: skip a few chars for C/shell/Vim comments */
+ nextline[SPWORDLEN] = NUL;
+ if (lnum < wp->w_buffer->b_ml.ml_line_count)
+***************
+*** 3325,3332 ****
+ spell_cat_line(nextline + SPWORDLEN, line, SPWORDLEN);
+ }
+
+! /* When a word wrapped from the previous line the start of the current
+! * line is valid. */
+ if (lnum == checked_lnum)
+ cur_checked_col = checked_col;
+ checked_lnum = 0;
+--- 3332,3339 ----
+ spell_cat_line(nextline + SPWORDLEN, line, SPWORDLEN);
+ }
+
+! /* When a word wrapped from the previous line the start of the
+! * current line is valid. */
+ if (lnum == checked_lnum)
+ cur_checked_col = checked_col;
+ checked_lnum = 0;
+*** ../vim-8.1.0448/src/testdir/test_fold.vim 2018-07-10 15:07:11.779668824 +0200
+--- src/testdir/test_fold.vim 2018-10-02 21:15:55.182278183 +0200
+***************
+*** 1,6 ****
+--- 1,7 ----
+ " Test for folding
+
+ source view_util.vim
++ source screendump.vim
+
+ func PrepIndent(arg)
+ return [a:arg] + repeat(["\t".a:arg], 5)
+***************
+*** 674,676 ****
+--- 675,697 ----
+ set fdm&
+ enew!
+ endfunc
++
++ func Test_folds_with_rnu()
++ if !CanRunVimInTerminal()
++ return
++ endif
++
++ call writefile([
++ \ 'set fdm=marker rnu foldcolumn=2',
++ \ 'call setline(1, ["{{{1", "nline 1", "{{{1", "line 2"])',
++ \ ], 'Xtest_folds_with_rnu')
++ let buf = RunVimInTerminal('-S Xtest_folds_with_rnu', {})
++
++ call VerifyScreenDump(buf, 'Test_folds_with_rnu_01', {})
++ call term_sendkeys(buf, "j")
++ call VerifyScreenDump(buf, 'Test_folds_with_rnu_02', {})
++
++ " clean up
++ call StopVimInTerminal(buf)
++ call delete('Xtest_folds_with_rnu')
++ endfunc
+*** ../vim-8.1.0448/src/testdir/dumps/Test_folds_with_rnu_01.dump 2018-10-02 21:19:43.940299759 +0200
+--- src/testdir/dumps/Test_folds_with_rnu_01.dump 2018-10-02 21:16:04.846193642 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ |++0#0000e05#a8a8a8255| @2|0| >+|-@1| @1|2| |l|i|n|e|s|:| |-@54
++ |+| @2|1| |+|-@1| @1|2| |l|i|n|e|s|:| |-@54
++ | @1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000000&@56|1|,|1| @10|A|l@1|
+*** ../vim-8.1.0448/src/testdir/dumps/Test_folds_with_rnu_02.dump 2018-10-02 21:19:43.944299727 +0200
+--- src/testdir/dumps/Test_folds_with_rnu_02.dump 2018-10-02 21:16:05.894184479 +0200
+***************
+*** 0 ****
+--- 1,20 ----
++ |++0#0000e05#a8a8a8255| @2|1| |+|-@1| @1|2| |l|i|n|e|s|:| |-@54
++ |+| @2|0| >+|-@1| @1|2| |l|i|n|e|s|:| |-@54
++ | @1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @71
++ | +0#0000000&@56|3|,|1| @10|A|l@1|
+*** ../vim-8.1.0448/src/version.c 2018-10-02 18:25:41.424867560 +0200
+--- src/version.c 2018-10-02 21:18:46.028796562 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 449,
+ /**/
+
+--
+The coffee just wasn't strong enough to defend itself -- Tom Waits
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0450 b/data/vim/patches/8.1.0450
new file mode 100644
index 000000000..7dbcf3816
--- /dev/null
+++ b/data/vim/patches/8.1.0450
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0450
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0450 (after patch 8.1.0449)
+Problem: Build failure without the +fold feature.
+Solution: Add #ifdef.
+Files: src/screen.c
+
+
+*** ../vim-8.1.0449/src/screen.c 2018-10-02 21:20:08.688088162 +0200
+--- src/screen.c 2018-10-02 21:46:41.722564273 +0200
+***************
+*** 2174,2188 ****
+ {
+ if (wp->w_p_rnu)
+ {
+ // 'relativenumber' set: The text doesn't need to be drawn, but
+ // the number column nearly always does.
+ fold_count = foldedCount(wp, lnum, &win_foldinfo);
+ if (fold_count != 0)
+- {
+ fold_line(wp, fold_count, &win_foldinfo, lnum, row);
+- --fold_count;
+- }
+ else
+ (void)win_line(wp, lnum, srow, wp->w_height, TRUE, TRUE);
+ }
+
+--- 2174,2187 ----
+ {
+ if (wp->w_p_rnu)
+ {
++ #ifdef FEAT_FOLDING
+ // 'relativenumber' set: The text doesn't need to be drawn, but
+ // the number column nearly always does.
+ fold_count = foldedCount(wp, lnum, &win_foldinfo);
+ if (fold_count != 0)
+ fold_line(wp, fold_count, &win_foldinfo, lnum, row);
+ else
++ #endif
+ (void)win_line(wp, lnum, srow, wp->w_height, TRUE, TRUE);
+ }
+
+*** ../vim-8.1.0449/src/version.c 2018-10-02 21:20:08.688088162 +0200
+--- src/version.c 2018-10-02 21:48:14.785774472 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 450,
+ /**/
+
+--
+Amazing but true: If all the salmon caught in Canada in one year were laid
+end to end across the Sahara Desert, the smell would be absolutely awful.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0451 b/data/vim/patches/8.1.0451
new file mode 100644
index 000000000..232e0abe7
--- /dev/null
+++ b/data/vim/patches/8.1.0451
@@ -0,0 +1,148 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0451
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0451
+Problem: Win32 console: keypad keys don't work.
+Solution: Use numbers instead of characters to avoid the value becoming
+ negative. (Mike Williams)
+Files: src/os_win32.c
+
+
+*** ../vim-8.1.0450/src/os_win32.c 2018-09-30 21:43:17.203693237 +0200
+--- src/os_win32.c 2018-10-03 20:44:09.309019768 +0200
+***************
+*** 847,853 ****
+ int chAlt;
+ } VirtKeyMap[] =
+ {
+-
+ /* Key ANSI alone shift ctrl alt */
+ { VK_ESCAPE,FALSE, ESC, ESC, ESC, ESC, },
+
+--- 847,852 ----
+***************
+*** 861,910 ****
+ { VK_F8, TRUE, 'B', '[', 'e', 'o', },
+ { VK_F9, TRUE, 'C', '\\', 'f', 'p', },
+ { VK_F10, TRUE, 'D', ']', 'g', 'q', },
+! { VK_F11, TRUE, '\205', '\207', '\211', '\213', },
+! { VK_F12, TRUE, '\206', '\210', '\212', '\214', },
+
+! { VK_HOME, TRUE, 'G', '\302', 'w', '\303', },
+! { VK_UP, TRUE, 'H', '\304', '\305', '\306', },
+! { VK_PRIOR, TRUE, 'I', '\307', '\204', '\310', }, /*PgUp*/
+! { VK_LEFT, TRUE, 'K', '\311', 's', '\312', },
+! { VK_RIGHT, TRUE, 'M', '\313', 't', '\314', },
+! { VK_END, TRUE, 'O', '\315', 'u', '\316', },
+! { VK_DOWN, TRUE, 'P', '\317', '\320', '\321', },
+! { VK_NEXT, TRUE, 'Q', '\322', 'v', '\323', }, /*PgDn*/
+! { VK_INSERT,TRUE, 'R', '\324', '\325', '\326', },
+! { VK_DELETE,TRUE, 'S', '\327', '\330', '\331', },
+
+ { VK_SNAPSHOT,TRUE, 0, 0, 0, 'r', }, /*PrtScrn*/
+
+ #if 0
+ /* Most people don't have F13-F20, but what the hell... */
+! { VK_F13, TRUE, '\332', '\333', '\334', '\335', },
+! { VK_F14, TRUE, '\336', '\337', '\340', '\341', },
+! { VK_F15, TRUE, '\342', '\343', '\344', '\345', },
+! { VK_F16, TRUE, '\346', '\347', '\350', '\351', },
+! { VK_F17, TRUE, '\352', '\353', '\354', '\355', },
+! { VK_F18, TRUE, '\356', '\357', '\360', '\361', },
+! { VK_F19, TRUE, '\362', '\363', '\364', '\365', },
+! { VK_F20, TRUE, '\366', '\367', '\370', '\371', },
+ #endif
+ { VK_ADD, TRUE, 'N', 'N', 'N', 'N', }, /* keyp '+' */
+ { VK_SUBTRACT, TRUE,'J', 'J', 'J', 'J', }, /* keyp '-' */
+ /* { VK_DIVIDE, TRUE,'N', 'N', 'N', 'N', }, keyp '/' */
+ { VK_MULTIPLY, TRUE,'7', '7', '7', '7', }, /* keyp '*' */
+
+! { VK_NUMPAD0,TRUE, '\332', '\333', '\334', '\335', },
+! { VK_NUMPAD1,TRUE, '\336', '\337', '\340', '\341', },
+! { VK_NUMPAD2,TRUE, '\342', '\343', '\344', '\345', },
+! { VK_NUMPAD3,TRUE, '\346', '\347', '\350', '\351', },
+! { VK_NUMPAD4,TRUE, '\352', '\353', '\354', '\355', },
+! { VK_NUMPAD5,TRUE, '\356', '\357', '\360', '\361', },
+! { VK_NUMPAD6,TRUE, '\362', '\363', '\364', '\365', },
+! { VK_NUMPAD7,TRUE, '\366', '\367', '\370', '\371', },
+! { VK_NUMPAD8,TRUE, '\372', '\373', '\374', '\375', },
+ /* Sorry, out of number space! <negri>*/
+! { VK_NUMPAD9,TRUE, '\376', '\377', '\377', '\367', },
+!
+ };
+
+
+--- 860,908 ----
+ { VK_F8, TRUE, 'B', '[', 'e', 'o', },
+ { VK_F9, TRUE, 'C', '\\', 'f', 'p', },
+ { VK_F10, TRUE, 'D', ']', 'g', 'q', },
+! { VK_F11, TRUE, 0x85, 0x87, 0x89, 0x8B, },
+! { VK_F12, TRUE, 0x86, 0x88, 0x8a, 0x8c, },
+
+! { VK_HOME, TRUE, 'G', 0xc2, 'w', 0xc3, },
+! { VK_UP, TRUE, 'H', 0xc4, 0xc5, 0xc6, },
+! { VK_PRIOR, TRUE, 'I', 0xc7, 0x84, 0xc8, }, /*PgUp*/
+! { VK_LEFT, TRUE, 'K', 0xc9, 's', 0xca, },
+! { VK_RIGHT, TRUE, 'M', 0xcb, 't', 0xcc, },
+! { VK_END, TRUE, 'O', 0xcd, 'u', 0xce, },
+! { VK_DOWN, TRUE, 'P', 0xcf, 0xd0, 0xd1, },
+! { VK_NEXT, TRUE, 'Q', 0xd2, 'v', 0xd3, }, /*PgDn*/
+! { VK_INSERT,TRUE, 'R', 0xd4, 0xd5, 0xd6, },
+! { VK_DELETE,TRUE, 'S', 0xd7, 0xd8, 0xd9, },
+
+ { VK_SNAPSHOT,TRUE, 0, 0, 0, 'r', }, /*PrtScrn*/
+
+ #if 0
+ /* Most people don't have F13-F20, but what the hell... */
+! { VK_F13, TRUE, 0xda, 0xdb, 0xdc, 0xdd, },
+! { VK_F14, TRUE, 0xde, 0xdf, 0xe0, 0xe1, },
+! { VK_F15, TRUE, 0xe2, 0xe3, 0xe4, 0xe5, },
+! { VK_F16, TRUE, 0xe6, 0xe7, 0xe8, 0xe9, },
+! { VK_F17, TRUE, 0xea, 0xeb, 0xec, 0xed, },
+! { VK_F18, TRUE, 0xee, 0xef, 0xf0, 0xf1, },
+! { VK_F19, TRUE, 0xf2, 0xf3, 0xf4, 0xf5, },
+! { VK_F20, TRUE, 0xf6, 0xf7, 0xf8, 0xf9, },
+ #endif
+ { VK_ADD, TRUE, 'N', 'N', 'N', 'N', }, /* keyp '+' */
+ { VK_SUBTRACT, TRUE,'J', 'J', 'J', 'J', }, /* keyp '-' */
+ /* { VK_DIVIDE, TRUE,'N', 'N', 'N', 'N', }, keyp '/' */
+ { VK_MULTIPLY, TRUE,'7', '7', '7', '7', }, /* keyp '*' */
+
+! { VK_NUMPAD0,TRUE, 0xda, 0xdb, 0xdc, 0xdd, },
+! { VK_NUMPAD1,TRUE, 0xde, 0xdf, 0xe0, 0xe1, },
+! { VK_NUMPAD2,TRUE, 0xe2, 0xe3, 0xe4, 0xe5, },
+! { VK_NUMPAD3,TRUE, 0xe6, 0xe7, 0xe8, 0xe9, },
+! { VK_NUMPAD4,TRUE, 0xea, 0xeb, 0xec, 0xed, },
+! { VK_NUMPAD5,TRUE, 0xee, 0xef, 0xf0, 0xf1, },
+! { VK_NUMPAD6,TRUE, 0xf2, 0xf3, 0xf4, 0xf5, },
+! { VK_NUMPAD7,TRUE, 0xf6, 0xf7, 0xf8, 0xf9, },
+! { VK_NUMPAD8,TRUE, 0xfa, 0xfb, 0xfc, 0xfd, },
+ /* Sorry, out of number space! <negri>*/
+! { VK_NUMPAD9,TRUE, 0xfe, 0xff, 0xff, 0xf7, },
+ };
+
+
+*** ../vim-8.1.0450/src/version.c 2018-10-02 21:48:30.641640211 +0200
+--- src/version.c 2018-10-03 20:43:41.313572933 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 451,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+141. You'd rather go to http://www.weather.com/ than look out your window.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0452 b/data/vim/patches/8.1.0452
new file mode 100644
index 000000000..94459684e
--- /dev/null
+++ b/data/vim/patches/8.1.0452
@@ -0,0 +1,123 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0452
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0452
+Problem: MS-Windows: not finding intl.dll.
+Solution: Also find intl.dll next to libintl.dll. (Ken Takata)
+Files: src/os_win32.c, runtime/doc/mlang.txt
+
+
+*** ../vim-8.1.0451/src/os_win32.c 2018-10-03 20:44:16.340886213 +0200
+--- src/os_win32.c 2018-10-06 14:57:21.420211524 +0200
+***************
+*** 573,579 ****
+ #if defined(DYNAMIC_GETTEXT) || defined(PROTO)
+ # ifndef GETTEXT_DLL
+ # define GETTEXT_DLL "libintl.dll"
+! # define GETTEXT_DLL_ALT "libintl-8.dll"
+ # endif
+ /* Dummy functions */
+ static char *null_libintl_gettext(const char *);
+--- 573,580 ----
+ #if defined(DYNAMIC_GETTEXT) || defined(PROTO)
+ # ifndef GETTEXT_DLL
+ # define GETTEXT_DLL "libintl.dll"
+! # define GETTEXT_DLL_ALT1 "libintl-8.dll"
+! # define GETTEXT_DLL_ALT2 "intl.dll"
+ # endif
+ /* Dummy functions */
+ static char *null_libintl_gettext(const char *);
+***************
+*** 614,627 ****
+ };
+ HINSTANCE hmsvcrt;
+
+! /* No need to initialize twice. */
+! if (hLibintlDLL)
+ return 1;
+! /* Load gettext library (libintl.dll) */
+ hLibintlDLL = vimLoadLib(GETTEXT_DLL);
+! #ifdef GETTEXT_DLL_ALT
+ if (!hLibintlDLL)
+! hLibintlDLL = vimLoadLib(GETTEXT_DLL_ALT);
+ #endif
+ if (!hLibintlDLL)
+ {
+--- 615,632 ----
+ };
+ HINSTANCE hmsvcrt;
+
+! // No need to initialize twice.
+! if (hLibintlDLL != NULL)
+ return 1;
+! // Load gettext library (libintl.dll and other names).
+ hLibintlDLL = vimLoadLib(GETTEXT_DLL);
+! #ifdef GETTEXT_DLL_ALT1
+ if (!hLibintlDLL)
+! hLibintlDLL = vimLoadLib(GETTEXT_DLL_ALT1);
+! #endif
+! #ifdef GETTEXT_DLL_ALT2
+! if (!hLibintlDLL)
+! hLibintlDLL = vimLoadLib(GETTEXT_DLL_ALT2);
+ #endif
+ if (!hLibintlDLL)
+ {
+*** ../vim-8.1.0451/runtime/doc/mlang.txt 2018-05-17 13:41:41.000000000 +0200
+--- runtime/doc/mlang.txt 2018-10-06 14:59:44.978840351 +0200
+***************
+*** 102,109 ****
+
+ This also contains tools xgettext, msgformat and others.
+
+! libintl.dll should be placed in same directory with (g)vim.exe, or some
+! place where PATH environment value describe. Vim also finds libintl-8.dll.
+ Message files (vim.mo) have to be placed in "$VIMRUNTIME/lang/xx/LC_MESSAGES",
+ where "xx" is the abbreviation of the language (mostly two letters).
+
+--- 102,111 ----
+
+ This also contains tools xgettext, msgformat and others.
+
+! libintl.dll should be placed in same directory as (g)vim.exe, or one of the
+! directories listed in the PATH environment value. Vim also looks for the
+! alternate names "libintl-8.dll" and "intl.dll".
+!
+ Message files (vim.mo) have to be placed in "$VIMRUNTIME/lang/xx/LC_MESSAGES",
+ where "xx" is the abbreviation of the language (mostly two letters).
+
+***************
+*** 210,213 ****
+ :endif
+ <
+
+! vim:tw=78:sw=4:ts=8:ft=help:norl:
+--- 212,215 ----
+ :endif
+ <
+
+! vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0451/src/version.c 2018-10-03 20:44:16.340886213 +0200
+--- src/version.c 2018-10-06 14:55:54.765045584 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 452,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+161. You get up before the sun rises to check your e-mail, and you
+ find yourself in the very same chair long after the sun has set.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0453 b/data/vim/patches/8.1.0453
new file mode 100644
index 000000000..cdd9e7d30
--- /dev/null
+++ b/data/vim/patches/8.1.0453
@@ -0,0 +1,126 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0453
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0453
+Problem: MS-Windows: executable() is not reliable.
+Solution: Use $PATHEXT properly. (Yasuhiro Matsumoto, closes #3412)
+Files: src/os_win32.c, src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0452/src/os_win32.c 2018-10-06 15:02:53.797052261 +0200
+--- src/os_win32.c 2018-10-06 15:18:33.140733117 +0200
+***************
+*** 3535,3555 ****
+ {
+ char_u buf[_MAX_PATH];
+ int len = (int)STRLEN(name);
+! char_u *p;
+
+ if (len >= _MAX_PATH) /* safety check */
+ return FALSE;
+
+! /* If there already is an extension try using the name directly. Also do
+! * this with a Unix-shell like 'shell'. */
+! if (vim_strchr(gettail(name), '.') != NULL
+! || strstr((char *)gettail(p_sh), "sh") != NULL)
+ if (executable_exists((char *)name, path, use_path))
+ return TRUE;
+
+ /*
+ * Loop over all extensions in $PATHEXT.
+ */
+ vim_strncpy(buf, name, _MAX_PATH - 1);
+ p = mch_getenv("PATHEXT");
+ if (p == NULL)
+--- 3535,3578 ----
+ {
+ char_u buf[_MAX_PATH];
+ int len = (int)STRLEN(name);
+! char_u *p, *saved;
+
+ if (len >= _MAX_PATH) /* safety check */
+ return FALSE;
+
+! /* Ty using the name directly when a Unix-shell like 'shell'. */
+! if (strstr((char *)gettail(p_sh), "sh") != NULL)
+ if (executable_exists((char *)name, path, use_path))
+ return TRUE;
+
+ /*
+ * Loop over all extensions in $PATHEXT.
+ */
++ p = mch_getenv("PATHEXT");
++ if (p == NULL)
++ p = (char_u *)".com;.exe;.bat;.cmd";
++ saved = vim_strsave(p);
++ if (saved == NULL)
++ return FALSE;
++ p = saved;
++ while (*p)
++ {
++ char_u *tmp = vim_strchr(p, ';');
++
++ if (tmp != NULL)
++ *tmp = NUL;
++ if (_stricoll((char *)name + len - STRLEN(p), (char *)p) == 0
++ && executable_exists((char *)name, path, use_path))
++ {
++ vim_free(saved);
++ return TRUE;
++ }
++ if (tmp == NULL)
++ break;
++ p = tmp + 1;
++ }
++ vim_free(saved);
++
+ vim_strncpy(buf, name, _MAX_PATH - 1);
+ p = mch_getenv("PATHEXT");
+ if (p == NULL)
+*** ../vim-8.1.0452/src/testdir/test_functions.vim 2018-09-03 22:08:05.676736128 +0200
+--- src/testdir/test_functions.vim 2018-10-06 15:14:28.462908180 +0200
+***************
+*** 800,805 ****
+--- 800,818 ----
+ bw!
+ endfunc
+
++ func Test_Executable()
++ if has('win32')
++ call assert_equal(1, executable('notepad'))
++ call assert_equal(1, executable('notepad.exe'))
++ call assert_equal(0, executable('notepad.exe.exe'))
++ call assert_equal(0, executable('shell32.dll'))
++ call assert_equal(0, executable('win.ini'))
++ elseif has('unix')
++ call assert_equal(1, executable('cat'))
++ call assert_equal(0, executable('dog'))
++ endif
++ endfunc
++
+ func Test_hostname()
+ let hostname_vim = hostname()
+ if has('unix')
+*** ../vim-8.1.0452/src/version.c 2018-10-06 15:02:53.797052261 +0200
+--- src/version.c 2018-10-06 15:15:48.630198494 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 453,
+ /**/
+
+--
+Send $25.00 for handy leaflet on how to make money by selling leaflets
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0454 b/data/vim/patches/8.1.0454
new file mode 100644
index 000000000..3df2b7ddd
--- /dev/null
+++ b/data/vim/patches/8.1.0454
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0454
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0454
+Problem: resolve() was not tested with a symlink cycle.
+Solution: Add a test. (Dominique Pelle, closes #3513)
+Files: src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0453/src/testdir/test_functions.vim 2018-10-06 15:18:41.616657339 +0200
+--- src/testdir/test_functions.vim 2018-10-06 15:41:03.832363288 +0200
+***************
+*** 190,195 ****
+--- 190,241 ----
+ call assert_fails('call strftime("%Y", [])', 'E745:')
+ endfunc
+
++ func Test_resolve()
++ if !has('unix')
++ return
++ endif
++
++ " Xlink1 -> Xlink2
++ " Xlink2 -> Xlink3
++ silent !ln -s -f Xlink2 Xlink1
++ silent !ln -s -f Xlink3 Xlink2
++ call assert_equal('Xlink3', resolve('Xlink1'))
++ call assert_equal('./Xlink3', resolve('./Xlink1'))
++ call assert_equal('Xlink3/', resolve('Xlink2/'))
++ " FIXME: these tests result in things like "Xlink2/" instead of "Xlink3/"?!
++ "call assert_equal('Xlink3/', resolve('Xlink1/'))
++ "call assert_equal('./Xlink3/', resolve('./Xlink1/'))
++ "call assert_equal(getcwd() . '/Xlink3/', resolve(getcwd() . '/Xlink1/'))
++ call assert_equal(getcwd() . '/Xlink3', resolve(getcwd() . '/Xlink1'))
++
++ " Test resolve() with a symlink cycle.
++ " Xlink1 -> Xlink2
++ " Xlink2 -> Xlink3
++ " Xlink3 -> Xlink1
++ silent !ln -s -f Xlink1 Xlink3
++ call assert_fails('call resolve("Xlink1")', 'E655:')
++ call assert_fails('call resolve("./Xlink1")', 'E655:')
++ call assert_fails('call resolve("Xlink2")', 'E655:')
++ call assert_fails('call resolve("Xlink3")', 'E655:')
++ call delete('Xlink1')
++ call delete('Xlink2')
++ call delete('Xlink3')
++
++ silent !ln -s -f Xdir//Xfile Xlink
++ call assert_equal('Xdir/Xfile', resolve('Xlink'))
++ call delete('Xlink')
++
++ silent !ln -s -f Xlink2/ Xlink1
++ call assert_equal('Xlink2', resolve('Xlink1'))
++ call assert_equal('Xlink2/', resolve('Xlink1/'))
++ call delete('Xlink1')
++
++ silent !ln -s -f ./Xlink2 Xlink1
++ call assert_equal('Xlink2', resolve('Xlink1'))
++ call assert_equal('./Xlink2', resolve('./Xlink1'))
++ call delete('Xlink1')
++ endfunc
++
+ func Test_simplify()
+ call assert_equal('', simplify(''))
+ call assert_equal('/', simplify('/'))
+*** ../vim-8.1.0453/src/version.c 2018-10-06 15:18:41.616657339 +0200
+--- src/version.c 2018-10-06 15:42:05.823641492 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 454,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+162. You go outside and look for a brightness knob to turn down the sun.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0455 b/data/vim/patches/8.1.0455
new file mode 100644
index 000000000..3aae4b76a
--- /dev/null
+++ b/data/vim/patches/8.1.0455
@@ -0,0 +1,238 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0455
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0455
+Problem: Checking for empty quickfix stack is not consistent.
+Solution: Use qf_stack_empty(). (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0454/src/quickfix.c 2018-09-28 23:09:50.558463030 +0200
+--- src/quickfix.c 2018-10-07 14:34:59.832140408 +0200
+***************
+*** 1499,1504 ****
+--- 1499,1513 ----
+ }
+
+ /*
++ * Returns TRUE if the specified quickfix/location stack is empty
++ */
++ static int
++ qf_stack_empty(qf_info_T *qi)
++ {
++ return qi == NULL || qi->qf_listcount <= 0;
++ }
++
++ /*
+ * Returns TRUE if the specified quickfix/location list is empty.
+ */
+ static int
+***************
+*** 3220,3227 ****
+ if (qi == NULL)
+ qi = &ql_info;
+
+! if (qi->qf_curlist >= qi->qf_listcount
+! || qf_list_empty(qi, qi->qf_curlist))
+ {
+ EMSG(_(e_quickfix));
+ return;
+--- 3229,3235 ----
+ if (qi == NULL)
+ qi = &ql_info;
+
+! if (qf_stack_empty(qi) || qf_list_empty(qi, qi->qf_curlist))
+ {
+ EMSG(_(e_quickfix));
+ return;
+***************
+*** 3412,3419 ****
+ }
+ }
+
+! if (qi->qf_curlist >= qi->qf_listcount
+! || qf_list_empty(qi, qi->qf_curlist))
+ {
+ EMSG(_(e_quickfix));
+ return;
+--- 3420,3426 ----
+ }
+ }
+
+! if (qf_stack_empty(qi) || qf_list_empty(qi, qi->qf_curlist))
+ {
+ EMSG(_(e_quickfix));
+ return;
+***************
+*** 3601,3608 ****
+
+ if (is_loclist_cmd(eap->cmdidx))
+ qi = GET_LOC_LIST(curwin);
+! if (qi == NULL || (qi->qf_listcount == 0
+! && qf_list_empty(qi, qi->qf_curlist)))
+ MSG(_("No entries"));
+ else
+ for (i = 0; i < qi->qf_listcount; ++i)
+--- 3608,3614 ----
+
+ if (is_loclist_cmd(eap->cmdidx))
+ qi = GET_LOC_LIST(curwin);
+! if (qf_stack_empty(qi) || qf_list_empty(qi, qi->qf_curlist))
+ MSG(_("No entries"));
+ else
+ for (i = 0; i < qi->qf_listcount; ++i)
+***************
+*** 3830,3838 ****
+ * close the window. If a quickfix window is not open, then open
+ * it if we have errors; otherwise, leave it closed.
+ */
+! if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
+! || qf_list_empty(qi, qi->qf_curlist)
+! || qi->qf_curlist >= qi->qf_listcount)
+ {
+ if (win != NULL)
+ ex_cclose(eap);
+--- 3836,3844 ----
+ * close the window. If a quickfix window is not open, then open
+ * it if we have errors; otherwise, leave it closed.
+ */
+! if (qf_stack_empty(qi)
+! || qi->qf_lists[qi->qf_curlist].qf_nonevalid
+! || qf_list_empty(qi, qi->qf_curlist))
+ {
+ if (win != NULL)
+ ex_cclose(eap);
+***************
+*** 4342,4348 ****
+ }
+
+ /* Check if there is anything to display */
+! if (qi->qf_curlist < qi->qf_listcount)
+ {
+ char_u dirname[MAXPATHL];
+
+--- 4348,4354 ----
+ }
+
+ /* Check if there is anything to display */
+! if (!qf_stack_empty(qi))
+ {
+ char_u dirname[MAXPATHL];
+
+***************
+*** 5333,5339 ****
+ if ((eap->cmdidx != CMD_grepadd && eap->cmdidx != CMD_lgrepadd
+ && eap->cmdidx != CMD_vimgrepadd
+ && eap->cmdidx != CMD_lvimgrepadd)
+! || qi->qf_curlist == qi->qf_listcount)
+ /* make place for a new list */
+ qf_new_list(qi, title != NULL ? title : qf_cmdtitle(*eap->cmdlinep));
+
+--- 5339,5345 ----
+ if ((eap->cmdidx != CMD_grepadd && eap->cmdidx != CMD_lgrepadd
+ && eap->cmdidx != CMD_vimgrepadd
+ && eap->cmdidx != CMD_lvimgrepadd)
+! || qf_stack_empty(qi))
+ /* make place for a new list */
+ qf_new_list(qi, title != NULL ? title : qf_cmdtitle(*eap->cmdlinep));
+
+***************
+*** 6107,6117 ****
+
+ flags = qf_getprop_keys2flags(what, (wp != NULL));
+
+! if (qi != NULL && qi->qf_listcount != 0)
+ qf_idx = qf_getprop_qfidx(qi, what);
+
+ /* List is not present or is empty */
+! if (qi == NULL || qi->qf_listcount == 0 || qf_idx == INVALID_QFIDX)
+ return qf_getprop_defaults(qi, flags, retdict);
+
+ qfl = &qi->qf_lists[qf_idx];
+--- 6113,6123 ----
+
+ flags = qf_getprop_keys2flags(what, (wp != NULL));
+
+! if (!qf_stack_empty(qi))
+ qf_idx = qf_getprop_qfidx(qi, what);
+
+ /* List is not present or is empty */
+! if (qf_stack_empty(qi) || qf_idx == INVALID_QFIDX)
+ return qf_getprop_defaults(qi, flags, retdict);
+
+ qfl = &qi->qf_lists[qf_idx];
+***************
+*** 6313,6319 ****
+ * stack.
+ */
+ *newlist = TRUE;
+! qf_idx = qi->qf_listcount > 0 ? qi->qf_listcount - 1 : 0;
+ }
+ else if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
+ return INVALID_QFIDX;
+--- 6319,6325 ----
+ * stack.
+ */
+ *newlist = TRUE;
+! qf_idx = qf_stack_empty(qi) ? 0 : qi->qf_listcount - 1;
+ }
+ else if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
+ return INVALID_QFIDX;
+***************
+*** 6324,6330 ****
+ && di->di_tv.vval.v_string != NULL
+ && STRCMP(di->di_tv.vval.v_string, "$") == 0)
+ {
+! if (qi->qf_listcount > 0)
+ qf_idx = qi->qf_listcount - 1;
+ else if (*newlist)
+ qf_idx = 0;
+--- 6330,6336 ----
+ && di->di_tv.vval.v_string != NULL
+ && STRCMP(di->di_tv.vval.v_string, "$") == 0)
+ {
+! if (!qf_stack_empty(qi))
+ qf_idx = qi->qf_listcount - 1;
+ else if (*newlist)
+ qf_idx = 0;
+***************
+*** 6452,6458 ****
+ int qf_idx;
+ int newlist = FALSE;
+
+! if (action == ' ' || qi->qf_curlist == qi->qf_listcount)
+ newlist = TRUE;
+
+ qf_idx = qf_setprop_get_qfidx(qi, what, action, &newlist);
+--- 6458,6464 ----
+ int qf_idx;
+ int newlist = FALSE;
+
+! if (action == ' ' || qf_stack_empty(qi))
+ newlist = TRUE;
+
+ qf_idx = qf_setprop_get_qfidx(qi, what, action, &newlist);
+*** ../vim-8.1.0454/src/version.c 2018-10-06 15:43:13.062876189 +0200
+--- src/version.c 2018-10-07 14:36:35.659323843 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 455,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+165. You have a web page burned into your glasses
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0456 b/data/vim/patches/8.1.0456
new file mode 100644
index 000000000..80c704354
--- /dev/null
+++ b/data/vim/patches/8.1.0456
@@ -0,0 +1,91 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0456
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0456
+Problem: Running test hangs when the input file is being edited.
+Solution: Use a SwapExists autocommand to ignore editing the test script.
+Files: src/testdir/Makefile, src/testdir/runtest.vim
+
+
+*** ../vim-8.1.0455/src/testdir/Makefile 2018-09-21 16:37:20.084248861 +0200
+--- src/testdir/Makefile 2018-10-07 15:34:14.706152514 +0200
+***************
+*** 9,16 ****
+
+ SCRIPTSOURCE = ../../runtime
+
+! # Change this to empty to see the verbose output of tests.
+! REDIR_TEST_TO_NULL = > /dev/null
+
+ # Uncomment this line to use valgrind for memory leaks and extra warnings.
+ # The output goes into a file "valgrind.testN"
+--- 9,18 ----
+
+ SCRIPTSOURCE = ../../runtime
+
+! # Comment out this line to see the verbose output of tests.
+! #
+! # Catches SwapExists to avoid hanging at the ATTENTION prompt.
+! REDIR_TEST_TO_NULL = --cmd 'au SwapExists * let v:swapchoice = "e"' > /dev/null
+
+ # Uncomment this line to use valgrind for memory leaks and extra warnings.
+ # The output goes into a file "valgrind.testN"
+*** ../vim-8.1.0455/src/testdir/runtest.vim 2018-08-19 17:03:57.365405046 +0200
+--- src/testdir/runtest.vim 2018-10-07 15:36:08.881535882 +0200
+***************
+*** 57,62 ****
+--- 57,75 ----
+ set encoding=latin1
+ endif
+
++ " REDIR_TEST_TO_NULL has a very permissive SwapExists autocommand which is for
++ " the test_name.vim file itself. Replace it here with a more restrictive one,
++ " so we still catch mistakes.
++ let s:test_script_fname = expand('%')
++ au! SwapExists * call HandleSwapExists()
++ func HandleSwapExists()
++ " Only ignore finding a swap file for the test script (the user might be
++ " editing it and do ":make test_name") and the output file.
++ if expand('<afile>') == 'messages' || expand('<afile>') =~ s:test_script_fname
++ let v:swapchoice = 'e'
++ endif
++ endfunc
++
+ " Avoid stopping at the "hit enter" prompt
+ set nomore
+
+***************
+*** 146,151 ****
+--- 159,165 ----
+
+ " Clear any autocommands
+ au!
++ au SwapExists * call HandleSwapExists()
+
+ " Close any extra tab pages and windows and make the current one not modified.
+ while tabpagenr('$') > 1
+*** ../vim-8.1.0455/src/version.c 2018-10-07 14:38:43.714247899 +0200
+--- src/version.c 2018-10-07 15:32:36.262911893 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 456,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+166. You have been on your computer soo long that you didn't realize
+ you had grandchildren.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0457 b/data/vim/patches/8.1.0457
new file mode 100644
index 000000000..4bb016bc7
--- /dev/null
+++ b/data/vim/patches/8.1.0457
@@ -0,0 +1,193 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0457
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0457 (after 8.1.0451)
+Problem: Win32 console: key mappings don't work.
+Solution: Use another solution for the keypad keys that doesn't break
+ mappings. Some values will be negative. (Mike Williams)
+Files: src/os_win32.c
+
+
+*** ../vim-8.1.0456/src/os_win32.c 2018-10-06 15:18:41.616657339 +0200
+--- src/os_win32.c 2018-10-07 15:49:37.060090624 +0200
+***************
+*** 852,858 ****
+ int chAlt;
+ } VirtKeyMap[] =
+ {
+! /* Key ANSI alone shift ctrl alt */
+ { VK_ESCAPE,FALSE, ESC, ESC, ESC, ESC, },
+
+ { VK_F1, TRUE, ';', 'T', '^', 'h', },
+--- 852,858 ----
+ int chAlt;
+ } VirtKeyMap[] =
+ {
+! // Key ANSI alone shift ctrl alt
+ { VK_ESCAPE,FALSE, ESC, ESC, ESC, ESC, },
+
+ { VK_F1, TRUE, ';', 'T', '^', 'h', },
+***************
+*** 865,913 ****
+ { VK_F8, TRUE, 'B', '[', 'e', 'o', },
+ { VK_F9, TRUE, 'C', '\\', 'f', 'p', },
+ { VK_F10, TRUE, 'D', ']', 'g', 'q', },
+! { VK_F11, TRUE, 0x85, 0x87, 0x89, 0x8B, },
+! { VK_F12, TRUE, 0x86, 0x88, 0x8a, 0x8c, },
+
+! { VK_HOME, TRUE, 'G', 0xc2, 'w', 0xc3, },
+! { VK_UP, TRUE, 'H', 0xc4, 0xc5, 0xc6, },
+! { VK_PRIOR, TRUE, 'I', 0xc7, 0x84, 0xc8, }, /*PgUp*/
+! { VK_LEFT, TRUE, 'K', 0xc9, 's', 0xca, },
+! { VK_RIGHT, TRUE, 'M', 0xcb, 't', 0xcc, },
+! { VK_END, TRUE, 'O', 0xcd, 'u', 0xce, },
+! { VK_DOWN, TRUE, 'P', 0xcf, 0xd0, 0xd1, },
+! { VK_NEXT, TRUE, 'Q', 0xd2, 'v', 0xd3, }, /*PgDn*/
+! { VK_INSERT,TRUE, 'R', 0xd4, 0xd5, 0xd6, },
+! { VK_DELETE,TRUE, 'S', 0xd7, 0xd8, 0xd9, },
+
+! { VK_SNAPSHOT,TRUE, 0, 0, 0, 'r', }, /*PrtScrn*/
+
+ #if 0
+! /* Most people don't have F13-F20, but what the hell... */
+! { VK_F13, TRUE, 0xda, 0xdb, 0xdc, 0xdd, },
+! { VK_F14, TRUE, 0xde, 0xdf, 0xe0, 0xe1, },
+! { VK_F15, TRUE, 0xe2, 0xe3, 0xe4, 0xe5, },
+! { VK_F16, TRUE, 0xe6, 0xe7, 0xe8, 0xe9, },
+! { VK_F17, TRUE, 0xea, 0xeb, 0xec, 0xed, },
+! { VK_F18, TRUE, 0xee, 0xef, 0xf0, 0xf1, },
+! { VK_F19, TRUE, 0xf2, 0xf3, 0xf4, 0xf5, },
+! { VK_F20, TRUE, 0xf6, 0xf7, 0xf8, 0xf9, },
+! #endif
+! { VK_ADD, TRUE, 'N', 'N', 'N', 'N', }, /* keyp '+' */
+! { VK_SUBTRACT, TRUE,'J', 'J', 'J', 'J', }, /* keyp '-' */
+! /* { VK_DIVIDE, TRUE,'N', 'N', 'N', 'N', }, keyp '/' */
+! { VK_MULTIPLY, TRUE,'7', '7', '7', '7', }, /* keyp '*' */
+!
+! { VK_NUMPAD0,TRUE, 0xda, 0xdb, 0xdc, 0xdd, },
+! { VK_NUMPAD1,TRUE, 0xde, 0xdf, 0xe0, 0xe1, },
+! { VK_NUMPAD2,TRUE, 0xe2, 0xe3, 0xe4, 0xe5, },
+! { VK_NUMPAD3,TRUE, 0xe6, 0xe7, 0xe8, 0xe9, },
+! { VK_NUMPAD4,TRUE, 0xea, 0xeb, 0xec, 0xed, },
+! { VK_NUMPAD5,TRUE, 0xee, 0xef, 0xf0, 0xf1, },
+! { VK_NUMPAD6,TRUE, 0xf2, 0xf3, 0xf4, 0xf5, },
+! { VK_NUMPAD7,TRUE, 0xf6, 0xf7, 0xf8, 0xf9, },
+! { VK_NUMPAD8,TRUE, 0xfa, 0xfb, 0xfc, 0xfd, },
+! /* Sorry, out of number space! <negri>*/
+! { VK_NUMPAD9,TRUE, 0xfe, 0xff, 0xff, 0xf7, },
+ };
+
+
+--- 865,914 ----
+ { VK_F8, TRUE, 'B', '[', 'e', 'o', },
+ { VK_F9, TRUE, 'C', '\\', 'f', 'p', },
+ { VK_F10, TRUE, 'D', ']', 'g', 'q', },
+! { VK_F11, TRUE, '\205', '\207', '\211', '\213', },
+! { VK_F12, TRUE, '\206', '\210', '\212', '\214', },
+
+! { VK_HOME, TRUE, 'G', '\302', 'w', '\303', },
+! { VK_UP, TRUE, 'H', '\304', '\305', '\306', },
+! { VK_PRIOR, TRUE, 'I', '\307', '\204', '\310', }, // PgUp
+! { VK_LEFT, TRUE, 'K', '\311', 's', '\312', },
+! { VK_RIGHT, TRUE, 'M', '\313', 't', '\314', },
+! { VK_END, TRUE, 'O', '\315', 'u', '\316', },
+! { VK_DOWN, TRUE, 'P', '\317', '\320', '\321', },
+! { VK_NEXT, TRUE, 'Q', '\322', 'v', '\323', }, // PgDn
+! { VK_INSERT,TRUE, 'R', '\324', '\325', '\326', },
+! { VK_DELETE,TRUE, 'S', '\327', '\330', '\331', },
+
+! { VK_SNAPSHOT,TRUE, 0, 0, 0, 'r', }, // PrtScrn
+
+ #if 0
+! // Most people don't have F13-F20, but what the hell...
+! { VK_F13, TRUE, '\332', '\333', '\334', '\335', },
+! { VK_F14, TRUE, '\336', '\337', '\340', '\341', },
+! { VK_F15, TRUE, '\342', '\343', '\344', '\345', },
+! { VK_F16, TRUE, '\346', '\347', '\350', '\351', },
+! { VK_F17, TRUE, '\352', '\353', '\354', '\355', },
+! { VK_F18, TRUE, '\356', '\357', '\360', '\361', },
+! { VK_F19, TRUE, '\362', '\363', '\364', '\365', },
+! { VK_F20, TRUE, '\366', '\367', '\370', '\371', },
+! #endif
+! { VK_ADD, TRUE, 'N', 'N', 'N', 'N', }, // keyp '+'
+! { VK_SUBTRACT, TRUE,'J', 'J', 'J', 'J', }, // keyp '-'
+! // { VK_DIVIDE, TRUE,'N', 'N', 'N', 'N', }, // keyp '/'
+! { VK_MULTIPLY, TRUE,'7', '7', '7', '7', }, // keyp '*'
+!
+! { VK_NUMPAD0,TRUE, '\332', '\333', '\334', '\335', },
+! { VK_NUMPAD1,TRUE, '\336', '\337', '\340', '\341', },
+! { VK_NUMPAD2,TRUE, '\342', '\343', '\344', '\345', },
+! { VK_NUMPAD3,TRUE, '\346', '\347', '\350', '\351', },
+! { VK_NUMPAD4,TRUE, '\352', '\353', '\354', '\355', },
+! { VK_NUMPAD5,TRUE, '\356', '\357', '\360', '\361', },
+! { VK_NUMPAD6,TRUE, '\362', '\363', '\364', '\365', },
+! { VK_NUMPAD7,TRUE, '\366', '\367', '\370', '\371', },
+! { VK_NUMPAD8,TRUE, '\372', '\373', '\374', '\375', },
+! // Sorry, out of number space! <negri>
+! { VK_NUMPAD9,TRUE, '\376', '\377', '\377', '\367', },
+!
+ };
+
+
+***************
+*** 1914,1924 ****
+ typeahead[typeaheadlen] = c;
+ if (ch2 != NUL)
+ {
+! if (c == K_NUL && (ch2 & 0xff00) != 0)
+ {
+! /* fAnsiKey with modifier keys */
+! typeahead[typeaheadlen + n] = (char_u)ch2;
+! n++;
+ }
+ else
+ {
+--- 1915,1938 ----
+ typeahead[typeaheadlen] = c;
+ if (ch2 != NUL)
+ {
+! if (c == K_NUL)
+ {
+! switch (ch2)
+! {
+! case (WCHAR)'\324': // SHIFT+Insert
+! case (WCHAR)'\325': // CTRL+Insert
+! case (WCHAR)'\327': // SHIFT+Delete
+! case (WCHAR)'\330': // CTRL+Delete
+! typeahead[typeaheadlen + n] = (char_u)ch2;
+! n++;
+! break;
+!
+! default:
+! typeahead[typeaheadlen + n] = 3;
+! typeahead[typeaheadlen + n + 1] = (char_u)ch2;
+! n += 2;
+! break;
+! }
+ }
+ else
+ {
+*** ../vim-8.1.0456/src/version.c 2018-10-07 15:42:04.279309175 +0200
+--- src/version.c 2018-10-07 15:48:23.012634542 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 457,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+167. You have more than 200 websites bookmarked.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0458 b/data/vim/patches/8.1.0458
new file mode 100644
index 000000000..387a61192
--- /dev/null
+++ b/data/vim/patches/8.1.0458
@@ -0,0 +1,109 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0458
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0458
+Problem: Ml_get error and crash when using "do".
+Solution: Adjust cursor position also when diffupdate is not needed.
+ (Hirohito Higashi)
+Files: src/diff.c, src/testdir/test_diffmode.vim
+
+
+*** ../vim-8.1.0457/src/diff.c 2018-09-18 21:20:22.507148523 +0200
+--- src/diff.c 2018-10-07 17:18:59.663334194 +0200
+***************
+*** 2848,2865 ****
+ theend:
+ diff_busy = FALSE;
+ if (diff_need_update)
+- {
+- diff_need_update = FALSE;
+ ex_diffupdate(NULL);
+! }
+ else
+ {
+- // Check that the cursor is on a valid character and update it's
+- // position. When there were filler lines the topline has become
+- // invalid.
+- check_cursor();
+- changed_line_abv_curs();
+-
+ // Also need to redraw the other buffers.
+ diff_redraw(FALSE);
+ apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
+--- 2848,2866 ----
+ theend:
+ diff_busy = FALSE;
+ if (diff_need_update)
+ ex_diffupdate(NULL);
+!
+! // Check that the cursor is on a valid character and update it's
+! // position. When there were filler lines the topline has become
+! // invalid.
+! check_cursor();
+! changed_line_abv_curs();
+!
+! if (diff_need_update)
+! // redraw already done by ex_diffupdate()
+! diff_need_update = FALSE;
+ else
+ {
+ // Also need to redraw the other buffers.
+ diff_redraw(FALSE);
+ apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
+*** ../vim-8.1.0457/src/testdir/test_diffmode.vim 2018-10-02 18:25:41.420867587 +0200
+--- src/testdir/test_diffmode.vim 2018-10-07 17:14:16.980965139 +0200
+***************
+*** 277,282 ****
+--- 277,304 ----
+ %bwipe!
+ endfunc
+
++ func Test_do_lastline()
++ e! one
++ call setline(1, ['1','2','3','4','5','6'])
++ diffthis
++
++ new two
++ call setline(1, ['2','4','5'])
++ diffthis
++
++ 1
++ norm dp]c
++ norm dp]c
++ wincmd w
++ call assert_equal(4, line('$'))
++ norm G
++ norm do
++ call assert_equal(3, line('$'))
++
++ windo diffoff
++ %bwipe!
++ endfunc
++
+ func Test_diffoff()
+ enew!
+ call setline(1, ['Two', 'Three'])
+*** ../vim-8.1.0457/src/version.c 2018-10-07 15:49:50.819989002 +0200
+--- src/version.c 2018-10-07 17:46:14.728013142 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 458,
+ /**/
+
+--
+"The question of whether computers can think is just like the question
+of whether submarines can swim." -- Edsger W. Dijkstra
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0459 b/data/vim/patches/8.1.0459
new file mode 100644
index 000000000..6cad6c289
--- /dev/null
+++ b/data/vim/patches/8.1.0459
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0459
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0459
+Problem: Test_executable fails when there is a dog in the system.
+Solution: Rename the dog. (Hirohito Higashi)
+Files: src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0458/src/testdir/test_functions.vim 2018-10-06 15:43:13.062876189 +0200
+--- src/testdir/test_functions.vim 2018-10-07 18:37:24.796308417 +0200
+***************
+*** 855,861 ****
+ call assert_equal(0, executable('win.ini'))
+ elseif has('unix')
+ call assert_equal(1, executable('cat'))
+! call assert_equal(0, executable('dog'))
+ endif
+ endfunc
+
+--- 855,861 ----
+ call assert_equal(0, executable('win.ini'))
+ elseif has('unix')
+ call assert_equal(1, executable('cat'))
+! call assert_equal(0, executable('nodogshere'))
+ endif
+ endfunc
+
+*** ../vim-8.1.0458/src/version.c 2018-10-07 17:46:37.699826982 +0200
+--- src/version.c 2018-10-07 18:41:07.553885998 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 459,
+ /**/
+
+--
+Apathy Error: Don't bother striking any key.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0460 b/data/vim/patches/8.1.0460
new file mode 100644
index 000000000..15d5d8617
--- /dev/null
+++ b/data/vim/patches/8.1.0460
@@ -0,0 +1,124 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0460
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0460
+Problem: assert_fails() does not take a message argument
+Solution: Add the argument.
+Files: src/evalfunc.c, src/eval.c, src/testdir/test_assert.vim
+
+
+*** ../vim-8.1.0459/src/evalfunc.c 2018-10-02 16:23:55.323037143 +0200
+--- src/evalfunc.c 2018-10-07 19:19:21.730142635 +0200
+***************
+*** 512,518 ****
+ {"assert_equal", 2, 3, f_assert_equal},
+ {"assert_equalfile", 2, 2, f_assert_equalfile},
+ {"assert_exception", 1, 2, f_assert_exception},
+! {"assert_fails", 1, 2, f_assert_fails},
+ {"assert_false", 1, 2, f_assert_false},
+ {"assert_inrange", 3, 4, f_assert_inrange},
+ {"assert_match", 2, 3, f_assert_match},
+--- 512,518 ----
+ {"assert_equal", 2, 3, f_assert_equal},
+ {"assert_equalfile", 2, 2, f_assert_equalfile},
+ {"assert_exception", 1, 2, f_assert_exception},
+! {"assert_fails", 1, 3, f_assert_fails},
+ {"assert_false", 1, 2, f_assert_false},
+ {"assert_inrange", 3, 4, f_assert_inrange},
+ {"assert_match", 2, 3, f_assert_match},
+***************
+*** 1507,1513 ****
+ }
+
+ /*
+! * "assert_fails(cmd [, error])" function
+ */
+ static void
+ f_assert_fails(typval_T *argvars, typval_T *rettv)
+--- 1507,1513 ----
+ }
+
+ /*
+! * "assert_fails(cmd [, error[, msg]])" function
+ */
+ static void
+ f_assert_fails(typval_T *argvars, typval_T *rettv)
+*** ../vim-8.1.0459/src/eval.c 2018-09-30 21:43:17.179693404 +0200
+--- src/eval.c 2018-10-07 19:41:59.353098530 +0200
+***************
+*** 9041,9046 ****
+--- 9041,9048 ----
+ char_u *cmd = get_tv_string_chk(&argvars[0]);
+ garray_T ga;
+ int ret = 0;
++ char_u numbuf[NUMBUFLEN];
++ char_u *tofree;
+
+ called_emsg = FALSE;
+ suppress_errthrow = TRUE;
+***************
+*** 9050,9056 ****
+ {
+ prepare_assert_error(&ga);
+ ga_concat(&ga, (char_u *)"command did not fail: ");
+! ga_concat(&ga, cmd);
+ assert_error(&ga);
+ ga_clear(&ga);
+ ret = 1;
+--- 9052,9065 ----
+ {
+ prepare_assert_error(&ga);
+ ga_concat(&ga, (char_u *)"command did not fail: ");
+! if (argvars[1].v_type != VAR_UNKNOWN
+! && argvars[2].v_type != VAR_UNKNOWN)
+! {
+! ga_concat(&ga, echo_string(&argvars[2], &tofree, numbuf, 0));
+! vim_free(tofree);
+! }
+! else
+! ga_concat(&ga, cmd);
+ assert_error(&ga);
+ ga_clear(&ga);
+ ret = 1;
+*** ../vim-8.1.0459/src/testdir/test_assert.vim 2018-06-12 14:58:35.566840630 +0200
+--- src/testdir/test_assert.vim 2018-10-07 20:13:06.084010801 +0200
+***************
+*** 152,157 ****
+--- 152,165 ----
+ call assert_equal(1, assert_fails('xxx', {}))
+ call assert_match("Expected {} but got 'E731:", v:errors[0])
+ call remove(v:errors, 0)
++
++ call assert_equal(1, assert_fails('xxx', {}, 'stupid'))
++ call assert_match("stupid: Expected {} but got 'E731:", v:errors[0])
++ call remove(v:errors, 0)
++
++ call assert_equal(1, assert_fails('echo', '', 'echo command'))
++ call assert_match("command did not fail: echo command", v:errors[0])
++ call remove(v:errors, 0)
+ endfunc
+
+ func Test_assert_beeps()
+*** ../vim-8.1.0459/src/version.c 2018-10-07 18:43:02.528682005 +0200
+--- src/version.c 2018-10-07 20:06:14.534617784 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 460,
+ /**/
+
+--
+Did you ever see a "Hit any key to continue" message in a music piece?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0461 b/data/vim/patches/8.1.0461
new file mode 100644
index 000000000..bf1088431
--- /dev/null
+++ b/data/vim/patches/8.1.0461
@@ -0,0 +1,4568 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0461
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0461
+Problem: Quickfix code uses too many /* */ comments.
+Solution: Change to // comments. (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0460/src/quickfix.c 2018-10-07 14:38:43.714247899 +0200
+--- src/quickfix.c 2018-10-07 20:20:56.652633675 +0200
+***************
+*** 27,46 ****
+ typedef struct qfline_S qfline_T;
+ struct qfline_S
+ {
+! qfline_T *qf_next; /* pointer to next error in the list */
+! qfline_T *qf_prev; /* pointer to previous error in the list */
+! linenr_T qf_lnum; /* line number where the error occurred */
+! int qf_fnum; /* file number for the line */
+! int qf_col; /* column where the error occurred */
+! int qf_nr; /* error number */
+! char_u *qf_module; /* module name for this error */
+! char_u *qf_pattern; /* search pattern for the error */
+! char_u *qf_text; /* description of the error */
+! char_u qf_viscol; /* set to TRUE if qf_col is screen column */
+! char_u qf_cleared; /* set to TRUE if line has been deleted */
+! char_u qf_type; /* type of the error (mostly 'E'); 1 for
+! :helpgrep */
+! char_u qf_valid; /* valid error message detected */
+ };
+
+ /*
+--- 27,46 ----
+ typedef struct qfline_S qfline_T;
+ struct qfline_S
+ {
+! qfline_T *qf_next; // pointer to next error in the list
+! qfline_T *qf_prev; // pointer to previous error in the list
+! linenr_T qf_lnum; // line number where the error occurred
+! int qf_fnum; // file number for the line
+! int qf_col; // column where the error occurred
+! int qf_nr; // error number
+! char_u *qf_module; // module name for this error
+! char_u *qf_pattern; // search pattern for the error
+! char_u *qf_text; // description of the error
+! char_u qf_viscol; // set to TRUE if qf_col is screen column
+! char_u qf_cleared; // set to TRUE if line has been deleted
+! char_u qf_type; // type of the error (mostly 'E'); 1 for
+! // :helpgrep
+! char_u qf_valid; // valid error message detected
+ };
+
+ /*
+***************
+*** 60,75 ****
+ */
+ typedef struct qf_list_S
+ {
+! int_u qf_id; /* Unique identifier for this list */
+! qfline_T *qf_start; /* pointer to the first error */
+! qfline_T *qf_last; /* pointer to the last error */
+! qfline_T *qf_ptr; /* pointer to the current error */
+! int qf_count; /* number of errors (0 means empty list) */
+! int qf_index; /* current index in the error list */
+! int qf_nonevalid; /* TRUE if not a single valid entry found */
+! char_u *qf_title; /* title derived from the command that created
+! * the error list or set by setqflist */
+! typval_T *qf_ctx; /* context set by setqflist/setloclist */
+
+ struct dir_stack_T *qf_dir_stack;
+ char_u *qf_directory;
+--- 60,75 ----
+ */
+ typedef struct qf_list_S
+ {
+! int_u qf_id; // Unique identifier for this list
+! qfline_T *qf_start; // pointer to the first error
+! qfline_T *qf_last; // pointer to the last error
+! qfline_T *qf_ptr; // pointer to the current error
+! int qf_count; // number of errors (0 means empty list)
+! int qf_index; // current index in the error list
+! int qf_nonevalid; // TRUE if not a single valid entry found
+! char_u *qf_title; // title derived from the command that created
+! // the error list or set by setqflist
+! typval_T *qf_ctx; // context set by setqflist/setloclist
+
+ struct dir_stack_T *qf_dir_stack;
+ char_u *qf_directory;
+***************
+*** 87,108 ****
+ */
+ struct qf_info_S
+ {
+! /*
+! * Count of references to this list. Used only for location lists.
+! * When a location list window reference this list, qf_refcount
+! * will be 2. Otherwise, qf_refcount will be 1. When qf_refcount
+! * reaches 0, the list is freed.
+! */
+ int qf_refcount;
+! int qf_listcount; /* current number of lists */
+! int qf_curlist; /* current error list */
+ qf_list_T qf_lists[LISTCOUNT];
+ };
+
+! static qf_info_T ql_info; /* global quickfix list */
+! static int_u last_qf_id = 0; /* Last used quickfix list id */
+
+! #define FMT_PATTERNS 11 /* maximum number of % recognized */
+
+ /*
+ * Structure used to hold the info of one part of 'errorformat'
+--- 87,106 ----
+ */
+ struct qf_info_S
+ {
+! // Count of references to this list. Used only for location lists.
+! // When a location list window reference this list, qf_refcount
+! // will be 2. Otherwise, qf_refcount will be 1. When qf_refcount
+! // reaches 0, the list is freed.
+ int qf_refcount;
+! int qf_listcount; // current number of lists
+! int qf_curlist; // current error list
+ qf_list_T qf_lists[LISTCOUNT];
+ };
+
+! static qf_info_T ql_info; // global quickfix list
+! static int_u last_qf_id = 0; // Last used quickfix list id
+
+! #define FMT_PATTERNS 11 // maximum number of % recognized
+
+ /*
+ * Structure used to hold the info of one part of 'errorformat'
+***************
+*** 110,138 ****
+ typedef struct efm_S efm_T;
+ struct efm_S
+ {
+! regprog_T *prog; /* pre-formatted part of 'errorformat' */
+! efm_T *next; /* pointer to next (NULL if last) */
+! char_u addr[FMT_PATTERNS]; /* indices of used % patterns */
+! char_u prefix; /* prefix of this format line: */
+! /* 'D' enter directory */
+! /* 'X' leave directory */
+! /* 'A' start of multi-line message */
+! /* 'E' error message */
+! /* 'W' warning message */
+! /* 'I' informational message */
+! /* 'C' continuation line */
+! /* 'Z' end of multi-line message */
+! /* 'G' general, unspecific message */
+! /* 'P' push file (partial) message */
+! /* 'Q' pop/quit file (partial) message */
+! /* 'O' overread (partial) message */
+! char_u flags; /* additional flags given in prefix */
+! /* '-' do not include this line */
+! /* '+' include whole line in message */
+! int conthere; /* %> used */
+ };
+
+! static efm_T *fmt_start = NULL; /* cached across qf_parse_line() calls */
+
+ static void qf_new_list(qf_info_T *qi, char_u *qf_title);
+ static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid);
+--- 108,136 ----
+ typedef struct efm_S efm_T;
+ struct efm_S
+ {
+! regprog_T *prog; // pre-formatted part of 'errorformat'
+! efm_T *next; // pointer to next (NULL if last)
+! char_u addr[FMT_PATTERNS]; // indices of used % patterns
+! char_u prefix; // prefix of this format line:
+! // 'D' enter directory
+! // 'X' leave directory
+! // 'A' start of multi-line message
+! // 'E' error message
+! // 'W' warning message
+! // 'I' informational message
+! // 'C' continuation line
+! // 'Z' end of multi-line message
+! // 'G' general, unspecific message
+! // 'P' push file (partial) message
+! // 'Q' pop/quit file (partial) message
+! // 'O' overread (partial) message
+! char_u flags; // additional flags given in prefix
+! // '-' do not include this line
+! // '+' include whole line in message
+! int conthere; // %> used
+ };
+
+! static efm_T *fmt_start = NULL; // cached across qf_parse_line() calls
+
+ static void qf_new_list(qf_info_T *qi, char_u *qf_title);
+ static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid);
+***************
+*** 153,161 ****
+ static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start);
+ static qf_info_T *ll_get_or_alloc_list(win_T *);
+
+! /* Quickfix window check helper macro */
+ #define IS_QF_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref == NULL)
+! /* Location list window check helper macro */
+ #define IS_LL_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL)
+
+ // Quickfix and location list stack check helper macros
+--- 151,159 ----
+ static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start);
+ static qf_info_T *ll_get_or_alloc_list(win_T *);
+
+! // Quickfix window check helper macro
+ #define IS_QF_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref == NULL)
+! // Location list window check helper macro
+ #define IS_LL_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL)
+
+ // Quickfix and location list stack check helper macros
+***************
+*** 189,195 ****
+ char *pattern;
+ } fmt_pat[FMT_PATTERNS] =
+ {
+! {'f', ".\\+"}, /* only used when at end */
+ {'n', "\\d\\+"},
+ {'l', "\\d\\+"},
+ {'c', "\\d\\+"},
+--- 187,193 ----
+ char *pattern;
+ } fmt_pat[FMT_PATTERNS] =
+ {
+! {'f', ".\\+"}, // only used when at end
+ {'n', "\\d\\+"},
+ {'l', "\\d\\+"},
+ {'c', "\\d\\+"},
+***************
+*** 221,227 ****
+
+ if (efminfo->addr[idx])
+ {
+! /* Each errorformat pattern can occur only once */
+ sprintf((char *)errmsg,
+ _("E372: Too many %%%c in format string"), *efmpat);
+ EMSG(errmsg);
+--- 219,225 ----
+
+ if (efminfo->addr[idx])
+ {
+! // Each errorformat pattern can occur only once
+ sprintf((char *)errmsg,
+ _("E372: Too many %%%c in format string"), *efmpat);
+ EMSG(errmsg);
+***************
+*** 243,251 ****
+ #ifdef BACKSLASH_IN_FILENAME
+ if (*efmpat == 'f')
+ {
+! /* Also match "c:" in the file name, even when
+! * checking for a colon next: "%f:".
+! * "\%(\a:\)\=" */
+ STRCPY(regpat, "\\%(\\a:\\)\\=");
+ regpat += 10;
+ }
+--- 241,249 ----
+ #ifdef BACKSLASH_IN_FILENAME
+ if (*efmpat == 'f')
+ {
+! // Also match "c:" in the file name, even when
+! // checking for a colon next: "%f:".
+! // "\%(\a:\)\="
+ STRCPY(regpat, "\\%(\\a:\\)\\=");
+ regpat += 10;
+ }
+***************
+*** 254,271 ****
+ {
+ if (efmpat[1] != '\\' && efmpat[1] != '%')
+ {
+! /* A file name may contain spaces, but this isn't
+! * in "\f". For "%f:%l:%m" there may be a ":" in
+! * the file name. Use ".\{-1,}x" instead (x is
+! * the next character), the requirement that :999:
+! * follows should work. */
+ STRCPY(regpat, ".\\{-1,}");
+ regpat += 7;
+ }
+ else
+ {
+! /* File name followed by '\\' or '%': include as
+! * many file name chars as possible. */
+ STRCPY(regpat, "\\f\\+");
+ regpat += 4;
+ }
+--- 252,269 ----
+ {
+ if (efmpat[1] != '\\' && efmpat[1] != '%')
+ {
+! // A file name may contain spaces, but this isn't
+! // in "\f". For "%f:%l:%m" there may be a ":" in
+! // the file name. Use ".\{-1,}x" instead (x is
+! // the next character), the requirement that :999:
+! // follows should work.
+ STRCPY(regpat, ".\\{-1,}");
+ regpat += 7;
+ }
+ else
+ {
+! // File name followed by '\\' or '%': include as
+! // many file name chars as possible.
+ STRCPY(regpat, "\\f\\+");
+ regpat += 4;
+ }
+***************
+*** 298,313 ****
+
+ if (*efmp == '[' || *efmp == '\\')
+ {
+! if ((*regpat++ = *efmp) == '[') /* %*[^a-z0-9] etc. */
+ {
+ if (efmp[1] == '^')
+ *regpat++ = *++efmp;
+ if (efmp < efm + len)
+ {
+! *regpat++ = *++efmp; /* could be ']' */
+ while (efmp < efm + len
+ && (*regpat++ = *++efmp) != ']')
+! /* skip */;
+ if (efmp == efm + len)
+ {
+ EMSG(_("E374: Missing ] in format string"));
+--- 296,311 ----
+
+ if (*efmp == '[' || *efmp == '\\')
+ {
+! if ((*regpat++ = *efmp) == '[') // %*[^a-z0-9] etc.
+ {
+ if (efmp[1] == '^')
+ *regpat++ = *++efmp;
+ if (efmp < efm + len)
+ {
+! *regpat++ = *++efmp; // could be ']'
+ while (efmp < efm + len
+ && (*regpat++ = *++efmp) != ']')
+! // skip ;
+ if (efmp == efm + len)
+ {
+ EMSG(_("E374: Missing ] in format string"));
+***************
+*** 315,328 ****
+ }
+ }
+ }
+! else if (efmp < efm + len) /* %*\D, %*\s etc. */
+ *regpat++ = *++efmp;
+ *regpat++ = '\\';
+ *regpat++ = '+';
+ }
+ else
+ {
+! /* TODO: scanf()-like: %*ud, %*3c, %*f, ... ? */
+ sprintf((char *)errmsg,
+ _("E375: Unsupported %%%c in format string"), *efmp);
+ EMSG(errmsg);
+--- 313,326 ----
+ }
+ }
+ }
+! else if (efmp < efm + len) // %*\D, %*\s etc.
+ *regpat++ = *++efmp;
+ *regpat++ = '\\';
+ *regpat++ = '+';
+ }
+ else
+ {
+! // TODO: scanf()-like: %*ud, %*3c, %*f, ... ?
+ sprintf((char *)errmsg,
+ _("E375: Unsupported %%%c in format string"), *efmp);
+ EMSG(errmsg);
+***************
+*** 374,382 ****
+ int round;
+ int idx = 0;
+
+! /*
+! * Build a regexp pattern for a 'errorformat' option part
+! */
+ ptr = regpat;
+ *ptr++ = '^';
+ round = 0;
+--- 372,378 ----
+ int round;
+ int idx = 0;
+
+! // Build a regexp pattern for a 'errorformat' option part
+ ptr = regpat;
+ *ptr++ = '^';
+ round = 0;
+***************
+*** 404,420 ****
+ return FAIL;
+ }
+ else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL)
+! *ptr++ = *efmp; /* regexp magic characters */
+ else if (*efmp == '#')
+ *ptr++ = '*';
+ else if (*efmp == '>')
+ fmt_ptr->conthere = TRUE;
+! else if (efmp == efm + 1) /* analyse prefix */
+ {
+! /*
+! * prefix is allowed only at the beginning of the errorformat
+! * option part
+! */
+ efmp = efm_analyze_prefix(efmp, fmt_ptr, errmsg);
+ if (efmp == NULL)
+ return FAIL;
+--- 400,414 ----
+ return FAIL;
+ }
+ else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL)
+! *ptr++ = *efmp; // regexp magic characters
+ else if (*efmp == '#')
+ *ptr++ = '*';
+ else if (*efmp == '>')
+ fmt_ptr->conthere = TRUE;
+! else if (efmp == efm + 1) // analyse prefix
+ {
+! // prefix is allowed only at the beginning of the errorformat
+! // option part
+ efmp = efm_analyze_prefix(efmp, fmt_ptr, errmsg);
+ if (efmp == NULL)
+ return FAIL;
+***************
+*** 427,438 ****
+ return FAIL;
+ }
+ }
+! else /* copy normal character */
+ {
+ if (*efmp == '\\' && efmp + 1 < efm + len)
+ ++efmp;
+ else if (vim_strchr((char_u *)".*^$~[", *efmp) != NULL)
+! *ptr++ = '\\'; /* escape regexp atoms */
+ if (*efmp)
+ *ptr++ = *efmp;
+ }
+--- 421,432 ----
+ return FAIL;
+ }
+ }
+! else // copy normal character
+ {
+ if (*efmp == '\\' && efmp + 1 < efm + len)
+ ++efmp;
+ else if (vim_strchr((char_u *)".*^$~[", *efmp) != NULL)
+! *ptr++ = '\\'; // escape regexp atoms
+ if (*efmp)
+ *ptr++ = *efmp;
+ }
+***************
+*** 474,482 ****
+ for (i = FMT_PATTERNS; i > 0; )
+ sz += (int)STRLEN(fmt_pat[--i].pattern);
+ #ifdef BACKSLASH_IN_FILENAME
+! sz += 12; /* "%f" can become twelve chars longer (see efm_to_regpat) */
+ #else
+! sz += 2; /* "%f" can become two chars longer */
+ #endif
+
+ return sz;
+--- 468,476 ----
+ for (i = FMT_PATTERNS; i > 0; )
+ sz += (int)STRLEN(fmt_pat[--i].pattern);
+ #ifdef BACKSLASH_IN_FILENAME
+! sz += 12; // "%f" can become twelve chars longer (see efm_to_regpat)
+ #else
+! sz += 2; // "%f" can become two chars longer
+ #endif
+
+ return sz;
+***************
+*** 519,566 ****
+ if (errmsg == NULL)
+ goto parse_efm_end;
+
+! /*
+! * Each part of the format string is copied and modified from errorformat
+! * to regex prog. Only a few % characters are allowed.
+! */
+!
+! /*
+! * Get some space to modify the format string into.
+! */
+ sz = efm_regpat_bufsz(efm);
+ if ((fmtstr = alloc(sz)) == NULL)
+ goto parse_efm_error;
+
+ while (efm[0] != NUL)
+ {
+! /*
+! * Allocate a new eformat structure and put it at the end of the list
+! */
+ fmt_ptr = (efm_T *)alloc_clear((unsigned)sizeof(efm_T));
+ if (fmt_ptr == NULL)
+ goto parse_efm_error;
+! if (fmt_first == NULL) /* first one */
+ fmt_first = fmt_ptr;
+ else
+ fmt_last->next = fmt_ptr;
+ fmt_last = fmt_ptr;
+
+! /*
+! * Isolate one part in the 'errorformat' option
+! */
+ len = efm_option_part_len(efm);
+
+ if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == FAIL)
+ goto parse_efm_error;
+ if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL)
+ goto parse_efm_error;
+! /*
+! * Advance to next part
+! */
+! efm = skip_to_option_part(efm + len); /* skip comma and spaces */
+ }
+
+! if (fmt_first == NULL) /* nothing found */
+ EMSG(_("E378: 'errorformat' contains no pattern"));
+
+ goto parse_efm_end;
+--- 513,550 ----
+ if (errmsg == NULL)
+ goto parse_efm_end;
+
+! // Each part of the format string is copied and modified from errorformat
+! // to regex prog. Only a few % characters are allowed.
+!
+! // Get some space to modify the format string into.
+ sz = efm_regpat_bufsz(efm);
+ if ((fmtstr = alloc(sz)) == NULL)
+ goto parse_efm_error;
+
+ while (efm[0] != NUL)
+ {
+! // Allocate a new eformat structure and put it at the end of the list
+ fmt_ptr = (efm_T *)alloc_clear((unsigned)sizeof(efm_T));
+ if (fmt_ptr == NULL)
+ goto parse_efm_error;
+! if (fmt_first == NULL) // first one
+ fmt_first = fmt_ptr;
+ else
+ fmt_last->next = fmt_ptr;
+ fmt_last = fmt_ptr;
+
+! // Isolate one part in the 'errorformat' option
+ len = efm_option_part_len(efm);
+
+ if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == FAIL)
+ goto parse_efm_error;
+ if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL)
+ goto parse_efm_error;
+! // Advance to next part
+! efm = skip_to_option_part(efm + len); // skip comma and spaces
+ }
+
+! if (fmt_first == NULL) // nothing found
+ EMSG(_("E378: 'errorformat' contains no pattern"));
+
+ goto parse_efm_end;
+***************
+*** 611,620 ****
+ {
+ char_u *p;
+
+! /*
+! * If the line exceeds LINE_MAXLEN exclude the last
+! * byte since it's not a NL character.
+! */
+ state->linelen = newsz > LINE_MAXLEN ? LINE_MAXLEN - 1 : newsz;
+ if (state->growbuf == NULL)
+ {
+--- 595,602 ----
+ {
+ char_u *p;
+
+! // If the line exceeds LINE_MAXLEN exclude the last
+! // byte since it's not a NL character.
+ state->linelen = newsz > LINE_MAXLEN ? LINE_MAXLEN - 1 : newsz;
+ if (state->growbuf == NULL)
+ {
+***************
+*** 639,650 ****
+ static int
+ qf_get_next_str_line(qfstate_T *state)
+ {
+! /* Get the next line from the supplied string */
+ char_u *p_str = state->p_str;
+ char_u *p;
+ int len;
+
+! if (*p_str == NUL) /* Reached the end of the string */
+ return QF_END_OF_INPUT;
+
+ p = vim_strchr(p_str, '\n');
+--- 621,632 ----
+ static int
+ qf_get_next_str_line(qfstate_T *state)
+ {
+! // Get the next line from the supplied string
+ char_u *p_str = state->p_str;
+ char_u *p;
+ int len;
+
+! if (*p_str == NUL) // Reached the end of the string
+ return QF_END_OF_INPUT;
+
+ p = vim_strchr(p_str, '\n');
+***************
+*** 666,675 ****
+ }
+ vim_strncpy(state->linebuf, p_str, state->linelen);
+
+! /*
+! * Increment using len in order to discard the rest of the
+! * line if it exceeds LINE_MAXLEN.
+! */
+ p_str += len;
+ state->p_str = p_str;
+
+--- 648,655 ----
+ }
+ vim_strncpy(state->linebuf, p_str, state->linelen);
+
+! // Increment using len in order to discard the rest of the
+! // line if it exceeds LINE_MAXLEN.
+ p_str += len;
+ state->p_str = p_str;
+
+***************
+*** 688,696 ****
+ while (p_li != NULL
+ && (p_li->li_tv.v_type != VAR_STRING
+ || p_li->li_tv.vval.v_string == NULL))
+! p_li = p_li->li_next; /* Skip non-string items */
+
+! if (p_li == NULL) /* End of the list */
+ {
+ state->p_li = NULL;
+ return QF_END_OF_INPUT;
+--- 668,676 ----
+ while (p_li != NULL
+ && (p_li->li_tv.v_type != VAR_STRING
+ || p_li->li_tv.vval.v_string == NULL))
+! p_li = p_li->li_next; // Skip non-string items
+
+! if (p_li == NULL) // End of the list
+ {
+ state->p_li = NULL;
+ return QF_END_OF_INPUT;
+***************
+*** 711,717 ****
+
+ vim_strncpy(state->linebuf, p_li->li_tv.vval.v_string, state->linelen);
+
+! state->p_li = p_li->li_next; /* next item */
+ return QF_OK;
+ }
+
+--- 691,697 ----
+
+ vim_strncpy(state->linebuf, p_li->li_tv.vval.v_string, state->linelen);
+
+! state->p_li = p_li->li_next; // next item
+ return QF_OK;
+ }
+
+***************
+*** 724,730 ****
+ char_u *p_buf = NULL;
+ int len;
+
+! /* Get the next line from the supplied buffer */
+ if (state->buflnum > state->lnumlast)
+ return QF_END_OF_INPUT;
+
+--- 704,710 ----
+ char_u *p_buf = NULL;
+ int len;
+
+! // Get the next line from the supplied buffer
+ if (state->buflnum > state->lnumlast)
+ return QF_END_OF_INPUT;
+
+***************
+*** 764,773 ****
+ state->linelen = (int)STRLEN(IObuff);
+ if (state->linelen == IOSIZE - 1 && !(IObuff[state->linelen - 1] == '\n'))
+ {
+! /*
+! * The current line exceeds IObuff, continue reading using
+! * growbuf until EOL or LINE_MAXLEN bytes is read.
+! */
+ if (state->growbuf == NULL)
+ {
+ state->growbufsiz = 2 * (IOSIZE - 1);
+--- 744,751 ----
+ state->linelen = (int)STRLEN(IObuff);
+ if (state->linelen == IOSIZE - 1 && !(IObuff[state->linelen - 1] == '\n'))
+ {
+! // The current line exceeds IObuff, continue reading using
+! // growbuf until EOL or LINE_MAXLEN bytes is read.
+ if (state->growbuf == NULL)
+ {
+ state->growbufsiz = 2 * (IOSIZE - 1);
+***************
+*** 776,782 ****
+ return QF_NOMEM;
+ }
+
+! /* Copy the read part of the line, excluding null-terminator */
+ memcpy(state->growbuf, IObuff, IOSIZE - 1);
+ growbuflen = state->linelen;
+
+--- 754,760 ----
+ return QF_NOMEM;
+ }
+
+! // Copy the read part of the line, excluding null-terminator
+ memcpy(state->growbuf, IObuff, IOSIZE - 1);
+ growbuflen = state->linelen;
+
+***************
+*** 806,816 ****
+
+ while (discard)
+ {
+! /*
+! * The current line is longer than LINE_MAXLEN, continue
+! * reading but discard everything until EOL or EOF is
+! * reached.
+! */
+ if (fgets((char *)IObuff, IOSIZE, state->fd) == NULL
+ || (int)STRLEN(IObuff) < IOSIZE - 1
+ || IObuff[IOSIZE - 1] == '\n')
+--- 784,792 ----
+
+ while (discard)
+ {
+! // The current line is longer than LINE_MAXLEN, continue
+! // reading but discard everything until EOL or EOF is
+! // reached.
+ if (fgets((char *)IObuff, IOSIZE, state->fd) == NULL
+ || (int)STRLEN(IObuff) < IOSIZE - 1
+ || IObuff[IOSIZE - 1] == '\n')
+***************
+*** 824,830 ****
+ state->linebuf = IObuff;
+
+ #ifdef FEAT_MBYTE
+! /* Convert a line if it contains a non-ASCII character. */
+ if (state->vc.vc_type != CONV_NONE && has_non_ascii(state->linebuf))
+ {
+ char_u *line;
+--- 800,806 ----
+ state->linebuf = IObuff;
+
+ #ifdef FEAT_MBYTE
+! // Convert a line if it contains a non-ASCII character.
+ if (state->vc.vc_type != CONV_NONE && has_non_ascii(state->linebuf))
+ {
+ char_u *line;
+***************
+*** 864,887 ****
+ if (state->tv != NULL)
+ {
+ if (state->tv->v_type == VAR_STRING)
+! /* Get the next line from the supplied string */
+ status = qf_get_next_str_line(state);
+ else if (state->tv->v_type == VAR_LIST)
+! /* Get the next line from the supplied list */
+ status = qf_get_next_list_line(state);
+ }
+ else
+! /* Get the next line from the supplied buffer */
+ status = qf_get_next_buf_line(state);
+ }
+ else
+! /* Get the next line from the supplied file */
+ status = qf_get_next_file_line(state);
+
+ if (status != QF_OK)
+ return status;
+
+! /* remove newline/CR from the line */
+ if (state->linelen > 0 && state->linebuf[state->linelen - 1] == '\n')
+ {
+ state->linebuf[state->linelen - 1] = NUL;
+--- 840,863 ----
+ if (state->tv != NULL)
+ {
+ if (state->tv->v_type == VAR_STRING)
+! // Get the next line from the supplied string
+ status = qf_get_next_str_line(state);
+ else if (state->tv->v_type == VAR_LIST)
+! // Get the next line from the supplied list
+ status = qf_get_next_list_line(state);
+ }
+ else
+! // Get the next line from the supplied buffer
+ status = qf_get_next_buf_line(state);
+ }
+ else
+! // Get the next line from the supplied file
+ status = qf_get_next_file_line(state);
+
+ if (status != QF_OK)
+ return status;
+
+! // remove newline/CR from the line
+ if (state->linelen > 0 && state->linebuf[state->linelen - 1] == '\n')
+ {
+ state->linebuf[state->linelen - 1] = NUL;
+***************
+*** 924,939 ****
+ if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL)
+ return QF_FAIL;
+
+! /* Expand ~/file and $HOME/file to full path. */
+ c = *rmp->endp[midx];
+ *rmp->endp[midx] = NUL;
+ expand_env(rmp->startp[midx], fields->namebuf, CMDBUFFSIZE);
+ *rmp->endp[midx] = c;
+
+! /*
+! * For separate filename patterns (%O, %P and %Q), the specified file
+! * should exist.
+! */
+ if (vim_strchr((char_u *)"OPQ", prefix) != NULL
+ && mch_getperm(fields->namebuf) == -1)
+ return QF_FAIL;
+--- 900,913 ----
+ if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL)
+ return QF_FAIL;
+
+! // Expand ~/file and $HOME/file to full path.
+ c = *rmp->endp[midx];
+ *rmp->endp[midx] = NUL;
+ expand_env(rmp->startp[midx], fields->namebuf, CMDBUFFSIZE);
+ *rmp->endp[midx] = c;
+
+! // For separate filename patterns (%O, %P and %Q), the specified file
+! // should exist.
+ if (vim_strchr((char_u *)"OPQ", prefix) != NULL
+ && mch_getperm(fields->namebuf) == -1)
+ return QF_FAIL;
+***************
+*** 1004,1010 ****
+
+ if (linelen >= fields->errmsglen)
+ {
+! /* linelen + null terminator */
+ if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL)
+ return QF_NOMEM;
+ fields->errmsg = p;
+--- 978,984 ----
+
+ if (linelen >= fields->errmsglen)
+ {
+! // linelen + null terminator
+ if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL)
+ return QF_NOMEM;
+ fields->errmsg = p;
+***************
+*** 1029,1035 ****
+ len = (int)(rmp->endp[midx] - rmp->startp[midx]);
+ if (len >= fields->errmsglen)
+ {
+! /* len + null terminator */
+ if ((p = vim_realloc(fields->errmsg, len + 1)) == NULL)
+ return QF_NOMEM;
+ fields->errmsg = p;
+--- 1003,1009 ----
+ len = (int)(rmp->endp[midx] - rmp->startp[midx]);
+ if (len >= fields->errmsglen)
+ {
+! // len + null terminator
+ if ((p = vim_realloc(fields->errmsg, len + 1)) == NULL)
+ return QF_NOMEM;
+ fields->errmsg = p;
+***************
+*** 1181,1207 ****
+ fields->type = idx;
+ else
+ fields->type = 0;
+! /*
+! * Extract error message data from matched line.
+! * We check for an actual submatch, because "\[" and "\]" in
+! * the 'errorformat' may cause the wrong submatch to be used.
+! */
+ for (i = 0; i < FMT_PATTERNS; i++)
+ {
+ status = QF_OK;
+ midx = (int)fmt_ptr->addr[i];
+! if (i == 0 && midx > 0) /* %f */
+ status = qf_parse_fmt_f(regmatch, midx, fields, idx);
+ else if (i == 5)
+ {
+! if (fmt_ptr->flags == '+' && !qf_multiscan) /* %+ */
+ status = qf_parse_fmt_plus(linebuf, linelen, fields);
+! else if (midx > 0) /* %m */
+ status = qf_parse_fmt_m(regmatch, midx, fields);
+ }
+! else if (i == 6 && midx > 0) /* %r */
+ status = qf_parse_fmt_r(regmatch, midx, tail);
+! else if (midx > 0) /* others */
+ status = (qf_parse_fmt[i])(regmatch, midx, fields);
+
+ if (status != QF_OK)
+--- 1155,1180 ----
+ fields->type = idx;
+ else
+ fields->type = 0;
+!
+! // Extract error message data from matched line.
+! // We check for an actual submatch, because "\[" and "\]" in
+! // the 'errorformat' may cause the wrong submatch to be used.
+ for (i = 0; i < FMT_PATTERNS; i++)
+ {
+ status = QF_OK;
+ midx = (int)fmt_ptr->addr[i];
+! if (i == 0 && midx > 0) // %f
+ status = qf_parse_fmt_f(regmatch, midx, fields, idx);
+ else if (i == 5)
+ {
+! if (fmt_ptr->flags == '+' && !qf_multiscan) // %+
+ status = qf_parse_fmt_plus(linebuf, linelen, fields);
+! else if (midx > 0) // %m
+ status = qf_parse_fmt_m(regmatch, midx, fields);
+ }
+! else if (i == 6 && midx > 0) // %r
+ status = qf_parse_fmt_r(regmatch, midx, tail);
+! else if (midx > 0) // others
+ status = (qf_parse_fmt[i])(regmatch, midx, fields);
+
+ if (status != QF_OK)
+***************
+*** 1247,1253 ****
+ fields->type = 0;
+ *tail = NULL;
+
+! /* Always ignore case when looking for a matching error. */
+ regmatch.rm_ic = TRUE;
+ regmatch.regprog = fmt_ptr->prog;
+ r = vim_regexec(&regmatch, linebuf, (colnr_T)0);
+--- 1220,1226 ----
+ fields->type = 0;
+ *tail = NULL;
+
+! // Always ignore case when looking for a matching error.
+ regmatch.rm_ic = TRUE;
+ regmatch.regprog = fmt_ptr->prog;
+ r = vim_regexec(&regmatch, linebuf, (colnr_T)0);
+***************
+*** 1267,1273 ****
+ static int
+ qf_parse_dir_pfx(int idx, qffields_T *fields, qf_list_T *qfl)
+ {
+! if (idx == 'D') /* enter directory */
+ {
+ if (*fields->namebuf == NUL)
+ {
+--- 1240,1246 ----
+ static int
+ qf_parse_dir_pfx(int idx, qffields_T *fields, qf_list_T *qfl)
+ {
+! if (idx == 'D') // enter directory
+ {
+ if (*fields->namebuf == NUL)
+ {
+***************
+*** 1279,1285 ****
+ if (qfl->qf_directory == NULL)
+ return QF_FAIL;
+ }
+! else if (idx == 'X') /* leave directory */
+ qfl->qf_directory = qf_pop_dir(&qfl->qf_dir_stack);
+
+ return QF_OK;
+--- 1252,1258 ----
+ if (qfl->qf_directory == NULL)
+ return QF_FAIL;
+ }
+! else if (idx == 'X') // leave directory
+ qfl->qf_directory = qf_pop_dir(&qfl->qf_dir_stack);
+
+ return QF_OK;
+***************
+*** 1324,1341 ****
+ {
+ char_u *p;
+
+! fields->namebuf[0] = NUL; /* no match found, remove file name */
+! fields->lnum = 0; /* don't jump to this line */
+ fields->valid = FALSE;
+ if (linelen >= fields->errmsglen)
+ {
+! /* linelen + null terminator */
+ if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL)
+ return QF_NOMEM;
+ fields->errmsg = p;
+ fields->errmsglen = linelen + 1;
+ }
+! /* copy whole line to error message */
+ vim_strncpy(fields->errmsg, linebuf, linelen);
+
+ return QF_OK;
+--- 1297,1314 ----
+ {
+ char_u *p;
+
+! fields->namebuf[0] = NUL; // no match found, remove file name
+! fields->lnum = 0; // don't jump to this line
+ fields->valid = FALSE;
+ if (linelen >= fields->errmsglen)
+ {
+! // linelen + null terminator
+ if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL)
+ return QF_NOMEM;
+ fields->errmsg = p;
+ fields->errmsglen = linelen + 1;
+ }
+! // copy whole line to error message
+ vim_strncpy(fields->errmsg, linebuf, linelen);
+
+ return QF_OK;
+***************
+*** 1376,1382 ****
+ if (qfprev->qf_nr == -1)
+ qfprev->qf_nr = fields->enr;
+ if (vim_isprintc(fields->type) && !qfprev->qf_type)
+! /* only printable chars allowed */
+ qfprev->qf_type = fields->type;
+
+ if (!qfprev->qf_lnum)
+--- 1349,1355 ----
+ if (qfprev->qf_nr == -1)
+ qfprev->qf_nr = fields->enr;
+ if (vim_isprintc(fields->type) && !qfprev->qf_type)
+! // only printable chars allowed
+ qfprev->qf_type = fields->type;
+
+ if (!qfprev->qf_lnum)
+***************
+*** 1419,1438 ****
+ int status;
+
+ restofline:
+! /* If there was no %> item start at the first pattern */
+ if (fmt_start == NULL)
+ fmt_ptr = fmt_first;
+ else
+ {
+! /* Otherwise start from the last used pattern */
+ fmt_ptr = fmt_start;
+ fmt_start = NULL;
+ }
+
+! /*
+! * Try to match each part of 'errorformat' until we find a complete
+! * match or no match.
+! */
+ fields->valid = TRUE;
+ for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next)
+ {
+--- 1392,1409 ----
+ int status;
+
+ restofline:
+! // If there was no %> item start at the first pattern
+ if (fmt_start == NULL)
+ fmt_ptr = fmt_first;
+ else
+ {
+! // Otherwise start from the last used pattern
+ fmt_ptr = fmt_start;
+ fmt_start = NULL;
+ }
+
+! // Try to match each part of 'errorformat' until we find a complete
+! // match or no match.
+ fields->valid = TRUE;
+ for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next)
+ {
+***************
+*** 1450,1456 ****
+ {
+ if (fmt_ptr != NULL)
+ {
+! /* 'D' and 'X' directory specifiers */
+ status = qf_parse_dir_pfx(idx, fields, qfl);
+ if (status != QF_OK)
+ return status;
+--- 1421,1427 ----
+ {
+ if (fmt_ptr != NULL)
+ {
+! // 'D' and 'X' directory specifiers
+ status = qf_parse_dir_pfx(idx, fields, qfl);
+ if (status != QF_OK)
+ return status;
+***************
+*** 1465,1495 ****
+ }
+ else if (fmt_ptr != NULL)
+ {
+! /* honor %> item */
+ if (fmt_ptr->conthere)
+ fmt_start = fmt_ptr;
+
+ if (vim_strchr((char_u *)"AEWI", idx) != NULL)
+ {
+! qfl->qf_multiline = TRUE; /* start of a multi-line message */
+! qfl->qf_multiignore = FALSE;/* reset continuation */
+ }
+ else if (vim_strchr((char_u *)"CZ", idx) != NULL)
+! { /* continuation of multi-line msg */
+ status = qf_parse_multiline_pfx(qi, qf_idx, idx, qfl, fields);
+ if (status != QF_OK)
+ return status;
+ }
+ else if (vim_strchr((char_u *)"OPQ", idx) != NULL)
+! { /* global file names */
+ status = qf_parse_file_pfx(idx, fields, qfl, tail);
+ if (status == QF_MULTISCAN)
+ goto restofline;
+ }
+! if (fmt_ptr->flags == '-') /* generally exclude this line */
+ {
+ if (qfl->qf_multiline)
+! /* also exclude continuation lines */
+ qfl->qf_multiignore = TRUE;
+ return QF_IGNORE_LINE;
+ }
+--- 1436,1466 ----
+ }
+ else if (fmt_ptr != NULL)
+ {
+! // honor %> item
+ if (fmt_ptr->conthere)
+ fmt_start = fmt_ptr;
+
+ if (vim_strchr((char_u *)"AEWI", idx) != NULL)
+ {
+! qfl->qf_multiline = TRUE; // start of a multi-line message
+! qfl->qf_multiignore = FALSE;// reset continuation
+ }
+ else if (vim_strchr((char_u *)"CZ", idx) != NULL)
+! { // continuation of multi-line msg
+ status = qf_parse_multiline_pfx(qi, qf_idx, idx, qfl, fields);
+ if (status != QF_OK)
+ return status;
+ }
+ else if (vim_strchr((char_u *)"OPQ", idx) != NULL)
+! { // global file names
+ status = qf_parse_file_pfx(idx, fields, qfl, tail);
+ if (status == QF_MULTISCAN)
+ goto restofline;
+ }
+! if (fmt_ptr->flags == '-') // generally exclude this line
+ {
+ if (qfl->qf_multiline)
+! // also exclude continuation lines
+ qfl->qf_multiignore = TRUE;
+ return QF_IGNORE_LINE;
+ }
+***************
+*** 1624,1632 ****
+ buf_T *buf,
+ typval_T *tv,
+ char_u *errorformat,
+! int newlist, /* TRUE: start a new error list */
+! linenr_T lnumfirst, /* first line number to use */
+! linenr_T lnumlast, /* last line number to use */
+ char_u *qf_title,
+ char_u *enc)
+ {
+--- 1595,1603 ----
+ buf_T *buf,
+ typval_T *tv,
+ char_u *errorformat,
+! int newlist, // TRUE: start a new error list
+! linenr_T lnumfirst, // first line number to use
+! linenr_T lnumlast, // last line number to use
+ char_u *qf_title,
+ char_u *enc)
+ {
+***************
+*** 1638,1647 ****
+ static efm_T *fmt_first = NULL;
+ char_u *efm;
+ static char_u *last_efm = NULL;
+! int retval = -1; /* default: return error flag */
+ int status;
+
+! /* Do not used the cached buffer, it may have been wiped out. */
+ VIM_CLEAR(qf_last_bufname);
+
+ vim_memset(&state, 0, sizeof(state));
+--- 1609,1618 ----
+ static efm_T *fmt_first = NULL;
+ char_u *efm;
+ static char_u *last_efm = NULL;
+! int retval = -1; // default: return error flag
+ int status;
+
+! // Do not used the cached buffer, it may have been wiped out.
+ VIM_CLEAR(qf_last_bufname);
+
+ vim_memset(&state, 0, sizeof(state));
+***************
+*** 1653,1665 ****
+
+ if (newlist || qf_idx == qi->qf_listcount)
+ {
+! /* make place for a new list */
+ qf_new_list(qi, qf_title);
+ qf_idx = qi->qf_curlist;
+ }
+ else
+ {
+! /* Adding to existing list, use last entry. */
+ adding = TRUE;
+ if (!qf_list_empty(qi, qf_idx))
+ old_last = qi->qf_lists[qf_idx].qf_last;
+--- 1624,1636 ----
+
+ if (newlist || qf_idx == qi->qf_listcount)
+ {
+! // make place for a new list
+ qf_new_list(qi, qf_title);
+ qf_idx = qi->qf_curlist;
+ }
+ else
+ {
+! // Adding to existing list, use last entry.
+ adding = TRUE;
+ if (!qf_list_empty(qi, qf_idx))
+ old_last = qi->qf_lists[qf_idx].qf_last;
+***************
+*** 1667,1714 ****
+
+ qfl = &qi->qf_lists[qf_idx];
+
+! /* Use the local value of 'errorformat' if it's set. */
+ if (errorformat == p_efm && tv == NULL && *buf->b_p_efm != NUL)
+ efm = buf->b_p_efm;
+ else
+ efm = errorformat;
+
+! /*
+! * If the errorformat didn't change between calls, then reuse the
+! * previously parsed values.
+! */
+ if (last_efm == NULL || (STRCMP(last_efm, efm) != 0))
+ {
+! /* free the previously parsed data */
+ VIM_CLEAR(last_efm);
+ free_efm_list(&fmt_first);
+
+! /* parse the current 'efm' */
+ fmt_first = parse_efm_option(efm);
+ if (fmt_first != NULL)
+ last_efm = vim_strsave(efm);
+ }
+
+! if (fmt_first == NULL) /* nothing found */
+ goto error2;
+
+! /*
+! * got_int is reset here, because it was probably set when killing the
+! * ":make" command, but we still want to read the errorfile then.
+! */
+ got_int = FALSE;
+
+! /*
+! * Read the lines in the error file one by one.
+! * Try to recognize one of the error formats in each line.
+! */
+ while (!got_int)
+ {
+! /* Get the next line from a file/buffer/list/string */
+ status = qf_get_nextline(&state);
+! if (status == QF_NOMEM) /* memory alloc failure */
+ goto qf_init_end;
+! if (status == QF_END_OF_INPUT) /* end of input */
+ break;
+
+ status = qf_parse_line(qi, qf_idx, state.linebuf, state.linelen,
+--- 1638,1679 ----
+
+ qfl = &qi->qf_lists[qf_idx];
+
+! // Use the local value of 'errorformat' if it's set.
+ if (errorformat == p_efm && tv == NULL && *buf->b_p_efm != NUL)
+ efm = buf->b_p_efm;
+ else
+ efm = errorformat;
+
+! // If the errorformat didn't change between calls, then reuse the
+! // previously parsed values.
+ if (last_efm == NULL || (STRCMP(last_efm, efm) != 0))
+ {
+! // free the previously parsed data
+ VIM_CLEAR(last_efm);
+ free_efm_list(&fmt_first);
+
+! // parse the current 'efm'
+ fmt_first = parse_efm_option(efm);
+ if (fmt_first != NULL)
+ last_efm = vim_strsave(efm);
+ }
+
+! if (fmt_first == NULL) // nothing found
+ goto error2;
+
+! // got_int is reset here, because it was probably set when killing the
+! // ":make" command, but we still want to read the errorfile then.
+ got_int = FALSE;
+
+! // Read the lines in the error file one by one.
+! // Try to recognize one of the error formats in each line.
+ while (!got_int)
+ {
+! // Get the next line from a file/buffer/list/string
+ status = qf_get_nextline(&state);
+! if (status == QF_NOMEM) // memory alloc failure
+ goto qf_init_end;
+! if (status == QF_END_OF_INPUT) // end of input
+ break;
+
+ status = qf_parse_line(qi, qf_idx, state.linebuf, state.linelen,
+***************
+*** 1744,1750 ****
+ {
+ if (qfl->qf_index == 0)
+ {
+! /* no valid entry found */
+ qfl->qf_ptr = qfl->qf_start;
+ qfl->qf_index = 1;
+ qfl->qf_nonevalid = TRUE;
+--- 1709,1715 ----
+ {
+ if (qfl->qf_index == 0)
+ {
+! // no valid entry found
+ qfl->qf_ptr = qfl->qf_start;
+ qfl->qf_index = 1;
+ qfl->qf_nonevalid = TRUE;
+***************
+*** 1755,1761 ****
+ if (qfl->qf_ptr == NULL)
+ qfl->qf_ptr = qfl->qf_start;
+ }
+! /* return number of matches */
+ retval = qfl->qf_count;
+ goto qf_init_end;
+ }
+--- 1720,1726 ----
+ if (qfl->qf_ptr == NULL)
+ qfl->qf_ptr = qfl->qf_start;
+ }
+! // return number of matches
+ retval = qfl->qf_count;
+ goto qf_init_end;
+ }
+***************
+*** 1763,1769 ****
+ error2:
+ if (!adding)
+ {
+! /* Error when creating a new list. Free the new list */
+ qf_free(&qi->qf_lists[qi->qf_curlist]);
+ qi->qf_listcount--;
+ if (qi->qf_curlist > 0)
+--- 1728,1734 ----
+ error2:
+ if (!adding)
+ {
+! // Error when creating a new list. Free the new list
+ qf_free(&qi->qf_lists[qi->qf_curlist]);
+ qi->qf_listcount--;
+ if (qi->qf_curlist > 0)
+***************
+*** 1787,1793 ****
+ qf_init(win_T *wp,
+ char_u *efile,
+ char_u *errorformat,
+! int newlist, /* TRUE: start a new error list */
+ char_u *qf_title,
+ char_u *enc)
+ {
+--- 1752,1758 ----
+ qf_init(win_T *wp,
+ char_u *efile,
+ char_u *errorformat,
+! int newlist, // TRUE: start a new error list
+ char_u *qf_title,
+ char_u *enc)
+ {
+***************
+*** 1848,1865 ****
+ {
+ int i;
+
+! /*
+! * If the current entry is not the last entry, delete entries beyond
+! * the current entry. This makes it possible to browse in a tree-like
+! * way with ":grep'.
+! */
+ while (qi->qf_listcount > qi->qf_curlist + 1)
+ qf_free(&qi->qf_lists[--qi->qf_listcount]);
+
+! /*
+! * When the stack is full, remove to oldest entry
+! * Otherwise, add a new entry.
+! */
+ if (qi->qf_listcount == LISTCOUNT)
+ {
+ qf_free(&qi->qf_lists[0]);
+--- 1813,1826 ----
+ {
+ int i;
+
+! // If the current entry is not the last entry, delete entries beyond
+! // the current entry. This makes it possible to browse in a tree-like
+! // way with ":grep'.
+ while (qi->qf_listcount > qi->qf_curlist + 1)
+ qf_free(&qi->qf_lists[--qi->qf_listcount]);
+
+! // When the stack is full, remove to oldest entry
+! // Otherwise, add a new entry.
+ if (qi->qf_listcount == LISTCOUNT)
+ {
+ qf_free(&qi->qf_lists[0]);
+***************
+*** 1886,1897 ****
+ qi = *pqi;
+ if (qi == NULL)
+ return;
+! *pqi = NULL; /* Remove reference to this list */
+
+ qi->qf_refcount--;
+ if (qi->qf_refcount < 1)
+ {
+! /* No references to this location list */
+ for (i = 0; i < qi->qf_listcount; ++i)
+ qf_free(&qi->qf_lists[i]);
+ vim_free(qi);
+--- 1847,1858 ----
+ qi = *pqi;
+ if (qi == NULL)
+ return;
+! *pqi = NULL; // Remove reference to this list
+
+ qi->qf_refcount--;
+ if (qi->qf_refcount < 1)
+ {
+! // No references to this location list
+ for (i = 0; i < qi->qf_listcount; ++i)
+ qf_free(&qi->qf_lists[i]);
+ vim_free(qi);
+***************
+*** 1909,1920 ****
+
+ if (wp != NULL)
+ {
+! /* location list */
+ ll_free_all(&wp->w_llist);
+ ll_free_all(&wp->w_llist_ref);
+ }
+ else
+! /* quickfix list */
+ for (i = 0; i < qi->qf_listcount; ++i)
+ qf_free(&qi->qf_lists[i]);
+ }
+--- 1870,1881 ----
+
+ if (wp != NULL)
+ {
+! // location list
+ ll_free_all(&wp->w_llist);
+ ll_free_all(&wp->w_llist_ref);
+ }
+ else
+! // quickfix list
+ for (i = 0; i < qi->qf_listcount; ++i)
+ qf_free(&qi->qf_lists[i]);
+ }
+***************
+*** 1925,1948 ****
+ */
+ static int
+ qf_add_entry(
+! qf_info_T *qi, /* quickfix list */
+! int qf_idx, /* list index */
+! char_u *dir, /* optional directory name */
+! char_u *fname, /* file name or NULL */
+! char_u *module, /* module name or NULL */
+! int bufnum, /* buffer number or zero */
+! char_u *mesg, /* message */
+! long lnum, /* line number */
+! int col, /* column */
+! int vis_col, /* using visual column */
+! char_u *pattern, /* search pattern */
+! int nr, /* error number */
+! int type, /* type character */
+! int valid) /* valid entry */
+ {
+ qf_list_T *qfl = &qi->qf_lists[qf_idx];
+ qfline_T *qfp;
+! qfline_T **lastp; /* pointer to qf_last or NULL */
+
+ if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL)
+ return FAIL;
+--- 1886,1909 ----
+ */
+ static int
+ qf_add_entry(
+! qf_info_T *qi, // quickfix list
+! int qf_idx, // list index
+! char_u *dir, // optional directory name
+! char_u *fname, // file name or NULL
+! char_u *module, // module name or NULL
+! int bufnum, // buffer number or zero
+! char_u *mesg, // message
+! long lnum, // line number
+! int col, // column
+! int vis_col, // using visual column
+! char_u *pattern, // search pattern
+! int nr, // error number
+! int type, // type character
+! int valid) // valid entry
+ {
+ qf_list_T *qfl = &qi->qf_lists[qf_idx];
+ qfline_T *qfp;
+! qfline_T **lastp; // pointer to qf_last or NULL
+
+ if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL)
+ return FAIL;
+***************
+*** 1983,1995 ****
+ return FAIL;
+ }
+ qfp->qf_nr = nr;
+! if (type != 1 && !vim_isprintc(type)) /* only printable chars allowed */
+ type = 0;
+ qfp->qf_type = type;
+ qfp->qf_valid = valid;
+
+ lastp = &qfl->qf_last;
+! if (qf_list_empty(qi, qf_idx)) /* first element in the list */
+ {
+ qfl->qf_start = qfp;
+ qfl->qf_ptr = qfp;
+--- 1944,1956 ----
+ return FAIL;
+ }
+ qfp->qf_nr = nr;
+! if (type != 1 && !vim_isprintc(type)) // only printable chars allowed
+ type = 0;
+ qfp->qf_type = type;
+ qfp->qf_valid = valid;
+
+ lastp = &qfl->qf_last;
+! if (qf_list_empty(qi, qf_idx)) // first element in the list
+ {
+ qfl->qf_start = qfp;
+ qfl->qf_ptr = qfp;
+***************
+*** 2005,2012 ****
+ qfp->qf_cleared = FALSE;
+ *lastp = qfp;
+ ++qfl->qf_count;
+! if (qfl->qf_index == 0 && qfp->qf_valid)
+! /* first valid entry */
+ {
+ qfl->qf_index = qfl->qf_count;
+ qfl->qf_ptr = qfp;
+--- 1966,1972 ----
+ qfp->qf_cleared = FALSE;
+ *lastp = qfp;
+ ++qfl->qf_count;
+! if (qfl->qf_index == 0 && qfp->qf_valid) // first valid entry
+ {
+ qfl->qf_index = qfl->qf_count;
+ qfl->qf_ptr = qfp;
+***************
+*** 2037,2053 ****
+ ll_get_or_alloc_list(win_T *wp)
+ {
+ if (IS_LL_WINDOW(wp))
+! /* For a location list window, use the referenced location list */
+ return wp->w_llist_ref;
+
+! /*
+! * For a non-location list window, w_llist_ref should not point to a
+! * location list.
+! */
+ ll_free_all(&wp->w_llist_ref);
+
+ if (wp->w_llist == NULL)
+! wp->w_llist = ll_new_list(); /* new location list */
+ return wp->w_llist;
+ }
+
+--- 1997,2011 ----
+ ll_get_or_alloc_list(win_T *wp)
+ {
+ if (IS_LL_WINDOW(wp))
+! // For a location list window, use the referenced location list
+ return wp->w_llist_ref;
+
+! // For a non-location list window, w_llist_ref should not point to a
+! // location list.
+ ll_free_all(&wp->w_llist_ref);
+
+ if (wp->w_llist == NULL)
+! wp->w_llist = ll_new_list(); // new location list
+ return wp->w_llist;
+ }
+
+***************
+*** 2195,2201 ****
+ buf_T *buf;
+ char_u *bufname;
+
+! if (fname == NULL || *fname == NUL) /* no file name */
+ return 0;
+
+ #ifdef VMS
+--- 2153,2159 ----
+ buf_T *buf;
+ char_u *bufname;
+
+! if (fname == NULL || *fname == NUL) // no file name
+ return 0;
+
+ #ifdef VMS
+***************
+*** 2209,2220 ****
+ if (directory != NULL && !vim_isAbsName(fname)
+ && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+ {
+! /*
+! * Here we check if the file really exists.
+! * This should normally be true, but if make works without
+! * "leaving directory"-messages we might have missed a
+! * directory change.
+! */
+ if (mch_getperm(ptr) < 0)
+ {
+ vim_free(ptr);
+--- 2167,2176 ----
+ if (directory != NULL && !vim_isAbsName(fname)
+ && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+ {
+! // Here we check if the file really exists.
+! // This should normally be true, but if make works without
+! // "leaving directory"-messages we might have missed a
+! // directory change.
+ if (mch_getperm(ptr) < 0)
+ {
+ vim_free(ptr);
+***************
+*** 2224,2230 ****
+ else
+ ptr = vim_strsave(fname);
+ }
+! /* Use concatenated directory name and file name */
+ bufname = ptr;
+ }
+ else
+--- 2180,2186 ----
+ else
+ ptr = vim_strsave(fname);
+ }
+! // Use concatenated directory name and file name
+ bufname = ptr;
+ }
+ else
+***************
+*** 2264,2270 ****
+ struct dir_stack_T *ds_new;
+ struct dir_stack_T *ds_ptr;
+
+! /* allocate new stack element and hook it in */
+ ds_new = (struct dir_stack_T *)alloc((unsigned)sizeof(struct dir_stack_T));
+ if (ds_new == NULL)
+ return NULL;
+--- 2220,2226 ----
+ struct dir_stack_T *ds_new;
+ struct dir_stack_T *ds_ptr;
+
+! // allocate new stack element and hook it in
+ ds_new = (struct dir_stack_T *)alloc((unsigned)sizeof(struct dir_stack_T));
+ if (ds_new == NULL)
+ return NULL;
+***************
+*** 2272,2288 ****
+ ds_new->next = *stackptr;
+ *stackptr = ds_new;
+
+! /* store directory on the stack */
+ if (vim_isAbsName(dirbuf)
+ || (*stackptr)->next == NULL
+ || (*stackptr && is_file_stack))
+ (*stackptr)->dirname = vim_strsave(dirbuf);
+ else
+ {
+! /* Okay we don't have an absolute path.
+! * dirbuf must be a subdir of one of the directories on the stack.
+! * Let's search...
+! */
+ ds_new = (*stackptr)->next;
+ (*stackptr)->dirname = NULL;
+ while (ds_new)
+--- 2228,2243 ----
+ ds_new->next = *stackptr;
+ *stackptr = ds_new;
+
+! // store directory on the stack
+ if (vim_isAbsName(dirbuf)
+ || (*stackptr)->next == NULL
+ || (*stackptr && is_file_stack))
+ (*stackptr)->dirname = vim_strsave(dirbuf);
+ else
+ {
+! // Okay we don't have an absolute path.
+! // dirbuf must be a subdir of one of the directories on the stack.
+! // Let's search...
+ ds_new = (*stackptr)->next;
+ (*stackptr)->dirname = NULL;
+ while (ds_new)
+***************
+*** 2296,2302 ****
+ ds_new = ds_new->next;
+ }
+
+! /* clean up all dirs we already left */
+ while ((*stackptr)->next != ds_new)
+ {
+ ds_ptr = (*stackptr)->next;
+--- 2251,2257 ----
+ ds_new = ds_new->next;
+ }
+
+! // clean up all dirs we already left
+ while ((*stackptr)->next != ds_new)
+ {
+ ds_ptr = (*stackptr)->next;
+***************
+*** 2305,2311 ****
+ vim_free(ds_ptr);
+ }
+
+! /* Nothing found -> it must be on top level */
+ if (ds_new == NULL)
+ {
+ vim_free((*stackptr)->dirname);
+--- 2260,2266 ----
+ vim_free(ds_ptr);
+ }
+
+! // Nothing found -> it must be on top level
+ if (ds_new == NULL)
+ {
+ vim_free((*stackptr)->dirname);
+***************
+*** 2333,2342 ****
+ {
+ struct dir_stack_T *ds_ptr;
+
+! /* TODO: Should we check if dirbuf is the directory on top of the stack?
+! * What to do if it isn't? */
+
+! /* pop top element and free it */
+ if (*stackptr != NULL)
+ {
+ ds_ptr = *stackptr;
+--- 2288,2297 ----
+ {
+ struct dir_stack_T *ds_ptr;
+
+! // TODO: Should we check if dirbuf is the directory on top of the stack?
+! // What to do if it isn't?
+
+! // pop top element and free it
+ if (*stackptr != NULL)
+ {
+ ds_ptr = *stackptr;
+***************
+*** 2345,2351 ****
+ vim_free(ds_ptr);
+ }
+
+! /* return NEW top element as current dir or NULL if stack is empty*/
+ return *stackptr ? (*stackptr)->dirname : NULL;
+ }
+
+--- 2300,2306 ----
+ vim_free(ds_ptr);
+ }
+
+! // return NEW top element as current dir or NULL if stack is empty
+ return *stackptr ? (*stackptr)->dirname : NULL;
+ }
+
+***************
+*** 2392,2398 ****
+ struct dir_stack_T *ds_tmp;
+ char_u *fullname;
+
+! /* no dirs on the stack - there's nothing we can do */
+ if (qfl->qf_dir_stack == NULL)
+ return NULL;
+
+--- 2347,2353 ----
+ struct dir_stack_T *ds_tmp;
+ char_u *fullname;
+
+! // no dirs on the stack - there's nothing we can do
+ if (qfl->qf_dir_stack == NULL)
+ return NULL;
+
+***************
+*** 2403,2411 ****
+ vim_free(fullname);
+ fullname = concat_fnames(ds_ptr->dirname, filename, TRUE);
+
+! /* If concat_fnames failed, just go on. The worst thing that can happen
+! * is that we delete the entire stack.
+! */
+ if ((fullname != NULL) && (mch_getperm(fullname) >= 0))
+ break;
+
+--- 2358,2365 ----
+ vim_free(fullname);
+ fullname = concat_fnames(ds_ptr->dirname, filename, TRUE);
+
+! // If concat_fnames failed, just go on. The worst thing that can happen
+! // is that we delete the entire stack.
+ if ((fullname != NULL) && (mch_getperm(fullname) >= 0))
+ break;
+
+***************
+*** 2414,2420 ****
+
+ vim_free(fullname);
+
+! /* clean up all dirs we already left */
+ while (qfl->qf_dir_stack->next != ds_ptr)
+ {
+ ds_tmp = qfl->qf_dir_stack->next;
+--- 2368,2374 ----
+
+ vim_free(fullname);
+
+! // clean up all dirs we already left
+ while (qfl->qf_dir_stack->next != ds_ptr)
+ {
+ ds_tmp = qfl->qf_dir_stack->next;
+***************
+*** 2437,2443 ****
+
+ if (wp != NULL)
+ {
+! qi = GET_LOC_LIST(wp); /* Location list */
+ if (qi == NULL)
+ return FALSE;
+ }
+--- 2391,2397 ----
+
+ if (wp != NULL)
+ {
+! qi = GET_LOC_LIST(wp); // Location list
+ if (qi == NULL)
+ return FALSE;
+ }
+***************
+*** 2461,2473 ****
+ qfline_T *qfp;
+ int i;
+
+! /* Search for the entry in the current list */
+ for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count;
+ ++i, qfp = qfp->qf_next)
+ if (qfp == NULL || qfp == qf_ptr)
+ break;
+
+! if (i == qfl->qf_count) /* Entry is not found */
+ return FALSE;
+
+ return TRUE;
+--- 2415,2427 ----
+ qfline_T *qfp;
+ int i;
+
+! // Search for the entry in the current list
+ for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count;
+ ++i, qfp = qfp->qf_next)
+ if (qfp == NULL || qfp == qf_ptr)
+ break;
+
+! if (i == qfl->qf_count) // Entry is not found
+ return FALSE;
+
+ return TRUE;
+***************
+*** 2667,2682 ****
+ win_enter(wp, TRUE);
+ else
+ {
+! /*
+! * Split off help window; put it at far top if no position
+! * specified, the current window is vertically split and narrow.
+! */
+ flags = WSP_HELP;
+ if (cmdmod.split == 0 && curwin->w_width != Columns
+ && curwin->w_width < 80)
+ flags |= WSP_TOP;
+ if (IS_LL_STACK(qi))
+! flags |= WSP_NEWLOC; /* don't copy the location list */
+
+ if (win_split(0, flags) == FAIL)
+ return FAIL;
+--- 2621,2634 ----
+ win_enter(wp, TRUE);
+ else
+ {
+! // Split off help window; put it at far top if no position
+! // specified, the current window is vertically split and narrow.
+ flags = WSP_HELP;
+ if (cmdmod.split == 0 && curwin->w_width != Columns
+ && curwin->w_width < 80)
+ flags |= WSP_TOP;
+ if (IS_LL_STACK(qi))
+! flags |= WSP_NEWLOC; // don't copy the location list
+
+ if (win_split(0, flags) == FAIL)
+ return FAIL;
+***************
+*** 2688,2701 ****
+
+ if (IS_LL_STACK(qi)) // not a quickfix list
+ {
+! /* The new window should use the supplied location list */
+ curwin->w_llist = qi;
+ qi->qf_refcount++;
+ }
+ }
+
+ if (!p_im)
+! restart_edit = 0; /* don't want insert mode in help file */
+
+ return OK;
+ }
+--- 2640,2653 ----
+
+ if (IS_LL_STACK(qi)) // not a quickfix list
+ {
+! // The new window should use the supplied location list
+ curwin->w_llist = qi;
+ qi->qf_refcount++;
+ }
+ }
+
+ if (!p_im)
+! restart_edit = 0; // don't want insert mode in help file
+
+ return OK;
+ }
+***************
+*** 2764,2777 ****
+ if (ll_ref != NULL)
+ flags |= WSP_NEWLOC;
+ if (win_split(0, flags) == FAIL)
+! return FAIL; /* not enough room for window */
+! p_swb = empty_option; /* don't split again */
+ swb_flags = 0;
+ RESET_BINDING(curwin);
+ if (ll_ref != NULL)
+ {
+! /* The new window should use the location list from the
+! * location list window */
+ curwin->w_llist = ll_ref;
+ ll_ref->qf_refcount++;
+ }
+--- 2716,2729 ----
+ if (ll_ref != NULL)
+ flags |= WSP_NEWLOC;
+ if (win_split(0, flags) == FAIL)
+! return FAIL; // not enough room for window
+! p_swb = empty_option; // don't split again
+ swb_flags = 0;
+ RESET_BINDING(curwin);
+ if (ll_ref != NULL)
+ {
+! // The new window should use the location list from the
+! // location list window
+ curwin->w_llist = ll_ref;
+ ll_ref->qf_refcount++;
+ }
+***************
+*** 2791,2819 ****
+
+ if (win == NULL)
+ {
+! /* Find the window showing the selected file */
+ FOR_ALL_WINDOWS(win)
+ if (win->w_buffer->b_fnum == qf_fnum)
+ break;
+ if (win == NULL)
+ {
+! /* Find a previous usable window */
+ win = curwin;
+ do
+ {
+ if (bt_normal(win->w_buffer))
+ break;
+ if (win->w_prev == NULL)
+! win = lastwin; /* wrap around the top */
+ else
+! win = win->w_prev; /* go to previous window */
+ } while (win != curwin);
+ }
+ }
+ win_goto(win);
+
+! /* If the location list for the window is not set, then set it
+! * to the location list from the location window */
+ if (win->w_llist == NULL)
+ {
+ win->w_llist = ll_ref;
+--- 2743,2771 ----
+
+ if (win == NULL)
+ {
+! // Find the window showing the selected file
+ FOR_ALL_WINDOWS(win)
+ if (win->w_buffer->b_fnum == qf_fnum)
+ break;
+ if (win == NULL)
+ {
+! // Find a previous usable window
+ win = curwin;
+ do
+ {
+ if (bt_normal(win->w_buffer))
+ break;
+ if (win->w_prev == NULL)
+! win = lastwin; // wrap around the top
+ else
+! win = win->w_prev; // go to previous window
+ } while (win != curwin);
+ }
+ }
+ win_goto(win);
+
+! // If the location list for the window is not set, then set it
+! // to the location list from the location window
+ if (win->w_llist == NULL)
+ {
+ win->w_llist = ll_ref;
+***************
+*** 2841,2854 ****
+ if (win->w_buffer->b_fnum == qf_fnum)
+ break;
+ if (win->w_prev == NULL)
+! win = lastwin; /* wrap around the top */
+ else
+! win = win->w_prev; /* go to previous window */
+
+ if (IS_QF_WINDOW(win))
+ {
+! /* Didn't find it, go to the window before the quickfix
+! * window. */
+ if (altwin != NULL)
+ win = altwin;
+ else if (curwin->w_prev != NULL)
+--- 2793,2806 ----
+ if (win->w_buffer->b_fnum == qf_fnum)
+ break;
+ if (win->w_prev == NULL)
+! win = lastwin; // wrap around the top
+ else
+! win = win->w_prev; // go to previous window
+
+ if (IS_QF_WINDOW(win))
+ {
+! // Didn't find it, go to the window before the quickfix
+! // window.
+ if (altwin != NULL)
+ win = altwin;
+ else if (curwin->w_prev != NULL)
+***************
+*** 2858,2864 ****
+ break;
+ }
+
+! /* Remember a usable window. */
+ if (altwin == NULL && !win->w_p_pvw && bt_normal(win->w_buffer))
+ altwin = win;
+ }
+--- 2810,2816 ----
+ break;
+ }
+
+! // Remember a usable window.
+ if (altwin == NULL && !win->w_p_pvw && bt_normal(win->w_buffer))
+ altwin = win;
+ }
+***************
+*** 2885,2891 ****
+ ll_ref = curwin->w_llist_ref;
+ if (ll_ref != NULL)
+ {
+! /* Find a non-quickfix window with this location list */
+ usable_win_ptr = qf_find_win_with_loclist(ll_ref);
+ if (usable_win_ptr != NULL)
+ usable_win = 1;
+--- 2837,2843 ----
+ ll_ref = curwin->w_llist_ref;
+ if (ll_ref != NULL)
+ {
+! // Find a non-quickfix window with this location list
+ usable_win_ptr = qf_find_win_with_loclist(ll_ref);
+ if (usable_win_ptr != NULL)
+ usable_win = 1;
+***************
+*** 2893,2926 ****
+
+ if (!usable_win)
+ {
+! /* Locate a window showing a normal buffer */
+ win = qf_find_win_with_normal_buf();
+ if (win != NULL)
+ usable_win = 1;
+ }
+
+! /*
+! * If no usable window is found and 'switchbuf' contains "usetab"
+! * then search in other tabs.
+! */
+ if (!usable_win && (swb_flags & SWB_USETAB))
+ usable_win = qf_goto_tabwin_with_file(qf_fnum);
+
+! /*
+! * If there is only one window and it is the quickfix window, create a
+! * new one above the quickfix window.
+! */
+ if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win)
+ {
+ if (qf_open_new_file_win(ll_ref) != OK)
+ return FAIL;
+! *opened_window = TRUE; /* close it when fail */
+ }
+ else
+ {
+! if (curwin->w_llist_ref != NULL) /* In a location window */
+ qf_goto_win_with_ll_file(usable_win_ptr, qf_fnum, ll_ref);
+! else /* In a quickfix window */
+ qf_goto_win_with_qfl_file(qf_fnum);
+ }
+
+--- 2845,2874 ----
+
+ if (!usable_win)
+ {
+! // Locate a window showing a normal buffer
+ win = qf_find_win_with_normal_buf();
+ if (win != NULL)
+ usable_win = 1;
+ }
+
+! // If no usable window is found and 'switchbuf' contains "usetab"
+! // then search in other tabs.
+ if (!usable_win && (swb_flags & SWB_USETAB))
+ usable_win = qf_goto_tabwin_with_file(qf_fnum);
+
+! // If there is only one window and it is the quickfix window, create a
+! // new one above the quickfix window.
+ if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win)
+ {
+ if (qf_open_new_file_win(ll_ref) != OK)
+ return FAIL;
+! *opened_window = TRUE; // close it when fail
+ }
+ else
+ {
+! if (curwin->w_llist_ref != NULL) // In a location window
+ qf_goto_win_with_ll_file(usable_win_ptr, qf_fnum, ll_ref);
+! else // In a quickfix window
+ qf_goto_win_with_qfl_file(qf_fnum);
+ }
+
+***************
+*** 2946,2953 ****
+
+ if (qf_ptr->qf_type == 1)
+ {
+! /* Open help file (do_ecmd() will set b_help flag, readfile() will
+! * set b_p_ro flag). */
+ if (!can_abandon(curbuf, forceit))
+ {
+ no_write_message();
+--- 2894,2901 ----
+
+ if (qf_ptr->qf_type == 1)
+ {
+! // Open help file (do_ecmd() will set b_help flag, readfile() will
+! // set b_p_ro flag).
+ if (!can_abandon(curbuf, forceit))
+ {
+ no_write_message();
+***************
+*** 2968,2977 ****
+
+ if (IS_LL_STACK(qi))
+ {
+! /*
+! * Location list. Check whether the associated window is still
+! * present and the list is still valid.
+! */
+ if (!win_valid_any_tab(oldwin))
+ {
+ EMSG(_("E924: Current window was closed"));
+--- 2916,2923 ----
+
+ if (IS_LL_STACK(qi))
+ {
+! // Location list. Check whether the associated window is still
+! // present and the list is still valid.
+ if (!win_valid_any_tab(oldwin))
+ {
+ EMSG(_("E924: Current window was closed"));
+***************
+*** 3016,3024 ****
+
+ if (qf_pattern == NULL)
+ {
+! /*
+! * Go to line with error, unless qf_lnum is 0.
+! */
+ i = qf_lnum;
+ if (i > 0)
+ {
+--- 2962,2968 ----
+
+ if (qf_pattern == NULL)
+ {
+! // Go to line with error, unless qf_lnum is 0.
+ i = qf_lnum;
+ if (i > 0)
+ {
+***************
+*** 3034,3045 ****
+ #endif
+ if (qf_viscol == TRUE)
+ {
+! /*
+! * Check each character from the beginning of the error
+! * line up to the error column. For each tab character
+! * found, reduce the error column value by the length of
+! * a tab character.
+! */
+ line = ml_get_curline();
+ screen_col = 0;
+ for (char_col = 0; char_col < curwin->w_cursor.col; ++char_col)
+--- 2978,2987 ----
+ #endif
+ if (qf_viscol == TRUE)
+ {
+! // Check each character from the beginning of the error
+! // line up to the error column. For each tab character
+! // found, reduce the error column value by the length of
+! // a tab character.
+ line = ml_get_curline();
+ screen_col = 0;
+ for (char_col = 0; char_col < curwin->w_cursor.col; ++char_col)
+***************
+*** 3065,3071 ****
+ {
+ pos_T save_cursor;
+
+! /* Move the cursor to the first line in the buffer */
+ save_cursor = curwin->w_cursor;
+ curwin->w_cursor.lnum = 0;
+ if (!do_search(NULL, '/', qf_pattern, (long)1,
+--- 3007,3013 ----
+ {
+ pos_T save_cursor;
+
+! // Move the cursor to the first line in the buffer
+ save_cursor = curwin->w_cursor;
+ curwin->w_cursor.lnum = 0;
+ if (!do_search(NULL, '/', qf_pattern, (long)1,
+***************
+*** 3088,3108 ****
+ linenr_T i;
+ int len;
+
+! /* Update the screen before showing the message, unless the screen
+! * scrolled up. */
+ if (!msg_scrolled)
+ update_topline_redraw();
+ sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
+ qi->qf_lists[qi->qf_curlist].qf_count,
+ qf_ptr->qf_cleared ? _(" (line deleted)") : "",
+ (char *)qf_types(qf_ptr->qf_type, qf_ptr->qf_nr));
+! /* Add the message, skipping leading whitespace and newlines. */
+ len = (int)STRLEN(IObuff);
+ qf_fmt_text(skipwhite(qf_ptr->qf_text), IObuff + len, IOSIZE - len);
+
+! /* Output the message. Overwrite to avoid scrolling when the 'O'
+! * flag is present in 'shortmess'; But when not jumping, print the
+! * whole message. */
+ i = msg_scroll;
+ if (curbuf == old_curbuf && curwin->w_cursor.lnum == old_lnum)
+ msg_scroll = TRUE;
+--- 3030,3050 ----
+ linenr_T i;
+ int len;
+
+! // Update the screen before showing the message, unless the screen
+! // scrolled up.
+ if (!msg_scrolled)
+ update_topline_redraw();
+ sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
+ qi->qf_lists[qi->qf_curlist].qf_count,
+ qf_ptr->qf_cleared ? _(" (line deleted)") : "",
+ (char *)qf_types(qf_ptr->qf_type, qf_ptr->qf_nr));
+! // Add the message, skipping leading whitespace and newlines.
+ len = (int)STRLEN(IObuff);
+ qf_fmt_text(skipwhite(qf_ptr->qf_text), IObuff + len, IOSIZE - len);
+
+! // Output the message. Overwrite to avoid scrolling when the 'O'
+! // flag is present in 'shortmess'; But when not jumping, print the
+! // whole message.
+ i = msg_scroll;
+ if (curbuf == old_curbuf && curwin->w_cursor.lnum == old_lnum)
+ msg_scroll = TRUE;
+***************
+*** 3304,3312 ****
+ }
+ }
+
+! /*
+! * Highlight attributes used for displaying entries from the quickfix list.
+! */
+ static int qfFileAttr;
+ static int qfSepAttr;
+ static int qfLineAttr;
+--- 3246,3252 ----
+ }
+ }
+
+! // Highlight attributes used for displaying entries from the quickfix list.
+ static int qfFileAttr;
+ static int qfSepAttr;
+ static int qfLineAttr;
+***************
+*** 3333,3339 ****
+ && (buf = buflist_findnr(qfp->qf_fnum)) != NULL)
+ {
+ fname = buf->b_fname;
+! if (qfp->qf_type == 1) /* :helpgrep */
+ fname = gettail(fname);
+ }
+ if (fname == NULL)
+--- 3273,3279 ----
+ && (buf = buflist_findnr(qfp->qf_fnum)) != NULL)
+ {
+ fname = buf->b_fname;
+! if (qfp->qf_type == 1) // :helpgrep
+ fname = gettail(fname);
+ }
+ if (fname == NULL)
+***************
+*** 3382,3395 ****
+ }
+ msg_puts((char_u *)" ");
+
+! /* Remove newlines and leading whitespace from the text. For an
+! * unrecognized line keep the indent, the compiler may mark a word
+! * with ^^^^. */
+ qf_fmt_text((fname != NULL || qfp->qf_lnum != 0)
+ ? skipwhite(qfp->qf_text) : qfp->qf_text,
+ IObuff, IOSIZE);
+ msg_prt_line(IObuff, FALSE);
+! out_flush(); /* show one line at a time */
+ }
+
+ /*
+--- 3322,3335 ----
+ }
+ msg_puts((char_u *)" ");
+
+! // Remove newlines and leading whitespace from the text. For an
+! // unrecognized line keep the indent, the compiler may mark a word
+! // with ^^^^.
+ qf_fmt_text((fname != NULL || qfp->qf_lnum != 0)
+ ? skipwhite(qfp->qf_text) : qfp->qf_text,
+ IObuff, IOSIZE);
+ msg_prt_line(IObuff, FALSE);
+! out_flush(); // show one line at a time
+ }
+
+ /*
+***************
+*** 3406,3413 ****
+ int idx2 = -1;
+ char_u *arg = eap->arg;
+ int plus = FALSE;
+! int all = eap->forceit; /* if not :cl!, only show
+! recognised errors */
+ qf_info_T *qi = &ql_info;
+
+ if (is_loclist_cmd(eap->cmdidx))
+--- 3346,3353 ----
+ int idx2 = -1;
+ char_u *arg = eap->arg;
+ int plus = FALSE;
+! int all = eap->forceit; // if not :cl!, only show
+! // recognised errors
+ qf_info_T *qi = &ql_info;
+
+ if (is_loclist_cmd(eap->cmdidx))
+***************
+*** 3451,3463 ****
+ idx2 = (-idx2 > i) ? 0 : idx2 + i + 1;
+ }
+
+! /* Shorten all the file names, so that it is easy to read */
+ shorten_fnames(FALSE);
+
+! /*
+! * Get the attributes for the different quickfix highlight items. Note
+! * that this depends on syntax items defined in the qf.vim syntax file
+! */
+ qfFileAttr = syn_name2attr((char_u *)"qfFileName");
+ if (qfFileAttr == 0)
+ qfFileAttr = HL_ATTR(HLF_D);
+--- 3391,3401 ----
+ idx2 = (-idx2 > i) ? 0 : idx2 + i + 1;
+ }
+
+! // Shorten all the file names, so that it is easy to read
+ shorten_fnames(FALSE);
+
+! // Get the attributes for the different quickfix highlight items. Note
+! // that this depends on syntax items defined in the qf.vim syntax file
+ qfFileAttr = syn_name2attr((char_u *)"qfFileName");
+ if (qfFileAttr == 0)
+ qfFileAttr = HL_ATTR(HLF_D);
+***************
+*** 3638,3646 ****
+ stop = (qfp == qfpnext);
+ vim_free(qfp);
+ if (stop)
+! /* Somehow qf_count may have an incorrect value, set it to 1
+! * to avoid crashing when it's wrong.
+! * TODO: Avoid qf_count being incorrect. */
+ qfl->qf_count = 1;
+ }
+ qfl->qf_start = qfpnext;
+--- 3576,3584 ----
+ stop = (qfp == qfpnext);
+ vim_free(qfp);
+ if (stop)
+! // Somehow qf_count may have an incorrect value, set it to 1
+! // to avoid crashing when it's wrong.
+! // TODO: Avoid qf_count being incorrect.
+ qfl->qf_count = 1;
+ }
+ qfl->qf_start = qfpnext;
+***************
+*** 3828,3841 ****
+ return;
+ }
+
+! /* Look for an existing quickfix window. */
+ win = qf_find_win(qi);
+
+! /*
+! * If a quickfix window is open but we have no errors to display,
+! * close the window. If a quickfix window is not open, then open
+! * it if we have errors; otherwise, leave it closed.
+! */
+ if (qf_stack_empty(qi)
+ || qi->qf_lists[qi->qf_curlist].qf_nonevalid
+ || qf_list_empty(qi, qi->qf_curlist))
+--- 3766,3777 ----
+ return;
+ }
+
+! // Look for an existing quickfix window.
+ win = qf_find_win(qi);
+
+! // If a quickfix window is open but we have no errors to display,
+! // close the window. If a quickfix window is not open, then open
+! // it if we have errors; otherwise, leave it closed.
+ if (qf_stack_empty(qi)
+ || qi->qf_lists[qi->qf_curlist].qf_nonevalid
+ || qf_list_empty(qi, qi->qf_curlist))
+***************
+*** 3864,3870 ****
+ return;
+ }
+
+! /* Find existing quickfix window and close it. */
+ win = qf_find_win(qi);
+ if (win != NULL)
+ win_close(win, FALSE);
+--- 3800,3806 ----
+ return;
+ }
+
+! // Find existing quickfix window and close it.
+ win = qf_find_win(qi);
+ if (win != NULL)
+ win_close(win, FALSE);
+***************
+*** 4052,4060 ****
+ curwin->w_cursor.coladd = 0;
+ #endif
+ curwin->w_curswant = 0;
+! update_topline(); /* scroll to show the line */
+ redraw_later(VALID);
+! curwin->w_redr_status = TRUE; /* update ruler */
+ curwin = old_curwin;
+ curbuf = curwin->w_buffer;
+ }
+--- 3988,3996 ----
+ curwin->w_cursor.coladd = 0;
+ #endif
+ curwin->w_curswant = 0;
+! update_topline(); // scroll to show the line
+ redraw_later(VALID);
+! curwin->w_redr_status = TRUE; // update ruler
+ curwin = old_curwin;
+ curbuf = curwin->w_buffer;
+ }
+***************
+*** 4093,4099 ****
+ qf_info_T *qi = &ql_info;
+
+ if (IS_LL_WINDOW(wp))
+! /* In the location list window, use the referenced location list */
+ qi = wp->w_llist_ref;
+
+ return qi->qf_lists[qi->qf_curlist].qf_index;
+--- 4029,4035 ----
+ qf_info_T *qi = &ql_info;
+
+ if (IS_LL_WINDOW(wp))
+! // In the location list window, use the referenced location list
+ qi = wp->w_llist_ref;
+
+ return qi->qf_lists[qi->qf_curlist].qf_index;
+***************
+*** 4106,4120 ****
+ static int
+ qf_win_pos_update(
+ qf_info_T *qi,
+! int old_qf_index) /* previous qf_index or zero */
+ {
+ win_T *win;
+ int qf_index = qi->qf_lists[qi->qf_curlist].qf_index;
+
+! /*
+! * Put the cursor on the current error in the quickfix window, so that
+! * it's viewable.
+! */
+ win = qf_find_win(qi);
+ if (win != NULL
+ && qf_index <= win->w_buffer->b_ml.ml_line_count
+--- 4042,4054 ----
+ static int
+ qf_win_pos_update(
+ qf_info_T *qi,
+! int old_qf_index) // previous qf_index or zero
+ {
+ win_T *win;
+ int qf_index = qi->qf_lists[qi->qf_curlist].qf_index;
+
+! // Put the cursor on the current error in the quickfix window, so that
+! // it's viewable.
+ win = qf_find_win(qi);
+ if (win != NULL
+ && qf_index <= win->w_buffer->b_ml.ml_line_count
+***************
+*** 4142,4153 ****
+ static int
+ is_qf_win(win_T *win, qf_info_T *qi)
+ {
+! /*
+! * A window displaying the quickfix buffer will have the w_llist_ref field
+! * set to NULL.
+! * A window displaying a location list buffer will have the w_llist_ref
+! * pointing to the location list.
+! */
+ if (bt_quickfix(win->w_buffer))
+ if ((IS_QF_STACK(qi) && win->w_llist_ref == NULL)
+ || (IS_LL_STACK(qi) && win->w_llist_ref == qi))
+--- 4076,4085 ----
+ static int
+ is_qf_win(win_T *win, qf_info_T *qi)
+ {
+! // A window displaying the quickfix buffer will have the w_llist_ref field
+! // set to NULL.
+! // A window displaying a location list buffer will have the w_llist_ref
+! // pointing to the location list.
+ if (bt_quickfix(win->w_buffer))
+ if ((IS_QF_STACK(qi) && win->w_llist_ref == NULL)
+ || (IS_LL_STACK(qi) && win->w_llist_ref == qi))
+***************
+*** 4216,4229 ****
+ win_T *win;
+ aco_save_T aco;
+
+! /* Check if a buffer for the quickfix list exists. Update it. */
+ buf = qf_find_buf(qi);
+ if (buf != NULL)
+ {
+ linenr_T old_line_count = buf->b_ml.ml_line_count;
+
+ if (old_last == NULL)
+! /* set curwin/curbuf to buf and save a few things */
+ aucmd_prepbuf(&aco, buf);
+
+ qf_update_win_titlevar(qi);
+--- 4148,4161 ----
+ win_T *win;
+ aco_save_T aco;
+
+! // Check if a buffer for the quickfix list exists. Update it.
+ buf = qf_find_buf(qi);
+ if (buf != NULL)
+ {
+ linenr_T old_line_count = buf->b_ml.ml_line_count;
+
+ if (old_last == NULL)
+! // set curwin/curbuf to buf and save a few things
+ aucmd_prepbuf(&aco, buf);
+
+ qf_update_win_titlevar(qi);
+***************
+*** 4235,4246 ****
+ {
+ (void)qf_win_pos_update(qi, 0);
+
+! /* restore curwin/curbuf and a few other things */
+ aucmd_restbuf(&aco);
+ }
+
+! /* Only redraw when added lines are visible. This avoids flickering
+! * when the added lines are not visible. */
+ if ((win = qf_find_win(qi)) != NULL && old_line_count < win->w_botline)
+ redraw_buf_later(buf, NOT_VALID);
+ }
+--- 4167,4178 ----
+ {
+ (void)qf_win_pos_update(qi, 0);
+
+! // restore curwin/curbuf and a few other things
+ aucmd_restbuf(&aco);
+ }
+
+! // Only redraw when added lines are visible. This avoids flickering
+! // when the added lines are not visible.
+ if ((win = qf_find_win(qi)) != NULL && old_line_count < win->w_botline)
+ redraw_buf_later(buf, NOT_VALID);
+ }
+***************
+*** 4264,4274 ****
+ && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
+ && errbuf->b_fname != NULL)
+ {
+! if (qfp->qf_type == 1) /* :helpgrep */
+ STRCPY(IObuff, gettail(errbuf->b_fname));
+ else
+ {
+! /* shorten the file name if not done already */
+ if (errbuf->b_sfname == NULL
+ || mch_isFullName(errbuf->b_sfname))
+ {
+--- 4196,4206 ----
+ && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
+ && errbuf->b_fname != NULL)
+ {
+! if (qfp->qf_type == 1) // :helpgrep
+ STRCPY(IObuff, gettail(errbuf->b_fname));
+ else
+ {
+! // shorten the file name if not done already
+ if (errbuf->b_sfname == NULL
+ || mch_isFullName(errbuf->b_sfname))
+ {
+***************
+*** 4307,4315 ****
+ IObuff[len++] = '|';
+ IObuff[len++] = ' ';
+
+! /* Remove newlines and leading whitespace from the text.
+! * For an unrecognized line keep the indent, the compiler may
+! * mark a word with ^^^^. */
+ qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text,
+ IObuff + len, IOSIZE - len);
+
+--- 4239,4247 ----
+ IObuff[len++] = '|';
+ IObuff[len++] = ' ';
+
+! // Remove newlines and leading whitespace from the text.
+! // For an unrecognized line keep the indent, the compiler may
+! // mark a word with ^^^^.
+ qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text,
+ IObuff + len, IOSIZE - len);
+
+***************
+*** 4342,4360 ****
+ return;
+ }
+
+! /* delete all existing lines */
+ while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0)
+ (void)ml_delete((linenr_T)1, FALSE);
+ }
+
+! /* Check if there is anything to display */
+ if (!qf_stack_empty(qi))
+ {
+ char_u dirname[MAXPATHL];
+
+ *dirname = NUL;
+
+! /* Add one line for each error */
+ if (old_last == NULL)
+ {
+ qfp = qi->qf_lists[qi->qf_curlist].qf_start;
+--- 4274,4292 ----
+ return;
+ }
+
+! // delete all existing lines
+ while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0)
+ (void)ml_delete((linenr_T)1, FALSE);
+ }
+
+! // Check if there is anything to display
+ if (!qf_stack_empty(qi))
+ {
+ char_u dirname[MAXPATHL];
+
+ *dirname = NUL;
+
+! // Add one line for each error
+ if (old_last == NULL)
+ {
+ qfp = qi->qf_lists[qi->qf_curlist].qf_start;
+***************
+*** 4377,4399 ****
+ }
+
+ if (old_last == NULL)
+! /* Delete the empty line which is now at the end */
+ (void)ml_delete(lnum + 1, FALSE);
+ }
+
+! /* correct cursor position */
+ check_lnums(TRUE);
+
+ if (old_last == NULL)
+ {
+! /* Set the 'filetype' to "qf" each time after filling the buffer.
+! * This resembles reading a file into a buffer, it's more logical when
+! * using autocommands. */
+ ++curbuf_lock;
+ set_option_value((char_u *)"ft", 0L, (char_u *)"qf", OPT_LOCAL);
+ curbuf->b_p_ma = FALSE;
+
+! keep_filetype = TRUE; /* don't detect 'filetype' */
+ apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL,
+ FALSE, curbuf);
+ apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL,
+--- 4309,4331 ----
+ }
+
+ if (old_last == NULL)
+! // Delete the empty line which is now at the end
+ (void)ml_delete(lnum + 1, FALSE);
+ }
+
+! // correct cursor position
+ check_lnums(TRUE);
+
+ if (old_last == NULL)
+ {
+! // Set the 'filetype' to "qf" each time after filling the buffer.
+! // This resembles reading a file into a buffer, it's more logical when
+! // using autocommands.
+ ++curbuf_lock;
+ set_option_value((char_u *)"ft", 0L, (char_u *)"qf", OPT_LOCAL);
+ curbuf->b_p_ma = FALSE;
+
+! keep_filetype = TRUE; // don't detect 'filetype'
+ apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL,
+ FALSE, curbuf);
+ apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL,
+***************
+*** 4401,4411 ****
+ keep_filetype = FALSE;
+ --curbuf_lock;
+
+! /* make sure it will be redrawn */
+ redraw_curbuf_later(NOT_VALID);
+ }
+
+! /* Restore KeyTyped, setting 'filetype' may reset it. */
+ KeyTyped = old_KeyTyped;
+ }
+
+--- 4333,4343 ----
+ keep_filetype = FALSE;
+ --curbuf_lock;
+
+! // make sure it will be redrawn
+ redraw_curbuf_later(NOT_VALID);
+ }
+
+! // Restore KeyTyped, setting 'filetype' may reset it.
+ KeyTyped = old_KeyTyped;
+ }
+
+***************
+*** 4694,4700 ****
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+! /* Location list */
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+ return 0;
+--- 4626,4632 ----
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+! // Location list
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+ return 0;
+***************
+*** 4707,4716 ****
+ if (qfp->qf_valid)
+ {
+ if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo)
+! sz++; /* Count all valid entries */
+ else if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
+ {
+! /* Count the number of files */
+ sz++;
+ prev_fnum = qfp->qf_fnum;
+ }
+--- 4639,4648 ----
+ if (qfp->qf_valid)
+ {
+ if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo)
+! sz++; // Count all valid entries
+ else if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
+ {
+! // Count the number of files
+ sz++;
+ prev_fnum = qfp->qf_fnum;
+ }
+***************
+*** 4731,4737 ****
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+! /* Location list */
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+ return 0;
+--- 4663,4669 ----
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+! // Location list
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+ return 0;
+***************
+*** 4755,4761 ****
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+! /* Location list */
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+ return 1;
+--- 4687,4693 ----
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+! // Location list
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL)
+ return 1;
+***************
+*** 4764,4770 ****
+ qfl = &qi->qf_lists[qi->qf_curlist];
+ qfp = qfl->qf_start;
+
+! /* check if the list has valid errors */
+ if (qfl->qf_count <= 0 || qfl->qf_nonevalid)
+ return 1;
+
+--- 4696,4702 ----
+ qfl = &qi->qf_lists[qi->qf_curlist];
+ qfp = qfl->qf_start;
+
+! // check if the list has valid errors
+ if (qfl->qf_count <= 0 || qfl->qf_nonevalid)
+ return 1;
+
+***************
+*** 4776,4782 ****
+ {
+ if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
+ {
+! /* Count the number of files */
+ eidx++;
+ prev_fnum = qfp->qf_fnum;
+ }
+--- 4708,4714 ----
+ {
+ if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
+ {
+! // Count the number of files
+ eidx++;
+ prev_fnum = qfp->qf_fnum;
+ }
+***************
+*** 4802,4808 ****
+ int i, eidx;
+ int prev_fnum = 0;
+
+! /* check if the list has valid errors */
+ if (qfl->qf_count <= 0 || qfl->qf_nonevalid)
+ return 1;
+
+--- 4734,4740 ----
+ int i, eidx;
+ int prev_fnum = 0;
+
+! // check if the list has valid errors
+ if (qfl->qf_count <= 0 || qfl->qf_nonevalid)
+ return 1;
+
+***************
+*** 4815,4821 ****
+ {
+ if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
+ {
+! /* Count the number of files */
+ eidx++;
+ prev_fnum = qfp->qf_fnum;
+ }
+--- 4747,4753 ----
+ {
+ if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
+ {
+! // Count the number of files
+ eidx++;
+ prev_fnum = qfp->qf_fnum;
+ }
+***************
+*** 4873,4881 ****
+ }
+ }
+
+! /* For cdo and ldo commands, jump to the nth valid error.
+! * For cfdo and lfdo commands, jump to the nth valid file entry.
+! */
+ if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
+ || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
+ errornr = qf_get_nth_valid_entry(&qi->qf_lists[qi->qf_curlist],
+--- 4805,4812 ----
+ }
+ }
+
+! // For cdo and ldo commands, jump to the nth valid error.
+! // For cfdo and lfdo commands, jump to the nth valid file entry.
+ if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
+ || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
+ errornr = qf_get_nth_valid_entry(&qi->qf_lists[qi->qf_curlist],
+***************
+*** 4949,4955 ****
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
+ char_u *au_name = NULL;
+! int_u save_qfid = 0; /* init for gcc */
+ int res;
+
+ switch (eap->cmdidx)
+--- 4880,4886 ----
+ win_T *wp = NULL;
+ qf_info_T *qi = &ql_info;
+ char_u *au_name = NULL;
+! int_u save_qfid = 0; // init for gcc
+ int res;
+
+ switch (eap->cmdidx)
+***************
+*** 4986,5001 ****
+ if (is_loclist_cmd(eap->cmdidx))
+ wp = curwin;
+
+! /*
+! * This function is used by the :cfile, :cgetfile and :caddfile
+! * commands.
+! * :cfile always creates a new quickfix list and jumps to the
+! * first error.
+! * :cgetfile creates a new quickfix list but doesn't jump to the
+! * first error.
+! * :caddfile adds to an existing quickfix list. If there is no
+! * quickfix list then a new list is created.
+! */
+ res = qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
+ && eap->cmdidx != CMD_laddfile),
+ qf_cmdtitle(*eap->cmdlinep), enc);
+--- 4917,4930 ----
+ if (is_loclist_cmd(eap->cmdidx))
+ wp = curwin;
+
+! // This function is used by the :cfile, :cgetfile and :caddfile
+! // commands.
+! // :cfile always creates a new quickfix list and jumps to the
+! // first error.
+! // :cgetfile creates a new quickfix list but doesn't jump to the
+! // first error.
+! // :caddfile adds to an existing quickfix list. If there is no
+! // quickfix list then a new list is created.
+ res = qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
+ && eap->cmdidx != CMD_laddfile),
+ qf_cmdtitle(*eap->cmdlinep), enc);
+***************
+*** 5045,5056 ****
+ static void
+ vgr_init_regmatch(regmmatch_T *regmatch, char_u *s)
+ {
+! /* Get the search pattern: either white-separated or enclosed in // */
+ regmatch->regprog = NULL;
+
+ if (s == NULL || *s == NUL)
+ {
+! /* Pattern is empty, use last search pattern. */
+ if (last_search_pat() == NULL)
+ {
+ EMSG(_(e_noprevre));
+--- 4974,4985 ----
+ static void
+ vgr_init_regmatch(regmmatch_T *regmatch, char_u *s)
+ {
+! // Get the search pattern: either white-separated or enclosed in //
+ regmatch->regprog = NULL;
+
+ if (s == NULL || *s == NUL)
+ {
+! // Pattern is empty, use last search pattern.
+ if (last_search_pat() == NULL)
+ {
+ EMSG(_(e_noprevre));
+***************
+*** 5083,5090 ****
+ vim_free(p);
+ }
+ msg_clr_eos();
+! msg_didout = FALSE; /* overwrite this message */
+! msg_nowait = TRUE; /* don't wait for this message */
+ msg_col = 0;
+ out_flush();
+ }
+--- 5012,5019 ----
+ vim_free(p);
+ }
+ msg_clr_eos();
+! msg_didout = FALSE; // overwrite this message
+! msg_nowait = TRUE; // don't wait for this message
+ msg_col = 0;
+ out_flush();
+ }
+***************
+*** 5105,5120 ****
+ buf_T *buf;
+
+ #if defined(FEAT_SYN_HL)
+! /* Don't do Filetype autocommands to avoid loading syntax and
+! * indent scripts, a great speed improvement. */
+ save_ei = au_event_disable(",Filetype");
+ #endif
+! /* Don't use modelines here, it's useless. */
+ save_mls = p_mls;
+ p_mls = 0;
+
+! /* Load file into a buffer, so that 'fileencoding' is detected,
+! * autocommands applied, etc. */
+ buf = load_dummy_buffer(fname, dirname_start, dirname_now);
+
+ p_mls = save_mls;
+--- 5034,5049 ----
+ buf_T *buf;
+
+ #if defined(FEAT_SYN_HL)
+! // Don't do Filetype autocommands to avoid loading syntax and
+! // indent scripts, a great speed improvement.
+ save_ei = au_event_disable(",Filetype");
+ #endif
+! // Don't use modelines here, it's useless.
+ save_mls = p_mls;
+ p_mls = 0;
+
+! // Load file into a buffer, so that 'fileencoding' is detected,
+! // autocommands applied, etc.
+ buf = load_dummy_buffer(fname, dirname_start, dirname_now);
+
+ p_mls = save_mls;
+***************
+*** 5137,5154 ****
+ int_u qfid,
+ char_u *title)
+ {
+! /* Verify that the quickfix/location list was not freed by an autocmd */
+ if (!qflist_valid(wp, qfid))
+ {
+ if (wp != NULL)
+ {
+! /* An autocmd has freed the location list. */
+ EMSG(_(e_loc_list_changed));
+ return FALSE;
+ }
+ else
+ {
+! /* Quickfix list is not found, create a new one. */
+ qf_new_list(qi, title);
+ return TRUE;
+ }
+--- 5066,5083 ----
+ int_u qfid,
+ char_u *title)
+ {
+! // Verify that the quickfix/location list was not freed by an autocmd
+ if (!qflist_valid(wp, qfid))
+ {
+ if (wp != NULL)
+ {
+! // An autocmd has freed the location list.
+ EMSG(_(e_loc_list_changed));
+ return FALSE;
+ }
+ else
+ {
+! // Quickfix list is not found, create a new one.
+ qf_new_list(qi, title);
+ return TRUE;
+ }
+***************
+*** 5184,5195 ****
+ while (vim_regexec_multi(regmatch, curwin, buf, lnum,
+ col, NULL, NULL) > 0)
+ {
+! /* Pass the buffer number so that it gets used even for a
+! * dummy buffer, unless duplicate_name is set, then the
+! * buffer will be wiped out below. */
+ if (qf_add_entry(qi,
+ qi->qf_curlist,
+! NULL, /* dir */
+ fname,
+ NULL,
+ duplicate_name ? 0 : buf->b_fnum,
+--- 5113,5124 ----
+ while (vim_regexec_multi(regmatch, curwin, buf, lnum,
+ col, NULL, NULL) > 0)
+ {
+! // Pass the buffer number so that it gets used even for a
+! // dummy buffer, unless duplicate_name is set, then the
+! // buffer will be wiped out below.
+ if (qf_add_entry(qi,
+ qi->qf_curlist,
+! NULL, // dir
+ fname,
+ NULL,
+ duplicate_name ? 0 : buf->b_fnum,
+***************
+*** 5197,5207 ****
+ regmatch->startpos[0].lnum + lnum, FALSE),
+ regmatch->startpos[0].lnum + lnum,
+ regmatch->startpos[0].col + 1,
+! FALSE, /* vis_col */
+! NULL, /* search pattern */
+! 0, /* nr */
+! 0, /* type */
+! TRUE /* valid */
+ ) == FAIL)
+ {
+ got_int = TRUE;
+--- 5126,5136 ----
+ regmatch->startpos[0].lnum + lnum, FALSE),
+ regmatch->startpos[0].lnum + lnum,
+ regmatch->startpos[0].col + 1,
+! FALSE, // vis_col
+! NULL, // search pattern
+! 0, // nr
+! 0, // type
+! TRUE // valid
+ ) == FAIL)
+ {
+ got_int = TRUE;
+***************
+*** 5242,5252 ****
+ buf = curbuf;
+ qf_jump(qi, 0, 0, forceit);
+ if (buf != curbuf)
+! /* If we jumped to another buffer redrawing will already be
+! * taken care of. */
+ *redraw_for_dummy = FALSE;
+
+! /* Jump to the directory used after loading the buffer. */
+ if (curbuf == first_match_buf && target_dir != NULL)
+ {
+ exarg_T ea;
+--- 5171,5181 ----
+ buf = curbuf;
+ qf_jump(qi, 0, 0, forceit);
+ if (buf != curbuf)
+! // If we jumped to another buffer redrawing will already be
+! // taken care of.
+ *redraw_for_dummy = FALSE;
+
+! // Jump to the directory used after loading the buffer.
+ if (curbuf == first_match_buf && target_dir != NULL)
+ {
+ exarg_T ea;
+***************
+*** 5315,5321 ****
+ else
+ tomatch = MAXLNUM;
+
+! /* Get the search pattern: either white-separated or enclosed in // */
+ regmatch.regprog = NULL;
+ title = vim_strsave(qf_cmdtitle(*eap->cmdlinep));
+ p = skip_vimgrep_pat(eap->arg, &s, &flags);
+--- 5244,5250 ----
+ else
+ tomatch = MAXLNUM;
+
+! // Get the search pattern: either white-separated or enclosed in //
+ regmatch.regprog = NULL;
+ title = vim_strsave(qf_cmdtitle(*eap->cmdlinep));
+ p = skip_vimgrep_pat(eap->arg, &s, &flags);
+***************
+*** 5340,5349 ****
+ && eap->cmdidx != CMD_vimgrepadd
+ && eap->cmdidx != CMD_lvimgrepadd)
+ || qf_stack_empty(qi))
+! /* make place for a new list */
+ qf_new_list(qi, title != NULL ? title : qf_cmdtitle(*eap->cmdlinep));
+
+! /* parse the list of arguments */
+ if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
+ goto theend;
+ if (fcount == 0)
+--- 5269,5278 ----
+ && eap->cmdidx != CMD_vimgrepadd
+ && eap->cmdidx != CMD_lvimgrepadd)
+ || qf_stack_empty(qi))
+! // make place for a new list
+ qf_new_list(qi, title != NULL ? title : qf_cmdtitle(*eap->cmdlinep));
+
+! // parse the list of arguments
+ if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
+ goto theend;
+ if (fcount == 0)
+***************
+*** 5360,5371 ****
+ goto theend;
+ }
+
+! /* Remember the current directory, because a BufRead autocommand that does
+! * ":lcd %:p:h" changes the meaning of short path names. */
+ mch_dirname(dirname_start, MAXPATHL);
+
+! /* Remember the current quickfix list identifier, so that we can check for
+! * autocommands changing the current quickfix list. */
+ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+
+ seconds = (time_t)0;
+--- 5289,5300 ----
+ goto theend;
+ }
+
+! // Remember the current directory, because a BufRead autocommand that does
+! // ":lcd %:p:h" changes the meaning of short path names.
+ mch_dirname(dirname_start, MAXPATHL);
+
+! // Remember the current quickfix list identifier, so that we can check for
+! // autocommands changing the current quickfix list.
+ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+
+ seconds = (time_t)0;
+***************
+*** 5374,5381 ****
+ fname = shorten_fname1(fnames[fi]);
+ if (time(NULL) > seconds)
+ {
+! /* Display the file name every second or so, show the user we are
+! * working on it. */
+ seconds = time(NULL);
+ vgr_display_fname(fname);
+ }
+--- 5303,5310 ----
+ fname = shorten_fname1(fnames[fi]);
+ if (time(NULL) > seconds)
+ {
+! // Display the file name every second or so, show the user we are
+! // working on it.
+ seconds = time(NULL);
+ vgr_display_fname(fname);
+ }
+***************
+*** 5383,5389 ****
+ buf = buflist_findname_exp(fnames[fi]);
+ if (buf == NULL || buf->b_ml.ml_mfp == NULL)
+ {
+! /* Remember that a buffer with this name already exists. */
+ duplicate_name = (buf != NULL);
+ using_dummy = TRUE;
+ redraw_for_dummy = TRUE;
+--- 5312,5318 ----
+ buf = buflist_findname_exp(fnames[fi]);
+ if (buf == NULL || buf->b_ml.ml_mfp == NULL)
+ {
+! // Remember that a buffer with this name already exists.
+ duplicate_name = (buf != NULL);
+ using_dummy = TRUE;
+ redraw_for_dummy = TRUE;
+***************
+*** 5391,5401 ****
+ buf = vgr_load_dummy_buf(fname, dirname_start, dirname_now);
+ }
+ else
+! /* Use existing, loaded buffer. */
+ using_dummy = FALSE;
+
+! /* Check whether the quickfix list is still valid. When loading a
+! * buffer above, autocommands might have changed the quickfix list. */
+ if (!vgr_qflist_valid(wp, qi, save_qfid, qf_cmdtitle(*eap->cmdlinep)))
+ {
+ FreeWild(fcount, fnames);
+--- 5320,5330 ----
+ buf = vgr_load_dummy_buf(fname, dirname_start, dirname_now);
+ }
+ else
+! // Use existing, loaded buffer.
+ using_dummy = FALSE;
+
+! // Check whether the quickfix list is still valid. When loading a
+! // buffer above, autocommands might have changed the quickfix list.
+ if (!vgr_qflist_valid(wp, qi, save_qfid, qf_cmdtitle(*eap->cmdlinep)))
+ {
+ FreeWild(fcount, fnames);
+***************
+*** 5410,5417 ****
+ }
+ else
+ {
+! /* Try for a match in all lines of the buffer.
+! * For ":1vimgrep" look for first match only. */
+ found_match = vgr_match_buflines(qi, fname, buf, &regmatch,
+ tomatch, duplicate_name, flags);
+
+--- 5339,5346 ----
+ }
+ else
+ {
+! // Try for a match in all lines of the buffer.
+! // For ":1vimgrep" look for first match only.
+ found_match = vgr_match_buflines(qi, fname, buf, &regmatch,
+ tomatch, duplicate_name, flags);
+
+***************
+*** 5421,5442 ****
+ first_match_buf = buf;
+ if (duplicate_name)
+ {
+! /* Never keep a dummy buffer if there is another buffer
+! * with the same name. */
+ wipe_dummy_buffer(buf, dirname_start);
+ buf = NULL;
+ }
+ else if (!cmdmod.hide
+! || buf->b_p_bh[0] == 'u' /* "unload" */
+! || buf->b_p_bh[0] == 'w' /* "wipe" */
+! || buf->b_p_bh[0] == 'd') /* "delete" */
+ {
+! /* When no match was found we don't need to remember the
+! * buffer, wipe it out. If there was a match and it
+! * wasn't the first one or we won't jump there: only
+! * unload the buffer.
+! * Ignore 'hidden' here, because it may lead to having too
+! * many swap files. */
+ if (!found_match)
+ {
+ wipe_dummy_buffer(buf, dirname_start);
+--- 5350,5371 ----
+ first_match_buf = buf;
+ if (duplicate_name)
+ {
+! // Never keep a dummy buffer if there is another buffer
+! // with the same name.
+ wipe_dummy_buffer(buf, dirname_start);
+ buf = NULL;
+ }
+ else if (!cmdmod.hide
+! || buf->b_p_bh[0] == 'u' // "unload"
+! || buf->b_p_bh[0] == 'w' // "wipe"
+! || buf->b_p_bh[0] == 'd') // "delete"
+ {
+! // When no match was found we don't need to remember the
+! // buffer, wipe it out. If there was a match and it
+! // wasn't the first one or we won't jump there: only
+! // unload the buffer.
+! // Ignore 'hidden' here, because it may lead to having too
+! // many swap files.
+ if (!found_match)
+ {
+ wipe_dummy_buffer(buf, dirname_start);
+***************
+*** 5445,5451 ****
+ else if (buf != first_match_buf || (flags & VGR_NOJUMP))
+ {
+ unload_dummy_buffer(buf, dirname_start);
+! /* Keeping the buffer, remove the dummy flag. */
+ buf->b_flags &= ~BF_DUMMY;
+ buf = NULL;
+ }
+--- 5374,5380 ----
+ else if (buf != first_match_buf || (flags & VGR_NOJUMP))
+ {
+ unload_dummy_buffer(buf, dirname_start);
+! // Keeping the buffer, remove the dummy flag.
+ buf->b_flags &= ~BF_DUMMY;
+ buf = NULL;
+ }
+***************
+*** 5453,5472 ****
+
+ if (buf != NULL)
+ {
+! /* Keeping the buffer, remove the dummy flag. */
+ buf->b_flags &= ~BF_DUMMY;
+
+! /* If the buffer is still loaded we need to use the
+! * directory we jumped to below. */
+ if (buf == first_match_buf
+ && target_dir == NULL
+ && STRCMP(dirname_start, dirname_now) != 0)
+ target_dir = vim_strsave(dirname_now);
+
+! /* The buffer is still loaded, the Filetype autocommands
+! * need to be done now, in that buffer. And the modelines
+! * need to be done (again). But not the window-local
+! * options! */
+ aucmd_prepbuf(&aco, buf);
+ #if defined(FEAT_SYN_HL)
+ apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
+--- 5382,5401 ----
+
+ if (buf != NULL)
+ {
+! // Keeping the buffer, remove the dummy flag.
+ buf->b_flags &= ~BF_DUMMY;
+
+! // If the buffer is still loaded we need to use the
+! // directory we jumped to below.
+ if (buf == first_match_buf
+ && target_dir == NULL
+ && STRCMP(dirname_start, dirname_now) != 0)
+ target_dir = vim_strsave(dirname_now);
+
+! // The buffer is still loaded, the Filetype autocommands
+! // need to be done now, in that buffer. And the modelines
+! // need to be done (again). But not the window-local
+! // options!
+ aucmd_prepbuf(&aco, buf);
+ #if defined(FEAT_SYN_HL)
+ apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
+***************
+*** 5491,5500 ****
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+! /*
+! * The QuickFixCmdPost autocmd may free the quickfix list. Check the list
+! * is still valid.
+! */
+ if (!qflist_valid(wp, save_qfid))
+ goto theend;
+
+--- 5420,5427 ----
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+! // The QuickFixCmdPost autocmd may free the quickfix list. Check the list
+! // is still valid.
+ if (!qflist_valid(wp, save_qfid))
+ goto theend;
+
+***************
+*** 5511,5518 ****
+ else
+ EMSG2(_(e_nomatch2), s);
+
+! /* If we loaded a dummy buffer into the current window, the autocommands
+! * may have messed up things, need to redraw and recompute folds. */
+ if (redraw_for_dummy)
+ {
+ #ifdef FEAT_FOLDING
+--- 5438,5445 ----
+ else
+ EMSG2(_(e_nomatch2), s);
+
+! // If we loaded a dummy buffer into the current window, the autocommands
+! // may have messed up things, need to redraw and recompute folds.
+ if (redraw_for_dummy)
+ {
+ #ifdef FEAT_FOLDING
+***************
+*** 5544,5551 ****
+ mch_dirname(dirname_now, MAXPATHL);
+ if (STRCMP(dirname_start, dirname_now) != 0)
+ {
+! /* If the directory has changed, change it back by building up an
+! * appropriate ex command and executing it. */
+ exarg_T ea;
+
+ ea.arg = dirname_start;
+--- 5471,5478 ----
+ mch_dirname(dirname_now, MAXPATHL);
+ if (STRCMP(dirname_start, dirname_now) != 0)
+ {
+! // If the directory has changed, change it back by building up an
+! // appropriate ex command and executing it.
+ exarg_T ea;
+
+ ea.arg = dirname_start;
+***************
+*** 5571,5578 ****
+ static buf_T *
+ load_dummy_buffer(
+ char_u *fname,
+! char_u *dirname_start, /* in: old directory */
+! char_u *resulting_dir) /* out: new directory */
+ {
+ buf_T *newbuf;
+ bufref_T newbufref;
+--- 5498,5505 ----
+ static buf_T *
+ load_dummy_buffer(
+ char_u *fname,
+! char_u *dirname_start, // in: old directory
+! char_u *resulting_dir) // out: new directory
+ {
+ buf_T *newbuf;
+ bufref_T newbufref;
+***************
+*** 5581,5612 ****
+ aco_save_T aco;
+ int readfile_result;
+
+! /* Allocate a buffer without putting it in the buffer list. */
+ newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
+ if (newbuf == NULL)
+ return NULL;
+ set_bufref(&newbufref, newbuf);
+
+! /* Init the options. */
+ buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
+
+! /* need to open the memfile before putting the buffer in a window */
+ if (ml_open(newbuf) == OK)
+ {
+! /* Make sure this buffer isn't wiped out by autocommands. */
+ ++newbuf->b_locked;
+
+! /* set curwin/curbuf to buf and save a few things */
+ aucmd_prepbuf(&aco, newbuf);
+
+! /* Need to set the filename for autocommands. */
+ (void)setfname(curbuf, fname, NULL, FALSE);
+
+! /* Create swap file now to avoid the ATTENTION message. */
+ check_need_swap(TRUE);
+
+! /* Remove the "dummy" flag, otherwise autocommands may not
+! * work. */
+ curbuf->b_flags &= ~BF_DUMMY;
+
+ newbuf_to_wipe.br_buf = NULL;
+--- 5508,5539 ----
+ aco_save_T aco;
+ int readfile_result;
+
+! // Allocate a buffer without putting it in the buffer list.
+ newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
+ if (newbuf == NULL)
+ return NULL;
+ set_bufref(&newbufref, newbuf);
+
+! // Init the options.
+ buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
+
+! // need to open the memfile before putting the buffer in a window
+ if (ml_open(newbuf) == OK)
+ {
+! // Make sure this buffer isn't wiped out by autocommands.
+ ++newbuf->b_locked;
+
+! // set curwin/curbuf to buf and save a few things
+ aucmd_prepbuf(&aco, newbuf);
+
+! // Need to set the filename for autocommands.
+ (void)setfname(curbuf, fname, NULL, FALSE);
+
+! // Create swap file now to avoid the ATTENTION message.
+ check_need_swap(TRUE);
+
+! // Remove the "dummy" flag, otherwise autocommands may not
+! // work.
+ curbuf->b_flags &= ~BF_DUMMY;
+
+ newbuf_to_wipe.br_buf = NULL;
+***************
+*** 5621,5650 ****
+ failed = FALSE;
+ if (curbuf != newbuf)
+ {
+! /* Bloody autocommands changed the buffer! Can happen when
+! * using netrw and editing a remote file. Use the current
+! * buffer instead, delete the dummy one after restoring the
+! * window stuff. */
+ set_bufref(&newbuf_to_wipe, newbuf);
+ newbuf = curbuf;
+ }
+ }
+
+! /* restore curwin/curbuf and a few other things */
+ aucmd_restbuf(&aco);
+ if (newbuf_to_wipe.br_buf != NULL && bufref_valid(&newbuf_to_wipe))
+ wipe_buffer(newbuf_to_wipe.br_buf, FALSE);
+
+! /* Add back the "dummy" flag, otherwise buflist_findname_stat() won't
+! * skip it. */
+ newbuf->b_flags |= BF_DUMMY;
+ }
+
+! /*
+! * When autocommands/'autochdir' option changed directory: go back.
+! * Let the caller know what the resulting dir was first, in case it is
+! * important.
+! */
+ mch_dirname(resulting_dir, MAXPATHL);
+ restore_start_dir(dirname_start);
+
+--- 5548,5575 ----
+ failed = FALSE;
+ if (curbuf != newbuf)
+ {
+! // Bloody autocommands changed the buffer! Can happen when
+! // using netrw and editing a remote file. Use the current
+! // buffer instead, delete the dummy one after restoring the
+! // window stuff.
+ set_bufref(&newbuf_to_wipe, newbuf);
+ newbuf = curbuf;
+ }
+ }
+
+! // restore curwin/curbuf and a few other things
+ aucmd_restbuf(&aco);
+ if (newbuf_to_wipe.br_buf != NULL && bufref_valid(&newbuf_to_wipe))
+ wipe_buffer(newbuf_to_wipe.br_buf, FALSE);
+
+! // Add back the "dummy" flag, otherwise buflist_findname_stat() won't
+! // skip it.
+ newbuf->b_flags |= BF_DUMMY;
+ }
+
+! // When autocommands/'autochdir' option changed directory: go back.
+! // Let the caller know what the resulting dir was first, in case it is
+! // important.
+ mch_dirname(resulting_dir, MAXPATHL);
+ restore_start_dir(dirname_start);
+
+***************
+*** 5666,5690 ****
+ static void
+ wipe_dummy_buffer(buf_T *buf, char_u *dirname_start)
+ {
+! if (curbuf != buf) /* safety check */
+ {
+ #if defined(FEAT_EVAL)
+ cleanup_T cs;
+
+! /* Reset the error/interrupt/exception state here so that aborting()
+! * returns FALSE when wiping out the buffer. Otherwise it doesn't
+! * work when got_int is set. */
+ enter_cleanup(&cs);
+ #endif
+
+ wipe_buffer(buf, FALSE);
+
+ #if defined(FEAT_EVAL)
+! /* Restore the error/interrupt/exception state if not discarded by a
+! * new aborting error, interrupt, or uncaught exception. */
+ leave_cleanup(&cs);
+ #endif
+! /* When autocommands/'autochdir' option changed directory: go back. */
+ restore_start_dir(dirname_start);
+ }
+ }
+--- 5591,5615 ----
+ static void
+ wipe_dummy_buffer(buf_T *buf, char_u *dirname_start)
+ {
+! if (curbuf != buf) // safety check
+ {
+ #if defined(FEAT_EVAL)
+ cleanup_T cs;
+
+! // Reset the error/interrupt/exception state here so that aborting()
+! // returns FALSE when wiping out the buffer. Otherwise it doesn't
+! // work when got_int is set.
+ enter_cleanup(&cs);
+ #endif
+
+ wipe_buffer(buf, FALSE);
+
+ #if defined(FEAT_EVAL)
+! // Restore the error/interrupt/exception state if not discarded by a
+! // new aborting error, interrupt, or uncaught exception.
+ leave_cleanup(&cs);
+ #endif
+! // When autocommands/'autochdir' option changed directory: go back.
+ restore_start_dir(dirname_start);
+ }
+ }
+***************
+*** 5697,5707 ****
+ static void
+ unload_dummy_buffer(buf_T *buf, char_u *dirname_start)
+ {
+! if (curbuf != buf) /* safety check */
+ {
+ close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
+
+! /* When autocommands/'autochdir' option changed directory: go back. */
+ restore_start_dir(dirname_start);
+ }
+ }
+--- 5622,5632 ----
+ static void
+ unload_dummy_buffer(buf_T *buf, char_u *dirname_start)
+ {
+! if (curbuf != buf) // safety check
+ {
+ close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
+
+! // When autocommands/'autochdir' option changed directory: go back.
+ restore_start_dir(dirname_start);
+ }
+ }
+***************
+*** 5741,5747 ****
+ qfp = qi->qf_lists[qf_idx].qf_start;
+ for (i = 1; !got_int && i <= qi->qf_lists[qf_idx].qf_count; ++i)
+ {
+! /* Handle entries with a non-existing buffer number. */
+ bufnum = qfp->qf_fnum;
+ if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
+ bufnum = 0;
+--- 5666,5672 ----
+ qfp = qi->qf_lists[qf_idx].qf_start;
+ for (i = 1; !got_int && i <= qi->qf_lists[qf_idx].qf_count; ++i)
+ {
+! // Handle entries with a non-existing buffer number.
+ bufnum = qfp->qf_fnum;
+ if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
+ bufnum = 0;
+***************
+*** 5772,5780 ****
+ return OK;
+ }
+
+! /*
+! * Flags used by getqflist()/getloclist() to determine which fields to return.
+! */
+ enum {
+ QF_GETLIST_NONE = 0x0,
+ QF_GETLIST_TITLE = 0x1,
+--- 5697,5703 ----
+ return OK;
+ }
+
+! // Flags used by getqflist()/getloclist() to determine which fields to return.
+ enum {
+ QF_GETLIST_NONE = 0x0,
+ QF_GETLIST_TITLE = 0x1,
+***************
+*** 5803,5814 ****
+ dictitem_T *efm_di;
+ list_T *l;
+
+! /* Only a List value is supported */
+ if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL)
+ {
+! /* If errorformat is supplied then use it, otherwise use the 'efm'
+! * option setting
+! */
+ if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL)
+ {
+ if (efm_di->di_tv.v_type != VAR_STRING ||
+--- 5726,5736 ----
+ dictitem_T *efm_di;
+ list_T *l;
+
+! // Only a List value is supported
+ if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL)
+ {
+! // If errorformat is supplied then use it, otherwise use the 'efm'
+! // option setting
+ if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL)
+ {
+ if (efm_di->di_tv.v_type != VAR_STRING ||
+***************
+*** 5847,5854 ****
+ {
+ win_T *win;
+
+! /* The quickfix window can be opened even if the quickfix list is not set
+! * using ":copen". This is not true for location lists. */
+ if (qi == NULL)
+ return 0;
+ win = qf_find_win(qi);
+--- 5769,5776 ----
+ {
+ win_T *win;
+
+! // The quickfix window can be opened even if the quickfix list is not set
+! // using ":copen". This is not true for location lists.
+ if (qi == NULL)
+ return 0;
+ win = qf_find_win(qi);
+***************
+*** 5922,5934 ****
+ int qf_idx;
+ dictitem_T *di;
+
+! qf_idx = qi->qf_curlist; /* default is the current list */
+ if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL)
+ {
+! /* Use the specified quickfix/location list */
+ if (di->di_tv.v_type == VAR_NUMBER)
+ {
+! /* for zero use the current list */
+ if (di->di_tv.vval.v_number != 0)
+ {
+ qf_idx = di->di_tv.vval.v_number - 1;
+--- 5844,5856 ----
+ int qf_idx;
+ dictitem_T *di;
+
+! qf_idx = qi->qf_curlist; // default is the current list
+ if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL)
+ {
+! // Use the specified quickfix/location list
+ if (di->di_tv.v_type == VAR_NUMBER)
+ {
+! // for zero use the current list
+ if (di->di_tv.vval.v_number != 0)
+ {
+ qf_idx = di->di_tv.vval.v_number - 1;
+***************
+*** 5939,5945 ****
+ else if (di->di_tv.v_type == VAR_STRING
+ && di->di_tv.vval.v_string != NULL
+ && STRCMP(di->di_tv.vval.v_string, "$") == 0)
+! /* Get the last quickfix list number */
+ qf_idx = qi->qf_listcount - 1;
+ else
+ qf_idx = INVALID_QFIDX;
+--- 5861,5867 ----
+ else if (di->di_tv.v_type == VAR_STRING
+ && di->di_tv.vval.v_string != NULL
+ && STRCMP(di->di_tv.vval.v_string, "$") == 0)
+! // Get the last quickfix list number
+ qf_idx = qi->qf_listcount - 1;
+ else
+ qf_idx = INVALID_QFIDX;
+***************
+*** 5947,5958 ****
+
+ if ((di = dict_find(what, (char_u *)"id", -1)) != NULL)
+ {
+! /* Look for a list with the specified id */
+ if (di->di_tv.v_type == VAR_NUMBER)
+ {
+! /*
+! * For zero, use the current list or the list specified by 'nr'
+! */
+ if (di->di_tv.vval.v_number != 0)
+ qf_idx = qf_id2nr(qi, di->di_tv.vval.v_number);
+ }
+--- 5869,5878 ----
+
+ if ((di = dict_find(what, (char_u *)"id", -1)) != NULL)
+ {
+! // Look for a list with the specified id
+ if (di->di_tv.v_type == VAR_NUMBER)
+ {
+! // For zero, use the current list or the list specified by 'nr'
+ if (di->di_tv.vval.v_number != 0)
+ qf_idx = qf_id2nr(qi, di->di_tv.vval.v_number);
+ }
+***************
+*** 6085,6091 ****
+ {
+ int idx = qi->qf_lists[qf_idx].qf_index;
+ if (qf_list_empty(qi, qf_idx))
+! /* For empty lists, qf_index is set to 1 */
+ idx = 0;
+ return dict_add_number(retdict, "idx", idx);
+ }
+--- 6005,6011 ----
+ {
+ int idx = qi->qf_lists[qf_idx].qf_index;
+ if (qf_list_empty(qi, qf_idx))
+! // For empty lists, qf_index is set to 1
+ idx = 0;
+ return dict_add_number(retdict, "idx", idx);
+ }
+***************
+*** 6116,6122 ****
+ if (!qf_stack_empty(qi))
+ qf_idx = qf_getprop_qfidx(qi, what);
+
+! /* List is not present or is empty */
+ if (qf_stack_empty(qi) || qf_idx == INVALID_QFIDX)
+ return qf_getprop_defaults(qi, flags, retdict);
+
+--- 6036,6042 ----
+ if (!qf_stack_empty(qi))
+ qf_idx = qf_getprop_qfidx(qi, what);
+
+! // List is not present or is empty
+ if (qf_stack_empty(qi) || qf_idx == INVALID_QFIDX)
+ return qf_getprop_defaults(qi, flags, retdict);
+
+***************
+*** 6243,6255 ****
+
+ if (action == ' ' || qf_idx == qi->qf_listcount)
+ {
+! /* make place for a new list */
+ qf_new_list(qi, title);
+ qf_idx = qi->qf_curlist;
+ qfl = &qi->qf_lists[qf_idx];
+ }
+ else if (action == 'a' && !qf_list_empty(qi, qf_idx))
+! /* Adding to existing list, use last entry. */
+ old_last = qfl->qf_last;
+ else if (action == 'r')
+ {
+--- 6163,6175 ----
+
+ if (action == ' ' || qf_idx == qi->qf_listcount)
+ {
+! // make place for a new list
+ qf_new_list(qi, title);
+ qf_idx = qi->qf_curlist;
+ qfl = &qi->qf_lists[qf_idx];
+ }
+ else if (action == 'a' && !qf_list_empty(qi, qf_idx))
+! // Adding to existing list, use last entry.
+ old_last = qfl->qf_last;
+ else if (action == 'r')
+ {
+***************
+*** 6260,6266 ****
+ for (li = list->lv_first; li != NULL; li = li->li_next)
+ {
+ if (li->li_tv.v_type != VAR_DICT)
+! continue; /* Skip non-dict items */
+
+ d = li->li_tv.vval.v_dict;
+ if (d == NULL)
+--- 6180,6186 ----
+ for (li = list->lv_first; li != NULL; li = li->li_next)
+ {
+ if (li->li_tv.v_type != VAR_DICT)
+! continue; // Skip non-dict items
+
+ d = li->li_tv.vval.v_dict;
+ if (d == NULL)
+***************
+*** 6272,6278 ****
+ }
+
+ if (qfl->qf_index == 0)
+! /* no valid entry */
+ qfl->qf_nonevalid = TRUE;
+ else
+ qfl->qf_nonevalid = FALSE;
+--- 6192,6198 ----
+ }
+
+ if (qfl->qf_index == 0)
+! // no valid entry
+ qfl->qf_nonevalid = TRUE;
+ else
+ qfl->qf_nonevalid = FALSE;
+***************
+*** 6283,6289 ****
+ qfl->qf_index = 1;
+ }
+
+! /* Don't update the cursor in quickfix window when appending entries */
+ qf_update_buffer(qi, old_last);
+
+ return retval;
+--- 6203,6209 ----
+ qfl->qf_index = 1;
+ }
+
+! // Don't update the cursor in quickfix window when appending entries
+ qf_update_buffer(qi, old_last);
+
+ return retval;
+***************
+*** 6300,6330 ****
+ int *newlist)
+ {
+ dictitem_T *di;
+! int qf_idx = qi->qf_curlist; /* default is the current list */
+
+ if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL)
+ {
+! /* Use the specified quickfix/location list */
+ if (di->di_tv.v_type == VAR_NUMBER)
+ {
+! /* for zero use the current list */
+ if (di->di_tv.vval.v_number != 0)
+ qf_idx = di->di_tv.vval.v_number - 1;
+
+ if ((action == ' ' || action == 'a') && qf_idx == qi->qf_listcount)
+ {
+! /*
+! * When creating a new list, accept qf_idx pointing to the next
+! * non-available list and add the new list at the end of the
+! * stack.
+! */
+ *newlist = TRUE;
+ qf_idx = qf_stack_empty(qi) ? 0 : qi->qf_listcount - 1;
+ }
+ else if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
+ return INVALID_QFIDX;
+ else if (action != ' ')
+! *newlist = FALSE; /* use the specified list */
+ }
+ else if (di->di_tv.v_type == VAR_STRING
+ && di->di_tv.vval.v_string != NULL
+--- 6220,6248 ----
+ int *newlist)
+ {
+ dictitem_T *di;
+! int qf_idx = qi->qf_curlist; // default is the current list
+
+ if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL)
+ {
+! // Use the specified quickfix/location list
+ if (di->di_tv.v_type == VAR_NUMBER)
+ {
+! // for zero use the current list
+ if (di->di_tv.vval.v_number != 0)
+ qf_idx = di->di_tv.vval.v_number - 1;
+
+ if ((action == ' ' || action == 'a') && qf_idx == qi->qf_listcount)
+ {
+! // When creating a new list, accept qf_idx pointing to the next
+! // non-available list and add the new list at the end of the
+! // stack.
+ *newlist = TRUE;
+ qf_idx = qf_stack_empty(qi) ? 0 : qi->qf_listcount - 1;
+ }
+ else if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
+ return INVALID_QFIDX;
+ else if (action != ' ')
+! *newlist = FALSE; // use the specified list
+ }
+ else if (di->di_tv.v_type == VAR_STRING
+ && di->di_tv.vval.v_string != NULL
+***************
+*** 6343,6349 ****
+
+ if (!*newlist && (di = dict_find(what, (char_u *)"id", -1)) != NULL)
+ {
+! /* Use the quickfix/location list with the specified id */
+ if (di->di_tv.v_type != VAR_NUMBER)
+ return INVALID_QFIDX;
+
+--- 6261,6267 ----
+
+ if (!*newlist && (di = dict_find(what, (char_u *)"id", -1)) != NULL)
+ {
+! // Use the quickfix/location list with the specified id
+ if (di->di_tv.v_type != VAR_NUMBER)
+ return INVALID_QFIDX;
+
+***************
+*** 6406,6412 ****
+ dictitem_T *efm_di;
+ int retval = FAIL;
+
+! /* Use the user supplied errorformat settings (if present) */
+ if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL)
+ {
+ if (efm_di->di_tv.v_type != VAR_STRING ||
+--- 6324,6330 ----
+ dictitem_T *efm_di;
+ int retval = FAIL;
+
+! // Use the user supplied errorformat settings (if present)
+ if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL)
+ {
+ if (efm_di->di_tv.v_type != VAR_STRING ||
+***************
+*** 6415,6421 ****
+ errorformat = efm_di->di_tv.vval.v_string;
+ }
+
+! /* Only a List value is supported */
+ if (di->di_tv.v_type != VAR_LIST || di->di_tv.vval.v_list == NULL)
+ return FAIL;
+
+--- 6333,6339 ----
+ errorformat = efm_di->di_tv.vval.v_string;
+ }
+
+! // Only a List value is supported
+ if (di->di_tv.v_type != VAR_LIST || di->di_tv.vval.v_list == NULL)
+ return FAIL;
+
+***************
+*** 6462,6468 ****
+ newlist = TRUE;
+
+ qf_idx = qf_setprop_get_qfidx(qi, what, action, &newlist);
+! if (qf_idx == INVALID_QFIDX) /* List not found */
+ return FAIL;
+
+ if (newlist)
+--- 6380,6386 ----
+ newlist = TRUE;
+
+ qf_idx = qf_setprop_get_qfidx(qi, what, action, &newlist);
+! if (qf_idx == INVALID_QFIDX) // List not found
+ return FAIL;
+
+ if (newlist)
+***************
+*** 6516,6522 ****
+
+ if (qfwin != NULL)
+ {
+! /* If the quickfix/location list window is open, then clear it */
+ if (qi->qf_curlist < qi->qf_listcount)
+ qf_free(&qi->qf_lists[qi->qf_curlist]);
+ qf_update_buffer(qi, NULL);
+--- 6434,6440 ----
+
+ if (qfwin != NULL)
+ {
+! // If the quickfix/location list window is open, then clear it
+ if (qi->qf_curlist < qi->qf_listcount)
+ qf_free(&qi->qf_lists[qi->qf_curlist]);
+ qf_update_buffer(qi, NULL);
+***************
+*** 6524,6532 ****
+
+ if (wp != NULL && IS_LL_WINDOW(wp))
+ {
+! /* If in the location list window, then use the non-location list
+! * window with this location list (if present)
+! */
+ llwin = find_win_with_ll(qi);
+ if (llwin != NULL)
+ wp = llwin;
+--- 6442,6449 ----
+
+ if (wp != NULL && IS_LL_WINDOW(wp))
+ {
+! // If in the location list window, then use the non-location list
+! // window with this location list (if present)
+ llwin = find_win_with_ll(qi);
+ if (llwin != NULL)
+ wp = llwin;
+***************
+*** 6535,6551 ****
+ qf_free_all(wp);
+ if (wp == NULL)
+ {
+! /* quickfix list */
+ qi->qf_curlist = 0;
+ qi->qf_listcount = 0;
+ }
+ else if (IS_LL_WINDOW(orig_wp))
+ {
+! /* If the location list window is open, then create a new empty
+! * location list */
+ qf_info_T *new_ll = ll_new_list();
+
+! /* first free the list reference in the location list window */
+ ll_free_all(&orig_wp->w_llist_ref);
+
+ orig_wp->w_llist_ref = new_ll;
+--- 6452,6468 ----
+ qf_free_all(wp);
+ if (wp == NULL)
+ {
+! // quickfix list
+ qi->qf_curlist = 0;
+ qi->qf_listcount = 0;
+ }
+ else if (IS_LL_WINDOW(orig_wp))
+ {
+! // If the location list window is open, then create a new empty
+! // location list
+ qf_info_T *new_ll = ll_new_list();
+
+! // first free the list reference in the location list window
+ ll_free_all(&orig_wp->w_llist_ref);
+
+ orig_wp->w_llist_ref = new_ll;
+***************
+*** 6582,6588 ****
+
+ if (action == 'f')
+ {
+! /* Free the entire quickfix or location list stack */
+ qf_free_stack(wp, qi);
+ }
+ else if (what != NULL)
+--- 6499,6505 ----
+
+ if (action == 'f')
+ {
+! // Free the entire quickfix or location list stack
+ qf_free_stack(wp, qi);
+ }
+ else if (what != NULL)
+***************
+*** 6643,6652 ****
+ }
+ if (IS_LL_WINDOW(win) && (win->w_llist_ref->qf_refcount == 1))
+ {
+! /* In a location list window and none of the other windows is
+! * referring to this location list. Mark the location list
+! * context as still in use.
+! */
+ abort = mark_quickfix_ctx(win->w_llist_ref, copyID);
+ if (abort)
+ return abort;
+--- 6560,6568 ----
+ }
+ if (IS_LL_WINDOW(win) && (win->w_llist_ref->qf_refcount == 1))
+ {
+! // In a location list window and none of the other windows is
+! // referring to this location list. Mark the location list
+! // context as still in use.
+ abort = mark_quickfix_ctx(win->w_llist_ref, copyID);
+ if (abort)
+ return abort;
+***************
+*** 6694,6700 ****
+ #endif
+ }
+
+! /* Must come after autocommands. */
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = ll_get_or_alloc_list(curwin);
+--- 6610,6616 ----
+ #endif
+ }
+
+! // Must come after autocommands.
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+ qi = ll_get_or_alloc_list(curwin);
+***************
+*** 6807,6814 ****
+ wp = curwin;
+ }
+
+! /* Evaluate the expression. When the result is a string or a list we can
+! * use it to fill the errorlist. */
+ tv = eval_expr(eap->arg, NULL);
+ if (tv != NULL)
+ {
+--- 6723,6730 ----
+ wp = curwin;
+ }
+
+! // Evaluate the expression. When the result is a string or a list we can
+! // use it to fill the errorlist.
+ tv = eval_expr(eap->arg, NULL);
+ if (tv != NULL)
+ {
+***************
+*** 6854,6874 ****
+ win_T *wp;
+ qf_info_T *qi;
+
+! /* If the current window is a help window, then use it */
+ if (bt_help(curwin->w_buffer))
+ wp = curwin;
+ else
+! /* Find an existing help window */
+ wp = qf_find_help_win();
+
+! if (wp == NULL) /* Help window not found */
+ qi = NULL;
+ else
+ qi = wp->w_llist;
+
+ if (qi == NULL)
+ {
+! /* Allocate a new location list for help text matches */
+ if ((qi = ll_new_list()) == NULL)
+ return NULL;
+ *new_ll = TRUE;
+--- 6770,6790 ----
+ win_T *wp;
+ qf_info_T *qi;
+
+! // If the current window is a help window, then use it
+ if (bt_help(curwin->w_buffer))
+ wp = curwin;
+ else
+! // Find an existing help window
+ wp = qf_find_help_win();
+
+! if (wp == NULL) // Help window not found
+ qi = NULL;
+ else
+ qi = wp->w_llist;
+
+ if (qi == NULL)
+ {
+! // Allocate a new location list for help text matches
+ if ((qi = ll_new_list()) == NULL)
+ return NULL;
+ *new_ll = TRUE;
+***************
+*** 6901,6908 ****
+ {
+ char_u *line = IObuff;
+ #ifdef FEAT_MBYTE
+! /* Convert a line if 'encoding' is not utf-8 and
+! * the line contains a non-ASCII character. */
+ if (p_vc->vc_type != CONV_NONE
+ && has_non_ascii(IObuff))
+ {
+--- 6817,6824 ----
+ {
+ char_u *line = IObuff;
+ #ifdef FEAT_MBYTE
+! // Convert a line if 'encoding' is not utf-8 and
+! // the line contains a non-ASCII character.
+ if (p_vc->vc_type != CONV_NONE
+ && has_non_ascii(IObuff))
+ {
+***************
+*** 6916,6940 ****
+ {
+ int l = (int)STRLEN(line);
+
+! /* remove trailing CR, LF, spaces, etc. */
+ while (l > 0 && line[l - 1] <= ' ')
+ line[--l] = NUL;
+
+ if (qf_add_entry(qi,
+ qi->qf_curlist,
+! NULL, /* dir */
+ fname,
+ NULL,
+ 0,
+ line,
+ lnum,
+ (int)(p_regmatch->startp[0] - line)
+! + 1, /* col */
+! FALSE, /* vis_col */
+! NULL, /* search pattern */
+! 0, /* nr */
+! 1, /* type */
+! TRUE /* valid */
+ ) == FAIL)
+ {
+ got_int = TRUE;
+--- 6832,6856 ----
+ {
+ int l = (int)STRLEN(line);
+
+! // remove trailing CR, LF, spaces, etc.
+ while (l > 0 && line[l - 1] <= ' ')
+ line[--l] = NUL;
+
+ if (qf_add_entry(qi,
+ qi->qf_curlist,
+! NULL, // dir
+ fname,
+ NULL,
+ 0,
+ line,
+ lnum,
+ (int)(p_regmatch->startp[0] - line)
+! + 1, // col
+! FALSE, // vis_col
+! NULL, // search pattern
+! 0, // nr
+! 1, // type
+! TRUE // valid
+ ) == FAIL)
+ {
+ got_int = TRUE;
+***************
+*** 6976,6982 ****
+ char_u **fnames;
+ int fi;
+
+! /* Find all "*.txt" and "*.??x" files in the "doc" directory. */
+ add_pathsep(dirname);
+ STRCAT(dirname, "doc/*.\\(txt\\|??x\\)");
+ if (gen_expand_wildcards(1, &dirname, &fcount,
+--- 6892,6898 ----
+ char_u **fnames;
+ int fi;
+
+! // Find all "*.txt" and "*.??x" files in the "doc" directory.
+ add_pathsep(dirname);
+ STRCAT(dirname, "doc/*.\\(txt\\|??x\\)");
+ if (gen_expand_wildcards(1, &dirname, &fcount,
+***************
+*** 6986,6992 ****
+ for (fi = 0; fi < fcount && !got_int; ++fi)
+ {
+ #ifdef FEAT_MULTI_LANG
+! /* Skip files for a different language. */
+ if (lang != NULL
+ && STRNICMP(lang, fnames[fi]
+ + STRLEN(fnames[fi]) - 3, 2) != 0
+--- 6902,6908 ----
+ for (fi = 0; fi < fcount && !got_int; ++fi)
+ {
+ #ifdef FEAT_MULTI_LANG
+! // Skip files for a different language.
+ if (lang != NULL
+ && STRNICMP(lang, fnames[fi]
+ + STRLEN(fnames[fi]) - 3, 2) != 0
+***************
+*** 7020,7034 ****
+ #ifdef FEAT_MBYTE
+ vimconv_T vc;
+
+! /* Help files are in utf-8 or latin1, convert lines when 'encoding'
+! * differs. */
+ vc.vc_type = CONV_NONE;
+ if (!enc_utf8)
+ convert_setup(&vc, (char_u *)"utf-8", p_enc);
+ #endif
+
+
+! /* Go through all the directories in 'runtimepath' */
+ p = p_rtp;
+ while (*p != NUL && !got_int)
+ {
+--- 6936,6950 ----
+ #ifdef FEAT_MBYTE
+ vimconv_T vc;
+
+! // Help files are in utf-8 or latin1, convert lines when 'encoding'
+! // differs.
+ vc.vc_type = CONV_NONE;
+ if (!enc_utf8)
+ convert_setup(&vc, (char_u *)"utf-8", p_enc);
+ #endif
+
+
+! // Go through all the directories in 'runtimepath'
+ p = p_rtp;
+ while (*p != NUL && !got_int)
+ {
+***************
+*** 7124,7134 ****
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+ if (!new_qi && IS_LL_STACK(qi) && qf_find_buf(qi) == NULL)
+! /* autocommands made "qi" invalid */
+ return;
+ }
+
+! /* Jump to first match. */
+ if (!qf_list_empty(qi, qi->qf_curlist))
+ qf_jump(qi, 0, 0, FALSE);
+ else
+--- 7040,7050 ----
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+ if (!new_qi && IS_LL_STACK(qi) && qf_find_buf(qi) == NULL)
+! // autocommands made "qi" invalid
+ return;
+ }
+
+! // Jump to first match.
+ if (!qf_list_empty(qi, qi->qf_curlist))
+ qf_jump(qi, 0, 0, FALSE);
+ else
+*** ../vim-8.1.0460/src/version.c 2018-10-07 20:14:53.091279680 +0200
+--- src/version.c 2018-10-07 20:25:44.858426041 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 461,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+169. You hire a housekeeper for your home page.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0462 b/data/vim/patches/8.1.0462
new file mode 100644
index 000000000..dbf8176c3
--- /dev/null
+++ b/data/vim/patches/8.1.0462
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0462
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0462
+Problem: When using ConPTY Vim can be a child process.
+Solution: To find a Vim window use both EnumWindows() and
+ EnumChildWindows(). (Nobuhiro Takasaki, closes #3521)
+Files: src/os_mswin.c
+
+
+*** ../vim-8.1.0461/src/os_mswin.c 2018-08-07 22:30:26.674240818 +0200
+--- src/os_mswin.c 2018-10-07 20:32:20.655313848 +0200
+***************
+*** 2324,2329 ****
+--- 2324,2364 ----
+ return TRUE;
+ }
+
++ struct enum_windows_s
++ {
++ WNDENUMPROC lpEnumFunc;
++ LPARAM lParam;
++ };
++
++ static BOOL CALLBACK
++ enum_windows_child(HWND hwnd, LPARAM lParam)
++ {
++ struct enum_windows_s *ew = (struct enum_windows_s *)lParam;
++
++ return (ew->lpEnumFunc)(hwnd, ew->lParam);
++ }
++
++ static BOOL CALLBACK
++ enum_windows_toplevel(HWND hwnd, LPARAM lParam)
++ {
++ struct enum_windows_s *ew = (struct enum_windows_s *)lParam;
++
++ if ((ew->lpEnumFunc)(hwnd, ew->lParam) == FALSE)
++ return FALSE;
++ return EnumChildWindows(hwnd, enum_windows_child, lParam);
++ }
++
++ /* Enumerate all windows including children. */
++ static BOOL
++ enum_windows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
++ {
++ struct enum_windows_s ew;
++
++ ew.lpEnumFunc = lpEnumFunc;
++ ew.lParam = lParam;
++ return EnumWindows(enum_windows_toplevel, (LPARAM)&ew);
++ }
++
+ static HWND
+ findServer(char_u *name)
+ {
+***************
+*** 2332,2338 ****
+ id.name = name;
+ id.hwnd = 0;
+
+! EnumWindows(enumWindowsGetServer, (LPARAM)(&id));
+
+ return id.hwnd;
+ }
+--- 2367,2373 ----
+ id.name = name;
+ id.hwnd = 0;
+
+! enum_windows(enumWindowsGetServer, (LPARAM)(&id));
+
+ return id.hwnd;
+ }
+***************
+*** 2395,2401 ****
+
+ ga_init2(&ga, 1, 100);
+
+! EnumWindows(enumWindowsGetNames, (LPARAM)(&ga));
+ ga_append(&ga, NUL);
+
+ return ga.ga_data;
+--- 2430,2436 ----
+
+ ga_init2(&ga, 1, 100);
+
+! enum_windows(enumWindowsGetNames, (LPARAM)(&ga));
+ ga_append(&ga, NUL);
+
+ return ga.ga_data;
+*** ../vim-8.1.0461/src/version.c 2018-10-07 20:26:15.834185143 +0200
+--- src/version.c 2018-10-07 20:34:15.754398574 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 462,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+170. You introduce your wife as "my_lady@home.wife" and refer to your
+ children as "forked processes."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0463 b/data/vim/patches/8.1.0463
new file mode 100644
index 000000000..f29b6f050
--- /dev/null
+++ b/data/vim/patches/8.1.0463
@@ -0,0 +1,80 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0463
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0463
+Problem: "simalt ~x" in .vimrc blocks swap file prompt.
+Solution: Flush buffers before prompting. (Yasuhiro Matsumoto,
+ closes #3518, closes #2192)
+Files: src/memline.c
+
+
+*** ../vim-8.1.0462/src/memline.c 2018-09-30 21:43:17.195693290 +0200
+--- src/memline.c 2018-10-07 20:43:37.409061819 +0200
+***************
+*** 4506,4524 ****
+ #endif
+ {
+ #ifdef FEAT_GUI
+! /* If we are supposed to start the GUI but it wasn't
+! * completely started yet, start it now. This makes
+! * the messages displayed in the Vim window when
+! * loading a session from the .gvimrc file. */
+ if (gui.starting && !gui.in_use)
+ gui_start();
+ #endif
+! /* Show info about the existing swap file. */
+ attention_message(buf, fname);
+
+! /* We don't want a 'q' typed at the more-prompt
+! * interrupt loading a file. */
+ got_int = FALSE;
+ }
+
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+--- 4506,4528 ----
+ #endif
+ {
+ #ifdef FEAT_GUI
+! // If we are supposed to start the GUI but it wasn't
+! // completely started yet, start it now. This makes
+! // the messages displayed in the Vim window when
+! // loading a session from the .gvimrc file.
+ if (gui.starting && !gui.in_use)
+ gui_start();
+ #endif
+! // Show info about the existing swap file.
+ attention_message(buf, fname);
+
+! // We don't want a 'q' typed at the more-prompt
+! // interrupt loading a file.
+ got_int = FALSE;
++
++ // If vimrc has "simalt ~x" we don't want it to
++ // interfere with the prompt here.
++ flush_buffers(TRUE);
+ }
+
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+*** ../vim-8.1.0462/src/version.c 2018-10-07 20:35:08.853975271 +0200
+--- src/version.c 2018-10-07 20:45:08.083893253 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 463,
+ /**/
+
+--
+ Very funny, Scotty. Now beam down my clothes.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0464 b/data/vim/patches/8.1.0464
new file mode 100644
index 000000000..4a922e8f4
--- /dev/null
+++ b/data/vim/patches/8.1.0464
@@ -0,0 +1,94 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0464
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0464
+Problem: MS-Windows: job_info() has cmd without backslashes. (Daniel
+ Hahler)
+Solution: Use rem_backslash(). (closes #3517, closes #3404)
+Files: src/misc2.c, src/testdir/test_channel.vim
+
+
+*** ../vim-8.1.0463/src/misc2.c 2018-09-30 21:43:17.195693290 +0200
+--- src/misc2.c 2018-10-07 21:31:14.560595004 +0200
+***************
+*** 6458,6471 ****
+ while (*p != NUL && (inquote || (*p != ' ' && *p != TAB)))
+ {
+ if (p[0] == '"')
+! /* quotes surrounding an argument and are dropped */
+ inquote = !inquote;
+ else
+ {
+! if (p[0] == '\\' && p[1] != NUL)
+ {
+! /* First pass: skip over "\ " and "\"".
+! * Second pass: Remove the backslash. */
+ ++p;
+ }
+ if (i == 1)
+--- 6458,6471 ----
+ while (*p != NUL && (inquote || (*p != ' ' && *p != TAB)))
+ {
+ if (p[0] == '"')
+! // quotes surrounding an argument and are dropped
+ inquote = !inquote;
+ else
+ {
+! if (rem_backslash(p))
+ {
+! // First pass: skip over "\ " and "\"".
+! // Second pass: Remove the backslash.
+ ++p;
+ }
+ if (i == 1)
+*** ../vim-8.1.0463/src/testdir/test_channel.vim 2018-09-06 16:27:20.664831945 +0200
+--- src/testdir/test_channel.vim 2018-10-07 21:34:54.394554136 +0200
+***************
+*** 1721,1726 ****
+--- 1721,1742 ----
+ call WaitForAssert({-> assert_equal(1, g:linecount)})
+ endfunc
+
++ func Test_job_start_windows()
++ if !has('job') || !has('win32')
++ return
++ endif
++
++ " Check that backslash in $COMSPEC is handled properly.
++ let g:echostr = ''
++ let cmd = $COMSPEC . ' /c echo 123'
++ let job = job_start(cmd, {'callback': {ch,msg -> execute(":let g:echostr .= msg")}})
++ let info = job_info(job)
++ call assert_equal([$COMSPEC, '/c', 'echo', '123'], info.cmd)
++
++ call WaitForAssert({-> assert_equal("123", g:echostr)})
++ unlet g:echostr
++ endfunc
++
+ func Test_env()
+ if !has('job')
+ return
+*** ../vim-8.1.0463/src/version.c 2018-10-07 20:48:33.941433087 +0200
+--- src/version.c 2018-10-07 21:35:44.446090534 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 464,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+172. You join listservers just for the extra e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0465 b/data/vim/patches/8.1.0465
new file mode 100644
index 000000000..1f97a2c26
--- /dev/null
+++ b/data/vim/patches/8.1.0465
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0465
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0465 (after 8.1.0452)
+Problem: Client-server test fails.
+Solution: Change logic in EnumWindows().
+Files: src/os_mswin.c
+
+
+*** ../vim-8.1.0464/src/os_mswin.c 2018-10-07 20:35:08.853975271 +0200
+--- src/os_mswin.c 2018-10-07 22:44:57.088965618 +0200
+***************
+*** 2343,2350 ****
+ {
+ struct enum_windows_s *ew = (struct enum_windows_s *)lParam;
+
+! if ((ew->lpEnumFunc)(hwnd, ew->lParam) == FALSE)
+! return FALSE;
+ return EnumChildWindows(hwnd, enum_windows_child, lParam);
+ }
+
+--- 2343,2350 ----
+ {
+ struct enum_windows_s *ew = (struct enum_windows_s *)lParam;
+
+! if ((ew->lpEnumFunc)(hwnd, ew->lParam))
+! return TRUE;
+ return EnumChildWindows(hwnd, enum_windows_child, lParam);
+ }
+
+*** ../vim-8.1.0464/src/version.c 2018-10-07 21:36:07.389878130 +0200
+--- src/version.c 2018-10-07 22:46:35.565465599 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 465,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+173. You keep tracking down the email addresses of all your friends
+ (even childhood friends).
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0466 b/data/vim/patches/8.1.0466
new file mode 100644
index 000000000..414d1073e
--- /dev/null
+++ b/data/vim/patches/8.1.0466
@@ -0,0 +1,264 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0466
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0466 (after 8.1.0463)
+Problem: Autocmd test fails.
+Solution: Do call inchar() when flushing typeahead.
+Files: src/vim.h, src/getchar.c, src/proto/getchar.pro, src/memline.c,
+ src/message.c, src/misc1.c
+
+
+*** ../vim-8.1.0465/src/vim.h 2018-09-18 22:29:59.888041388 +0200
+--- src/vim.h 2018-10-07 23:01:47.537604844 +0200
+***************
+*** 2108,2113 ****
+--- 2108,2120 ----
+ PASTE_ONE_CHAR /* return first character */
+ } paste_mode_T;
+
++ // Argument for flush_buffers().
++ typedef enum {
++ FLUSH_MINIMAL,
++ FLUSH_TYPEAHEAD, // flush current typebuf contents
++ FLUSH_INPUT // flush typebuf and inchar() input
++ } flush_buffers_T;
++
+ #include "ex_cmds.h" /* Ex command defines */
+ #include "spell.h" /* spell checking stuff */
+
+*** ../vim-8.1.0465/src/getchar.c 2018-09-30 21:43:17.187693348 +0200
+--- src/getchar.c 2018-10-07 23:05:48.079859873 +0200
+***************
+*** 438,444 ****
+ * flush all typeahead characters (used when interrupted by a CTRL-C).
+ */
+ void
+! flush_buffers(int flush_typeahead)
+ {
+ init_typebuf();
+
+--- 438,444 ----
+ * flush all typeahead characters (used when interrupted by a CTRL-C).
+ */
+ void
+! flush_buffers(flush_buffers_T flush_typeahead)
+ {
+ init_typebuf();
+
+***************
+*** 446,460 ****
+ while (read_readbuffers(TRUE) != NUL)
+ ;
+
+! if (flush_typeahead) /* remove all typeahead */
+ {
+! /*
+! * We have to get all characters, because we may delete the first part
+! * of an escape sequence.
+! * In an xterm we get one char at a time and we have to get them all.
+! */
+! while (inchar(typebuf.tb_buf, typebuf.tb_buflen - 1, 10L) != 0)
+! ;
+ typebuf.tb_off = MAXMAPLEN;
+ typebuf.tb_len = 0;
+ #if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
+--- 446,466 ----
+ while (read_readbuffers(TRUE) != NUL)
+ ;
+
+! if (flush_typeahead == FLUSH_MINIMAL)
+ {
+! // remove mapped characters at the start only
+! typebuf.tb_off += typebuf.tb_maplen;
+! typebuf.tb_len -= typebuf.tb_maplen;
+! }
+! else
+! {
+! // remove typeahead
+! if (flush_typeahead == FLUSH_INPUT)
+! // We have to get all characters, because we may delete the first
+! // part of an escape sequence. In an xterm we get one char at a
+! // time and we have to get them all.
+! while (inchar(typebuf.tb_buf, typebuf.tb_buflen - 1, 10L) != 0)
+! ;
+ typebuf.tb_off = MAXMAPLEN;
+ typebuf.tb_len = 0;
+ #if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
+***************
+*** 463,473 ****
+ typebuf_was_filled = FALSE;
+ #endif
+ }
+- else /* remove mapped characters at the start only */
+- {
+- typebuf.tb_off += typebuf.tb_maplen;
+- typebuf.tb_len -= typebuf.tb_maplen;
+- }
+ typebuf.tb_maplen = 0;
+ typebuf.tb_silent = 0;
+ cmd_silent = FALSE;
+--- 469,474 ----
+***************
+*** 1858,1863 ****
+--- 1859,1865 ----
+ * Check if a character is available, such that vgetc() will not block.
+ * If the next character is a special character or multi-byte, the returned
+ * character is not valid!.
++ * Returns NUL if no character is available.
+ */
+ int
+ vpeekc(void)
+***************
+*** 1956,1962 ****
+ * KeyTyped is set to TRUE in the case the user typed the key.
+ * KeyStuffed is TRUE if the character comes from the stuff buffer.
+ * if "advance" is FALSE (vpeekc()):
+! * just look whether there is a character available.
+ *
+ * When "no_mapping" is zero, checks for mappings in the current mode.
+ * Only returns one byte (of a multi-byte character).
+--- 1958,1965 ----
+ * KeyTyped is set to TRUE in the case the user typed the key.
+ * KeyStuffed is TRUE if the character comes from the stuff buffer.
+ * if "advance" is FALSE (vpeekc()):
+! * Just look whether there is a character available.
+! * Return NUL if not.
+ *
+ * When "no_mapping" is zero, checks for mappings in the current mode.
+ * Only returns one byte (of a multi-byte character).
+***************
+*** 2084,2090 ****
+ c = ESC;
+ else
+ c = Ctrl_C;
+! flush_buffers(TRUE); /* flush all typeahead */
+
+ if (advance)
+ {
+--- 2087,2093 ----
+ c = ESC;
+ else
+ c = Ctrl_C;
+! flush_buffers(FLUSH_INPUT); // flush all typeahead
+
+ if (advance)
+ {
+***************
+*** 2510,2516 ****
+ redrawcmdline();
+ else
+ setcursor();
+! flush_buffers(FALSE);
+ mapdepth = 0; /* for next one */
+ c = -1;
+ break;
+--- 2513,2519 ----
+ redrawcmdline();
+ else
+ setcursor();
+! flush_buffers(FLUSH_MINIMAL);
+ mapdepth = 0; /* for next one */
+ c = -1;
+ break;
+*** ../vim-8.1.0465/src/proto/getchar.pro 2018-05-17 13:52:36.000000000 +0200
+--- src/proto/getchar.pro 2018-10-07 23:07:15.159189769 +0200
+***************
+*** 5,11 ****
+ int stuff_empty(void);
+ int readbuf1_empty(void);
+ void typeahead_noflush(int c);
+! void flush_buffers(int flush_typeahead);
+ void ResetRedobuff(void);
+ void CancelRedo(void);
+ void saveRedobuff(save_redo_T *save_redo);
+--- 5,11 ----
+ int stuff_empty(void);
+ int readbuf1_empty(void);
+ void typeahead_noflush(int c);
+! void flush_buffers(flush_buffers_T flush_typeahead);
+ void ResetRedobuff(void);
+ void CancelRedo(void);
+ void saveRedobuff(save_redo_T *save_redo);
+*** ../vim-8.1.0465/src/memline.c 2018-10-07 20:48:33.941433087 +0200
+--- src/memline.c 2018-10-07 23:06:02.015753778 +0200
+***************
+*** 4522,4528 ****
+
+ // If vimrc has "simalt ~x" we don't want it to
+ // interfere with the prompt here.
+! flush_buffers(TRUE);
+ }
+
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+--- 4522,4528 ----
+
+ // If vimrc has "simalt ~x" we don't want it to
+ // interfere with the prompt here.
+! flush_buffers(FLUSH_TYPEAHEAD);
+ }
+
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+*** ../vim-8.1.0465/src/message.c 2018-09-30 21:43:17.195693290 +0200
+--- src/message.c 2018-10-07 23:06:29.651542067 +0200
+***************
+*** 688,695 ****
+ if (p_eb)
+ beep_flush(); /* also includes flush_buffers() */
+ else
+! flush_buffers(FALSE); /* flush internal buffers */
+! did_emsg = TRUE; /* flag for DoOneCmd() */
+ #ifdef FEAT_EVAL
+ did_uncaught_emsg = TRUE;
+ #endif
+--- 688,695 ----
+ if (p_eb)
+ beep_flush(); /* also includes flush_buffers() */
+ else
+! flush_buffers(FLUSH_MINIMAL); // flush internal buffers
+! did_emsg = TRUE; // flag for DoOneCmd()
+ #ifdef FEAT_EVAL
+ did_uncaught_emsg = TRUE;
+ #endif
+*** ../vim-8.1.0465/src/misc1.c 2018-09-30 21:43:17.195693290 +0200
+--- src/misc1.c 2018-10-07 23:07:05.159267560 +0200
+***************
+*** 3825,3831 ****
+ {
+ if (emsg_silent == 0)
+ {
+! flush_buffers(FALSE);
+ vim_beep(BO_ERROR);
+ }
+ }
+--- 3825,3831 ----
+ {
+ if (emsg_silent == 0)
+ {
+! flush_buffers(FLUSH_MINIMAL);
+ vim_beep(BO_ERROR);
+ }
+ }
+*** ../vim-8.1.0465/src/version.c 2018-10-07 22:47:03.633199859 +0200
+--- src/version.c 2018-10-07 23:04:59.372226904 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 466,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+174. You know what a listserv is.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0467 b/data/vim/patches/8.1.0467
new file mode 100644
index 000000000..f8de9c1f7
--- /dev/null
+++ b/data/vim/patches/8.1.0467
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0467
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0467 (after 8.1.0063)
+Problem: Cannot build with Mac OS X 10.5.
+Solution: Change #ifdef into #if. (Akshay Hegde, closes #3022)
+Files: src/os_macosx.m
+
+
+*** ../vim-8.1.0466/src/os_macosx.m 2018-06-17 15:01:00.580427088 +0200
+--- src/os_macosx.m 2018-10-08 20:04:24.931842964 +0200
+***************
+*** 63,69 ****
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSPasteboard *pb = [NSPasteboard generalPasteboard];
+! #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
+ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
+ NSPasteboardTypeString, nil];
+ #else
+--- 63,69 ----
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSPasteboard *pb = [NSPasteboard generalPasteboard];
+! #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
+ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
+ NSPasteboardTypeString, nil];
+ #else
+***************
+*** 99,105 ****
+ {
+ /* Use NSPasteboardTypeString. The motion type is detected automatically.
+ */
+! #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
+ NSMutableString *mstring =
+ [[pb stringForType:NSPasteboardTypeString] mutableCopy];
+ #else
+--- 99,105 ----
+ {
+ /* Use NSPasteboardTypeString. The motion type is detected automatically.
+ */
+! #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
+ NSMutableString *mstring =
+ [[pb stringForType:NSPasteboardTypeString] mutableCopy];
+ #else
+***************
+*** 188,194 ****
+
+ /* See clip_mch_request_selection() for info on pasteboard types. */
+ NSPasteboard *pb = [NSPasteboard generalPasteboard];
+! #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
+ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
+ NSPasteboardTypeString, nil];
+ #else
+--- 188,194 ----
+
+ /* See clip_mch_request_selection() for info on pasteboard types. */
+ NSPasteboard *pb = [NSPasteboard generalPasteboard];
+! #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
+ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
+ NSPasteboardTypeString, nil];
+ #else
+***************
+*** 201,207 ****
+ NSArray *plist = [NSArray arrayWithObjects:motion, string, nil];
+ [pb setPropertyList:plist forType:VimPboardType];
+
+! #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
+ [pb setString:string forType:NSPasteboardTypeString];
+ #else
+ [pb setString:string forType:NSStringPboardType];
+--- 201,207 ----
+ NSArray *plist = [NSArray arrayWithObjects:motion, string, nil];
+ [pb setPropertyList:plist forType:VimPboardType];
+
+! #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
+ [pb setString:string forType:NSPasteboardTypeString];
+ #else
+ [pb setString:string forType:NSStringPboardType];
+*** ../vim-8.1.0466/src/version.c 2018-10-07 23:16:33.138616197 +0200
+--- src/version.c 2018-10-08 20:06:28.090514727 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 467,
+ /**/
+
+--
+If Microsoft would build a car...
+... the oil, water temperature, and alternator warning lights would
+all be replaced by a single "General Protection Fault" warning light.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0468 b/data/vim/patches/8.1.0468
new file mode 100644
index 000000000..2da169a3d
--- /dev/null
+++ b/data/vim/patches/8.1.0468
@@ -0,0 +1,121 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0468
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0468
+Problem: MS-Windows: Filter command with pipe character fails. (Johannes
+ Riecken)
+Solution: Find the pipe character outside of quotes. (Yasuhiro Matsumoto,
+ closes #1743, closes #3523)
+Files: src/ex_cmds.c, src/testdir/test_filter_cmd.vim
+
+
+*** ../vim-8.1.0467/src/ex_cmds.c 2018-09-30 21:43:17.183693376 +0200
+--- src/ex_cmds.c 2018-10-09 21:46:24.968689863 +0200
+***************
+*** 1676,1681 ****
+--- 1676,1701 ----
+ apply_autocmds(EVENT_SHELLCMDPOST, NULL, NULL, FALSE, curbuf);
+ }
+
++ #if !defined(UNIX)
++ static char_u *
++ find_pipe(char_u *cmd)
++ {
++ char_u *p;
++ int inquote = FALSE;
++
++ for (p = cmd; *p != NUL; ++p)
++ {
++ if (!inquote && *p == '|')
++ return p;
++ if (*p == '"')
++ inquote = !inquote;
++ else if (rem_backslash(p))
++ ++p;
++ }
++ return NULL;
++ }
++ #endif
++
+ /*
+ * Create a shell command from a command string, input redirection file and
+ * output redirection file.
+***************
+*** 1746,1752 ****
+ */
+ if (*p_shq == NUL)
+ {
+! p = vim_strchr(buf, '|');
+ if (p != NULL)
+ *p = NUL;
+ }
+--- 1766,1772 ----
+ */
+ if (*p_shq == NUL)
+ {
+! p = find_pipe(buf);
+ if (p != NULL)
+ *p = NUL;
+ }
+***************
+*** 1754,1760 ****
+ STRCAT(buf, itmp);
+ if (*p_shq == NUL)
+ {
+! p = vim_strchr(cmd, '|');
+ if (p != NULL)
+ {
+ STRCAT(buf, " "); /* insert a space before the '|' for DOS */
+--- 1774,1780 ----
+ STRCAT(buf, itmp);
+ if (*p_shq == NUL)
+ {
+! p = find_pipe(cmd);
+ if (p != NULL)
+ {
+ STRCAT(buf, " "); /* insert a space before the '|' for DOS */
+*** ../vim-8.1.0467/src/testdir/test_filter_cmd.vim 2017-01-07 20:31:37.000000000 +0100
+--- src/testdir/test_filter_cmd.vim 2018-10-09 21:39:56.774210323 +0200
+***************
+*** 74,76 ****
+--- 74,89 ----
+ call assert_equal('filter /pat/ print', s:complete_filter_cmd('filter /pat/ pri'))
+ call assert_equal('filter #pat# print', s:complete_filter_cmd('filter #pat# pri'))
+ endfunc
++
++ func Test_filter_cmd_with_filter()
++ new
++ set shelltemp
++ %!echo "a|b"
++ let out = getline(1)
++ bw!
++ if has('win32')
++ let out = trim(out, '" ')
++ endif
++ call assert_equal('a|b', out)
++ set shelltemp&
++ endfunction
+*** ../vim-8.1.0467/src/version.c 2018-10-08 20:07:35.601823010 +0200
+--- src/version.c 2018-10-09 21:42:46.361698405 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 468,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+176. You lie, even to user-friends, about how long you were online yesterday.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0469 b/data/vim/patches/8.1.0469
new file mode 100644
index 000000000..71be8c173
--- /dev/null
+++ b/data/vim/patches/8.1.0469
@@ -0,0 +1,712 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0469
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0469
+Problem: Too often indexing in qf_lists[].
+Solution: Use a qf_list_T pointer. (Yegappan Lakshmanan)
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0468/src/quickfix.c 2018-10-07 20:26:15.834185143 +0200
+--- src/quickfix.c 2018-10-11 17:37:51.185959011 +0200
+***************
+*** 1729,1735 ****
+ if (!adding)
+ {
+ // Error when creating a new list. Free the new list
+! qf_free(&qi->qf_lists[qi->qf_curlist]);
+ qi->qf_listcount--;
+ if (qi->qf_curlist > 0)
+ --qi->qf_curlist;
+--- 1729,1735 ----
+ if (!adding)
+ {
+ // Error when creating a new list. Free the new list
+! qf_free(qfl);
+ qi->qf_listcount--;
+ if (qi->qf_curlist > 0)
+ --qi->qf_curlist;
+***************
+*** 1812,1817 ****
+--- 1812,1818 ----
+ qf_new_list(qf_info_T *qi, char_u *qf_title)
+ {
+ int i;
++ qf_list_T *qfl;
+
+ // If the current entry is not the last entry, delete entries beyond
+ // the current entry. This makes it possible to browse in a tree-like
+***************
+*** 1830,1838 ****
+ }
+ else
+ qi->qf_curlist = qi->qf_listcount++;
+! vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
+! qf_store_title(&qi->qf_lists[qi->qf_curlist], qf_title);
+! qi->qf_lists[qi->qf_curlist].qf_id = ++last_qf_id;
+ }
+
+ /*
+--- 1831,1840 ----
+ }
+ else
+ qi->qf_curlist = qi->qf_listcount++;
+! qfl = &qi->qf_lists[qi->qf_curlist];
+! vim_memset(qfl, 0, (size_t)(sizeof(qf_list_T)));
+! qf_store_title(qfl, qf_title);
+! qfl->qf_id = ++last_qf_id;
+ }
+
+ /*
+***************
+*** 2149,2154 ****
+--- 2151,2157 ----
+ static int
+ qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *directory, char_u *fname)
+ {
++ qf_list_T *qfl = &qi->qf_lists[qf_idx];
+ char_u *ptr = NULL;
+ buf_T *buf;
+ char_u *bufname;
+***************
+*** 2174,2180 ****
+ if (mch_getperm(ptr) < 0)
+ {
+ vim_free(ptr);
+! directory = qf_guess_filepath(&qi->qf_lists[qf_idx], fname);
+ if (directory)
+ ptr = concat_fnames(directory, fname, TRUE);
+ else
+--- 2177,2183 ----
+ if (mch_getperm(ptr) < 0)
+ {
+ vim_free(ptr);
+! directory = qf_guess_filepath(qfl, fname);
+ if (directory)
+ ptr = concat_fnames(directory, fname, TRUE);
+ else
+***************
+*** 3757,3762 ****
+--- 3760,3766 ----
+ ex_cwindow(exarg_T *eap)
+ {
+ qf_info_T *qi = &ql_info;
++ qf_list_T *qfl;
+ win_T *win;
+
+ if (is_loclist_cmd(eap->cmdidx))
+***************
+*** 3766,3771 ****
+--- 3770,3777 ----
+ return;
+ }
+
++ qfl = &qi->qf_lists[qi->qf_curlist];
++
+ // Look for an existing quickfix window.
+ win = qf_find_win(qi);
+
+***************
+*** 3773,3779 ****
+ // close the window. If a quickfix window is not open, then open
+ // it if we have errors; otherwise, leave it closed.
+ if (qf_stack_empty(qi)
+! || qi->qf_lists[qi->qf_curlist].qf_nonevalid
+ || qf_list_empty(qi, qi->qf_curlist))
+ {
+ if (win != NULL)
+--- 3779,3785 ----
+ // close the window. If a quickfix window is not open, then open
+ // it if we have errors; otherwise, leave it closed.
+ if (qf_stack_empty(qi)
+! || qfl->qf_nonevalid
+ || qf_list_empty(qi, qi->qf_curlist))
+ {
+ if (win != NULL)
+***************
+*** 3930,3935 ****
+--- 3936,3942 ----
+ ex_copen(exarg_T *eap)
+ {
+ qf_info_T *qi = &ql_info;
++ qf_list_T *qfl;
+ int height;
+ int status = FAIL;
+
+***************
+*** 3961,3972 ****
+ if (qf_open_new_cwindow(qi, height) == FAIL)
+ return;
+
+! qf_set_title_var(&qi->qf_lists[qi->qf_curlist]);
+
+ // Fill the buffer with the quickfix list.
+ qf_fill_buffer(qi, curbuf, NULL);
+
+! curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+ curwin->w_cursor.col = 0;
+ check_cursor();
+ update_topline(); // scroll to show the line
+--- 3968,3980 ----
+ if (qf_open_new_cwindow(qi, height) == FAIL)
+ return;
+
+! qfl = &qi->qf_lists[qi->qf_curlist];
+! qf_set_title_var(qfl);
+
+ // Fill the buffer with the quickfix list.
+ qf_fill_buffer(qi, curbuf, NULL);
+
+! curwin->w_cursor.lnum = qfl->qf_index;
+ curwin->w_cursor.col = 0;
+ check_cursor();
+ update_topline(); // scroll to show the line
+***************
+*** 4282,4295 ****
+ // Check if there is anything to display
+ if (!qf_stack_empty(qi))
+ {
+! char_u dirname[MAXPATHL];
+
+ *dirname = NUL;
+
+ // Add one line for each error
+ if (old_last == NULL)
+ {
+! qfp = qi->qf_lists[qi->qf_curlist].qf_start;
+ lnum = 0;
+ }
+ else
+--- 4290,4304 ----
+ // Check if there is anything to display
+ if (!qf_stack_empty(qi))
+ {
+! qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
+! char_u dirname[MAXPATHL];
+
+ *dirname = NUL;
+
+ // Add one line for each error
+ if (old_last == NULL)
+ {
+! qfp = qfl->qf_start;
+ lnum = 0;
+ }
+ else
+***************
+*** 4297,4303 ****
+ qfp = old_last->qf_next;
+ lnum = buf->b_ml.ml_line_count;
+ }
+! while (lnum < qi->qf_lists[qi->qf_curlist].qf_count)
+ {
+ if (qf_buf_add_line(buf, lnum, qfp, dirname) == FAIL)
+ break;
+--- 4306,4312 ----
+ qfp = old_last->qf_next;
+ lnum = buf->b_ml.ml_line_count;
+ }
+! while (lnum < qfl->qf_count)
+ {
+ if (qf_buf_add_line(buf, lnum, qfp, dirname) == FAIL)
+ break;
+***************
+*** 4345,4353 ****
+ * For every change made to the quickfix list, update the changed tick.
+ */
+ static void
+! qf_list_changed(qf_info_T *qi, int qf_idx)
+ {
+! qi->qf_lists[qf_idx].qf_changedtick++;
+ }
+
+ /*
+--- 4354,4362 ----
+ * For every change made to the quickfix list, update the changed tick.
+ */
+ static void
+! qf_list_changed(qf_list_T *qfl)
+ {
+! qfl->qf_changedtick++;
+ }
+
+ /*
+***************
+*** 4595,4601 ****
+ goto cleanup;
+ }
+ if (res >= 0)
+! qf_list_changed(qi, qi->qf_curlist);
+
+ // Remember the current quickfix list identifier, so that we can
+ // check for autocommands changing the current quickfix list.
+--- 4604,4610 ----
+ goto cleanup;
+ }
+ if (res >= 0)
+! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+
+ // Remember the current quickfix list identifier, so that we can
+ // check for autocommands changing the current quickfix list.
+***************
+*** 4620,4625 ****
+--- 4629,4635 ----
+ qf_get_size(exarg_T *eap)
+ {
+ qf_info_T *qi = &ql_info;
++ qf_list_T *qfl;
+ qfline_T *qfp;
+ int i, sz = 0;
+ int prev_fnum = 0;
+***************
+*** 4632,4639 ****
+ return 0;
+ }
+
+! for (i = 0, qfp = qi->qf_lists[qi->qf_curlist].qf_start;
+! i < qi->qf_lists[qi->qf_curlist].qf_count && qfp != NULL;
+ ++i, qfp = qfp->qf_next)
+ {
+ if (qfp->qf_valid)
+--- 4642,4649 ----
+ return 0;
+ }
+
+! qfl = &qi->qf_lists[qi->qf_curlist];
+! for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count && qfp != NULL;
+ ++i, qfp = qfp->qf_next)
+ {
+ if (qfp->qf_valid)
+***************
+*** 4935,4941 ****
+ return;
+ }
+ if (res >= 0)
+! qf_list_changed(qi, qi->qf_curlist);
+ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
+--- 4945,4951 ----
+ return;
+ }
+ if (res >= 0)
+! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+ if (au_name != NULL)
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
+***************
+*** 5204,5209 ****
+--- 5214,5220 ----
+ char_u *p;
+ int fi;
+ qf_info_T *qi = &ql_info;
++ qf_list_T *qfl;
+ int_u save_qfid;
+ win_T *wp = NULL;
+ buf_T *buf;
+***************
+*** 5410,5419 ****
+
+ FreeWild(fcount, fnames);
+
+! qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+! qi->qf_lists[qi->qf_curlist].qf_ptr = qi->qf_lists[qi->qf_curlist].qf_start;
+! qi->qf_lists[qi->qf_curlist].qf_index = 1;
+! qf_list_changed(qi, qi->qf_curlist);
+
+ qf_update_buffer(qi, NULL);
+
+--- 5421,5431 ----
+
+ FreeWild(fcount, fnames);
+
+! qfl = &qi->qf_lists[qi->qf_curlist];
+! qfl->qf_nonevalid = FALSE;
+! qfl->qf_ptr = qfl->qf_start;
+! qfl->qf_index = 1;
+! qf_list_changed(qfl);
+
+ qf_update_buffer(qi, NULL);
+
+***************
+*** 5915,5921 ****
+ status = dict_add_number(retdict, "size", 0);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+ status = dict_add_number(retdict, "changedtick", 0);
+! if ((status == OK) && (qi != &ql_info) && (flags & QF_GETLIST_FILEWINID))
+ status = dict_add_number(retdict, "filewinid", 0);
+
+ return status;
+--- 5927,5933 ----
+ status = dict_add_number(retdict, "size", 0);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+ status = dict_add_number(retdict, "changedtick", 0);
+! if ((status == OK) && IS_LL_STACK(qi) && (flags & QF_GETLIST_FILEWINID))
+ status = dict_add_number(retdict, "filewinid", 0);
+
+ return status;
+***************
+*** 5925,5933 ****
+ * Return the quickfix list title as 'title' in retdict
+ */
+ static int
+! qf_getprop_title(qf_info_T *qi, int qf_idx, dict_T *retdict)
+ {
+! return dict_add_string(retdict, "title", qi->qf_lists[qf_idx].qf_title);
+ }
+
+ /*
+--- 5937,5945 ----
+ * Return the quickfix list title as 'title' in retdict
+ */
+ static int
+! qf_getprop_title(qf_list_T *qfl, dict_T *retdict)
+ {
+! return dict_add_string(retdict, "title", qfl->qf_title);
+ }
+
+ /*
+***************
+*** 5973,5989 ****
+ * Return the quickfix list context (if any) as 'context' in retdict.
+ */
+ static int
+! qf_getprop_ctx(qf_info_T *qi, int qf_idx, dict_T *retdict)
+ {
+ int status;
+ dictitem_T *di;
+
+! if (qi->qf_lists[qf_idx].qf_ctx != NULL)
+ {
+ di = dictitem_alloc((char_u *)"context");
+ if (di != NULL)
+ {
+! copy_tv(qi->qf_lists[qf_idx].qf_ctx, &di->di_tv);
+ status = dict_add(retdict, di);
+ if (status == FAIL)
+ dictitem_free(di);
+--- 5985,6001 ----
+ * Return the quickfix list context (if any) as 'context' in retdict.
+ */
+ static int
+! qf_getprop_ctx(qf_list_T *qfl, dict_T *retdict)
+ {
+ int status;
+ dictitem_T *di;
+
+! if (qfl->qf_ctx != NULL)
+ {
+ di = dictitem_alloc((char_u *)"context");
+ if (di != NULL)
+ {
+! copy_tv(qfl->qf_ctx, &di->di_tv);
+ status = dict_add(retdict, di);
+ if (status == FAIL)
+ dictitem_free(di);
+***************
+*** 5998,6013 ****
+ }
+
+ /*
+! * Return the quickfix list index as 'idx' in retdict
+ */
+ static int
+ qf_getprop_idx(qf_info_T *qi, int qf_idx, dict_T *retdict)
+ {
+! int idx = qi->qf_lists[qf_idx].qf_index;
+ if (qf_list_empty(qi, qf_idx))
+! // For empty lists, qf_index is set to 1
+! idx = 0;
+! return dict_add_number(retdict, "idx", idx);
+ }
+
+ /*
+--- 6010,6025 ----
+ }
+
+ /*
+! * Return the current quickfix list index as 'idx' in retdict
+ */
+ static int
+ qf_getprop_idx(qf_info_T *qi, int qf_idx, dict_T *retdict)
+ {
+! int curidx = qi->qf_lists[qf_idx].qf_index;
+ if (qf_list_empty(qi, qf_idx))
+! // For empty lists, current index is set to 0
+! curidx = 0;
+! return dict_add_number(retdict, "idx", curidx);
+ }
+
+ /*
+***************
+*** 6021,6027 ****
+ qf_info_T *qi = &ql_info;
+ qf_list_T *qfl;
+ int status = OK;
+! int qf_idx;
+ dictitem_T *di;
+ int flags = QF_GETLIST_NONE;
+
+--- 6033,6039 ----
+ qf_info_T *qi = &ql_info;
+ qf_list_T *qfl;
+ int status = OK;
+! int qf_idx = INVALID_QFIDX;
+ dictitem_T *di;
+ int flags = QF_GETLIST_NONE;
+
+***************
+*** 6043,6049 ****
+ qfl = &qi->qf_lists[qf_idx];
+
+ if (flags & QF_GETLIST_TITLE)
+! status = qf_getprop_title(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_NR))
+ status = dict_add_number(retdict, "nr", qf_idx + 1);
+ if ((status == OK) && (flags & QF_GETLIST_WINID))
+--- 6055,6061 ----
+ qfl = &qi->qf_lists[qf_idx];
+
+ if (flags & QF_GETLIST_TITLE)
+! status = qf_getprop_title(qfl, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_NR))
+ status = dict_add_number(retdict, "nr", qf_idx + 1);
+ if ((status == OK) && (flags & QF_GETLIST_WINID))
+***************
+*** 6051,6057 ****
+ if ((status == OK) && (flags & QF_GETLIST_ITEMS))
+ status = qf_getprop_items(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
+! status = qf_getprop_ctx(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_ID))
+ status = dict_add_number(retdict, "id", qfl->qf_id);
+ if ((status == OK) && (flags & QF_GETLIST_IDX))
+--- 6063,6069 ----
+ if ((status == OK) && (flags & QF_GETLIST_ITEMS))
+ status = qf_getprop_items(qi, qf_idx, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
+! status = qf_getprop_ctx(qfl, retdict);
+ if ((status == OK) && (flags & QF_GETLIST_ID))
+ status = dict_add_number(retdict, "id", qfl->qf_id);
+ if ((status == OK) && (flags & QF_GETLIST_IDX))
+***************
+*** 6277,6288 ****
+ static int
+ qf_setprop_title(qf_info_T *qi, int qf_idx, dict_T *what, dictitem_T *di)
+ {
+ if (di->di_tv.v_type != VAR_STRING)
+ return FAIL;
+
+! vim_free(qi->qf_lists[qf_idx].qf_title);
+! qi->qf_lists[qf_idx].qf_title =
+! get_dict_string(what, (char_u *)"title", TRUE);
+ if (qf_idx == qi->qf_curlist)
+ qf_update_win_titlevar(qi);
+
+--- 6289,6301 ----
+ static int
+ qf_setprop_title(qf_info_T *qi, int qf_idx, dict_T *what, dictitem_T *di)
+ {
++ qf_list_T *qfl = &qi->qf_lists[qf_idx];
++
+ if (di->di_tv.v_type != VAR_STRING)
+ return FAIL;
+
+! vim_free(qfl->qf_title);
+! qfl->qf_title = get_dict_string(what, (char_u *)"title", TRUE);
+ if (qf_idx == qi->qf_curlist)
+ qf_update_win_titlevar(qi);
+
+***************
+*** 6375,6380 ****
+--- 6388,6394 ----
+ int retval = FAIL;
+ int qf_idx;
+ int newlist = FALSE;
++ qf_list_T *qfl;
+
+ if (action == ' ' || qf_stack_empty(qi))
+ newlist = TRUE;
+***************
+*** 6390,6395 ****
+--- 6404,6410 ----
+ qf_idx = qi->qf_curlist;
+ }
+
++ qfl = &qi->qf_lists[qf_idx];
+ if ((di = dict_find(what, (char_u *)"title", -1)) != NULL)
+ retval = qf_setprop_title(qi, qf_idx, what, di);
+ if ((di = dict_find(what, (char_u *)"items", -1)) != NULL)
+***************
+*** 6397,6413 ****
+ if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL)
+ retval = qf_setprop_items_from_lines(qi, qf_idx, what, di, action);
+ if ((di = dict_find(what, (char_u *)"context", -1)) != NULL)
+! retval = qf_setprop_context(&qi->qf_lists[qf_idx], di);
+
+ if (retval == OK)
+! qf_list_changed(qi, qf_idx);
+
+ return retval;
+ }
+
+ /*
+! * Find the non-location list window with the specified location list in the
+! * current tabpage.
+ */
+ static win_T *
+ find_win_with_ll(qf_info_T *qi)
+--- 6412,6428 ----
+ if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL)
+ retval = qf_setprop_items_from_lines(qi, qf_idx, what, di, action);
+ if ((di = dict_find(what, (char_u *)"context", -1)) != NULL)
+! retval = qf_setprop_context(qfl, di);
+
+ if (retval == OK)
+! qf_list_changed(qfl);
+
+ return retval;
+ }
+
+ /*
+! * Find the non-location list window with the specified location list stack in
+! * the current tabpage.
+ */
+ static win_T *
+ find_win_with_ll(qf_info_T *qi)
+***************
+*** 6508,6514 ****
+ {
+ retval = qf_add_entries(qi, qi->qf_curlist, list, title, action);
+ if (retval == OK)
+! qf_list_changed(qi, qi->qf_curlist);
+ }
+
+ return retval;
+--- 6523,6529 ----
+ {
+ retval = qf_add_entries(qi, qi->qf_curlist, list, title, action);
+ if (retval == OK)
+! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+ }
+
+ return retval;
+***************
+*** 6654,6660 ****
+ eap->line1, eap->line2,
+ qf_title, NULL);
+ if (res >= 0)
+! qf_list_changed(qi, qi->qf_curlist);
+
+ // Remember the current quickfix list identifier, so that we can
+ // check for autocommands changing the current quickfix list.
+--- 6669,6675 ----
+ eap->line1, eap->line2,
+ qf_title, NULL);
+ if (res >= 0)
+! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+
+ // Remember the current quickfix list identifier, so that we can
+ // check for autocommands changing the current quickfix list.
+***************
+*** 6737,6743 ****
+ (linenr_T)0, (linenr_T)0,
+ qf_cmdtitle(*eap->cmdlinep), NULL);
+ if (res >= 0)
+! qf_list_changed(qi, qi->qf_curlist);
+
+ // Remember the current quickfix list identifier, so that we can
+ // check for autocommands changing the current quickfix list.
+--- 6752,6758 ----
+ (linenr_T)0, (linenr_T)0,
+ qf_cmdtitle(*eap->cmdlinep), NULL);
+ if (res >= 0)
+! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+
+ // Remember the current quickfix list identifier, so that we can
+ // check for autocommands changing the current quickfix list.
+***************
+*** 7013,7018 ****
+--- 7028,7035 ----
+ regmatch.rm_ic = FALSE;
+ if (regmatch.regprog != NULL)
+ {
++ qf_list_T *qfl;
++
+ // create a new quickfix list
+ qf_new_list(qi, qf_cmdtitle(*eap->cmdlinep));
+
+***************
+*** 7020,7029 ****
+
+ vim_regfree(regmatch.regprog);
+
+! qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+! qi->qf_lists[qi->qf_curlist].qf_ptr =
+! qi->qf_lists[qi->qf_curlist].qf_start;
+! qi->qf_lists[qi->qf_curlist].qf_index = 1;
+ }
+
+ if (p_cpo == empty_option)
+--- 7037,7048 ----
+
+ vim_regfree(regmatch.regprog);
+
+! qfl = &qi->qf_lists[qi->qf_curlist];
+! qfl->qf_nonevalid = FALSE;
+! qfl->qf_ptr = qfl->qf_start;
+! qfl->qf_index = 1;
+! qf_list_changed(qfl);
+! qf_update_buffer(qi, NULL);
+ }
+
+ if (p_cpo == empty_option)
+***************
+*** 7032,7040 ****
+ // Darn, some plugin changed the value.
+ free_string_option(save_cpo);
+
+- qf_list_changed(qi, qi->qf_curlist);
+- qf_update_buffer(qi, NULL);
+-
+ if (au_name != NULL)
+ {
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+--- 7051,7056 ----
+*** ../vim-8.1.0468/src/testdir/test_quickfix.vim 2018-09-02 15:18:38.910627833 +0200
+--- src/testdir/test_quickfix.vim 2018-10-11 17:37:31.930172891 +0200
+***************
+*** 558,563 ****
+--- 558,565 ----
+
+ " Search for non existing help string
+ call assert_fails('Xhelpgrep a1b2c3', 'E480:')
++ " Invalid regular expression
++ call assert_fails('Xhelpgrep \@<!', 'E480:')
+ endfunc
+
+ func Test_helpgrep()
+*** ../vim-8.1.0468/src/version.c 2018-10-09 21:49:30.447622031 +0200
+--- src/version.c 2018-10-11 17:38:14.761699178 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 469,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+188. You purchase a laptop so you can surf while sitting on the can.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0470 b/data/vim/patches/8.1.0470
new file mode 100644
index 000000000..d9b7e6305
--- /dev/null
+++ b/data/vim/patches/8.1.0470
@@ -0,0 +1,384 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0470
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0470
+Problem: Pointer ownership around fname_expand() is unclear.
+Solution: Allow b_ffname and b_sfname to point to the same allocated memory,
+ only free one. Update comments.
+Files: src/buffer.c, src/structs.h, src/fileio.c, src/ex_cmds.c
+
+
+*** ../vim-8.1.0469/src/buffer.c 2018-09-30 21:43:17.175693433 +0200
+--- src/buffer.c 2018-10-11 19:00:11.004662173 +0200
+***************
+*** 663,670 ****
+ workshop_file_closed_lineno((char *)buf->b_ffname,
+ (int)buf->b_last_cursor.lnum);
+ #endif
+! vim_free(buf->b_ffname);
+! vim_free(buf->b_sfname);
+ if (buf->b_prev == NULL)
+ firstbuf = buf->b_next;
+ else
+--- 663,673 ----
+ workshop_file_closed_lineno((char *)buf->b_ffname,
+ (int)buf->b_last_cursor.lnum);
+ #endif
+! if (buf->b_sfname != buf->b_ffname)
+! VIM_CLEAR(buf->b_sfname);
+! else
+! buf->b_sfname = NULL;
+! VIM_CLEAR(buf->b_ffname);
+ if (buf->b_prev == NULL)
+ firstbuf = buf->b_next;
+ else
+***************
+*** 1877,1887 ****
+ */
+ buf_T *
+ buflist_new(
+! char_u *ffname, /* full path of fname or relative */
+! char_u *sfname, /* short fname or NULL */
+! linenr_T lnum, /* preferred cursor line */
+! int flags) /* BLN_ defines */
+ {
+ buf_T *buf;
+ #ifdef UNIX
+ stat_T st;
+--- 1880,1892 ----
+ */
+ buf_T *
+ buflist_new(
+! char_u *ffname_arg, // full path of fname or relative
+! char_u *sfname_arg, // short fname or NULL
+! linenr_T lnum, // preferred cursor line
+! int flags) // BLN_ defines
+ {
++ char_u *ffname = ffname_arg;
++ char_u *sfname = sfname_arg;
+ buf_T *buf;
+ #ifdef UNIX
+ stat_T st;
+***************
+*** 1890,1896 ****
+ if (top_file_num == 1)
+ hash_init(&buf_hashtab);
+
+! fname_expand(curbuf, &ffname, &sfname); /* will allocate ffname */
+
+ /*
+ * If file name already exists in the list, update the entry.
+--- 1895,1901 ----
+ if (top_file_num == 1)
+ hash_init(&buf_hashtab);
+
+! fname_expand(curbuf, &ffname, &sfname); // will allocate ffname
+
+ /*
+ * If file name already exists in the list, update the entry.
+***************
+*** 1997,2004 ****
+ if ((ffname != NULL && (buf->b_ffname == NULL || buf->b_sfname == NULL))
+ || buf->b_wininfo == NULL)
+ {
+ VIM_CLEAR(buf->b_ffname);
+- VIM_CLEAR(buf->b_sfname);
+ if (buf != curbuf)
+ free_buffer(buf);
+ return NULL;
+--- 2002,2012 ----
+ if ((ffname != NULL && (buf->b_ffname == NULL || buf->b_sfname == NULL))
+ || buf->b_wininfo == NULL)
+ {
++ if (buf->b_sfname != buf->b_ffname)
++ VIM_CLEAR(buf->b_sfname);
++ else
++ buf->b_sfname = NULL;
+ VIM_CLEAR(buf->b_ffname);
+ if (buf != curbuf)
+ free_buffer(buf);
+ return NULL;
+***************
+*** 3103,3109 ****
+ }
+
+ /*
+! * Set the file name for "buf"' to 'ffname', short file name to 'sfname'.
+ * The file name with the full path is also remembered, for when :cd is used.
+ * Returns FAIL for failure (file name already in use by other buffer)
+ * OK otherwise.
+--- 3111,3118 ----
+ }
+
+ /*
+! * Set the file name for "buf"' to "ffname_arg", short file name to
+! * "sfname_arg".
+ * The file name with the full path is also remembered, for when :cd is used.
+ * Returns FAIL for failure (file name already in use by other buffer)
+ * OK otherwise.
+***************
+*** 3111,3120 ****
+ int
+ setfname(
+ buf_T *buf,
+! char_u *ffname,
+! char_u *sfname,
+ int message) /* give message when buffer already exists */
+ {
+ buf_T *obuf = NULL;
+ #ifdef UNIX
+ stat_T st;
+--- 3120,3131 ----
+ int
+ setfname(
+ buf_T *buf,
+! char_u *ffname_arg,
+! char_u *sfname_arg,
+ int message) /* give message when buffer already exists */
+ {
++ char_u *ffname = ffname_arg;
++ char_u *sfname = sfname_arg;
+ buf_T *obuf = NULL;
+ #ifdef UNIX
+ stat_T st;
+***************
+*** 3123,3130 ****
+ if (ffname == NULL || *ffname == NUL)
+ {
+ /* Removing the name. */
+ VIM_CLEAR(buf->b_ffname);
+- VIM_CLEAR(buf->b_sfname);
+ #ifdef UNIX
+ st.st_dev = (dev_T)-1;
+ #endif
+--- 3134,3144 ----
+ if (ffname == NULL || *ffname == NUL)
+ {
+ /* Removing the name. */
++ if (buf->b_sfname != buf->b_ffname)
++ VIM_CLEAR(buf->b_sfname);
++ else
++ buf->b_sfname = NULL;
+ VIM_CLEAR(buf->b_ffname);
+ #ifdef UNIX
+ st.st_dev = (dev_T)-1;
+ #endif
+***************
+*** 3175,3182 ****
+ # endif
+ fname_case(sfname, 0); /* set correct case for short file name */
+ #endif
+ vim_free(buf->b_ffname);
+- vim_free(buf->b_sfname);
+ buf->b_ffname = ffname;
+ buf->b_sfname = sfname;
+ }
+--- 3189,3197 ----
+ # endif
+ fname_case(sfname, 0); /* set correct case for short file name */
+ #endif
++ if (buf->b_sfname != buf->b_ffname)
++ vim_free(buf->b_sfname);
+ vim_free(buf->b_ffname);
+ buf->b_ffname = ffname;
+ buf->b_sfname = sfname;
+ }
+***************
+*** 3210,3216 ****
+ buf = buflist_findnr(fnum);
+ if (buf != NULL)
+ {
+! vim_free(buf->b_sfname);
+ vim_free(buf->b_ffname);
+ buf->b_ffname = vim_strsave(name);
+ buf->b_sfname = NULL;
+--- 3225,3232 ----
+ buf = buflist_findnr(fnum);
+ if (buf != NULL)
+ {
+! if (buf->b_sfname != buf->b_ffname)
+! vim_free(buf->b_sfname);
+ vim_free(buf->b_ffname);
+ buf->b_ffname = vim_strsave(name);
+ buf->b_sfname = NULL;
+***************
+*** 4820,4827 ****
+ }
+
+ /*
+! * Make "ffname" a full file name, set "sfname" to "ffname" if not NULL.
+! * "ffname" becomes a pointer to allocated memory (or NULL).
+ */
+ void
+ fname_expand(
+--- 4836,4847 ----
+ }
+
+ /*
+! * Make "*ffname" a full file name, set "*sfname" to "*ffname" if not NULL.
+! * "*ffname" becomes a pointer to allocated memory (or NULL).
+! * When resolving a link both "*sfname" and "*ffname" will point to the same
+! * allocated memory.
+! * The "*ffname" and "*sfname" pointer values on call will not be freed.
+! * Note that the resulting "*ffname" pointer should be considered not allocaed.
+ */
+ void
+ fname_expand(
+***************
+*** 4829,4846 ****
+ char_u **ffname,
+ char_u **sfname)
+ {
+! if (*ffname == NULL) /* if no file name given, nothing to do */
+ return;
+! if (*sfname == NULL) /* if no short file name given, use ffname */
+ *sfname = *ffname;
+! *ffname = fix_fname(*ffname); /* expand to full path */
+
+ #ifdef FEAT_SHORTCUT
+ if (!buf->b_p_bin)
+ {
+ char_u *rfname;
+
+! /* If the file name is a shortcut file, use the file it links to. */
+ rfname = mch_resolve_shortcut(*ffname);
+ if (rfname != NULL)
+ {
+--- 4849,4866 ----
+ char_u **ffname,
+ char_u **sfname)
+ {
+! if (*ffname == NULL) // no file name given, nothing to do
+ return;
+! if (*sfname == NULL) // no short file name given, use ffname
+ *sfname = *ffname;
+! *ffname = fix_fname(*ffname); // expand to full path
+
+ #ifdef FEAT_SHORTCUT
+ if (!buf->b_p_bin)
+ {
+ char_u *rfname;
+
+! // If the file name is a shortcut file, use the file it links to.
+ rfname = mch_resolve_shortcut(*ffname);
+ if (rfname != NULL)
+ {
+*** ../vim-8.1.0469/src/structs.h 2018-10-02 18:25:41.420867587 +0200
+--- src/structs.h 2018-10-11 17:45:36.197140877 +0200
+***************
+*** 1972,1980 ****
+ * b_fname is the same as b_sfname, unless ":cd" has been done,
+ * then it is the same as b_ffname (NULL for no name).
+ */
+! char_u *b_ffname; /* full path file name */
+! char_u *b_sfname; /* short file name */
+! char_u *b_fname; /* current file name */
+
+ #ifdef UNIX
+ int b_dev_valid; /* TRUE when b_dev has a valid number */
+--- 1972,1982 ----
+ * b_fname is the same as b_sfname, unless ":cd" has been done,
+ * then it is the same as b_ffname (NULL for no name).
+ */
+! char_u *b_ffname; // full path file name, allocated
+! char_u *b_sfname; // short file name, allocated, may be equal to
+! // b_ffname
+! char_u *b_fname; // current file name, points to b_ffname or
+! // b_sfname
+
+ #ifdef UNIX
+ int b_dev_valid; /* TRUE when b_dev has a valid number */
+*** ../vim-8.1.0469/src/fileio.c 2018-09-30 21:43:17.187693348 +0200
+--- src/fileio.c 2018-10-11 18:50:41.084975167 +0200
+***************
+*** 6187,6193 ****
+ || buf->b_sfname == NULL
+ || mch_isFullName(buf->b_sfname)))
+ {
+! VIM_CLEAR(buf->b_sfname);
+ p = shorten_fname(buf->b_ffname, dirname);
+ if (p != NULL)
+ {
+--- 6187,6194 ----
+ || buf->b_sfname == NULL
+ || mch_isFullName(buf->b_sfname)))
+ {
+! if (buf->b_sfname != buf->b_ffname)
+! VIM_CLEAR(buf->b_sfname);
+ p = shorten_fname(buf->b_ffname, dirname);
+ if (p != NULL)
+ {
+*** ../vim-8.1.0469/src/ex_cmds.c 2018-10-09 21:49:30.447622031 +0200
+--- src/ex_cmds.c 2018-10-11 19:01:12.524192986 +0200
+***************
+*** 3648,3655 ****
+ }
+
+ /*
+! * Try to abandon current file and edit a new or existing file.
+! * "fnum" is the number of the file, if zero use ffname/sfname.
+ * "lnum" is the line number for the cursor in the new file (if non-zero).
+ *
+ * Return:
+--- 3648,3655 ----
+ }
+
+ /*
+! * Try to abandon the current file and edit a new or existing file.
+! * "fnum" is the number of the file, if zero use "ffname_arg"/"sfname_arg".
+ * "lnum" is the line number for the cursor in the new file (if non-zero).
+ *
+ * Return:
+***************
+*** 3661,3672 ****
+ int
+ getfile(
+ int fnum,
+! char_u *ffname,
+! char_u *sfname,
+ int setpm,
+ linenr_T lnum,
+ int forceit)
+ {
+ int other;
+ int retval;
+ char_u *free_me = NULL;
+--- 3661,3674 ----
+ int
+ getfile(
+ int fnum,
+! char_u *ffname_arg,
+! char_u *sfname_arg,
+ int setpm,
+ linenr_T lnum,
+ int forceit)
+ {
++ char_u *ffname = ffname_arg;
++ char_u *sfname = sfname_arg;
+ int other;
+ int retval;
+ char_u *free_me = NULL;
+*** ../vim-8.1.0469/src/version.c 2018-10-11 17:39:09.173107491 +0200
+--- src/version.c 2018-10-11 18:57:27.585905972 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 470,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+189. You put your e-mail address in the upper left-hand corner of envelopes.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0471 b/data/vim/patches/8.1.0471
new file mode 100644
index 000000000..a0d8192cf
--- /dev/null
+++ b/data/vim/patches/8.1.0471
@@ -0,0 +1,105 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0471
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0471
+Problem: Some tests are flaky or fail on some systems.
+Solution: Increase waiting time for port number. Use "cmd /c" to execute
+ "echo" on win32. (Ken Takata, closes #3534)
+Files: src/testdir/shared.vim, src/testdir/test_channel.vim
+
+
+*** ../vim-8.1.0470/src/testdir/shared.vim 2018-05-05 15:42:51.000000000 +0200
+--- src/testdir/shared.vim 2018-10-12 22:09:33.568424581 +0200
+***************
+*** 49,55 ****
+ " Read the port number from the Xportnr file.
+ func GetPort()
+ let l = []
+! for i in range(200)
+ try
+ let l = readfile("Xportnr")
+ catch
+--- 49,56 ----
+ " Read the port number from the Xportnr file.
+ func GetPort()
+ let l = []
+! " with 200 it sometimes failed
+! for i in range(400)
+ try
+ let l = readfile("Xportnr")
+ catch
+***************
+*** 274,279 ****
+--- 275,284 ----
+ let cmd = GetVimCommand()
+ let cmd = substitute(cmd, '-u NONE', '--clean', '')
+ let cmd = substitute(cmd, '--not-a-term', '', '')
++
++ " Optionally run Vim under valgrind
++ " let cmd = 'valgrind --tool=memcheck --leak-check=yes --num-callers=25 --log-file=valgrind ' . cmd
++
+ return cmd
+ endfunc
+
+*** ../vim-8.1.0470/src/testdir/test_channel.vim 2018-10-07 21:36:07.389878130 +0200
+--- src/testdir/test_channel.vim 2018-10-12 22:12:33.938703284 +0200
+***************
+*** 1340,1346 ****
+ let self.ret['exit_cb'] = job_status(a:job)
+ endfunc
+
+! let g:job = job_start('echo', {
+ \ 'close_cb': g:retdict.close_cb,
+ \ 'exit_cb': g:retdict.exit_cb,
+ \ })
+--- 1340,1346 ----
+ let self.ret['exit_cb'] = job_status(a:job)
+ endfunc
+
+! let g:job = job_start(has('win32') ? 'cmd /c echo:' : 'echo', {
+ \ 'close_cb': g:retdict.close_cb,
+ \ 'exit_cb': g:retdict.exit_cb,
+ \ })
+***************
+*** 1369,1375 ****
+ new
+ let g:wipe_buf = bufnr('')
+
+! let job = job_start(['true'], {'exit_cb': 'ExitCbWipe'})
+ let timer = timer_start(300, {-> feedkeys("\<Esc>", 'nt')}, {'repeat': 5})
+ call feedkeys(repeat('g', 1000) . 'o', 'ntx!')
+ call WaitForAssert({-> assert_equal("dead", job_status(job))})
+--- 1369,1376 ----
+ new
+ let g:wipe_buf = bufnr('')
+
+! let job = job_start(has('win32') ? 'cmd /c echo:' : ['true'],
+! \ {'exit_cb': 'ExitCbWipe'})
+ let timer = timer_start(300, {-> feedkeys("\<Esc>", 'nt')}, {'repeat': 5})
+ call feedkeys(repeat('g', 1000) . 'o', 'ntx!')
+ call WaitForAssert({-> assert_equal("dead", job_status(job))})
+*** ../vim-8.1.0470/src/version.c 2018-10-11 19:27:43.920066119 +0200
+--- src/version.c 2018-10-12 22:14:13.397766385 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 471,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+191. You rate eating establishments not by the quality of the food,
+ but by the availability of electrical outlets for your PowerBook.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0472 b/data/vim/patches/8.1.0472
new file mode 100644
index 000000000..e3baaa7a8
--- /dev/null
+++ b/data/vim/patches/8.1.0472
@@ -0,0 +1,298 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0472
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0472
+Problem: Dosinst command has a few flaws.
+Solution: Register DisplayIcon, DisplayVersion and Publisher for the
+ uninstaller. (closes #3485) Don't set 'diffexpr' if internal diff
+ is supported. Allow for using Vi compatible from the command line.
+ Remove needless sleeps. Add comments in the generated _vimrc.
+ (Ken Takata, closes #3525)
+Files: src/dosinst.c
+
+
+*** ../vim-8.1.0471/src/dosinst.c 2018-08-18 19:04:32.458231905 +0200
+--- src/dosinst.c 2018-10-13 17:23:40.545425239 +0200
+***************
+*** 18,23 ****
+--- 18,24 ----
+ */
+ #define DOSINST
+ #include "dosinst.h"
++ #include <io.h>
+
+ #define GVIMEXT64_PATH "GvimExt64\\gvimext.dll"
+ #define GVIMEXT32_PATH "GvimExt32\\gvimext.dll"
+***************
+*** 63,68 ****
+--- 64,70 ----
+ enum
+ {
+ compat_vi = 1,
++ compat_vim,
+ compat_some_enhancements,
+ compat_all_enhancements
+ };
+***************
+*** 70,75 ****
+--- 72,78 ----
+ {
+ "\nChoose the default way to run Vim:",
+ "Vi compatible",
++ "Vim default",
+ "with some Vim enhancements",
+ "with syntax highlighting and other features switched on",
+ };
+***************
+*** 567,573 ****
+ sleep(1); /* wait for uninstaller to start up */
+ num_windows = 0;
+ EnumWindows(window_cb, 0);
+- sleep(1); /* wait for windows to be counted */
+ if (num_windows == 0)
+ {
+ /* Did not find the uninstaller, ask user to press
+--- 570,575 ----
+***************
+*** 583,591 ****
+ {
+ printf(".");
+ fflush(stdout);
+ num_windows = 0;
+ EnumWindows(window_cb, 0);
+- sleep(1); /* wait for windows to be counted */
+ } while (num_windows > 0);
+ }
+ printf("\nDone!\n");
+--- 585,593 ----
+ {
+ printf(".");
+ fflush(stdout);
++ sleep(1); /* wait for the uninstaller to finish */
+ num_windows = 0;
+ EnumWindows(window_cb, 0);
+ } while (num_windows > 0);
+ }
+ printf("\nDone!\n");
+***************
+*** 1159,1170 ****
+--- 1161,1181 ----
+ switch (compat_choice)
+ {
+ case compat_vi:
++ fprintf(fd, "\" Vi compatible\n");
+ fprintf(fd, "set compatible\n");
+ break;
++ case compat_vim:
++ fprintf(fd, "\" Vim's default behavior\n");
++ fprintf(fd, "if &compatible\n");
++ fprintf(fd, " set nocompatible\n");
++ fprintf(fd, "endif\n");
++ break;
+ case compat_some_enhancements:
++ fprintf(fd, "\" Vim with some enhancements\n");
+ fprintf(fd, "source $VIMRUNTIME/defaults.vim\n");
+ break;
+ case compat_all_enhancements:
++ fprintf(fd, "\" Vim with all enhancements\n");
+ fprintf(fd, "source $VIMRUNTIME/vimrc_example.vim\n");
+ break;
+ }
+***************
+*** 1173,1187 ****
+--- 1184,1204 ----
+ case remap_no:
+ break;
+ case remap_win:
++ fprintf(fd, "\n");
++ fprintf(fd, "\" Remap a few keys for Windows behavior\n");
+ fprintf(fd, "source $VIMRUNTIME/mswin.vim\n");
+ break;
+ }
+ switch (mouse_choice)
+ {
+ case mouse_xterm:
++ fprintf(fd, "\n");
++ fprintf(fd, "\" Mouse behavior (the Unix way)\n");
+ fprintf(fd, "behave xterm\n");
+ break;
+ case mouse_mswin:
++ fprintf(fd, "\n");
++ fprintf(fd, "\" Mouse behavior (the Windows way)\n");
+ fprintf(fd, "behave mswin\n");
+ break;
+ case mouse_default:
+***************
+*** 1192,1198 ****
+ /* Use the diff.exe that comes with the self-extracting gvim.exe. */
+ fclose(tfd);
+ fprintf(fd, "\n");
+! fprintf(fd, "set diffexpr=MyDiff()\n");
+ fprintf(fd, "function MyDiff()\n");
+ fprintf(fd, " let opt = '-a --binary '\n");
+ fprintf(fd, " if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif\n");
+--- 1209,1219 ----
+ /* Use the diff.exe that comes with the self-extracting gvim.exe. */
+ fclose(tfd);
+ fprintf(fd, "\n");
+! fprintf(fd, "\" Use the internal diff if available.\n");
+! fprintf(fd, "\" Otherwise use the special 'diffexpr' for Windows.\n");
+! fprintf(fd, "if &diffopt !~# 'internal'\n");
+! fprintf(fd, " set diffexpr=MyDiff()\n");
+! fprintf(fd, "endif\n");
+ fprintf(fd, "function MyDiff()\n");
+ fprintf(fd, " let opt = '-a --binary '\n");
+ fprintf(fd, " if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif\n");
+***************
+*** 1491,1497 ****
+ HKEY hRootKey,
+ const char *appname,
+ const char *display_name,
+! const char *uninstall_string)
+ {
+ LONG lRet = reg_create_key_and_value(hRootKey, appname,
+ "DisplayName", display_name, KEY_WOW64_64KEY);
+--- 1512,1521 ----
+ HKEY hRootKey,
+ const char *appname,
+ const char *display_name,
+! const char *uninstall_string,
+! const char *display_icon,
+! const char *display_version,
+! const char *publisher)
+ {
+ LONG lRet = reg_create_key_and_value(hRootKey, appname,
+ "DisplayName", display_name, KEY_WOW64_64KEY);
+***************
+*** 1499,1504 ****
+--- 1523,1537 ----
+ if (ERROR_SUCCESS == lRet)
+ lRet = reg_create_key_and_value(hRootKey, appname,
+ "UninstallString", uninstall_string, KEY_WOW64_64KEY);
++ if (ERROR_SUCCESS == lRet)
++ lRet = reg_create_key_and_value(hRootKey, appname,
++ "DisplayIcon", display_icon, KEY_WOW64_64KEY);
++ if (ERROR_SUCCESS == lRet)
++ lRet = reg_create_key_and_value(hRootKey, appname,
++ "DisplayVersion", display_version, KEY_WOW64_64KEY);
++ if (ERROR_SUCCESS == lRet)
++ lRet = reg_create_key_and_value(hRootKey, appname,
++ "Publisher", publisher, KEY_WOW64_64KEY);
+ return lRet;
+ }
+
+***************
+*** 1519,1524 ****
+--- 1552,1558 ----
+ char vim_exe_path[BUFSIZE];
+ char display_name[BUFSIZE];
+ char uninstall_string[BUFSIZE];
++ char icon_string[BUFSIZE];
+ int i;
+ int loop_count = is_64bit_os() ? 2 : 1;
+ DWORD flag;
+***************
+*** 1583,1593 ****
+ else
+ sprintf(uninstall_string, "%s\\uninstall-gui.exe", installdir);
+
+ lRet = register_uninstall(
+ HKEY_LOCAL_MACHINE,
+ "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
+ display_name,
+! uninstall_string);
+ if (ERROR_SUCCESS != lRet)
+ return FAIL;
+
+--- 1617,1632 ----
+ else
+ sprintf(uninstall_string, "%s\\uninstall-gui.exe", installdir);
+
++ sprintf(icon_string, "%s\\gvim.exe,0", installdir);
++
+ lRet = register_uninstall(
+ HKEY_LOCAL_MACHINE,
+ "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Vim " VIM_VERSION_SHORT,
+ display_name,
+! uninstall_string,
+! icon_string,
+! VIM_VERSION_SHORT,
+! "Bram Moolenaar et al.");
+ if (ERROR_SUCCESS != lRet)
+ return FAIL;
+
+***************
+*** 2219,2224 ****
+--- 2258,2265 ----
+ printf(" Remap keys when creating a default _vimrc file.\n");
+ printf("-vimrc-behave [unix|mswin|default]\n");
+ printf(" Set mouse behavior when creating a default _vimrc file.\n");
++ printf("-vimrc-compat [vi|vim|defaults|all]\n");
++ printf(" Set Vi compatibility when creating a default _vimrc file.\n");
+ printf("-install-popup\n");
+ printf(" Install the Edit-with-Vim context menu entry\n");
+ printf("-install-openwith\n");
+***************
+*** 2296,2301 ****
+--- 2337,2356 ----
+ else if (strcmp(argv[i], "default") == 0)
+ mouse_choice = mouse_default;
+ }
++ else if (strcmp(argv[i], "-vimrc-compat") == 0)
++ {
++ if (i + 1 == argc)
++ break;
++ i++;
++ if (strcmp(argv[i], "vi") == 0)
++ compat_choice = compat_vi;
++ else if (strcmp(argv[i], "vim") == 0)
++ compat_choice = compat_vim;
++ else if (strcmp(argv[i], "defaults") == 0)
++ compat_choice = compat_some_enhancements;
++ else if (strcmp(argv[i], "all") == 0)
++ compat_choice = compat_all_enhancements;
++ }
+ else if (strcmp(argv[i], "-install-popup") == 0)
+ {
+ init_popup_choice();
+***************
+*** 2546,2552 ****
+
+ /* When nothing found exit quietly. If something found wait for
+ * a little while, so that the user can read the messages. */
+! if (i)
+ sleep(3);
+ exit(0);
+ }
+--- 2601,2607 ----
+
+ /* When nothing found exit quietly. If something found wait for
+ * a little while, so that the user can read the messages. */
+! if (i && _isatty(1))
+ sleep(3);
+ exit(0);
+ }
+*** ../vim-8.1.0471/src/version.c 2018-10-12 22:15:06.597268116 +0200
+--- src/version.c 2018-10-13 17:25:17.988761109 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 472,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+194. Your business cards contain your e-mail and home page address.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0473 b/data/vim/patches/8.1.0473
new file mode 100644
index 000000000..3ba786e69
--- /dev/null
+++ b/data/vim/patches/8.1.0473
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0473
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0473
+Problem: User doesn't notice file does not exist when swap file does.
+Solution: Add a note that the file cannot be found. Make the "still
+ running" notice stand out.
+Files: src/memline.c
+
+
+*** ../vim-8.1.0472/src/memline.c 2018-10-07 23:16:33.134616234 +0200
+--- src/memline.c 2018-10-13 18:44:34.660709137 +0200
+***************
+*** 2177,2183 ****
+ /* EMX kill() not working correctly, it seems */
+ if (kill((pid_t)char_to_long(b0.b0_pid), 0) == 0)
+ {
+! MSG_PUTS(_(" (still running)"));
+ # if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ process_still_running = TRUE;
+ # endif
+--- 2177,2183 ----
+ /* EMX kill() not working correctly, it seems */
+ if (kill((pid_t)char_to_long(b0.b0_pid), 0) == 0)
+ {
+! MSG_PUTS(_(" (STILL RUNNING)"));
+ # if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ process_still_running = TRUE;
+ # endif
+***************
+*** 4089,4095 ****
+ MSG_PUTS(_("While opening file \""));
+ msg_outtrans(buf->b_fname);
+ MSG_PUTS("\"\n");
+! if (mch_stat((char *)buf->b_fname, &st) != -1)
+ {
+ MSG_PUTS(_(" dated: "));
+ x = st.st_mtime; /* Manx C can't do &st.st_mtime */
+--- 4089,4099 ----
+ MSG_PUTS(_("While opening file \""));
+ msg_outtrans(buf->b_fname);
+ MSG_PUTS("\"\n");
+! if (mch_stat((char *)buf->b_fname, &st) == -1)
+! {
+! MSG_PUTS(_(" CANNOT BE FOUND"));
+! }
+! else
+ {
+ MSG_PUTS(_(" dated: "));
+ x = st.st_mtime; /* Manx C can't do &st.st_mtime */
+*** ../vim-8.1.0472/src/version.c 2018-10-13 17:25:24.116718283 +0200
+--- src/version.c 2018-10-13 18:46:16.675965454 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 473,
+ /**/
+
+--
+% cat /usr/include/sys/errno.h
+#define EPERM 1 /* Operation not permitted */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+[...]
+#define EMACS 666 /* Too many macros */
+%
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0474 b/data/vim/patches/8.1.0474
new file mode 100644
index 000000000..3d1a1c771
--- /dev/null
+++ b/data/vim/patches/8.1.0474
@@ -0,0 +1,151 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0474
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0474
+Problem: Directory where if_perl.c is written is inconsistent.
+Solution: use auto/if_perl.c for MS-Windows. (Ken Takata, closes #3540)
+Files: src/Make_bc5.mak, src/Make_cyg_ming.mak, src/Make_mvc.mak
+
+
+*** ../vim-8.1.0473/src/Make_bc5.mak 2016-07-19 13:50:35.000000000 +0200
+--- src/Make_bc5.mak 2018-10-14 16:23:03.997769550 +0200
+***************
+*** 820,825 ****
+--- 820,827 ----
+ !endif
+ !ifdef PERL
+ -@del perl.lib
++ -@del if_perl.c
++ -@del auto\if_perl.c
+ !endif
+ !ifdef PYTHON
+ -@del python.lib
+***************
+*** 948,959 ****
+ $(OBJDIR)\if_lua.obj: if_lua.c lua.lib
+ $(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_lua.c
+
+! $(OBJDIR)\if_perl.obj: if_perl.c perl.lib
+! $(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_perl.c
+
+! if_perl.c: if_perl.xs typemap
+ $(PERL)\bin\perl.exe $(PERL)\lib\ExtUtils\xsubpp -prototypes -typemap \
+! $(PERL)\lib\ExtUtils\typemap if_perl.xs > $@
+
+ $(OBJDIR)\if_python.obj: if_python.c if_py_both.h python.lib
+ $(CC) -I$(PYTHON)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python.c
+--- 950,961 ----
+ $(OBJDIR)\if_lua.obj: if_lua.c lua.lib
+ $(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_lua.c
+
+! $(OBJDIR)\if_perl.obj: auto/if_perl.c perl.lib
+! $(CC) $(CCARG) $(CC1) $(CC2)$@ -pc auto/if_perl.c
+
+! auto/if_perl.c: if_perl.xs typemap
+ $(PERL)\bin\perl.exe $(PERL)\lib\ExtUtils\xsubpp -prototypes -typemap \
+! $(PERL)\lib\ExtUtils\typemap if_perl.xs -output $@
+
+ $(OBJDIR)\if_python.obj: if_python.c if_py_both.h python.lib
+ $(CC) -I$(PYTHON)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python.c
+*** ../vim-8.1.0473/src/Make_cyg_ming.mak 2018-09-21 14:43:06.795306782 +0200
+--- src/Make_cyg_ming.mak 2018-10-14 16:23:03.997769550 +0200
+***************
+*** 985,990 ****
+--- 985,991 ----
+ -$(DEL) pathdef.c
+ ifdef PERL
+ -$(DEL) if_perl.c
++ -$(DEL) auto$(DIRSLASH)if_perl.c
+ endif
+ ifdef MZSCHEME
+ -$(DEL) mzscheme_base.c
+***************
+*** 1043,1052 ****
+ $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL) if_ole.h
+ $(CC) $(CFLAGS) $(CXXFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
+
+! if_perl.c: if_perl.xs typemap
+ $(XSUBPP) -prototypes -typemap \
+ $(PERLTYPEMAP) if_perl.xs -output $@
+
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+ ifeq (16, $(RUBY))
+ $(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c
+--- 1044,1057 ----
+ $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL) if_ole.h
+ $(CC) $(CFLAGS) $(CXXFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
+
+! auto/if_perl.c: if_perl.xs typemap
+ $(XSUBPP) -prototypes -typemap \
+ $(PERLTYPEMAP) if_perl.xs -output $@
+
++ $(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL)
++ $(CC) -c $(CFLAGS) auto/if_perl.c -o $(OUTDIR)/if_perl.o
++
++
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+ ifeq (16, $(RUBY))
+ $(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c
+*** ../vim-8.1.0473/src/Make_mvc.mak 2018-09-21 14:31:48.037839069 +0200
+--- src/Make_mvc.mak 2018-10-14 16:23:03.997769550 +0200
+***************
+*** 1286,1291 ****
+--- 1286,1292 ----
+ - if exist install.exe del install.exe
+ - if exist uninstal.exe del uninstal.exe
+ - if exist if_perl.c del if_perl.c
++ - if exist auto\if_perl.c del auto\if_perl.c
+ - if exist dimm.h del dimm.h
+ - if exist dimm_i.c del dimm_i.c
+ - if exist dimm.tlb del dimm.tlb
+***************
+*** 1424,1435 ****
+ $(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c $(INCL)
+ $(CC) $(CFLAGS_OUTDIR) $(LUA_INC) if_lua.c
+
+! if_perl.c : if_perl.xs typemap
+ $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+! -typemap typemap if_perl.xs -output if_perl.c
+
+! $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c $(INCL)
+! $(CC) $(CFLAGS_OUTDIR) $(PERL_INC) if_perl.c
+
+ $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c $(INCL)
+ $(CC) $(CFLAGS_OUTDIR) $(PERL_INC) if_perlsfio.c
+--- 1425,1436 ----
+ $(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c $(INCL)
+ $(CC) $(CFLAGS_OUTDIR) $(LUA_INC) if_lua.c
+
+! auto/if_perl.c : if_perl.xs typemap
+ $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+! -typemap typemap if_perl.xs -output $@
+
+! $(OUTDIR)/if_perl.obj: $(OUTDIR) auto/if_perl.c $(INCL)
+! $(CC) $(CFLAGS_OUTDIR) $(PERL_INC) auto/if_perl.c
+
+ $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c $(INCL)
+ $(CC) $(CFLAGS_OUTDIR) $(PERL_INC) if_perlsfio.c
+*** ../vim-8.1.0473/src/version.c 2018-10-13 19:06:23.502240830 +0200
+--- src/version.c 2018-10-14 16:24:32.400902684 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 474,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+196. Your computer costs more than your car.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0475 b/data/vim/patches/8.1.0475
new file mode 100644
index 000000000..eb47e9c28
--- /dev/null
+++ b/data/vim/patches/8.1.0475
@@ -0,0 +1,544 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0475
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0475
+Problem: Memory not freed on exit when quit in autocmd.
+Solution: Remember funccal stack when executing autocmd.
+Files: src/structs.h, src/userfunc.c, src/proto/userfunc.pro,
+ src/fileio.c, src/eval.c, src/ex_cmds2.c, src/main.c
+
+
+*** ../vim-8.1.0474/src/structs.h 2018-10-11 19:27:43.916066156 +0200
+--- src/structs.h 2018-10-14 21:24:09.968948702 +0200
+***************
+*** 1354,1360 ****
+ int uf_cleared; /* func_clear() was already called */
+ garray_T uf_args; /* arguments */
+ garray_T uf_lines; /* function lines */
+! #ifdef FEAT_PROFILE
+ int uf_profiling; /* TRUE when func is being profiled */
+ int uf_prof_initialized;
+ /* profiling the function as a whole */
+--- 1354,1360 ----
+ int uf_cleared; /* func_clear() was already called */
+ garray_T uf_args; /* arguments */
+ garray_T uf_lines; /* function lines */
+! # ifdef FEAT_PROFILE
+ int uf_profiling; /* TRUE when func is being profiled */
+ int uf_prof_initialized;
+ /* profiling the function as a whole */
+***************
+*** 1371,1377 ****
+ proftime_T uf_tml_wait; /* start wait time for current line */
+ int uf_tml_idx; /* index of line being timed; -1 if none */
+ int uf_tml_execed; /* line being timed was executed */
+! #endif
+ sctx_T uf_script_ctx; /* SCTX where function was defined,
+ used for s: variables */
+ int uf_refcount; /* reference count, see func_name_refcount() */
+--- 1371,1377 ----
+ proftime_T uf_tml_wait; /* start wait time for current line */
+ int uf_tml_idx; /* index of line being timed; -1 if none */
+ int uf_tml_execed; /* line being timed was executed */
+! # endif
+ sctx_T uf_script_ctx; /* SCTX where function was defined,
+ used for s: variables */
+ int uf_refcount; /* reference count, see func_name_refcount() */
+***************
+*** 1429,1434 ****
+--- 1429,1440 ----
+ dictitem_T *fd_di; /* Dictionary item used */
+ } funcdict_T;
+
++ typedef struct funccal_entry funccal_entry_T;
++ struct funccal_entry {
++ void *top_funccal;
++ funccal_entry_T *next;
++ };
++
+ #else
+ /* dummy typedefs for function prototypes */
+ typedef struct
+*** ../vim-8.1.0474/src/userfunc.c 2018-09-10 22:03:36.486401101 +0200
+--- src/userfunc.c 2018-10-14 21:29:00.174642990 +0200
+***************
+*** 1175,1180 ****
+--- 1175,1207 ----
+ return isdigit(*name) || *name == '<';
+ }
+
++ static funccal_entry_T *funccal_stack = NULL;
++
++ /*
++ * Save the current function call pointer, and set it to NULL.
++ * Used when executing autocommands and for ":source".
++ */
++ void
++ save_funccal(funccal_entry_T *entry)
++ {
++ entry->top_funccal = current_funccal;
++ entry->next = funccal_stack;
++ funccal_stack = entry;
++ current_funccal = NULL;
++ }
++
++ void
++ restore_funccal(void)
++ {
++ if (funccal_stack == NULL)
++ IEMSG("INTERNAL: restore_funccal()");
++ else
++ {
++ current_funccal = funccal_stack->top_funccal;
++ funccal_stack = funccal_stack->next;
++ }
++ }
++
+ #if defined(EXITFREE) || defined(PROTO)
+ void
+ free_all_functions(void)
+***************
+*** 1185,1195 ****
+ long_u todo = 1;
+ long_u used;
+
+! /* Clean up the call stack. */
+ while (current_funccal != NULL)
+ {
+ clear_tv(current_funccal->rettv);
+ cleanup_function_call(current_funccal);
+ }
+
+ /* First clear what the functions contain. Since this may lower the
+--- 1212,1224 ----
+ long_u todo = 1;
+ long_u used;
+
+! /* Clean up the current_funccal chain and the funccal stack. */
+ while (current_funccal != NULL)
+ {
+ clear_tv(current_funccal->rettv);
+ cleanup_function_call(current_funccal);
++ if (current_funccal == NULL && funccal_stack != NULL)
++ restore_funccal();
+ }
+
+ /* First clear what the functions contain. Since this may lower the
+***************
+*** 3578,3604 ****
+ return current_funccal->returned;
+ }
+
+- /*
+- * Save the current function call pointer, and set it to NULL.
+- * Used when executing autocommands and for ":source".
+- */
+- void *
+- save_funccal(void)
+- {
+- funccall_T *fc = current_funccal;
+-
+- current_funccal = NULL;
+- return (void *)fc;
+- }
+-
+- void
+- restore_funccal(void *vfc)
+- {
+- funccall_T *fc = (funccall_T *)vfc;
+-
+- current_funccal = fc;
+- }
+-
+ int
+ free_unref_funccal(int copyID, int testing)
+ {
+--- 3607,3612 ----
+***************
+*** 3702,3726 ****
+ }
+
+ /*
+- * Clear the current_funccal and return the old value.
+- * Caller is expected to invoke restore_current_funccal().
+- */
+- void *
+- clear_current_funccal()
+- {
+- funccall_T *f = current_funccal;
+-
+- current_funccal = NULL;
+- return f;
+- }
+-
+- void
+- restore_current_funccal(void *f)
+- {
+- current_funccal = f;
+- }
+-
+- /*
+ * List function variables, if there is a function.
+ */
+ void
+--- 3710,3715 ----
+*** ../vim-8.1.0474/src/proto/userfunc.pro 2018-05-17 13:52:55.000000000 +0200
+--- src/proto/userfunc.pro 2018-10-14 21:23:16.693367431 +0200
+***************
+*** 39,53 ****
+ int *func_dbg_tick(void *cookie);
+ int func_level(void *cookie);
+ int current_func_returned(void);
+! void *save_funccal(void);
+! void restore_funccal(void *vfc);
+ int free_unref_funccal(int copyID, int testing);
+ hashtab_T *get_funccal_local_ht(void);
+ dictitem_T *get_funccal_local_var(void);
+ hashtab_T *get_funccal_args_ht(void);
+ dictitem_T *get_funccal_args_var(void);
+- void *clear_current_funccal(void);
+- void restore_current_funccal(void *f);
+ void list_func_vars(int *first);
+ dict_T *get_current_funccal_dict(hashtab_T *ht);
+ hashitem_T *find_hi_in_scoped_ht(char_u *name, hashtab_T **pht);
+--- 39,51 ----
+ int *func_dbg_tick(void *cookie);
+ int func_level(void *cookie);
+ int current_func_returned(void);
+! void save_funccal(funccal_entry_T *entry);
+! void restore_funccal(void);
+ int free_unref_funccal(int copyID, int testing);
+ hashtab_T *get_funccal_local_ht(void);
+ dictitem_T *get_funccal_local_var(void);
+ hashtab_T *get_funccal_args_ht(void);
+ dictitem_T *get_funccal_args_var(void);
+ void list_func_vars(int *first);
+ dict_T *get_current_funccal_dict(hashtab_T *ht);
+ hashitem_T *find_hi_in_scoped_ht(char_u *name, hashtab_T **pht);
+*** ../vim-8.1.0474/src/fileio.c 2018-10-11 19:27:43.916066156 +0200
+--- src/fileio.c 2018-10-14 21:23:46.449133772 +0200
+***************
+*** 9400,9406 ****
+ AutoPat *ap;
+ #ifdef FEAT_EVAL
+ sctx_T save_current_sctx;
+! void *save_funccalp;
+ char_u *save_cmdarg;
+ long save_cmdbang;
+ #endif
+--- 9400,9406 ----
+ AutoPat *ap;
+ #ifdef FEAT_EVAL
+ sctx_T save_current_sctx;
+! funccal_entry_T funccal_entry;
+ char_u *save_cmdarg;
+ long save_cmdbang;
+ #endif
+***************
+*** 9615,9622 ****
+ prof_child_enter(&wait_time); /* doesn't count for the caller itself */
+ # endif
+
+! /* Don't use local function variables, if called from a function */
+! save_funccalp = save_funccal();
+ #endif
+
+ /*
+--- 9615,9622 ----
+ prof_child_enter(&wait_time); /* doesn't count for the caller itself */
+ # endif
+
+! // Don't use local function variables, if called from a function.
+! save_funccal(&funccal_entry);
+ #endif
+
+ /*
+***************
+*** 9713,9719 ****
+ autocmd_match = save_autocmd_match;
+ #ifdef FEAT_EVAL
+ current_sctx = save_current_sctx;
+! restore_funccal(save_funccalp);
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+ prof_child_exit(&wait_time);
+--- 9713,9719 ----
+ autocmd_match = save_autocmd_match;
+ #ifdef FEAT_EVAL
+ current_sctx = save_current_sctx;
+! restore_funccal();
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+ prof_child_exit(&wait_time);
+*** ../vim-8.1.0474/src/eval.c 2018-10-07 20:14:53.091279680 +0200
+--- src/eval.c 2018-10-14 21:24:20.000869665 +0200
+***************
+*** 859,867 ****
+ int use_sandbox)
+ {
+ char_u *retval;
+! void *save_funccalp;
+
+! save_funccalp = save_funccal();
+ if (use_sandbox)
+ ++sandbox;
+ ++textlock;
+--- 859,867 ----
+ int use_sandbox)
+ {
+ char_u *retval;
+! funccal_entry_T funccal_entry;
+
+! save_funccal(&funccal_entry);
+ if (use_sandbox)
+ ++sandbox;
+ ++textlock;
+***************
+*** 869,875 ****
+ if (use_sandbox)
+ --sandbox;
+ --textlock;
+! restore_funccal(save_funccalp);
+ return retval;
+ }
+
+--- 869,875 ----
+ if (use_sandbox)
+ --sandbox;
+ --textlock;
+! restore_funccal();
+ return retval;
+ }
+
+***************
+*** 8532,8538 ****
+ char_u *tab;
+ int type = VAR_NUMBER;
+ typval_T tv;
+! void *save_funccal;
+
+ if (!writing && (find_viminfo_parameter('!') != NULL))
+ {
+--- 8532,8538 ----
+ char_u *tab;
+ int type = VAR_NUMBER;
+ typval_T tv;
+! funccal_entry_T funccal_entry;
+
+ if (!writing && (find_viminfo_parameter('!') != NULL))
+ {
+***************
+*** 8581,8589 ****
+ }
+
+ /* when in a function use global variables */
+! save_funccal = clear_current_funccal();
+ set_var(virp->vir_line + 1, &tv, FALSE);
+! restore_current_funccal(save_funccal);
+
+ if (tv.v_type == VAR_STRING)
+ vim_free(tv.vval.v_string);
+--- 8581,8589 ----
+ }
+
+ /* when in a function use global variables */
+! save_funccal(&funccal_entry);
+ set_var(virp->vir_line + 1, &tv, FALSE);
+! restore_funccal();
+
+ if (tv.v_type == VAR_STRING)
+ vim_free(tv.vval.v_string);
+*** ../vim-8.1.0474/src/ex_cmds2.c 2018-09-30 21:43:17.183693376 +0200
+--- src/ex_cmds2.c 2018-10-14 21:25:18.216409935 +0200
+***************
+*** 4344,4350 ****
+ #ifdef FEAT_EVAL
+ sctx_T save_current_sctx;
+ static scid_T last_current_SID = 0;
+! void *save_funccalp;
+ int save_debug_break_level = debug_break_level;
+ scriptitem_T *si = NULL;
+ # ifdef UNIX
+--- 4344,4350 ----
+ #ifdef FEAT_EVAL
+ sctx_T save_current_sctx;
+ static scid_T last_current_SID = 0;
+! funccal_entry_T funccalp_entry;
+ int save_debug_break_level = debug_break_level;
+ scriptitem_T *si = NULL;
+ # ifdef UNIX
+***************
+*** 4506,4512 ****
+
+ /* Don't use local function variables, if called from a function.
+ * Also starts profiling timer for nested script. */
+! save_funccalp = save_funccal();
+
+ /*
+ * Check if this script was sourced before to finds its SID.
+--- 4506,4512 ----
+
+ /* Don't use local function variables, if called from a function.
+ * Also starts profiling timer for nested script. */
+! save_funccal(&funccalp_entry);
+
+ /*
+ * Check if this script was sourced before to finds its SID.
+***************
+*** 4665,4671 ****
+ #ifdef FEAT_EVAL
+ almosttheend:
+ current_sctx = save_current_sctx;
+! restore_funccal(save_funccalp);
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+ prof_child_exit(&wait_start); /* leaving a child now */
+--- 4665,4671 ----
+ #ifdef FEAT_EVAL
+ almosttheend:
+ current_sctx = save_current_sctx;
+! restore_funccal();
+ # ifdef FEAT_PROFILE
+ if (do_profiling == PROF_YES)
+ prof_child_exit(&wait_start); /* leaving a child now */
+*** ../vim-8.1.0474/src/main.c 2018-09-30 21:43:17.195693290 +0200
+--- src/main.c 2018-10-14 21:26:18.723930303 +0200
+***************
+*** 1717,1723 ****
+ }
+
+ /*
+! * Check for: [r][e][g][vi|vim|view][diff][ex[im]]
+ * If the executable name starts with "r" we disable shell commands.
+ * If the next character is "e" we run in Easy mode.
+ * If the next character is "g" we run the GUI version.
+--- 1717,1723 ----
+ }
+
+ /*
+! * Check for: [r][e][g][vi|vim|view][diff][ex[im]] (sort of)
+ * If the executable name starts with "r" we disable shell commands.
+ * If the next character is "e" we run in Easy mode.
+ * If the next character is "g" we run the GUI version.
+***************
+*** 1788,1794 ****
+ else if (STRNICMP(initstr, "vim", 3) == 0)
+ initstr += 3;
+
+! /* Catch "[r][g]vimdiff" and "[r][g]viewdiff". */
+ if (STRICMP(initstr, "diff") == 0)
+ {
+ #ifdef FEAT_DIFF
+--- 1788,1794 ----
+ else if (STRNICMP(initstr, "vim", 3) == 0)
+ initstr += 3;
+
+! // Catch "[r][g]vimdiff" and "[r][g]viewdiff".
+ if (STRICMP(initstr, "diff") == 0)
+ {
+ #ifdef FEAT_DIFF
+***************
+*** 1800,1812 ****
+ #endif
+ }
+
+ if (STRNICMP(initstr, "ex", 2) == 0)
+ {
+ if (STRNICMP(initstr + 2, "im", 2) == 0)
+ exmode_active = EXMODE_VIM;
+ else
+ exmode_active = EXMODE_NORMAL;
+! change_compatible(TRUE); /* set 'compatible' */
+ }
+ }
+
+--- 1800,1814 ----
+ #endif
+ }
+
++ // Checking for "ex" here may catch some weir names, such as "vimex" or
++ // "viewex", we assume the user knows that.
+ if (STRNICMP(initstr, "ex", 2) == 0)
+ {
+ if (STRNICMP(initstr + 2, "im", 2) == 0)
+ exmode_active = EXMODE_VIM;
+ else
+ exmode_active = EXMODE_NORMAL;
+! change_compatible(TRUE); // set 'compatible'
+ }
+ }
+
+***************
+*** 4188,4199 ****
+ char_u *res;
+ int save_dbl = debug_break_level;
+ int save_ro = redir_off;
+! void *fc = NULL;
+
+ /* Evaluate the expression at the toplevel, don't use variables local to
+ * the calling function. Except when in debug mode. */
+ if (!debug_mode)
+! fc = clear_current_funccal();
+
+ /* Disable debugging, otherwise Vim hangs, waiting for "cont" to be
+ * typed. */
+--- 4190,4205 ----
+ char_u *res;
+ int save_dbl = debug_break_level;
+ int save_ro = redir_off;
+! funccal_entry_T funccal_entry;
+! int did_save_funccal = FALSE;
+
+ /* Evaluate the expression at the toplevel, don't use variables local to
+ * the calling function. Except when in debug mode. */
+ if (!debug_mode)
+! {
+! save_funccal(&funccal_entry);
+! did_save_funccal = TRUE;
+! }
+
+ /* Disable debugging, otherwise Vim hangs, waiting for "cont" to be
+ * typed. */
+***************
+*** 4210,4217 ****
+ --emsg_silent;
+ if (emsg_silent < 0)
+ emsg_silent = 0;
+! if (fc != NULL)
+! restore_current_funccal(fc);
+
+ /* A client can tell us to redraw, but not to display the cursor, so do
+ * that here. */
+--- 4216,4223 ----
+ --emsg_silent;
+ if (emsg_silent < 0)
+ emsg_silent = 0;
+! if (did_save_funccal)
+! restore_funccal();
+
+ /* A client can tell us to redraw, but not to display the cursor, so do
+ * that here. */
+*** ../vim-8.1.0474/src/version.c 2018-10-14 16:25:04.904583951 +0200
+--- src/version.c 2018-10-14 21:37:36.574478570 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 475,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+201. When somebody asks you where you are, you tell them in which chat room.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0476 b/data/vim/patches/8.1.0476
new file mode 100644
index 000000000..8387759a3
--- /dev/null
+++ b/data/vim/patches/8.1.0476
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0476
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0476
+Problem: Memory leaks in test_escaped_glob.
+Solution: Avoid failure when running the shell, use the sandbox.
+Files: src/testdir/test_escaped_glob.vim
+
+
+*** ../vim-8.1.0475/src/testdir/test_escaped_glob.vim 2017-12-07 22:05:10.000000000 +0100
+--- src/testdir/test_escaped_glob.vim 2018-10-14 22:02:01.544686099 +0200
+***************
+*** 2,9 ****
+ " characters.
+
+ function SetUp()
+- " make sure glob() doesn't use the shell
+- set shell=doesnotexist
+ " consistent sorting of file names
+ set nofileignorecase
+ endfunction
+--- 2,7 ----
+***************
+*** 14,32 ****
+ " filenames. Disable the test on non-Unix systems for now.
+ return
+ endif
+! call assert_equal("", glob('Xxx\{'))
+! call assert_equal("", glob('Xxx\$'))
+ w! Xxx{
+ w! Xxx\$
+! call assert_equal("Xxx{", glob('Xxx\{'))
+! call assert_equal("Xxx$", glob('Xxx\$'))
+ call delete('Xxx{')
+ call delete('Xxx$')
+ endfunction
+
+ function Test_globpath()
+! call assert_equal("sautest/autoload/globone.vim\nsautest/autoload/globtwo.vim",
+ \ globpath('sautest/autoload', 'glob*.vim'))
+! call assert_equal(['sautest/autoload/globone.vim', 'sautest/autoload/globtwo.vim'],
+ \ globpath('sautest/autoload', 'glob*.vim', 0, 1))
+ endfunction
+--- 12,33 ----
+ " filenames. Disable the test on non-Unix systems for now.
+ return
+ endif
+!
+! " Execute these commands in the sandbox, so that using the shell fails.
+! " Setting 'shell' to an invalid name causes a memory leak.
+! sandbox call assert_equal("", glob('Xxx\{'))
+! sandbox call assert_equal("", glob('Xxx\$'))
+ w! Xxx{
+ w! Xxx\$
+! sandbox call assert_equal("Xxx{", glob('Xxx\{'))
+! sandbox call assert_equal("Xxx$", glob('Xxx\$'))
+ call delete('Xxx{')
+ call delete('Xxx$')
+ endfunction
+
+ function Test_globpath()
+! sandbox call assert_equal("sautest/autoload/globone.vim\nsautest/autoload/globtwo.vim",
+ \ globpath('sautest/autoload', 'glob*.vim'))
+! sandbox call assert_equal(['sautest/autoload/globone.vim', 'sautest/autoload/globtwo.vim'],
+ \ globpath('sautest/autoload', 'glob*.vim', 0, 1))
+ endfunction
+*** ../vim-8.1.0475/src/version.c 2018-10-14 21:40:57.356848425 +0200
+--- src/version.c 2018-10-14 22:03:06.948104382 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 476,
+ /**/
+
+--
+panic("Foooooooood fight!");
+ -- In the kernel source aha1542.c, after detecting a bad segment list
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0477 b/data/vim/patches/8.1.0477
new file mode 100644
index 000000000..007dab042
--- /dev/null
+++ b/data/vim/patches/8.1.0477
@@ -0,0 +1,47 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0477
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0477 (after 8.1.0475)
+Problem: Tiny build fails.
+Solution: Add a dummy declaration for funccal_entry_T.
+Files: src/structs.h
+
+
+*** ../vim-8.1.0476/src/structs.h 2018-10-14 21:40:57.352848455 +0200
+--- src/structs.h 2018-10-14 22:36:20.990582112 +0200
+***************
+*** 1445,1450 ****
+--- 1445,1454 ----
+ {
+ int dummy;
+ } funcdict_T;
++ typedef struct
++ {
++ int dummy;
++ } funccal_entry_T;
+ #endif
+
+ struct partial_S
+*** ../vim-8.1.0476/src/version.c 2018-10-14 22:03:52.699698553 +0200
+--- src/version.c 2018-10-14 22:37:15.774104455 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 477,
+ /**/
+
+--
+$ echo pizza > /dev/oven
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0478 b/data/vim/patches/8.1.0478
new file mode 100644
index 000000000..d0fb7f56b
--- /dev/null
+++ b/data/vim/patches/8.1.0478
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0478
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0478
+Problem: Cannot build with perl using MinGW.
+Solution: Add -I. (Ken Takata, Cesar Romani)
+Files: src/Make_cyg_ming.mak
+
+
+*** ../vim-8.1.0477/src/Make_cyg_ming.mak 2018-10-14 16:25:04.904583951 +0200
+--- src/Make_cyg_ming.mak 2018-10-15 20:08:10.194056013 +0200
+***************
+*** 1049,1055 ****
+ $(PERLTYPEMAP) if_perl.xs -output $@
+
+ $(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL)
+! $(CC) -c $(CFLAGS) auto/if_perl.c -o $(OUTDIR)/if_perl.o
+
+
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+--- 1049,1055 ----
+ $(PERLTYPEMAP) if_perl.xs -output $@
+
+ $(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL)
+! $(CC) -c $(CFLAGS) -I. auto/if_perl.c -o $(OUTDIR)/if_perl.o
+
+
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+*** ../vim-8.1.0477/src/version.c 2018-10-14 22:38:06.161665231 +0200
+--- src/version.c 2018-10-15 20:10:39.696916053 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 478,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+205. You're constantly yelling at your spouse, family, roommate, whatever,
+ for using the phone for stupid things...like talking.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0479 b/data/vim/patches/8.1.0479
new file mode 100644
index 000000000..84cfe5f20
--- /dev/null
+++ b/data/vim/patches/8.1.0479
@@ -0,0 +1,188 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0479
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0479
+Problem: Failure when setting 'varsofttabstop' to end in a comma. (Ralf
+ Schandl)
+Solution: Reject value with trailing command. Add test for invalid values
+ (closes #3544)
+Files: src/testdir/test_vartabs.vim, src/option.c
+
+
+*** ../vim-8.1.0478/src/testdir/test_vartabs.vim 2018-06-28 22:22:56.233315600 +0200
+--- src/testdir/test_vartabs.vim 2018-10-15 22:50:55.841034425 +0200
+***************
+*** 5,15 ****
+ endif
+
+ source view_util.vim
+! function! s:compare_lines(expect, actual)
+ call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
+! endfunction
+
+! func! Test_vartabs()
+ new
+ %d
+
+--- 5,15 ----
+ endif
+
+ source view_util.vim
+! func s:compare_lines(expect, actual)
+ call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
+! endfunc
+
+! func Test_vartabs()
+ new
+ %d
+
+***************
+*** 261,267 ****
+ bwipeout!
+ endfunc
+
+! func! Test_vartabs_linebreak()
+ if winwidth(0) < 40
+ return
+ endif
+--- 261,267 ----
+ bwipeout!
+ endfunc
+
+! func Test_vartabs_linebreak()
+ if winwidth(0) < 40
+ return
+ endif
+***************
+*** 296,298 ****
+--- 296,309 ----
+ bw!
+ set nolist listchars&vim
+ endfunc
++
++ func Test_vartabs_failures()
++ call assert_fails('set vts=8,')
++ call assert_fails('set vsts=8,')
++ call assert_fails('set vts=8,,8')
++ call assert_fails('set vsts=8,,8')
++ call assert_fails('set vts=8,,8,')
++ call assert_fails('set vsts=8,,8,')
++ call assert_fails('set vts=,8')
++ call assert_fails('set vsts=,8')
++ endfunc
+*** ../vim-8.1.0478/src/option.c 2018-10-02 14:45:07.023652468 +0200
+--- src/option.c 2018-10-15 22:49:58.049552333 +0200
+***************
+*** 12786,12802 ****
+ int t;
+ char_u *cp;
+
+! if ((!var[0] || (var[0] == '0' && !var[1])))
+ {
+ *array = NULL;
+ return TRUE;
+ }
+
+! for (cp = var; *cp; ++cp)
+ {
+! if (cp == var || *(cp - 1) == ',')
+ {
+ char_u *end;
+ if (strtol((char *)cp, (char **)&end, 10) <= 0)
+ {
+ if (cp != end)
+--- 12786,12803 ----
+ int t;
+ char_u *cp;
+
+! if (var[0] == NUL || (var[0] == '0' && var[1] == NUL))
+ {
+ *array = NULL;
+ return TRUE;
+ }
+
+! for (cp = var; *cp != NUL; ++cp)
+ {
+! if (cp == var || cp[-1] == ',')
+ {
+ char_u *end;
++
+ if (strtol((char *)cp, (char **)&end, 10) <= 0)
+ {
+ if (cp != end)
+***************
+*** 12809,12815 ****
+
+ if (VIM_ISDIGIT(*cp))
+ continue;
+! if (*cp == ',' && cp > var && *(cp - 1) != ',')
+ {
+ ++valcount;
+ continue;
+--- 12810,12816 ----
+
+ if (VIM_ISDIGIT(*cp))
+ continue;
+! if (cp[0] == ',' && cp > var && cp[-1] != ',' && cp[1] != NUL)
+ {
+ ++valcount;
+ continue;
+***************
+*** 12818,12833 ****
+ return FALSE;
+ }
+
+! *array = (int *) alloc((unsigned) ((valcount + 1) * sizeof(int)));
+ (*array)[0] = valcount;
+
+ t = 1;
+! for (cp = var; *cp;)
+ {
+ (*array)[t++] = atoi((char *)cp);
+! while (*cp && *cp != ',')
+ ++cp;
+! if (*cp)
+ ++cp;
+ }
+
+--- 12819,12834 ----
+ return FALSE;
+ }
+
+! *array = (int *)alloc((unsigned) ((valcount + 1) * sizeof(int)));
+ (*array)[0] = valcount;
+
+ t = 1;
+! for (cp = var; *cp != NUL;)
+ {
+ (*array)[t++] = atoi((char *)cp);
+! while (*cp != NUL && *cp != ',')
+ ++cp;
+! if (*cp != NUL)
+ ++cp;
+ }
+
+*** ../vim-8.1.0478/src/version.c 2018-10-15 20:11:14.472652214 +0200
+--- src/version.c 2018-10-15 22:51:35.136682428 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 479,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+214. Your MCI "Circle of Friends" are all Hayes-compatible.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0480 b/data/vim/patches/8.1.0480
new file mode 100644
index 000000000..cd8355dae
--- /dev/null
+++ b/data/vim/patches/8.1.0480
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0480
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0480
+Problem: MinGW build file uses different -I flags than MVC.
+Solution: Add -I to $CFLAGS. (Ken Takata)
+Files: src/Make_cyg_ming.mak
+
+
+*** ../vim-8.1.0479/src/Make_cyg_ming.mak 2018-10-15 20:11:14.472652214 +0200
+--- src/Make_cyg_ming.mak 2018-10-16 21:10:48.489079439 +0200
+***************
+*** 501,507 ****
+ #>>>>> end of choices
+ ###########################################################################
+
+! CFLAGS = -Iproto $(DEFINES) -pipe -march=$(ARCH) -Wall
+ CXXFLAGS = -std=gnu++11
+ WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
+ EXTRA_LIBS =
+--- 501,507 ----
+ #>>>>> end of choices
+ ###########################################################################
+
+! CFLAGS = -I. -Iproto $(DEFINES) -pipe -march=$(ARCH) -Wall
+ CXXFLAGS = -std=gnu++11
+ WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
+ EXTRA_LIBS =
+***************
+*** 1049,1055 ****
+ $(PERLTYPEMAP) if_perl.xs -output $@
+
+ $(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL)
+! $(CC) -c $(CFLAGS) -I. auto/if_perl.c -o $(OUTDIR)/if_perl.o
+
+
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+--- 1049,1055 ----
+ $(PERLTYPEMAP) if_perl.xs -output $@
+
+ $(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL)
+! $(CC) -c $(CFLAGS) auto/if_perl.c -o $(OUTDIR)/if_perl.o
+
+
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+*** ../vim-8.1.0479/src/version.c 2018-10-15 22:51:46.744578471 +0200
+--- src/version.c 2018-10-16 21:12:00.908430685 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 480,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+218. Your spouse hands you a gift wrapped magnet with your PC's name
+ on it and you accuse him or her of genocide.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0481 b/data/vim/patches/8.1.0481
new file mode 100644
index 000000000..682c01928
--- /dev/null
+++ b/data/vim/patches/8.1.0481
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0481
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0481
+Problem: When "Terminal" highlight is reverted cursor doesn't show.
+Solution: Get the colors of the "Terminal" group. (closes #3546)
+Files: src/terminal.c
+
+
+*** ../vim-8.1.0480/src/terminal.c 2018-09-09 19:56:03.434838223 +0200
+--- src/terminal.c 2018-10-16 22:05:15.814900004 +0200
+***************
+*** 1953,1958 ****
+--- 1953,1960 ----
+ {
+ term_T *term = in_terminal_loop;
+ static cursorentry_T entry;
++ int id;
++ guicolor_T term_fg, term_bg;
+
+ vim_memset(&entry, 0, sizeof(entry));
+ entry.shape = entry.mshape =
+***************
+*** 1966,1974 ****
+ entry.blinkon = 400;
+ entry.blinkoff = 250;
+ }
+! *fg = gui.back_pixel;
+ if (term->tl_cursor_color == NULL)
+! *bg = gui.norm_pixel;
+ else
+ *bg = color_name2handle(term->tl_cursor_color);
+ entry.name = "n";
+--- 1968,1991 ----
+ entry.blinkon = 400;
+ entry.blinkoff = 250;
+ }
+!
+! /* The "Terminal" highlight group overrules the defaults. */
+! id = syn_name2id((char_u *)"Terminal");
+! if (id != 0)
+! {
+! syn_id2colors(id, &term_fg, &term_bg);
+! *fg = term_bg;
+! }
+! else
+! *fg = gui.back_pixel;
+!
+ if (term->tl_cursor_color == NULL)
+! {
+! if (id != 0)
+! *bg = term_fg;
+! else
+! *bg = gui.norm_pixel;
+! }
+ else
+ *bg = color_name2handle(term->tl_cursor_color);
+ entry.name = "n";
+*** ../vim-8.1.0480/src/version.c 2018-10-16 21:13:10.411812362 +0200
+--- src/version.c 2018-10-16 22:07:53.913539102 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 481,
+ /**/
+
+--
+Your fault: core dumped
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0482 b/data/vim/patches/8.1.0482
new file mode 100644
index 000000000..1ad8f0d89
--- /dev/null
+++ b/data/vim/patches/8.1.0482
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0482
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0482
+Problem: MinGW "make clean" deletes all .exe files.
+Solution: Only delete .exe files that it builds. (Ken Takata)
+Files: src/Make_cyg_ming.mak
+
+
+*** ../vim-8.1.0481/src/Make_cyg_ming.mak 2018-10-16 21:13:10.411812362 +0200
+--- src/Make_cyg_ming.mak 2018-10-17 22:09:45.125246398 +0200
+***************
+*** 972,978 ****
+ $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE) CXX='$(CXX)' STATIC_STDCPLUS=$(STATIC_STDCPLUS)
+
+ tags: notags
+! $(CTAGS) *.c *.cpp *.h if_perl.xs
+
+ notags:
+ -$(DEL) tags
+--- 972,982 ----
+ $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE) CXX='$(CXX)' STATIC_STDCPLUS=$(STATIC_STDCPLUS)
+
+ tags: notags
+! $(CTAGS) *.c *.cpp *.h
+! ifdef PERL
+! $(CTAGS) --append=yes auto$(DIRSLASH)if_perl.c
+! endif
+!
+
+ notags:
+ -$(DEL) tags
+***************
+*** 981,987 ****
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.o
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.res
+ -rmdir $(OUTDIR)
+! -$(DEL) *.exe
+ -$(DEL) pathdef.c
+ ifdef PERL
+ -$(DEL) if_perl.c
+--- 985,991 ----
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.o
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.res
+ -rmdir $(OUTDIR)
+! -$(DEL) $(TARGET) vimrun.exe install.exe uninstal.exe
+ -$(DEL) pathdef.c
+ ifdef PERL
+ -$(DEL) if_perl.c
+*** ../vim-8.1.0481/src/version.c 2018-10-16 22:12:56.090984061 +0200
+--- src/version.c 2018-10-17 22:10:39.552719823 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 482,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+228. You spend Saturday night making the counter on your home page
+ pass that 2000 mark.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0483 b/data/vim/patches/8.1.0483
new file mode 100644
index 000000000..70b40c58a
--- /dev/null
+++ b/data/vim/patches/8.1.0483
@@ -0,0 +1,87 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0483
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0483
+Problem: MinGW does not build tee.exe.
+Solution: Add build instructions. (Yasuhiro Matsumoto, closes #3548)
+Files: src/Make_cyg_ming.mak, src/tee/Makefile
+
+
+*** ../vim-8.1.0482/src/Make_cyg_ming.mak 2018-10-17 22:12:10.627845134 +0200
+--- src/Make_cyg_ming.mak 2018-10-17 22:43:01.705335899 +0200
+***************
+*** 943,949 ****
+ LFLAGS += -Wl,-Map=$(TARGET).map
+ endif
+
+! all: $(TARGET) vimrun.exe xxd/xxd.exe install.exe uninstal.exe GvimExt/gvimext.dll
+
+ vimrun.exe: vimrun.c
+ $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB)
+--- 943,949 ----
+ LFLAGS += -Wl,-Map=$(TARGET).map
+ endif
+
+! all: $(TARGET) vimrun.exe xxd/xxd.exe tee/tee.exe install.exe uninstal.exe GvimExt/gvimext.dll
+
+ vimrun.exe: vimrun.c
+ $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB)
+***************
+*** 968,973 ****
+--- 968,976 ----
+ xxd/xxd.exe: xxd/xxd.c
+ $(MAKE) -C xxd -f Make_ming.mak CC='$(CC)'
+
++ tee/tee.exe: tee/tee.c
++ $(MAKE) -C tee CC='$(CC)'
++
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+ $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE) CXX='$(CXX)' STATIC_STDCPLUS=$(STATIC_STDCPLUS)
+
+***************
+*** 996,1001 ****
+--- 999,1005 ----
+ endif
+ $(MAKE) -C GvimExt -f Make_ming.mak clean
+ $(MAKE) -C xxd -f Make_ming.mak clean
++ $(MAKE) -C tee clean
+
+ ###########################################################################
+ INCL = vim.h alloc.h arabic.h ascii.h ex_cmds.h farsi.h feature.h globals.h \
+*** ../vim-8.1.0482/src/tee/Makefile 2010-05-15 13:04:08.000000000 +0200
+--- src/tee/Makefile 2018-10-17 22:43:52.592811771 +0200
+***************
+*** 1,4 ****
+! # A very (if not the most) simplistic Makefile for OS/2
+
+ CC=gcc
+ CFLAGS=-O2 -fno-strength-reduce
+--- 1,4 ----
+! # A very (if not the most) simplistic Makefile for MS-Windows and OS/2
+
+ CC=gcc
+ CFLAGS=-O2 -fno-strength-reduce
+*** ../vim-8.1.0482/src/version.c 2018-10-17 22:12:10.627845134 +0200
+--- src/version.c 2018-10-17 22:44:59.276129663 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 483,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+229. You spend so much time thinking what to add on this list.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0484 b/data/vim/patches/8.1.0484
new file mode 100644
index 000000000..52dd57b2d
--- /dev/null
+++ b/data/vim/patches/8.1.0484
@@ -0,0 +1,213 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0484
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0484
+Problem: Some file types are not recognized.
+Solution: Update the file type detection.
+Files: runtime/filetype.vim, src/testdir/test_filetype.vim
+
+
+*** ../vim-8.1.0483/runtime/filetype.vim 2018-05-04 20:36:26.000000000 +0200
+--- runtime/filetype.vim 2018-10-11 16:27:56.551008731 +0200
+***************
+*** 586,592 ****
+ au BufNewFile,BufRead *.mas,*.master setf master
+
+ " Forth
+! au BufNewFile,BufRead *.fs,*.ft setf forth
+
+ " Reva Forth
+ au BufNewFile,BufRead *.frt setf reva
+--- 586,592 ----
+ au BufNewFile,BufRead *.mas,*.master setf master
+
+ " Forth
+! au BufNewFile,BufRead *.fs,*.ft,*.fth setf forth
+
+ " Reva Forth
+ au BufNewFile,BufRead *.frt setf reva
+***************
+*** 1263,1271 ****
+ " Pyrex
+ au BufNewFile,BufRead *.pyx,*.pxd setf pyrex
+
+! " Python, Python Shell Startup Files
+ " Quixote (Python-based web framework)
+! au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc,*.ptl setf python
+
+ " Radiance
+ au BufNewFile,BufRead *.rad,*.mat setf radiance
+--- 1263,1271 ----
+ " Pyrex
+ au BufNewFile,BufRead *.pyx,*.pxd setf pyrex
+
+! " Python, Python Shell Startup and Python Stub Files
+ " Quixote (Python-based web framework)
+! au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc,*.ptl,*.pyi setf python
+
+ " Radiance
+ au BufNewFile,BufRead *.rad,*.mat setf radiance
+***************
+*** 1414,1421 ****
+ " sed
+ au BufNewFile,BufRead *.sed setf sed
+
+! " Sieve (RFC 3028)
+! au BufNewFile,BufRead *.siv setf sieve
+
+ " Sendmail
+ au BufNewFile,BufRead sendmail.cf setf sm
+--- 1414,1421 ----
+ " sed
+ au BufNewFile,BufRead *.sed setf sed
+
+! " Sieve (RFC 3028, 5228)
+! au BufNewFile,BufRead *.siv,*.sieve setf sieve
+
+ " Sendmail
+ au BufNewFile,BufRead sendmail.cf setf sm
+***************
+*** 1462,1468 ****
+
+ " Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc.
+ " Gentoo ebuilds and Arch Linux PKGBUILDs are actually bash scripts
+! au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash[_-]profile*,.bash[_-]logout*,.bash[_-]aliases*,*.bash,*/{,.}bash[_-]completion{,.d,.sh}{,/*},*.ebuild,*.eclass,PKGBUILD* call dist#ft#SetFileTypeSH("bash")
+ au BufNewFile,BufRead .kshrc*,*.ksh call dist#ft#SetFileTypeSH("ksh")
+ au BufNewFile,BufRead */etc/profile,.profile*,*.sh,*.env call dist#ft#SetFileTypeSH(getline(1))
+
+--- 1462,1468 ----
+
+ " Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc.
+ " Gentoo ebuilds and Arch Linux PKGBUILDs are actually bash scripts
+! au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash[_-]profile*,.bash[_-]logout*,.bash[_-]aliases*,bash-fc[-.]*,*.bash,*/{,.}bash[_-]completion{,.d,.sh}{,/*},*.ebuild,*.eclass,PKGBUILD* call dist#ft#SetFileTypeSH("bash")
+ au BufNewFile,BufRead .kshrc*,*.ksh call dist#ft#SetFileTypeSH("ksh")
+ au BufNewFile,BufRead */etc/profile,.profile*,*.sh,*.env call dist#ft#SetFileTypeSH(getline(1))
+
+***************
+*** 1766,1771 ****
+--- 1766,1774 ----
+ " Webmacro
+ au BufNewFile,BufRead *.wm setf webmacro
+
++ " WebAssembly
++ au BufNewFile,BufRead *.wast,*.wat setf wast
++
+ " Wget config
+ au BufNewFile,BufRead .wgetrc,wgetrc setf wget
+
+***************
+*** 1862,1867 ****
+--- 1865,1873 ----
+ " ATI graphics driver configuration
+ au BufNewFile,BufRead fglrxrc setf xml
+
++ " Web Services Description Language (WSDL)
++ au BufNewFile,BufRead *.wsdl setf xml
++
+ " XLIFF (XML Localisation Interchange File Format) is also XML
+ au BufNewFile,BufRead *.xlf setf xml
+ au BufNewFile,BufRead *.xliff setf xml
+*** ../vim-8.1.0483/src/testdir/test_filetype.vim 2018-02-03 22:32:17.000000000 +0100
+--- src/testdir/test_filetype.vim 2018-10-19 16:26:23.556527490 +0200
+***************
+*** 162,168 ****
+ \ 'fetchmail': ['.fetchmailrc'],
+ \ 'fgl': ['file.4gl', 'file.4gh', 'file.m4gl'],
+ \ 'focexec': ['file.fex', 'file.focexec'],
+! \ 'forth': ['file.fs', 'file.ft'],
+ \ 'fortran': ['file.f', 'file.for', 'file.fortran', 'file.fpp', 'file.ftn', 'file.f77', 'file.f90', 'file.f95', 'file.f03', 'file.f08'],
+ \ 'framescript': ['file.fsl'],
+ \ 'freebasic': ['file.fb', 'file.bi'],
+--- 162,168 ----
+ \ 'fetchmail': ['.fetchmailrc'],
+ \ 'fgl': ['file.4gl', 'file.4gh', 'file.m4gl'],
+ \ 'focexec': ['file.fex', 'file.focexec'],
+! \ 'forth': ['file.fs', 'file.ft', 'file.fth'],
+ \ 'fortran': ['file.f', 'file.for', 'file.fortran', 'file.fpp', 'file.ftn', 'file.f77', 'file.f90', 'file.f95', 'file.f03', 'file.f08'],
+ \ 'framescript': ['file.fsl'],
+ \ 'freebasic': ['file.fb', 'file.bi'],
+***************
+*** 350,356 ****
+ \ 'protocols': ['/etc/protocols'],
+ \ 'psf': ['file.psf'],
+ \ 'pyrex': ['file.pyx', 'file.pxd'],
+! \ 'python': ['file.py', 'file.pyw', '.pythonstartup', '.pythonrc', 'file.ptl'],
+ \ 'quake': ['anybaseq2/file.cfg', 'anyid1/file.cfg', 'quake3/file.cfg'],
+ \ 'radiance': ['file.rad', 'file.mat'],
+ \ 'ratpoison': ['.ratpoisonrc', 'ratpoisonrc'],
+--- 350,356 ----
+ \ 'protocols': ['/etc/protocols'],
+ \ 'psf': ['file.psf'],
+ \ 'pyrex': ['file.pyx', 'file.pxd'],
+! \ 'python': ['file.py', 'file.pyw', '.pythonstartup', '.pythonrc', 'file.ptl', 'file.pyi'],
+ \ 'quake': ['anybaseq2/file.cfg', 'anyid1/file.cfg', 'quake3/file.cfg'],
+ \ 'radiance': ['file.rad', 'file.mat'],
+ \ 'ratpoison': ['.ratpoisonrc', 'ratpoisonrc'],
+***************
+*** 389,395 ****
+ \ 'services': ['/etc/services'],
+ \ 'setserial': ['/etc/serial.conf'],
+ \ 'sh': ['/etc/udev/cdsymlinks.conf'],
+! \ 'sieve': ['file.siv'],
+ \ 'simula': ['file.sim'],
+ \ 'sinda': ['file.sin', 'file.s85'],
+ \ 'sisu': ['file.sst', 'file.ssm', 'file.ssi', 'file.-sst', 'file._sst', 'file.sst.meta', 'file.-sst.meta', 'file._sst.meta'],
+--- 389,395 ----
+ \ 'services': ['/etc/services'],
+ \ 'setserial': ['/etc/serial.conf'],
+ \ 'sh': ['/etc/udev/cdsymlinks.conf'],
+! \ 'sieve': ['file.siv', 'file.sieve'],
+ \ 'simula': ['file.sim'],
+ \ 'sinda': ['file.sin', 'file.s85'],
+ \ 'sisu': ['file.sst', 'file.ssm', 'file.ssi', 'file.-sst', 'file._sst', 'file.sst.meta', 'file.-sst.meta', 'file._sst.meta'],
+***************
+*** 474,479 ****
+--- 474,480 ----
+ \ 'voscm': ['file.cm'],
+ \ 'vrml': ['file.wrl'],
+ \ 'vroom': ['file.vroom'],
++ \ 'wast': ['file.wast', 'file.wat'],
+ \ 'webmacro': ['file.wm'],
+ \ 'wget': ['.wgetrc', 'wgetrc'],
+ \ 'winbatch': ['file.wbt'],
+***************
+*** 484,490 ****
+ \ 'xhtml': ['file.xhtml', 'file.xht'],
+ \ 'xinetd': ['/etc/xinetd.conf'],
+ \ 'xmath': ['file.msc', 'file.msf'],
+! \ 'xml': ['/etc/blkid.tab', '/etc/blkid.tab.old', 'file.xmi', 'file.csproj', 'file.csproj.user', 'file.ts', 'file.ui', 'file.tpm', '/etc/xdg/menus/file.menu', 'fglrxrc', 'file.xlf', 'file.xliff', 'file.xul'],
+ \ 'xmodmap': ['anyXmodmap'],
+ \ 'xf86conf': ['xorg.conf', 'xorg.conf-4'],
+ \ 'xpm2': ['file.xpm2'],
+--- 485,491 ----
+ \ 'xhtml': ['file.xhtml', 'file.xht'],
+ \ 'xinetd': ['/etc/xinetd.conf'],
+ \ 'xmath': ['file.msc', 'file.msf'],
+! \ 'xml': ['/etc/blkid.tab', '/etc/blkid.tab.old', 'file.xmi', 'file.csproj', 'file.csproj.user', 'file.ts', 'file.ui', 'file.tpm', '/etc/xdg/menus/file.menu', 'fglrxrc', 'file.xlf', 'file.xliff', 'file.xul', 'file.wsdl'],
+ \ 'xmodmap': ['anyXmodmap'],
+ \ 'xf86conf': ['xorg.conf', 'xorg.conf-4'],
+ \ 'xpm2': ['file.xpm2'],
+*** ../vim-8.1.0483/src/version.c 2018-10-17 22:45:51.167602173 +0200
+--- src/version.c 2018-10-19 16:23:53.577643291 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 484,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+240. You think Webster's Dictionary is a directory of WEB sites.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0485 b/data/vim/patches/8.1.0485
new file mode 100644
index 000000000..73837dfcc
--- /dev/null
+++ b/data/vim/patches/8.1.0485
@@ -0,0 +1,86 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0485
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0485
+Problem: term_start() does not check if directory is accessible.
+Solution: Add mch_access() call. (Jason Franklin)
+Files: src/channel.c, src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0484/src/channel.c 2018-09-13 15:33:39.601712271 +0200
+--- src/channel.c 2018-10-19 16:52:39.981396959 +0200
+***************
+*** 4916,4922 ****
+ if (!(supported2 & JO2_CWD))
+ break;
+ opt->jo_cwd = get_tv_string_buf_chk(item, opt->jo_cwd_buf);
+! if (opt->jo_cwd == NULL || !mch_isdir(opt->jo_cwd))
+ {
+ EMSG2(_(e_invargval), "cwd");
+ return FAIL;
+--- 4916,4923 ----
+ if (!(supported2 & JO2_CWD))
+ break;
+ opt->jo_cwd = get_tv_string_buf_chk(item, opt->jo_cwd_buf);
+! if (opt->jo_cwd == NULL || !mch_isdir(opt->jo_cwd)
+! || mch_access((char *)opt->jo_cwd, X_OK) != 0)
+ {
+ EMSG2(_(e_invargval), "cwd");
+ return FAIL;
+*** ../vim-8.1.0484/src/testdir/test_terminal.vim 2018-08-07 16:33:15.255728441 +0200
+--- src/testdir/test_terminal.vim 2018-10-19 16:52:03.413741075 +0200
+***************
+*** 478,483 ****
+--- 478,505 ----
+ call delete('Xdir', 'rf')
+ endfunc
+
++ func Test_terminal_cwd_failure()
++ " Case 1: Provided directory is not actually a directory. Attempt to make
++ " the file executable as well.
++ call writefile([], 'Xfile')
++ call setfperm('Xfile', 'rwx------')
++ call assert_fails("call term_start(&shell, {'cwd': 'Xfile'})", 'E475:')
++ call delete('Xfile')
++
++ " Case 2: Directory does not exist.
++ call assert_fails("call term_start(&shell, {'cwd': 'Xdir'})", 'E475:')
++
++ " Case 3: Directory exists but is not accessible.
++ call mkdir('Xdir', '', '0600')
++ " return early if the directory permissions could not be set properly
++ if getfperm('Xdir')[2] == 'x'
++ call delete('Xdir', 'rf')
++ return
++ endif
++ call assert_fails("call term_start(&shell, {'cwd': 'Xdir'})", 'E475:')
++ call delete('Xdir', 'rf')
++ endfunc
++
+ func Test_terminal_servername()
+ if !has('clientserver')
+ return
+*** ../vim-8.1.0484/src/version.c 2018-10-19 16:26:39.964404727 +0200
+--- src/version.c 2018-10-19 16:50:33.270601082 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 485,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+241. You try to look for Net Search even when you're in File Manager.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0486 b/data/vim/patches/8.1.0486
new file mode 100644
index 000000000..1da067e7b
--- /dev/null
+++ b/data/vim/patches/8.1.0486
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0486
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0486 (after 8.1.0485)
+Problem: Can't build in MS-Windows.
+Solution: Put mch_access() call inside #ifdef
+Files: src/channel.c
+
+
+*** ../vim-8.1.0485/src/channel.c 2018-10-19 16:53:36.732867808 +0200
+--- src/channel.c 2018-10-19 17:34:14.806125758 +0200
+***************
+*** 4917,4923 ****
+ break;
+ opt->jo_cwd = get_tv_string_buf_chk(item, opt->jo_cwd_buf);
+ if (opt->jo_cwd == NULL || !mch_isdir(opt->jo_cwd)
+! || mch_access((char *)opt->jo_cwd, X_OK) != 0)
+ {
+ EMSG2(_(e_invargval), "cwd");
+ return FAIL;
+--- 4917,4926 ----
+ break;
+ opt->jo_cwd = get_tv_string_buf_chk(item, opt->jo_cwd_buf);
+ if (opt->jo_cwd == NULL || !mch_isdir(opt->jo_cwd)
+! #ifndef WIN32 // Win32 directories don't have the concept of "executable"
+! || mch_access((char *)opt->jo_cwd, X_OK) != 0
+! #endif
+! )
+ {
+ EMSG2(_(e_invargval), "cwd");
+ return FAIL;
+*** ../vim-8.1.0485/src/version.c 2018-10-19 16:53:36.732867808 +0200
+--- src/version.c 2018-10-19 17:35:28.221467810 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 486,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+242. You turn down a better-paying job because it doesn't come with
+ a free e-mail account.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0487 b/data/vim/patches/8.1.0487
new file mode 100644
index 000000000..e373db8b0
--- /dev/null
+++ b/data/vim/patches/8.1.0487
@@ -0,0 +1,1207 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.04
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0487
+Problem: No menus specifically for the terminal window.
+Solution: Add :tlmenu. (Yee Cheng Chin, closes #3439) Add a menu test.
+Files: runtime/delmenu.vim, runtime/doc/autocmd.txt, runtime/doc/gui.txt,
+ runtime/doc/index.txt, runtime/doc/terminal.txt,
+ runtime/doc/usr_42.txt, runtime/menu.vim, src/ex_cmdidxs.h,
+ src/ex_cmds.h, src/ex_docmd.c, src/menu.c, src/proto/menu.pro,
+ src/popupmnu.c, src/structs.h, src/testdir/test_menu.vim
+
+
+*** ../vim-8.1.0486/runtime/delmenu.vim 2010-05-15 13:03:31.000000000 +0200
+--- runtime/delmenu.vim 2018-10-19 18:35:52.654453150 +0200
+***************
+*** 5,10 ****
+--- 5,11 ----
+ " Last Change: 2001 May 27
+
+ aunmenu *
++ tlunmenu *
+
+ silent! unlet did_install_default_menus
+ silent! unlet did_install_syntax_menu
+*** ../vim-8.1.0486/runtime/doc/autocmd.txt 2018-09-16 15:47:45.629425398 +0200
+--- runtime/doc/autocmd.txt 2018-10-19 18:35:52.654453150 +0200
+***************
+*** 831,843 ****
+ right mouse button). Useful for adjusting the
+ menu for what is under the cursor or mouse
+ pointer.
+! The pattern is matched against a single
+! character representing the mode:
+ n Normal
+ v Visual
+ o Operator-pending
+ i Insert
+ c Command line
+ *OptionSet*
+ OptionSet After setting an option. The pattern is
+ matched against the long option name.
+--- 835,848 ----
+ right mouse button). Useful for adjusting the
+ menu for what is under the cursor or mouse
+ pointer.
+! The pattern is matched against one or two
+! characters representing the mode:
+ n Normal
+ v Visual
+ o Operator-pending
+ i Insert
+ c Command line
++ tl Terminal
+ *OptionSet*
+ OptionSet After setting an option. The pattern is
+ matched against the long option name.
+*** ../vim-8.1.0486/runtime/doc/gui.txt 2018-05-17 13:41:40.000000000 +0200
+--- runtime/doc/gui.txt 2018-10-19 19:21:48.080078320 +0200
+***************
+*** 547,561 ****
+
+ 5.2 Creating New Menus *creating-menus*
+
+! *:me* *:menu* *:noreme* *:noremenu*
+! *:am* *:amenu* *:an* *:anoremenu*
+! *:nme* *:nmenu* *:nnoreme* *:nnoremenu*
+! *:ome* *:omenu* *:onoreme* *:onoremenu*
+! *:vme* *:vmenu* *:vnoreme* *:vnoremenu*
+! *:xme* *:xmenu* *:xnoreme* *:xnoremenu*
+! *:sme* *:smenu* *:snoreme* *:snoremenu*
+! *:ime* *:imenu* *:inoreme* *:inoremenu*
+! *:cme* *:cmenu* *:cnoreme* *:cnoremenu*
+ *E330* *E327* *E331* *E336* *E333*
+ *E328* *E329* *E337* *E792*
+ To create a new menu item, use the ":menu" commands. They are mostly like
+--- 547,562 ----
+
+ 5.2 Creating New Menus *creating-menus*
+
+! *:me* *:menu* *:noreme* *:noremenu*
+! *:am* *:amenu* *:an* *:anoremenu*
+! *:nme* *:nmenu* *:nnoreme* *:nnoremenu*
+! *:ome* *:omenu* *:onoreme* *:onoremenu*
+! *:vme* *:vmenu* *:vnoreme* *:vnoremenu*
+! *:xme* *:xmenu* *:xnoreme* *:xnoremenu*
+! *:sme* *:smenu* *:snoreme* *:snoremenu*
+! *:ime* *:imenu* *:inoreme* *:inoremenu*
+! *:cme* *:cmenu* *:cnoreme* *:cnoremenu*
+! *:tlm* *:tlmenu* *:tln* *:tlnoremenu*
+ *E330* *E327* *E331* *E336* *E333*
+ *E328* *E329* *E337* *E792*
+ To create a new menu item, use the ":menu" commands. They are mostly like
+***************
+*** 571,576 ****
+--- 572,581 ----
+ "Big Changes", which is a sub-menu containing the item "Delete All Spaces",
+ which when selected, performs the operation.
+
++ To create a menu for terminal mode, use |:tlmenu| instead of |:tmenu| unlike
++ key mapping (|:tmap|). This is because |:tmenu| is already used for defining
++ tooltips for menus. See |terminal-typing|.
++
+ Special characters in a menu name:
+
+ & The next character is the shortcut key. Make sure each
+***************
+*** 589,597 ****
+ this menu can be used. The second part is shown as "Open :e". The ":e"
+ is right aligned, and the "O" is underlined, to indicate it is the shortcut.
+
+! The ":amenu" command can be used to define menu entries for all modes at once.
+! To make the command work correctly, a character is automatically inserted for
+! some modes:
+ mode inserted appended ~
+ Normal nothing nothing
+ Visual <C-C> <C-\><C-G>
+--- 594,602 ----
+ this menu can be used. The second part is shown as "Open :e". The ":e"
+ is right aligned, and the "O" is underlined, to indicate it is the shortcut.
+
+! The ":amenu" command can be used to define menu entries for all modes at once,
+! except for Terminal mode. To make the command work correctly, a character is
+! automatically inserted for some modes:
+ mode inserted appended ~
+ Normal nothing nothing
+ Visual <C-C> <C-\><C-G>
+***************
+*** 865,870 ****
+--- 870,885 ----
+ insert-mode menu Eg: >
+ :emenu File.Exit
+
++ :[range]em[enu] {mode} {menu} Like above, but execute the menu for {mode}:
++ 'n': |:nmenu| Normal mode
++ 'v': |:vmenu| Visual mode
++ 's': |:smenu| Select mode
++ 'o': |:omenu| Operator-pending mode
++ 't': |:tlmenu| Terminal mode
++ 'i': |:imenu| Insert mode
++ 'c': |:cmenu| Cmdline mode
++
++
+ If the console-mode vim has been compiled with WANT_MENU defined, you can
+ use :emenu to access useful menu items you may have got used to from GUI
+ mode. See 'wildmenu' for an option that works well with this. See
+***************
+*** 885,890 ****
+--- 900,906 ----
+ *:sunme* *:sunmenu*
+ *:iunme* *:iunmenu*
+ *:cunme* *:cunmenu*
++ *:tlu* *:tlunmenu*
+ To delete a menu item or a whole submenu, use the unmenu commands, which are
+ analogous to the unmap commands. Eg: >
+ :unmenu! Edit.Paste
+***************
+*** 951,956 ****
+--- 967,974 ----
+ :tu[nmenu] {menupath} Remove a tip for a menu or tool.
+ {only in X11 and Win32 GUI}
+
++ Note: To create menus for terminal mode, use |:tlmenu| instead.
++
+ When a tip is defined for a menu item, it appears in the command-line area
+ when the mouse is over that item, much like a standard Windows menu hint in
+ the status bar. (Except when Vim is in Command-line mode, when of course
+***************
+*** 999,1005 ****
+ pointer instead of the cursor.
+ In the terminal this is the last known
+ position, which is usually at the last click
+! or release (mouse movement is irrelevalt).
+
+ Example: >
+ :popup File
+--- 1017,1023 ----
+ pointer instead of the cursor.
+ In the terminal this is the last known
+ position, which is usually at the last click
+! or release (mouse movement is irrelevant).
+
+ Example: >
+ :popup File
+***************
+*** 1075,1078 ****
+ For the Win32 GUI the external commands are executed in a separate window.
+ See |gui-shell-win32|.
+
+! vim:tw=78:sw=4:ts=8:ft=help:norl:
+--- 1093,1096 ----
+ For the Win32 GUI the external commands are executed in a separate window.
+ See |gui-shell-win32|.
+
+! vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0486/runtime/doc/index.txt 2018-05-17 13:41:41.000000000 +0200
+--- runtime/doc/index.txt 2018-10-19 18:35:52.654453150 +0200
+***************
+*** 1583,1588 ****
+--- 1583,1591 ----
+ |:tjump| :tj[ump] like ":tselect", but jump directly when there
+ is only one match
+ |:tlast| :tl[ast] jump to last matching tag
++ |:tlmenu| :tlm[enu] add menu for Terminal-Job mode
++ |:tlnoremenu| :tln[oremenu] like ":noremenu" but for Terminal-Job mode
++ |:tlunmenu| :tlu[nmenu] remove menu for Terminal-Job mode
+ |:tmapclear| :tmapc[lear] remove all mappings for Terminal-Job mode
+ |:tmap| :tma[p] like ":map" but for Terminal-Job mode
+ |:tmenu| :tm[enu] define menu tooltip
+***************
+*** 1657,1660 ****
+ |:~| :~ repeat last ":substitute"
+
+
+! vim:tw=78:ts=8:ft=help:norl:
+--- 1660,1663 ----
+ |:~| :~ repeat last ":substitute"
+
+
+! vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0486/runtime/doc/terminal.txt 2018-06-19 16:59:31.333713053 +0200
+--- runtime/doc/terminal.txt 2018-10-19 18:35:52.658453120 +0200
+***************
+*** 114,119 ****
+--- 114,122 ----
+ tnoremap <Esc> <C-W>N
+ set notimeout ttimeout timeoutlen=100
+
++ You can also create menus similar to terminal mode mappings, but you have to
++ use |:tlmenu| instead of |:tmenu|.
++
+ < *options-in-terminal*
+ After opening the terminal window and setting 'buftype' to "terminal" the
+ TerminalOpen autocommand event is triggered. This makes it possible to set
+***************
+*** 228,233 ****
+--- 231,240 ----
+
+ If you want to use more options use the |term_start()|
+ function.
++ If you want to split the window vertically, use: >
++ :vertical terminal
++ < Or short: >
++ :vert ter
+
+ When the buffer associated with the terminal is forcibly unloaded or wiped out
+ the job is killed, similar to calling `job_stop(job, "kill")` .
+***************
+*** 523,531 ****
+
+ Functions ~
+
+! term_sendkeys() send keystrokes to a terminal (not subject to tmap)
+! term_wait() wait for screen to be updated
+! term_scrape() inspect terminal screen
+
+
+ ==============================================================================
+--- 530,538 ----
+
+ Functions ~
+
+! |term_sendkeys()| send keystrokes to a terminal (not subject to tmap)
+! |term_wait()| wait for screen to be updated
+! |term_scrape()| inspect terminal screen
+
+
+ ==============================================================================
+***************
+*** 552,558 ****
+ characters. This makes sure the dump is always this size. The function
+ RunVimInTerminal() takes care of this. Pass it the arguments for the Vim
+ command.
+! - Send any commands to Vim using term_sendkeys(). For example: >
+ call term_sendkeys(buf, ":echo &lines &columns\<CR>")
+ - Check that the screen is now in the expected state, using
+ VerifyScreenDump(). This expects the reference screen dump to be in the
+--- 559,565 ----
+ characters. This makes sure the dump is always this size. The function
+ RunVimInTerminal() takes care of this. Pass it the arguments for the Vim
+ command.
+! - Send any commands to Vim using |term_sendkeys()|. For example: >
+ call term_sendkeys(buf, ":echo &lines &columns\<CR>")
+ - Check that the screen is now in the expected state, using
+ VerifyScreenDump(). This expects the reference screen dump to be in the
+***************
+*** 580,592 ****
+ *terminal-screendump*
+
+ To create the screen dump, run Vim (or any other program) in a terminal and
+! make it show the desired state. Then use the term_dumpwrite() function to
+ create a screen dump file. For example: >
+ :call term_dumpwrite(77, "mysyntax.dump")
+
+ Here "77" is the buffer number of the terminal. Use `:ls!` to see it.
+
+! You can view the screen dump with term_dumpload(): >
+ :call term_dumpload("mysyntax.dump")
+
+ To verify that Vim still shows exactly the same screen, run Vim again with
+--- 587,599 ----
+ *terminal-screendump*
+
+ To create the screen dump, run Vim (or any other program) in a terminal and
+! make it show the desired state. Then use the |term_dumpwrite()| function to
+ create a screen dump file. For example: >
+ :call term_dumpwrite(77, "mysyntax.dump")
+
+ Here "77" is the buffer number of the terminal. Use `:ls!` to see it.
+
+! You can view the screen dump with |term_dumpload()|: >
+ :call term_dumpload("mysyntax.dump")
+
+ To verify that Vim still shows exactly the same screen, run Vim again with
+***************
+*** 594,600 ****
+ again, using a different file name: >
+ :call term_dumpwrite(88, "test.dump")
+
+! To assert that the files are exactly the same use assert_equalfile(): >
+ call assert_equalfile("mysyntax.dump", "test.dump")
+
+ If there are differences then v:errors will contain the error message.
+--- 601,607 ----
+ again, using a different file name: >
+ :call term_dumpwrite(88, "test.dump")
+
+! To assert that the files are exactly the same use |assert_equalfile()|: >
+ call assert_equalfile("mysyntax.dump", "test.dump")
+
+ If there are differences then v:errors will contain the error message.
+***************
+*** 603,610 ****
+ Comparing screen dumps ~
+ *terminal-diffscreendump*
+
+! assert_equalfile() does not make it easy to see what is different.
+! To spot the problem use term_dumpdiff(): >
+ call term_dumpdiff("mysyntax.dump", "test.dump")
+
+ This will open a window consisting of three parts:
+--- 610,617 ----
+ Comparing screen dumps ~
+ *terminal-diffscreendump*
+
+! |assert_equalfile()| does not make it easy to see what is different.
+! To spot the problem use |term_dumpdiff()|: >
+ call term_dumpdiff("mysyntax.dump", "test.dump")
+
+ This will open a window consisting of three parts:
+***************
+*** 613,619 ****
+ 3. The contents of the second dump
+
+ You can usually see what differs in the second part. Use the 'ruler' to
+! relate it to the position in the first or second dump.
+
+ Alternatively, press "s" to swap the first and second dump. Do this several
+ times so that you can spot the difference in the context of the text.
+--- 620,637 ----
+ 3. The contents of the second dump
+
+ You can usually see what differs in the second part. Use the 'ruler' to
+! relate it to the position in the first or second dump. Letters indicate the
+! kind of difference:
+! X different character
+! > cursor in first but not in second
+! < cursor in second but not in first
+! w character width differs (single vs double width)
+! f foreground color differs
+! b background color differs
+! a attribute differs (bold, underline, reverse, etc.)
+! ? character missing in both
+! + character missing in first
+! - character missing in second
+
+ Alternatively, press "s" to swap the first and second dump. Do this several
+ times so that you can spot the difference in the context of the text.
+***************
+*** 635,641 ****
+ Load the plugin with this command: >
+ packadd termdebug
+ < *:Termdebug*
+! To start debugging use `:Termdebug` or `:TermdebugCommand`` followed by the
+ command name, for example: >
+ :Termdebug vim
+
+--- 653,659 ----
+ Load the plugin with this command: >
+ packadd termdebug
+ < *:Termdebug*
+! To start debugging use `:Termdebug` or `:TermdebugCommand` followed by the
+ command name, for example: >
+ :Termdebug vim
+
+***************
+*** 900,906 ****
+ To change the width of the Vim window when debugging starts, and use a
+ vertical split: >
+ let g:termdebug_wide = 163
+! This will set &columns to 163 when :Termdebug is used. The value is restored
+ when quitting the debugger.
+ If g:termdebug_wide is set and &columns is already larger than
+ g:termdebug_wide then a vertical split will be used without changing &columns.
+--- 918,924 ----
+ To change the width of the Vim window when debugging starts, and use a
+ vertical split: >
+ let g:termdebug_wide = 163
+! This will set &columns to 163 when `:Termdebug` is used. The value is restored
+ when quitting the debugger.
+ If g:termdebug_wide is set and &columns is already larger than
+ g:termdebug_wide then a vertical split will be used without changing &columns.
+***************
+*** 909,912 ****
+
+
+
+! vim:tw=78:ts=8:ft=help:norl:
+--- 927,930 ----
+
+
+
+! vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0486/runtime/doc/usr_42.txt 2018-05-17 13:42:03.000000000 +0200
+--- runtime/doc/usr_42.txt 2018-10-19 18:35:52.658453120 +0200
+***************
+*** 150,156 ****
+ :menu! Insert and Command-line mode
+ :imenu Insert mode
+ :cmenu Command-line mode
+! :amenu All modes
+
+ To avoid that the commands of a menu item are being mapped, use the command
+ ":noremenu", ":nnoremenu", ":anoremenu", etc.
+--- 150,157 ----
+ :menu! Insert and Command-line mode
+ :imenu Insert mode
+ :cmenu Command-line mode
+! :tlmenu Terminal mode
+! :amenu All modes (except for Terminal mode)
+
+ To avoid that the commands of a menu item are being mapped, use the command
+ ":noremenu", ":nnoremenu", ":anoremenu", etc.
+***************
+*** 362,365 ****
+
+ Next chapter: |usr_43.txt| Using filetypes
+
+! Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
+--- 363,366 ----
+
+ Next chapter: |usr_43.txt| Using filetypes
+
+! Copyright: see |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0486/runtime/menu.vim 2018-07-23 05:09:05.593235641 +0200
+--- runtime/menu.vim 2018-10-19 22:31:52.955188961 +0200
+***************
+*** 160,165 ****
+--- 160,168 ----
+ cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y>
+ nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP
+ cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+
++ if exists(':tlmenu')
++ tlnoremenu &Edit.&Paste<Tab>"+gP <C-W>"+
++ endif
+ exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v']
+ exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['i']
+ nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p [p
+***************
+*** 356,361 ****
+--- 359,366 ----
+ let s:did_setup_color_schemes = 1
+
+ let n = globpath(&runtimepath, "colors/*.vim", 1, 1)
++ let n += globpath(&runtimepath, "pack/*/start/*/colors/*.vim", 1, 1)
++ let n += globpath(&runtimepath, "pack/*/opt/*/colors/*.vim", 1, 1)
+
+ " Ignore case for VMS and windows, sort on name
+ let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
+*** ../vim-8.1.0486/src/ex_cmdidxs.h 2017-09-18 22:06:03.000000000 +0200
+--- src/ex_cmdidxs.h 2018-10-19 18:35:52.658453120 +0200
+***************
+*** 25,36 ****
+ /* r */ 351,
+ /* s */ 370,
+ /* t */ 437,
+! /* u */ 477,
+! /* v */ 488,
+! /* w */ 506,
+! /* x */ 521,
+! /* y */ 530,
+! /* z */ 531
+ };
+
+ /*
+--- 25,36 ----
+ /* r */ 351,
+ /* s */ 370,
+ /* t */ 437,
+! /* u */ 480,
+! /* v */ 491,
+! /* w */ 509,
+! /* x */ 524,
+! /* y */ 533,
+! /* z */ 534
+ };
+
+ /*
+***************
+*** 60,66 ****
+ /* q */ { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* r */ { 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 18, 0, 0, 0, 0 },
+ /* s */ { 2, 6, 15, 0, 18, 22, 0, 24, 25, 0, 0, 28, 30, 34, 38, 40, 0, 48, 0, 49, 0, 61, 62, 0, 63, 0 },
+! /* t */ { 2, 0, 19, 0, 22, 24, 0, 25, 0, 26, 0, 27, 28, 31, 33, 34, 0, 35, 37, 0, 38, 0, 0, 0, 0, 0 },
+ /* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* v */ { 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 12, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0 },
+ /* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 12, 0, 13, 14, 0, 0, 0, 0 },
+--- 60,66 ----
+ /* q */ { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* r */ { 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 18, 0, 0, 0, 0 },
+ /* s */ { 2, 6, 15, 0, 18, 22, 0, 24, 25, 0, 0, 28, 30, 34, 38, 40, 0, 48, 0, 49, 0, 61, 62, 0, 63, 0 },
+! /* t */ { 2, 0, 19, 0, 22, 24, 0, 25, 0, 26, 0, 27, 31, 34, 36, 37, 0, 38, 40, 0, 41, 0, 0, 0, 0, 0 },
+ /* u */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ /* v */ { 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 12, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0 },
+ /* w */ { 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 8, 0, 9, 10, 0, 12, 0, 13, 14, 0, 0, 0, 0 },
+***************
+*** 69,72 ****
+ /* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ };
+
+! static const int command_count = 544;
+--- 69,72 ----
+ /* z */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ };
+
+! static const int command_count = 547;
+*** ../vim-8.1.0486/src/ex_cmds.h 2018-08-14 13:38:12.744559267 +0200
+--- src/ex_cmds.h 2018-10-19 18:35:52.658453120 +0200
+***************
+*** 20,28 ****
+ * 1. Add an entry in the table below. Keep it sorted on the shortest
+ * version of the command name that works. If it doesn't start with a
+ * lower case letter, add it at the end.
+! * 2. Add a "case: CMD_xxx" in the big switch in ex_docmd.c.
+! * 3. Add an entry in the index for Ex commands at ":help ex-cmd-index".
+! * 4. Add documentation in ../doc/xxx.txt. Add a tag for both the short and
+ * long name of the command.
+ */
+
+--- 20,29 ----
+ * 1. Add an entry in the table below. Keep it sorted on the shortest
+ * version of the command name that works. If it doesn't start with a
+ * lower case letter, add it at the end.
+! * 2. Run "make cmdidxs" to re-generate ex_cmdidxs.h.
+! * 3. Add a "case: CMD_xxx" in the big switch in ex_docmd.c.
+! * 4. Add an entry in the index for Ex commands at ":help ex-cmd-index".
+! * 5. Add documentation in ../doc/xxx.txt. Add a tag for both the short and
+ * long name of the command.
+ */
+
+***************
+*** 176,182 ****
+ BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+ ADDR_BUFFERS),
+ EX(CMD_behave, "behave", ex_behave,
+! NEEDARG|WORD1|TRLBAR|CMDWIN,
+ ADDR_LINES),
+ EX(CMD_belowright, "belowright", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM,
+--- 177,183 ----
+ BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+ ADDR_BUFFERS),
+ EX(CMD_behave, "behave", ex_behave,
+! BANG|NEEDARG|WORD1|TRLBAR|CMDWIN,
+ ADDR_LINES),
+ EX(CMD_belowright, "belowright", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM,
+***************
+*** 1498,1503 ****
+--- 1499,1513 ----
+ EX(CMD_tlast, "tlast", ex_tag,
+ BANG|TRLBAR,
+ ADDR_LINES),
++ EX(CMD_tlmenu, "tlmenu", ex_menu,
++ RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
++ ADDR_LINES),
++ EX(CMD_tlnoremenu, "tlnoremenu", ex_menu,
++ RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
++ ADDR_LINES),
++ EX(CMD_tlunmenu, "tlunmenu", ex_menu,
++ RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
++ ADDR_LINES),
+ EX(CMD_tmenu, "tmenu", ex_menu,
+ RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+ ADDR_LINES),
+*** ../vim-8.1.0486/src/ex_docmd.c 2018-10-02 16:23:55.323037143 +0200
+--- src/ex_docmd.c 2018-10-19 18:35:52.658453120 +0200
+***************
+*** 4283,4288 ****
+--- 4283,4289 ----
+ case CMD_omenu: case CMD_onoremenu: case CMD_ounmenu:
+ case CMD_imenu: case CMD_inoremenu: case CMD_iunmenu:
+ case CMD_cmenu: case CMD_cnoremenu: case CMD_cunmenu:
++ case CMD_tlmenu: case CMD_tlnoremenu: case CMD_tlunmenu:
+ case CMD_tmenu: case CMD_tunmenu:
+ case CMD_popup: case CMD_tearoff: case CMD_emenu:
+ return set_context_in_menu_cmd(xp, cmd, arg, forceit);
+*** ../vim-8.1.0486/src/menu.c 2018-09-10 21:04:09.872392623 +0200
+--- src/menu.c 2018-10-19 19:18:38.677792759 +0200
+***************
+*** 58,64 ****
+ static char_u *menu_translate_tab_and_shift(char_u *arg_start);
+
+ /* The character for each menu mode */
+! static char_u menu_mode_chars[] = {'n', 'v', 's', 'o', 'i', 'c', 't'};
+
+ static char_u e_notsubmenu[] = N_("E327: Part of menu-item path is not sub-menu");
+ static char_u e_othermode[] = N_("E328: Menu only exists in another mode");
+--- 58,64 ----
+ static char_u *menu_translate_tab_and_shift(char_u *arg_start);
+
+ /* The character for each menu mode */
+! static char *menu_mode_chars[] = {"n", "v", "s", "o", "i", "c", "tl", "t"};
+
+ static char_u e_notsubmenu[] = N_("E327: Part of menu-item path is not sub-menu");
+ static char_u e_othermode[] = N_("E328: Menu only exists in another mode");
+***************
+*** 1196,1202 ****
+ return;
+ for (i = 0; i < depth + 2; i++)
+ MSG_PUTS(" ");
+! msg_putchar(menu_mode_chars[bit]);
+ if (menu->noremap[bit] == REMAP_NONE)
+ msg_putchar('*');
+ else if (menu->noremap[bit] == REMAP_SCRIPT)
+--- 1196,1202 ----
+ return;
+ for (i = 0; i < depth + 2; i++)
+ MSG_PUTS(" ");
+! msg_puts((char_u*)menu_mode_chars[bit]);
+ if (menu->noremap[bit] == REMAP_NONE)
+ msg_putchar('*');
+ else if (menu->noremap[bit] == REMAP_SCRIPT)
+***************
+*** 1645,1650 ****
+--- 1645,1656 ----
+ modes = MENU_INSERT_MODE;
+ break;
+ case 't':
++ if (*cmd == 'l') /* tlmenu, tlunmenu, tlnoremenu */
++ {
++ modes = MENU_TERMINAL_MODE;
++ ++cmd;
++ break;
++ }
+ modes = MENU_TIP_MODE; /* tmenu */
+ break;
+ case 'c': /* cmenu */
+***************
+*** 1687,1698 ****
+ {
+ char_u *p;
+ int len = (int)STRLEN(name);
+
+! p = vim_strnsave(name, len + 1);
+ if (p != NULL)
+ {
+! mch_memmove(p + 6, p + 5, (size_t)(len - 4));
+! p[5] = menu_mode_chars[idx];
+ }
+ return p;
+ }
+--- 1693,1710 ----
+ {
+ char_u *p;
+ int len = (int)STRLEN(name);
++ char *mode_chars = menu_mode_chars[idx];
++ int mode_chars_len = (int)strlen(mode_chars);
++ int i;
+
+! p = vim_strnsave(name, len + mode_chars_len);
+ if (p != NULL)
+ {
+! mch_memmove(p + 5 + mode_chars_len, p + 5, (size_t)(len - 4));
+! for (i = 0; i < mode_chars_len; ++i)
+! {
+! p[5 + i] = menu_mode_chars[idx][i];
+! }
+ }
+ return p;
+ }
+***************
+*** 1712,1717 ****
+--- 1724,1733 ----
+ idx = MENU_INDEX_INSERT;
+ else if (state & CMDLINE)
+ idx = MENU_INDEX_CMDLINE;
++ #ifdef FEAT_TERMINAL
++ else if (term_use_loop())
++ idx = MENU_INDEX_TERMINAL;
++ #endif
+ else if (VIsual_active)
+ {
+ if (VIsual_select)
+***************
+*** 1872,1877 ****
+--- 1888,1899 ----
+ static int
+ get_menu_mode(void)
+ {
++ #ifdef FEAT_TERMINAL
++ if (term_use_loop())
++ {
++ return MENU_INDEX_TERMINAL;
++ }
++ #endif
+ if (VIsual_active)
+ {
+ if (VIsual_select)
+***************
+*** 1910,1932 ****
+ show_popupmenu(void)
+ {
+ vimmenu_T *menu;
+! int mode;
+
+! mode = get_menu_mode();
+! if (mode == MENU_INDEX_INVALID)
+ return;
+! mode = menu_mode_chars[mode];
+
+! {
+! char_u ename[2];
+!
+! ename[0] = mode;
+! ename[1] = NUL;
+! apply_autocmds(EVENT_MENUPOPUP, ename, NULL, FALSE, curbuf);
+! }
+
+ for (menu = root_menu; menu != NULL; menu = menu->next)
+! if (STRNCMP("PopUp", menu->name, 5) == 0 && menu->name[5] == mode)
+ break;
+
+ /* Only show a popup when it is defined and has entries */
+--- 1932,1951 ----
+ show_popupmenu(void)
+ {
+ vimmenu_T *menu;
+! int menu_mode;
+! char* mode;
+! int mode_len;
+
+! menu_mode = get_menu_mode();
+! if (menu_mode == MENU_INDEX_INVALID)
+ return;
+! mode = menu_mode_chars[menu_mode];
+! mode_len = (int)strlen(mode);
+
+! apply_autocmds(EVENT_MENUPOPUP, (char_u*)mode, NULL, FALSE, curbuf);
+
+ for (menu = root_menu; menu != NULL; menu = menu->next)
+! if (STRNCMP("PopUp", menu->name, 5) == 0 && STRNCMP(menu->name + 5, mode, mode_len) == 0)
+ break;
+
+ /* Only show a popup when it is defined and has entries */
+***************
+*** 2249,2330 ****
+ /*
+ * Execute "menu". Use by ":emenu" and the window toolbar.
+ * "eap" is NULL for the window toolbar.
+ */
+ void
+! execute_menu(exarg_T *eap, vimmenu_T *menu)
+ {
+! char_u *mode;
+! int idx = -1;
+
+! /* Use the Insert mode entry when returning to Insert mode. */
+! if (restart_edit
+ #ifdef FEAT_EVAL
+! && !current_sctx.sc_sid
+ #endif
+! )
+! {
+! mode = (char_u *)"Insert";
+! idx = MENU_INDEX_INSERT;
+! }
+! else if (VIsual_active)
+! {
+! mode = (char_u *)"Visual";
+! idx = MENU_INDEX_VISUAL;
+! }
+! else if (eap != NULL && eap->addr_count)
+! {
+! pos_T tpos;
+!
+! mode = (char_u *)"Visual";
+! idx = MENU_INDEX_VISUAL;
+!
+! /* GEDDES: This is not perfect - but it is a
+! * quick way of detecting whether we are doing this from a
+! * selection - see if the range matches up with the visual
+! * select start and end. */
+! if ((curbuf->b_visual.vi_start.lnum == eap->line1)
+! && (curbuf->b_visual.vi_end.lnum) == eap->line2)
+! {
+! /* Set it up for visual mode - equivalent to gv. */
+! VIsual_mode = curbuf->b_visual.vi_mode;
+! tpos = curbuf->b_visual.vi_end;
+! curwin->w_cursor = curbuf->b_visual.vi_start;
+! curwin->w_curswant = curbuf->b_visual.vi_curswant;
+ }
+! else
+ {
+! /* Set it up for line-wise visual mode */
+! VIsual_mode = 'V';
+! curwin->w_cursor.lnum = eap->line1;
+! curwin->w_cursor.col = 1;
+! tpos.lnum = eap->line2;
+! tpos.col = MAXCOL;
+! #ifdef FEAT_VIRTUALEDIT
+! tpos.coladd = 0;
+ #endif
+ }
+
+! /* Activate visual mode */
+! VIsual_active = TRUE;
+! VIsual_reselect = TRUE;
+! check_cursor();
+! VIsual = curwin->w_cursor;
+! curwin->w_cursor = tpos;
+
+! check_cursor();
+
+! /* Adjust the cursor to make sure it is in the correct pos
+! * for exclusive mode */
+! if (*p_sel == 'e' && gchar_cursor() != NUL)
+! ++curwin->w_cursor.col;
+ }
+
+ /* For the WinBar menu always use the Normal mode menu. */
+ if (idx == -1 || eap == NULL)
+- {
+- mode = (char_u *)"Normal";
+ idx = MENU_INDEX_NORMAL;
+- }
+
+ if (idx != MENU_INDEX_INVALID && menu->strings[idx] != NULL)
+ {
+--- 2268,2353 ----
+ /*
+ * Execute "menu". Use by ":emenu" and the window toolbar.
+ * "eap" is NULL for the window toolbar.
++ * "mode_idx" specifies a MENU_INDEX_ value, use -1 to depend on the current
++ * state.
+ */
+ void
+! execute_menu(exarg_T *eap, vimmenu_T *menu, int mode_idx)
+ {
+! int idx = mode_idx;
+
+! if (idx < 0)
+! {
+! /* Use the Insert mode entry when returning to Insert mode. */
+! if (restart_edit
+ #ifdef FEAT_EVAL
+! && !current_sctx.sc_sid
+ #endif
+! )
+! {
+! idx = MENU_INDEX_INSERT;
+ }
+! #ifdef FEAT_TERMINAL
+! else if (term_use_loop())
+ {
+! idx = MENU_INDEX_TERMINAL;
+! }
+ #endif
++ else if (VIsual_active)
++ {
++ idx = MENU_INDEX_VISUAL;
+ }
++ else if (eap != NULL && eap->addr_count)
++ {
++ pos_T tpos;
+
+! idx = MENU_INDEX_VISUAL;
+
+! /* GEDDES: This is not perfect - but it is a
+! * quick way of detecting whether we are doing this from a
+! * selection - see if the range matches up with the visual
+! * select start and end. */
+! if ((curbuf->b_visual.vi_start.lnum == eap->line1)
+! && (curbuf->b_visual.vi_end.lnum) == eap->line2)
+! {
+! /* Set it up for visual mode - equivalent to gv. */
+! VIsual_mode = curbuf->b_visual.vi_mode;
+! tpos = curbuf->b_visual.vi_end;
+! curwin->w_cursor = curbuf->b_visual.vi_start;
+! curwin->w_curswant = curbuf->b_visual.vi_curswant;
+! }
+! else
+! {
+! /* Set it up for line-wise visual mode */
+! VIsual_mode = 'V';
+! curwin->w_cursor.lnum = eap->line1;
+! curwin->w_cursor.col = 1;
+! tpos.lnum = eap->line2;
+! tpos.col = MAXCOL;
+! #ifdef FEAT_VIRTUALEDIT
+! tpos.coladd = 0;
+! #endif
+! }
+
+! /* Activate visual mode */
+! VIsual_active = TRUE;
+! VIsual_reselect = TRUE;
+! check_cursor();
+! VIsual = curwin->w_cursor;
+! curwin->w_cursor = tpos;
+!
+! check_cursor();
+!
+! /* Adjust the cursor to make sure it is in the correct pos
+! * for exclusive mode */
+! if (*p_sel == 'e' && gchar_cursor() != NUL)
+! ++curwin->w_cursor.col;
+! }
+ }
+
+ /* For the WinBar menu always use the Normal mode menu. */
+ if (idx == -1 || eap == NULL)
+ idx = MENU_INDEX_NORMAL;
+
+ if (idx != MENU_INDEX_INVALID && menu->strings[idx] != NULL)
+ {
+***************
+*** 2351,2357 ****
+--- 2374,2408 ----
+ TRUE, menu->silent[idx]);
+ }
+ else if (eap != NULL)
++ {
++ char_u *mode;
++
++ switch (idx)
++ {
++ case MENU_INDEX_VISUAL:
++ mode = (char_u *)"Visual";
++ break;
++ case MENU_INDEX_SELECT:
++ mode = (char_u *)"Select";
++ break;
++ case MENU_INDEX_OP_PENDING:
++ mode = (char_u *)"Op-pending";
++ break;
++ case MENU_INDEX_TERMINAL:
++ mode = (char_u *)"Terminal";
++ break;
++ case MENU_INDEX_INSERT:
++ mode = (char_u *)"Insert";
++ break;
++ case MENU_INDEX_CMDLINE:
++ mode = (char_u *)"Cmdline";
++ break;
++ // case MENU_INDEX_TIP: cannot happen
++ default:
++ mode = (char_u *)"Normal";
++ }
+ EMSG2(_("E335: Menu not defined for %s mode"), mode);
++ }
+ }
+
+ /*
+***************
+*** 2364,2372 ****
+ vimmenu_T *menu;
+ char_u *name;
+ char_u *saved_name;
+ char_u *p;
+
+! saved_name = vim_strsave(eap->arg);
+ if (saved_name == NULL)
+ return;
+
+--- 2415,2443 ----
+ vimmenu_T *menu;
+ char_u *name;
+ char_u *saved_name;
++ char_u *arg = eap->arg;
+ char_u *p;
++ int gave_emsg = FALSE;
++ int mode_idx = -1;
++
++ if (arg[0] && VIM_ISWHITE(arg[1]))
++ {
++ switch (arg[0])
++ {
++ case 'n': mode_idx = MENU_INDEX_NORMAL; break;
++ case 'v': mode_idx = MENU_INDEX_VISUAL; break;
++ case 's': mode_idx = MENU_INDEX_SELECT; break;
++ case 'o': mode_idx = MENU_INDEX_OP_PENDING; break;
++ case 't': mode_idx = MENU_INDEX_TERMINAL; break;
++ case 'i': mode_idx = MENU_INDEX_INSERT; break;
++ case 'c': mode_idx = MENU_INDEX_CMDLINE; break;
++ default: EMSG2(_(e_invarg2), arg);
++ return;
++ }
++ arg = skipwhite(arg + 2);
++ }
+
+! saved_name = vim_strsave(arg);
+ if (saved_name == NULL)
+ return;
+
+***************
+*** 2384,2389 ****
+--- 2455,2461 ----
+ if (*p == NUL && menu->children != NULL)
+ {
+ EMSG(_("E333: Menu path must lead to a menu item"));
++ gave_emsg = TRUE;
+ menu = NULL;
+ }
+ else if (*p != NUL && menu->children == NULL)
+***************
+*** 2403,2414 ****
+ vim_free(saved_name);
+ if (menu == NULL)
+ {
+! EMSG2(_("E334: Menu not found: %s"), eap->arg);
+ return;
+ }
+
+! /* Found the menu, so execute. */
+! execute_menu(eap, menu);
+ }
+
+ /*
+--- 2475,2487 ----
+ vim_free(saved_name);
+ if (menu == NULL)
+ {
+! if (!gave_emsg)
+! EMSG2(_("E334: Menu not found: %s"), arg);
+ return;
+ }
+
+! // Found the menu, so execute.
+! execute_menu(eap, menu, mode_idx);
+ }
+
+ /*
+***************
+*** 2445,2451 ****
+ check_cursor();
+ }
+
+! execute_menu(NULL, item->wb_menu);
+
+ if (save_curwin != NULL)
+ {
+--- 2518,2524 ----
+ check_cursor();
+ }
+
+! execute_menu(NULL, item->wb_menu, -1);
+
+ if (save_curwin != NULL)
+ {
+*** ../vim-8.1.0486/src/proto/menu.pro 2018-05-17 13:52:44.000000000 +0200
+--- src/proto/menu.pro 2018-10-19 19:18:21.773946949 +0200
+***************
+*** 19,25 ****
+ void gui_update_menus(int modes);
+ int gui_is_menu_shortcut(int key);
+ void gui_mch_toggle_tearoffs(int enable);
+! void execute_menu(exarg_T *eap, vimmenu_T *menu);
+ void ex_emenu(exarg_T *eap);
+ void winbar_click(win_T *wp, int col);
+ vimmenu_T *gui_find_menu(char_u *path_name);
+--- 19,25 ----
+ void gui_update_menus(int modes);
+ int gui_is_menu_shortcut(int key);
+ void gui_mch_toggle_tearoffs(int enable);
+! void execute_menu(exarg_T *eap, vimmenu_T *menu, int mode_idx);
+ void ex_emenu(exarg_T *eap);
+ void winbar_click(win_T *wp, int col);
+ vimmenu_T *gui_find_menu(char_u *path_name);
+*** ../vim-8.1.0486/src/popupmnu.c 2018-09-09 15:27:54.808344790 +0200
+--- src/popupmnu.c 2018-10-19 19:06:36.212711840 +0200
+***************
+*** 1176,1182 ****
+ if ((mp->modes & mp->enabled & mode) && idx++ == pum_selected)
+ {
+ vim_memset(&ea, 0, sizeof(ea));
+! execute_menu(&ea, mp);
+ break;
+ }
+ }
+--- 1176,1182 ----
+ if ((mp->modes & mp->enabled & mode) && idx++ == pum_selected)
+ {
+ vim_memset(&ea, 0, sizeof(ea));
+! execute_menu(&ea, mp, -1);
+ break;
+ }
+ }
+*** ../vim-8.1.0486/src/structs.h 2018-10-14 22:38:06.161665231 +0200
+--- src/structs.h 2018-10-19 18:35:52.662453090 +0200
+***************
+*** 3101,3108 ****
+ #define MENU_INDEX_OP_PENDING 3
+ #define MENU_INDEX_INSERT 4
+ #define MENU_INDEX_CMDLINE 5
+! #define MENU_INDEX_TIP 6
+! #define MENU_MODES 7
+
+ /* Menu modes */
+ #define MENU_NORMAL_MODE (1 << MENU_INDEX_NORMAL)
+--- 3101,3109 ----
+ #define MENU_INDEX_OP_PENDING 3
+ #define MENU_INDEX_INSERT 4
+ #define MENU_INDEX_CMDLINE 5
+! #define MENU_INDEX_TERMINAL 6
+! #define MENU_INDEX_TIP 7
+! #define MENU_MODES 8
+
+ /* Menu modes */
+ #define MENU_NORMAL_MODE (1 << MENU_INDEX_NORMAL)
+***************
+*** 3111,3116 ****
+--- 3112,3118 ----
+ #define MENU_OP_PENDING_MODE (1 << MENU_INDEX_OP_PENDING)
+ #define MENU_INSERT_MODE (1 << MENU_INDEX_INSERT)
+ #define MENU_CMDLINE_MODE (1 << MENU_INDEX_CMDLINE)
++ #define MENU_TERMINAL_MODE (1 << MENU_INDEX_TERMINAL)
+ #define MENU_TIP_MODE (1 << MENU_INDEX_TIP)
+ #define MENU_ALL_MODES ((1 << MENU_INDEX_TIP) - 1)
+ /*note MENU_INDEX_TIP is not a 'real' mode*/
+*** ../vim-8.1.0486/src/testdir/test_menu.vim 2017-03-18 20:09:29.000000000 +0100
+--- src/testdir/test_menu.vim 2018-10-19 22:19:19.563500587 +0200
+***************
+*** 30,32 ****
+--- 30,66 ----
+
+ source $VIMRUNTIME/delmenu.vim
+ endfunc
++
++ func Test_menu_commands()
++ nmenu 2 Test.FooBar :let g:did_menu = 'normal'<CR>
++ vmenu 2 Test.FooBar :let g:did_menu = 'visual'<CR>
++ smenu 2 Test.FooBar :let g:did_menu = 'select'<CR>
++ omenu 2 Test.FooBar :let g:did_menu = 'op-pending'<CR>
++ tlmenu 2 Test.FooBar :let g:did_menu = 'terminal'<CR>
++ imenu 2 Test.FooBar :let g:did_menu = 'insert'<CR>
++ cmenu 2 Test.FooBar :let g:did_menu = 'cmdline'<CR>
++ emenu n Test.FooBar
++ call assert_equal('normal', g:did_menu)
++ emenu v Test.FooBar
++ call assert_equal('visual', g:did_menu)
++ emenu s Test.FooBar
++ call assert_equal('select', g:did_menu)
++ emenu o Test.FooBar
++ call assert_equal('op-pending', g:did_menu)
++ emenu t Test.FooBar
++ call assert_equal('terminal', g:did_menu)
++ emenu i Test.FooBar
++ call assert_equal('insert', g:did_menu)
++ emenu c Test.FooBar
++ call assert_equal('cmdline', g:did_menu)
++
++ aunmenu Test.FooBar
++ tlunmenu Test.FooBar
++ call assert_fails('emenu n Test.FooBar', 'E334:')
++
++ nmenu 2 Test.FooBar.Child :let g:did_menu = 'foobar'<CR>
++ call assert_fails('emenu n Test.FooBar', 'E333:')
++ nunmenu Test.FooBar.Child
++
++ unlet g:did_menu
++ endfun
+*** ../vim-8.1.0486/src/version.c 2018-10-19 17:35:58.081200733 +0200
+--- src/version.c 2018-10-19 18:36:44.394062760 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 487,
+ /**/
+
+--
+"Women marry men hoping they will change. Men marry women hoping
+they will not. So each is inevitably disappointed."
+ - Einstein
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0488 b/data/vim/patches/8.1.0488
new file mode 100644
index 000000000..712c2a7fe
--- /dev/null
+++ b/data/vim/patches/8.1.0488
@@ -0,0 +1,662 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0488
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0488
+Problem: Using freed memory in quickfix code. (Dominique Pelle)
+Solution: Add the quickfix_busy() flag to postpone deleting quickfix lists
+ until it is safe. (Yegappan Lakshmanan, closes #3538)
+Files: src/quickfix.c, src/proto/quickfix.pro, src/misc2.c,
+ src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0487/src/quickfix.c 2018-10-11 17:39:09.169107531 +0200
+--- src/quickfix.c 2018-10-20 20:53:18.999667086 +0200
+***************
+*** 130,135 ****
+--- 130,148 ----
+ int conthere; // %> used
+ };
+
++ // List of location lists to be deleted.
++ // Used to delay the deletion of locations lists by autocmds.
++ typedef struct qf_delq_S
++ {
++ struct qf_delq_S *next;
++ qf_info_T *qi;
++ } qf_delq_T;
++ static qf_delq_T *qf_delq_head = NULL;
++
++ // Counter to prevent autocmds from freeing up location lists when they are
++ // still being used.
++ static int quickfix_busy = 0;
++
+ static efm_T *fmt_start = NULL; // cached across qf_parse_line() calls
+
+ static void qf_new_list(qf_info_T *qi, char_u *qf_title);
+***************
+*** 1838,1843 ****
+--- 1851,1873 ----
+ }
+
+ /*
++ * Queue location list stack delete request.
++ */
++ static void
++ locstack_queue_delreq(qf_info_T *qi)
++ {
++ qf_delq_T *q;
++
++ q = (qf_delq_T *)alloc((unsigned)sizeof(qf_delq_T));
++ if (q != NULL)
++ {
++ q->qi = qi;
++ q->next = qf_delq_head;
++ qf_delq_head = q;
++ }
++ }
++
++ /*
+ * Free a location list stack
+ */
+ static void
+***************
+*** 1854,1863 ****
+ qi->qf_refcount--;
+ if (qi->qf_refcount < 1)
+ {
+! // No references to this location list
+! for (i = 0; i < qi->qf_listcount; ++i)
+! qf_free(&qi->qf_lists[i]);
+! vim_free(qi);
+ }
+ }
+
+--- 1884,1900 ----
+ qi->qf_refcount--;
+ if (qi->qf_refcount < 1)
+ {
+! // No references to this location list.
+! // If the location list is still in use, then queue the delete request
+! // to be processed later.
+! if (quickfix_busy > 0)
+! locstack_queue_delreq(qi);
+! else
+! {
+! for (i = 0; i < qi->qf_listcount; ++i)
+! qf_free(&qi->qf_lists[i]);
+! vim_free(qi);
+! }
+ }
+ }
+
+***************
+*** 1883,1888 ****
+--- 1920,1979 ----
+ }
+
+ /*
++ * Delay freeing of location list stacks when the quickfix code is running.
++ * Used to avoid problems with autocmds freeing location list stacks when the
++ * quickfix code is still referencing the stack.
++ * Must always call decr_quickfix_busy() exactly once after this.
++ */
++ static void
++ incr_quickfix_busy(void)
++ {
++ quickfix_busy++;
++ }
++
++ /*
++ * Safe to free location list stacks. Process any delayed delete requests.
++ */
++ static void
++ decr_quickfix_busy(void)
++ {
++ if (--quickfix_busy == 0)
++ {
++ // No longer referencing the location lists. Process all the pending
++ // delete requests.
++ while (qf_delq_head != NULL)
++ {
++ qf_delq_T *q = qf_delq_head;
++
++ qf_delq_head = q->next;
++ ll_free_all(&q->qi);
++ vim_free(q);
++ }
++ }
++ #ifdef ABORT_ON_INTERNAL_ERROR
++ if (quickfix_busy < 0)
++ {
++ EMSG("quickfix_busy has become negative");
++ abort();
++ }
++ #endif
++ }
++
++ #if defined(EXITFREE) || defined(PROTO)
++ void
++ check_quickfix_busy(void)
++ {
++ if (quickfix_busy != 0)
++ {
++ EMSGN("quickfix_busy not zero on exit: %ld", (long)quickfix_busy);
++ # ifdef ABORT_ON_INTERNAL_ERROR
++ abort();
++ # endif
++ }
++ }
++ #endif
++
++ /*
+ * Add an entry to the end of the list of errors.
+ * Returns OK or FAIL.
+ */
+***************
+*** 2387,2393 ****
+ * Returns TRUE if a quickfix/location list with the given identifier exists.
+ */
+ static int
+! qflist_valid (win_T *wp, int_u qf_id)
+ {
+ qf_info_T *qi = &ql_info;
+ int i;
+--- 2478,2484 ----
+ * Returns TRUE if a quickfix/location list with the given identifier exists.
+ */
+ static int
+! qflist_valid(win_T *wp, int_u qf_id)
+ {
+ qf_info_T *qi = &ql_info;
+ int i;
+***************
+*** 3939,3944 ****
+--- 4030,4036 ----
+ qf_list_T *qfl;
+ int height;
+ int status = FAIL;
++ int lnum;
+
+ if (is_loclist_cmd(eap->cmdidx))
+ {
+***************
+*** 3950,3955 ****
+--- 4042,4049 ----
+ }
+ }
+
++ incr_quickfix_busy();
++
+ if (eap->addr_count != 0)
+ height = eap->line2;
+ else
+***************
+*** 3966,3980 ****
+ cmdmod.split & WSP_VERT);
+ if (status == FAIL)
+ if (qf_open_new_cwindow(qi, height) == FAIL)
+ return;
+
+ qfl = &qi->qf_lists[qi->qf_curlist];
+ qf_set_title_var(qfl);
+
+ // Fill the buffer with the quickfix list.
+ qf_fill_buffer(qi, curbuf, NULL);
+
+! curwin->w_cursor.lnum = qfl->qf_index;
+ curwin->w_cursor.col = 0;
+ check_cursor();
+ update_topline(); // scroll to show the line
+--- 4060,4082 ----
+ cmdmod.split & WSP_VERT);
+ if (status == FAIL)
+ if (qf_open_new_cwindow(qi, height) == FAIL)
++ {
++ decr_quickfix_busy();
+ return;
++ }
+
+ qfl = &qi->qf_lists[qi->qf_curlist];
+ qf_set_title_var(qfl);
++ // Save the current index here, as updating the quickfix buffer may free
++ // the quickfix list
++ lnum = qfl->qf_index;
+
+ // Fill the buffer with the quickfix list.
+ qf_fill_buffer(qi, curbuf, NULL);
+
+! decr_quickfix_busy();
+!
+! curwin->w_cursor.lnum = lnum;
+ curwin->w_cursor.col = 0;
+ check_cursor();
+ update_topline(); // scroll to show the line
+***************
+*** 4592,4597 ****
+--- 4694,4701 ----
+ (void)char_avail();
+ #endif
+
++ incr_quickfix_busy();
++
+ res = qf_init(wp, fname, (eap->cmdidx != CMD_make
+ && eap->cmdidx != CMD_lmake) ? p_gefm : p_efm,
+ (eap->cmdidx != CMD_grepadd
+***************
+*** 4617,4622 ****
+--- 4721,4727 ----
+ qf_jump_first(qi, save_qfid, FALSE);
+
+ cleanup:
++ decr_quickfix_busy();
+ mch_remove(fname);
+ vim_free(fname);
+ vim_free(cmd);
+***************
+*** 4927,4932 ****
+--- 5032,5039 ----
+ if (is_loclist_cmd(eap->cmdidx))
+ wp = curwin;
+
++ incr_quickfix_busy();
++
+ // This function is used by the :cfile, :cgetfile and :caddfile
+ // commands.
+ // :cfile always creates a new quickfix list and jumps to the
+***************
+*** 4942,4948 ****
+--- 5049,5058 ----
+ {
+ qi = GET_LOC_LIST(wp);
+ if (qi == NULL)
++ {
++ decr_quickfix_busy();
+ return;
++ }
+ }
+ if (res >= 0)
+ qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+***************
+*** 4956,4961 ****
+--- 5066,5073 ----
+ && qflist_valid(wp, save_qfid))
+ // display the first error
+ qf_jump_first(qi, save_qfid, eap->forceit);
++
++ decr_quickfix_busy();
+ }
+
+ /*
+***************
+*** 5304,5309 ****
+--- 5416,5423 ----
+ // ":lcd %:p:h" changes the meaning of short path names.
+ mch_dirname(dirname_start, MAXPATHL);
+
++ incr_quickfix_busy();
++
+ // Remember the current quickfix list identifier, so that we can check for
+ // autocommands changing the current quickfix list.
+ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+***************
+*** 5339,5344 ****
+--- 5453,5459 ----
+ if (!vgr_qflist_valid(wp, qi, save_qfid, qf_cmdtitle(*eap->cmdlinep)))
+ {
+ FreeWild(fcount, fnames);
++ decr_quickfix_busy();
+ goto theend;
+ }
+ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
+***************
+*** 5434,5444 ****
+ curbuf->b_fname, TRUE, curbuf);
+ // The QuickFixCmdPost autocmd may free the quickfix list. Check the list
+ // is still valid.
+! if (!qflist_valid(wp, save_qfid))
+! goto theend;
+!
+! if (qf_restore_list(qi, save_qfid) == FAIL)
+ goto theend;
+
+ // Jump to first match.
+ if (!qf_list_empty(qi, qi->qf_curlist))
+--- 5549,5560 ----
+ curbuf->b_fname, TRUE, curbuf);
+ // The QuickFixCmdPost autocmd may free the quickfix list. Check the list
+ // is still valid.
+! if (!qflist_valid(wp, save_qfid)
+! || qf_restore_list(qi, save_qfid) == FAIL)
+! {
+! decr_quickfix_busy();
+ goto theend;
++ }
+
+ // Jump to first match.
+ if (!qf_list_empty(qi, qi->qf_curlist))
+***************
+*** 5450,5455 ****
+--- 5566,5573 ----
+ else
+ EMSG2(_(e_nomatch2), s);
+
++ decr_quickfix_busy();
++
+ // If we loaded a dummy buffer into the current window, the autocommands
+ // may have messed up things, need to redraw and recompute folds.
+ if (redraw_for_dummy)
+***************
+*** 6516,6523 ****
+ {
+ // Free the entire quickfix or location list stack
+ qf_free_stack(wp, qi);
+ }
+! else if (what != NULL)
+ retval = qf_set_properties(qi, what, action, title);
+ else
+ {
+--- 6634,6645 ----
+ {
+ // Free the entire quickfix or location list stack
+ qf_free_stack(wp, qi);
++ return OK;
+ }
+!
+! incr_quickfix_busy();
+!
+! if (what != NULL)
+ retval = qf_set_properties(qi, what, action, title);
+ else
+ {
+***************
+*** 6526,6531 ****
+--- 6648,6655 ----
+ qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+ }
+
++ decr_quickfix_busy();
++
+ return retval;
+ }
+
+***************
+*** 6663,6673 ****
+--- 6787,6804 ----
+ qf_title = IObuff;
+ }
+
++ incr_quickfix_busy();
++
+ res = qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm,
+ (eap->cmdidx != CMD_caddbuffer
+ && eap->cmdidx != CMD_laddbuffer),
+ eap->line1, eap->line2,
+ qf_title, NULL);
++ if (qf_stack_empty(qi))
++ {
++ decr_quickfix_busy();
++ return;
++ }
+ if (res >= 0)
+ qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+
+***************
+*** 6692,6697 ****
+--- 6823,6830 ----
+ && qflist_valid(wp, save_qfid))
+ // display the first error
+ qf_jump_first(qi, save_qfid, eap->forceit);
++
++ decr_quickfix_busy();
+ }
+ }
+ }
+***************
+*** 6746,6756 ****
+--- 6879,6895 ----
+ if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL)
+ || (tv->v_type == VAR_LIST && tv->vval.v_list != NULL))
+ {
++ incr_quickfix_busy();
+ res = qf_init_ext(qi, qi->qf_curlist, NULL, NULL, tv, p_efm,
+ (eap->cmdidx != CMD_caddexpr
+ && eap->cmdidx != CMD_laddexpr),
+ (linenr_T)0, (linenr_T)0,
+ qf_cmdtitle(*eap->cmdlinep), NULL);
++ if (qf_stack_empty(qi))
++ {
++ decr_quickfix_busy();
++ goto cleanup;
++ }
+ if (res >= 0)
+ qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
+
+***************
+*** 6768,6776 ****
+--- 6907,6917 ----
+ && qflist_valid(wp, save_qfid))
+ // display the first error
+ qf_jump_first(qi, save_qfid, eap->forceit);
++ decr_quickfix_busy();
+ }
+ else
+ EMSG(_("E777: String or List expected"));
++ cleanup:
+ free_tv(tv);
+ }
+ }
+***************
+*** 6958,6964 ****
+ convert_setup(&vc, (char_u *)"utf-8", p_enc);
+ #endif
+
+-
+ // Go through all the directories in 'runtimepath'
+ p = p_rtp;
+ while (*p != NUL && !got_int)
+--- 7099,7104 ----
+***************
+*** 7020,7025 ****
+--- 7160,7167 ----
+ return;
+ }
+
++ incr_quickfix_busy();
++
+ #ifdef FEAT_MULTI_LANG
+ // Check for a specified language
+ lang = check_help_lang(eap->arg);
+***************
+*** 7056,7063 ****
+--- 7198,7208 ----
+ apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ curbuf->b_fname, TRUE, curbuf);
+ if (!new_qi && IS_LL_STACK(qi) && qf_find_buf(qi) == NULL)
++ {
+ // autocommands made "qi" invalid
++ decr_quickfix_busy();
+ return;
++ }
+ }
+
+ // Jump to first match.
+***************
+*** 7066,7071 ****
+--- 7211,7218 ----
+ else
+ EMSG2(_(e_nomatch2), eap->arg);
+
++ decr_quickfix_busy();
++
+ if (eap->cmdidx == CMD_lhelpgrep)
+ {
+ // If the help window is not opened or if it already points to the
+*** ../vim-8.1.0487/src/proto/quickfix.pro 2018-09-25 22:08:10.933806882 +0200
+--- src/proto/quickfix.pro 2018-10-20 20:36:34.383299437 +0200
+***************
+*** 1,6 ****
+--- 1,7 ----
+ /* quickfix.c */
+ int qf_init(win_T *wp, char_u *efile, char_u *errorformat, int newlist, char_u *qf_title, char_u *enc);
+ void qf_free_all(win_T *wp);
++ void check_quickfix_busy(void);
+ void copy_loclist_stack(win_T *from, win_T *to);
+ void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit);
+ void qf_list(exarg_T *eap);
+*** ../vim-8.1.0487/src/misc2.c 2018-10-07 21:36:07.389878130 +0200
+--- src/misc2.c 2018-10-20 20:41:53.263021777 +0200
+***************
+*** 1231,1248 ****
+ buf = firstbuf;
+ }
+
+! #ifdef FEAT_ARABIC
+ free_cmdline_buf();
+! #endif
+
+ /* Clear registers. */
+ clear_registers();
+ ResetRedobuff();
+ ResetRedobuff();
+
+! #if defined(FEAT_CLIENTSERVER) && defined(FEAT_X11)
+ vim_free(serverDelayedStartName);
+! #endif
+
+ /* highlight info */
+ free_highlight();
+--- 1231,1248 ----
+ buf = firstbuf;
+ }
+
+! # ifdef FEAT_ARABIC
+ free_cmdline_buf();
+! # endif
+
+ /* Clear registers. */
+ clear_registers();
+ ResetRedobuff();
+ ResetRedobuff();
+
+! # if defined(FEAT_CLIENTSERVER) && defined(FEAT_X11)
+ vim_free(serverDelayedStartName);
+! # endif
+
+ /* highlight info */
+ free_highlight();
+***************
+*** 1265,1273 ****
+ # ifdef FEAT_JOB_CHANNEL
+ channel_free_all();
+ # endif
+! #ifdef FEAT_TIMERS
+ timer_free_all();
+! #endif
+ # ifdef FEAT_EVAL
+ /* must be after channel_free_all() with unrefs partials */
+ eval_clear();
+--- 1265,1273 ----
+ # ifdef FEAT_JOB_CHANNEL
+ channel_free_all();
+ # endif
+! # ifdef FEAT_TIMERS
+ timer_free_all();
+! # endif
+ # ifdef FEAT_EVAL
+ /* must be after channel_free_all() with unrefs partials */
+ eval_clear();
+***************
+*** 1282,1297 ****
+ /* screenlines (can't display anything now!) */
+ free_screenlines();
+
+! #if defined(USE_XSMP)
+ xsmp_close();
+! #endif
+! #ifdef FEAT_GUI_GTK
+ gui_mch_free_all();
+! #endif
+ clear_hl_tables();
+
+ vim_free(IObuff);
+ vim_free(NameBuff);
+ }
+ #endif
+
+--- 1282,1300 ----
+ /* screenlines (can't display anything now!) */
+ free_screenlines();
+
+! # if defined(USE_XSMP)
+ xsmp_close();
+! # endif
+! # ifdef FEAT_GUI_GTK
+ gui_mch_free_all();
+! # endif
+ clear_hl_tables();
+
+ vim_free(IObuff);
+ vim_free(NameBuff);
++ # ifdef FEAT_QUICKFIX
++ check_quickfix_busy();
++ # endif
+ }
+ #endif
+
+*** ../vim-8.1.0487/src/testdir/test_quickfix.vim 2018-10-11 17:39:09.173107491 +0200
+--- src/testdir/test_quickfix.vim 2018-10-20 20:25:50.775968747 +0200
+***************
+*** 3220,3226 ****
+--- 3220,3247 ----
+ augroup QF_Test
+ au!
+ augroup END
++
+ enew | only
++ augroup QF_Test
++ au!
++ au BufNew * call setloclist(0, [], 'f')
++ augroup END
++ lexpr 'x:1:x'
++ augroup QF_Test
++ au!
++ augroup END
++
++ enew | only
++ lexpr ''
++ lopen
++ augroup QF_Test
++ au!
++ au FileType * call setloclist(0, [], 'f')
++ augroup END
++ lexpr ''
++ augroup QF_Test
++ au!
++ augroup END
+ endfunc
+
+ " The following test used to crash Vim
+*** ../vim-8.1.0487/src/version.c 2018-10-19 22:35:04.889189955 +0200
+--- src/version.c 2018-10-20 20:27:51.427127219 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 488,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+243. You unsuccessfully try to download a pizza from www.dominos.com.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0489 b/data/vim/patches/8.1.0489
new file mode 100644
index 000000000..2f53bb9bd
--- /dev/null
+++ b/data/vim/patches/8.1.0489
@@ -0,0 +1,198 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0489
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0489
+Problem: Crash when autocmd clears vimpgrep location list.
+Solution: Return from qf_jump_edit_buffer() early. (Yegappan Lakshmanan)
+Files: src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0488/src/quickfix.c 2018-10-20 20:53:58.143284832 +0200
+--- src/quickfix.c 2018-10-21 18:43:52.324236213 +0200
+***************
+*** 2985,2990 ****
+--- 2985,2992 ----
+ {
+ qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
+ int retval = OK;
++ int old_qf_curlist = qi->qf_curlist;
++ int save_qfid = qfl->qf_id;
+
+ if (qf_ptr->qf_type == 1)
+ {
+***************
+*** 2993,3038 ****
+ if (!can_abandon(curbuf, forceit))
+ {
+ no_write_message();
+! retval = FAIL;
+ }
+! else
+! retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
+! ECMD_HIDE + ECMD_SET_HELP,
+! oldwin == curwin ? curwin : NULL);
+ }
+ else
+- {
+- int old_qf_curlist = qi->qf_curlist;
+- int save_qfid = qfl->qf_id;
+-
+ retval = buflist_getfile(qf_ptr->qf_fnum,
+ (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+
+! if (IS_LL_STACK(qi))
+! {
+! // Location list. Check whether the associated window is still
+! // present and the list is still valid.
+! if (!win_valid_any_tab(oldwin))
+! {
+! EMSG(_("E924: Current window was closed"));
+! *opened_window = FALSE;
+! return NOTDONE;
+! }
+! else if (!qflist_valid(oldwin, save_qfid))
+! {
+! EMSG(_(e_loc_list_changed));
+! return NOTDONE;
+! }
+! }
+! else if (old_qf_curlist != qi->qf_curlist
+! || !is_qf_entry_present(qfl, qf_ptr))
+! {
+! if (IS_QF_STACK(qi))
+! EMSG(_("E925: Current quickfix was changed"));
+! else
+! EMSG(_(e_loc_list_changed));
+! return NOTDONE;
+! }
+ }
+
+ return retval;
+--- 2995,3034 ----
+ if (!can_abandon(curbuf, forceit))
+ {
+ no_write_message();
+! return FAIL;
+ }
+!
+! retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
+! ECMD_HIDE + ECMD_SET_HELP,
+! oldwin == curwin ? curwin : NULL);
+ }
+ else
+ retval = buflist_getfile(qf_ptr->qf_fnum,
+ (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+
+! // If a location list, check whether the associated window is still
+! // present.
+! if (IS_LL_STACK(qi) && !win_valid_any_tab(oldwin))
+! {
+! EMSG(_("E924: Current window was closed"));
+! *opened_window = FALSE;
+! return NOTDONE;
+! }
+!
+! if (IS_QF_STACK(qi) && !qflist_valid(NULL, save_qfid))
+! {
+! EMSG(_("E925: Current quickfix was changed"));
+! return NOTDONE;
+! }
+!
+! if (old_qf_curlist != qi->qf_curlist
+! || !is_qf_entry_present(qfl, qf_ptr))
+! {
+! if (IS_QF_STACK(qi))
+! EMSG(_("E925: Current quickfix was changed"));
+! else
+! EMSG(_(e_loc_list_changed));
+! return NOTDONE;
+ }
+
+ return retval;
+*** ../vim-8.1.0488/src/testdir/test_quickfix.vim 2018-10-20 20:53:58.147284793 +0200
+--- src/testdir/test_quickfix.vim 2018-10-21 18:32:08.845255919 +0200
+***************
+*** 3255,3260 ****
+--- 3255,3271 ----
+ augroup QF_Test
+ au!
+ augroup END
++
++ new | only
++ augroup QF_Test
++ au!
++ au BufEnter * call setloclist(0, [], 'r')
++ augroup END
++ call assert_fails('lvimgrep Test_lvimgrep_crash *', 'E926:')
++ augroup QF_Test
++ au!
++ augroup END
++
+ enew | only
+ endfunc
+
+***************
+*** 3337,3342 ****
+--- 3348,3384 ----
+ call assert_equal('help', &filetype)
+ call assert_equal(1, getloclist(0, {'nr' : '$'}).nr)
+ au! QuickFixCmdPost
++
++ new | only
++ augroup QF_Test
++ au!
++ au BufEnter * call setqflist([], 'f')
++ augroup END
++ call assert_fails('helpgrep quickfix', 'E925:')
++ augroup QF_Test
++ au! BufEnter
++ augroup END
++
++ new | only
++ augroup QF_Test
++ au!
++ au BufEnter * call setqflist([], 'r')
++ augroup END
++ call assert_fails('helpgrep quickfix', 'E925:')
++ augroup QF_Test
++ au! BufEnter
++ augroup END
++
++ new | only
++ augroup QF_Test
++ au!
++ au BufEnter * call setloclist(0, [], 'r')
++ augroup END
++ call assert_fails('lhelpgrep quickfix', 'E926:')
++ augroup QF_Test
++ au! BufEnter
++ augroup END
++
+ new | only
+ endfunc
+
+*** ../vim-8.1.0488/src/version.c 2018-10-20 20:53:58.147284793 +0200
+--- src/version.c 2018-10-21 18:39:57.093915160 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 489,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+247. You use www.switchboard.com instead of dialing 411 and 555-12-12
+ for directory assistance.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0490 b/data/vim/patches/8.1.0490
new file mode 100644
index 000000000..01fe10304
--- /dev/null
+++ b/data/vim/patches/8.1.0490
@@ -0,0 +1,117 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0490
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0490
+Problem: MS-Windows: doesn't handle missing glibwinpthread-1.dll.
+Solution: Adjust Cygwin/MinGW build file. (Ken Takata, closes #2827)
+Files: src/Make_cyg_ming.mak
+
+
+*** ../vim-8.1.0489/src/Make_cyg_ming.mak 2018-10-17 22:45:51.167602173 +0200
+--- src/Make_cyg_ming.mak 2018-10-21 22:40:35.035596360 +0200
+***************
+*** 121,126 ****
+--- 121,129 ----
+ ifndef STATIC_WINPTHREAD
+ STATIC_WINPTHREAD=$(STATIC_STDCPLUS)
+ endif
++ # If you use TDM-GCC(-64), change HAS_GCC_EH to "no".
++ # This is used when STATIC_STDCPLUS=yes.
++ HAS_GCC_EH=yes
+
+ # If the user doesn't want gettext, undefine it.
+ ifeq (no, $(GETTEXT))
+***************
+*** 928,941 ****
+ endif
+
+ ifeq (yes, $(USE_STDCPLUS))
+ ifeq (yes, $(STATIC_STDCPLUS))
+! LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+! else
+! LIB += -lstdc++
+ endif
+ endif
+
+ ifeq (yes, $(STATIC_WINPTHREAD))
+ LIB += -Wl,-Bstatic -lwinpthread -Wl,-Bdynamic
+ endif
+
+--- 931,948 ----
+ endif
+
+ ifeq (yes, $(USE_STDCPLUS))
++ LINK = $(CXX)
+ ifeq (yes, $(STATIC_STDCPLUS))
+! LIB += -static-libstdc++ -static-libgcc
+ endif
++ else
++ LINK = $(CC)
+ endif
+
+ ifeq (yes, $(STATIC_WINPTHREAD))
++ ifeq (yes, $(HAS_GCC_EH))
++ LIB += -lgcc_eh
++ endif
+ LIB += -Wl,-Bstatic -lwinpthread -Wl,-Bdynamic
+ endif
+
+***************
+*** 955,961 ****
+ $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB)
+
+ $(TARGET): $(OUTDIR) $(OBJ)
+! $(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
+
+ upx: exes
+ upx gvim.exe
+--- 962,968 ----
+ $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB)
+
+ $(TARGET): $(OUTDIR) $(OBJ)
+! $(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
+
+ upx: exes
+ upx gvim.exe
+***************
+*** 1142,1148 ****
+ @echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
+ @echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
+ @echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
+! @echo 'char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)";' >> pathdef.c
+ @echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
+ @echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
+ else
+--- 1149,1155 ----
+ @echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
+ @echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
+ @echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
+! @echo 'char_u *all_lflags = (char_u *)"$(LINK) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)";' >> pathdef.c
+ @echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
+ @echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
+ else
+*** ../vim-8.1.0489/src/version.c 2018-10-21 18:47:39.622613657 +0200
+--- src/version.c 2018-10-21 22:44:54.837994997 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 490,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+250. You've given up the search for the "perfect woman" and instead,
+ sit in front of the PC until you're just too tired to care.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0491 b/data/vim/patches/8.1.0491
new file mode 100644
index 000000000..d3de21cf7
--- /dev/null
+++ b/data/vim/patches/8.1.0491
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0491
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0491
+Problem: If a terminal dump has CR it is considered corrupt.
+Solution: Ignore CR characters. (Nobuhiro Takasaki, closes #3558)
+Files: src/terminal.c
+
+
+*** ../vim-8.1.0490/src/terminal.c 2018-10-16 22:12:56.090984061 +0200
+--- src/terminal.c 2018-10-23 21:38:40.168050973 +0200
+***************
+*** 4094,4100 ****
+ {
+ if (c == EOF)
+ break;
+! if (c == '\n')
+ {
+ /* End of a line: append it to the buffer. */
+ if (ga_text.ga_data == NULL)
+--- 4094,4105 ----
+ {
+ if (c == EOF)
+ break;
+! if (c == '\r')
+! {
+! // DOS line endings? Ignore.
+! c = fgetc(fd);
+! }
+! else if (c == '\n')
+ {
+ /* End of a line: append it to the buffer. */
+ if (ga_text.ga_data == NULL)
+*** ../vim-8.1.0490/src/version.c 2018-10-21 22:45:39.117688669 +0200
+--- src/version.c 2018-10-23 21:39:47.391445765 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 491,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+266. You hear most of your jokes via e-mail instead of in person.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0492 b/data/vim/patches/8.1.0492
new file mode 100644
index 000000000..8a04c6e1f
--- /dev/null
+++ b/data/vim/patches/8.1.0492
@@ -0,0 +1,113 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0492
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0492
+Problem: "Edit with existing Vim" list can get long.
+Solution: Move the list to a submenu. (Ken Takata, closes #3561)
+Files: src/GvimExt/gvimext.cpp
+
+
+*** ../vim-8.1.0491/src/GvimExt/gvimext.cpp 2017-10-14 17:17:35.000000000 +0200
+--- src/GvimExt/gvimext.cpp 2018-10-25 11:21:12.394638116 +0200
+***************
+*** 708,718 ****
+--- 708,733 ----
+ m_edit_existing_off = 1;
+ }
+
++ HMENU hSubMenu = NULL;
++ if (m_cntOfHWnd > 1)
++ {
++ hSubMenu = CreatePopupMenu();
++ mii.fMask |= MIIM_SUBMENU;
++ mii.wID = idCmd;
++ mii.dwTypeData = _("Edit with existing Vim");
++ mii.cch = lstrlen(mii.dwTypeData);
++ mii.hSubMenu = hSubMenu;
++ InsertMenuItem(hMenu, indexMenu++, TRUE, &mii);
++ mii.fMask = mii.fMask & ~MIIM_SUBMENU;
++ mii.hSubMenu = NULL;
++ }
+ // Now display all the vim instances
+ for (int i = 0; i < m_cntOfHWnd; i++)
+ {
+ char title[BUFSIZE];
+ char temp[BUFSIZE];
++ int index;
++ HMENU hmenu;
+
+ // Obtain window title, continue if can not
+ if (GetWindowText(m_hWnd[i], title, BUFSIZE - 1) == 0)
+***************
+*** 726,740 ****
+ *pos = 0;
+ }
+ // Now concatenate
+! strncpy(temp, _("Edit with existing Vim - "), BUFSIZE - 1);
+! temp[BUFSIZE - 1] = '\0';
+ strncat(temp, title, BUFSIZE - 1 - strlen(temp));
+ temp[BUFSIZE - 1] = '\0';
+
+ mii.wID = idCmd++;
+ mii.dwTypeData = temp;
+ mii.cch = lstrlen(mii.dwTypeData);
+! InsertMenuItem(hMenu, indexMenu++, TRUE, &mii);
+ }
+ // InsertMenu(hMenu, indexMenu++, MF_SEPARATOR|MF_BYPOSITION, 0, NULL);
+
+--- 741,770 ----
+ *pos = 0;
+ }
+ // Now concatenate
+! if (m_cntOfHWnd > 1)
+! temp[0] = '\0';
+! else
+! {
+! strncpy(temp, _("Edit with existing Vim - "), BUFSIZE - 1);
+! temp[BUFSIZE - 1] = '\0';
+! }
+ strncat(temp, title, BUFSIZE - 1 - strlen(temp));
+ temp[BUFSIZE - 1] = '\0';
+
+ mii.wID = idCmd++;
+ mii.dwTypeData = temp;
+ mii.cch = lstrlen(mii.dwTypeData);
+! if (m_cntOfHWnd > 1)
+! {
+! hmenu = hSubMenu;
+! index = i;
+! }
+! else
+! {
+! hmenu = hMenu;
+! index = indexMenu++;
+! }
+! InsertMenuItem(hmenu, index, TRUE, &mii);
+ }
+ // InsertMenu(hMenu, indexMenu++, MF_SEPARATOR|MF_BYPOSITION, 0, NULL);
+
+*** ../vim-8.1.0491/src/version.c 2018-10-23 21:42:55.449760330 +0200
+--- src/version.c 2018-10-25 11:22:20.317530744 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 492,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+270. You are subscribed to a mailing list for every piece of software
+ you use.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0493 b/data/vim/patches/8.1.0493
new file mode 100644
index 000000000..42ad34581
--- /dev/null
+++ b/data/vim/patches/8.1.0493
@@ -0,0 +1,497 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0493
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0493
+Problem: argv() and argc() only work on the current argument list.
+Solution: Add a window ID argument. (Yegappan Lakshmanan, closes #832)
+Files: runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test_arglist.vim,
+ src/eval.c, src/proto/eval.pro
+
+
+*** ../vim-8.1.0492/runtime/doc/eval.txt 2018-09-16 18:46:36.189127529 +0200
+--- runtime/doc/eval.txt 2018-10-25 12:06:17.061437332 +0200
+***************
+*** 2015,2027 ****
+ acos({expr}) Float arc cosine of {expr}
+ add({list}, {item}) List append {item} to |List| {list}
+ and({expr}, {expr}) Number bitwise AND
+! append({lnum}, {string}) Number append {string} below line {lnum}
+! append({lnum}, {list}) Number append lines {list} below line {lnum}
+! argc() Number number of files in the argument list
+ argidx() Number current index in the argument list
+ arglistid([{winnr} [, {tabnr}]]) Number argument list id
+! argv({nr}) String {nr} entry of the argument list
+! argv() List the argument list
+ assert_beeps({cmd}) Number assert {cmd} causes a beep
+ assert_equal({exp}, {act} [, {msg}])
+ Number assert {exp} is equal to {act}
+--- 2022,2036 ----
+ acos({expr}) Float arc cosine of {expr}
+ add({list}, {item}) List append {item} to |List| {list}
+ and({expr}, {expr}) Number bitwise AND
+! append({lnum}, {text}) Number append {text} below line {lnum}
+! appendbufline({expr}, {lnum}, {text})
+! Number append {text} below line {lnum}
+! in buffer {expr}
+! argc( [{winid}]) Number number of files in the argument list
+ argidx() Number current index in the argument list
+ arglistid([{winnr} [, {tabnr}]]) Number argument list id
+! argv({nr} [, {winid}]) String {nr} entry of the argument list
+! argv([-1, {winid}]) List the argument list
+ assert_beeps({cmd}) Number assert {cmd} causes a beep
+ assert_equal({exp}, {act} [, {msg}])
+ Number assert {exp} is equal to {act}
+***************
+*** 2587,2594 ****
+ :let failed = appendbufline(13, 0, "# THE START")
+ <
+ *argc()*
+! argc() The result is the number of files in the argument list of the
+! current window. See |arglist|.
+
+ *argidx()*
+ argidx() The result is the current index in the argument list. 0 is
+--- 2596,2610 ----
+ :let failed = appendbufline(13, 0, "# THE START")
+ <
+ *argc()*
+! argc([{winid}])
+! The result is the number of files in the argument list. See
+! |arglist|.
+! If {winid} is not supplied, the argument list of the current
+! window is used.
+! If {winid} is -1, the global argument list is used.
+! Otherwise {winid} specifies the window of which the argument
+! list is used: either the window number or the window ID.
+! Returns -1 if the {winid} argument is invalid.
+
+ *argidx()*
+ argidx() The result is the current index in the argument list. 0 is
+***************
+*** 2599,2605 ****
+ Return the argument list ID. This is a number which
+ identifies the argument list being used. Zero is used for the
+ global argument list. See |arglist|.
+! Return -1 if the arguments are invalid.
+
+ Without arguments use the current window.
+ With {winnr} only use this window in the current tab page.
+--- 2615,2621 ----
+ Return the argument list ID. This is a number which
+ identifies the argument list being used. Zero is used for the
+ global argument list. See |arglist|.
+! Returns -1 if the arguments are invalid.
+
+ Without arguments use the current window.
+ With {winnr} only use this window in the current tab page.
+***************
+*** 2608,2624 ****
+ {winnr} can be the window number or the |window-ID|.
+
+ *argv()*
+! argv([{nr}]) The result is the {nr}th file in the argument list of the
+! current window. See |arglist|. "argv(0)" is the first one.
+! Example: >
+ :let i = 0
+ :while i < argc()
+ : let f = escape(fnameescape(argv(i)), '.')
+ : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
+ : let i = i + 1
+ :endwhile
+! < Without the {nr} argument a |List| with the whole |arglist| is
+! returned.
+
+ assert_beeps({cmd}) *assert_beeps()*
+ Run {cmd} and add an error message to |v:errors| if it does
+--- 2624,2642 ----
+ {winnr} can be the window number or the |window-ID|.
+
+ *argv()*
+! argv([{nr} [, {winid}])
+! The result is the {nr}th file in the argument list. See
+! |arglist|. "argv(0)" is the first one. Example: >
+ :let i = 0
+ :while i < argc()
+ : let f = escape(fnameescape(argv(i)), '.')
+ : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
+ : let i = i + 1
+ :endwhile
+! < Without the {nr} argument, or when {nr} is -1, a |List| with
+! the whole |arglist| is returned.
+!
+! The {winid} argument specifies the window ID, see |argc()|.
+
+ assert_beeps({cmd}) *assert_beeps()*
+ Run {cmd} and add an error message to |v:errors| if it does
+*** ../vim-8.1.0492/src/evalfunc.c 2018-10-07 20:14:53.091279680 +0200
+--- src/evalfunc.c 2018-10-25 12:26:27.274700783 +0200
+***************
+*** 501,510 ****
+ {"and", 2, 2, f_and},
+ {"append", 2, 2, f_append},
+ {"appendbufline", 3, 3, f_appendbufline},
+! {"argc", 0, 0, f_argc},
+ {"argidx", 0, 0, f_argidx},
+ {"arglistid", 0, 2, f_arglistid},
+! {"argv", 0, 1, f_argv},
+ #ifdef FEAT_FLOAT
+ {"asin", 1, 1, f_asin}, /* WJMc */
+ #endif
+--- 501,510 ----
+ {"and", 2, 2, f_and},
+ {"append", 2, 2, f_append},
+ {"appendbufline", 3, 3, f_appendbufline},
+! {"argc", 0, 1, f_argc},
+ {"argidx", 0, 0, f_argidx},
+ {"arglistid", 0, 2, f_arglistid},
+! {"argv", 0, 2, f_argv},
+ #ifdef FEAT_FLOAT
+ {"asin", 1, 1, f_asin}, /* WJMc */
+ #endif
+***************
+*** 1407,1418 ****
+ }
+
+ /*
+! * "argc()" function
+ */
+ static void
+! f_argc(typval_T *argvars UNUSED, typval_T *rettv)
+ {
+! rettv->vval.v_number = ARGCOUNT;
+ }
+
+ /*
+--- 1407,1435 ----
+ }
+
+ /*
+! * "argc([window id])" function
+ */
+ static void
+! f_argc(typval_T *argvars, typval_T *rettv)
+ {
+! win_T *wp;
+!
+! if (argvars[0].v_type == VAR_UNKNOWN)
+! // use the current window
+! rettv->vval.v_number = ARGCOUNT;
+! else if (argvars[0].v_type == VAR_NUMBER
+! && get_tv_number(&argvars[0]) == -1)
+! // use the global argument list
+! rettv->vval.v_number = GARGCOUNT;
+! else
+! {
+! // use the argument list of the specified window
+! wp = find_win_by_nr_or_id(&argvars[0]);
+! if (wp != NULL)
+! rettv->vval.v_number = WARGCOUNT(wp);
+! else
+! rettv->vval.v_number = -1;
+! }
+ }
+
+ /*
+***************
+*** 1439,1464 ****
+ }
+
+ /*
+ * "argv(nr)" function
+ */
+ static void
+ f_argv(typval_T *argvars, typval_T *rettv)
+ {
+ int idx;
+
+ if (argvars[0].v_type != VAR_UNKNOWN)
+ {
+! idx = (int)get_tv_number_chk(&argvars[0], NULL);
+! if (idx >= 0 && idx < ARGCOUNT)
+! rettv->vval.v_string = vim_strsave(alist_name(&ARGLIST[idx]));
+ else
+! rettv->vval.v_string = NULL;
+ rettv->v_type = VAR_STRING;
+ }
+! else if (rettv_list_alloc(rettv) == OK)
+! for (idx = 0; idx < ARGCOUNT; ++idx)
+! list_append_string(rettv->vval.v_list,
+! alist_name(&ARGLIST[idx]), -1);
+ }
+
+ /*
+--- 1456,1519 ----
+ }
+
+ /*
++ * Get the argument list for a given window
++ */
++ static void
++ get_arglist_as_rettv(aentry_T *arglist, int argcount, typval_T *rettv)
++ {
++ int idx;
++
++ if (rettv_list_alloc(rettv) == OK && arglist != NULL)
++ for (idx = 0; idx < argcount; ++idx)
++ list_append_string(rettv->vval.v_list,
++ alist_name(&arglist[idx]), -1);
++ }
++
++ /*
+ * "argv(nr)" function
+ */
+ static void
+ f_argv(typval_T *argvars, typval_T *rettv)
+ {
+ int idx;
++ aentry_T *arglist = NULL;
++ int argcount = -1;
+
+ if (argvars[0].v_type != VAR_UNKNOWN)
+ {
+! if (argvars[1].v_type == VAR_UNKNOWN)
+! {
+! arglist = ARGLIST;
+! argcount = ARGCOUNT;
+! }
+! else if (argvars[1].v_type == VAR_NUMBER
+! && get_tv_number(&argvars[1]) == -1)
+! {
+! arglist = GARGLIST;
+! argcount = GARGCOUNT;
+! }
+ else
+! {
+! win_T *wp = find_win_by_nr_or_id(&argvars[1]);
+!
+! if (wp != NULL)
+! {
+! /* Use the argument list of the specified window */
+! arglist = WARGLIST(wp);
+! argcount = WARGCOUNT(wp);
+! }
+! }
+!
+ rettv->v_type = VAR_STRING;
++ rettv->vval.v_string = NULL;
++ idx = get_tv_number_chk(&argvars[0], NULL);
++ if (arglist != NULL && idx >= 0 && idx < argcount)
++ rettv->vval.v_string = vim_strsave(alist_name(&arglist[idx]));
++ else if (idx == -1)
++ get_arglist_as_rettv(arglist, argcount, rettv);
+ }
+! else
+! get_arglist_as_rettv(ARGLIST, ARGCOUNT, rettv);
+ }
+
+ /*
+***************
+*** 5358,5364 ****
+ rettv->vval.v_number = FALSE;
+ }
+
+-
+ /*
+ * "getcurpos()" function
+ */
+--- 5413,5418 ----
+***************
+*** 6982,6988 ****
+ rettv->vval.v_number = selected;
+ }
+
+-
+ static garray_T ga_userinput = {0, 0, sizeof(tasave_T), 4, NULL};
+
+ /*
+--- 7036,7041 ----
+***************
+*** 12397,12403 ****
+ modec = 't';
+ }
+
+-
+ switch (TOLOWER_ASC(what[0]))
+ {
+ case 'b':
+--- 12450,12455 ----
+***************
+*** 12808,12814 ****
+ }
+ }
+
+-
+ /*
+ * "tabpagenr()" function
+ */
+--- 12860,12865 ----
+***************
+*** 12900,12906 ****
+ rettv->vval.v_number = nr;
+ }
+
+-
+ /*
+ * "tagfiles()" function
+ */
+--- 12951,12956 ----
+***************
+*** 14092,14096 ****
+ ^ get_tv_number_chk(&argvars[1], NULL);
+ }
+
+-
+ #endif /* FEAT_EVAL */
+--- 14142,14145 ----
+*** ../vim-8.1.0492/src/testdir/test_arglist.vim 2018-09-24 21:32:07.321727079 +0200
+--- src/testdir/test_arglist.vim 2018-10-25 12:17:36.075085230 +0200
+***************
+*** 278,290 ****
+ call assert_equal(0, arglistid())
+ endfunc
+
+! " Test for argv()
+ func Test_argv()
+ call Reset_arglist()
+ call assert_equal([], argv())
+ call assert_equal("", argv(2))
+ argadd a b c d
+ call assert_equal('c', argv(2))
+ endfunc
+
+ " Test for the :argedit command
+--- 278,330 ----
+ call assert_equal(0, arglistid())
+ endfunc
+
+! " Tests for argv() and argc()
+ func Test_argv()
+ call Reset_arglist()
+ call assert_equal([], argv())
+ call assert_equal("", argv(2))
++ call assert_equal(0, argc())
+ argadd a b c d
++ call assert_equal(4, argc())
+ call assert_equal('c', argv(2))
++
++ let w1_id = win_getid()
++ split
++ let w2_id = win_getid()
++ arglocal
++ args e f g
++ tabnew
++ let w3_id = win_getid()
++ split
++ let w4_id = win_getid()
++ argglobal
++ tabfirst
++ call assert_equal(4, argc(w1_id))
++ call assert_equal('b', argv(1, w1_id))
++ call assert_equal(['a', 'b', 'c', 'd'], argv(-1, w1_id))
++
++ call assert_equal(3, argc(w2_id))
++ call assert_equal('f', argv(1, w2_id))
++ call assert_equal(['e', 'f', 'g'], argv(-1, w2_id))
++
++ call assert_equal(3, argc(w3_id))
++ call assert_equal('e', argv(0, w3_id))
++ call assert_equal(['e', 'f', 'g'], argv(-1, w3_id))
++
++ call assert_equal(4, argc(w4_id))
++ call assert_equal('c', argv(2, w4_id))
++ call assert_equal(['a', 'b', 'c', 'd'], argv(-1, w4_id))
++
++ call assert_equal(4, argc(-1))
++ call assert_equal(3, argc())
++ call assert_equal('d', argv(3, -1))
++ call assert_equal(['a', 'b', 'c', 'd'], argv(-1, -1))
++ tabonly | only | enew!
++ " Negative test cases
++ call assert_equal(-1, argc(100))
++ call assert_equal('', argv(1, 100))
++ call assert_equal([], argv(-1, 100))
++ call assert_equal('', argv(10, -1))
+ endfunc
+
+ " Test for the :argedit command
+*** ../vim-8.1.0492/src/eval.c 2018-10-14 21:40:57.356848425 +0200
+--- src/eval.c 2018-10-25 12:24:39.027292633 +0200
+***************
+*** 8193,8201 ****
+ tabpage_T *tp) /* NULL for current tab page */
+ {
+ win_T *wp;
+! int nr;
+!
+! nr = (int)get_tv_number_chk(vp, NULL);
+
+ if (nr < 0)
+ return NULL;
+--- 8193,8199 ----
+ tabpage_T *tp) /* NULL for current tab page */
+ {
+ win_T *wp;
+! int nr = (int)get_tv_number_chk(vp, NULL);
+
+ if (nr < 0)
+ return NULL;
+***************
+*** 8218,8223 ****
+--- 8216,8235 ----
+ }
+
+ /*
++ * Find a window: When using a Window ID in any tab page, when using a number
++ * in the current tab page.
++ */
++ win_T *
++ find_win_by_nr_or_id(typval_T *vp)
++ {
++ int nr = (int)get_tv_number_chk(vp, NULL);
++
++ if (nr >= LOWEST_WIN_ID)
++ return win_id2wp(vp);
++ return find_win_by_nr(vp, NULL);
++ }
++
++ /*
+ * Find window specified by "wvp" in tabpage "tvp".
+ */
+ win_T *
+*** ../vim-8.1.0492/src/proto/eval.pro 2018-09-10 21:04:09.872392623 +0200
+--- src/proto/eval.pro 2018-10-25 12:25:05.335058574 +0200
+***************
+*** 111,116 ****
+--- 111,117 ----
+ void ex_echohl(exarg_T *eap);
+ void ex_execute(exarg_T *eap);
+ win_T *find_win_by_nr(typval_T *vp, tabpage_T *tp);
++ win_T *find_win_by_nr_or_id(typval_T *vp);
+ win_T *find_tabwin(typval_T *wvp, typval_T *tvp);
+ void getwinvar(typval_T *argvars, typval_T *rettv, int off);
+ void setwinvar(typval_T *argvars, typval_T *rettv, int off);
+*** ../vim-8.1.0492/src/version.c 2018-10-25 11:25:50.166512213 +0200
+--- src/version.c 2018-10-25 11:54:38.673119950 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 493,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+271. You collect hilarious signatures from all 250 mailing lists you
+ are subscribed to.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0494 b/data/vim/patches/8.1.0494
new file mode 100644
index 000000000..40adee35f
--- /dev/null
+++ b/data/vim/patches/8.1.0494
@@ -0,0 +1,154 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0494
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0494
+Problem: Functions do not check for a window ID in other tabs.
+Solution: Also find the window ID in other than the current tab.
+Files: src/evalfunc.c
+
+
+*** ../vim-8.1.0493/src/evalfunc.c 2018-10-25 12:30:52.270659874 +0200
+--- src/evalfunc.c 2018-10-25 12:37:49.997123096 +0200
+***************
+*** 5291,5297 ****
+ #ifdef FEAT_QUICKFIX
+ win_T *wp;
+
+! wp = find_win_by_nr(&argvars[0], NULL);
+ get_qf_loc_list(FALSE, wp, &argvars[1], rettv);
+ #endif
+ }
+--- 5291,5297 ----
+ #ifdef FEAT_QUICKFIX
+ win_T *wp;
+
+! wp = find_win_by_nr_or_id(&argvars[0]);
+ get_qf_loc_list(FALSE, wp, &argvars[1], rettv);
+ #endif
+ }
+***************
+*** 5796,5802 ****
+ if (rettv_list_alloc(rettv) == FAIL)
+ return;
+
+! wp = find_win_by_nr(&argvars[0], NULL);
+ list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1);
+ list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1);
+ }
+--- 5796,5802 ----
+ if (rettv_list_alloc(rettv) == FAIL)
+ return;
+
+! wp = find_win_by_nr_or_id(&argvars[0]);
+ list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1);
+ list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1);
+ }
+***************
+*** 8028,8034 ****
+
+ if ((di = dict_find(tv->vval.v_dict, (char_u *)"window", -1)) != NULL)
+ {
+! *win = find_win_by_nr(&di->di_tv, NULL);
+ if (*win == NULL)
+ {
+ EMSG(_("E957: Invalid window number"));
+--- 8028,8034 ----
+
+ if ((di = dict_find(tv->vval.v_dict, (char_u *)"window", -1)) != NULL)
+ {
+! *win = find_win_by_nr_or_id(&di->di_tv);
+ if (*win == NULL)
+ {
+ EMSG(_("E957: Invalid window number"));
+***************
+*** 10785,10791 ****
+
+ rettv->vval.v_number = -1;
+
+! win = find_win_by_nr(&argvars[0], NULL);
+ if (win != NULL)
+ set_qf_ll_list(win, &argvars[1], &argvars[2], &argvars[3], rettv);
+ }
+--- 10785,10791 ----
+
+ rettv->vval.v_number = -1;
+
+! win = find_win_by_nr_or_id(&argvars[0]);
+ if (win != NULL)
+ set_qf_ll_list(win, &argvars[1], &argvars[2], &argvars[3], rettv);
+ }
+***************
+*** 13843,13849 ****
+ {
+ win_T *wp;
+
+! wp = find_win_by_nr(&argvars[0], NULL);
+ if (wp == NULL)
+ rettv->vval.v_number = -1;
+ else
+--- 13843,13849 ----
+ {
+ win_T *wp;
+
+! wp = find_win_by_nr_or_id(&argvars[0]);
+ if (wp == NULL)
+ rettv->vval.v_number = -1;
+ else
+***************
+*** 13868,13874 ****
+ {
+ win_T *wp;
+
+! wp = find_win_by_nr(&argvars[0], NULL);
+ if (wp == NULL)
+ rettv->vval.v_number = -1;
+ else
+--- 13868,13874 ----
+ {
+ win_T *wp;
+
+! wp = find_win_by_nr_or_id(&argvars[0]);
+ if (wp == NULL)
+ rettv->vval.v_number = -1;
+ else
+***************
+*** 14035,14041 ****
+ {
+ win_T *wp;
+
+! wp = find_win_by_nr(&argvars[0], NULL);
+ if (wp == NULL)
+ rettv->vval.v_number = -1;
+ else
+--- 14035,14041 ----
+ {
+ win_T *wp;
+
+! wp = find_win_by_nr_or_id(&argvars[0]);
+ if (wp == NULL)
+ rettv->vval.v_number = -1;
+ else
+*** ../vim-8.1.0493/src/version.c 2018-10-25 12:30:52.274659868 +0200
+--- src/version.c 2018-10-25 12:38:27.696929844 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 494,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+10E. You start counting in hex.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0495 b/data/vim/patches/8.1.0495
new file mode 100644
index 000000000..8770fbe97
--- /dev/null
+++ b/data/vim/patches/8.1.0495
@@ -0,0 +1,230 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0495
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0495
+Problem: :filter only supports some commands.
+Solution: Add :filter support for more commands. (Marcin Szamotulski,
+ closes #2856)
+Files: runtime/doc/various.txt, src/eval.c, src/mark.c, src/option.c,
+ src/syntax.c, src/testdir/test_filter_cmd.vim, src/userfunc.c
+
+
+*** ../vim-8.1.0494/runtime/doc/various.txt 2018-07-29 16:09:14.628945654 +0200
+--- runtime/doc/various.txt 2018-10-25 13:27:43.431646937 +0200
+***************
+*** 565,571 ****
+ The pattern is matched against the relevant part of
+ the output, not necessarily the whole line. Only some
+ commands support filtering, try it out to check if it
+! works.
+
+ Only normal messages are filtered, error messages are
+ not.
+--- 565,582 ----
+ The pattern is matched against the relevant part of
+ the output, not necessarily the whole line. Only some
+ commands support filtering, try it out to check if it
+! works. Some of the commands that support filtering:
+! |:#| - filter whole line
+! |:command| - filter by command name
+! |:files| - filter by file name
+! |:highlight| - filter by highlight group
+! |:jumps| - filter by file name
+! |:let| - filter by variable name
+! |:list| - filter whole line
+! |:llist| - filter by file name or module name
+! |:oldfiles| - filter by file name
+! |:clist| - filter by file name or module name
+! |:set| - filter by variable name
+
+ Only normal messages are filtered, error messages are
+ not.
+*** ../vim-8.1.0494/src/eval.c 2018-10-25 12:30:52.274659868 +0200
+--- src/eval.c 2018-10-25 13:26:29.104208433 +0200
+***************
+*** 1425,1430 ****
+--- 1425,1431 ----
+ hashitem_T *hi;
+ dictitem_T *di;
+ int todo;
++ char_u buf[IOSIZE];
+
+ todo = (int)ht->ht_used;
+ for (hi = ht->ht_array; todo > 0 && !got_int; ++hi)
+***************
+*** 1433,1438 ****
+--- 1434,1446 ----
+ {
+ --todo;
+ di = HI2DI(hi);
++
++ // apply :filter /pat/ to variable name
++ vim_strncpy((char_u *) buf, prefix, IOSIZE - 1);
++ vim_strcat((char_u *) buf, di->di_key, IOSIZE);
++ if (message_filtered(buf))
++ continue;
++
+ if (empty || di->di_tv.v_type != VAR_STRING
+ || di->di_tv.vval.v_string != NULL)
+ list_one_var(di, prefix, first);
+*** ../vim-8.1.0494/src/mark.c 2018-07-08 17:57:30.571289935 +0200
+--- src/mark.c 2018-10-25 13:26:29.104208433 +0200
+***************
+*** 901,907 ****
+ if (curwin->w_jumplist[i].fmark.mark.lnum != 0)
+ {
+ name = fm_getname(&curwin->w_jumplist[i].fmark, 16);
+! if (name == NULL) /* file name not available */
+ continue;
+
+ msg_putchar('\n');
+--- 901,909 ----
+ if (curwin->w_jumplist[i].fmark.mark.lnum != 0)
+ {
+ name = fm_getname(&curwin->w_jumplist[i].fmark, 16);
+!
+! // apply :filter /pat/ or file name not available
+! if (name == NULL || message_filtered(name))
+ continue;
+
+ msg_putchar('\n');
+*** ../vim-8.1.0494/src/option.c 2018-10-15 22:51:46.744578471 +0200
+--- src/option.c 2018-10-25 13:26:29.108208403 +0200
+***************
+*** 10083,10088 ****
+--- 10083,10092 ----
+ item_count = 0;
+ for (p = &options[0]; p->fullname != NULL; p++)
+ {
++ // apply :filter /pat/
++ if (message_filtered((char_u *) p->fullname))
++ continue;
++
+ varp = NULL;
+ isterm = istermoption(p);
+ if (opt_flags != 0)
+*** ../vim-8.1.0494/src/syntax.c 2018-09-30 21:43:17.207693209 +0200
+--- src/syntax.c 2018-10-25 13:30:08.094554329 +0200
+***************
+*** 352,358 ****
+
+ /*
+ * A state stack is an array of integers or stateitem_T, stored in a
+! * garray_T. A state stack is invalid if it's itemsize entry is zero.
+ */
+ #define INVALID_STATE(ssp) ((ssp)->ga_itemsize == 0)
+ #define VALID_STATE(ssp) ((ssp)->ga_itemsize != 0)
+--- 352,358 ----
+
+ /*
+ * A state stack is an array of integers or stateitem_T, stored in a
+! * garray_T. A state stack is invalid if its itemsize entry is zero.
+ */
+ #define INVALID_STATE(ssp) ((ssp)->ga_itemsize == 0)
+ #define VALID_STATE(ssp) ((ssp)->ga_itemsize != 0)
+***************
+*** 9189,9195 ****
+ struct hl_group *sgp;
+ int didh = FALSE;
+
+! sgp = &HL_TABLE()[id - 1]; /* index is ID minus one */
+
+ didh = highlight_list_arg(id, didh, LIST_ATTR,
+ sgp->sg_term, NULL, "term");
+--- 9189,9198 ----
+ struct hl_group *sgp;
+ int didh = FALSE;
+
+! sgp = &HL_TABLE()[id - 1]; // index is ID minus one
+!
+! if (message_filtered(sgp->sg_name))
+! return;
+
+ didh = highlight_list_arg(id, didh, LIST_ATTR,
+ sgp->sg_term, NULL, "term");
+*** ../vim-8.1.0494/src/testdir/test_filter_cmd.vim 2018-10-09 21:49:30.447622031 +0200
+--- src/testdir/test_filter_cmd.vim 2018-10-25 13:29:23.066894384 +0200
+***************
+*** 87,89 ****
+--- 87,129 ----
+ call assert_equal('a|b', out)
+ set shelltemp&
+ endfunction
++
++ func Test_filter_commands()
++ let g:test_filter_a = 1
++ let b:test_filter_b = 2
++ let test_filter_c = 3
++
++ " Test filtering :let command
++ let res = split(execute("filter /^test_filter/ let"), "\n")
++ call assert_equal(["test_filter_a #1"], res)
++
++ let res = split(execute("filter /\\v^(b:)?test_filter/ let"), "\n")
++ call assert_equal(["test_filter_a #1", "b:test_filter_b #2"], res)
++
++ unlet g:test_filter_a
++ unlet b:test_filter_b
++ unlet test_filter_c
++
++ " Test filtering :set command
++ let res = join(split(execute("filter /^help/ set"), "\n")[1:], " ")
++ call assert_match('^\s*helplang=\w*$', res)
++
++ " Test filtering :llist command
++ call setloclist(0, [{"filename": "/path/vim.c"}, {"filename": "/path/vim.h"}, {"module": "Main.Test"}])
++ let res = split(execute("filter /\\.c$/ llist"), "\n")
++ call assert_equal([" 1 /path/vim.c: "], res)
++
++ let res = split(execute("filter /\\.Test$/ llist"), "\n")
++ call assert_equal([" 3 Main.Test: "], res)
++
++ " Test filtering :jump command
++ e file.c
++ e file.h
++ e file.hs
++ let res = split(execute("filter /\.c$/ jumps"), "\n")[1:]
++ call assert_equal([" 2 1 0 file.c", ">"], res)
++
++ bwipe file.c
++ bwipe file.h
++ bwipe file.hs
++ endfunc
+*** ../vim-8.1.0494/src/userfunc.c 2018-10-14 21:40:57.352848455 +0200
+--- src/userfunc.c 2018-10-25 13:26:29.108208403 +0200
+***************
+*** 1882,1887 ****
+--- 1882,1889 ----
+ {
+ --todo;
+ fp = HI2UF(hi);
++ if (message_filtered(fp->uf_name))
++ continue;
+ if (!func_name_refcount(fp->uf_name))
+ list_func_head(fp, FALSE);
+ }
+*** ../vim-8.1.0494/src/version.c 2018-10-25 13:11:13.111143297 +0200
+--- src/version.c 2018-10-25 13:27:11.279889812 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 495,
+ /**/
+
+--
+ARTHUR: This new learning amazes me, Sir Bedevere. Explain again how sheep's
+ bladders may be employed to prevent earthquakes.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0496 b/data/vim/patches/8.1.0496
new file mode 100644
index 000000000..3ae265688
--- /dev/null
+++ b/data/vim/patches/8.1.0496
@@ -0,0 +1,413 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0496
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0496
+Problem: No tests for indent files.
+Solution: Add a mechanism for running indent file tests. Add a first test
+ for Vim indenting.
+Files: runtime/indent/Makefile, runtime/indent/testdir/runtest.vim,
+ runtime/indent/testdir/cleantest.vim, runtime/indent/README.txt,
+ runtime/indent/testdir/README.txt, runtime/indent/testdir/vim.in,
+ runtime/indent/testdir/vim.ok, Filelist
+
+
+*** ../vim-8.1.0495/runtime/indent/Makefile 2018-10-25 16:50:51.432794651 +0200
+--- runtime/indent/Makefile 2018-10-25 15:09:00.266824902 +0200
+***************
+*** 0 ****
+--- 1,13 ----
++ # Portable Makefile for running indent tests.
++
++ VIM = vim
++
++ # Run the tests that didn't run yet or failed previously.
++ # If a test succeeds a testdir/*.out file will be written.
++ # If a test fails a testdir/*.fail file will be written.
++ test:
++ $(VIM) --not-a-term -u testdir/runtest.vim
++
++
++ clean:
++ $(VIM) --not-a-term -u testdir/cleantest.vim
+*** ../vim-8.1.0495/runtime/indent/testdir/runtest.vim 1970-01-01 01:00:00.000000000 +0100
+--- runtime/indent/testdir/runtest.vim 2018-10-25 16:46:35.694821475 +0200
+***************
+*** 0 ****
+--- 1,117 ----
++ " Runs all the indent tests for which there is no .out file
++
++ set nocp
++ filetype indent on
++ set nowrapscan
++
++ au! SwapExists * call HandleSwapExists()
++ func HandleSwapExists()
++ " Ignore finding a swap file for the test input and output, the user might be
++ " editing them and that's OK.
++ if expand('<afile>') =~ '.*\.\(in\|out\|fail\|ok\)'
++ let v:swapchoice = 'e'
++ endif
++ endfunc
++
++ for fname in glob('testdir/*.in', 1, 1)
++ let root = substitute(fname, '\.in', '', '')
++
++ " Execute the test if the .out file does not exist of when the .in file is
++ " newer.
++ let in_time = getftime(fname)
++ let out_time = getftime(root . '.out')
++ if out_time < 0 || in_time > out_time
++ call delete(root . '.fail')
++ call delete(root . '.out')
++
++ set sw& ts& filetype=
++ exe 'split ' . fname
++
++ let did_some = 0
++ let failed = 0
++ let end = 1
++ while 1
++ " Indent all the lines between "START_INDENT" and "END_INDENT"
++ exe end
++ let start = search('\<START_INDENT\>')
++ let end = search('\<END_INDENT\>')
++ if start <= 0 || end <= 0 || end <= start
++ if did_some == 0
++ call append(0, 'ERROR: START_INDENT and/or END_INDENT not found')
++ let failed = 1
++ endif
++ break
++ else
++ let did_some = 1
++
++ " Execute all commands marked with INDENT_EXE and find any pattern.
++ let lnum = start
++ let pattern = ''
++ let at = ''
++ while 1
++ exe lnum + 1
++ let lnum_exe = search('\<INDENT_EXE\>')
++ exe lnum + 1
++ let indent_at = search('\<INDENT_\(AT\|NEXT\|PREV\)\>')
++ if lnum_exe > 0 && lnum_exe < end && (indent_at <= 0 || lnum_exe < indent_at)
++ exe substitute(getline(lnum_exe), '.*INDENT_EXE', '', '')
++ let lnum = lnum_exe
++ let start = lnum
++ elseif indent_at > 0 && indent_at < end
++ if pattern != ''
++ call append(indent_at, 'ERROR: duplicate pattern')
++ let failed = 1
++ break
++ endif
++ let text = getline(indent_at)
++ let pattern = substitute(text, '.*INDENT_\S*\s*', '', '')
++ let at = substitute(text, '.*INDENT_\(\S*\).*', '\1', '')
++ let lnum = indent_at
++ let start = lnum
++ else
++ break
++ endif
++ endwhile
++
++ exe start + 1
++ if pattern == ''
++ exe 'normal =' . (end - 1) . 'G'
++ else
++ let lnum = search(pattern)
++ if lnum <= 0
++ call append(indent_at, 'ERROR: pattern not found: ' . pattern)
++ let failed = 1
++ break
++ endif
++ if at == 'AT'
++ exe lnum
++ elseif at == 'NEXT'
++ exe lnum + 1
++ else
++ exe lnum - 1
++ endif
++ normal ==
++ endif
++ endif
++ endwhile
++
++ if !failed
++ " Check the resulting text equals the .ok file.
++ if getline(1, '$') != readfile(root . '.ok')
++ let failed = 1
++ endif
++ endif
++
++ if failed
++ exe 'write ' . root . '.fail'
++ echoerr 'Test ' . fname . ' FAILED!'
++ sleep 2
++ else
++ exe 'write ' . root . '.out'
++ endif
++
++ quit! " close the indented file
++ endif
++ endfor
++
++ qall!
+*** ../vim-8.1.0495/runtime/indent/testdir/cleantest.vim 1970-01-01 01:00:00.000000000 +0100
+--- runtime/indent/testdir/cleantest.vim 2018-10-25 14:30:08.074821926 +0200
+***************
+*** 0 ****
+--- 1,6 ----
++ " Deletes all the test output files: *.fail and *.out
++ for fname in glob('testdir/*.out', 1, 1) + glob('testdir/*.fail', 1, 1)
++ call delete(fname)
++ endfor
++
++ quit
+*** ../vim-8.1.0495/runtime/indent/README.txt 2010-05-15 13:03:29.000000000 +0200
+--- runtime/indent/README.txt 2018-10-25 16:42:14.648927510 +0200
+***************
+*** 43,45 ****
+--- 43,47 ----
+ The user may have several options set unlike you, try to write the file such
+ that it works with any option settings. Also be aware of certain features not
+ being compiled in.
++
++ To test the indent file, see testdir/README.txt.
+*** ../vim-8.1.0495/runtime/indent/testdir/README.txt 1970-01-01 01:00:00.000000000 +0100
+--- runtime/indent/testdir/README.txt 2018-10-25 16:43:55.332109491 +0200
+***************
+*** 0 ****
+--- 1,92 ----
++ TESTING INDENT SCRIPTS
++
++ We'll use FILETYPE for the filetype name here.
++
++
++ FORMAT OF THE FILETYPE.IN FILE
++
++ First of all, create a FILETYPE.in file. It should contain:
++
++ - A modeline setting the 'filetype' and any other option values.
++ This must work like a comment for FILETYPE. E.g. for vim:
++ " vim: set ft=vim sw=4 :
++
++ - At least one block of lines to indent, prefixed with START_INDENT and
++ followed by END_INDENT. These lines must also look like a comment for your
++ FILETYPE. You would normally leave out all indent, so that the effect of
++ the indent command results in adding indent. Example:
++
++ " START_INDENT
++ func Some()
++ let x = 1
++ endfunc
++ " END_INDENT
++
++ - Optionally, a line with INDENT_EXE, followed by a Vim command. This will be
++ executed before indenting the lines. Example:
++
++ " START_INDENT
++ " INDENT_EXE let g:vim_indent_cont = 6
++ let cmd =
++ \ 'some '
++ \ 'string'
++ " END_INDENT
++
++ Note that the command is not undone, you may need to reverse the effect for
++ the next block of lines.
++
++ - Alternatively to indenting all the lines between START_INDENT and
++ END_INDENT, use a INDENT_AT line, which specifies a pattern to find the line
++ to indent. Example:
++
++ " START_INDENT
++ " INDENT_AT this-line
++ func Some()
++ let f = x " this-line
++ endfunc
++ " END_INDENT
++
++ Alternatively you can use INDENT_NEXT to indent the line below the matching
++ pattern:
++
++ " START_INDENT
++ " INDENT_NEXT next-line
++ func Some()
++ " next-line
++ let f = x
++ endfunc
++ " END_INDENT
++
++ Or use INDENT_PREV to indent the line above the matching pattern:
++
++ " START_INDENT
++ " INDENT_PREV prev-line
++ func Some()
++ let f = x
++ " prev-line
++ endfunc
++ " END_INDENT
++
++ It's best to keep the whole file valid for FILETYPE, so that syntax
++ highlighting works normally, and any indenting that depends on the syntax
++ highlighting also works.
++
++
++ RUNNING THE TEST
++
++ Before running the test, create a FILETYPE.ok file. You can leave it empty at
++ first.
++
++ Now run "make test". After Vim has done the indenting you will see a
++ FILETYPE.fail file. This contains the actual result of indenting, and it's
++ different from the FILETYPE.ok file.
++
++ Check the contents of the FILETYPE.fail file. If it is perfectly OK, then
++ rename it to overwrite the FILETYPE.ok file. If you now run "make test" again,
++ the test will pass and create a FILETYPE.out file, which is identical to the
++ FILETYPE.ok file.
++
++ If you try to run "make test" again you will notice that nothing happens,
++ because the FILETYPE.out file already exists. Delete it, or do "make clean",
++ so that the text runs again. If you edit the FILETYPE.in file, so that it's
++ newer than the FILETYPE.out file, the test will also run.
+*** ../vim-8.1.0495/runtime/indent/testdir/vim.in 1970-01-01 01:00:00.000000000 +0100
+--- runtime/indent/testdir/vim.in 2018-10-25 16:47:11.262537836 +0200
+***************
+*** 0 ****
+--- 1,46 ----
++ " vim: set ft=vim sw=4 :
++
++ " START_INDENT
++
++ func Some()
++ let x = 1
++ endfunc
++
++ let cmd =
++ \ 'some '
++ \ 'string'
++
++ " END_INDENT
++
++ " START_INDENT
++ " INDENT_EXE let g:vim_indent_cont = 6
++
++ let cmd =
++ \ 'some '
++ \ 'string'
++
++ " END_INDENT
++
++ " START_INDENT
++ " INDENT_EXE unlet g:vim_indent_cont
++ " INDENT_AT this-line
++ func Some()
++ let f = x " this-line
++ endfunc
++ " END_INDENT
++
++ " START_INDENT
++ " INDENT_NEXT next-line
++ func Some()
++ " next-line
++ let f = x
++ endfunc
++ " END_INDENT
++
++ " START_INDENT
++ " INDENT_PREV prev-line
++ func Some()
++ let f = x
++ " prev-line
++ endfunc
++ " END_INDENT
+*** ../vim-8.1.0495/runtime/indent/testdir/vim.ok 1970-01-01 01:00:00.000000000 +0100
+--- runtime/indent/testdir/vim.ok 2018-10-25 16:45:29.103354381 +0200
+***************
+*** 0 ****
+--- 1,46 ----
++ " vim: set ft=vim sw=4 :
++
++ " START_INDENT
++
++ func Some()
++ let x = 1
++ endfunc
++
++ let cmd =
++ \ 'some '
++ \ 'string'
++
++ " END_INDENT
++
++ " START_INDENT
++ " INDENT_EXE let g:vim_indent_cont = 6
++
++ let cmd =
++ \ 'some '
++ \ 'string'
++
++ " END_INDENT
++
++ " START_INDENT
++ " INDENT_EXE unlet g:vim_indent_cont
++ " INDENT_AT this-line
++ func Some()
++ let f = x " this-line
++ endfunc
++ " END_INDENT
++
++ " START_INDENT
++ " INDENT_NEXT next-line
++ func Some()
++ " next-line
++ let f = x
++ endfunc
++ " END_INDENT
++
++ " START_INDENT
++ " INDENT_PREV prev-line
++ func Some()
++ let f = x
++ " prev-line
++ endfunc
++ " END_INDENT
+*** ../vim-8.1.0495/Filelist 2018-09-19 22:00:26.150988737 +0200
+--- Filelist 2018-10-25 15:16:32.851409638 +0200
+***************
+*** 691,696 ****
+--- 691,701 ----
+ runtime/compiler/README.txt \
+ runtime/indent/*.vim \
+ runtime/indent/README.txt \
++ runtime/indent/Makefile \
++ runtime/indent/testdir/README.txt \
++ runtime/indent/testdir/*.vim \
++ runtime/indent/testdir/*.in \
++ runtime/indent/testdir/*.ok \
+ runtime/ftplugin/*.vim \
+ runtime/ftplugin/logtalk.dict \
+ runtime/ftplugin/README.txt \
+*** ../vim-8.1.0495/src/version.c 2018-10-25 13:31:33.833906872 +0200
+--- src/version.c 2018-10-25 16:50:35.800917806 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 496,
+ /**/
+
+--
+God made the integers; all else is the work of Man.
+ -- Kronecker
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0497 b/data/vim/patches/8.1.0497
new file mode 100644
index 000000000..f66c45d18
--- /dev/null
+++ b/data/vim/patches/8.1.0497
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0497
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0497
+Problem: :%diffput changes order of lines. (Markus Braun)
+Solution: Do adjust marks when using internal diff.
+Files: src/diff.c, src/testdir/test_diffmode.vim
+
+
+*** ../vim-8.1.0496/src/diff.c 2018-10-07 17:46:37.699826982 +0200
+--- src/diff.c 2018-10-25 17:47:12.981125946 +0200
+***************
+*** 298,306 ****
+ // Will update diffs before redrawing. Set _invalid to update the
+ // diffs themselves, set _update to also update folds properly just
+ // before redrawing.
+ tp->tp_diff_invalid = TRUE;
+ tp->tp_diff_update = TRUE;
+- return;
+ }
+
+ if (line2 == MAXLNUM)
+--- 298,306 ----
+ // Will update diffs before redrawing. Set _invalid to update the
+ // diffs themselves, set _update to also update folds properly just
+ // before redrawing.
++ // Do update marks here, it is needed for :%diffput.
+ tp->tp_diff_invalid = TRUE;
+ tp->tp_diff_update = TRUE;
+ }
+
+ if (line2 == MAXLNUM)
+***************
+*** 2850,2856 ****
+ if (diff_need_update)
+ ex_diffupdate(NULL);
+
+! // Check that the cursor is on a valid character and update it's
+ // position. When there were filler lines the topline has become
+ // invalid.
+ check_cursor();
+--- 2850,2856 ----
+ if (diff_need_update)
+ ex_diffupdate(NULL);
+
+! // Check that the cursor is on a valid character and update its
+ // position. When there were filler lines the topline has become
+ // invalid.
+ check_cursor();
+*** ../vim-8.1.0496/src/testdir/test_diffmode.vim 2018-10-07 17:46:37.699826982 +0200
+--- src/testdir/test_diffmode.vim 2018-10-25 17:46:52.781302610 +0200
+***************
+*** 221,226 ****
+--- 221,246 ----
+ %bwipe!
+ endfunc
+
++ " Test putting two changes from one buffer to another
++ func Test_diffput_two()
++ new a
++ let win_a = win_getid()
++ call setline(1, range(1, 10))
++ diffthis
++ new b
++ let win_b = win_getid()
++ call setline(1, range(1, 10))
++ 8del
++ 5del
++ diffthis
++ call win_gotoid(win_a)
++ %diffput
++ call win_gotoid(win_b)
++ call assert_equal(map(range(1, 10), 'string(v:val)'), getline(1, '$'))
++ bwipe! a
++ bwipe! b
++ endfunc
++
+ func Test_dp_do_buffer()
+ e! one
+ let bn1=bufnr('%')
+*** ../vim-8.1.0496/src/version.c 2018-10-25 16:52:46.839887739 +0200
+--- src/version.c 2018-10-25 17:44:41.714462680 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 497,
+ /**/
+
+--
+This sentence is not sure that it exists, but if it does, it will
+certainly consider the possibility that other sentences exist.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0498 b/data/vim/patches/8.1.0498
new file mode 100644
index 000000000..00c2f2abf
--- /dev/null
+++ b/data/vim/patches/8.1.0498
@@ -0,0 +1,81 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0498
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0498
+Problem: /etc/gitconfig not recognized at a gitconfig file.
+Solution: Add pattern to filetype detection. (closes #3568)
+Files: runtime/filetype.vim, src/testdir/test_filetype.vim
+
+
+*** ../vim-8.1.0497/runtime/filetype.vim 2018-10-19 16:26:39.964404727 +0200
+--- runtime/filetype.vim 2018-10-27 14:26:14.136268087 +0200
+***************
+*** 613,624 ****
+ au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom
+
+ " Git
+! au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG setf gitcommit
+! au BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
+! au BufNewFile,BufRead *.git/modules/*/config setf gitconfig
+! au BufNewFile,BufRead */.config/git/config setf gitconfig
+ if !empty($XDG_CONFIG_HOME)
+! au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config setf gitconfig
+ endif
+ au BufNewFile,BufRead git-rebase-todo setf gitrebase
+ au BufRead,BufNewFile .gitsendemail.msg.?????? setf gitsendemail
+--- 613,624 ----
+ au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom
+
+ " Git
+! au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG setf gitcommit
+! au BufNewFile,BufRead *.git/config,.gitconfig,/etc/gitconfig setf gitconfig
+! au BufNewFile,BufRead */.config/git/config setf gitconfig
+! au BufNewFile,BufRead .gitmodules,*.git/modules/*/config setf gitconfig
+ if !empty($XDG_CONFIG_HOME)
+! au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config setf gitconfig
+ endif
+ au BufNewFile,BufRead git-rebase-todo setf gitrebase
+ au BufRead,BufNewFile .gitsendemail.msg.?????? setf gitsendemail
+*** ../vim-8.1.0497/src/testdir/test_filetype.vim 2018-10-19 16:26:39.964404727 +0200
+--- src/testdir/test_filetype.vim 2018-10-27 14:23:20.673594496 +0200
+***************
+*** 171,177 ****
+ \ 'gdmo': ['file.mo', 'file.gdmo'],
+ \ 'gedcom': ['file.ged', 'lltxxxxx.txt'],
+ \ 'gitcommit': ['COMMIT_EDITMSG', 'MERGE_MSG', 'TAG_EDITMSG'],
+! \ 'gitconfig': ['file.git/config', '.gitconfig', '.gitmodules', 'file.git/modules//config', '/.config/git/config'],
+ \ 'gitolite': ['gitolite.conf'],
+ \ 'gitrebase': ['git-rebase-todo'],
+ \ 'gitsendemail': ['.gitsendemail.msg.xxxxxx'],
+--- 171,177 ----
+ \ 'gdmo': ['file.mo', 'file.gdmo'],
+ \ 'gedcom': ['file.ged', 'lltxxxxx.txt'],
+ \ 'gitcommit': ['COMMIT_EDITMSG', 'MERGE_MSG', 'TAG_EDITMSG'],
+! \ 'gitconfig': ['file.git/config', '.gitconfig', '.gitmodules', 'file.git/modules//config', '/.config/git/config', '/etc/gitconfig'],
+ \ 'gitolite': ['gitolite.conf'],
+ \ 'gitrebase': ['git-rebase-todo'],
+ \ 'gitsendemail': ['.gitsendemail.msg.xxxxxx'],
+*** ../vim-8.1.0497/src/version.c 2018-10-25 17:52:20.386489835 +0200
+--- src/version.c 2018-10-27 14:24:46.564935840 +0200
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 498,
+ /**/
+
+--
+"Time flies like an arrow". So I put an arrow on my desk, now
+awaiting one of these time flies showing up.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0499 b/data/vim/patches/8.1.0499
new file mode 100644
index 000000000..4c7ee4692
--- /dev/null
+++ b/data/vim/patches/8.1.0499
@@ -0,0 +1,149 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0499
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0499
+Problem: :2vimgrep causes an ml_get error
+Solution: Pass tomatch pointer instead of value. (Yegappan Lakshmanan)
+Files: src/ex_getln.c, src/quickfix.c, src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0498/src/ex_getln.c 2018-09-30 21:43:17.187693348 +0200
+--- src/ex_getln.c 2018-10-28 14:27:29.009350706 +0100
+***************
+*** 483,488 ****
+--- 483,494 ----
+ if (search_first_line == 0)
+ // start at the original cursor position
+ curwin->w_cursor = is_state->search_start;
++ else if (search_first_line > curbuf->b_ml.ml_line_count)
++ {
++ // start after the last line
++ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
++ curwin->w_cursor.col = MAXCOL;
++ }
+ else
+ {
+ // start at the first line in the range
+*** ../vim-8.1.0498/src/quickfix.c 2018-10-21 18:47:39.622613657 +0200
+--- src/quickfix.c 2018-10-28 14:22:29.387620432 +0100
+***************
+*** 5217,5223 ****
+ char_u *fname,
+ buf_T *buf,
+ regmmatch_T *regmatch,
+! long tomatch,
+ int duplicate_name,
+ int flags)
+ {
+--- 5217,5223 ----
+ char_u *fname,
+ buf_T *buf,
+ regmmatch_T *regmatch,
+! long *tomatch,
+ int duplicate_name,
+ int flags)
+ {
+***************
+*** 5225,5231 ****
+ long lnum;
+ colnr_T col;
+
+! for (lnum = 1; lnum <= buf->b_ml.ml_line_count && tomatch > 0; ++lnum)
+ {
+ col = 0;
+ while (vim_regexec_multi(regmatch, curwin, buf, lnum,
+--- 5225,5231 ----
+ long lnum;
+ colnr_T col;
+
+! for (lnum = 1; lnum <= buf->b_ml.ml_line_count && *tomatch > 0; ++lnum)
+ {
+ col = 0;
+ while (vim_regexec_multi(regmatch, curwin, buf, lnum,
+***************
+*** 5255,5261 ****
+ break;
+ }
+ found_match = TRUE;
+! if (--tomatch == 0)
+ break;
+ if ((flags & VGR_GLOBAL) == 0
+ || regmatch->endpos[0].lnum > 0)
+--- 5255,5261 ----
+ break;
+ }
+ found_match = TRUE;
+! if (--*tomatch == 0)
+ break;
+ if ((flags & VGR_GLOBAL) == 0
+ || regmatch->endpos[0].lnum > 0)
+***************
+*** 5464,5470 ****
+ // Try for a match in all lines of the buffer.
+ // For ":1vimgrep" look for first match only.
+ found_match = vgr_match_buflines(qi, fname, buf, &regmatch,
+! tomatch, duplicate_name, flags);
+
+ if (using_dummy)
+ {
+--- 5464,5470 ----
+ // Try for a match in all lines of the buffer.
+ // For ":1vimgrep" look for first match only.
+ found_match = vgr_match_buflines(qi, fname, buf, &regmatch,
+! &tomatch, duplicate_name, flags);
+
+ if (using_dummy)
+ {
+*** ../vim-8.1.0498/src/testdir/test_quickfix.vim 2018-10-21 18:47:39.622613657 +0200
+--- src/testdir/test_quickfix.vim 2018-10-28 14:20:59.812305616 +0100
+***************
+*** 2364,2369 ****
+--- 2364,2384 ----
+ call XvimgrepTests('l')
+ endfunc
+
++ " Test for incsearch highlighting of the :vimgrep pattern
++ " This test used to cause "E315: ml_get: invalid lnum" errors.
++ func Test_vimgrep_incsearch()
++ enew
++ set incsearch
++ call test_override("char_avail", 1)
++
++ call feedkeys(":2vimgrep assert test_quickfix.vim test_cdo.vim\<CR>", "ntx")
++ let l = getqflist()
++ call assert_equal(2, len(l))
++
++ call test_override("ALL", 0)
++ set noincsearch
++ endfunc
++
+ func XfreeTests(cchar)
+ call s:setup_commands(a:cchar)
+
+*** ../vim-8.1.0498/src/version.c 2018-10-27 14:27:17.539786667 +0200
+--- src/version.c 2018-10-28 14:22:20.871685414 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 499,
+ /**/
+
+--
+ Bravely bold Sir Robin, rode forth from Camelot,
+ He was not afraid to die, Oh Brave Sir Robin,
+ He was not at all afraid to be killed in nasty ways
+ Brave, brave, brave, brave Sir Robin.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0500 b/data/vim/patches/8.1.0500
new file mode 100644
index 000000000..2fb231da9
--- /dev/null
+++ b/data/vim/patches/8.1.0500
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0500
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0500
+Problem: Cleaning up in src/tee may not always work.
+Solution: Use "rm" when appropriate. (Michael Soyka, closes #3571)
+Files: src/tee/Makefile
+
+
+*** ../vim-8.1.0499/src/tee/Makefile 2018-10-17 22:45:51.167602173 +0200
+--- src/tee/Makefile 2018-10-28 15:39:22.597604713 +0100
+***************
+*** 3,8 ****
+--- 3,14 ----
+ CC=gcc
+ CFLAGS=-O2 -fno-strength-reduce
+
++ ifneq (sh.exe, $(SHELL))
++ DEL = rm
++ else
++ DEL = del
++ endif
++
+ tee.exe: tee.o
+ $(CC) $(CFLAGS) -s -o $@ $<
+
+***************
+*** 10,15 ****
+ $(CC) $(CFLAGS) -c $<
+
+ clean:
+! - del tee.o
+! - del tee.exe
+
+--- 16,21 ----
+ $(CC) $(CFLAGS) -c $<
+
+ clean:
+! - $(DEL) tee.o
+! - $(DEL) tee.exe
+
+*** ../vim-8.1.0499/src/version.c 2018-10-28 14:36:04.222247691 +0100
+--- src/version.c 2018-10-28 15:42:12.040813500 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 500,
+ /**/
+
+--
+The software said it requires Windows 95 or better, so I installed Linux.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0501 b/data/vim/patches/8.1.0501
new file mode 100644
index 000000000..9dbbded49
--- /dev/null
+++ b/data/vim/patches/8.1.0501
@@ -0,0 +1,54 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0501
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0501
+Problem: Cppcheck warns for using array index before bounds check.
+Solution: Swap the conditions. (Dominique Pelle)
+Files: src/memline.c
+
+
+*** ../vim-8.1.0500/src/memline.c 2018-10-13 19:06:23.502240830 +0200
+--- src/memline.c 2018-10-30 22:09:37.994123602 +0100
+***************
+*** 5029,5036 ****
+ curline += buf->b_ml.ml_chunksize[curix].mlcs_numlines;
+ }
+ }
+! else if (line >= curline + buf->b_ml.ml_chunksize[curix].mlcs_numlines
+! && curix < buf->b_ml.ml_usedchunks - 1)
+ {
+ /* Adjust cached curix & curline */
+ curline += buf->b_ml.ml_chunksize[curix].mlcs_numlines;
+--- 5029,5036 ----
+ curline += buf->b_ml.ml_chunksize[curix].mlcs_numlines;
+ }
+ }
+! else if (curix < buf->b_ml.ml_usedchunks - 1
+! && line >= curline + buf->b_ml.ml_chunksize[curix].mlcs_numlines)
+ {
+ /* Adjust cached curix & curline */
+ curline += buf->b_ml.ml_chunksize[curix].mlcs_numlines;
+*** ../vim-8.1.0500/src/version.c 2018-10-28 15:43:54.248419267 +0100
+--- src/version.c 2018-10-30 22:10:34.545673410 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 501,
+ /**/
+
+--
+Facepalm reply #9: "Speed up, you can drive 80 here" "Why, the cars behind us
+are also driving 60"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0502 b/data/vim/patches/8.1.0502
new file mode 100644
index 000000000..916bae4b4
--- /dev/null
+++ b/data/vim/patches/8.1.0502
@@ -0,0 +1,111 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0502
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0502
+Problem: Internal diff fails when diffing a context diff. (Hirohito Higashi)
+Solution: Only use callback calls with one line. (closes #3581)
+Files: src/diff.c, src/testdir/dumps/Test_diff_of_diff_01.dump
+
+
+*** ../vim-8.1.0501/src/diff.c 2018-10-25 17:52:20.386489835 +0200
+--- src/diff.c 2018-10-31 22:50:08.320453518 +0100
+***************
+*** 3206,3226 ****
+ xdiff_out(void *priv, mmbuffer_t *mb, int nbuf)
+ {
+ diffout_T *dout = (diffout_T *)priv;
+- int i;
+ char_u *p;
+
+! for (i = 0; i < nbuf; i++)
+! {
+! // We are only interested in the header lines, skip text lines.
+! if (STRNCMP(mb[i].ptr, "@@ ", 3) != 0)
+! continue;
+! if (ga_grow(&dout->dout_ga, 1) == FAIL)
+! return -1;
+! p = vim_strnsave((char_u *)mb[i].ptr, mb[i].size);
+! if (p == NULL)
+! return -1;
+! ((char_u **)dout->dout_ga.ga_data)[dout->dout_ga.ga_len++] = p;
+! }
+ return 0;
+ }
+
+--- 3206,3228 ----
+ xdiff_out(void *priv, mmbuffer_t *mb, int nbuf)
+ {
+ diffout_T *dout = (diffout_T *)priv;
+ char_u *p;
+
+! // The header line always comes by itself, text lines in at least two
+! // parts. We drop the text part.
+! if (nbuf > 1)
+! return 0;
+!
+! // sanity check
+! if (STRNCMP(mb[0].ptr, "@@ ", 3) != 0)
+! return 0;
+!
+! if (ga_grow(&dout->dout_ga, 1) == FAIL)
+! return -1;
+! p = vim_strnsave((char_u *)mb[0].ptr, mb[0].size);
+! if (p == NULL)
+! return -1;
+! ((char_u **)dout->dout_ga.ga_data)[dout->dout_ga.ga_len++] = p;
+ return 0;
+ }
+
+*** ../vim-8.1.0501/src/testdir/dumps/Test_diff_of_diff_01.dump 2018-10-31 22:56:45.057204778 +0100
+--- src/testdir/dumps/Test_diff_of_diff_01.dump 2018-10-31 22:50:13.168413846 +0100
+***************
+*** 0 ****
+--- 1,20 ----
++ | +0#0000e05#a8a8a8255@1|a+0#0000000#ffffff0@1| @32||+1&&| +0#0000e05#a8a8a8255@1>a+0#0000000#ffffff0@1| @32
++ | +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0@1| @32||+1&&| +0#0000e05#a8a8a8255@1|b+0#0000000#ffffff0@1| @32
++ | +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0@1| @32||+1&&| +0#0000e05#a8a8a8255@1|c+0#0000000#ffffff0@1| @32
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|@+0#0000000#5fd7ff255@1| |-|3|,|2| |+|5|,|7| |@@1| @19
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|d+0#0000000#5fd7ff255@1| @32
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|e+0#0000000#5fd7ff255@1| @32
++ | +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34||+1#0000000#ffffff0| +0#0000e05#a8a8a8255@1|f+0#0000000#5fd7ff255@1| @32
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
++ |[+1#0000000&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|A|l@1
++ | +0&&@74
+*** ../vim-8.1.0501/src/version.c 2018-10-30 22:15:51.591158966 +0100
+--- src/version.c 2018-10-31 22:52:09.667460292 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 502,
+ /**/
+
+--
+DINGO: You must spank her well and after you have spanked her you
+ may deal with her as you like and then ... spank me.
+AMAZING: And spank me!
+STUNNER: And me.
+LOVELY: And me.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0503 b/data/vim/patches/8.1.0503
new file mode 100644
index 000000000..e87e6d32b
--- /dev/null
+++ b/data/vim/patches/8.1.0503
@@ -0,0 +1,61 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0503
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0503
+Problem: Missing change to diff test. (Hirohito Higashi)
+Solution: Add the missing test function.
+Files: src/testdir/test_diffmode.vim
+
+
+*** ../vim-8.1.0502/src/testdir/test_diffmode.vim 2018-10-25 17:52:20.386489835 +0200
+--- src/testdir/test_diffmode.vim 2018-10-31 22:47:48.081600686 +0100
+***************
+*** 885,887 ****
+--- 885,907 ----
+ call StopVimInTerminal(buf)
+ call delete('Xtest_diff_cursorline')
+ endfunc
++
++ func Test_diff_of_diff()
++ if !CanRunVimInTerminal()
++ return
++ endif
++
++ call writefile([
++ \ 'call setline(1, ["aa","bb","cc","@@ -3,2 +5,7 @@","dd","ee","ff"])',
++ \ 'vnew',
++ \ 'call setline(1, ["aa","bb","cc"])',
++ \ 'windo diffthis',
++ \ ], 'Xtest_diff_diff')
++ let buf = RunVimInTerminal('-S Xtest_diff_diff', {})
++
++ call VerifyScreenDump(buf, 'Test_diff_of_diff_01', {})
++
++ " clean up
++ call StopVimInTerminal(buf)
++ call delete('Xtest_diff_diff')
++ endfunc
+*** ../vim-8.1.0502/src/version.c 2018-10-31 22:57:07.913017514 +0100
+--- src/version.c 2018-11-01 21:13:52.394235270 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 503,
+ /**/
+
+--
+"My particular problem is with registry entries, which seem to just
+accumulate like plastic coffee cups..." -- Paul Moore
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0504 b/data/vim/patches/8.1.0504
new file mode 100644
index 000000000..452ba1fa4
--- /dev/null
+++ b/data/vim/patches/8.1.0504
@@ -0,0 +1,112 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0504
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0504
+Problem: When CTRL-C is mapped it triggers InsertLeave.
+Solution: Make CTRL-C behave the same way when typed or used in a mapping.
+Files: src/edit.c, src/testdir/test_edit.vim
+
+
+*** ../vim-8.1.0503/src/edit.c 2018-09-30 21:43:17.179693404 +0200
+--- src/edit.c 2018-11-02 11:58:53.235548305 +0100
+***************
+*** 1048,1054 ****
+
+ if (ins_esc(&count, cmdchar, nomove))
+ {
+! if (cmdchar != 'r' && cmdchar != 'v')
+ ins_apply_autocmds(EVENT_INSERTLEAVE);
+ did_cursorhold = FALSE;
+ return (c == Ctrl_O);
+--- 1048,1057 ----
+
+ if (ins_esc(&count, cmdchar, nomove))
+ {
+! // When CTRL-C was typed got_int will be set, with the result
+! // that the autocommands won't be executed. When mapped got_int
+! // is not set, but let's keep the behavior the same.
+! if (cmdchar != 'r' && cmdchar != 'v' && c != Ctrl_C)
+ ins_apply_autocmds(EVENT_INSERTLEAVE);
+ did_cursorhold = FALSE;
+ return (c == Ctrl_O);
+***************
+*** 2408,2414 ****
+ int
+ vim_is_ctrl_x_key(int c)
+ {
+! /* Always allow ^R - let it's results then be checked */
+ if (c == Ctrl_R)
+ return TRUE;
+
+--- 2411,2417 ----
+ int
+ vim_is_ctrl_x_key(int c)
+ {
+! // Always allow ^R - let its results then be checked
+ if (c == Ctrl_R)
+ return TRUE;
+
+*** ../vim-8.1.0503/src/testdir/test_edit.vim 2018-07-28 17:07:48.608154066 +0200
+--- src/testdir/test_edit.vim 2018-11-02 11:50:34.466489066 +0100
+***************
+*** 1409,1411 ****
+--- 1409,1441 ----
+ bwipe XAltFile
+ call delete('XAltFile')
+ endfunc
++
++ func Test_leave_insert_autocmd()
++ new
++ au InsertLeave * let g:did_au = 1
++ let g:did_au = 0
++ call feedkeys("afoo\<Esc>", 'tx')
++ call assert_equal(1, g:did_au)
++ call assert_equal('foo', getline(1))
++
++ let g:did_au = 0
++ call feedkeys("Sbar\<C-C>", 'tx')
++ call assert_equal(0, g:did_au)
++ call assert_equal('bar', getline(1))
++
++ inoremap x xx<Esc>
++ let g:did_au = 0
++ call feedkeys("Saax", 'tx')
++ call assert_equal(1, g:did_au)
++ call assert_equal('aaxx', getline(1))
++
++ inoremap x xx<C-C>
++ let g:did_au = 0
++ call feedkeys("Sbbx", 'tx')
++ call assert_equal(0, g:did_au)
++ call assert_equal('bbxx', getline(1))
++
++ bwipe!
++ au! InsertLeave
++ iunmap x
++ endfunc
+*** ../vim-8.1.0503/src/version.c 2018-11-01 21:14:50.541818034 +0100
+--- src/version.c 2018-11-02 11:51:43.970086497 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 504,
+ /**/
+
+--
+ARTHUR: Who are you?
+TALL KNIGHT: We are the Knights Who Say "Ni"!
+BEDEVERE: No! Not the Knights Who Say "Ni"!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0505 b/data/vim/patches/8.1.0505
new file mode 100644
index 000000000..7a727227e
--- /dev/null
+++ b/data/vim/patches/8.1.0505
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0505
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0505
+Problem: Filter command test may fail if helplang is not set.
+Solution: Set 'helplang' for the test. (James McCoy, closes #3591)
+Files: src/testdir/test_filter_cmd.vim
+
+
+*** ../vim-8.1.0504/src/testdir/test_filter_cmd.vim 2018-10-25 13:31:33.833906872 +0200
+--- src/testdir/test_filter_cmd.vim 2018-11-03 18:56:58.515794558 +0100
+***************
+*** 105,112 ****
+--- 105,115 ----
+ unlet test_filter_c
+
+ " Test filtering :set command
++ let helplang=&helplang
++ set helplang=en
+ let res = join(split(execute("filter /^help/ set"), "\n")[1:], " ")
+ call assert_match('^\s*helplang=\w*$', res)
++ let &helplang=helplang
+
+ " Test filtering :llist command
+ call setloclist(0, [{"filename": "/path/vim.c"}, {"filename": "/path/vim.h"}, {"module": "Main.Test"}])
+*** ../vim-8.1.0504/src/version.c 2018-11-02 11:59:11.555438565 +0100
+--- src/version.c 2018-11-03 18:59:04.366949054 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 505,
+ /**/
+
+--
+Luxury. We used to have to get out of the lake at three o'clock in the
+morning, clean the lake, eat a handful of hot gravel, go to work at the
+mill every day for tuppence a month, come home, and Dad would beat us
+around the head and neck with a broken bottle, if we were LUCKY!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0506 b/data/vim/patches/8.1.0506
new file mode 100644
index 000000000..59ffe65cb
--- /dev/null
+++ b/data/vim/patches/8.1.0506
@@ -0,0 +1,58 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0506
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0506
+Problem: Modeline test fails when run by root.
+Solution: Set 'modeline' for the test. (James McCoy, closes #3592)
+Files: src/testdir/test_modeline.vim
+
+
+*** ../vim-8.1.0505/src/testdir/test_modeline.vim 2018-07-24 04:51:15.698271642 +0200
+--- src/testdir/test_modeline.vim 2018-11-03 19:05:48.120034025 +0100
+***************
+*** 1,9 ****
+ " Tests for parsing the modeline.
+
+ func Test_modeline_invalid()
+! " This was reading before allocated memory.
+ call writefile(['vi:0', 'nothing'], 'Xmodeline')
+ call assert_fails('split Xmodeline', 'E518:')
+ bwipe!
+ call delete('Xmodeline')
+ endfunc
+--- 1,12 ----
+ " Tests for parsing the modeline.
+
+ func Test_modeline_invalid()
+! " This was reading allocated memory in the past.
+ call writefile(['vi:0', 'nothing'], 'Xmodeline')
++ let modeline = &modeline
++ set modeline
+ call assert_fails('split Xmodeline', 'E518:')
++ let &modeline = modeline
+ bwipe!
+ call delete('Xmodeline')
+ endfunc
+*** ../vim-8.1.0505/src/version.c 2018-11-03 18:59:49.690644045 +0100
+--- src/version.c 2018-11-03 19:02:17.793624465 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 506,
+ /**/
+
+--
+Not too long ago, cut and paste was done with scissors and glue...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0507 b/data/vim/patches/8.1.0507
new file mode 100644
index 000000000..9e7a6a157
--- /dev/null
+++ b/data/vim/patches/8.1.0507
@@ -0,0 +1,102 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0507
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0507
+Problem: .raml files not properly detected.
+Solution: Recognize .raml as raml instead of yaml. (closes #3594)
+Files: runtime/filetype.vim, src/testdir/test_filetype.vim
+
+
+*** ../vim-8.1.0506/runtime/filetype.vim 2018-10-27 14:27:17.535786698 +0200
+--- runtime/filetype.vim 2018-11-03 19:45:12.980445332 +0100
+***************
+*** 1129,1135 ****
+ " PDF
+ au BufNewFile,BufRead *.pdf setf pdf
+
+! " PCMK - HAE - crm configure edit
+ au BufNewFile,BufRead *.pcmk setf pcmk
+
+ " Perl
+--- 1129,1135 ----
+ " PDF
+ au BufNewFile,BufRead *.pdf setf pdf
+
+! " PCMK - HAE - crm configure edit
+ au BufNewFile,BufRead *.pcmk setf pcmk
+
+ " Perl
+***************
+*** 1893,1900 ****
+ " Yacc or racc
+ au BufNewFile,BufRead *.y call dist#ft#FTy()
+
+! " Yaml or Raml
+! au BufNewFile,BufRead *.yaml,*.yml,*.raml setf yaml
+
+ " yum conf (close enough to dosini)
+ au BufNewFile,BufRead */etc/yum.conf setf dosini
+--- 1893,1903 ----
+ " Yacc or racc
+ au BufNewFile,BufRead *.y call dist#ft#FTy()
+
+! " Yaml
+! au BufNewFile,BufRead *.yaml,*.yml setf yaml
+!
+! " Raml
+! au BufNewFile,BufRead *.raml setf raml
+
+ " yum conf (close enough to dosini)
+ au BufNewFile,BufRead */etc/yum.conf setf dosini
+***************
+*** 2107,2113 ****
+ au BufNewFile,BufRead *.text,README setf text
+
+ " Help files match *.txt but should have a last line that is a modeline.
+! au BufNewFile,BufRead *.txt
+ \ if getline('$') !~ 'vim:.*ft=help'
+ \| setf text
+ \| endif
+--- 2110,2116 ----
+ au BufNewFile,BufRead *.text,README setf text
+
+ " Help files match *.txt but should have a last line that is a modeline.
+! au BufNewFile,BufRead *.txt
+ \ if getline('$') !~ 'vim:.*ft=help'
+ \| setf text
+ \| endif
+*** ../vim-8.1.0506/src/testdir/test_filetype.vim 2018-10-27 14:27:17.539786667 +0200
+--- src/testdir/test_filetype.vim 2018-11-03 19:45:43.716269306 +0100
+***************
+*** 495,500 ****
+--- 495,501 ----
+ \ 'xslt': ['file.xsl', 'file.xslt'],
+ \ 'yacc': ['file.yy', 'file.yxx', 'file.y++'],
+ \ 'yaml': ['file.yaml', 'file.yml'],
++ \ 'raml': ['file.raml'],
+ \ 'z8a': ['file.z8a'],
+ \ 'zimbu': ['file.zu'],
+ \ 'zimbutempl': ['file.zut'],
+*** ../vim-8.1.0506/src/version.c 2018-11-03 19:06:20.211795974 +0100
+--- src/version.c 2018-11-03 19:46:31.539992781 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 507,
+ /**/
+
+--
+Not too long ago, a program was something you watched on TV...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0508 b/data/vim/patches/8.1.0508
new file mode 100644
index 000000000..7c01ad83c
--- /dev/null
+++ b/data/vim/patches/8.1.0508
@@ -0,0 +1,85 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0508
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0508
+Problem: Suspend test fails when run by root.
+Solution: Accept both '$' and '#' for the prompt. (James McCoy, closes #3590)
+Files: src/testdir/test_suspend.vim
+
+
+*** ../vim-8.1.0507/src/testdir/test_suspend.vim 2018-09-22 21:36:38.158098521 +0200
+--- src/testdir/test_suspend.vim 2018-11-03 21:07:00.828850570 +0100
+***************
+*** 9,15 ****
+
+ let buf = term_start('/bin/sh')
+ " Wait for shell prompt.
+! call WaitForAssert({-> assert_match('$ $', term_getline(buf, '.'))})
+
+ call term_sendkeys(buf, v:progpath
+ \ . " --clean -X"
+--- 9,15 ----
+
+ let buf = term_start('/bin/sh')
+ " Wait for shell prompt.
+! call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))})
+
+ call term_sendkeys(buf, v:progpath
+ \ . " --clean -X"
+***************
+*** 26,32 ****
+ \ "\<C-Z>"]
+ " Suspend and wait for shell prompt.
+ call term_sendkeys(buf, suspend_cmd)
+! call WaitForAssert({-> assert_match('$ $', term_getline(buf, '.'))})
+
+ " Without 'autowrite', buffer should not be written.
+ call assert_equal(0, filereadable('Xfoo'))
+--- 26,32 ----
+ \ "\<C-Z>"]
+ " Suspend and wait for shell prompt.
+ call term_sendkeys(buf, suspend_cmd)
+! call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))})
+
+ " Without 'autowrite', buffer should not be written.
+ call assert_equal(0, filereadable('Xfoo'))
+***************
+*** 40,46 ****
+ call assert_equal(0, filereadable('Xfoo'))
+ call term_sendkeys(buf, ":suspend\<CR>")
+ " Wait for shell prompt.
+! call WaitForAssert({-> assert_match('$ $', term_getline(buf, '.'))})
+ call assert_equal(['foo'], readfile('Xfoo'))
+ call term_sendkeys(buf, "fg\<CR>")
+ call WaitForAssert({-> assert_equal(' 1 foo', term_getline(buf, '.'))})
+--- 40,46 ----
+ call assert_equal(0, filereadable('Xfoo'))
+ call term_sendkeys(buf, ":suspend\<CR>")
+ " Wait for shell prompt.
+! call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))})
+ call assert_equal(['foo'], readfile('Xfoo'))
+ call term_sendkeys(buf, "fg\<CR>")
+ call WaitForAssert({-> assert_equal(' 1 foo', term_getline(buf, '.'))})
+*** ../vim-8.1.0507/src/version.c 2018-11-03 19:52:11.333956689 +0100
+--- src/version.c 2018-11-03 21:08:12.980369622 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 508,
+ /**/
+
+--
+Not too long ago, compress was something you did to garbage...
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0509 b/data/vim/patches/8.1.0509
new file mode 100644
index 000000000..ef2ec4484
--- /dev/null
+++ b/data/vim/patches/8.1.0509
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0509
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0509
+Problem: Checking cwd not accessible fails for root. (James McCoy)
+Solution: Skip this part of the test for root. (closes #3595)
+Files: src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0508/src/testdir/test_terminal.vim 2018-10-19 16:53:36.732867808 +0200
+--- src/testdir/test_terminal.vim 2018-11-03 21:44:10.294516580 +0100
+***************
+*** 490,503 ****
+ call assert_fails("call term_start(&shell, {'cwd': 'Xdir'})", 'E475:')
+
+ " Case 3: Directory exists but is not accessible.
+! call mkdir('Xdir', '', '0600')
+! " return early if the directory permissions could not be set properly
+! if getfperm('Xdir')[2] == 'x'
+! call delete('Xdir', 'rf')
+! return
+ endif
+- call assert_fails("call term_start(&shell, {'cwd': 'Xdir'})", 'E475:')
+- call delete('Xdir', 'rf')
+ endfunc
+
+ func Test_terminal_servername()
+--- 490,506 ----
+ call assert_fails("call term_start(&shell, {'cwd': 'Xdir'})", 'E475:')
+
+ " Case 3: Directory exists but is not accessible.
+! " Skip this for root, it will be accessible anyway.
+! if $USER != 'root'
+! call mkdir('XdirNoAccess', '', '0600')
+! " return early if the directory permissions could not be set properly
+! if getfperm('XdirNoAccess')[2] == 'x'
+! call delete('XdirNoAccess', 'rf')
+! return
+! endif
+! call assert_fails("call term_start(&shell, {'cwd': 'XdirNoAccess'})", 'E475:')
+! call delete('XdirNoAccess', 'rf')
+ endif
+ endfunc
+
+ func Test_terminal_servername()
+*** ../vim-8.1.0508/src/version.c 2018-11-03 21:09:11.707978893 +0100
+--- src/version.c 2018-11-03 21:45:58.169817825 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 509,
+ /**/
+
+--
+Why doesn't Tarzan have a beard?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0510 b/data/vim/patches/8.1.0510
new file mode 100644
index 000000000..0f7276d98
--- /dev/null
+++ b/data/vim/patches/8.1.0510
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0510
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0510
+Problem: Filter test fails when $LANG is C.UTF-8.
+Solution: Set 'helplang' to "en" for any C language. (Christian Brabandt,
+ closes #3577)
+Files: src/option.c
+
+
+*** ../vim-8.1.0509/src/option.c 2018-10-25 13:31:33.829906902 +0200
+--- src/option.c 2018-11-04 14:34:39.233665491 +0100
+***************
+*** 4256,4267 ****
+ p_hlg = empty_option;
+ else
+ {
+! /* zh_CN becomes "cn", zh_TW becomes "tw". */
+ if (STRNICMP(p_hlg, "zh_", 3) == 0 && STRLEN(p_hlg) >= 5)
+ {
+ p_hlg[0] = TOLOWER_ASC(p_hlg[3]);
+ p_hlg[1] = TOLOWER_ASC(p_hlg[4]);
+ }
+ p_hlg[2] = NUL;
+ }
+ options[idx].flags |= P_ALLOCED;
+--- 4256,4273 ----
+ p_hlg = empty_option;
+ else
+ {
+! // zh_CN becomes "cn", zh_TW becomes "tw"
+ if (STRNICMP(p_hlg, "zh_", 3) == 0 && STRLEN(p_hlg) >= 5)
+ {
+ p_hlg[0] = TOLOWER_ASC(p_hlg[3]);
+ p_hlg[1] = TOLOWER_ASC(p_hlg[4]);
+ }
++ // any C like setting, such as C.UTF-8, becomes "en"
++ else if (STRLEN(p_hlg) >= 1 && *p_hlg == 'C')
++ {
++ p_hlg[0] = 'e';
++ p_hlg[1] = 'n';
++ }
+ p_hlg[2] = NUL;
+ }
+ options[idx].flags |= P_ALLOCED;
+*** ../vim-8.1.0509/src/version.c 2018-11-03 21:47:10.949346136 +0100
+--- src/version.c 2018-11-04 14:40:33.523200579 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 510,
+ /**/
+
+--
+FATHER: Did you kill all those guards?
+LAUNCELOT: Yes ... I'm very sorry ...
+FATHER: They cost fifty pounds each!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0511 b/data/vim/patches/8.1.0511
new file mode 100644
index 000000000..52ee8ab7a
--- /dev/null
+++ b/data/vim/patches/8.1.0511
@@ -0,0 +1,77 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0511
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0511
+Problem: ml_get error when calling a function with a range.
+Solution: Don't position the cursor after the last line.
+Files: src/userfunc.c, src/testdir/test_functions.vim
+
+
+*** ../vim-8.1.0510/src/userfunc.c 2018-10-25 13:31:33.833906872 +0200
+--- src/userfunc.c 2018-11-04 23:38:59.813826045 +0100
+***************
+*** 3149,3154 ****
+--- 3149,3161 ----
+ {
+ if (!eap->skip && eap->addr_count > 0)
+ {
++ if (lnum > curbuf->b_ml.ml_line_count)
++ {
++ // If the function deleted lines or switched to another buffer
++ // the line number may become invalid.
++ EMSG(_(e_invrange));
++ break;
++ }
+ curwin->w_cursor.lnum = lnum;
+ curwin->w_cursor.col = 0;
+ #ifdef FEAT_VIRTUALEDIT
+*** ../vim-8.1.0510/src/testdir/test_functions.vim 2018-10-07 18:43:02.524682045 +0200
+--- src/testdir/test_functions.vim 2018-11-04 23:33:21.703374164 +0100
+***************
+*** 1119,1121 ****
+--- 1119,1140 ----
+ call assert_fails('call Fsandbox()', 'E48:')
+ delfunc Fsandbox
+ endfunc
++
++ func EditAnotherFile()
++ let word = expand('<cword>')
++ edit Xfuncrange2
++ endfunc
++
++ func Test_func_range_with_edit()
++ " Define a function that edits another buffer, then call it with a range that
++ " is invalid in that buffer.
++ call writefile(['just one line'], 'Xfuncrange2')
++ new
++ call setline(1, range(10))
++ write Xfuncrange1
++ call assert_fails('5,8call EditAnotherFile()', 'E16:')
++
++ call delete('Xfuncrange1')
++ call delete('Xfuncrange2')
++ bwipe!
++ endfunc
+*** ../vim-8.1.0510/src/version.c 2018-11-04 14:40:42.347139567 +0100
+--- src/version.c 2018-11-04 23:36:30.146573147 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 511,
+ /**/
+
+--
+Proverb: A nightingale that forgets the lyrics is a hummingbird.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0512 b/data/vim/patches/8.1.0512
new file mode 100644
index 000000000..a101a0bba
--- /dev/null
+++ b/data/vim/patches/8.1.0512
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0512
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0512
+Problem: 'helplang' default is inconsistent for C and C.UTF-8.
+Solution: Don't accept a value unless it starts with two letters.
+Files: src/ex_cmds2.c
+
+
+*** ../vim-8.1.0511/src/ex_cmds2.c 2018-10-14 21:40:57.356848425 +0200
+--- src/ex_cmds2.c 2018-11-05 20:19:07.922777334 +0100
+***************
+*** 5359,5364 ****
+--- 5359,5374 ----
+
+ #if defined(FEAT_MULTI_LANG) || defined(PROTO)
+ /*
++ * Return TRUE when "lang" starts with a valid language name.
++ * Rejects NULL, empty string, "C", "C.UTF-8" and others.
++ */
++ static int
++ is_valid_mess_lang(char_u *lang)
++ {
++ return lang != NULL && ASCII_ISALPHA(lang[0]) && ASCII_ISALPHA(lang[1]);
++ }
++
++ /*
+ * Obtain the current messages language. Used to set the default for
+ * 'helplang'. May return NULL or an empty string.
+ */
+***************
+*** 5379,5395 ****
+ # endif
+ # else
+ p = mch_getenv((char_u *)"LC_ALL");
+! if (p == NULL || *p == NUL)
+ {
+ p = mch_getenv((char_u *)"LC_MESSAGES");
+! if (p == NULL || *p == NUL)
+ p = mch_getenv((char_u *)"LANG");
+ }
+ # endif
+ # ifdef WIN32
+ p = gettext_lang(p);
+ # endif
+! return p;
+ }
+ #endif
+
+--- 5389,5405 ----
+ # endif
+ # else
+ p = mch_getenv((char_u *)"LC_ALL");
+! if (!is_valid_mess_lang(p))
+ {
+ p = mch_getenv((char_u *)"LC_MESSAGES");
+! if (!is_valid_mess_lang(p))
+ p = mch_getenv((char_u *)"LANG");
+ }
+ # endif
+ # ifdef WIN32
+ p = gettext_lang(p);
+ # endif
+! return is_valid_mess_lang(p) ? p : NULL;
+ }
+ #endif
+
+*** ../vim-8.1.0511/src/version.c 2018-11-04 23:39:33.953644902 +0100
+--- src/version.c 2018-11-05 20:24:20.654263866 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 512,
+ /**/
+
+--
+Nothing is impossible for the man who doesn't have to do it.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0513 b/data/vim/patches/8.1.0513
new file mode 100644
index 000000000..e62c3aaf4
--- /dev/null
+++ b/data/vim/patches/8.1.0513
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0513
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0513
+Problem: No error for set diffopt+=algorithm:.
+Solution: Check for missing argument. (Hirohito Higashi, closes #3598)
+Files: src/diff.c, src/testdir/gen_opt_test.vim
+
+
+*** ../vim-8.1.0512/src/diff.c 2018-10-31 22:57:07.913017514 +0100
+--- src/diff.c 2018-11-05 21:17:35.763867796 +0100
+***************
+*** 2266,2271 ****
+--- 2266,2273 ----
+ p += 9;
+ diff_algorithm_new = XDF_HISTOGRAM_DIFF;
+ }
++ else
++ return FAIL;
+ }
+
+ if (*p != ',' && *p != NUL)
+*** ../vim-8.1.0512/src/testdir/gen_opt_test.vim 2018-06-23 19:22:45.614486258 +0200
+--- src/testdir/gen_opt_test.vim 2018-11-05 21:21:07.012543853 +0100
+***************
+*** 81,87 ****
+ \ 'cryptmethod': [['', 'zip'], ['xxx']],
+ \ 'cscopequickfix': [['', 's-', 's-,c+,e0'], ['xxx', 's,g,d']],
+ \ 'debug': [['', 'msg', 'msg', 'beep'], ['xxx']],
+! \ 'diffopt': [['', 'filler', 'icase,iwhite'], ['xxx']],
+ \ 'display': [['', 'lastline', 'lastline,uhex'], ['xxx']],
+ \ 'eadirection': [['', 'both', 'ver'], ['xxx', 'ver,hor']],
+ \ 'encoding': [['latin1'], ['xxx', '']],
+--- 81,87 ----
+ \ 'cryptmethod': [['', 'zip'], ['xxx']],
+ \ 'cscopequickfix': [['', 's-', 's-,c+,e0'], ['xxx', 's,g,d']],
+ \ 'debug': [['', 'msg', 'msg', 'beep'], ['xxx']],
+! \ 'diffopt': [['', 'filler', 'icase,iwhite'], ['xxx', 'algorithm:xxx', 'algorithm:']],
+ \ 'display': [['', 'lastline', 'lastline,uhex'], ['xxx']],
+ \ 'eadirection': [['', 'both', 'ver'], ['xxx', 'ver,hor']],
+ \ 'encoding': [['latin1'], ['xxx', '']],
+*** ../vim-8.1.0512/src/version.c 2018-11-05 20:25:48.804089622 +0100
+--- src/version.c 2018-11-05 21:19:58.913419770 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 513,
+ /**/
+
+--
+This is the polymorph virus! Follow these instructions carefully:
+1. Send this message to everybody you know.
+2. Format your harddisk.
+Thank you for your cooperation in spreading the most powerful virus ever!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0514 b/data/vim/patches/8.1.0514
new file mode 100644
index 000000000..497516db9
--- /dev/null
+++ b/data/vim/patches/8.1.0514
@@ -0,0 +1,1123 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0514
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0514
+Problem: CTRL-W ^ does not work when alternate buffer has no name.
+Solution: Use another method to split and edit the alternate buffer. (Jason
+ Franklin)
+Files: src/testdir/test_normal.vim, src/testdir/test_window_cmd.vim,
+ src/normal.c, src/window.c, runtime/doc/windows.txt
+
+
+*** ../vim-8.1.0513/src/testdir/test_normal.vim 2018-09-03 22:08:05.676736128 +0200
+--- src/testdir/test_normal.vim 2018-11-10 15:55:36.238319451 +0100
+***************
+*** 1,11 ****
+ " Test for various Normal mode commands
+
+! func! Setup_NewWindow()
+ 10new
+ call setline(1, range(1,100))
+ endfunc
+
+! func! MyFormatExpr()
+ " Adds '->$' at lines having numbers followed by trailing whitespace
+ for ln in range(v:lnum, v:lnum+v:count-1)
+ let line = getline(ln)
+--- 1,11 ----
+ " Test for various Normal mode commands
+
+! func Setup_NewWindow()
+ 10new
+ call setline(1, range(1,100))
+ endfunc
+
+! func MyFormatExpr()
+ " Adds '->$' at lines having numbers followed by trailing whitespace
+ for ln in range(v:lnum, v:lnum+v:count-1)
+ let line = getline(ln)
+***************
+*** 15,21 ****
+ endfor
+ endfunc
+
+! func! CountSpaces(type, ...)
+ " for testing operatorfunc
+ " will count the number of spaces
+ " and return the result in g:a
+--- 15,21 ----
+ endfor
+ endfunc
+
+! func CountSpaces(type, ...)
+ " for testing operatorfunc
+ " will count the number of spaces
+ " and return the result in g:a
+***************
+*** 35,41 ****
+ let @@ = reg_save
+ endfunc
+
+! func! OpfuncDummy(type, ...)
+ " for testing operatorfunc
+ let g:opt=&linebreak
+
+--- 35,41 ----
+ let @@ = reg_save
+ endfunc
+
+! func OpfuncDummy(type, ...)
+ " for testing operatorfunc
+ let g:opt=&linebreak
+
+***************
+*** 78,84 ****
+ bw!
+ endfunc
+
+! func! Test_normal01_keymodel()
+ call Setup_NewWindow()
+ " Test 1: depending on 'keymodel' <s-down> does something different
+ 50
+--- 78,84 ----
+ bw!
+ endfunc
+
+! func Test_normal01_keymodel()
+ call Setup_NewWindow()
+ " Test 1: depending on 'keymodel' <s-down> does something different
+ 50
+***************
+*** 112,118 ****
+ bw!
+ endfunc
+
+! func! Test_normal02_selectmode()
+ " some basic select mode tests
+ call Setup_NewWindow()
+ 50
+--- 112,118 ----
+ bw!
+ endfunc
+
+! func Test_normal02_selectmode()
+ " some basic select mode tests
+ call Setup_NewWindow()
+ 50
+***************
+*** 126,132 ****
+ bw!
+ endfunc
+
+! func! Test_normal02_selectmode2()
+ " some basic select mode tests
+ call Setup_NewWindow()
+ 50
+--- 126,132 ----
+ bw!
+ endfunc
+
+! func Test_normal02_selectmode2()
+ " some basic select mode tests
+ call Setup_NewWindow()
+ 50
+***************
+*** 136,142 ****
+ bw!
+ endfunc
+
+! func! Test_normal03_join()
+ " basic join test
+ call Setup_NewWindow()
+ 50
+--- 136,142 ----
+ bw!
+ endfunc
+
+! func Test_normal03_join()
+ " basic join test
+ call Setup_NewWindow()
+ 50
+***************
+*** 156,162 ****
+ bw!
+ endfunc
+
+! func! Test_normal04_filter()
+ " basic filter test
+ " only test on non windows platform
+ if has('win32')
+--- 156,162 ----
+ bw!
+ endfunc
+
+! func Test_normal04_filter()
+ " basic filter test
+ " only test on non windows platform
+ if has('win32')
+***************
+*** 182,188 ****
+ bw!
+ endfunc
+
+! func! Test_normal05_formatexpr()
+ " basic formatexpr test
+ call Setup_NewWindow()
+ %d_
+--- 182,188 ----
+ bw!
+ endfunc
+
+! func Test_normal05_formatexpr()
+ " basic formatexpr test
+ call Setup_NewWindow()
+ %d_
+***************
+*** 219,225 ****
+ set formatexpr=
+ endfunc
+
+! func! Test_normal06_formatprg()
+ " basic test for formatprg
+ " only test on non windows platform
+ if has('win32')
+--- 219,225 ----
+ set formatexpr=
+ endfunc
+
+! func Test_normal06_formatprg()
+ " basic test for formatprg
+ " only test on non windows platform
+ if has('win32')
+***************
+*** 253,259 ****
+ call delete('Xsed_format.sh')
+ endfunc
+
+! func! Test_normal07_internalfmt()
+ " basic test for internal formmatter to textwidth of 12
+ let list=range(1,11)
+ call map(list, 'v:val." "')
+--- 253,259 ----
+ call delete('Xsed_format.sh')
+ endfunc
+
+! func Test_normal07_internalfmt()
+ " basic test for internal formmatter to textwidth of 12
+ let list=range(1,11)
+ call map(list, 'v:val." "')
+***************
+*** 267,273 ****
+ bw!
+ endfunc
+
+! func! Test_normal08_fold()
+ " basic tests for foldopen/folddelete
+ if !has("folding")
+ return
+--- 267,273 ----
+ bw!
+ endfunc
+
+! func Test_normal08_fold()
+ " basic tests for foldopen/folddelete
+ if !has("folding")
+ return
+***************
+*** 326,332 ****
+ bw!
+ endfunc
+
+! func! Test_normal09_operatorfunc()
+ " Test operatorfunc
+ call Setup_NewWindow()
+ " Add some spaces for counting
+--- 326,332 ----
+ bw!
+ endfunc
+
+! func Test_normal09_operatorfunc()
+ " Test operatorfunc
+ call Setup_NewWindow()
+ " Add some spaces for counting
+***************
+*** 356,362 ****
+ bw!
+ endfunc
+
+! func! Test_normal09a_operatorfunc()
+ " Test operatorfunc
+ call Setup_NewWindow()
+ " Add some spaces for counting
+--- 356,362 ----
+ bw!
+ endfunc
+
+! func Test_normal09a_operatorfunc()
+ " Test operatorfunc
+ call Setup_NewWindow()
+ " Add some spaces for counting
+***************
+*** 382,388 ****
+ unlet! g:opt
+ endfunc
+
+! func! Test_normal10_expand()
+ " Test for expand()
+ 10new
+ call setline(1, ['1', 'ifooar,,cbar'])
+--- 382,388 ----
+ unlet! g:opt
+ endfunc
+
+! func Test_normal10_expand()
+ " Test for expand()
+ 10new
+ call setline(1, ['1', 'ifooar,,cbar'])
+***************
+*** 417,423 ****
+ bw!
+ endfunc
+
+! func! Test_normal11_showcmd()
+ " test for 'showcmd'
+ 10new
+ exe "norm! ofoobar\<esc>"
+--- 417,423 ----
+ bw!
+ endfunc
+
+! func Test_normal11_showcmd()
+ " test for 'showcmd'
+ 10new
+ exe "norm! ofoobar\<esc>"
+***************
+*** 432,438 ****
+ bw!
+ endfunc
+
+! func! Test_normal12_nv_error()
+ " Test for nv_error
+ 10new
+ call setline(1, range(1,5))
+--- 432,438 ----
+ bw!
+ endfunc
+
+! func Test_normal12_nv_error()
+ " Test for nv_error
+ 10new
+ call setline(1, range(1,5))
+***************
+*** 442,448 ****
+ bw!
+ endfunc
+
+! func! Test_normal13_help()
+ " Test for F1
+ call assert_equal(1, winnr())
+ call feedkeys("\<f1>", 'txi')
+--- 442,448 ----
+ bw!
+ endfunc
+
+! func Test_normal13_help()
+ " Test for F1
+ call assert_equal(1, winnr())
+ call feedkeys("\<f1>", 'txi')
+***************
+*** 451,457 ****
+ bw!
+ endfunc
+
+! func! Test_normal14_page()
+ " basic test for Ctrl-F and Ctrl-B
+ call Setup_NewWindow()
+ exe "norm! \<c-f>"
+--- 451,457 ----
+ bw!
+ endfunc
+
+! func Test_normal14_page()
+ " basic test for Ctrl-F and Ctrl-B
+ call Setup_NewWindow()
+ exe "norm! \<c-f>"
+***************
+*** 485,491 ****
+ bw!
+ endfunc
+
+! func! Test_normal14_page_eol()
+ 10new
+ norm oxxxxxxx
+ exe "norm 2\<c-f>"
+--- 485,491 ----
+ bw!
+ endfunc
+
+! func Test_normal14_page_eol()
+ 10new
+ norm oxxxxxxx
+ exe "norm 2\<c-f>"
+***************
+*** 494,500 ****
+ bw!
+ endfunc
+
+! func! Test_normal15_z_scroll_vert()
+ " basic test for z commands that scroll the window
+ call Setup_NewWindow()
+ 100
+--- 494,500 ----
+ bw!
+ endfunc
+
+! func Test_normal15_z_scroll_vert()
+ " basic test for z commands that scroll the window
+ call Setup_NewWindow()
+ 100
+***************
+*** 583,589 ****
+ bw!
+ endfunc
+
+! func! Test_normal16_z_scroll_hor()
+ " basic test for z commands that scroll the window
+ 10new
+ 15vsp
+--- 583,589 ----
+ bw!
+ endfunc
+
+! func Test_normal16_z_scroll_hor()
+ " basic test for z commands that scroll the window
+ 10new
+ 15vsp
+***************
+*** 649,655 ****
+ bw!
+ endfunc
+
+! func! Test_normal17_z_scroll_hor2()
+ " basic test for z commands that scroll the window
+ " using 'sidescrolloff' setting
+ 10new
+--- 649,655 ----
+ bw!
+ endfunc
+
+! func Test_normal17_z_scroll_hor2()
+ " basic test for z commands that scroll the window
+ " using 'sidescrolloff' setting
+ 10new
+***************
+*** 716,722 ****
+ bw!
+ endfunc
+
+! func! Test_normal18_z_fold()
+ " basic tests for foldopen/folddelete
+ if !has("folding")
+ return
+--- 716,722 ----
+ bw!
+ endfunc
+
+! func Test_normal18_z_fold()
+ " basic tests for foldopen/folddelete
+ if !has("folding")
+ return
+***************
+*** 1087,1093 ****
+ bw!
+ endfunc
+
+! func! Test_normal19_z_spell()
+ if !has("spell") || !has('syntax')
+ return
+ endif
+--- 1087,1093 ----
+ bw!
+ endfunc
+
+! func Test_normal19_z_spell()
+ if !has("spell") || !has('syntax')
+ return
+ endif
+***************
+*** 1241,1247 ****
+ bw!
+ endfunc
+
+! func! Test_normal20_exmode()
+ if !has("unix")
+ " Reading from redirected file doesn't work on MS-Windows
+ return
+--- 1241,1247 ----
+ bw!
+ endfunc
+
+! func Test_normal20_exmode()
+ if !has("unix")
+ " Reading from redirected file doesn't work on MS-Windows
+ return
+***************
+*** 1259,1282 ****
+ bw!
+ endfunc
+
+! func! Test_normal21_nv_hat()
+! set hidden
+! new
+! " to many buffers opened already, will not work
+! "call assert_fails(":b#", 'E23')
+! "call assert_equal('', @#)
+! e Xfoobar
+! e Xfile2
+! call feedkeys("\<c-^>", 't')
+! call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t'))
+! call feedkeys("f\<c-^>", 't')
+! call assert_equal("Xfile2", fnamemodify(bufname('%'), ':t'))
+! " clean up
+! set nohidden
+! bw!
+ endfunc
+
+! func! Test_normal22_zet()
+ " Test for ZZ
+ " let shell = &shell
+ " let &shell = 'sh'
+--- 1259,1296 ----
+ bw!
+ endfunc
+
+! func Test_normal21_nv_hat()
+!
+! " Edit a fresh file and wipe the buffer list so that there is no alternate
+! " file present. Next, check for the expected command failures.
+! edit Xfoo | %bw
+! call assert_fails(':buffer #', 'E86')
+! call assert_fails(':execute "normal! \<C-^>"', 'E23')
+!
+! " Test for the expected behavior when switching between two named buffers.
+! edit Xfoo | edit Xbar
+! call feedkeys("\<C-^>", 'tx')
+! call assert_equal('Xfoo', fnamemodify(bufname('%'), ':t'))
+! call feedkeys("\<C-^>", 'tx')
+! call assert_equal('Xbar', fnamemodify(bufname('%'), ':t'))
+!
+! " Test for the expected behavior when only one buffer is named.
+! enew | let l:nr = bufnr('%')
+! call feedkeys("\<C-^>", 'tx')
+! call assert_equal('Xbar', fnamemodify(bufname('%'), ':t'))
+! call feedkeys("\<C-^>", 'tx')
+! call assert_equal('', bufname('%'))
+! call assert_equal(l:nr, bufnr('%'))
+!
+! " Test that no action is taken by "<C-^>" when an operator is pending.
+! edit Xfoo
+! call feedkeys("ci\<C-^>", 'tx')
+! call assert_equal('Xfoo', fnamemodify(bufname('%'), ':t'))
+!
+! %bw!
+ endfunc
+
+! func Test_normal22_zet()
+ " Test for ZZ
+ " let shell = &shell
+ " let &shell = 'sh'
+***************
+*** 1298,1304 ****
+ " let &shell = shell
+ endfunc
+
+! func! Test_normal23_K()
+ " Test for K command
+ new
+ call append(0, ['version8.txt', 'man', 'aa%bb', 'cc|dd'])
+--- 1312,1318 ----
+ " let &shell = shell
+ endfunc
+
+! func Test_normal23_K()
+ " Test for K command
+ new
+ call append(0, ['version8.txt', 'man', 'aa%bb', 'cc|dd'])
+***************
+*** 1353,1359 ****
+ bw!
+ endfunc
+
+! func! Test_normal24_rot13()
+ " This test uses multi byte characters
+ if !has("multi_byte")
+ return
+--- 1367,1373 ----
+ bw!
+ endfunc
+
+! func Test_normal24_rot13()
+ " This test uses multi byte characters
+ if !has("multi_byte")
+ return
+***************
+*** 1371,1377 ****
+ bw!
+ endfunc
+
+! func! Test_normal25_tag()
+ " Testing for CTRL-] g CTRL-] g]
+ " CTRL-W g] CTRL-W CTRL-] CTRL-W g CTRL-]
+ h
+--- 1385,1391 ----
+ bw!
+ endfunc
+
+! func Test_normal25_tag()
+ " Testing for CTRL-] g CTRL-] g]
+ " CTRL-W g] CTRL-W CTRL-] CTRL-W g CTRL-]
+ h
+***************
+*** 1438,1444 ****
+ helpclose
+ endfunc
+
+! func! Test_normal26_put()
+ " Test for ]p ]P [p and [P
+ new
+ call append(0, ['while read LINE', 'do', ' ((count++))', ' if [ $? -ne 0 ]; then', " echo 'Error writing file'", ' fi', 'done'])
+--- 1452,1458 ----
+ helpclose
+ endfunc
+
+! func Test_normal26_put()
+ " Test for ]p ]P [p and [P
+ new
+ call append(0, ['while read LINE', 'do', ' ((count++))', ' if [ $? -ne 0 ]; then', " echo 'Error writing file'", ' fi', 'done'])
+***************
+*** 1457,1463 ****
+ bw!
+ endfunc
+
+! func! Test_normal27_bracket()
+ " Test for [' [` ]' ]`
+ call Setup_NewWindow()
+ 1,21s/.\+/ & b/
+--- 1471,1477 ----
+ bw!
+ endfunc
+
+! func Test_normal27_bracket()
+ " Test for [' [` ]' ]`
+ call Setup_NewWindow()
+ 1,21s/.\+/ & b/
+***************
+*** 1508,1514 ****
+ bw!
+ endfunc
+
+! func! Test_normal28_parenthesis()
+ " basic testing for ( and )
+ new
+ call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here'])
+--- 1522,1528 ----
+ bw!
+ endfunc
+
+! func Test_normal28_parenthesis()
+ " basic testing for ( and )
+ new
+ call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here'])
+***************
+*** 1705,1711 ****
+ bw!
+ endfunc
+
+! func! Test_normal32_g_cmd1()
+ " Test for g*, g#
+ new
+ call append(0, ['abc.x_foo', 'x_foobar.abc'])
+--- 1719,1725 ----
+ bw!
+ endfunc
+
+! func Test_normal32_g_cmd1()
+ " Test for g*, g#
+ new
+ call append(0, ['abc.x_foo', 'x_foobar.abc'])
+***************
+*** 1836,1842 ****
+ bw!
+ endfunc
+
+! func! Test_g_ctrl_g()
+ new
+
+ let a = execute(":norm! g\<c-g>")
+--- 1850,1856 ----
+ bw!
+ endfunc
+
+! func Test_g_ctrl_g()
+ new
+
+ let a = execute(":norm! g\<c-g>")
+***************
+*** 2134,2140 ****
+ bw!
+ endfunc
+
+! func! Test_normal42_halfpage()
+ " basic test for Ctrl-D and Ctrl-U
+ call Setup_NewWindow()
+ call assert_equal(5, &scroll)
+--- 2148,2154 ----
+ bw!
+ endfunc
+
+! func Test_normal42_halfpage()
+ " basic test for Ctrl-D and Ctrl-U
+ call Setup_NewWindow()
+ call assert_equal(5, &scroll)
+***************
+*** 2202,2208 ****
+ bw!
+ endfunc
+
+! func! Test_normal44_textobjects2()
+ " basic testing for is and as text objects
+ new
+ call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here'])
+--- 2216,2222 ----
+ bw!
+ endfunc
+
+! func Test_normal44_textobjects2()
+ " basic testing for is and as text objects
+ new
+ call append(0, ['This is a test. With some sentences!', '', 'Even with a question? And one more. And no sentence here'])
+***************
+*** 2257,2263 ****
+ bw!
+ endfunc
+
+! func! Test_normal45_drop()
+ if !has('dnd')
+ " The ~ register does not exist
+ call assert_beeps('norm! "~')
+--- 2271,2277 ----
+ bw!
+ endfunc
+
+! func Test_normal45_drop()
+ if !has('dnd')
+ " The ~ register does not exist
+ call assert_beeps('norm! "~')
+***************
+*** 2275,2281 ****
+ bw!
+ endfunc
+
+! func! Test_normal46_ignore()
+ " This test uses multi byte characters
+ if !has("multi_byte")
+ return
+--- 2289,2295 ----
+ bw!
+ endfunc
+
+! func Test_normal46_ignore()
+ " This test uses multi byte characters
+ if !has("multi_byte")
+ return
+***************
+*** 2299,2305 ****
+ bw!
+ endfunc
+
+! func! Test_normal47_visual_buf_wipe()
+ " This was causing a crash or ml_get error.
+ enew!
+ call setline(1,'xxx')
+--- 2313,2319 ----
+ bw!
+ endfunc
+
+! func Test_normal47_visual_buf_wipe()
+ " This was causing a crash or ml_get error.
+ enew!
+ call setline(1,'xxx')
+***************
+*** 2313,2319 ****
+ set nomodified
+ endfunc
+
+! func! Test_normal47_autocmd()
+ " disabled, does not seem to be possible currently
+ throw "Skipped: not possible to test cursorhold autocmd while waiting for input in normal_cmd"
+ new
+--- 2327,2333 ----
+ set nomodified
+ endfunc
+
+! func Test_normal47_autocmd()
+ " disabled, does not seem to be possible currently
+ throw "Skipped: not possible to test cursorhold autocmd while waiting for input in normal_cmd"
+ new
+***************
+*** 2331,2344 ****
+ bw!
+ endfunc
+
+! func! Test_normal48_wincmd()
+ new
+ exe "norm! \<c-w>c"
+ call assert_equal(1, winnr('$'))
+ call assert_fails(":norm! \<c-w>c", "E444")
+ endfunc
+
+! func! Test_normal49_counts()
+ new
+ call setline(1, 'one two three four five six seven eight nine ten')
+ 1
+--- 2345,2358 ----
+ bw!
+ endfunc
+
+! func Test_normal48_wincmd()
+ new
+ exe "norm! \<c-w>c"
+ call assert_equal(1, winnr('$'))
+ call assert_fails(":norm! \<c-w>c", "E444")
+ endfunc
+
+! func Test_normal49_counts()
+ new
+ call setline(1, 'one two three four five six seven eight nine ten')
+ 1
+***************
+*** 2347,2353 ****
+ bw!
+ endfunc
+
+! func! Test_normal50_commandline()
+ if !has("timers") || !has("cmdline_hist")
+ return
+ endif
+--- 2361,2367 ----
+ bw!
+ endfunc
+
+! func Test_normal50_commandline()
+ if !has("timers") || !has("cmdline_hist")
+ return
+ endif
+***************
+*** 2378,2384 ****
+ bw!
+ endfunc
+
+! func! Test_normal51_FileChangedRO()
+ if !has("autocmd")
+ return
+ endif
+--- 2392,2398 ----
+ bw!
+ endfunc
+
+! func Test_normal51_FileChangedRO()
+ if !has("autocmd")
+ return
+ endif
+***************
+*** 2398,2404 ****
+ call delete("Xreadonly.log")
+ endfunc
+
+! func! Test_normal52_rl()
+ if !has("rightleft")
+ return
+ endif
+--- 2412,2418 ----
+ call delete("Xreadonly.log")
+ endfunc
+
+! func Test_normal52_rl()
+ if !has("rightleft")
+ return
+ endif
+***************
+*** 2431,2437 ****
+ bw!
+ endfunc
+
+! func! Test_normal53_digraph()
+ if !has('digraphs')
+ return
+ endif
+--- 2445,2451 ----
+ bw!
+ endfunc
+
+! func Test_normal53_digraph()
+ if !has('digraphs')
+ return
+ endif
+***************
+*** 2532,2534 ****
+--- 2546,2571 ----
+ %bwipe!
+ let &ul = save_ul
+ endfunc
++
++ func Test_nv_hat_count()
++ %bwipeout!
++ let l:nr = bufnr('%') + 1
++ call assert_fails(':execute "normal! ' . l:nr . '\<C-^>"', 'E92')
++
++ edit Xfoo
++ let l:foo_nr = bufnr('Xfoo')
++
++ edit Xbar
++ let l:bar_nr = bufnr('Xbar')
++
++ " Make sure we are not just using the alternate file.
++ edit Xbaz
++
++ call feedkeys(l:foo_nr . "\<C-^>", 'tx')
++ call assert_equal('Xfoo', fnamemodify(bufname('%'), ':t'))
++
++ call feedkeys(l:bar_nr . "\<C-^>", 'tx')
++ call assert_equal('Xbar', fnamemodify(bufname('%'), ':t'))
++
++ %bwipeout!
++ endfunc
+*** ../vim-8.1.0513/src/testdir/test_window_cmd.vim 2018-05-10 18:19:36.000000000 +0200
+--- src/testdir/test_window_cmd.vim 2018-11-10 15:47:05.614643165 +0100
+***************
+*** 103,117 ****
+ bw
+ endfunc
+
+ func Test_window_split_edit_alternate()
+- e Xa
+- e Xb
+
+ wincmd ^
+! call assert_equal('Xa', bufname(winbufnr(1)))
+! call assert_equal('Xb', bufname(winbufnr(2)))
+
+! bw Xa Xb
+ endfunc
+
+ func Test_window_preview()
+--- 103,167 ----
+ bw
+ endfunc
+
++ " Test the ":wincmd ^" and "<C-W>^" commands.
+ func Test_window_split_edit_alternate()
+
++ " Test for failure when the alternate buffer/file no longer exists.
++ edit Xfoo | %bw
++ call assert_fails(':wincmd ^', 'E23')
++
++ " Test for the expected behavior when we have two named buffers.
++ edit Xfoo | edit Xbar
+ wincmd ^
+! call assert_equal('Xfoo', bufname(winbufnr(1)))
+! call assert_equal('Xbar', bufname(winbufnr(2)))
+! only
+!
+! " Test for the expected behavior when the alternate buffer is not named.
+! enew | let l:nr1 = bufnr('%')
+! edit Xfoo | let l:nr2 = bufnr('%')
+! wincmd ^
+! call assert_equal(l:nr1, winbufnr(1))
+! call assert_equal(l:nr2, winbufnr(2))
+! only
+!
+! " Test the Normal mode command.
+! call feedkeys("\<C-W>\<C-^>", 'tx')
+! call assert_equal(l:nr2, winbufnr(1))
+! call assert_equal(l:nr1, winbufnr(2))
+!
+! %bw!
+! endfunc
+!
+! " Test the ":[count]wincmd ^" and "[count]<C-W>^" commands.
+! func Test_window_split_edit_bufnr()
+!
+! %bwipeout
+! let l:nr = bufnr('%') + 1
+! call assert_fails(':execute "normal! ' . l:nr . '\<C-W>\<C-^>"', 'E92')
+! call assert_fails(':' . l:nr . 'wincmd ^', 'E16')
+! call assert_fails(':0wincmd ^', 'E16')
+!
+! edit Xfoo | edit Xbar | edit Xbaz
+! let l:foo_nr = bufnr('Xfoo')
+! let l:bar_nr = bufnr('Xbar')
+! let l:baz_nr = bufnr('Xbaz')
+!
+! call feedkeys(l:foo_nr . "\<C-W>\<C-^>", 'tx')
+! call assert_equal('Xfoo', bufname(winbufnr(1)))
+! call assert_equal('Xbaz', bufname(winbufnr(2)))
+! only
+!
+! call feedkeys(l:bar_nr . "\<C-W>\<C-^>", 'tx')
+! call assert_equal('Xbar', bufname(winbufnr(1)))
+! call assert_equal('Xfoo', bufname(winbufnr(2)))
+! only
+!
+! execute l:baz_nr . 'wincmd ^'
+! call assert_equal('Xbaz', bufname(winbufnr(1)))
+! call assert_equal('Xbar', bufname(winbufnr(2)))
+
+! %bw!
+ endfunc
+
+ func Test_window_preview()
+***************
+*** 322,328 ****
+ set equalalways
+ vsplit
+ windo split
+! split
+ wincmd J
+ " now we have a frame top-left with two windows, a frame top-right with two
+ " windows and a frame at the bottom, full-width.
+--- 372,378 ----
+ set equalalways
+ vsplit
+ windo split
+! split
+ wincmd J
+ " now we have a frame top-left with two windows, a frame top-right with two
+ " windows and a frame at the bottom, full-width.
+*** ../vim-8.1.0513/src/normal.c 2018-09-30 21:43:17.199693265 +0200
+--- src/normal.c 2018-11-10 15:47:05.610643198 +0100
+***************
+*** 5496,5502 ****
+ }
+
+ /*
+! * CTRL-^ command, short for ":e #"
+ */
+ static void
+ nv_hat(cmdarg_T *cap)
+--- 5496,5503 ----
+ }
+
+ /*
+! * CTRL-^ command, short for ":e #". Works even when the alternate buffer is
+! * not named.
+ */
+ static void
+ nv_hat(cmdarg_T *cap)
+*** ../vim-8.1.0513/src/window.c 2018-09-30 21:43:17.207693209 +0200
+--- src/window.c 2018-11-10 15:53:58.843143892 +0100
+***************
+*** 151,158 ****
+ case '^':
+ CHECK_CMDWIN;
+ reset_VIsual_and_resel(); /* stop Visual mode */
+! cmd_with_count("split #", cbuf, sizeof(cbuf), Prenum);
+! do_cmdline_cmd(cbuf);
+ break;
+
+ /* open new window */
+--- 151,171 ----
+ case '^':
+ CHECK_CMDWIN;
+ reset_VIsual_and_resel(); /* stop Visual mode */
+!
+! if (buflist_findnr(Prenum == 0
+! ? curwin->w_alt_fnum : Prenum) == NULL)
+! {
+! if (Prenum == 0)
+! EMSG(_(e_noalt));
+! else
+! EMSGN(_("E92: Buffer %ld not found"), Prenum);
+! break;
+! }
+!
+! if (!curbuf_locked() && win_split(0, 0) == OK)
+! (void)buflist_getfile(
+! Prenum == 0 ? curwin->w_alt_fnum : Prenum,
+! (linenr_T)0, GETF_ALT, FALSE);
+ break;
+
+ /* open new window */
+*** ../vim-8.1.0513/runtime/doc/windows.txt 2018-05-17 13:42:04.000000000 +0200
+--- runtime/doc/windows.txt 2018-11-10 15:47:05.614643165 +0100
+***************
+*** 81,86 ****
+--- 81,90 ----
+ functions can be used to convert between the window/tab number and the
+ identifier. There is also the window number, which may change whenever
+ windows are opened or closed, see |winnr()|.
++ The window number is only valid in one specific tab. The window ID is valid
++ across tabs. For most functions that take a window ID or a window number, the
++ window number only applies to the current tab, while the window ID can refer
++ to a window in any tab.
+
+ Each buffer has a unique number and the number will not change within a Vim
+ session. The |bufnr()| and |bufname()| functions can be used to convert
+***************
+*** 218,231 ****
+ |:find|. Doesn't split if {file} is not found.
+
+ CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
+! CTRL-W ^ Does ":split #", split window in two and edit alternate file.
+! When a count is given, it becomes ":split #N", split window
+! and edit buffer N.
+
+ *CTRL-W_:*
+! CTRL-W : Does the same as typing |:| : edit a command line. Useful in a
+ terminal window, where all Vim commands must be preceded with
+! CTRL-W or 'termkey'.
+
+ Note that the 'splitbelow' and 'splitright' options influence where a new
+ window will appear.
+--- 222,237 ----
+ |:find|. Doesn't split if {file} is not found.
+
+ CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
+! CTRL-W ^ Split the current window in two and edit the alternate file.
+! When a count N is given, split the current window and edit
+! buffer N. Similar to ":sp #" and ":sp #N", but it allows the
+! other buffer to be unnamed. This command matches the behavior
+! of |CTRL-^|, except that it splits a window first.
+
+ *CTRL-W_:*
+! CTRL-W : Does the same as typing |:| - enter a command line. Useful in a
+ terminal window, where all Vim commands must be preceded with
+! CTRL-W or 'termwinkey'.
+
+ Note that the 'splitbelow' and 'splitright' options influence where a new
+ window will appear.
+*** ../vim-8.1.0513/src/version.c 2018-11-05 21:21:29.800286334 +0100
+--- src/version.c 2018-11-10 15:49:12.537568074 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 514,
+ /**/
+
+--
+The question is: What do you do with your life?
+The wrong answer is: Become the richest guy in the graveyard.
+ (billionaire and Oracle founder Larry Ellison)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0515 b/data/vim/patches/8.1.0515
new file mode 100644
index 000000000..89d85ffac
--- /dev/null
+++ b/data/vim/patches/8.1.0515
@@ -0,0 +1,265 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0515
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0515
+Problem: Reloading a script gives errors for existing functions.
+Solution: Allow redefining a function once when reloading a script.
+Files: src/testdir/test_functions.vim, src/userfunc.c, src/structs.h,
+ src/globals.h, src/buffer.c, src/ex_cmds2.c, src/main.c,
+ src/option.c, runtime/doc/eval.txt
+
+
+*** ../vim-8.1.0514/src/testdir/test_functions.vim 2018-11-04 23:39:33.953644902 +0100
+--- src/testdir/test_functions.vim 2018-11-10 16:54:47.043813092 +0100
+***************
+*** 1138,1140 ****
+--- 1138,1167 ----
+ call delete('Xfuncrange2')
+ bwipe!
+ endfunc
++
++ func Test_func_exists_on_reload()
++ call writefile(['func ExistingFunction()', 'echo "yes"', 'endfunc'], 'Xfuncexists')
++ call assert_equal(0, exists('*ExistingFunction'))
++ source Xfuncexists
++ call assert_equal(1, exists('*ExistingFunction'))
++ " Redefining a function when reloading a script is OK.
++ source Xfuncexists
++ call assert_equal(1, exists('*ExistingFunction'))
++
++ " But redefining in another script is not OK.
++ call writefile(['func ExistingFunction()', 'echo "yes"', 'endfunc'], 'Xfuncexists2')
++ call assert_fails('source Xfuncexists2', 'E122:')
++
++ delfunc ExistingFunction
++ call assert_equal(0, exists('*ExistingFunction'))
++ call writefile([
++ \ 'func ExistingFunction()', 'echo "yes"', 'endfunc',
++ \ 'func ExistingFunction()', 'echo "no"', 'endfunc',
++ \ ], 'Xfuncexists')
++ call assert_fails('source Xfuncexists', 'E122:')
++ call assert_equal(1, exists('*ExistingFunction'))
++
++ call delete('Xfuncexists2')
++ call delete('Xfuncexists')
++ delfunc ExistingFunction
++ endfunc
+*** ../vim-8.1.0514/src/userfunc.c 2018-11-04 23:39:33.953644902 +0100
+--- src/userfunc.c 2018-11-10 16:48:35.046279419 +0100
+***************
+*** 2330,2343 ****
+ fp = find_func(name);
+ if (fp != NULL)
+ {
+! if (!eap->forceit)
+ {
+ emsg_funcname(e_funcexts, name);
+ goto erret;
+ }
+ if (fp->uf_calls > 0)
+ {
+! emsg_funcname(N_("E127: Cannot redefine function %s: It is in use"),
+ name);
+ goto erret;
+ }
+--- 2330,2348 ----
+ fp = find_func(name);
+ if (fp != NULL)
+ {
+! // Function can be replaced with "function!" and when sourcing the
+! // same script again, but only once.
+! if (!eap->forceit
+! && (fp->uf_script_ctx.sc_sid != current_sctx.sc_sid
+! || fp->uf_script_ctx.sc_seq == current_sctx.sc_seq))
+ {
+ emsg_funcname(e_funcexts, name);
+ goto erret;
+ }
+ if (fp->uf_calls > 0)
+ {
+! emsg_funcname(
+! N_("E127: Cannot redefine function %s: It is in use"),
+ name);
+ goto erret;
+ }
+*** ../vim-8.1.0514/src/structs.h 2018-10-19 22:35:04.889189955 +0200
+--- src/structs.h 2018-11-10 16:33:16.847566578 +0100
+***************
+*** 84,89 ****
+--- 84,90 ----
+ */
+ typedef struct {
+ scid_T sc_sid; // script ID
++ int sc_seq; // sourcing sequence number
+ linenr_T sc_lnum; // line number
+ } sctx_T;
+
+*** ../vim-8.1.0514/src/globals.h 2018-09-13 15:33:39.609712174 +0200
+--- src/globals.h 2018-11-10 16:33:30.455464981 +0100
+***************
+*** 326,332 ****
+ EXTERN int garbage_collect_at_exit INIT(= FALSE);
+
+ // Script CTX being sourced or was sourced to define the current function.
+! EXTERN sctx_T current_sctx INIT(= {0 COMMA 0});
+ #endif
+
+ EXTERN int did_source_packages INIT(= FALSE);
+--- 326,332 ----
+ EXTERN int garbage_collect_at_exit INIT(= FALSE);
+
+ // Script CTX being sourced or was sourced to define the current function.
+! EXTERN sctx_T current_sctx INIT(= {0 COMMA 0 COMMA 0});
+ #endif
+
+ EXTERN int did_source_packages INIT(= FALSE);
+*** ../vim-8.1.0514/src/buffer.c 2018-10-11 19:27:43.916066156 +0200
+--- src/buffer.c 2018-11-10 16:34:17.031116881 +0100
+***************
+*** 5519,5524 ****
+--- 5519,5525 ----
+ #ifdef FEAT_EVAL
+ save_current_sctx = current_sctx;
+ current_sctx.sc_sid = SID_MODELINE;
++ current_sctx.sc_seq = 0;
+ current_sctx.sc_lnum = 0;
+ #endif
+ retval = do_set(s, OPT_MODELINE | OPT_LOCAL | flags);
+*** ../vim-8.1.0514/src/ex_cmds2.c 2018-11-05 20:25:48.804089622 +0100
+--- src/ex_cmds2.c 2018-11-10 16:39:27.217457068 +0100
+***************
+*** 4344,4349 ****
+--- 4344,4350 ----
+ #ifdef FEAT_EVAL
+ sctx_T save_current_sctx;
+ static scid_T last_current_SID = 0;
++ static int last_current_SID_seq = 0;
+ funccal_entry_T funccalp_entry;
+ int save_debug_break_level = debug_break_level;
+ scriptitem_T *si = NULL;
+***************
+*** 4508,4518 ****
+ * Also starts profiling timer for nested script. */
+ save_funccal(&funccalp_entry);
+
+! /*
+! * Check if this script was sourced before to finds its SID.
+! * If it's new, generate a new SID.
+! */
+ save_current_sctx = current_sctx;
+ current_sctx.sc_lnum = 0;
+ # ifdef UNIX
+ stat_ok = (mch_stat((char *)fname_exp, &st) >= 0);
+--- 4509,4519 ----
+ * Also starts profiling timer for nested script. */
+ save_funccal(&funccalp_entry);
+
+! // Check if this script was sourced before to finds its SID.
+! // If it's new, generate a new SID.
+! // Always use a new sequence number.
+ save_current_sctx = current_sctx;
++ current_sctx.sc_seq = ++last_current_SID_seq;
+ current_sctx.sc_lnum = 0;
+ # ifdef UNIX
+ stat_ok = (mch_stat((char *)fname_exp, &st) >= 0);
+*** ../vim-8.1.0514/src/main.c 2018-10-14 21:40:57.356848425 +0200
+--- src/main.c 2018-11-10 16:42:21.260538735 +0100
+***************
+*** 2953,2958 ****
+--- 2953,2959 ----
+ sourcing_name = (char_u *)"command line";
+ #ifdef FEAT_EVAL
+ current_sctx.sc_sid = SID_CARG;
++ current_sctx.sc_seq = 0;
+ #endif
+ for (i = 0; i < parmp->n_commands; ++i)
+ {
+***************
+*** 3183,3188 ****
+--- 3184,3190 ----
+ #ifdef FEAT_EVAL
+ save_current_sctx = current_sctx;
+ current_sctx.sc_sid = SID_ENV;
++ current_sctx.sc_seq = 0;
+ current_sctx.sc_lnum = 0;
+ #endif
+ do_cmdline_cmd(initstr);
+*** ../vim-8.1.0514/src/option.c 2018-11-04 14:40:42.347139567 +0100
+--- src/option.c 2018-11-10 16:48:26.810332143 +0100
+***************
+*** 415,421 ****
+ char_u *def_val[2]; // default values for variable (vi and vim)
+ #ifdef FEAT_EVAL
+ sctx_T script_ctx; // script context where the option was last set
+! # define SCTX_INIT , {0, 0}
+ #else
+ # define SCTX_INIT
+ #endif
+--- 415,421 ----
+ char_u *def_val[2]; // default values for variable (vi and vim)
+ #ifdef FEAT_EVAL
+ sctx_T script_ctx; // script context where the option was last set
+! # define SCTX_INIT , {0, 0, 0}
+ #else
+ # define SCTX_INIT
+ #endif
+***************
+*** 5959,5964 ****
+--- 5959,5965 ----
+ else
+ {
+ script_ctx.sc_sid = set_sid;
++ script_ctx.sc_seq = 0;
+ script_ctx.sc_lnum = 0;
+ }
+ set_option_sctx_idx(idx, opt_flags, script_ctx);
+*** ../vim-8.1.0514/runtime/doc/eval.txt 2018-10-25 12:30:52.270659874 +0200
+--- runtime/doc/eval.txt 2018-11-10 16:52:02.836919520 +0100
+***************
+*** 9658,9666 ****
+ deleted if there are no more references to it.
+ *E127* *E122*
+ When a function by this name already exists and [!] is
+! not used an error message is given. When [!] is used,
+! an existing function is silently replaced. Unless it
+! is currently being executed, that is an error.
+ NOTE: Use ! wisely. If used without care it can cause
+ an existing function to be replaced unexpectedly,
+ which is hard to debug.
+--- 9673,9685 ----
+ deleted if there are no more references to it.
+ *E127* *E122*
+ When a function by this name already exists and [!] is
+! not used an error message is given. There is one
+! exception: When sourcing a script again, a function
+! that was previously defined in that script will be
+! silently replaced.
+! When [!] is used, an existing function is silently
+! replaced. Unless it is currently being executed, that
+! is an error.
+ NOTE: Use ! wisely. If used without care it can cause
+ an existing function to be replaced unexpectedly,
+ which is hard to debug.
+*** ../vim-8.1.0514/src/version.c 2018-11-10 16:01:23.335381858 +0100
+--- src/version.c 2018-11-10 16:26:16.190674882 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 515,
+ /**/
+
+--
+Witches prefer brooms: vacuum-cleaners need extension cords!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0516 b/data/vim/patches/8.1.0516
new file mode 100644
index 000000000..7e4375b15
--- /dev/null
+++ b/data/vim/patches/8.1.0516
@@ -0,0 +1,165 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0516
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0516
+Problem: :move command marks buffer modified when nothing changed.
+Solution: Do not set 'modified'. Add a test. (Jason Franklin)
+Files: src/Make_all.mak, src/testdir/test_alot.vim,
+ src/testdir/test_move.vim, src/ex_cmds.c
+
+
+*** ../vim-8.1.0515/src/Make_all.mak 2018-09-22 21:36:38.158098521 +0200
+--- src/Make_all.mak 2018-11-10 18:43:06.098433191 +0100
+***************
+*** 123,128 ****
+--- 123,129 ----
+ test_mksession \
+ test_mksession_utf8 \
+ test_modeline \
++ test_move \
+ test_nested_function \
+ test_netbeans \
+ test_normal \
+*** ../vim-8.1.0515/src/testdir/test_alot.vim 2018-09-22 21:36:38.158098521 +0200
+--- src/testdir/test_alot.vim 2018-11-10 18:43:06.098433191 +0100
+***************
+*** 41,46 ****
+--- 41,47 ----
+ source test_menu.vim
+ source test_messages.vim
+ source test_modeline.vim
++ source test_move.vim
+ source test_partial.vim
+ source test_popup.vim
+ source test_put.vim
+*** ../vim-8.1.0515/src/testdir/test_move.vim 2018-11-10 18:54:25.084727968 +0100
+--- src/testdir/test_move.vim 2018-11-10 18:44:27.557751773 +0100
+***************
+*** 0 ****
+--- 1,40 ----
++ " Test the ":move" command.
++
++ func Test_move()
++ enew!
++ call append(0, ['line 1', 'line 2', 'line 3'])
++ g /^$/ delete _
++ set nomodified
++
++ move .
++ call assert_equal(['line 1', 'line 2', 'line 3'], getline(1, 3))
++ call assert_false(&modified)
++
++ 1,2move 0
++ call assert_equal(['line 1', 'line 2', 'line 3'], getline(1, 3))
++ call assert_false(&modified)
++
++ 1,3move 3
++ call assert_equal(['line 1', 'line 2', 'line 3'], getline(1, 3))
++ call assert_false(&modified)
++
++ 1move 2
++ call assert_equal(['line 2', 'line 1', 'line 3'], getline(1, 3))
++ call assert_true(&modified)
++ set nomodified
++
++ 3move 0
++ call assert_equal(['line 3', 'line 2', 'line 1'], getline(1, 3))
++ call assert_true(&modified)
++ set nomodified
++
++ 2,3move 0
++ call assert_equal(['line 2', 'line 1', 'line 3'], getline(1, 3))
++ call assert_true(&modified)
++ set nomodified
++
++ call assert_fails('1,2move 1', 'E134')
++ call assert_fails('2,3move 2', 'E134')
++
++ %bwipeout!
++ endfunc
+*** ../vim-8.1.0515/src/ex_cmds.c 2018-10-11 19:27:43.920066119 +0200
+--- src/ex_cmds.c 2018-11-10 18:47:22.728288132 +0100
+***************
+*** 899,907 ****
+ {
+ char_u *str;
+ linenr_T l;
+! linenr_T extra; /* Num lines added before line1 */
+! linenr_T num_lines; /* Num lines moved */
+! linenr_T last_line; /* Last line in file after adding new text */
+ #ifdef FEAT_FOLDING
+ win_T *win;
+ tabpage_T *tp;
+--- 899,907 ----
+ {
+ char_u *str;
+ linenr_T l;
+! linenr_T extra; // Num lines added before line1
+! linenr_T num_lines; // Num lines moved
+! linenr_T last_line; // Last line in file after adding new text
+ #ifdef FEAT_FOLDING
+ win_T *win;
+ tabpage_T *tp;
+***************
+*** 909,918 ****
+
+ if (dest >= line1 && dest < line2)
+ {
+! EMSG(_("E134: Move lines into themselves"));
+ return FAIL;
+ }
+
+ num_lines = line2 - line1 + 1;
+
+ /*
+--- 909,932 ----
+
+ if (dest >= line1 && dest < line2)
+ {
+! EMSG(_("E134: Cannot move a range of lines into itself"));
+ return FAIL;
+ }
+
++ // Do nothing if we are not actually moving any lines. This will prevent
++ // the 'modified' flag from being set without cause.
++ if (dest == line1 - 1 || dest == line2)
++ {
++ // Move the cursor as if lines were moved (see below) to be backwards
++ // compatible.
++ if (dest >= line1)
++ curwin->w_cursor.lnum = dest;
++ else
++ curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
++
++ return OK;
++ }
++
+ num_lines = line2 - line1 + 1;
+
+ /*
+*** ../vim-8.1.0515/src/version.c 2018-11-10 17:33:23.091518784 +0100
+--- src/version.c 2018-11-10 18:53:56.184980615 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 516,
+ /**/
+
+--
+There are 2 kinds of people in my world: those who know Unix, Perl, Vim, GNU,
+Linux, etc, and those who know COBOL. It gets very difficult for me at
+parties, not knowing which group to socialise with :-)
+ Sitaram Chamarty
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0517 b/data/vim/patches/8.1.0517
new file mode 100644
index 000000000..5c5549d3f
--- /dev/null
+++ b/data/vim/patches/8.1.0517
@@ -0,0 +1,64 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0517
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0517
+Problem: Test_window_split_edit_alternate() fails on AppVeyor.
+Solution: Disable the failing part for now.
+Files: src/testdir/test_window_cmd.vim
+
+
+*** ../vim-8.1.0516/src/testdir/test_window_cmd.vim 2018-11-10 16:01:23.331381891 +0100
+--- src/testdir/test_window_cmd.vim 2018-11-10 20:26:30.734372854 +0100
+***************
+*** 125,134 ****
+ call assert_equal(l:nr2, winbufnr(2))
+ only
+
+! " Test the Normal mode command.
+! call feedkeys("\<C-W>\<C-^>", 'tx')
+! call assert_equal(l:nr2, winbufnr(1))
+! call assert_equal(l:nr1, winbufnr(2))
+
+ %bw!
+ endfunc
+--- 125,137 ----
+ call assert_equal(l:nr2, winbufnr(2))
+ only
+
+! " FIXME: this currently fails on AppVeyor, but passes locally
+! if !has('win32')
+! " Test the Normal mode command.
+! call feedkeys("\<C-W>\<C-^>", 'tx')
+! call assert_equal(l:nr2, winbufnr(1))
+! call assert_equal(l:nr1, winbufnr(2))
+! endif
+
+ %bw!
+ endfunc
+*** ../vim-8.1.0516/src/version.c 2018-11-10 18:54:40.660592045 +0100
+--- src/version.c 2018-11-10 19:24:44.341315450 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 517,
+ /**/
+
+--
+ARTHUR: I am your king!
+WOMAN: Well, I didn't vote for you.
+ARTHUR: You don't vote for kings.
+WOMAN: Well, 'ow did you become king then?
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0518 b/data/vim/patches/8.1.0518
new file mode 100644
index 000000000..8e0a18005
--- /dev/null
+++ b/data/vim/patches/8.1.0518
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0518
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0518
+Problem: Test_window_split_edit_bufnr() fails on AppVeyor.
+Solution: Disable the failing part for now.
+Files: src/testdir/test_window_cmd.vim
+
+
+*** ../vim-8.1.0517/src/testdir/test_window_cmd.vim 2018-11-10 20:28:16.185404665 +0100
+--- src/testdir/test_window_cmd.vim 2018-11-10 20:45:34.851482803 +0100
+***************
+*** 150,168 ****
+ let l:bar_nr = bufnr('Xbar')
+ let l:baz_nr = bufnr('Xbaz')
+
+! call feedkeys(l:foo_nr . "\<C-W>\<C-^>", 'tx')
+! call assert_equal('Xfoo', bufname(winbufnr(1)))
+! call assert_equal('Xbaz', bufname(winbufnr(2)))
+! only
+
+! call feedkeys(l:bar_nr . "\<C-W>\<C-^>", 'tx')
+! call assert_equal('Xbar', bufname(winbufnr(1)))
+! call assert_equal('Xfoo', bufname(winbufnr(2)))
+! only
+
+! execute l:baz_nr . 'wincmd ^'
+! call assert_equal('Xbaz', bufname(winbufnr(1)))
+! call assert_equal('Xbar', bufname(winbufnr(2)))
+
+ %bw!
+ endfunc
+--- 150,171 ----
+ let l:bar_nr = bufnr('Xbar')
+ let l:baz_nr = bufnr('Xbaz')
+
+! " FIXME: this currently fails on AppVeyor, but passes locally
+! if !has('win32')
+! call feedkeys(l:foo_nr . "\<C-W>\<C-^>", 'tx')
+! call assert_equal('Xfoo', bufname(winbufnr(1)))
+! call assert_equal('Xbaz', bufname(winbufnr(2)))
+! only
+
+! call feedkeys(l:bar_nr . "\<C-W>\<C-^>", 'tx')
+! call assert_equal('Xbar', bufname(winbufnr(1)))
+! call assert_equal('Xfoo', bufname(winbufnr(2)))
+! only
+
+! execute l:baz_nr . 'wincmd ^'
+! call assert_equal('Xbaz', bufname(winbufnr(1)))
+! call assert_equal('Xbar', bufname(winbufnr(2)))
+! endif
+
+ %bw!
+ endfunc
+*** ../vim-8.1.0517/src/version.c 2018-11-10 20:28:16.185404665 +0100
+--- src/version.c 2018-11-10 20:46:50.738761407 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 518,
+ /**/
+
+--
+WOMAN: Well, 'ow did you become king then?
+ARTHUR: The Lady of the Lake, [angels sing] her arm clad in the purest
+ shimmering samite, held aloft Excalibur from the bosom of the water
+ signifying by Divine Providence that I, Arthur, was to carry
+ Excalibur. [singing stops] That is why I am your king!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0519 b/data/vim/patches/8.1.0519
new file mode 100644
index 000000000..4ccbba9e1
--- /dev/null
+++ b/data/vim/patches/8.1.0519
@@ -0,0 +1,768 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0519
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0519
+Problem: Cannot save and restore the tag stack.
+Solution: Add gettagstack() and settagstack(). (Yegappan Lakshmanan,
+ closes #3604)
+Files: runtime/doc/eval.txt, runtime/doc/tagsrch.txt,
+ runtime/doc/usr_41.txt, src/alloc.h, src/dict.c, src/evalfunc.c,
+ src/list.c, src/misc2.c, src/proto/dict.pro, src/proto/list.pro,
+ src/proto/misc2.pro, src/proto/tag.pro, src/tag.c,
+ src/testdir/test_tagjump.vim
+
+
+*** ../vim-8.1.0518/runtime/doc/eval.txt 2018-11-10 17:33:23.091518784 +0100
+--- runtime/doc/eval.txt 2018-11-11 15:16:01.878631709 +0100
+***************
+*** 2198,2203 ****
+--- 2206,2212 ----
+ any variable {varname} in tab {nr} or {def}
+ gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
+ any {name} in {winnr} in tab page {tabnr}
++ gettagstack([{nr}]) Dict get the tag stack of window {nr}
+ getwininfo([{winid}]) List list of info about each window
+ getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
+ getwinposx() Number X coord in pixels of the Vim window
+***************
+*** 2371,2376 ****
+--- 2379,2386 ----
+ settabwinvar({tabnr}, {winnr}, {varname}, {val})
+ none set {varname} in window {winnr} in tab
+ page {tabnr} to {val}
++ settagstack({nr}, {dict} [, {action}])
++ Number modify tag stack using {dict}
+ setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val}
+ sha256({string}) String SHA256 checksum of {string}
+ shellescape({string} [, {special}])
+***************
+*** 4959,4964 ****
+--- 4971,5007 ----
+ :let list_is_on = gettabwinvar(1, 2, '&list')
+ :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
+ <
++ To obtain all window-local variables use: >
++ gettabwinvar({tabnr}, {winnr}, '&')
++
++ gettagstack([{nr}]) *gettagstack()*
++ The result is a Dict, which is the tag stack of window {nr}.
++ {nr} can be the window number or the |window-ID|.
++ When {nr} is not specified, the current window is used.
++ When window {nr} doesn't exist, an empty Dict is returned.
++
++ The returned dictionary contains the following entries:
++ curidx Current index in the stack. When at
++ top of the stack, set to (length + 1).
++ Index of bottom of the stack is 1.
++ items List of items in the stack. Each item
++ is a dictionary containing the
++ entries described below.
++ length Number of entries in the stack.
++
++ Each item in the stack is a dictionary with the following
++ entries:
++ bufnr buffer number of the current jump
++ from cursor position before the tag jump.
++ See |getpos()| for the format of the
++ returned list.
++ matchnr current matching tag number. Used when
++ multiple matching tags are found for a
++ name.
++ tagname name of the tag
++
++ See |tagstack| for more information about the tag stack.
++
+ getwininfo([{winid}]) *getwininfo()*
+ Returns information about windows as a List with Dictionaries.
+
+***************
+*** 7522,7527 ****
+--- 7566,7602 ----
+ :call settabwinvar(3, 2, "myvar", "foobar")
+ < This function is not available in the |sandbox|.
+
++ settagstack({nr}, {dict} [, {action}]) *settagstack()*
++ Modify the tag stack of the window {nr} using {dict}.
++ {nr} can be the window number or the |window-ID|.
++
++ For a list of supported items in {dict}, refer to
++ |gettagstack()|
++ *E962*
++ If {action} is not present or is set to 'r', then the tag
++ stack is replaced. If {action} is set to 'a', then new entries
++ from {dict} are pushed onto the tag stack.
++
++ Returns zero for success, -1 for failure.
++
++ Examples:
++ Set current index of the tag stack to 4: >
++ call settagstack(1005, {'curidx' : 4})
++
++ < Empty the tag stack of window 3: >
++ call settagstack(3, {'items' : []})
++
++ < Push a new item onto the tag stack: >
++ let pos = [bufnr('myfile.txt'), 10, 1, 0]
++ let newtag = [{'tagname' : 'mytag', 'from' : pos}]
++ call settagstack(2, {'items' : newtag}, 'a')
++
++ < Save and restore the tag stack: >
++ let stack = gettagstack(1003)
++ " do something else
++ call settagstack(1003, stack)
++ unlet stack
++ <
+ setwinvar({nr}, {varname}, {val}) *setwinvar()*
+ Like |settabwinvar()| for the current tab page.
+ Examples: >
+*** ../vim-8.1.0518/runtime/doc/tagsrch.txt 2018-05-17 13:42:03.000000000 +0200
+--- runtime/doc/tagsrch.txt 2018-11-10 19:23:26.025972138 +0100
+***************
+*** 179,184 ****
+--- 179,187 ----
+ 1 1 main 1 harddisk2:text/vim/test
+ 2 1 FuncB 59 harddisk2:text/vim/src/main.c
+
++ The gettagstack() function returns the tag stack of a specified window. The
++ settagstack() function modifies the tag stack of a window.
++
+ *E73*
+ When you try to use the tag stack while it doesn't contain anything you will
+ get an error message.
+*** ../vim-8.1.0518/runtime/doc/usr_41.txt 2018-05-22 20:35:13.550009275 +0200
+--- runtime/doc/usr_41.txt 2018-11-10 19:23:26.025972138 +0100
+***************
+*** 809,814 ****
+--- 809,815 ----
+ getwininfo() get a list with window information
+ getchangelist() get a list of change list entries
+ getjumplist() get a list of jump list entries
++ swapinfo() information about a swap file
+
+ Command line: *command-line-functions*
+ getcmdline() get the current command line
+***************
+*** 1027,1032 ****
+--- 1028,1035 ----
+
+ taglist() get list of matching tags
+ tagfiles() get a list of tags files
++ gettagstack() get the tag stack
++ settagstack() modify the tag stack
+
+ luaeval() evaluate Lua expression
+ mzeval() evaluate |MzScheme| expression
+*** ../vim-8.1.0518/src/alloc.h 2018-05-01 14:44:41.000000000 +0200
+--- src/alloc.h 2018-11-10 19:23:26.025972138 +0100
+***************
+*** 18,22 ****
+--- 18,25 ----
+ aid_qf_module,
+ aid_qf_errmsg,
+ aid_qf_pattern,
++ aid_tagstack_items,
++ aid_tagstack_from,
++ aid_tagstack_details,
+ aid_last
+ } alloc_id_T;
+*** ../vim-8.1.0518/src/dict.c 2018-07-08 17:18:58.416462371 +0200
+--- src/dict.c 2018-11-10 19:23:26.025972138 +0100
+***************
+*** 47,52 ****
+--- 47,65 ----
+ return d;
+ }
+
++ /*
++ * dict_alloc() with an ID for alloc_fail().
++ */
++ dict_T *
++ dict_alloc_id(alloc_id_T id UNUSED)
++ {
++ #ifdef FEAT_EVAL
++ if (alloc_fail_id == id && alloc_does_fail((long_u)sizeof(list_T)))
++ return NULL;
++ #endif
++ return (dict_alloc());
++ }
++
+ dict_T *
+ dict_alloc_lock(int lock)
+ {
+*** ../vim-8.1.0518/src/evalfunc.c 2018-10-25 13:11:13.111143297 +0200
+--- src/evalfunc.c 2018-11-10 19:23:26.029972104 +0100
+***************
+*** 201,206 ****
+--- 201,207 ----
+ static void f_gettabinfo(typval_T *argvars, typval_T *rettv);
+ static void f_gettabvar(typval_T *argvars, typval_T *rettv);
+ static void f_gettabwinvar(typval_T *argvars, typval_T *rettv);
++ static void f_gettagstack(typval_T *argvars, typval_T *rettv);
+ static void f_getwininfo(typval_T *argvars, typval_T *rettv);
+ static void f_getwinpos(typval_T *argvars, typval_T *rettv);
+ static void f_getwinposx(typval_T *argvars, typval_T *rettv);
+***************
+*** 361,366 ****
+--- 362,368 ----
+ static void f_setreg(typval_T *argvars, typval_T *rettv);
+ static void f_settabvar(typval_T *argvars, typval_T *rettv);
+ static void f_settabwinvar(typval_T *argvars, typval_T *rettv);
++ static void f_settagstack(typval_T *argvars, typval_T *rettv);
+ static void f_setwinvar(typval_T *argvars, typval_T *rettv);
+ #ifdef FEAT_CRYPT
+ static void f_sha256(typval_T *argvars, typval_T *rettv);
+***************
+*** 666,671 ****
+--- 668,674 ----
+ {"gettabinfo", 0, 1, f_gettabinfo},
+ {"gettabvar", 2, 3, f_gettabvar},
+ {"gettabwinvar", 3, 4, f_gettabwinvar},
++ {"gettagstack", 0, 1, f_gettagstack},
+ {"getwininfo", 0, 1, f_getwininfo},
+ {"getwinpos", 0, 1, f_getwinpos},
+ {"getwinposx", 0, 0, f_getwinposx},
+***************
+*** 828,833 ****
+--- 831,837 ----
+ {"setreg", 2, 3, f_setreg},
+ {"settabvar", 3, 3, f_settabvar},
+ {"settabwinvar", 4, 4, f_settabwinvar},
++ {"settagstack", 2, 3, f_settagstack},
+ {"setwinvar", 3, 3, f_setwinvar},
+ #ifdef FEAT_CRYPT
+ {"sha256", 1, 1, f_sha256},
+***************
+*** 5657,5662 ****
+--- 5661,5687 ----
+ }
+
+ /*
++ * "gettagstack()" function
++ */
++ static void
++ f_gettagstack(typval_T *argvars, typval_T *rettv)
++ {
++ win_T *wp = curwin; // default is current window
++
++ if (rettv_dict_alloc(rettv) != OK)
++ return;
++
++ if (argvars[0].v_type != VAR_UNKNOWN)
++ {
++ wp = find_win_by_nr_or_id(&argvars[0]);
++ if (wp == NULL)
++ return;
++ }
++
++ get_tagstack(wp, rettv->vval.v_dict);
++ }
++
++ /*
+ * Returns information about a window as a dictionary.
+ */
+ static dict_T *
+***************
+*** 11119,11124 ****
+--- 11144,11205 ----
+ }
+
+ /*
++ * "settagstack()" function
++ */
++ static void
++ f_settagstack(typval_T *argvars, typval_T *rettv)
++ {
++ static char *e_invact2 = N_("E962: Invalid action: '%s'");
++ win_T *wp;
++ dict_T *d;
++ int action = 'r';
++
++ rettv->vval.v_number = -1;
++
++ // first argument: window number or id
++ wp = find_win_by_nr_or_id(&argvars[0]);
++ if (wp == NULL)
++ return;
++
++ // second argument: dict with items to set in the tag stack
++ if (argvars[1].v_type != VAR_DICT)
++ {
++ EMSG(_(e_dictreq));
++ return;
++ }
++ d = argvars[1].vval.v_dict;
++ if (d == NULL)
++ return;
++
++ // third argument: action - 'a' for append and 'r' for replace.
++ // default is to replace the stack.
++ if (argvars[2].v_type == VAR_UNKNOWN)
++ action = 'r';
++ else if (argvars[2].v_type == VAR_STRING)
++ {
++ char_u *actstr;
++ actstr = get_tv_string_chk(&argvars[2]);
++ if (actstr == NULL)
++ return;
++ if ((*actstr == 'r' || *actstr == 'a') && actstr[1] == NUL)
++ action = *actstr;
++ else
++ {
++ EMSG2(_(e_invact2), actstr);
++ return;
++ }
++ }
++ else
++ {
++ EMSG(_(e_stringreq));
++ return;
++ }
++
++ if (set_tagstack(wp, d, action) == OK)
++ rettv->vval.v_number = 0;
++ }
++
++ /*
+ * "setwinvar()" function
+ */
+ static void
+*** ../vim-8.1.0518/src/list.c 2018-07-25 19:49:41.895812670 +0200
+--- src/list.c 2018-11-10 19:23:26.029972104 +0100
+***************
+*** 86,91 ****
+--- 86,104 ----
+ }
+
+ /*
++ * list_alloc() with an ID for alloc_fail().
++ */
++ list_T *
++ list_alloc_id(alloc_id_T id UNUSED)
++ {
++ #ifdef FEAT_EVAL
++ if (alloc_fail_id == id && alloc_does_fail((long_u)sizeof(list_T)))
++ return NULL;
++ #endif
++ return (list_alloc());
++ }
++
++ /*
+ * Allocate an empty list for a return value, with reference count set.
+ * Returns OK or FAIL.
+ */
+*** ../vim-8.1.0518/src/misc2.c 2018-10-20 20:53:58.147284793 +0200
+--- src/misc2.c 2018-11-10 19:23:26.029972104 +0100
+***************
+*** 835,841 ****
+ #endif /* MEM_PROFILE */
+
+ #ifdef FEAT_EVAL
+! static int
+ alloc_does_fail(long_u size)
+ {
+ if (alloc_fail_countdown == 0)
+--- 835,841 ----
+ #endif /* MEM_PROFILE */
+
+ #ifdef FEAT_EVAL
+! int
+ alloc_does_fail(long_u size)
+ {
+ if (alloc_fail_countdown == 0)
+*** ../vim-8.1.0518/src/proto/dict.pro 2018-07-08 16:50:33.107216836 +0200
+--- src/proto/dict.pro 2018-11-10 19:23:26.029972104 +0100
+***************
+*** 1,5 ****
+--- 1,6 ----
+ /* dict.c */
+ dict_T *dict_alloc(void);
++ dict_T *dict_alloc_id(alloc_id_T id);
+ dict_T *dict_alloc_lock(int lock);
+ int rettv_dict_alloc(typval_T *rettv);
+ void rettv_dict_set(typval_T *rettv, dict_T *d);
+*** ../vim-8.1.0518/src/proto/list.pro 2018-05-17 13:52:42.000000000 +0200
+--- src/proto/list.pro 2018-11-10 19:23:26.029972104 +0100
+***************
+*** 3,8 ****
+--- 3,9 ----
+ void list_rem_watch(list_T *l, listwatch_T *lwrem);
+ void list_fix_watch(list_T *l, listitem_T *item);
+ list_T *list_alloc(void);
++ list_T *list_alloc_id(alloc_id_T id);
+ int rettv_list_alloc(typval_T *rettv);
+ void rettv_list_set(typval_T *rettv, list_T *l);
+ void list_unref(list_T *l);
+*** ../vim-8.1.0518/src/proto/misc2.pro 2018-05-17 13:52:46.000000000 +0200
+--- src/proto/misc2.pro 2018-11-10 19:23:26.029972104 +0100
+***************
+*** 21,26 ****
+--- 21,27 ----
+ int leftcol_changed(void);
+ void vim_mem_profile_dump(void);
+ char_u *alloc(unsigned size);
++ int alloc_does_fail(long_u size);
+ char_u *alloc_id(unsigned size, alloc_id_T id);
+ char_u *alloc_clear(unsigned size);
+ char_u *alloc_check(unsigned size);
+*** ../vim-8.1.0518/src/proto/tag.pro 2018-05-17 13:52:52.000000000 +0200
+--- src/proto/tag.pro 2018-11-10 19:23:26.029972104 +0100
+***************
+*** 9,12 ****
+--- 9,14 ----
+ void simplify_filename(char_u *filename);
+ int expand_tags(int tagnames, char_u *pat, int *num_file, char_u ***file);
+ int get_tags(list_T *list, char_u *pat, char_u *buf_fname);
++ void get_tagstack(win_T *wp, dict_T *retdict);
++ int set_tagstack(win_T *wp, dict_T *d, int action);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0518/src/tag.c 2018-09-30 21:43:17.207693209 +0200
+--- src/tag.c 2018-11-11 15:03:52.375828252 +0100
+***************
+*** 4016,4019 ****
+--- 4016,4219 ----
+ }
+ return ret;
+ }
++
++ /*
++ * Return information about 'tag' in dict 'retdict'.
++ */
++ static void
++ get_tag_details(taggy_T *tag, dict_T *retdict)
++ {
++ list_T *pos;
++ fmark_T *fmark;
++
++ dict_add_string(retdict, "tagname", tag->tagname);
++ dict_add_number(retdict, "matchnr", tag->cur_match + 1);
++ dict_add_number(retdict, "bufnr", tag->cur_fnum);
++
++ if ((pos = list_alloc_id(aid_tagstack_from)) == NULL)
++ return;
++ dict_add_list(retdict, "from", pos);
++
++ fmark = &tag->fmark;
++ list_append_number(pos,
++ (varnumber_T)(fmark->fnum != -1 ? fmark->fnum : 0));
++ list_append_number(pos, (varnumber_T)fmark->mark.lnum);
++ list_append_number(pos, (varnumber_T)(fmark->mark.col == MAXCOL ?
++ MAXCOL : fmark->mark.col + 1));
++ list_append_number(pos, (varnumber_T)fmark->mark.coladd);
++ }
++
++ /*
++ * Return the tag stack entries of the specified window 'wp' in dictionary
++ * 'retdict'.
++ */
++ void
++ get_tagstack(win_T *wp, dict_T *retdict)
++ {
++ list_T *l;
++ int i;
++ dict_T *d;
++
++ dict_add_number(retdict, "length", wp->w_tagstacklen);
++ dict_add_number(retdict, "curidx", wp->w_tagstackidx + 1);
++ l = list_alloc_id(aid_tagstack_items);
++ if (l == NULL)
++ return;
++ dict_add_list(retdict, "items", l);
++
++ for (i = 0; i < wp->w_tagstacklen; i++)
++ {
++ if ((d = dict_alloc_id(aid_tagstack_details)) == NULL)
++ return;
++ list_append_dict(l, d);
++
++ get_tag_details(&wp->w_tagstack[i], d);
++ }
++ }
++
++ /*
++ * Free all the entries in the tag stack of the specified window
++ */
++ static void
++ tagstack_clear(win_T *wp)
++ {
++ int i;
++
++ // Free the current tag stack
++ for (i = 0; i < wp->w_tagstacklen; ++i)
++ vim_free(wp->w_tagstack[i].tagname);
++ wp->w_tagstacklen = 0;
++ wp->w_tagstackidx = 0;
++ }
++
++ /*
++ * Remove the oldest entry from the tag stack and shift the rest of
++ * the entires to free up the top of the stack.
++ */
++ static void
++ tagstack_shift(win_T *wp)
++ {
++ taggy_T *tagstack = wp->w_tagstack;
++ int i;
++
++ vim_free(tagstack[0].tagname);
++ for (i = 1; i < wp->w_tagstacklen; ++i)
++ tagstack[i - 1] = tagstack[i];
++ wp->w_tagstacklen--;
++ }
++
++ /*
++ * Push a new item to the tag stack
++ */
++ static void
++ tagstack_push_item(
++ win_T *wp,
++ char_u *tagname,
++ int cur_fnum,
++ int cur_match,
++ pos_T mark,
++ int fnum)
++ {
++ taggy_T *tagstack = wp->w_tagstack;
++ int idx = wp->w_tagstacklen; // top of the stack
++
++ // if the tagstack is full: remove the oldest entry
++ if (idx >= TAGSTACKSIZE)
++ {
++ tagstack_shift(wp);
++ idx = TAGSTACKSIZE - 1;
++ }
++
++ wp->w_tagstacklen++;
++ tagstack[idx].tagname = tagname;
++ tagstack[idx].cur_fnum = cur_fnum;
++ tagstack[idx].cur_match = cur_match;
++ if (tagstack[idx].cur_match < 0)
++ tagstack[idx].cur_match = 0;
++ tagstack[idx].fmark.mark = mark;
++ tagstack[idx].fmark.fnum = fnum;
++ }
++
++ /*
++ * Add a list of items to the tag stack in the specified window
++ */
++ static void
++ tagstack_push_items(win_T *wp, list_T *l)
++ {
++ listitem_T *li;
++ dictitem_T *di;
++ dict_T *itemdict;
++ char_u *tagname;
++ pos_T mark;
++ int fnum;
++
++ // Add one entry at a time to the tag stack
++ for (li = l->lv_first; li != NULL; li = li->li_next)
++ {
++ if (li->li_tv.v_type != VAR_DICT || li->li_tv.vval.v_dict == NULL)
++ continue; // Skip non-dict items
++ itemdict = li->li_tv.vval.v_dict;
++
++ // parse 'from' for the cursor position before the tag jump
++ if ((di = dict_find(itemdict, (char_u *)"from", -1)) == NULL)
++ continue;
++ if (list2fpos(&di->di_tv, &mark, &fnum, NULL) != OK)
++ continue;
++ if ((tagname =
++ get_dict_string(itemdict, (char_u *)"tagname", TRUE)) == NULL)
++ continue;
++
++ if (mark.col > 0)
++ mark.col--;
++ tagstack_push_item(wp, tagname,
++ (int)get_dict_number(itemdict, (char_u *)"bufnr"),
++ (int)get_dict_number(itemdict, (char_u *)"matchnr") - 1,
++ mark, fnum);
++ }
++ }
++
++ /*
++ * Set the current index in the tag stack. Valid values are between 0
++ * and the stack length (inclusive).
++ */
++ static void
++ tagstack_set_curidx(win_T *wp, int curidx)
++ {
++ wp->w_tagstackidx = curidx;
++ if (wp->w_tagstackidx < 0) // sanity check
++ wp->w_tagstackidx = 0;
++ if (wp->w_tagstackidx > wp->w_tagstacklen)
++ wp->w_tagstackidx = wp->w_tagstacklen;
++ }
++
++ /*
++ * Set the tag stack entries of the specified window.
++ * 'action' is set to either 'a' for append or 'r' for replace.
++ */
++ int
++ set_tagstack(win_T *wp, dict_T *d, int action)
++ {
++ dictitem_T *di;
++ list_T *l;
++
++ if ((di = dict_find(d, (char_u *)"items", -1)) != NULL)
++ {
++ if (di->di_tv.v_type != VAR_LIST)
++ {
++ EMSG(_(e_listreq));
++ return FAIL;
++ }
++ l = di->di_tv.vval.v_list;
++
++ if (action == 'r')
++ tagstack_clear(wp);
++
++ tagstack_push_items(wp, l);
++ }
++
++ if ((di = dict_find(d, (char_u *)"curidx", -1)) != NULL)
++ tagstack_set_curidx(wp, (int)get_tv_number(&di->di_tv) - 1);
++
++ return OK;
++ }
+ #endif
+*** ../vim-8.1.0518/src/testdir/test_tagjump.vim 2018-02-09 18:30:21.000000000 +0100
+--- src/testdir/test_tagjump.vim 2018-11-11 15:09:11.153557467 +0100
+***************
+*** 257,260 ****
+--- 257,369 ----
+ bwipe!
+ endfunc
+
++ " Test for getting and modifying the tag stack
++ func Test_getsettagstack()
++ call writefile(['line1', 'line2', 'line3'], 'Xfile1')
++ call writefile(['line1', 'line2', 'line3'], 'Xfile2')
++ call writefile(['line1', 'line2', 'line3'], 'Xfile3')
++
++ enew | only
++ call settagstack(1, {'items' : []})
++ call assert_equal(0, gettagstack(1).length)
++ call assert_equal([], gettagstack(1).items)
++ " Error cases
++ call assert_equal({}, gettagstack(100))
++ call assert_equal(-1, settagstack(100, {'items' : []}))
++ call assert_fails('call settagstack(1, [1, 10])', 'E715')
++ call assert_fails("call settagstack(1, {'items' : 10})", 'E714')
++ call assert_fails("call settagstack(1, {'items' : []}, 10)", 'E928')
++ call assert_fails("call settagstack(1, {'items' : []}, 'b')", 'E962')
++
++ set tags=Xtags
++ call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//",
++ \ "one\tXfile1\t1",
++ \ "three\tXfile3\t3",
++ \ "two\tXfile2\t2"],
++ \ 'Xtags')
++
++ let stk = []
++ call add(stk, {'bufnr' : bufnr('%'), 'tagname' : 'one',
++ \ 'from' : [bufnr('%'), line('.'), col('.'), 0], 'matchnr' : 1})
++ tag one
++ call add(stk, {'bufnr' : bufnr('%'), 'tagname' : 'two',
++ \ 'from' : [bufnr('%'), line('.'), col('.'), 0], 'matchnr' : 1})
++ tag two
++ call add(stk, {'bufnr' : bufnr('%'), 'tagname' : 'three',
++ \ 'from' : [bufnr('%'), line('.'), col('.'), 0], 'matchnr' : 1})
++ tag three
++ call assert_equal(3, gettagstack(1).length)
++ call assert_equal(stk, gettagstack(1).items)
++ " Check for default - current window
++ call assert_equal(3, gettagstack().length)
++ call assert_equal(stk, gettagstack().items)
++
++ " Try to set current index to invalid values
++ call settagstack(1, {'curidx' : -1})
++ call assert_equal(1, gettagstack().curidx)
++ call settagstack(1, {'curidx' : 50})
++ call assert_equal(4, gettagstack().curidx)
++
++ " Try pushing invalid items onto the stack
++ call settagstack(1, {'items' : []})
++ call settagstack(1, {'items' : ["plate"]}, 'a')
++ call assert_equal(0, gettagstack().length)
++ call assert_equal([], gettagstack().items)
++ call settagstack(1, {'items' : [{"tagname" : "abc"}]}, 'a')
++ call assert_equal(0, gettagstack().length)
++ call assert_equal([], gettagstack().items)
++ call settagstack(1, {'items' : [{"from" : 100}]}, 'a')
++ call assert_equal(0, gettagstack().length)
++ call assert_equal([], gettagstack().items)
++ call settagstack(1, {'items' : [{"from" : [2, 1, 0, 0]}]}, 'a')
++ call assert_equal(0, gettagstack().length)
++ call assert_equal([], gettagstack().items)
++
++ " Push one item at a time to the stack
++ call settagstack(1, {'items' : []})
++ call settagstack(1, {'items' : [stk[0]]}, 'a')
++ call settagstack(1, {'items' : [stk[1]]}, 'a')
++ call settagstack(1, {'items' : [stk[2]]}, 'a')
++ call settagstack(1, {'curidx' : 4})
++ call assert_equal({'length' : 3, 'curidx' : 4, 'items' : stk},
++ \ gettagstack(1))
++
++ " Try pushing items onto a full stack
++ for i in range(7)
++ call settagstack(1, {'items' : stk}, 'a')
++ endfor
++ call assert_equal(20, gettagstack().length)
++ call settagstack(1,
++ \ {'items' : [{'tagname' : 'abc', 'from' : [1, 10, 1, 0]}]}, 'a')
++ call assert_equal('abc', gettagstack().items[19].tagname)
++
++ " Tag with multiple matches
++ call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//",
++ \ "two\tXfile1\t1",
++ \ "two\tXfile2\t3",
++ \ "two\tXfile3\t2"],
++ \ 'Xtags')
++ call settagstack(1, {'items' : []})
++ tag two
++ tnext
++ tnext
++ call assert_equal(1, gettagstack().length)
++ call assert_equal(3, gettagstack().items[0].matchnr)
++
++ " Memory allocation failures
++ call test_alloc_fail(GetAllocId('tagstack_items'), 0, 0)
++ call assert_fails('call gettagstack()', 'E342:')
++ call test_alloc_fail(GetAllocId('tagstack_from'), 0, 0)
++ call assert_fails('call gettagstack()', 'E342:')
++ call test_alloc_fail(GetAllocId('tagstack_details'), 0, 0)
++ call assert_fails('call gettagstack()', 'E342:')
++
++ call settagstack(1, {'items' : []})
++ call delete('Xfile1')
++ call delete('Xfile2')
++ call delete('Xfile3')
++ call delete('Xtags')
++ set tags&
++ endfunc
++
+ " vim: shiftwidth=2 sts=2 expandtab
+*** ../vim-8.1.0518/src/version.c 2018-11-10 20:47:43.394262832 +0100
+--- src/version.c 2018-11-11 15:18:47.861449349 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 519,
+ /**/
+
+--
+Q: How does a UNIX Guru pick up a girl?
+A: look; grep; which; eval; nice; uname; talk; date;
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0520 b/data/vim/patches/8.1.0520
new file mode 100644
index 000000000..7640610f8
--- /dev/null
+++ b/data/vim/patches/8.1.0520
@@ -0,0 +1,50 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0520
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0520
+Problem: Screen diff test sometimes fails.
+Solution: Add to list of flaky tests.
+Files: src/testdir/runtest.vim
+
+
+*** ../vim-8.1.0519/src/testdir/runtest.vim 2018-10-07 15:42:04.279309175 +0200
+--- src/testdir/runtest.vim 2018-11-11 18:45:38.800483945 +0100
+***************
+*** 279,284 ****
+--- 279,285 ----
+ \ 'Test_collapse_buffers()',
+ \ 'Test_communicate()',
+ \ 'Test_cwd()',
++ \ 'Test_diff_screen()',
+ \ 'Test_exit_callback_interval()',
+ \ 'Test_nb_basic()',
+ \ 'Test_oneshot()',
+*** ../vim-8.1.0519/src/version.c 2018-11-11 15:20:32.436704418 +0100
+--- src/version.c 2018-11-11 18:48:12.159297738 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 520,
+ /**/
+
+--
+ARTHUR: Be quiet!
+DENNIS: Well you can't expect to wield supreme executive power just 'cause
+ some watery tart threw a sword at you!
+ARTHUR: Shut up!
+DENNIS: I mean, if I went around sayin' I was an empereror just because some
+ moistened bint had lobbed a scimitar at me they'd put me away!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0521 b/data/vim/patches/8.1.0521
new file mode 100644
index 000000000..24830fe9b
--- /dev/null
+++ b/data/vim/patches/8.1.0521
@@ -0,0 +1,51 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0521
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0521
+Problem: Cannot build with +eval but without +quickfix.
+Solution: Remove #ifdef for e_stringreq. (John Marriott)
+Files: src/evalfunc.c
+
+
+*** ../vim-8.1.0520/src/evalfunc.c 2018-11-11 15:20:32.432704446 +0100
+--- src/evalfunc.c 2018-11-11 21:21:27.762608082 +0100
+***************
+*** 29,37 ****
+ #endif
+
+ static char *e_listarg = N_("E686: Argument of %s must be a List");
+- #ifdef FEAT_QUICKFIX
+ static char *e_stringreq = N_("E928: String required");
+- #endif
+
+ #ifdef FEAT_FLOAT
+ static void f_abs(typval_T *argvars, typval_T *rettv);
+--- 29,35 ----
+*** ../vim-8.1.0520/src/version.c 2018-11-11 18:51:39.293611339 +0100
+--- src/version.c 2018-11-11 21:22:16.630249881 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 521,
+ /**/
+
+--
+ARTHUR: Shut up! Will you shut up!
+DENNIS: Ah, now we see the violence inherent in the system.
+ARTHUR: Shut up!
+DENNIS: Oh! Come and see the violence inherent in the system!
+ HELP! HELP! I'm being repressed!
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0522 b/data/vim/patches/8.1.0522
new file mode 100644
index 000000000..fb65c6733
--- /dev/null
+++ b/data/vim/patches/8.1.0522
@@ -0,0 +1,82 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0522
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0522
+Problem: :terminal does not show trailing empty lines.
+Solution: Add empty lines. (Hirohito Higashi, closes #3605)
+Files: src/terminal.c, src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0521/src/terminal.c 2018-10-23 21:42:55.449760330 +0200
+--- src/terminal.c 2018-11-11 21:52:13.823591882 +0100
+***************
+*** 1592,1597 ****
+--- 1592,1606 ----
+ }
+ }
+
++ // Add trailing empty lines.
++ for (pos.row = term->tl_scrollback.ga_len;
++ pos.row < term->tl_scrollback_scrolled + term->tl_cursor_pos.row;
++ ++pos.row)
++ {
++ if (add_empty_scrollback(term, &fill_attr, 0) == OK)
++ add_scrollback_line_to_buffer(term, (char_u *)"", 0);
++ }
++
+ term->tl_dirty_snapshot = FALSE;
+ #ifdef FEAT_TIMERS
+ term->tl_timer_set = FALSE;
+*** ../vim-8.1.0521/src/testdir/test_terminal.vim 2018-11-03 21:47:10.949346136 +0100
+--- src/testdir/test_terminal.vim 2018-11-11 21:47:20.154059795 +0100
+***************
+*** 1658,1660 ****
+--- 1658,1682 ----
+ call WaitForAssert({-> assert_false(bufexists(bnr))})
+ call assert_equal(1, winnr('$'))
+ endfunc
++
++ func Test_terminal_does_not_truncate_last_newlines()
++ let cmd = has('win32') ? 'type' : 'cat'
++ let contents = [
++ \ [ 'One', '', 'X' ],
++ \ [ 'Two', '', '' ],
++ \ [ 'Three' ] + repeat([''], 30)
++ \ ]
++
++ for c in contents
++ call writefile(c, 'Xfile')
++ exec 'term' cmd 'Xfile'
++ let bnr = bufnr('$')
++ call assert_equal('terminal', getbufvar(bnr, '&buftype'))
++ call WaitForAssert({-> assert_equal('finished', term_getstatus(bnr))})
++ sleep 50m
++ call assert_equal(c, getline(1, line('$')))
++ quit
++ endfor
++
++ call delete('Xfile')
++ endfunc
+*** ../vim-8.1.0521/src/version.c 2018-11-11 21:22:53.649977524 +0100
+--- src/version.c 2018-11-11 22:17:05.407532879 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 522,
+ /**/
+
+--
+Seen on the back of a biker's vest: If you can read this, my wife fell off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0523 b/data/vim/patches/8.1.0523
new file mode 100644
index 000000000..2c5ffa648
--- /dev/null
+++ b/data/vim/patches/8.1.0523
@@ -0,0 +1,403 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0523
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0523
+Problem: Opening window from quickfix leaves empty buffer behind.
+Solution: Add qf_jump_newwin(). (Yegappan Lakshmanan, closes #2574)
+Files: src/proto/quickfix.pro, src/quickfix.c,
+ src/testdir/test_quickfix.vim
+
+
+*** ../vim-8.1.0522/src/proto/quickfix.pro 2018-10-20 20:53:58.143284832 +0200
+--- src/proto/quickfix.pro 2018-11-11 22:45:31.145846186 +0100
+***************
+*** 4,9 ****
+--- 4,10 ----
+ void check_quickfix_busy(void);
+ void copy_loclist_stack(win_T *from, win_T *to);
+ void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit);
++ void qf_jump_newwin(qf_info_T *qi, int dir, int errornr, int forceit, int newwin);
+ void qf_list(exarg_T *eap);
+ void qf_age(exarg_T *eap);
+ void qf_history(exarg_T *eap);
+*** ../vim-8.1.0522/src/quickfix.c 2018-10-28 14:36:04.222247691 +0100
+--- src/quickfix.c 2018-11-11 22:46:08.525548009 +0100
+***************
+*** 2699,2713 ****
+ }
+
+ /*
+! * Find a help window or open one.
+ */
+ static int
+! jump_to_help_window(qf_info_T *qi, int *opened_window)
+ {
+ win_T *wp;
+ int flags;
+
+! if (cmdmod.tab != 0)
+ wp = NULL;
+ else
+ wp = qf_find_help_win();
+--- 2699,2714 ----
+ }
+
+ /*
+! * Find a help window or open one. If 'newwin' is TRUE, then open a new help
+! * window.
+ */
+ static int
+! jump_to_help_window(qf_info_T *qi, int newwin, int *opened_window)
+ {
+ win_T *wp;
+ int flags;
+
+! if (cmdmod.tab != 0 || newwin)
+ wp = NULL;
+ else
+ wp = qf_find_help_win();
+***************
+*** 2721,2728 ****
+ if (cmdmod.split == 0 && curwin->w_width != Columns
+ && curwin->w_width < 80)
+ flags |= WSP_TOP;
+! if (IS_LL_STACK(qi))
+! flags |= WSP_NEWLOC; // don't copy the location list
+
+ if (win_split(0, flags) == FAIL)
+ return FAIL;
+--- 2722,2731 ----
+ if (cmdmod.split == 0 && curwin->w_width != Columns
+ && curwin->w_width < 80)
+ flags |= WSP_TOP;
+! // If the user asks to open a new window, then copy the location list.
+! // Otherwise, don't copy the location list.
+! if (IS_LL_STACK(qi) && !newwin)
+! flags |= WSP_NEWLOC;
+
+ if (win_split(0, flags) == FAIL)
+ return FAIL;
+***************
+*** 2732,2740 ****
+ if (curwin->w_height < p_hh)
+ win_setheight((int)p_hh);
+
+! if (IS_LL_STACK(qi)) // not a quickfix list
+ {
+- // The new window should use the supplied location list
+ curwin->w_llist = qi;
+ qi->qf_refcount++;
+ }
+--- 2735,2745 ----
+ if (curwin->w_height < p_hh)
+ win_setheight((int)p_hh);
+
+! // When using location list, the new window should use the supplied
+! // location list. If the user asks to open a new window, then the new
+! // window will get a copy of the location list.
+! if (IS_LL_STACK(qi) && !newwin)
+ {
+ curwin->w_llist = qi;
+ qi->qf_refcount++;
+ }
+***************
+*** 2915,2934 ****
+ /*
+ * Find a suitable window for opening a file (qf_fnum) from the
+ * quickfix/location list and jump to it. If the file is already opened in a
+! * window, jump to it. Otherwise open a new window to display the file. This is
+! * called from either a quickfix or a location list window.
+ */
+ static int
+! qf_jump_to_usable_window(int qf_fnum, int *opened_window)
+ {
+ win_T *usable_win_ptr = NULL;
+ int usable_win;
+! qf_info_T *ll_ref;
+ win_T *win;
+
+ usable_win = 0;
+
+! ll_ref = curwin->w_llist_ref;
+ if (ll_ref != NULL)
+ {
+ // Find a non-quickfix window with this location list
+--- 2920,2945 ----
+ /*
+ * Find a suitable window for opening a file (qf_fnum) from the
+ * quickfix/location list and jump to it. If the file is already opened in a
+! * window, jump to it. Otherwise open a new window to display the file. If
+! * 'newwin' is TRUE, then always open a new window. This is called from either
+! * a quickfix or a location list window.
+ */
+ static int
+! qf_jump_to_usable_window(int qf_fnum, int newwin, int *opened_window)
+ {
+ win_T *usable_win_ptr = NULL;
+ int usable_win;
+! qf_info_T *ll_ref = NULL;
+ win_T *win;
+
+ usable_win = 0;
+
+! // If opening a new window, then don't use the location list referred by
+! // the current window. Otherwise two windows will refer to the same
+! // location list.
+! if (!newwin)
+! ll_ref = curwin->w_llist_ref;
+!
+ if (ll_ref != NULL)
+ {
+ // Find a non-quickfix window with this location list
+***************
+*** 2952,2958 ****
+
+ // If there is only one window and it is the quickfix window, create a
+ // new one above the quickfix window.
+! if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win)
+ {
+ if (qf_open_new_file_win(ll_ref) != OK)
+ return FAIL;
+--- 2963,2969 ----
+
+ // If there is only one window and it is the quickfix window, create a
+ // new one above the quickfix window.
+! if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win || newwin)
+ {
+ if (qf_open_new_file_win(ll_ref) != OK)
+ return FAIL;
+***************
+*** 3146,3162 ****
+
+ /*
+ * Find a usable window for opening a file from the quickfix/location list. If
+! * a window is not found then open a new window.
+ * Returns OK if successfully jumped or opened a window. Returns FAIL if not
+ * able to jump/open a window. Returns NOTDONE if a file is not associated
+ * with the entry.
+ */
+ static int
+! qf_jump_open_window(qf_info_T *qi, qfline_T *qf_ptr, int *opened_window)
+ {
+ // For ":helpgrep" find a help window or open one.
+ if (qf_ptr->qf_type == 1 && (!bt_help(curwin->w_buffer) || cmdmod.tab != 0))
+! if (jump_to_help_window(qi, opened_window) == FAIL)
+ return FAIL;
+
+ // If currently in the quickfix window, find another window to show the
+--- 3157,3178 ----
+
+ /*
+ * Find a usable window for opening a file from the quickfix/location list. If
+! * a window is not found then open a new window. If 'newwin' is TRUE, then open
+! * a new window.
+ * Returns OK if successfully jumped or opened a window. Returns FAIL if not
+ * able to jump/open a window. Returns NOTDONE if a file is not associated
+ * with the entry.
+ */
+ static int
+! qf_jump_open_window(
+! qf_info_T *qi,
+! qfline_T *qf_ptr,
+! int newwin,
+! int *opened_window)
+ {
+ // For ":helpgrep" find a help window or open one.
+ if (qf_ptr->qf_type == 1 && (!bt_help(curwin->w_buffer) || cmdmod.tab != 0))
+! if (jump_to_help_window(qi, newwin, opened_window) == FAIL)
+ return FAIL;
+
+ // If currently in the quickfix window, find another window to show the
+***************
+*** 3168,3174 ****
+ if (qf_ptr->qf_fnum == 0)
+ return NOTDONE;
+
+! if (qf_jump_to_usable_window(qf_ptr->qf_fnum, opened_window) == FAIL)
+ return FAIL;
+ }
+
+--- 3184,3191 ----
+ if (qf_ptr->qf_fnum == 0)
+ return NOTDONE;
+
+! if (qf_jump_to_usable_window(qf_ptr->qf_fnum, newwin,
+! opened_window) == FAIL)
+ return FAIL;
+ }
+
+***************
+*** 3229,3241 ****
+ }
+
+ /*
+! * jump to a quickfix line
+! * if dir == FORWARD go "errornr" valid entries forward
+! * if dir == BACKWARD go "errornr" valid entries backward
+! * if dir == FORWARD_FILE go "errornr" valid entries files backward
+! * if dir == BACKWARD_FILE go "errornr" valid entries files backward
+ * else if "errornr" is zero, redisplay the same line
+! * else go to entry "errornr"
+ */
+ void
+ qf_jump(qf_info_T *qi,
+--- 3246,3258 ----
+ }
+
+ /*
+! * Jump to a quickfix line.
+! * If dir == FORWARD go "errornr" valid entries forward.
+! * If dir == BACKWARD go "errornr" valid entries backward.
+! * If dir == FORWARD_FILE go "errornr" valid entries files backward.
+! * If dir == BACKWARD_FILE go "errornr" valid entries files backward
+ * else if "errornr" is zero, redisplay the same line
+! * else go to entry "errornr".
+ */
+ void
+ qf_jump(qf_info_T *qi,
+***************
+*** 3243,3248 ****
+--- 3260,3279 ----
+ int errornr,
+ int forceit)
+ {
++ qf_jump_newwin(qi, dir, errornr, forceit, FALSE);
++ }
++
++ /*
++ * As qf_info().
++ * If 'newwin' is TRUE, then open the file in a new window.
++ */
++ void
++ qf_jump_newwin(qf_info_T *qi,
++ int dir,
++ int errornr,
++ int forceit,
++ int newwin)
++ {
+ qf_list_T *qfl;
+ qfline_T *qf_ptr;
+ qfline_T *old_qf_ptr;
+***************
+*** 3288,3294 ****
+ // window
+ print_message = FALSE;
+
+! retval = qf_jump_open_window(qi, qf_ptr, &opened_window);
+ if (retval == FAIL)
+ goto failed;
+ if (retval == NOTDONE)
+--- 3319,3325 ----
+ // window
+ print_message = FALSE;
+
+! retval = qf_jump_open_window(qi, qf_ptr, newwin, &opened_window);
+ if (retval == FAIL)
+ goto failed;
+ if (retval == NOTDONE)
+***************
+*** 3824,3836 ****
+
+ if (split)
+ {
+! char_u cmd[32];
+!
+! vim_snprintf((char *)cmd, sizeof(cmd), "split +%ld%s",
+! (long)curwin->w_cursor.lnum,
+! IS_LL_WINDOW(curwin) ? "ll" : "cc");
+! if (do_cmdline_cmd(cmd) == OK)
+! do_cmdline_cmd((char_u *) "clearjumps");
+ return;
+ }
+
+--- 3855,3863 ----
+
+ if (split)
+ {
+! // Open the selected entry in a new window
+! qf_jump_newwin(qi, 0, (long)curwin->w_cursor.lnum, FALSE, TRUE);
+! do_cmdline_cmd((char_u *) "clearjumps");
+ return;
+ }
+
+*** ../vim-8.1.0522/src/testdir/test_quickfix.vim 2018-10-28 14:36:04.222247691 +0100
+--- src/testdir/test_quickfix.vim 2018-11-11 22:46:08.525548009 +0100
+***************
+*** 3718,3720 ****
+--- 3718,3766 ----
+ call assert_equal(getcurpos()[4], virtcol('.'))
+ cclose | helpclose
+ endfunc
++
++ " Test for opening a file from the quickfix window using CTRL-W <Enter>
++ " doesn't leave an empty buffer around.
++ func Test_splitview()
++ call s:create_test_file('Xtestfile1')
++ call s:create_test_file('Xtestfile2')
++ new | only
++ let last_bufnr = bufnr('Test_sv_1', 1)
++ let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4']
++ cgetexpr l
++ copen
++ let numbufs = len(getbufinfo())
++ exe "normal \<C-W>\<CR>"
++ copen
++ exe "normal j\<C-W>\<CR>"
++ " Make sure new empty buffers are not created
++ call assert_equal(numbufs, len(getbufinfo()))
++ " Creating a new buffer should use the next available buffer number
++ call assert_equal(last_bufnr + 4, bufnr("Test_sv_2", 1))
++ bwipe Test_sv_1
++ bwipe Test_sv_2
++ new | only
++
++ " When split opening files from location list window, make sure that two
++ " windows doesn't refer to the same location list
++ lgetexpr l
++ let locid = getloclist(0, {'id' : 0}).id
++ lopen
++ exe "normal \<C-W>\<CR>"
++ call assert_notequal(locid, getloclist(0, {'id' : 0}).id)
++ call assert_equal(0, getloclist(0, {'winid' : 0}).winid)
++ new | only
++
++ " When split opening files from a helpgrep location list window, a new help
++ " window should be opend with a copy of the location list.
++ lhelpgrep window
++ let locid = getloclist(0, {'id' : 0}).id
++ lwindow
++ exe "normal j\<C-W>\<CR>"
++ call assert_notequal(locid, getloclist(0, {'id' : 0}).id)
++ call assert_equal(0, getloclist(0, {'winid' : 0}).winid)
++ new | only
++
++ call delete('Xtestfile1')
++ call delete('Xtestfile2')
++ endfunc
+*** ../vim-8.1.0522/src/version.c 2018-11-11 22:18:17.214948188 +0100
+--- src/version.c 2018-11-11 22:49:25.382976159 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 523,
+ /**/
+
+--
+ARTHUR: Bloody peasant!
+DENNIS: Oh, what a give away. Did you hear that, did you hear that, eh?
+ That's what I'm on about -- did you see him repressing me, you saw it
+ didn't you?
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0524 b/data/vim/patches/8.1.0524
new file mode 100644
index 000000000..fe9ee5258
--- /dev/null
+++ b/data/vim/patches/8.1.0524
@@ -0,0 +1,63 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0524
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0524 (after 8.1.0522)
+Problem: Terminal test fails on Windows.
+Solution: Skip Test_terminal_does_not_truncate_last_newlines() for now.
+Files: src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0523/src/testdir/test_terminal.vim 2018-11-11 22:18:17.214948188 +0100
+--- src/testdir/test_terminal.vim 2018-11-11 23:13:11.944813440 +0100
+***************
+*** 1660,1666 ****
+ endfunc
+
+ func Test_terminal_does_not_truncate_last_newlines()
+! let cmd = has('win32') ? 'type' : 'cat'
+ let contents = [
+ \ [ 'One', '', 'X' ],
+ \ [ 'Two', '', '' ],
+--- 1660,1671 ----
+ endfunc
+
+ func Test_terminal_does_not_truncate_last_newlines()
+! " FIXME: currently doens't work for Windows
+! if has('win32')
+! return
+! endif
+!
+! let cmd = 'cat'
+ let contents = [
+ \ [ 'One', '', 'X' ],
+ \ [ 'Two', '', '' ],
+*** ../vim-8.1.0523/src/version.c 2018-11-11 22:50:20.810297803 +0100
+--- src/version.c 2018-11-11 23:14:17.976227493 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 524,
+ /**/
+
+--
+ARTHUR: You fight with the strength of many men, Sir knight.
+ I am Arthur, King of the Britons. [pause]
+ I seek the finest and the bravest knights in the land to join me
+ in my Court of Camelot. [pause]
+ You have proved yourself worthy; will you join me? [pause]
+ You make me sad. So be it. Come, Patsy.
+BLACK KNIGHT: None shall pass.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0525 b/data/vim/patches/8.1.0525
new file mode 100644
index 000000000..ddfdf1982
--- /dev/null
+++ b/data/vim/patches/8.1.0525
@@ -0,0 +1,122 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0525
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0525 (after 8.1.0524)
+Problem: Terminal test skips part on Windows.
+Solution: Fix Test_terminal_does_not_truncate_last_newlines(). (Hirohito
+ Higashi, closes #3606)
+Files: src/Make_mvc.mak, src/testdir/test_terminal.vim
+
+
+*** ../vim-8.1.0524/src/Make_mvc.mak 2018-10-14 16:25:04.904583951 +0200
+--- src/Make_mvc.mak 2018-11-12 21:38:15.892341805 +0100
+***************
+*** 1269,1275 ****
+
+
+ tags: notags
+! $(CTAGS) *.c *.cpp *.h if_perl.xs
+
+ notags:
+ - if exist tags del tags
+--- 1269,1276 ----
+
+
+ tags: notags
+! $(CTAGS) *.c *.cpp *.h
+! if exist auto\if_perl.c $(CTAGS) --append=yes auto\if_perl.c
+
+ notags:
+ - if exist tags del tags
+***************
+*** 1323,1329 ****
+ $(MAKE) /NOLOGO -f Make_dos.mak nolog
+ $(MAKE) /NOLOGO -f Make_dos.mak $@.res
+ $(MAKE) /NOLOGO -f Make_dos.mak report
+! cat messages
+ cd ..
+
+ ###########################################################################
+--- 1324,1330 ----
+ $(MAKE) /NOLOGO -f Make_dos.mak nolog
+ $(MAKE) /NOLOGO -f Make_dos.mak $@.res
+ $(MAKE) /NOLOGO -f Make_dos.mak report
+! type messages
+ cd ..
+
+ ###########################################################################
+*** ../vim-8.1.0524/src/testdir/test_terminal.vim 2018-11-11 23:14:51.315932322 +0100
+--- src/testdir/test_terminal.vim 2018-11-12 21:41:03.074839648 +0100
+***************
+*** 1660,1671 ****
+ endfunc
+
+ func Test_terminal_does_not_truncate_last_newlines()
+- " FIXME: currently doens't work for Windows
+- if has('win32')
+- return
+- endif
+-
+- let cmd = 'cat'
+ let contents = [
+ \ [ 'One', '', 'X' ],
+ \ [ 'Two', '', '' ],
+--- 1660,1665 ----
+***************
+*** 1674,1684 ****
+
+ for c in contents
+ call writefile(c, 'Xfile')
+! exec 'term' cmd 'Xfile'
+ let bnr = bufnr('$')
+ call assert_equal('terminal', getbufvar(bnr, '&buftype'))
+ call WaitForAssert({-> assert_equal('finished', term_getstatus(bnr))})
+! sleep 50m
+ call assert_equal(c, getline(1, line('$')))
+ quit
+ endfor
+--- 1668,1682 ----
+
+ for c in contents
+ call writefile(c, 'Xfile')
+! if has('win32')
+! term cmd /c type Xfile
+! else
+! term cat Xfile
+! endif
+ let bnr = bufnr('$')
+ call assert_equal('terminal', getbufvar(bnr, '&buftype'))
+ call WaitForAssert({-> assert_equal('finished', term_getstatus(bnr))})
+! sleep 100m
+ call assert_equal(c, getline(1, line('$')))
+ quit
+ endfor
+*** ../vim-8.1.0524/src/version.c 2018-11-11 23:14:51.315932322 +0100
+--- src/version.c 2018-11-12 21:42:01.334323241 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 525,
+ /**/
+
+--
+BLACK KNIGHT: I move for no man.
+ARTHUR: So be it!
+ [hah] [parry thrust]
+ [ARTHUR chops the BLACK KNIGHT's left arm off]
+ARTHUR: Now stand aside, worthy adversary.
+BLACK KNIGHT: 'Tis but a scratch.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0526 b/data/vim/patches/8.1.0526
new file mode 100644
index 000000000..470391882
--- /dev/null
+++ b/data/vim/patches/8.1.0526
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0526
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0526
+Problem: Running out of signal stack in RealWaitForChar. (Vladimir Marek)
+Solution: Make the fd_set variables static.
+Files: src/os_unix.c
+
+
+*** ../vim-8.1.0525/src/os_unix.c 2018-09-30 21:43:17.203693237 +0200
+--- src/os_unix.c 2018-11-12 21:44:50.744848498 +0100
+***************
+*** 6194,6200 ****
+
+ struct timeval tv;
+ struct timeval *tvp;
+! fd_set rfds, wfds, efds;
+ int maxfd;
+ long towait = msec;
+
+--- 6194,6202 ----
+
+ struct timeval tv;
+ struct timeval *tvp;
+! // These are static because they can take 8 Kbyte each and cause the
+! // signal stack to run out with -O3.
+! static fd_set rfds, wfds, efds;
+ int maxfd;
+ long towait = msec;
+
+*** ../vim-8.1.0525/src/version.c 2018-11-12 21:42:20.678152930 +0100
+--- src/version.c 2018-11-12 21:43:28.949556003 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 526,
+ /**/
+
+--
+ARTHUR: A scratch? Your arm's off!
+BLACK KNIGHT: No, it isn't.
+ARTHUR: Well, what's that then?
+BLACK KNIGHT: I've had worse.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0527 b/data/vim/patches/8.1.0527
new file mode 100644
index 000000000..60d3e0e74
--- /dev/null
+++ b/data/vim/patches/8.1.0527
@@ -0,0 +1,62 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0527
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0527
+Problem: Using 'shiftwidth' from wrong buffer for folding.
+Solution: Use "buf" instead of "curbuf". (Christian Brabandt)
+Files: src/fold.c
+
+
+*** ../vim-8.1.0526/src/fold.c 2017-09-16 19:50:08.000000000 +0200
+--- src/fold.c 2018-11-14 21:40:01.495215394 +0100
+***************
+*** 155,160 ****
+--- 155,161 ----
+ int low_level = 0;
+
+ checkupdate(win);
++
+ /*
+ * Return quickly when there is no folding at all in this window.
+ */
+***************
+*** 3219,3225 ****
+ flp->lvl = -1;
+ }
+ else
+! flp->lvl = get_indent_buf(buf, lnum) / get_sw_value(curbuf);
+ if (flp->lvl > flp->wp->w_p_fdn)
+ {
+ flp->lvl = flp->wp->w_p_fdn;
+--- 3220,3226 ----
+ flp->lvl = -1;
+ }
+ else
+! flp->lvl = get_indent_buf(buf, lnum) / get_sw_value(buf);
+ if (flp->lvl > flp->wp->w_p_fdn)
+ {
+ flp->lvl = flp->wp->w_p_fdn;
+*** ../vim-8.1.0526/src/version.c 2018-11-12 21:45:04.596729428 +0100
+--- src/version.c 2018-11-14 21:45:09.316748673 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 527,
+ /**/
+
+--
+If your life is a hard drive,
+Christ can be your backup.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0528 b/data/vim/patches/8.1.0528
new file mode 100644
index 000000000..bdccfaca0
--- /dev/null
+++ b/data/vim/patches/8.1.0528
@@ -0,0 +1,797 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0528
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0528
+Problem: Various typos in comments.
+Solution: Fix the typos.
+Files: src/fileio.c, src/gui.c, src/macros.h, src/screen.c, src/search.c,
+ src/spell.c, src/spellfile.c, src/vim.h, src/testdir/README.txt,
+ src/INSTALL, src/gui_athena.c, src/gui_gtk.c,
+ src/gui_gtk_x11.c, src/gui_motif.c, src/gui_xmebw.c,
+ src/if_tcl.c, src/os_amiga.c, src/gui_w32.c, src/os_win32.c,
+ src/gui_mac.c, src/os_vms_fix.com
+
+
+*** ../vim-8.1.0527/src/fileio.c 2018-10-14 21:40:57.352848455 +0200
+--- src/fileio.c 2018-10-23 21:33:23.638928974 +0200
+***************
+*** 8086,8092 ****
+
+ /*
+ * Add an autocmd group name.
+! * Return it's ID. Returns AUGROUP_ERROR (< 0) for error.
+ */
+ static int
+ au_new_group(char_u *name)
+--- 8086,8092 ----
+
+ /*
+ * Add an autocmd group name.
+! * Return its ID. Returns AUGROUP_ERROR (< 0) for error.
+ */
+ static int
+ au_new_group(char_u *name)
+***************
+*** 8153,8159 ****
+
+ /*
+ * Find the ID of an autocmd group name.
+! * Return it's ID. Returns AUGROUP_ERROR (< 0) for error.
+ */
+ static int
+ au_find_group(char_u *name)
+--- 8153,8159 ----
+
+ /*
+ * Find the ID of an autocmd group name.
+! * Return its ID. Returns AUGROUP_ERROR (< 0) for error.
+ */
+ static int
+ au_find_group(char_u *name)
+*** ../vim-8.1.0527/src/gui.c 2018-09-30 21:43:17.191693320 +0200
+--- src/gui.c 2018-10-23 21:33:23.642928936 +0200
+***************
+*** 5501,5507 ****
+ p = NULL;
+
+ /* Handle the drop, :edit or :split to get to the file. This also
+! * frees fnames[]. Skip this if there is only one item it's a
+ * directory and Shift is held down. */
+ if (count == 1 && (modifiers & MOUSE_SHIFT) != 0
+ && mch_isdir(fnames[0]))
+--- 5501,5507 ----
+ p = NULL;
+
+ /* Handle the drop, :edit or :split to get to the file. This also
+! * frees fnames[]. Skip this if there is only one item, it's a
+ * directory and Shift is held down. */
+ if (count == 1 && (modifiers & MOUSE_SHIFT) != 0
+ && mch_isdir(fnames[0]))
+*** ../vim-8.1.0527/src/macros.h 2018-07-29 16:09:14.644945560 +0200
+--- src/macros.h 2018-10-23 21:33:23.646928902 +0200
+***************
+*** 192,198 ****
+ # define mch_access(n, p) access((n), (p))
+ # endif
+ # define mch_fstat(n, p) fstat((n), (p))
+! # ifdef MSWIN /* has it's own mch_stat() function */
+ # define mch_stat(n, p) vim_stat((n), (p))
+ # else
+ # ifdef STAT_IGNORES_SLASH
+--- 192,198 ----
+ # define mch_access(n, p) access((n), (p))
+ # endif
+ # define mch_fstat(n, p) fstat((n), (p))
+! # ifdef MSWIN /* has its own mch_stat() function */
+ # define mch_stat(n, p) vim_stat((n), (p))
+ # else
+ # ifdef STAT_IGNORES_SLASH
+*** ../vim-8.1.0527/src/screen.c 2018-10-02 21:48:30.641640211 +0200
+--- src/screen.c 2018-10-23 21:33:23.646928902 +0200
+***************
+*** 6223,6229 ****
+ * first highlighted character. The stop-highlighting code must
+ * be written with the cursor just after the last highlighted
+ * character.
+! * Overwriting a character doesn't remove it's highlighting. Need
+ * to clear the rest of the line, and force redrawing it
+ * completely.
+ */
+--- 6223,6229 ----
+ * first highlighted character. The stop-highlighting code must
+ * be written with the cursor just after the last highlighted
+ * character.
+! * Overwriting a character doesn't remove its highlighting. Need
+ * to clear the rest of the line, and force redrawing it
+ * completely.
+ */
+*** ../vim-8.1.0527/src/search.c 2018-09-30 21:43:17.203693237 +0200
+--- src/search.c 2018-10-23 21:33:23.646928902 +0200
+***************
+*** 357,365 ****
+ * Save and restore the search pattern for incremental highlight search
+ * feature.
+ *
+! * It's similar but differnt from save_search_patterns() and
+ * restore_search_patterns(), because the search pattern must be restored when
+! * cannceling incremental searching even if it's called inside user functions.
+ */
+ void
+ save_last_search_pattern(void)
+--- 357,365 ----
+ * Save and restore the search pattern for incremental highlight search
+ * feature.
+ *
+! * It's similar to but different from save_search_patterns() and
+ * restore_search_patterns(), because the search pattern must be restored when
+! * canceling incremental searching even if it's called inside user functions.
+ */
+ void
+ save_last_search_pattern(void)
+***************
+*** 2869,2875 ****
+ }
+ #endif
+
+! /* POSIX has it's own ideas of what a paragraph boundary is and it
+ * doesn't match historical Vi: It also stops at a "{" in the
+ * first column and at an empty line. */
+ if (!first && did_skip && (startPS(curr, what, both)
+--- 2869,2875 ----
+ }
+ #endif
+
+! /* POSIX has its own ideas of what a paragraph boundary is and it
+ * doesn't match historical Vi: It also stops at a "{" in the
+ * first column and at an empty line. */
+ if (!first && did_skip && (startPS(curr, what, both)
+*** ../vim-8.1.0527/src/spell.c 2018-09-30 21:43:17.203693237 +0200
+--- src/spell.c 2018-10-23 21:33:23.646928902 +0200
+***************
+*** 2686,2692 ****
+
+ /*
+ * Find the region "region[2]" in "rp" (points to "sl_regions").
+! * Each region is simply stored as the two characters of it's name.
+ * Returns the index if found (first is 0), REGION_ALL if not found.
+ */
+ static int
+--- 2686,2692 ----
+
+ /*
+ * Find the region "region[2]" in "rp" (points to "sl_regions").
+! * Each region is simply stored as the two characters of its name.
+ * Returns the index if found (first is 0), REGION_ALL if not found.
+ */
+ static int
+*** ../vim-8.1.0527/src/spellfile.c 2018-09-30 21:43:17.203693237 +0200
+--- src/spellfile.c 2018-10-23 21:33:23.650928864 +0200
+***************
+*** 3784,3790 ****
+ if (get_affitem(affile->af_flagtype, &p) != 0)
+ {
+ /* A flag is a postponed prefix flag if it appears in "af_pref"
+! * and it's ID is not zero. */
+ vim_strncpy(key, prevp, p - prevp);
+ hi = hash_find(&affile->af_pref, key);
+ if (!HASHITEM_EMPTY(hi))
+--- 3784,3790 ----
+ if (get_affitem(affile->af_flagtype, &p) != 0)
+ {
+ /* A flag is a postponed prefix flag if it appears in "af_pref"
+! * and its ID is not zero. */
+ vim_strncpy(key, prevp, p - prevp);
+ hi = hash_find(&affile->af_pref, key);
+ if (!HASHITEM_EMPTY(hi))
+*** ../vim-8.1.0527/src/vim.h 2018-10-07 23:16:33.134616234 +0200
+--- src/vim.h 2018-10-23 20:29:03.588597981 +0200
+***************
+*** 1270,1276 ****
+ EVENT_BUFWRITECMD, // write buffer using command
+ EVENT_BUFWRITEPOST, // after writing a buffer
+ EVENT_BUFWRITEPRE, // before writing a buffer
+! EVENT_CMDLINECHANGED, // command line was modified*/
+ EVENT_CMDLINEENTER, // after entering the command line
+ EVENT_CMDLINELEAVE, // before leaving the command line
+ EVENT_CMDUNDEFINED, // command undefined
+--- 1270,1276 ----
+ EVENT_BUFWRITECMD, // write buffer using command
+ EVENT_BUFWRITEPOST, // after writing a buffer
+ EVENT_BUFWRITEPRE, // before writing a buffer
+! EVENT_CMDLINECHANGED, // command line was modified
+ EVENT_CMDLINEENTER, // after entering the command line
+ EVENT_CMDLINELEAVE, // before leaving the command line
+ EVENT_CMDUNDEFINED, // command undefined
+*** ../vim-8.1.0527/src/testdir/README.txt 2018-09-09 15:56:03.143904759 +0200
+--- src/testdir/README.txt 2018-09-16 14:26:14.690949666 +0200
+***************
+*** 54,60 ****
+
+ TO ADD A SCREEN DUMP TEST:
+
+! Mostly the same as writing a new style test. Additonally, see help on
+ "terminal-dumptest". Put the reference dump in "dumps/Test_func_name.dump".
+
+
+--- 54,60 ----
+
+ TO ADD A SCREEN DUMP TEST:
+
+! Mostly the same as writing a new style test. Additionally, see help on
+ "terminal-dumptest". Put the reference dump in "dumps/Test_func_name.dump".
+
+
+*** ../vim-8.1.0527/src/INSTALL 2016-11-12 20:11:25.000000000 +0100
+--- src/INSTALL 2018-09-08 15:56:45.698920295 +0200
+***************
+*** 11,20 ****
+
+ See INSTALLami.txt for Amiga
+ See INSTALLmac.txt for Macintosh
+! See INSTALLpc.txt for PC (Windows 95/98/NT/XP/Vista/7/8/10)
+ See INSTALLvms.txt for VMS
+ See INSTALLx.txt for cross-compiling on Unix
+! See ../README_390.txt for OS/390 Unix
+ See ../runtime/doc/os_beos.txt for BeBox
+
+
+--- 11,20 ----
+
+ See INSTALLami.txt for Amiga
+ See INSTALLmac.txt for Macintosh
+! See INSTALLpc.txt for PC (Windows XP/Vista/7/8/10)
+ See INSTALLvms.txt for VMS
+ See INSTALLx.txt for cross-compiling on Unix
+! See ../READMEdir/README_390.txt for z/OS and OS/390 Unix
+ See ../runtime/doc/os_beos.txt for BeBox
+
+
+*** ../vim-8.1.0527/src/gui_athena.c 2018-09-30 21:43:17.191693320 +0200
+--- src/gui_athena.c 2018-10-23 21:33:23.642928936 +0200
+***************
+*** 900,906 ****
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XtNfontSet, gui.menu_fontset, NULL);
+! /* We should force the widget to recalculate it's
+ * geometry now. */
+ XtManageChild(id);
+ }
+--- 900,906 ----
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XtNfontSet, gui.menu_fontset, NULL);
+! /* We should force the widget to recalculate its
+ * geometry now. */
+ XtManageChild(id);
+ }
+***************
+*** 929,935 ****
+ if (has_submenu(id))
+ XtVaSetValues(id, XtNrightBitmap, pullerBitmap, NULL);
+
+! /* Force the widget to recalculate it's geometry now. */
+ if (managed)
+ XtManageChild(id);
+ }
+--- 929,935 ----
+ if (has_submenu(id))
+ XtVaSetValues(id, XtNrightBitmap, pullerBitmap, NULL);
+
+! /* Force the widget to recalculate its geometry now. */
+ if (managed)
+ XtManageChild(id);
+ }
+***************
+*** 989,995 ****
+ }
+ }
+ /* Now, to simulate the window being resized. Only, this
+! * will resize the window to it's current state.
+ *
+ * There has to be a better way, but I do not see one at this time.
+ * (David Harrison)
+--- 989,995 ----
+ }
+ }
+ /* Now, to simulate the window being resized. Only, this
+! * will resize the window to its current state.
+ *
+ * There has to be a better way, but I do not see one at this time.
+ * (David Harrison)
+***************
+*** 1071,1077 ****
+ }
+
+ # ifdef FEAT_BEVAL_GUI
+! /* If we have a tooltip, then we need to change it's colors */
+ if (mp->tip != NULL)
+ {
+ Arg args[2];
+--- 1071,1077 ----
+ }
+
+ # ifdef FEAT_BEVAL_GUI
+! /* If we have a tooltip, then we need to change its colors */
+ if (mp->tip != NULL)
+ {
+ Arg args[2];
+***************
+*** 1089,1095 ****
+ {
+ gui_athena_menu_font(mp->id);
+ #ifdef FEAT_BEVAL_GUI
+! /* If we have a tooltip, then we need to change it's font */
+ /* Assume XtNinternational == True (in createBalloonEvalWindow)
+ */
+ if (mp->tip != NULL)
+--- 1089,1095 ----
+ {
+ gui_athena_menu_font(mp->id);
+ #ifdef FEAT_BEVAL_GUI
+! /* If we have a tooltip, then we need to change its font */
+ /* Assume XtNinternational == True (in createBalloonEvalWindow)
+ */
+ if (mp->tip != NULL)
+***************
+*** 1552,1558 ****
+ * This is a hack to stop the Athena simpleMenuWidget from getting a
+ * BadValue error when a menu's last child is destroyed. We check to
+ * see if this is the last child and if so, don't delete it. The parent
+! * will be deleted soon anyway, and it will delete it's children like
+ * all good widgets do.
+ */
+ /* NOTE: The cause of the BadValue X Protocol Error is because when the
+--- 1552,1558 ----
+ * This is a hack to stop the Athena simpleMenuWidget from getting a
+ * BadValue error when a menu's last child is destroyed. We check to
+ * see if this is the last child and if so, don't delete it. The parent
+! * will be deleted soon anyway, and it will delete its children like
+ * all good widgets do.
+ */
+ /* NOTE: The cause of the BadValue X Protocol Error is because when the
+*** ../vim-8.1.0527/src/gui_gtk.c 2018-09-18 22:29:59.888041388 +0200
+--- src/gui_gtk.c 2018-10-23 21:33:23.642928936 +0200
+***************
+*** 925,931 ****
+ g_object_ref(menu->id);
+
+ /* Workaround for a spurious gtk warning in Ubuntu: "Trying to remove
+! * a child that doesn't believe we're it's parent."
+ * Remove widget from gui.menubar before destroying it. */
+ if (menu->id != NULL && gui.menubar != NULL
+ && gtk_widget_get_parent(menu->id) == gui.menubar)
+--- 925,931 ----
+ g_object_ref(menu->id);
+
+ /* Workaround for a spurious gtk warning in Ubuntu: "Trying to remove
+! * a child that doesn't believe we're its parent."
+ * Remove widget from gui.menubar before destroying it. */
+ if (menu->id != NULL && gui.menubar != NULL
+ && gtk_widget_get_parent(menu->id) == gui.menubar)
+*** ../vim-8.1.0527/src/gui_gtk_x11.c 2018-09-30 21:43:17.191693320 +0200
+--- src/gui_gtk_x11.c 2018-10-23 21:33:23.642928936 +0200
+***************
+*** 4284,4290 ****
+ * hints (and thus the required size from -geom), but that after that we
+ * put the hints back to normal (the actual minimum size) so we may
+ * subsequently be resized smaller. GtkSocket (the parent end) uses the
+! * plug's window 'min hints to set *it's* minimum size, but that's also the
+ * only way we have of making ourselves bigger (by set lines/columns).
+ * Thus set hints at start-up to ensure correct init. size, then a
+ * second after the final attempt to reset the real minimum hints (done by
+--- 4284,4290 ----
+ * hints (and thus the required size from -geom), but that after that we
+ * put the hints back to normal (the actual minimum size) so we may
+ * subsequently be resized smaller. GtkSocket (the parent end) uses the
+! * plug's window 'min hints to set *its* minimum size, but that's also the
+ * only way we have of making ourselves bigger (by set lines/columns).
+ * Thus set hints at start-up to ensure correct init. size, then a
+ * second after the final attempt to reset the real minimum hints (done by
+*** ../vim-8.1.0527/src/gui_motif.c 2018-09-30 21:43:17.191693320 +0200
+--- src/gui_motif.c 2018-10-23 21:33:23.642928936 +0200
+***************
+*** 1114,1120 ****
+ XtManageChild(id);
+
+ /*
+! * Now find the menu item that is the furthest down, and get it's position.
+ */
+ maxy = 0;
+ for (mp = root_menu; mp != NULL; mp = mp->next)
+--- 1114,1120 ----
+ XtManageChild(id);
+
+ /*
+! * Now find the menu item that is the furthest down, and get its position.
+ */
+ maxy = 0;
+ for (mp = root_menu; mp != NULL; mp = mp->next)
+***************
+*** 1550,1556 ****
+ XtSetValues(mp->id, args, n);
+ }
+ # ifdef FEAT_BEVAL_GUI
+! /* If we have a tooltip, then we need to change it's font */
+ if (mp->tip != NULL)
+ {
+ Arg args[2];
+--- 1550,1556 ----
+ XtSetValues(mp->id, args, n);
+ }
+ # ifdef FEAT_BEVAL_GUI
+! /* If we have a tooltip, then we need to change its font */
+ if (mp->tip != NULL)
+ {
+ Arg args[2];
+***************
+*** 1568,1574 ****
+ {
+ gui_motif_menu_fontlist(mp->id);
+ #ifdef FEAT_BEVAL_GUI
+! /* If we have a tooltip, then we need to change it's font */
+ if (mp->tip != NULL)
+ {
+ Arg args[1];
+--- 1568,1574 ----
+ {
+ gui_motif_menu_fontlist(mp->id);
+ #ifdef FEAT_BEVAL_GUI
+! /* If we have a tooltip, then we need to change its font */
+ if (mp->tip != NULL)
+ {
+ Arg args[1];
+***************
+*** 2089,2095 ****
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XmNfontList, fl, NULL);
+! /* We should force the widget to recalculate it's
+ * geometry now. */
+ XtManageChild(id);
+ }
+--- 2089,2095 ----
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XmNfontList, fl, NULL);
+! /* We should force the widget to recalculate its
+ * geometry now. */
+ XtManageChild(id);
+ }
+***************
+*** 2108,2114 ****
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XmNfontList, fl, NULL);
+! /* We should force the widget to recalculate it's
+ * geometry now. */
+ XtManageChild(id);
+ }
+--- 2108,2114 ----
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XmNfontList, fl, NULL);
+! /* We should force the widget to recalculate its
+ * geometry now. */
+ XtManageChild(id);
+ }
+***************
+*** 3407,3413 ****
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XmNfontList, fl, NULL);
+! /* We should force the widget to recalculate it's
+ * geometry now. */
+ XtManageChild(id);
+ }
+--- 3407,3413 ----
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XmNfontList, fl, NULL);
+! /* We should force the widget to recalculate its
+ * geometry now. */
+ XtManageChild(id);
+ }
+***************
+*** 3428,3434 ****
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XmNfontList, fl, NULL);
+! /* We should force the widget to recalculate it's
+ * geometry now. */
+ XtManageChild(id);
+ }
+--- 3428,3434 ----
+ {
+ XtUnmanageChild(id);
+ XtVaSetValues(id, XmNfontList, fl, NULL);
+! /* We should force the widget to recalculate its
+ * geometry now. */
+ XtManageChild(id);
+ }
+*** ../vim-8.1.0527/src/gui_xmebw.c 2016-08-29 22:42:20.000000000 +0200
+--- src/gui_xmebw.c 2018-10-23 21:33:23.642928936 +0200
+***************
+*** 50,56 ****
+ * implementation. Also missing in Motif 1.2 and earlier.
+ *
+ * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the
+! * pixmap will not appear in it's caches properly. We cache the interesting
+ * values in XmEnhancedButtonPart instead ourself.
+ */
+ #if defined(LESSTIF_VERSION) || (XmVersion <= 1002)
+--- 50,56 ----
+ * implementation. Also missing in Motif 1.2 and earlier.
+ *
+ * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the
+! * pixmap will not appear in its caches properly. We cache the interesting
+ * values in XmEnhancedButtonPart instead ourself.
+ */
+ #if defined(LESSTIF_VERSION) || (XmVersion <= 1002)
+*** ../vim-8.1.0527/src/if_tcl.c 2018-07-25 22:02:32.235966277 +0200
+--- src/if_tcl.c 2018-10-23 21:33:23.646928902 +0200
+***************
+*** 113,119 ****
+
+ /*
+ * List of Tcl interpreters who reference a vim window or buffer.
+! * Each buffer and window has it's own list in the w_tcl_ref or b_tcl_ref
+ * struct member. We need this because Tcl can create sub-interpreters with
+ * the "interp" command, and each interpreter can reference all windows and
+ * buffers.
+--- 113,119 ----
+
+ /*
+ * List of Tcl interpreters who reference a vim window or buffer.
+! * Each buffer and window has its own list in the w_tcl_ref or b_tcl_ref
+ * struct member. We need this because Tcl can create sub-interpreters with
+ * the "interp" command, and each interpreter can reference all windows and
+ * buffers.
+*** ../vim-8.1.0527/src/os_amiga.c 2018-08-07 22:30:26.670240840 +0200
+--- src/os_amiga.c 2018-10-23 21:33:23.646928902 +0200
+***************
+*** 941,947 ****
+ * getch() will return immediately rather than wait for a return. You
+ * lose editing features though.
+ *
+! * Cooked: This function returns the designate file pointer to it's normal,
+ * wait for a <CR> mode. This is exactly like raw() except that
+ * it sends a 0 to the console to make it back into a CON: from a RAW:
+ */
+--- 941,947 ----
+ * getch() will return immediately rather than wait for a return. You
+ * lose editing features though.
+ *
+! * Cooked: This function returns the designate file pointer to its normal,
+ * wait for a <CR> mode. This is exactly like raw() except that
+ * it sends a 0 to the console to make it back into a CON: from a RAW:
+ */
+***************
+*** 1387,1393 ****
+ got_int = TRUE;
+ }
+
+! /* this routine causes manx to use this Chk_Abort() rather than it's own */
+ /* otherwise it resets our ^C when doing any I/O (even when Enable_Abort */
+ /* is zero). Since we want to check for our own ^C's */
+
+--- 1387,1393 ----
+ got_int = TRUE;
+ }
+
+! /* this routine causes manx to use this Chk_Abort() rather than its own */
+ /* otherwise it resets our ^C when doing any I/O (even when Enable_Abort */
+ /* is zero). Since we want to check for our own ^C's */
+
+*** ../vim-8.1.0527/src/gui_w32.c 2018-09-30 21:43:17.191693320 +0200
+--- src/gui_w32.c 2018-10-23 21:33:23.642928936 +0200
+***************
+*** 5658,5664 ****
+ HMONITOR mon;
+ MONITORINFO moninfo;
+
+! /* work out which monitor the window is on, and get *it's* work area */
+ mon = MonitorFromWindow(s_hwnd, MONITOR_DEFAULTTOPRIMARY);
+ if (mon != NULL)
+ {
+--- 5658,5664 ----
+ HMONITOR mon;
+ MONITORINFO moninfo;
+
+! /* work out which monitor the window is on, and get *its* work area */
+ mon = MonitorFromWindow(s_hwnd, MONITOR_DEFAULTTOPRIMARY);
+ if (mon != NULL)
+ {
+*** ../vim-8.1.0527/src/os_win32.c 2018-10-07 15:49:50.819989002 +0200
+--- src/os_win32.c 2018-10-16 21:14:09.815286843 +0200
+***************
+*** 5035,5043 ****
+ {
+ /* Use a terminal window to run the command in. */
+ x = mch_call_shell_terminal(cmd, options);
+! #ifdef FEAT_TITLE
+ resettitle();
+! #endif
+ return x;
+ }
+ #endif
+--- 5035,5043 ----
+ {
+ /* Use a terminal window to run the command in. */
+ x = mch_call_shell_terminal(cmd, options);
+! # ifdef FEAT_TITLE
+ resettitle();
+! # endif
+ return x;
+ }
+ #endif
+***************
+*** 7341,7347 ****
+ */
+
+ /* These magic numbers are from the MS header files */
+! #define MIN_STACK_WINNT 2
+
+ /*
+ * This function does the same thing as _resetstkoflw(), which is only
+--- 7341,7347 ----
+ */
+
+ /* These magic numbers are from the MS header files */
+! # define MIN_STACK_WINNT 2
+
+ /*
+ * This function does the same thing as _resetstkoflw(), which is only
+***************
+*** 7586,7592 ****
+ {
+ int literal = used_file_literal;
+
+! #ifdef FEAT_DIFF
+ /* When using diff mode may need to concatenate file name to
+ * directory name. Just like it's done in main(). */
+ if (used_file_diff_mode && mch_isdir(str) && GARGCOUNT > 0
+--- 7586,7592 ----
+ {
+ int literal = used_file_literal;
+
+! # ifdef FEAT_DIFF
+ /* When using diff mode may need to concatenate file name to
+ * directory name. Just like it's done in main(). */
+ if (used_file_diff_mode && mch_isdir(str) && GARGCOUNT > 0
+***************
+*** 7601,7607 ****
+ str = r;
+ }
+ }
+! #endif
+ /* Re-use the old buffer by renaming it. When not using literal
+ * names it's done by alist_expand() below. */
+ if (used_file_literal)
+--- 7601,7607 ----
+ str = r;
+ }
+ }
+! # endif
+ /* Re-use the old buffer by renaming it. When not using literal
+ * names it's done by alist_expand() below. */
+ if (used_file_literal)
+***************
+*** 7679,7687 ****
+ #endif
+ {
+ _putenv((char *)envbuf);
+! # ifdef libintl_putenv
+ libintl_putenv((char *)envbuf);
+! # endif
+ /* Unlike Un*x systems, we can free the string for _putenv(). */
+ vim_free(envbuf);
+ }
+--- 7679,7687 ----
+ #endif
+ {
+ _putenv((char *)envbuf);
+! #ifdef libintl_putenv
+ libintl_putenv((char *)envbuf);
+! #endif
+ /* Unlike Un*x systems, we can free the string for _putenv(). */
+ vim_free(envbuf);
+ }
+***************
+*** 7742,7748 ****
+ fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg);
+ default_console_color_bg = bg;
+ default_console_color_fg = fg;
+! #endif
+
+ set_console_color_rgb();
+ }
+--- 7742,7748 ----
+ fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg);
+ default_console_color_bg = bg;
+ default_console_color_fg = fg;
+! # endif
+
+ set_console_color_rgb();
+ }
+*** ../vim-8.1.0527/src/gui_mac.c 2018-09-30 21:43:17.191693320 +0200
+--- src/gui_mac.c 2018-10-23 21:33:23.642928936 +0200
+***************
+*** 2278,2284 ****
+ if (p_mh)
+ ObscureCursor();
+
+! /* Get the key code and it's ASCII representation */
+ key_sym = ((theEvent->message & keyCodeMask) >> 8);
+ key_char = theEvent->message & charCodeMask;
+ num = 1;
+--- 2278,2284 ----
+ if (p_mh)
+ ObscureCursor();
+
+! /* Get the key code and its ASCII representation */
+ key_sym = ((theEvent->message & keyCodeMask) >> 8);
+ key_char = theEvent->message & charCodeMask;
+ num = 1;
+***************
+*** 2597,2603 ****
+ bail:
+ /*
+ * when we fail give any additional callback handler a chance to perform
+! * it's actions
+ */
+ return CallNextEventHandler(nextHandler, theEvent);
+ }
+--- 2597,2603 ----
+ bail:
+ /*
+ * when we fail give any additional callback handler a chance to perform
+! * its actions
+ */
+ return CallNextEventHandler(nextHandler, theEvent);
+ }
+*** ../vim-8.1.0527/src/os_vms_fix.com 2010-05-15 13:04:11.000000000 +0200
+--- src/os_vms_fix.com 2018-10-23 21:33:23.646928902 +0200
+***************
+*** 15,21 ****
+ $! remember when DCL didn't have them, and I wanted this to be as
+ $! portable as possible, so... If you want to structure it nicer for
+ $! your own use, please feel free to do so. However, please only
+! $! distribute it in it's original form.
+ $!
+ $! I wrote it in DCL for portability and ease of use - a C version
+ $! would definitely run faster, but then I'd have to deal with compiler
+--- 15,21 ----
+ $! remember when DCL didn't have them, and I wanted this to be as
+ $! portable as possible, so... If you want to structure it nicer for
+ $! your own use, please feel free to do so. However, please only
+! $! distribute it in its original form.
+ $!
+ $! I wrote it in DCL for portability and ease of use - a C version
+ $! would definitely run faster, but then I'd have to deal with compiler
+*** ../vim-8.1.0527/src/version.c 2018-11-14 21:45:28.996589969 +0100
+--- src/version.c 2018-11-16 16:19:14.749927495 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 528,
+ /**/
+
+--
+ARTHUR: Listen, old crone! Unless you tell us where we can buy a shrubbery,
+ my friend and I will ... we will say "Ni!"
+CRONE: Do your worst!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0529 b/data/vim/patches/8.1.0529
new file mode 100644
index 000000000..cebe3f82e
--- /dev/null
+++ b/data/vim/patches/8.1.0529
@@ -0,0 +1,113 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0529
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0529
+Problem: Flaky test sometimes fails in different ways.
+Solution: When the second run gives a different error, try running the test
+ again, up to five times.
+Files: src/testdir/runtest.vim
+
+
+*** ../vim-8.1.0528/src/testdir/runtest.vim 2018-11-11 18:51:39.289611371 +0100
+--- src/testdir/runtest.vim 2018-11-16 16:50:36.895763420 +0100
+***************
+*** 314,341 ****
+ for s:test in sort(s:tests)
+ " Silence, please!
+ set belloff=all
+
+ call RunTheTest(s:test)
+
+ if len(v:errors) > 0 && index(s:flaky, s:test) >= 0
+! call add(s:messages, 'Found errors in ' . s:test . ':')
+! call extend(s:messages, v:errors)
+! call add(s:messages, 'Flaky test failed, running it again')
+! let first_run = v:errors
+!
+! " Flakiness is often caused by the system being very busy. Sleep a couple
+! " of seconds to have a higher chance of succeeding the second time.
+! sleep 2
+!
+! let v:errors = []
+! call RunTheTest(s:test)
+! if len(v:errors) > 0
+! let second_run = v:errors
+! let v:errors = ['First run:']
+! call extend(v:errors, first_run)
+! call add(v:errors, 'Second run:')
+! call extend(v:errors, second_run)
+! endif
+ endif
+
+ call AfterTheTest()
+--- 314,360 ----
+ for s:test in sort(s:tests)
+ " Silence, please!
+ set belloff=all
++ let prev_error = ''
++ let total_errors = []
++ let run_nr = 1
+
+ call RunTheTest(s:test)
+
++ " Repeat a flaky test. Give up when:
++ " - it fails again with the same message
++ " - it fails five times (with a different mesage)
+ if len(v:errors) > 0 && index(s:flaky, s:test) >= 0
+! while 1
+! call add(s:messages, 'Found errors in ' . s:test . ':')
+! call extend(s:messages, v:errors)
+!
+! call add(total_errors, 'Run ' . run_nr . ':')
+! call extend(total_errors, v:errors)
+!
+! if run_nr == 5 || prev_error == v:errors[0]
+! call add(total_errors, 'Flaky test failed too often, giving up')
+! let v:errors = total_errors
+! break
+! endif
+!
+! call add(s:messages, 'Flaky test failed, running it again')
+!
+! " Flakiness is often caused by the system being very busy. Sleep a
+! " couple of seconds to have a higher chance of succeeding the second
+! " time.
+! sleep 2
+!
+! let prev_error = v:errors[0]
+! let v:errors = []
+! let run_nr += 1
+!
+! call RunTheTest(s:test)
+!
+! if len(v:errors) == 0
+! " Test passed on rerun.
+! break
+! endif
+! endwhile
+ endif
+
+ call AfterTheTest()
+*** ../vim-8.1.0528/src/version.c 2018-11-16 16:21:01.645310017 +0100
+--- src/version.c 2018-11-16 16:51:26.583470837 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 529,
+ /**/
+
+--
+Life is a gift, living is an art. (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0530 b/data/vim/patches/8.1.0530
new file mode 100644
index 000000000..49ac8b7a7
--- /dev/null
+++ b/data/vim/patches/8.1.0530
@@ -0,0 +1,104 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0530
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0530
+Problem: Channel and terminal tests that start a server can be flaky.
+Solution: Add all channel and terminal tests that start a server to the list
+ of flaky tests.
+Files: src/testdir/runtest.vim
+
+
+*** ../vim-8.1.0529/src/testdir/runtest.vim 2018-11-16 16:52:12.539199990 +0100
+--- src/testdir/runtest.vim 2018-11-16 17:43:20.536678864 +0100
+***************
+*** 274,288 ****
+--- 274,296 ----
+
+ " Names of flaky tests.
+ let s:flaky = [
++ \ 'Test_call()',
++ \ 'Test_channel_handler()',
+ \ 'Test_client_server()',
+ \ 'Test_close_and_exit_cb()',
++ \ 'Test_close_callback()',
++ \ 'Test_close_handle()',
++ \ 'Test_close_lambda()',
++ \ 'Test_close_partial()',
+ \ 'Test_collapse_buffers()',
+ \ 'Test_communicate()',
+ \ 'Test_cwd()',
+ \ 'Test_diff_screen()',
++ \ 'Test_exit_callback()',
+ \ 'Test_exit_callback_interval()',
+ \ 'Test_nb_basic()',
+ \ 'Test_oneshot()',
++ \ 'Test_open_delay()',
+ \ 'Test_out_cb()',
+ \ 'Test_paused()',
+ \ 'Test_pipe_through_sort_all()',
+***************
+*** 290,302 ****
+--- 298,332 ----
+ \ 'Test_popup_and_window_resize()',
+ \ 'Test_quoteplus()',
+ \ 'Test_quotestar()',
++ \ 'Test_raw_one_time_callback()',
+ \ 'Test_reltime()',
+ \ 'Test_repeat_three()',
++ \ 'Test_server_crash()',
++ \ 'Test_terminal_ansicolors_default()',
++ \ 'Test_terminal_ansicolors_func()',
++ \ 'Test_terminal_ansicolors_global()',
+ \ 'Test_terminal_composing_unicode()',
++ \ 'Test_terminal_env()',
++ \ 'Test_terminal_hide_buffer()',
++ \ 'Test_terminal_make_change()',
+ \ 'Test_terminal_noblock()',
+ \ 'Test_terminal_redir_file()',
++ \ 'Test_terminal_response_to_control_sequence()',
++ \ 'Test_terminal_scrollback()',
++ \ 'Test_terminal_split_quit()',
++ \ 'Test_terminal_termwinkey()',
++ \ 'Test_terminal_termwinsize_mininmum()',
++ \ 'Test_terminal_termwinsize_option_fixed()',
++ \ 'Test_terminal_termwinsize_option_zero()',
+ \ 'Test_terminal_tmap()',
++ \ 'Test_terminal_wall()',
++ \ 'Test_terminal_wipe_buffer()',
++ \ 'Test_terminal_wqall()',
++ \ 'Test_two_channels()',
++ \ 'Test_unlet_handle()',
+ \ 'Test_with_partial_callback()',
++ \ 'Test_zero_reply()',
++ \ 'Test_zz1_terminal_in_gui()',
+ \ ]
+
+ " Locate Test_ functions and execute them.
+*** ../vim-8.1.0529/src/version.c 2018-11-16 16:52:12.539199990 +0100
+--- src/version.c 2018-11-16 17:35:42.435433293 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 530,
+ /**/
+
+--
+Q: What do you call a fish without an eye?
+A: fsh!
+Q: What do you call a deer with no eyes?
+A: no eye deer.
+Q: What do you call a deer with no eyes and no legs?
+A: still no eye deer.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0531 b/data/vim/patches/8.1.0531
new file mode 100644
index 000000000..497904900
--- /dev/null
+++ b/data/vim/patches/8.1.0531
@@ -0,0 +1,83 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0531
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0531
+Problem: Flaky tests often fail with a common error message.
+Solution: Add a pattern to match an error message indicating a flaky test.
+Files: src/testdir/runtest.vim
+
+
+*** ../vim-8.1.0530/src/testdir/runtest.vim 2018-11-16 17:44:45.188170522 +0100
+--- src/testdir/runtest.vim 2018-11-16 18:20:21.285567865 +0100
+***************
+*** 273,279 ****
+ endif
+
+ " Names of flaky tests.
+! let s:flaky = [
+ \ 'Test_call()',
+ \ 'Test_channel_handler()',
+ \ 'Test_client_server()',
+--- 273,279 ----
+ endif
+
+ " Names of flaky tests.
+! let s:flaky_tests = [
+ \ 'Test_call()',
+ \ 'Test_channel_handler()',
+ \ 'Test_client_server()',
+***************
+*** 329,334 ****
+--- 329,337 ----
+ \ 'Test_zz1_terminal_in_gui()',
+ \ ]
+
++ " Pattern indicating a common flaky test failure.
++ let s:flaky_errors_re = 'StopVimInTerminal'
++
+ " Locate Test_ functions and execute them.
+ redir @q
+ silent function /^Test_
+***************
+*** 353,359 ****
+ " Repeat a flaky test. Give up when:
+ " - it fails again with the same message
+ " - it fails five times (with a different mesage)
+! if len(v:errors) > 0 && index(s:flaky, s:test) >= 0
+ while 1
+ call add(s:messages, 'Found errors in ' . s:test . ':')
+ call extend(s:messages, v:errors)
+--- 356,364 ----
+ " Repeat a flaky test. Give up when:
+ " - it fails again with the same message
+ " - it fails five times (with a different mesage)
+! if len(v:errors) > 0
+! \ && (index(s:flaky_tests, s:test) >= 0
+! \ || v:errors[0] =~ s:flaky_errors_re)
+ while 1
+ call add(s:messages, 'Found errors in ' . s:test . ':')
+ call extend(s:messages, v:errors)
+*** ../vim-8.1.0530/src/version.c 2018-11-16 17:44:45.188170522 +0100
+--- src/version.c 2018-11-16 18:21:32.493085548 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 531,
+ /**/
+
+--
+Q: What's orange and sounds like a parrot?
+A: A carrot
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0532 b/data/vim/patches/8.1.0532
new file mode 100644
index 000000000..1357fb1e3
--- /dev/null
+++ b/data/vim/patches/8.1.0532
@@ -0,0 +1,381 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0532
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0532
+Problem: Cannot distinguish between quickfix and location list.
+Solution: Add an explicit type variable. (Yegappan Lakshmanan)
+Files: src/quickfix.c
+
+
+*** ../vim-8.1.0531/src/quickfix.c 2018-11-11 22:50:20.810297803 +0100
+--- src/quickfix.c 2018-11-16 18:44:56.584395369 +0100
+***************
+*** 50,55 ****
+--- 50,65 ----
+ #define INVALID_QFIDX (-1)
+
+ /*
++ * Quickfix list type.
++ */
++ typedef enum
++ {
++ QFLT_QUICKFIX, // Quickfix list - global list
++ QFLT_LOCATION, // Location list - per window list
++ QFLT_INTERNAL // Internal - Temporary list used by getqflist()/getloclist()
++ } qfltype_T;
++
++ /*
+ * Quickfix/Location list definition
+ * Contains a list of entries (qfline_T). qf_start points to the first entry
+ * and qf_last points to the last entry. qf_count contains the list size.
+***************
+*** 61,66 ****
+--- 71,77 ----
+ typedef struct qf_list_S
+ {
+ int_u qf_id; // Unique identifier for this list
++ qfltype_T qfl_type;
+ qfline_T *qf_start; // pointer to the first error
+ qfline_T *qf_last; // pointer to the last error
+ qfline_T *qf_ptr; // pointer to the current error
+***************
+*** 95,100 ****
+--- 106,112 ----
+ int qf_listcount; // current number of lists
+ int qf_curlist; // current error list
+ qf_list_T qf_lists[LISTCOUNT];
++ qfltype_T qfl_type; // type of list
+ };
+
+ static qf_info_T ql_info; // global quickfix list
+***************
+*** 170,177 ****
+ #define IS_LL_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL)
+
+ // Quickfix and location list stack check helper macros
+! #define IS_QF_STACK(qi) (qi == &ql_info)
+! #define IS_LL_STACK(qi) (qi != &ql_info)
+
+ /*
+ * Return location list for window 'wp'
+--- 182,191 ----
+ #define IS_LL_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL)
+
+ // Quickfix and location list stack check helper macros
+! #define IS_QF_STACK(qi) (qi->qfl_type == QFLT_QUICKFIX)
+! #define IS_LL_STACK(qi) (qi->qfl_type == QFLT_LOCATION)
+! #define IS_QF_LIST(qfl) (qfl->qfl_type == QFLT_QUICKFIX)
+! #define IS_LL_LIST(qfl) (qfl->qfl_type == QFLT_LOCATION)
+
+ /*
+ * Return location list for window 'wp'
+***************
+*** 1847,1852 ****
+--- 1861,1867 ----
+ qfl = &qi->qf_lists[qi->qf_curlist];
+ vim_memset(qfl, 0, (size_t)(sizeof(qf_list_T)));
+ qf_store_title(qfl, qf_title);
++ qfl->qfl_type = qi->qfl_type;
+ qfl->qf_id = ++last_qf_id;
+ }
+
+***************
+*** 2007,2013 ****
+ qfp->qf_fnum = bufnum;
+ if (buf != NULL)
+ buf->b_has_qf_entry |=
+! IS_QF_STACK(qi) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ }
+ else
+ qfp->qf_fnum = qf_get_fnum(qi, qf_idx, dir, fname);
+--- 2022,2028 ----
+ qfp->qf_fnum = bufnum;
+ if (buf != NULL)
+ buf->b_has_qf_entry |=
+! IS_QF_LIST(qfl) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ }
+ else
+ qfp->qf_fnum = qf_get_fnum(qi, qf_idx, dir, fname);
+***************
+*** 2069,2084 ****
+ }
+
+ /*
+! * Allocate a new location list stack
+ */
+ static qf_info_T *
+! ll_new_list(void)
+ {
+ qf_info_T *qi;
+
+ qi = (qf_info_T *)alloc_clear((unsigned)sizeof(qf_info_T));
+ if (qi != NULL)
+ qi->qf_refcount++;
+ return qi;
+ }
+
+--- 2084,2102 ----
+ }
+
+ /*
+! * Allocate a new quickfix/location list stack
+ */
+ static qf_info_T *
+! qf_alloc_stack(qfltype_T qfltype)
+ {
+ qf_info_T *qi;
+
+ qi = (qf_info_T *)alloc_clear((unsigned)sizeof(qf_info_T));
+ if (qi != NULL)
++ {
+ qi->qf_refcount++;
++ qi->qfl_type = qfltype;
++ }
+ return qi;
+ }
+
+***************
+*** 2098,2104 ****
+ ll_free_all(&wp->w_llist_ref);
+
+ if (wp->w_llist == NULL)
+! wp->w_llist = ll_new_list(); // new location list
+ return wp->w_llist;
+ }
+
+--- 2116,2122 ----
+ ll_free_all(&wp->w_llist_ref);
+
+ if (wp->w_llist == NULL)
+! wp->w_llist = qf_alloc_stack(QFLT_LOCATION); // new location list
+ return wp->w_llist;
+ }
+
+***************
+*** 2153,2158 ****
+--- 2171,2177 ----
+ copy_loclist(qf_list_T *from_qfl, qf_list_T *to_qfl, qf_info_T *to_qi)
+ {
+ // Some of the fields are populated by qf_add_entry()
++ to_qfl->qfl_type = from_qfl->qfl_type;
+ to_qfl->qf_nonevalid = from_qfl->qf_nonevalid;
+ to_qfl->qf_count = 0;
+ to_qfl->qf_index = 0;
+***************
+*** 2214,2220 ****
+ return;
+
+ // allocate a new location list
+! if ((to->w_llist = ll_new_list()) == NULL)
+ return;
+
+ to->w_llist->qf_listcount = qi->qf_listcount;
+--- 2233,2239 ----
+ return;
+
+ // allocate a new location list
+! if ((to->w_llist = qf_alloc_stack(QFLT_LOCATION)) == NULL)
+ return;
+
+ to->w_llist->qf_listcount = qi->qf_listcount;
+***************
+*** 2300,2306 ****
+ return 0;
+
+ buf->b_has_qf_entry =
+! IS_QF_STACK(qi) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ return buf->b_fnum;
+ }
+
+--- 2319,2325 ----
+ return 0;
+
+ buf->b_has_qf_entry =
+! IS_QF_LIST(qfl) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ return buf->b_fnum;
+ }
+
+***************
+*** 2995,3000 ****
+--- 3014,3020 ----
+ int *opened_window)
+ {
+ qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
++ qfltype_T qfl_type = qfl->qfl_type;
+ int retval = OK;
+ int old_qf_curlist = qi->qf_curlist;
+ int save_qfid = qfl->qf_id;
+***************
+*** 3019,3032 ****
+
+ // If a location list, check whether the associated window is still
+ // present.
+! if (IS_LL_STACK(qi) && !win_valid_any_tab(oldwin))
+ {
+ EMSG(_("E924: Current window was closed"));
+ *opened_window = FALSE;
+ return NOTDONE;
+ }
+
+! if (IS_QF_STACK(qi) && !qflist_valid(NULL, save_qfid))
+ {
+ EMSG(_("E925: Current quickfix was changed"));
+ return NOTDONE;
+--- 3039,3052 ----
+
+ // If a location list, check whether the associated window is still
+ // present.
+! if (qfl_type == QFLT_LOCATION && !win_valid_any_tab(oldwin))
+ {
+ EMSG(_("E924: Current window was closed"));
+ *opened_window = FALSE;
+ return NOTDONE;
+ }
+
+! if (qfl_type == QFLT_QUICKFIX && !qflist_valid(NULL, save_qfid))
+ {
+ EMSG(_("E925: Current quickfix was changed"));
+ return NOTDONE;
+***************
+*** 3035,3041 ****
+ if (old_qf_curlist != qi->qf_curlist
+ || !is_qf_entry_present(qfl, qf_ptr))
+ {
+! if (IS_QF_STACK(qi))
+ EMSG(_("E925: Current quickfix was changed"));
+ else
+ EMSG(_(e_loc_list_changed));
+--- 3055,3061 ----
+ if (old_qf_curlist != qi->qf_curlist
+ || !is_qf_entry_present(qfl, qf_ptr))
+ {
+! if (qfl_type == QFLT_QUICKFIX)
+ EMSG(_("E925: Current quickfix was changed"));
+ else
+ EMSG(_(e_loc_list_changed));
+***************
+*** 5896,5902 ****
+ if (l == NULL)
+ return FAIL;
+
+! qi = ll_new_list();
+ if (qi != NULL)
+ {
+ if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, errorformat,
+--- 5916,5922 ----
+ if (l == NULL)
+ return FAIL;
+
+! qi = qf_alloc_stack(QFLT_INTERNAL);
+ if (qi != NULL)
+ {
+ if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, errorformat,
+***************
+*** 6040,6046 ****
+ * Return default values for quickfix list properties in retdict.
+ */
+ static int
+! qf_getprop_defaults(qf_info_T *qi, int flags, dict_T *retdict)
+ {
+ int status = OK;
+
+--- 6060,6066 ----
+ * Return default values for quickfix list properties in retdict.
+ */
+ static int
+! qf_getprop_defaults(qf_info_T *qi, int flags, int locstack, dict_T *retdict)
+ {
+ int status = OK;
+
+***************
+*** 6068,6074 ****
+ status = dict_add_number(retdict, "size", 0);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+ status = dict_add_number(retdict, "changedtick", 0);
+! if ((status == OK) && IS_LL_STACK(qi) && (flags & QF_GETLIST_FILEWINID))
+ status = dict_add_number(retdict, "filewinid", 0);
+
+ return status;
+--- 6088,6094 ----
+ status = dict_add_number(retdict, "size", 0);
+ if ((status == OK) && (flags & QF_GETLIST_TICK))
+ status = dict_add_number(retdict, "changedtick", 0);
+! if ((status == OK) && locstack && (flags & QF_GETLIST_FILEWINID))
+ status = dict_add_number(retdict, "filewinid", 0);
+
+ return status;
+***************
+*** 6191,6197 ****
+
+ // List is not present or is empty
+ if (qf_stack_empty(qi) || qf_idx == INVALID_QFIDX)
+! return qf_getprop_defaults(qi, flags, retdict);
+
+ qfl = &qi->qf_lists[qf_idx];
+
+--- 6211,6217 ----
+
+ // List is not present or is empty
+ if (qf_stack_empty(qi) || qf_idx == INVALID_QFIDX)
+! return qf_getprop_defaults(qi, flags, wp != NULL, retdict);
+
+ qfl = &qi->qf_lists[qf_idx];
+
+***************
+*** 6616,6622 ****
+ {
+ // If the location list window is open, then create a new empty
+ // location list
+! qf_info_T *new_ll = ll_new_list();
+
+ // first free the list reference in the location list window
+ ll_free_all(&orig_wp->w_llist_ref);
+--- 6636,6642 ----
+ {
+ // If the location list window is open, then create a new empty
+ // location list
+! qf_info_T *new_ll = qf_alloc_stack(QFLT_LOCATION);
+
+ // first free the list reference in the location list window
+ ll_free_all(&orig_wp->w_llist_ref);
+***************
+*** 6964,6970 ****
+ if (qi == NULL)
+ {
+ // Allocate a new location list for help text matches
+! if ((qi = ll_new_list()) == NULL)
+ return NULL;
+ *new_ll = TRUE;
+ }
+--- 6984,6990 ----
+ if (qi == NULL)
+ {
+ // Allocate a new location list for help text matches
+! if ((qi = qf_alloc_stack(QFLT_LOCATION)) == NULL)
+ return NULL;
+ *new_ll = TRUE;
+ }
+*** ../vim-8.1.0531/src/version.c 2018-11-16 18:22:42.336615956 +0100
+--- src/version.c 2018-11-16 18:41:03.385706240 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 532,
+ /**/
+
+--
+Time flies like an arrow.
+Fruit flies like a banana.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0533 b/data/vim/patches/8.1.0533
new file mode 100644
index 000000000..245468351
--- /dev/null
+++ b/data/vim/patches/8.1.0533
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0533
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0533
+Problem: Screendump tests can be flaky.
+Solution: Add VerifyScreenDump to the pattern of flaky tests.
+Files: src/testdir/runtest.vim
+
+
+*** ../vim-8.1.0532/src/testdir/runtest.vim 2018-11-16 18:22:42.336615956 +0100
+--- src/testdir/runtest.vim 2018-11-16 18:48:32.643133486 +0100
+***************
+*** 330,336 ****
+ \ ]
+
+ " Pattern indicating a common flaky test failure.
+! let s:flaky_errors_re = 'StopVimInTerminal'
+
+ " Locate Test_ functions and execute them.
+ redir @q
+--- 330,336 ----
+ \ ]
+
+ " Pattern indicating a common flaky test failure.
+! let s:flaky_errors_re = 'StopVimInTerminal\|VerifyScreenDump'
+
+ " Locate Test_ functions and execute them.
+ redir @q
+*** ../vim-8.1.0532/src/version.c 2018-11-16 18:45:57.864041240 +0100
+--- src/version.c 2018-11-16 18:49:30.498790078 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 533,
+ /**/
+
+--
+When I look deep into your eyes, I see JPEG artifacts.
+I can tell by the pixels that we're wrong for each other. (xkcd)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0534 b/data/vim/patches/8.1.0534
new file mode 100644
index 000000000..9071561d6
--- /dev/null
+++ b/data/vim/patches/8.1.0534
@@ -0,0 +1,379 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0534
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0534
+Problem: MS-Windows installer uses different $HOME than Vim.
+Solution: Use the Vim logic also in the MS-Windows installer. (Ken Takata,
+ closes #3564)
+Files: src/dosinst.c, src/misc1.c
+
+
+*** ../vim-8.1.0533/src/dosinst.c 2018-10-13 17:25:24.112718312 +0200
+--- src/dosinst.c 2018-11-16 19:39:24.551085683 +0100
+***************
+*** 115,128 ****
+ vimfiles_dir_vim,
+ vimfiles_dir_home
+ };
+! static char *(vimfiles_dir_choices[]) =
+ {
+ "\nCreate plugin directories:",
+ "No",
+ "In the VIM directory",
+ "In your HOME directory",
+ };
+- static int vimfiles_dir_choice;
+
+ /* non-zero when selected to install the popup menu entry. */
+ static int install_popup = 0;
+--- 115,127 ----
+ vimfiles_dir_vim,
+ vimfiles_dir_home
+ };
+! static char *(vimfiles_dir_choices[]) =
+ {
+ "\nCreate plugin directories:",
+ "No",
+ "In the VIM directory",
+ "In your HOME directory",
+ };
+
+ /* non-zero when selected to install the popup menu entry. */
+ static int install_popup = 0;
+***************
+*** 741,747 ****
+ choices[choice_count].installfunc = NULL;
+ choices[choice_count].active = 0;
+ choices[choice_count].changefunc = NULL;
+! choices[choice_count].installfunc = NULL;
+ ++choice_count;
+ }
+
+--- 740,747 ----
+ choices[choice_count].installfunc = NULL;
+ choices[choice_count].active = 0;
+ choices[choice_count].changefunc = NULL;
+! choices[choice_count].text = NULL;
+! choices[choice_count].arg = 0;
+ ++choice_count;
+ }
+
+***************
+*** 2089,2094 ****
+--- 2089,2096 ----
+ static void
+ set_directories_text(int idx)
+ {
++ int vimfiles_dir_choice = choices[idx].arg;
++
+ if (vimfiles_dir_choice == (int)vimfiles_dir_none)
+ alloc_text(idx, "Do NOT create plugin directories%s", "");
+ else
+***************
+*** 2097,2102 ****
+--- 2099,2189 ----
+ }
+
+ /*
++ * To get the "real" home directory:
++ * - get value of $HOME
++ * - if not found, get value of $HOMEDRIVE$HOMEPATH
++ * - if not found, get value of $USERPROFILE
++ *
++ * This code is based on init_homedir() in misc1.c, keep in sync!
++ */
++ static char *homedir = NULL;
++
++ void
++ init_homedir(void)
++ {
++ char *var;
++ char buf[MAX_PATH];
++
++ if (homedir != NULL)
++ {
++ free(homedir);
++ homedir = NULL;
++ }
++
++ var = getenv("HOME");
++
++ /*
++ * Typically, $HOME is not defined on Windows, unless the user has
++ * specifically defined it for Vim's sake. However, on Windows NT
++ * platforms, $HOMEDRIVE and $HOMEPATH are automatically defined for
++ * each user. Try constructing $HOME from these.
++ */
++ if (var == NULL || *var == NUL)
++ {
++ char *homedrive, *homepath;
++
++ homedrive = getenv("HOMEDRIVE");
++ homepath = getenv("HOMEPATH");
++ if (homepath == NULL || *homepath == NUL)
++ homepath = "\\";
++ if (homedrive != NULL
++ && strlen(homedrive) + strlen(homepath) < MAX_PATH)
++ {
++ sprintf(buf, "%s%s", homedrive, homepath);
++ if (buf[0] != NUL)
++ var = buf;
++ }
++ }
++
++ if (var == NULL)
++ var = getenv("USERPROFILE");
++
++ /*
++ * Weird but true: $HOME may contain an indirect reference to another
++ * variable, esp. "%USERPROFILE%". Happens when $USERPROFILE isn't set
++ * when $HOME is being set.
++ */
++ if (var != NULL && *var == '%')
++ {
++ char *p;
++ char *exp;
++
++ p = strchr(var + 1, '%');
++ if (p != NULL)
++ {
++ strncpy(buf, var + 1, p - (var + 1));
++ buf[p - (var + 1)] = NUL;
++ exp = getenv(buf);
++ if (exp != NULL && *exp != NUL
++ && strlen(exp) + strlen(p) < MAX_PATH)
++ {
++ _snprintf(buf, MAX_PATH, "%s%s", exp, p + 1);
++ buf[MAX_PATH - 1] = NUL;
++ var = buf;
++ }
++ }
++ }
++
++ if (var != NULL && *var == NUL) // empty is same as not set
++ var = NULL;
++
++ if (var == NULL)
++ homedir = NULL;
++ else
++ homedir = _strdup(var);
++ }
++
++ /*
+ * Change the directory that the vim plugin directories will be created in:
+ * $HOME, $VIM or nowhere.
+ */
+***************
+*** 2106,2114 ****
+ int choice_count = TABLE_SIZE(vimfiles_dir_choices);
+
+ /* Don't offer the $HOME choice if $HOME isn't set. */
+! if (getenv("HOME") == NULL)
+ --choice_count;
+! vimfiles_dir_choice = get_choice(vimfiles_dir_choices, choice_count);
+ set_directories_text(idx);
+ }
+
+--- 2193,2201 ----
+ int choice_count = TABLE_SIZE(vimfiles_dir_choices);
+
+ /* Don't offer the $HOME choice if $HOME isn't set. */
+! if (homedir == NULL)
+ --choice_count;
+! choices[idx].arg = get_choice(vimfiles_dir_choices, choice_count);
+ set_directories_text(idx);
+ }
+
+***************
+*** 2120,2125 ****
+--- 2207,2213 ----
+ install_vimfilesdir(int idx)
+ {
+ int i;
++ int vimfiles_dir_choice = choices[idx].arg;
+ char *p;
+ char vimdir_path[BUFSIZE];
+ char vimfiles_path[BUFSIZE];
+***************
+*** 2144,2151 ****
+ }
+ case vimfiles_dir_home:
+ {
+! /* Find the $HOME directory. Its existence was already checked. */
+! p = getenv("HOME");
+ if (p == NULL)
+ {
+ printf("Internal error: $HOME is NULL\n");
+--- 2232,2239 ----
+ }
+ case vimfiles_dir_home:
+ {
+! // Find the $HOME directory. Its existence was already checked.
+! p = homedir;
+ if (p == NULL)
+ {
+ printf("Internal error: $HOME is NULL\n");
+***************
+*** 2156,2162 ****
+ }
+ case vimfiles_dir_none:
+ {
+! /* Do not create vim plugin directory */
+ return;
+ }
+ }
+--- 2244,2250 ----
+ }
+ case vimfiles_dir_none:
+ {
+! // Do not create vim plugin directory.
+ return;
+ }
+ }
+***************
+*** 2185,2198 ****
+ struct stat st;
+ char tmp_dirname[BUFSIZE];
+ char *p;
+
+ choices[choice_count].text = alloc(150);
+ choices[choice_count].changefunc = change_directories_choice;
+ choices[choice_count].installfunc = install_vimfilesdir;
+ choices[choice_count].active = 1;
+
+! /* Check if the "compiler" directory already exists. That's a good
+! * indication that the plugin directories were already created. */
+ if (getenv("HOME") != NULL)
+ {
+ vimfiles_dir_choice = (int)vimfiles_dir_home;
+--- 2273,2287 ----
+ struct stat st;
+ char tmp_dirname[BUFSIZE];
+ char *p;
++ int vimfiles_dir_choice;
+
+ choices[choice_count].text = alloc(150);
+ choices[choice_count].changefunc = change_directories_choice;
+ choices[choice_count].installfunc = install_vimfilesdir;
+ choices[choice_count].active = 1;
+
+! // Check if the "compiler" directory already exists. That's a good
+! // indication that the plugin directories were already created.
+ if (getenv("HOME") != NULL)
+ {
+ vimfiles_dir_choice = (int)vimfiles_dir_home;
+***************
+*** 2204,2210 ****
+ {
+ vimfiles_dir_choice = (int)vimfiles_dir_vim;
+ p = getenv("VIM");
+! if (p == NULL) /* No $VIM in path, use the install dir */
+ dir_remove_last(installdir, tmp_dirname);
+ else
+ strcpy(tmp_dirname, p);
+--- 2293,2299 ----
+ {
+ vimfiles_dir_choice = (int)vimfiles_dir_vim;
+ p = getenv("VIM");
+! if (p == NULL) // No $VIM in path, use the install dir.
+ dir_remove_last(installdir, tmp_dirname);
+ else
+ strcpy(tmp_dirname, p);
+***************
+*** 2213,2218 ****
+--- 2302,2308 ----
+ vimfiles_dir_choice = (int)vimfiles_dir_none;
+ }
+
++ choices[choice_count].arg = vimfiles_dir_choice;
+ set_directories_text(choice_count);
+ ++choice_count;
+ }
+***************
+*** 2369,2374 ****
+--- 2459,2466 ----
+ }
+ else if (strcmp(argv[i], "-create-directories") == 0)
+ {
++ int vimfiles_dir_choice;
++
+ init_directories_choice();
+ if (argv[i + 1][0] != '-')
+ {
+***************
+*** 2377,2384 ****
+ vimfiles_dir_choice = (int)vimfiles_dir_vim;
+ else if (strcmp(argv[i], "home") == 0)
+ {
+! if (getenv("HOME") == NULL) /* No $HOME in environment */
+! vimfiles_dir_choice = (int)vimfiles_dir_vim;
+ else
+ vimfiles_dir_choice = (int)vimfiles_dir_home;
+ }
+--- 2469,2476 ----
+ vimfiles_dir_choice = (int)vimfiles_dir_vim;
+ else if (strcmp(argv[i], "home") == 0)
+ {
+! if (homedir == NULL) // No $HOME in environment
+! vimfiles_dir_choice = (int)vimfiles_dir_none;
+ else
+ vimfiles_dir_choice = (int)vimfiles_dir_home;
+ }
+***************
+*** 2391,2396 ****
+--- 2483,2489 ----
+ }
+ else /* No choice specified, default to vim directory */
+ vimfiles_dir_choice = (int)vimfiles_dir_vim;
++ choices[choice_count - 1].arg = vimfiles_dir_choice;
+ }
+ else if (strcmp(argv[i], "-register-OLE") == 0)
+ {
+***************
+*** 2589,2594 ****
+--- 2682,2688 ----
+
+ /* Initialize this program. */
+ do_inits(argv);
++ init_homedir();
+
+ if (argc > 1 && strcmp(argv[1], "-uninstall-check") == 0)
+ {
+*** ../vim-8.1.0533/src/misc1.c 2018-10-07 23:16:33.138616197 +0200
+--- src/misc1.c 2018-11-16 19:37:57.095655169 +0100
+***************
+*** 3905,3910 ****
+--- 3905,3912 ----
+ * - do mch_dirname() to get the real name of that directory.
+ * This also works with mounts and links.
+ * Don't do this for MS-DOS, it will change the "current dir" for a drive.
++ * For Windows:
++ * This code is duplicated in init_homedir() in dosinst.c. Keep in sync!
+ */
+ static char_u *homedir = NULL;
+
+*** ../vim-8.1.0533/src/version.c 2018-11-16 18:50:13.346534543 +0100
+--- src/version.c 2018-11-16 19:33:13.893507996 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 534,
+ /**/
+
+--
+Two cows are standing together in a field. One asks the other:
+"So what do you think about this Mad Cow Disease?"
+The other replies: "That doesn't concern me. I'm a helicopter."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0535 b/data/vim/patches/8.1.0535
new file mode 100644
index 000000000..02192da41
--- /dev/null
+++ b/data/vim/patches/8.1.0535
@@ -0,0 +1,97 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0535
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0535
+Problem: Increment/decrement might get interrupted by updating folds.
+Solution: Disable fold updating for a moment. (Christian Brabandt,
+ closes #3599)
+Files: src/ops.c
+
+
+*** ../vim-8.1.0534/src/ops.c 2018-09-30 21:43:17.199693265 +0200
+--- src/ops.c 2018-11-16 20:30:45.414309325 +0100
+***************
+*** 5549,5560 ****
+--- 5549,5575 ----
+ int change_cnt = 0;
+ linenr_T amount = Prenum1;
+
++ // do_addsub() might trigger re-evaluation of 'foldexpr' halfway, when the
++ // buffer is not completly updated yet. Postpone updating folds until before
++ // the call to changed_lines().
++ #ifdef FEAT_FOLDING
++ disable_fold_update++;
++ #endif
++
+ if (!VIsual_active)
+ {
+ pos = curwin->w_cursor;
+ if (u_save_cursor() == FAIL)
++ {
++ #ifdef FEAT_FOLDING
++ disable_fold_update--;
++ #endif
+ return;
++ }
+ change_cnt = do_addsub(oap->op_type, &pos, 0, amount);
++ #ifdef FEAT_FOLDING
++ disable_fold_update--;
++ #endif
+ if (change_cnt)
+ changed_lines(pos.lnum, 0, pos.lnum + 1, 0L);
+ }
+***************
+*** 5566,5572 ****
+--- 5581,5592 ----
+
+ if (u_save((linenr_T)(oap->start.lnum - 1),
+ (linenr_T)(oap->end.lnum + 1)) == FAIL)
++ {
++ #ifdef FEAT_FOLDING
++ disable_fold_update--;
++ #endif
+ return;
++ }
+
+ pos = oap->start;
+ for (; pos.lnum <= oap->end.lnum; ++pos.lnum)
+***************
+*** 5624,5629 ****
+--- 5644,5653 ----
+ if (g_cmd && one_change)
+ amount += Prenum1;
+ }
++
++ #ifdef FEAT_FOLDING
++ disable_fold_update--;
++ #endif
+ if (change_cnt)
+ changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);
+
+*** ../vim-8.1.0534/src/version.c 2018-11-16 19:39:47.350937378 +0100
+--- src/version.c 2018-11-16 20:54:05.109734642 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 535,
+ /**/
+
+--
+ARTHUR: Ni!
+BEDEVERE: Nu!
+ARTHUR: No. Ni! More like this. "Ni"!
+BEDEVERE: Ni, ni, ni!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0536 b/data/vim/patches/8.1.0536
new file mode 100644
index 000000000..556919f0e
--- /dev/null
+++ b/data/vim/patches/8.1.0536
@@ -0,0 +1,103 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0536
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0536
+Problem: File time test fails when using NFS.
+Solution: Use three file times instead of localtim(). (James McCoy,
+ closes #3618)
+Files: src/testdir/test_stat.vim
+
+
+*** ../vim-8.1.0535/src/testdir/test_stat.vim 2018-08-22 20:16:11.985125882 +0200
+--- src/testdir/test_stat.vim 2018-11-18 12:19:41.877543229 +0100
+***************
+*** 1,31 ****
+ " Tests for stat functions and checktime
+
+ func CheckFileTime(doSleep)
+! let fname = 'Xtest.tmp'
+ let result = 0
+
+! let ts = localtime()
+! if a:doSleep
+! sleep 1
+! endif
+ let fl = ['Hello World!']
+! call writefile(fl, fname)
+! let tf = getftime(fname)
+! if a:doSleep
+! sleep 1
+! endif
+! let te = localtime()
+
+! let time_correct = (ts <= tf && tf <= te)
+ if a:doSleep || time_correct
+! call assert_true(time_correct)
+! call assert_equal(strlen(fl[0] . "\n"), getfsize(fname))
+! call assert_equal('file', getftype(fname))
+! call assert_equal('rw-', getfperm(fname)[0:2])
+ let result = 1
+ endif
+
+! call delete(fname)
+ return result
+ endfunc
+
+--- 1,33 ----
+ " Tests for stat functions and checktime
+
+ func CheckFileTime(doSleep)
+! let fnames = ['Xtest1.tmp', 'Xtest2.tmp', 'Xtest3.tmp']
+! let times = []
+ let result = 0
+
+! " Use three files istead of localtim(), with a network filesystem the file
+! " times may differ at bit
+ let fl = ['Hello World!']
+! for fname in fnames
+! call writefile(fl, fname)
+! call add(times, getftime(fname))
+! if a:doSleep
+! sleep 1
+! endif
+! endfor
+
+! let time_correct = (times[0] <= times[1] && times[1] <= times[2])
+ if a:doSleep || time_correct
+! call assert_true(time_correct, printf('Expected %s <= %s <= %s', times[0], times[1], times[2]))
+! call assert_equal(strlen(fl[0] . "\n"), getfsize(fnames[0]))
+! call assert_equal('file', getftype(fnames[0]))
+! call assert_equal('rw-', getfperm(fnames[0])[0:2])
+ let result = 1
+ endif
+
+! for fname in fnames
+! call delete(fname)
+! endfor
+ return result
+ endfunc
+
+*** ../vim-8.1.0535/src/version.c 2018-11-16 20:54:27.053554626 +0100
+--- src/version.c 2018-11-18 12:23:05.864278755 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 536,
+ /**/
+
+--
+Vi beats Emacs to death, and then again!
+ http://linuxtoday.com/stories/5764.html
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0537 b/data/vim/patches/8.1.0537
new file mode 100644
index 000000000..e9065657c
--- /dev/null
+++ b/data/vim/patches/8.1.0537
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0537
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0537
+Problem: ui_breakcheck() may be called recursively, which doesn't work.
+Solution: When called recursively, just return. (James McCoy, closes #3617)
+Files: src/ui.c
+
+
+*** ../vim-8.1.0536/src/ui.c 2018-09-30 21:43:17.207693209 +0200
+--- src/ui.c 2018-11-20 02:35:02.966727048 +0100
+***************
+*** 403,411 ****
+ void
+ ui_breakcheck_force(int force)
+ {
+! int save_updating_screen = updating_screen;
+
+! /* We do not want gui_resize_shell() to redraw the screen here. */
+ ++updating_screen;
+
+ #ifdef FEAT_GUI
+--- 403,419 ----
+ void
+ ui_breakcheck_force(int force)
+ {
+! static int recursive = FALSE;
+! int save_updating_screen = updating_screen;
+
+! // We could be called recursively if stderr is redirected, calling
+! // fill_input_buf() calls settmode() when stdin isn't a tty. settmode()
+! // calls vgetorpeek() which calls ui_breakcheck() again.
+! if (recursive)
+! return;
+! recursive = TRUE;
+!
+! // We do not want gui_resize_shell() to redraw the screen here.
+ ++updating_screen;
+
+ #ifdef FEAT_GUI
+***************
+*** 419,424 ****
+--- 427,434 ----
+ updating_screen = TRUE;
+ else
+ reset_updating_screen(FALSE);
++
++ recursive = FALSE;
+ }
+
+ /*****************************************************************************
+*** ../vim-8.1.0536/src/version.c 2018-11-18 12:25:04.219533634 +0100
+--- src/version.c 2018-11-20 02:30:47.832599259 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 537,
+ /**/
+
+--
+Why isn't there mouse-flavored cat food?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0538 b/data/vim/patches/8.1.0538
new file mode 100644
index 000000000..7f662c1a4
--- /dev/null
+++ b/data/vim/patches/8.1.0538
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.05
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0538
+Problem: Evaluating a modeline might invoke using a shell command. (Paul
+ Huber)
+Solution: Set the sandbox flag when setting options from a modeline.
+Files: src/buffer.c
+
+
+*** ../vim-8.1.0537/src/buffer.c 2018-11-10 17:33:23.087518814 +0100
+--- src/buffer.c 2018-11-20 03:50:28.257857273 +0100
+***************
+*** 5522,5528 ****
+--- 5522,5533 ----
+ current_sctx.sc_seq = 0;
+ current_sctx.sc_lnum = 0;
+ #endif
++ // Make sure no risky things are executed as a side effect.
++ ++sandbox;
++
+ retval = do_set(s, OPT_MODELINE | OPT_LOCAL | flags);
++
++ --sandbox;
+ #ifdef FEAT_EVAL
+ current_sctx = save_current_sctx;
+ #endif
+*** ../vim-8.1.0537/src/version.c 2018-11-20 02:42:37.111373664 +0100
+--- src/version.c 2018-11-20 04:24:18.067361364 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 538,
+ /**/
+
+--
+ARTHUR: Go on, Bors, chop its head off.
+BORS: Right. Silly little bleeder. One rabbit stew coming up.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0539 b/data/vim/patches/8.1.0539
new file mode 100644
index 000000000..801ff717c
--- /dev/null
+++ b/data/vim/patches/8.1.0539
@@ -0,0 +1,114 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0539
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0539
+Problem: Cannot build without the sandbox.
+Solution: Set the secure option instead of using the sandbox. Also restrict
+ the characters from 'spelllang' that are used for LANG.vim.
+ (suggested by Yasuhiro Matsumoto)
+Files: runtime/doc/options.txt, src/buffer.c, src/option.c
+
+
+*** ../vim-8.1.0538/runtime/doc/options.txt 2018-09-10 21:15:34.637000672 +0200
+--- runtime/doc/options.txt 2018-11-20 13:01:10.046464576 +0100
+***************
+*** 7298,7304 ****
+
+ After this option has been set successfully, Vim will source the files
+ "spell/LANG.vim" in 'runtimepath'. "LANG" is the value of 'spelllang'
+! up to the first comma, dot or underscore.
+ Also see |set-spc-auto|.
+
+
+--- 7339,7345 ----
+
+ After this option has been set successfully, Vim will source the files
+ "spell/LANG.vim" in 'runtimepath'. "LANG" is the value of 'spelllang'
+! up to the first character that is not an ASCII letter and not a dash.
+ Also see |set-spc-auto|.
+
+
+*** ../vim-8.1.0538/src/buffer.c 2018-11-20 04:25:14.882952236 +0100
+--- src/buffer.c 2018-11-20 12:52:53.914128541 +0100
+***************
+*** 5523,5533 ****
+ current_sctx.sc_lnum = 0;
+ #endif
+ // Make sure no risky things are executed as a side effect.
+! ++sandbox;
+
+ retval = do_set(s, OPT_MODELINE | OPT_LOCAL | flags);
+
+! --sandbox;
+ #ifdef FEAT_EVAL
+ current_sctx = save_current_sctx;
+ #endif
+--- 5523,5533 ----
+ current_sctx.sc_lnum = 0;
+ #endif
+ // Make sure no risky things are executed as a side effect.
+! ++secure;
+
+ retval = do_set(s, OPT_MODELINE | OPT_LOCAL | flags);
+
+! --secure;
+ #ifdef FEAT_EVAL
+ current_sctx = save_current_sctx;
+ #endif
+*** ../vim-8.1.0538/src/option.c 2018-11-10 17:33:23.091518784 +0100
+--- src/option.c 2018-11-20 13:06:15.300199192 +0100
+***************
+*** 7758,7767 ****
+ * '.encoding'.
+ */
+ for (p = q; *p != NUL; ++p)
+! if (vim_strchr((char_u *)"_.,", *p) != NULL)
+ break;
+! vim_snprintf((char *)fname, 200, "spell/%.*s.vim", (int)(p - q), q);
+! source_runtime(fname, DIP_ALL);
+ }
+ #endif
+ }
+--- 7759,7771 ----
+ * '.encoding'.
+ */
+ for (p = q; *p != NUL; ++p)
+! if (!ASCII_ISALPHA(*p) && *p != '-')
+ break;
+! if (p > q)
+! {
+! vim_snprintf((char *)fname, 200, "spell/%.*s.vim", (int)(p - q), q);
+! source_runtime(fname, DIP_ALL);
+! }
+ }
+ #endif
+ }
+*** ../vim-8.1.0538/src/version.c 2018-11-20 04:25:14.882952236 +0100
+--- src/version.c 2018-11-20 13:02:21.057938065 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 539,
+ /**/
+
+--
+ARTHUR: Charge!
+ [They all charge with swords drawn towards the RABBIT. A tremendous twenty
+ second fight with Peckinpahish shots and borrowing heavily also on the
+ Kung Fu and karate-type films ensues, in which some four KNIGHTS are
+ comprehensively killed.]
+ARTHUR: Run away! Run away!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0540 b/data/vim/patches/8.1.0540
new file mode 100644
index 000000000..ac3fe2331
--- /dev/null
+++ b/data/vim/patches/8.1.0540
@@ -0,0 +1,134 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0540
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0540
+Problem: May evaluate insecure value when appending to option.
+Solution: Set the secure flag when changing an option that was previously
+ set insecurely. Also allow numbers for the characters from
+ 'spelllang' that are used for LANG.vim. (closes #3623)
+Files: src/option.c
+
+
+*** ../vim-8.1.0539/src/option.c 2018-11-20 13:32:30.276983764 +0100
+--- src/option.c 2018-11-20 14:16:31.077302001 +0100
+***************
+*** 4705,4710 ****
+--- 4706,4713 ----
+ }
+ else
+ {
++ int value_is_replaced = !prepending && !adding && !removing;
++
+ if (flags & P_BOOL) /* boolean */
+ {
+ if (nextchar == '=' || nextchar == ':')
+***************
+*** 5209,5220 ****
+ }
+ #endif
+
+! /* Handle side effects, and set the global value for
+! * ":set" on local options. Note: when setting 'syntax'
+! * or 'filetype' autocommands may be triggered that can
+! * cause havoc. */
+! errmsg = did_set_string_option(opt_idx, (char_u **)varp,
+! new_value_alloced, oldval, errbuf, opt_flags);
+
+ #if defined(FEAT_EVAL)
+ if (errmsg == NULL)
+--- 5212,5247 ----
+ }
+ #endif
+
+! {
+! long_u *p = insecure_flag(opt_idx, opt_flags);
+! int did_inc_secure = FALSE;
+!
+! // When an option is set in the sandbox, from a
+! // modeline or in secure mode, then deal with side
+! // effects in secure mode. Also when the value was
+! // set with the P_INSECURE flag and is not
+! // completely replaced.
+! if (secure
+! #ifdef HAVE_SANDBOX
+! || sandbox != 0
+! #endif
+! || (opt_flags & OPT_MODELINE)
+! || (!value_is_replaced && (*p & P_INSECURE)))
+! {
+! did_inc_secure = TRUE;
+! ++secure;
+! }
+!
+! // Handle side effects, and set the global value for
+! // ":set" on local options. Note: when setting 'syntax'
+! // or 'filetype' autocommands may be triggered that can
+! // cause havoc.
+! errmsg = did_set_string_option(opt_idx, (char_u **)varp,
+! new_value_alloced, oldval, errbuf, opt_flags);
+!
+! if (did_inc_secure)
+! --secure;
+! }
+
+ #if defined(FEAT_EVAL)
+ if (errmsg == NULL)
+***************
+*** 5254,5261 ****
+ }
+
+ if (opt_idx >= 0)
+! did_set_option(opt_idx, opt_flags,
+! !prepending && !adding && !removing);
+ }
+
+ skip:
+--- 5281,5287 ----
+ }
+
+ if (opt_idx >= 0)
+! did_set_option(opt_idx, opt_flags, value_is_replaced);
+ }
+
+ skip:
+***************
+*** 7758,7764 ****
+ * '.encoding'.
+ */
+ for (p = q; *p != NUL; ++p)
+! if (!ASCII_ISALPHA(*p) && *p != '-')
+ break;
+ if (p > q)
+ {
+--- 7784,7790 ----
+ * '.encoding'.
+ */
+ for (p = q; *p != NUL; ++p)
+! if (!ASCII_ISALNUM(*p) && *p != '-')
+ break;
+ if (p > q)
+ {
+*** ../vim-8.1.0539/src/version.c 2018-11-20 13:32:30.276983764 +0100
+--- src/version.c 2018-11-20 14:21:13.067051824 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 540,
+ /**/
+
+--
+A hamburger walks into a bar, and the bartender says: "I'm sorry,
+but we don't serve food here."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0541 b/data/vim/patches/8.1.0541
new file mode 100644
index 000000000..4e119484e
--- /dev/null
+++ b/data/vim/patches/8.1.0541
@@ -0,0 +1,66 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0541
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0541
+Problem: Help message in dosinst.c is outdated.
+Solution: Update the comment. (Ken Takata, closes #3626)
+Files: src/dosinst.c
+
+
+*** ../vim-8.1.0540/src/dosinst.c 2018-11-16 19:39:47.346937404 +0100
+--- src/dosinst.c 2018-11-21 13:54:33.089924563 +0100
+***************
+*** 2535,2547 ****
+ "------------\n"
+ "(this choice is only available when creating a _vimrc file)\n"
+ "1. Vim can run in Vi-compatible mode. Many nice Vim features are then\n"
+! " disabled. In the not-Vi-compatible mode Vim is still mostly Vi\n"
+! " compatible, but adds nice features like multi-level undo. Only\n"
+! " choose Vi-compatible if you really need full Vi compatibility.\n"
+! "2. Running Vim with some enhancements is useful when you want some of\n"
+ " the nice Vim features, but have a slow computer and want to keep it\n"
+ " really fast.\n"
+! "3. Syntax highlighting shows many files in color. Not only does this look\n"
+ " nice, it also makes it easier to spot errors and you can work faster.\n"
+ " The other features include editing compressed files.\n"
+ ,
+--- 2535,2548 ----
+ "------------\n"
+ "(this choice is only available when creating a _vimrc file)\n"
+ "1. Vim can run in Vi-compatible mode. Many nice Vim features are then\n"
+! " disabled. Only choose Vi-compatible if you really need full Vi\n"
+! " compatibility.\n"
+! "2. Vim runs in not-Vi-compatible mode. Vim is still mostly Vi compatible,\n"
+! " but adds nice features like multi-level undo.\n"
+! "3. Running Vim with some enhancements is useful when you want some of\n"
+ " the nice Vim features, but have a slow computer and want to keep it\n"
+ " really fast.\n"
+! "4. Syntax highlighting shows many files in color. Not only does this look\n"
+ " nice, it also makes it easier to spot errors and you can work faster.\n"
+ " The other features include editing compressed files.\n"
+ ,
+*** ../vim-8.1.0540/src/version.c 2018-11-20 14:25:43.480880171 +0100
+--- src/version.c 2018-11-21 13:58:01.944305890 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 541,
+ /**/
+
+--
+An indication you must be a manager:
+You can explain to somebody the difference between "re-engineering",
+"down-sizing", "right-sizing", and "firing people's asses".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0542 b/data/vim/patches/8.1.0542
new file mode 100644
index 000000000..761fd1b22
--- /dev/null
+++ b/data/vim/patches/8.1.0542
@@ -0,0 +1,423 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0542
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0542
+Problem: shiftwidth() does not take 'vartabstop' into account.
+Solution: Use the cursor position or a position explicitly passed.
+ Also make >> and << work better with 'vartabstop'. (Christian
+ Brabandt)
+Files: runtime/doc/change.txt, runtime/doc/eval.txt, src/edit.c,
+ src/evalfunc.c, src/normal.c, src/ops.c, src/option.c,
+ src/proto/edit.pro, src/proto/option.pro,
+ src/testdir/test_vartabs.vim
+
+*** ../vim-8.1.0541/runtime/doc/change.txt 2018-07-29 16:09:14.628945654 +0200
+--- runtime/doc/change.txt 2018-11-22 02:13:49.924044656 +0100
+***************
+*** 476,481 ****
+--- 476,485 ----
+ *<*
+ <{motion} Shift {motion} lines one 'shiftwidth' leftwards.
+
++ If the 'vartabstop' feature is enabled, and the
++ 'shiftwidth' option is set to zero, the amount of
++ indent is calculated at the first non-blank character
++ in the line.
+ *<<*
+ << Shift [count] lines one 'shiftwidth' leftwards.
+
+***************
+*** 487,492 ****
+--- 491,500 ----
+ *>*
+ >{motion} Shift {motion} lines one 'shiftwidth' rightwards.
+
++ If the 'vartabstop' feature is enabled, and the
++ 'shiftwidth' option is set to zero, the amount of
++ indent is calculated at the first non-blank character
++ in the line.
+ *>>*
+ >> Shift [count] lines one 'shiftwidth' rightwards.
+
+***************
+*** 708,713 ****
+--- 716,722 ----
+ search pattern.
+ {not in Vi: highlighting of the match, other responses than 'y' or 'n'}
+
++ *:s_e*
+ [e] When the search pattern fails, do not issue an error message and, in
+ particular, continue in maps as if no error occurred. This is most
+ useful to prevent the "No match" error from breaking a mapping. Vim
+***************
+*** 719,724 ****
+--- 728,734 ----
+ Interrupted
+ {not in Vi}
+
++ *:s_g*
+ [g] Replace all occurrences in the line. Without this argument,
+ replacement occurs only for the first occurrence in each line. If
+ the 'edcompatible' option is on, Vim remembers this flag and toggles
+*** ../vim-8.1.0541/runtime/doc/eval.txt 2018-11-11 15:20:32.432704446 +0100
+--- runtime/doc/eval.txt 2018-11-22 02:20:01.809633383 +0100
+***************
+*** 2379,2385 ****
+ shellescape({string} [, {special}])
+ String escape {string} for use as shell
+ command argument
+! shiftwidth() Number effective value of 'shiftwidth'
+ simplify({filename}) String simplify filename as much as possible
+ sin({expr}) Float sine of {expr}
+ sinh({expr}) Float hyperbolic sine of {expr}
+--- 2385,2391 ----
+ shellescape({string} [, {special}])
+ String escape {string} for use as shell
+ command argument
+! shiftwidth([{col}]) Number effective value of 'shiftwidth'
+ simplify({filename}) String simplify filename as much as possible
+ sin({expr}) Float sine of {expr}
+ sinh({expr}) Float hyperbolic sine of {expr}
+***************
+*** 7629,7639 ****
+ < See also |::S|.
+
+
+! shiftwidth() *shiftwidth()*
+ Returns the effective value of 'shiftwidth'. This is the
+ 'shiftwidth' value unless it is zero, in which case it is the
+ 'tabstop' value. This function was introduced with patch
+! 7.3.694 in 2012, everybody should have it by now.
+
+
+ simplify({filename}) *simplify()*
+--- 7638,7654 ----
+ < See also |::S|.
+
+
+! shiftwidth([{col}]) *shiftwidth()*
+ Returns the effective value of 'shiftwidth'. This is the
+ 'shiftwidth' value unless it is zero, in which case it is the
+ 'tabstop' value. This function was introduced with patch
+! 7.3.694 in 2012, everybody should have it by now (however it
+! did not allow for the optional {col} argument until 8.1.542).
+!
+! When there is one argument {col} this is used as column number
+! for which to return the 'shiftwidth' value. This matters for the
+! 'vartabstop' feature. If the 'vartabstop' setting is enabled and
+! no {col} argument is given, column 1 will be assumed.
+
+
+ simplify({filename}) *simplify()*
+*** ../vim-8.1.0541/src/edit.c 2018-11-02 11:59:11.555438565 +0100
+--- src/edit.c 2018-11-22 02:21:29.857045389 +0100
+***************
+*** 262,268 ****
+ #ifdef FEAT_SMARTINDENT
+ static void ins_try_si(int c);
+ #endif
+- static colnr_T get_nolist_virtcol(void);
+ #if defined(FEAT_EVAL)
+ static char_u *do_insert_char_pre(int c);
+ #endif
+--- 262,267 ----
+***************
+*** 10681,10689 ****
+ * Get the value that w_virtcol would have when 'list' is off.
+ * Unless 'cpo' contains the 'L' flag.
+ */
+! static colnr_T
+ get_nolist_virtcol(void)
+ {
+ if (curwin->w_p_list && vim_strchr(p_cpo, CPO_LISTWM) == NULL)
+ return getvcol_nolist(&curwin->w_cursor);
+ validate_virtcol();
+--- 10680,10693 ----
+ * Get the value that w_virtcol would have when 'list' is off.
+ * Unless 'cpo' contains the 'L' flag.
+ */
+! colnr_T
+ get_nolist_virtcol(void)
+ {
++ // check validity of cursor in current buffer
++ if (curwin->w_buffer == NULL
++ || curwin->w_buffer->b_ml.ml_mfp == NULL
++ || curwin->w_cursor.lnum > curwin->w_buffer->b_ml.ml_line_count)
++ return 0;
+ if (curwin->w_p_list && vim_strchr(p_cpo, CPO_LISTWM) == NULL)
+ return getvcol_nolist(&curwin->w_cursor);
+ validate_virtcol();
+*** ../vim-8.1.0541/src/evalfunc.c 2018-11-11 21:22:53.649977524 +0100
+--- src/evalfunc.c 2018-11-22 02:23:21.876290935 +0100
+***************
+*** 835,841 ****
+ {"sha256", 1, 1, f_sha256},
+ #endif
+ {"shellescape", 1, 2, f_shellescape},
+! {"shiftwidth", 0, 0, f_shiftwidth},
+ {"simplify", 1, 1, f_simplify},
+ #ifdef FEAT_FLOAT
+ {"sin", 1, 1, f_sin},
+--- 835,841 ----
+ {"sha256", 1, 1, f_sha256},
+ #endif
+ {"shellescape", 1, 2, f_shellescape},
+! {"shiftwidth", 0, 1, f_shiftwidth},
+ {"simplify", 1, 1, f_simplify},
+ #ifdef FEAT_FLOAT
+ {"sin", 1, 1, f_sin},
+***************
+*** 11241,11246 ****
+--- 11241,11261 ----
+ static void
+ f_shiftwidth(typval_T *argvars UNUSED, typval_T *rettv)
+ {
++ rettv->vval.v_number = 0;
++
++ if (argvars[0].v_type != VAR_UNKNOWN)
++ {
++ long col;
++
++ col = (long)get_tv_number_chk(argvars, NULL);
++ if (col < 0)
++ return; // type error; errmsg already given
++ #ifdef FEAT_VARTABS
++ rettv->vval.v_number = get_sw_value_col(curbuf, col);
++ return;
++ #endif
++ }
++
+ rettv->vval.v_number = get_sw_value(curbuf);
+ }
+
+*** ../vim-8.1.0541/src/normal.c 2018-11-10 16:01:23.331381891 +0100
+--- src/normal.c 2018-11-22 02:24:26.215854890 +0100
+***************
+*** 8143,8148 ****
+--- 8143,8149 ----
+ do
+ i = gchar_cursor();
+ while (VIM_ISWHITE(i) && oneright() == OK);
++ curwin->w_valid &= ~VALID_WCOL;
+ }
+ curwin->w_set_curswant = TRUE;
+ break;
+*** ../vim-8.1.0541/src/ops.c 2018-11-16 20:54:27.053554626 +0100
+--- src/ops.c 2018-11-22 02:51:34.899814809 +0100
+***************
+*** 334,340 ****
+ {
+ int count;
+ int i, j;
+! int p_sw = (int)get_sw_value(curbuf);
+
+ count = get_indent(); /* get current indent */
+
+--- 334,340 ----
+ {
+ int count;
+ int i, j;
+! int p_sw = (int)get_sw_value_indent(curbuf);
+
+ count = get_indent(); /* get current indent */
+
+***************
+*** 386,392 ****
+ int total;
+ char_u *newp, *oldp;
+ int oldcol = curwin->w_cursor.col;
+! int p_sw = (int)get_sw_value(curbuf);
+ #ifdef FEAT_VARTABS
+ int *p_vts = curbuf->b_p_vts_array;
+ #endif
+--- 386,392 ----
+ int total;
+ char_u *newp, *oldp;
+ int oldcol = curwin->w_cursor.col;
+! int p_sw = (int)get_sw_value_indent(curbuf);
+ #ifdef FEAT_VARTABS
+ int *p_vts = curbuf->b_p_vts_array;
+ #endif
+*** ../vim-8.1.0541/src/option.c 2018-11-20 14:25:43.480880171 +0100
+--- src/option.c 2018-11-22 02:52:47.875239563 +0100
+***************
+*** 13113,13119 ****
+ long
+ get_sw_value(buf_T *buf)
+ {
+! return buf->b_p_sw ? buf->b_p_sw : buf->b_p_ts;
+ }
+
+ /*
+--- 13113,13160 ----
+ long
+ get_sw_value(buf_T *buf)
+ {
+! return get_sw_value_col(buf, 0);
+! }
+!
+! /*
+! * Idem, using the first non-black in the current line.
+! */
+! long
+! get_sw_value_indent(buf_T *buf)
+! {
+! pos_T pos = curwin->w_cursor;
+!
+! pos.col = getwhitecols_curline();
+! return get_sw_value_pos(buf, &pos);
+! }
+!
+! /*
+! * Idem, using "pos".
+! */
+! long
+! get_sw_value_pos(buf_T *buf, pos_T *pos)
+! {
+! pos_T save_cursor = curwin->w_cursor;
+! long sw_value;
+!
+! curwin->w_cursor = *pos;
+! sw_value = get_sw_value_col(buf, get_nolist_virtcol());
+! curwin->w_cursor = save_cursor;
+! return sw_value;
+! }
+!
+! /*
+! * Idem, using virtual column "col".
+! */
+! long
+! get_sw_value_col(buf_T *buf, colnr_T col UNUSED)
+! {
+! return buf->b_p_sw ? buf->b_p_sw :
+! #ifdef FEAT_VARTABS
+! tabstop_at(col, buf->b_p_ts, buf->b_p_vts_array);
+! #else
+! buf->b_p_ts;
+! #endif
+ }
+
+ /*
+*** ../vim-8.1.0541/src/proto/edit.pro 2018-06-03 14:42:17.848505102 +0200
+--- src/proto/edit.pro 2018-11-22 02:27:22.574651476 +0100
+***************
+*** 46,49 ****
+--- 46,50 ----
+ void ins_scroll(void);
+ void ins_horscroll(void);
+ int ins_copychar(linenr_T lnum);
++ colnr_T get_nolist_virtcol(void);
+ /* vim: set ft=c : */
+*** ../vim-8.1.0541/src/proto/option.pro 2018-10-02 14:45:07.023652468 +0200
+--- src/proto/option.pro 2018-11-22 02:51:41.159765202 +0100
+***************
+*** 72,77 ****
+--- 72,80 ----
+ int tabstop_count(int *ts);
+ int tabstop_first(int *ts);
+ long get_sw_value(buf_T *buf);
++ long get_sw_value_indent(buf_T *buf);
++ long get_sw_value_pos(buf_T *buf, pos_T *pos);
++ long get_sw_value_col(buf_T *buf, colnr_T col);
+ long get_sts_value(void);
+ void find_mps_values(int *initc, int *findc, int *backwards, int switchit);
+ unsigned int get_bkc_value(buf_T *buf);
+*** ../vim-8.1.0541/src/testdir/test_vartabs.vim 2018-10-15 22:51:46.744578471 +0200
+--- src/testdir/test_vartabs.vim 2018-11-22 02:54:38.198381540 +0100
+***************
+*** 297,302 ****
+--- 297,367 ----
+ set nolist listchars&vim
+ endfunc
+
++ func Test_vartabs_shiftwidth()
++ "return
++ if winwidth(0) < 40
++ return
++ endif
++ new
++ 40vnew
++ %d
++ " setl varsofttabstop=10,20,30,40
++ setl shiftwidth=0 vartabstop=10,20,30,40
++ call setline(1, "x")
++
++ " Check without any change.
++ let expect = ['x ']
++ let lines = ScreenLines(1, winwidth(0))
++ call s:compare_lines(expect, lines)
++ " Test 1:
++ " shiftwidth depends on the indent, first check with cursor at the end of the
++ " line (which is the same as the start of the line, since there is only one
++ " character).
++ norm! $>>
++ let expect1 = [' x ']
++ let lines = ScreenLines(1, winwidth(0))
++ call s:compare_lines(expect1, lines)
++ call assert_equal(10, shiftwidth())
++ call assert_equal(10, shiftwidth(1))
++ call assert_equal(20, shiftwidth(virtcol('.')))
++ norm! $>>
++ let expect2 = [' x ', '~ ']
++ let lines = ScreenLines([1, 2], winwidth(0))
++ call s:compare_lines(expect2, lines)
++ call assert_equal(20, shiftwidth(virtcol('.')-2))
++ call assert_equal(30, shiftwidth(virtcol('.')))
++ norm! $>>
++ let expect3 = [' ', ' x ', '~ ']
++ let lines = ScreenLines([1, 3], winwidth(0))
++ call s:compare_lines(expect3, lines)
++ call assert_equal(30, shiftwidth(virtcol('.')-2))
++ call assert_equal(40, shiftwidth(virtcol('.')))
++ norm! $>>
++ let expect4 = [' ', ' ', ' x ']
++ let lines = ScreenLines([1, 3], winwidth(0))
++ call assert_equal(40, shiftwidth(virtcol('.')))
++ call s:compare_lines(expect4, lines)
++
++ " Test 2: Put the cursor at the first column, result should be the same
++ call setline(1, "x")
++ norm! 0>>
++ let lines = ScreenLines(1, winwidth(0))
++ call s:compare_lines(expect1, lines)
++ norm! 0>>
++ let lines = ScreenLines([1, 2], winwidth(0))
++ call s:compare_lines(expect2, lines)
++ norm! 0>>
++ let lines = ScreenLines([1, 3], winwidth(0))
++ call s:compare_lines(expect3, lines)
++ norm! 0>>
++ let lines = ScreenLines([1, 3], winwidth(0))
++ call s:compare_lines(expect4, lines)
++
++ " cleanup
++ bw!
++ bw!
++ endfunc
++
+ func Test_vartabs_failures()
+ call assert_fails('set vts=8,')
+ call assert_fails('set vsts=8,')
+*** ../vim-8.1.0541/src/version.c 2018-11-21 13:58:27.092110956 +0100
+--- src/version.c 2018-11-22 02:19:24.593880355 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 542,
+ /**/
+
+--
+I wonder, do vegetarians eat fruit bats?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0543 b/data/vim/patches/8.1.0543
new file mode 100644
index 000000000..e4785a519
--- /dev/null
+++ b/data/vim/patches/8.1.0543
@@ -0,0 +1,68 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0543
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0543
+Problem: Coverity warns for leaking memory and using wrong struct.
+Solution: Free pointer when allocation fails. Change "boff" to "loff".
+ (closes #3634)
+Files: src/ex_getln.c, src/move.c
+
+
+*** ../vim-8.1.0542/src/ex_getln.c 2018-10-28 14:36:04.218247711 +0100
+--- src/ex_getln.c 2018-11-24 14:10:40.600261324 +0100
+***************
+*** 1378,1383 ****
+--- 1378,1384 ----
+ redrawcmd();
+ goto cmdline_changed;
+ }
++ vim_free(p);
+ }
+ }
+ beep_flush();
+*** ../vim-8.1.0542/src/move.c 2018-10-02 18:25:41.424867560 +0200
+--- src/move.c 2018-11-24 14:21:29.499284569 +0100
+***************
+*** 1961,1967 ****
+ scrolled += loff.height;
+ if (loff.lnum == curwin->w_botline
+ #ifdef FEAT_DIFF
+! && boff.fill == 0
+ #endif
+ )
+ scrolled -= curwin->w_empty_rows;
+--- 1961,1967 ----
+ scrolled += loff.height;
+ if (loff.lnum == curwin->w_botline
+ #ifdef FEAT_DIFF
+! && loff.fill == 0
+ #endif
+ )
+ scrolled -= curwin->w_empty_rows;
+*** ../vim-8.1.0542/src/version.c 2018-11-22 03:07:30.948596188 +0100
+--- src/version.c 2018-11-24 14:10:50.996181285 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 543,
+ /**/
+
+--
+ [Another hideous roar.]
+BEDEVERE: That's it!
+ARTHUR: What?
+BEDEVERE: It's The Legendary Black Beast of Aaaaarrrrrrggghhh!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0544 b/data/vim/patches/8.1.0544
new file mode 100644
index 000000000..1a77171b7
--- /dev/null
+++ b/data/vim/patches/8.1.0544
@@ -0,0 +1,432 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0544
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0544 (after 8.1.0540)
+Problem: Setting 'filetype' in a modeline causes an error (Hirohito
+ Higashi).
+Solution: Don't add the P_INSECURE flag when setting 'filetype' from a
+ modeline. Also for 'syntax'.
+Files: src/option.c, src/testdir/test_modeline.vim
+
+
+*** ../vim-8.1.0543/src/option.c 2018-11-22 03:07:30.948596188 +0100
+--- src/option.c 2018-11-25 02:06:48.284746758 +0100
+***************
+*** 3284,3290 ****
+ static void set_options_default(int opt_flags);
+ static void set_string_default_esc(char *name, char_u *val, int escape);
+ static char_u *term_bg_default(void);
+! static void did_set_option(int opt_idx, int opt_flags, int new_value);
+ static char_u *option_expand(int opt_idx, char_u *val);
+ static void didset_options(void);
+ static void didset_options2(void);
+--- 3284,3290 ----
+ static void set_options_default(int opt_flags);
+ static void set_string_default_esc(char *name, char_u *val, int escape);
+ static char_u *term_bg_default(void);
+! static void did_set_option(int opt_idx, int opt_flags, int new_value, int value_checked);
+ static char_u *option_expand(int opt_idx, char_u *val);
+ static void didset_options(void);
+ static void didset_options2(void);
+***************
+*** 3295,3301 ****
+ # define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags)
+ #endif
+ static void set_string_option_global(int opt_idx, char_u **varp);
+! static char_u *did_set_string_option(int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags);
+ static char_u *set_chars_option(char_u **varp);
+ #ifdef FEAT_CLIPBOARD
+ static char_u *check_clipboard_option(void);
+--- 3295,3301 ----
+ # define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags)
+ #endif
+ static void set_string_option_global(int opt_idx, char_u **varp);
+! static char_u *did_set_string_option(int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags, int *value_checked);
+ static char_u *set_chars_option(char_u **varp);
+ #ifdef FEAT_CLIPBOARD
+ static char_u *check_clipboard_option(void);
+***************
+*** 4706,4711 ****
+--- 4706,4712 ----
+ else
+ {
+ int value_is_replaced = !prepending && !adding && !removing;
++ int value_checked = FALSE;
+
+ if (flags & P_BOOL) /* boolean */
+ {
+***************
+*** 5236,5242 ****
+ // or 'filetype' autocommands may be triggered that can
+ // cause havoc.
+ errmsg = did_set_string_option(opt_idx, (char_u **)varp,
+! new_value_alloced, oldval, errbuf, opt_flags);
+
+ if (did_inc_secure)
+ --secure;
+--- 5237,5244 ----
+ // or 'filetype' autocommands may be triggered that can
+ // cause havoc.
+ errmsg = did_set_string_option(opt_idx, (char_u **)varp,
+! new_value_alloced, oldval, errbuf,
+! opt_flags, &value_checked);
+
+ if (did_inc_secure)
+ --secure;
+***************
+*** 5280,5286 ****
+ }
+
+ if (opt_idx >= 0)
+! did_set_option(opt_idx, opt_flags, value_is_replaced);
+ }
+
+ skip:
+--- 5282,5289 ----
+ }
+
+ if (opt_idx >= 0)
+! did_set_option(
+! opt_idx, opt_flags, value_is_replaced, value_checked);
+ }
+
+ skip:
+***************
+*** 5348,5355 ****
+ static void
+ did_set_option(
+ int opt_idx,
+! int opt_flags, /* possibly with OPT_MODELINE */
+! int new_value) /* value was replaced completely */
+ {
+ long_u *p;
+
+--- 5351,5360 ----
+ static void
+ did_set_option(
+ int opt_idx,
+! int opt_flags, // possibly with OPT_MODELINE
+! int new_value, // value was replaced completely
+! int value_checked) // value was checked to be safe, no need to set the
+! // P_INSECURE flag.
+ {
+ long_u *p;
+
+***************
+*** 5359,5369 ****
+ * set the P_INSECURE flag. Otherwise, if a new value is stored reset the
+ * flag. */
+ p = insecure_flag(opt_idx, opt_flags);
+! if (secure
+ #ifdef HAVE_SANDBOX
+ || sandbox != 0
+ #endif
+! || (opt_flags & OPT_MODELINE))
+ *p = *p | P_INSECURE;
+ else if (new_value)
+ *p = *p & ~P_INSECURE;
+--- 5364,5374 ----
+ * set the P_INSECURE flag. Otherwise, if a new value is stored reset the
+ * flag. */
+ p = insecure_flag(opt_idx, opt_flags);
+! if (!value_checked && (secure
+ #ifdef HAVE_SANDBOX
+ || sandbox != 0
+ #endif
+! || (opt_flags & OPT_MODELINE)))
+ *p = *p | P_INSECURE;
+ else if (new_value)
+ *p = *p & ~P_INSECURE;
+***************
+*** 6036,6041 ****
+--- 6041,6047 ----
+ char_u *saved_newval = NULL;
+ #endif
+ char_u *r = NULL;
++ int value_checked = FALSE;
+
+ if (options[opt_idx].var == NULL) /* don't set hidden option */
+ return NULL;
+***************
+*** 6063,6070 ****
+ }
+ #endif
+ if ((r = did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
+! opt_flags)) == NULL)
+! did_set_option(opt_idx, opt_flags, TRUE);
+
+ #if defined(FEAT_EVAL)
+ /* call autocommand after handling side effects */
+--- 6069,6076 ----
+ }
+ #endif
+ if ((r = did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
+! opt_flags, &value_checked)) == NULL)
+! did_set_option(opt_idx, opt_flags, TRUE, value_checked);
+
+ #if defined(FEAT_EVAL)
+ /* call autocommand after handling side effects */
+***************
+*** 6099,6110 ****
+ */
+ static char_u *
+ did_set_string_option(
+! int opt_idx, /* index in options[] table */
+! char_u **varp, /* pointer to the option variable */
+! int new_value_alloced, /* new value was allocated */
+! char_u *oldval, /* previous value of the option */
+! char_u *errbuf, /* buffer for errors, or NULL */
+! int opt_flags) /* OPT_LOCAL and/or OPT_GLOBAL */
+ {
+ char_u *errmsg = NULL;
+ char_u *s, *p;
+--- 6105,6118 ----
+ */
+ static char_u *
+ did_set_string_option(
+! int opt_idx, // index in options[] table
+! char_u **varp, // pointer to the option variable
+! int new_value_alloced, // new value was allocated
+! char_u *oldval, // previous value of the option
+! char_u *errbuf, // buffer for errors, or NULL
+! int opt_flags, // OPT_LOCAL and/or OPT_GLOBAL
+! int *value_checked) // value was checked to be save, no
+! // need to set P_INSECURE
+ {
+ char_u *errmsg = NULL;
+ char_u *s, *p;
+***************
+*** 6134,6143 ****
+ errmsg = e_secure;
+ }
+
+! /* Check for a "normal" directory or file name in some options. Disallow a
+! * path separator (slash and/or backslash), wildcards and characters that
+! * are often illegal in a file name. Be more permissive if "secure" is off.
+! */
+ else if (((options[opt_idx].flags & P_NFNAME)
+ && vim_strpbrk(*varp, (char_u *)(secure
+ ? "/\\*?[|;&<>\r\n" : "/\\*?[<>\r\n")) != NULL)
+--- 6142,6150 ----
+ errmsg = e_secure;
+ }
+
+! // Check for a "normal" directory or file name in some options. Disallow a
+! // path separator (slash and/or backslash), wildcards and characters that
+! // are often illegal in a file name. Be more permissive if "secure" is off.
+ else if (((options[opt_idx].flags & P_NFNAME)
+ && vim_strpbrk(*varp, (char_u *)(secure
+ ? "/\\*?[|;&<>\r\n" : "/\\*?[<>\r\n")) != NULL)
+***************
+*** 6524,6532 ****
+ if (!valid_filetype(*varp))
+ errmsg = e_invarg;
+ else
+! /* load or unload key mapping tables */
+ errmsg = keymap_init();
+
+ if (errmsg == NULL)
+ {
+ if (*curbuf->b_p_keymap != NUL)
+--- 6531,6553 ----
+ if (!valid_filetype(*varp))
+ errmsg = e_invarg;
+ else
+! {
+! int secure_save = secure;
+!
+! // Reset the secure flag, since the value of 'keymap' has
+! // been checked to be safe.
+! secure = 0;
+!
+! // load or unload key mapping tables
+ errmsg = keymap_init();
+
++ secure = secure_save;
++
++ // Since we check the value, there is no need to set P_INSECURE,
++ // even when the value comes from a modeline.
++ *value_checked = TRUE;
++ }
++
+ if (errmsg == NULL)
+ {
+ if (*curbuf->b_p_keymap != NUL)
+***************
+*** 7523,7529 ****
+--- 7544,7556 ----
+ if (!valid_filetype(*varp))
+ errmsg = e_invarg;
+ else
++ {
+ value_changed = STRCMP(oldval, *varp) != 0;
++
++ // Since we check the value, there is no need to set P_INSECURE,
++ // even when the value comes from a modeline.
++ *value_checked = TRUE;
++ }
+ }
+
+ #ifdef FEAT_SYN_HL
+***************
+*** 7532,7538 ****
+--- 7559,7571 ----
+ if (!valid_filetype(*varp))
+ errmsg = e_invarg;
+ else
++ {
+ value_changed = STRCMP(oldval, *varp) != 0;
++
++ // Since we check the value, there is no need to set P_INSECURE,
++ // even when the value comes from a modeline.
++ *value_checked = TRUE;
++ }
+ }
+ #endif
+
+***************
+*** 7752,7758 ****
+ * already set to this value. */
+ if (!(opt_flags & OPT_MODELINE) || value_changed)
+ {
+! static int ft_recursive = 0;
+
+ ++ft_recursive;
+ did_filetype = TRUE;
+--- 7785,7796 ----
+ * already set to this value. */
+ if (!(opt_flags & OPT_MODELINE) || value_changed)
+ {
+! static int ft_recursive = 0;
+! int secure_save = secure;
+!
+! // Reset the secure flag, since the value of 'filetype' has
+! // been checked to be safe.
+! secure = 0;
+
+ ++ft_recursive;
+ did_filetype = TRUE;
+***************
+*** 7764,7769 ****
+--- 7802,7809 ----
+ /* Just in case the old "curbuf" is now invalid. */
+ if (varp != &(curbuf->b_p_ft))
+ varp = NULL;
++
++ secure = secure_save;
+ }
+ }
+ #ifdef FEAT_SPELL
+*** ../vim-8.1.0543/src/testdir/test_modeline.vim 2018-11-03 19:06:20.211795974 +0100
+--- src/testdir/test_modeline.vim 2018-11-25 02:14:42.281361870 +0100
+***************
+*** 6,12 ****
+--- 6,88 ----
+ let modeline = &modeline
+ set modeline
+ call assert_fails('split Xmodeline', 'E518:')
++
+ let &modeline = modeline
+ bwipe!
+ call delete('Xmodeline')
+ endfunc
++
++ func Test_modeline_filetype()
++ call writefile(['vim: set ft=c :', 'nothing'], 'Xmodeline_filetype')
++ let modeline = &modeline
++ set modeline
++ filetype plugin on
++ split Xmodeline_filetype
++ call assert_equal("c", &filetype)
++ call assert_equal(1, b:did_ftplugin)
++ call assert_equal("ccomplete#Complete", &ofu)
++
++ bwipe!
++ call delete('Xmodeline_filetype')
++ let &modeline = modeline
++ filetype plugin off
++ endfunc
++
++ func Test_modeline_syntax()
++ call writefile(['vim: set syn=c :', 'nothing'], 'Xmodeline_syntax')
++ let modeline = &modeline
++ set modeline
++ syntax enable
++ split Xmodeline_syntax
++ call assert_equal("c", &syntax)
++ call assert_equal("c", b:current_syntax)
++
++ bwipe!
++ call delete('Xmodeline_syntax')
++ let &modeline = modeline
++ syntax off
++ endfunc
++
++ func Test_modeline_keymap()
++ call writefile(['vim: set keymap=greek :', 'nothing'], 'Xmodeline_keymap')
++ let modeline = &modeline
++ set modeline
++ split Xmodeline_keymap
++ call assert_equal("greek", &keymap)
++ call assert_match('greek\|grk', b:keymap_name)
++
++ bwipe!
++ call delete('Xmodeline_keymap')
++ let &modeline = modeline
++ set keymap= iminsert=0 imsearch=-1
++ endfunc
++
++ func s:modeline_fails(what, text)
++ let fname = "Xmodeline_fails_" . a:what
++ call writefile(['vim: set ' . a:text . ' :', 'nothing'], fname)
++ let modeline = &modeline
++ set modeline
++ filetype plugin on
++ syntax enable
++ call assert_fails('split ' . fname, 'E474:')
++ call assert_equal("", &filetype)
++ call assert_equal("", &syntax)
++
++ bwipe!
++ call delete(fname)
++ let &modeline = modeline
++ filetype plugin off
++ syntax off
++ endfunc
++
++ func Test_modeline_filetype_fails()
++ call s:modeline_fails('filetype', 'ft=evil$CMD')
++ endfunc
++
++ func Test_modeline_syntax_fails()
++ call s:modeline_fails('syntax', 'syn=evil$CMD')
++ endfunc
++
++ func Test_modeline_keymap_fails()
++ call s:modeline_fails('keymap', 'keymap=evil$CMD')
++ endfunc
+*** ../vim-8.1.0543/src/version.c 2018-11-24 14:27:36.988474753 +0100
+--- src/version.c 2018-11-25 02:17:53.463996557 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 544,
+ /**/
+
+--
+To the optimist, the glass is half full.
+To the pessimist, the glass is half empty.
+To the engineer, the glass is twice as big as it needs to be.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0545 b/data/vim/patches/8.1.0545
new file mode 100644
index 000000000..5ebd8bc26
--- /dev/null
+++ b/data/vim/patches/8.1.0545
@@ -0,0 +1,71 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0545
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0545
+Problem: When executing indent tests user preferences interfere.
+Solution: Add "--clean".
+Files: runtime/indent/Makefile, runtime/indent/testdir/runtest.vim
+
+
+*** ../vim-8.1.0544/runtime/indent/Makefile 2018-10-25 16:52:46.839887739 +0200
+--- runtime/indent/Makefile 2018-11-20 02:17:41.810321876 +0100
+***************
+*** 6,13 ****
+ # If a test succeeds a testdir/*.out file will be written.
+ # If a test fails a testdir/*.fail file will be written.
+ test:
+! $(VIM) --not-a-term -u testdir/runtest.vim
+
+
+ clean:
+! $(VIM) --not-a-term -u testdir/cleantest.vim
+--- 6,13 ----
+ # If a test succeeds a testdir/*.out file will be written.
+ # If a test fails a testdir/*.fail file will be written.
+ test:
+! $(VIM) --clean --not-a-term -u testdir/runtest.vim
+
+
+ clean:
+! $(VIM) --clean --not-a-term -u testdir/cleantest.vim
+*** ../vim-8.1.0544/runtime/indent/testdir/runtest.vim 2018-10-25 16:52:46.839887739 +0200
+--- runtime/indent/testdir/runtest.vim 2018-11-22 03:38:03.875097200 +0100
+***************
+*** 1,4 ****
+! " Runs all the indent tests for which there is no .out file
+
+ set nocp
+ filetype indent on
+--- 1,6 ----
+! " Runs all the indent tests for which there is no .out file.
+! "
+! " Current directory must be runtime/indent.
+
+ set nocp
+ filetype indent on
+*** ../vim-8.1.0544/src/version.c 2018-11-25 02:18:24.815772654 +0100
+--- src/version.c 2018-11-25 04:02:11.214968532 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 545,
+ /**/
+
+--
+ROBIN: (warily) And if you get a question wrong?
+ARTHUR: You are cast into the Gorge of Eternal Peril.
+ROBIN: Oh ... wacho!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0546 b/data/vim/patches/8.1.0546
new file mode 100644
index 000000000..1054134ed
--- /dev/null
+++ b/data/vim/patches/8.1.0546
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0546
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0546
+Problem: Modeline test with keymap fails.
+Solution: Check that the keymap feature is available.
+Files: src/testdir/test_modeline.vim
+
+
+*** ../vim-8.1.0545/src/testdir/test_modeline.vim 2018-11-25 02:18:24.815772654 +0100
+--- src/testdir/test_modeline.vim 2018-11-25 04:18:53.256071424 +0100
+***************
+*** 44,49 ****
+--- 44,52 ----
+ endfunc
+
+ func Test_modeline_keymap()
++ if !has('keymap')
++ return
++ endif
+ call writefile(['vim: set keymap=greek :', 'nothing'], 'Xmodeline_keymap')
+ let modeline = &modeline
+ set modeline
+*** ../vim-8.1.0545/src/version.c 2018-11-25 04:03:04.262574403 +0100
+--- src/version.c 2018-11-25 04:24:54.857700649 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 546,
+ /**/
+
+--
+Sorry, no fortune today.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0547 b/data/vim/patches/8.1.0547
new file mode 100644
index 000000000..651a2d69c
--- /dev/null
+++ b/data/vim/patches/8.1.0547
@@ -0,0 +1,46 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0547
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0547
+Problem: Modeline test with keymap still fails.
+Solution: Check that the keymap feature is available for the failure assert.
+Files: src/testdir/test_modeline.vim
+
+
+*** ../vim-8.1.0546/src/testdir/test_modeline.vim 2018-11-25 04:25:50.901321246 +0100
+--- src/testdir/test_modeline.vim 2018-11-25 05:03:15.917380300 +0100
+***************
+*** 87,91 ****
+--- 87,94 ----
+ endfunc
+
+ func Test_modeline_keymap_fails()
++ if !has('keymap')
++ return
++ endif
+ call s:modeline_fails('keymap', 'keymap=evil$CMD')
+ endfunc
+*** ../vim-8.1.0546/src/version.c 2018-11-25 04:25:50.901321246 +0100
+--- src/version.c 2018-11-25 05:04:50.292702524 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 547,
+ /**/
+
+--
+Permission is granted to read this message out aloud on Kings Cross Road,
+London, under the condition that the orator is properly dressed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0548 b/data/vim/patches/8.1.0548
new file mode 100644
index 000000000..905c7b713
--- /dev/null
+++ b/data/vim/patches/8.1.0548
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0548
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0548
+Problem: Crash when job callback unloads a buffer. (James McCoy)
+Solution: Don't round up the wait time to 10 msec in ui_inchar().
+Files: src/ui.c
+
+
+*** ../vim-8.1.0547/src/ui.c 2018-11-20 02:42:37.111373664 +0100
+--- src/ui.c 2018-11-26 20:50:54.398315964 +0100
+***************
+*** 154,161 ****
+ static int count = 0;
+
+ # ifndef NO_CONSOLE
+! retval = mch_inchar(buf, maxlen, (wtime >= 0 && wtime < 10)
+! ? 10L : wtime, tb_change_cnt);
+ if (retval > 0 || typebuf_changed(tb_change_cnt) || wtime >= 0)
+ goto theend;
+ # endif
+--- 154,160 ----
+ static int count = 0;
+
+ # ifndef NO_CONSOLE
+! retval = mch_inchar(buf, maxlen, wtime, tb_change_cnt);
+ if (retval > 0 || typebuf_changed(tb_change_cnt) || wtime >= 0)
+ goto theend;
+ # endif
+*** ../vim-8.1.0547/src/version.c 2018-11-25 05:06:34.947950996 +0100
+--- src/version.c 2018-11-26 21:18:49.601434988 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 548,
+ /**/
+
+--
+Men may not be seen publicly in any kind of strapless gown.
+ [real standing law in Florida, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0549 b/data/vim/patches/8.1.0549
new file mode 100644
index 000000000..88d5a5694
--- /dev/null
+++ b/data/vim/patches/8.1.0549
@@ -0,0 +1,111 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0549
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0549
+Problem: Netbeans test depends on README.txt contents.
+Solution: Use a generated file instead.
+Files: src/testdir/test_netbeans.vim, src/testdir/test_netbeans.py
+
+
+*** ../vim-8.1.0548/src/testdir/test_netbeans.vim 2017-11-02 17:59:12.000000000 +0100
+--- src/testdir/test_netbeans.vim 2018-11-26 21:14:37.366788783 +0100
+***************
+*** 20,32 ****
+ func Nb_basic(port)
+ call delete("Xnetbeans")
+ call writefile([], "Xnetbeans")
+ exe 'nbstart :localhost:' . a:port . ':bunny'
+ call assert_true(has("netbeans_enabled"))
+
+ call WaitFor('len(readfile("Xnetbeans")) > 2')
+! split +$ README.txt
+
+! " Opening README.txt will result in a setDot command
+ call WaitFor('len(readfile("Xnetbeans")) > 4')
+ call WaitFor('getcurpos()[1] == 3')
+ let pos = getcurpos()
+--- 20,33 ----
+ func Nb_basic(port)
+ call delete("Xnetbeans")
+ call writefile([], "Xnetbeans")
++ call writefile(repeat(['abcdefghijklmnopqrstuvwxyz'], 5), "XREADME.txt")
+ exe 'nbstart :localhost:' . a:port . ':bunny'
+ call assert_true(has("netbeans_enabled"))
+
+ call WaitFor('len(readfile("Xnetbeans")) > 2')
+! split +$ XREADME.txt
+
+! " Opening XREADME.txt will result in a setDot command
+ call WaitFor('len(readfile("Xnetbeans")) > 4')
+ call WaitFor('getcurpos()[1] == 3')
+ let pos = getcurpos()
+***************
+*** 41,51 ****
+ call assert_equal('AUTH bunny', lines[0])
+ call assert_equal('0:version=0 "2.5"', lines[1])
+ call assert_equal('0:startupDone=0', lines[2])
+! call assert_equal('0:fileOpened=0 "README.txt" T F', substitute(lines[3], '".*/', '"', ''))
+
+ call assert_equal('0:disconnect=1', lines[6])
+
+ call delete("Xnetbeans")
+ endfunc
+
+ func Test_nb_basic()
+--- 42,53 ----
+ call assert_equal('AUTH bunny', lines[0])
+ call assert_equal('0:version=0 "2.5"', lines[1])
+ call assert_equal('0:startupDone=0', lines[2])
+! call assert_equal('0:fileOpened=0 "XREADME.txt" T F', substitute(lines[3], '".*/', '"', ''))
+
+ call assert_equal('0:disconnect=1', lines[6])
+
+ call delete("Xnetbeans")
++ call delete("XREADME.txt")
+ endfunc
+
+ func Test_nb_basic()
+*** ../vim-8.1.0548/src/testdir/test_netbeans.py 2016-09-14 22:22:03.000000000 +0200
+--- src/testdir/test_netbeans.py 2018-11-26 21:12:12.531537664 +0100
+***************
+*** 42,48 ****
+ myfile.write(received)
+
+ response = ''
+! if received.find('README.txt') > 0:
+ name = received.split('"')[1]
+ response = '5:putBufferNumber!33 "' + name + '"\n'
+ response += '5:setDot!1 3/19\n'
+--- 42,48 ----
+ myfile.write(received)
+
+ response = ''
+! if received.find('XREADME.txt') > 0:
+ name = received.split('"')[1]
+ response = '5:putBufferNumber!33 "' + name + '"\n'
+ response += '5:setDot!1 3/19\n'
+*** ../vim-8.1.0548/src/version.c 2018-11-26 21:19:08.045334122 +0100
+--- src/version.c 2018-11-26 21:20:25.064910721 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 549,
+ /**/
+
+--
+The Law, in its majestic equality, forbids the rich, as well as the
+poor, to sleep under the bridges, to beg in the streets, and to steal
+bread. -- Anatole France
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0550 b/data/vim/patches/8.1.0550
new file mode 100644
index 000000000..013224b5e
--- /dev/null
+++ b/data/vim/patches/8.1.0550
@@ -0,0 +1,123 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.05
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0550
+Problem: Expression evaluation may repeat an error message. (Jason
+ Franklin)
+Solution: Increment did_emsg and check for the value when giving an error
+ for the echo command.
+Files: src/message.c, src/eval.c, src/testdir/test108.ok
+
+
+*** ../vim-8.1.0549/src/message.c 2018-10-07 23:16:33.138616197 +0200
+--- src/message.c 2018-11-28 20:30:19.215302673 +0100
+***************
+*** 636,642 ****
+ if (cause_errthrow(s, severe, &ignore) == TRUE)
+ {
+ if (!ignore)
+! did_emsg = TRUE;
+ return TRUE;
+ }
+
+--- 636,642 ----
+ if (cause_errthrow(s, severe, &ignore) == TRUE)
+ {
+ if (!ignore)
+! ++did_emsg;
+ return TRUE;
+ }
+
+***************
+*** 689,695 ****
+ beep_flush(); /* also includes flush_buffers() */
+ else
+ flush_buffers(FLUSH_MINIMAL); // flush internal buffers
+! did_emsg = TRUE; // flag for DoOneCmd()
+ #ifdef FEAT_EVAL
+ did_uncaught_emsg = TRUE;
+ #endif
+--- 689,695 ----
+ beep_flush(); /* also includes flush_buffers() */
+ else
+ flush_buffers(FLUSH_MINIMAL); // flush internal buffers
+! ++did_emsg; // flag for DoOneCmd()
+ #ifdef FEAT_EVAL
+ did_uncaught_emsg = TRUE;
+ #endif
+*** ../vim-8.1.0549/src/eval.c 2018-10-25 13:31:33.829906902 +0200
+--- src/eval.c 2018-11-28 20:30:54.619090027 +0100
+***************
+*** 7999,8004 ****
+--- 7999,8005 ----
+ int needclr = TRUE;
+ int atstart = TRUE;
+ char_u numbuf[NUMBUFLEN];
++ int did_emsg_before = did_emsg;
+
+ if (eap->skip)
+ ++emsg_skip;
+***************
+*** 8016,8022 ****
+ * has been cancelled due to an aborting error, an interrupt, or an
+ * exception.
+ */
+! if (!aborting())
+ EMSG2(_(e_invexpr2), p);
+ need_clr_eos = FALSE;
+ break;
+--- 8017,8023 ----
+ * has been cancelled due to an aborting error, an interrupt, or an
+ * exception.
+ */
+! if (!aborting() && did_emsg == did_emsg_before)
+ EMSG2(_(e_invexpr2), p);
+ need_clr_eos = FALSE;
+ break;
+*** ../vim-8.1.0549/src/testdir/test108.ok 2016-01-16 15:35:46.000000000 +0100
+--- src/testdir/test108.ok 2018-11-28 20:37:22.504719732 +0100
+***************
+*** 28,34 ****
+ Error detected while processing function Foo[2]..Bar[2]..Bazz:
+ line 3:
+ E121: Undefined variable: var3
+- E15: Invalid expression: var3
+ here var3 is defined with "another var":
+ another var
+
+--- 28,33 ----
+***************
+*** 36,42 ****
+ Error detected while processing function Foo[2]..Bar:
+ line 3:
+ E121: Undefined variable: var2
+- E15: Invalid expression: var2
+ here var2 is defined with 10:
+ 10
+
+--- 35,40 ----
+*** ../vim-8.1.0549/src/version.c 2018-11-26 21:22:03.128367125 +0100
+--- src/version.c 2018-11-28 20:38:15.024394567 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 550,
+ /**/
+
+--
+A programmer's wife asks him: "Please run to the store and pick up a loaf of
+bread. If they have eggs, get a dozen". The programmer comes home with 12
+loafs of bread.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0551 b/data/vim/patches/8.1.0551
new file mode 100644
index 000000000..de81ef018
--- /dev/null
+++ b/data/vim/patches/8.1.0551
@@ -0,0 +1,72 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0551
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0551 (after 8.1.0550)
+Problem: Expression evaluation may repeat an error message. (Jason
+ Franklin)
+Solution: Check for the value of did_emsg when giving an error
+ for the :execute command.
+Files: src/eval.c
+
+
+*** ../vim-8.1.0550/src/eval.c 2018-11-28 20:38:34.564273386 +0100
+--- src/eval.c 2018-11-28 21:10:16.516158217 +0100
+***************
+*** 8115,8121 ****
+ char_u *p;
+ garray_T ga;
+ int len;
+! int save_did_emsg;
+
+ ga_init2(&ga, 1, 80);
+
+--- 8115,8121 ----
+ char_u *p;
+ garray_T ga;
+ int len;
+! int save_did_emsg = did_emsg;
+
+ ga_init2(&ga, 1, 80);
+
+***************
+*** 8131,8137 ****
+ * has been cancelled due to an aborting error, an interrupt, or an
+ * exception.
+ */
+! if (!aborting())
+ EMSG2(_(e_invexpr2), p);
+ ret = FAIL;
+ break;
+--- 8131,8137 ----
+ * has been cancelled due to an aborting error, an interrupt, or an
+ * exception.
+ */
+! if (!aborting() && did_emsg == save_did_emsg)
+ EMSG2(_(e_invexpr2), p);
+ ret = FAIL;
+ break;
+*** ../vim-8.1.0550/src/version.c 2018-11-28 20:38:34.564273386 +0100
+--- src/version.c 2018-11-28 21:11:41.047618911 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 551,
+ /**/
+
+--
+A parent can be arrested if his child cannot hold back a burp during a church
+service.
+ [real standing law in Nebraska, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0552 b/data/vim/patches/8.1.0552
new file mode 100644
index 000000000..6e27ee01a
--- /dev/null
+++ b/data/vim/patches/8.1.0552
@@ -0,0 +1,120 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0552
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0552
+Problem: Saved last search pattern may not be restored.
+Solution: Call restore_last_search_pattern(). Add a check for balancing
+ saving and restoring the last search pattern.
+Files: src/ex_getln.c, src/search.c
+
+
+*** ../vim-8.1.0551/src/ex_getln.c 2018-11-24 14:27:36.988474753 +0100
+--- src/ex_getln.c 2018-11-30 21:43:13.477019050 +0100
+***************
+*** 462,467 ****
+--- 462,468 ----
+ int use_last_pat;
+
+ // Parsing range may already set the last search pattern.
++ // NOTE: must call restore_last_search_pattern() before returning!
+ save_last_search_pattern();
+
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+***************
+*** 633,638 ****
+--- 634,640 ----
+ int save;
+
+ // Parsing range may already set the last search pattern.
++ // NOTE: must call restore_last_search_pattern() before returning!
+ save_last_search_pattern();
+
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+***************
+*** 735,740 ****
+--- 737,743 ----
+ int skiplen, patlen;
+
+ // Parsing range may already set the last search pattern.
++ // NOTE: must call restore_last_search_pattern() before returning!
+ save_last_search_pattern();
+
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+***************
+*** 742,747 ****
+--- 745,751 ----
+ restore_last_search_pattern();
+ return FAIL;
+ }
++ restore_last_search_pattern();
+
+ // Add a character from under the cursor for 'incsearch'.
+ if (is_state->did_incsearch)
+*** ../vim-8.1.0551/src/search.c 2018-11-16 16:21:01.633310065 +0100
+--- src/search.c 2018-11-30 21:46:33.771924536 +0100
+***************
+*** 96,101 ****
+--- 96,102 ----
+ /* copy of spats[RE_SEARCH], for keeping the search patterns while incremental
+ * searching */
+ static struct spat saved_last_search_spat;
++ static int did_save_last_search_spat = 0;
+ static int saved_last_idx = 0;
+ static int saved_no_hlsearch = 0;
+ # endif
+***************
+*** 364,369 ****
+--- 365,375 ----
+ void
+ save_last_search_pattern(void)
+ {
++ if (did_save_last_search_spat != 0)
++ IEMSG("did_save_last_search_spat is not zero");
++ else
++ ++did_save_last_search_spat;
++
+ saved_last_search_spat = spats[RE_SEARCH];
+ if (spats[RE_SEARCH].pat != NULL)
+ saved_last_search_spat.pat = vim_strsave(spats[RE_SEARCH].pat);
+***************
+*** 374,381 ****
+--- 380,395 ----
+ void
+ restore_last_search_pattern(void)
+ {
++ if (did_save_last_search_spat != 1)
++ {
++ IEMSG("did_save_last_search_spat is not one");
++ return;
++ }
++ --did_save_last_search_spat;
++
+ vim_free(spats[RE_SEARCH].pat);
+ spats[RE_SEARCH] = saved_last_search_spat;
++ saved_last_search_spat.pat = NULL;
+ # if defined(FEAT_EVAL)
+ set_vv_searchforward();
+ # endif
+*** ../vim-8.1.0551/src/version.c 2018-11-28 21:20:34.096221686 +0100
+--- src/version.c 2018-11-30 21:47:47.412181458 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 552,
+ /**/
+
+--
+SIGIRO -- irony detected (iron core dumped)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0553 b/data/vim/patches/8.1.0553
new file mode 100644
index 000000000..3957a8df1
--- /dev/null
+++ b/data/vim/patches/8.1.0553
@@ -0,0 +1,197 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0553
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0553
+Problem: It is not easy to edit a script that was sourced.
+Solution: Add a count to ":scriptnames", so that ":script 40" edits the
+ script with script ID 40.
+Files: src/ex_cmds.h, src/ex_cmds2.c, src/testdir/test_scriptnames.vim,
+ src/Make_all.mak, src/testdir/Make_all.mak, runtime/doc/repeat.txt
+
+
+*** ../vim-8.1.0552/src/ex_cmds.h 2018-10-19 22:35:04.885189994 +0200
+--- src/ex_cmds.h 2018-11-30 22:16:01.339155261 +0100
+***************
+*** 62,76 ****
+ #define FILE1 (FILES | NOSPC) /* 1 file allowed, defaults to current file */
+
+ /* values for cmd_addr_type */
+! #define ADDR_LINES 0
+! #define ADDR_WINDOWS 1
+! #define ADDR_ARGUMENTS 2
+! #define ADDR_LOADED_BUFFERS 3
+! #define ADDR_BUFFERS 4
+! #define ADDR_TABS 5
+! #define ADDR_TABS_RELATIVE 6 /* Tab page that only relative */
+! #define ADDR_QUICKFIX 7
+! #define ADDR_OTHER 99
+
+ #ifndef DO_DECLARE_EXCMD
+ typedef struct exarg exarg_T;
+--- 62,76 ----
+ #define FILE1 (FILES | NOSPC) /* 1 file allowed, defaults to current file */
+
+ /* values for cmd_addr_type */
+! #define ADDR_LINES 0 // buffer line numbers
+! #define ADDR_WINDOWS 1 // window number
+! #define ADDR_ARGUMENTS 2 // argument number
+! #define ADDR_LOADED_BUFFERS 3 // buffer number of loaded buffer
+! #define ADDR_BUFFERS 4 // buffer number
+! #define ADDR_TABS 5 // tab page number
+! #define ADDR_TABS_RELATIVE 6 // Tab page that only relative
+! #define ADDR_QUICKFIX 7 // quickfix list entry number
+! #define ADDR_OTHER 99 // something else
+
+ #ifndef DO_DECLARE_EXCMD
+ typedef struct exarg exarg_T;
+***************
+*** 1260,1267 ****
+ EDITCMD|TRLBAR,
+ ADDR_LINES),
+ EX(CMD_scriptnames, "scriptnames", ex_scriptnames,
+! TRLBAR|CMDWIN,
+! ADDR_LINES),
+ EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding,
+ WORD1|TRLBAR|CMDWIN,
+ ADDR_LINES),
+--- 1260,1267 ----
+ EDITCMD|TRLBAR,
+ ADDR_LINES),
+ EX(CMD_scriptnames, "scriptnames", ex_scriptnames,
+! BANG|RANGE|NOTADR|COUNT|TRLBAR|CMDWIN,
+! ADDR_OTHER),
+ EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding,
+ WORD1|TRLBAR|CMDWIN,
+ ADDR_LINES),
+*** ../vim-8.1.0552/src/ex_cmds2.c 2018-11-10 17:33:23.087518814 +0100
+--- src/ex_cmds2.c 2018-11-30 22:21:44.041191333 +0100
+***************
+*** 4690,4699 ****
+ * ":scriptnames"
+ */
+ void
+! ex_scriptnames(exarg_T *eap UNUSED)
+ {
+ int i;
+
+ for (i = 1; i <= script_items.ga_len && !got_int; ++i)
+ if (SCRIPT_ITEM(i).sn_name != NULL)
+ {
+--- 4690,4712 ----
+ * ":scriptnames"
+ */
+ void
+! ex_scriptnames(exarg_T *eap)
+ {
+ int i;
+
++ if (eap->addr_count > 0)
++ {
++ // :script {scriptId}: edit the script
++ if (eap->line2 < 1 || eap->line2 > script_items.ga_len)
++ EMSG(_(e_invarg));
++ else
++ {
++ eap->arg = SCRIPT_ITEM(eap->line2).sn_name;
++ do_exedit(eap, NULL);
++ }
++ return;
++ }
++
+ for (i = 1; i <= script_items.ga_len && !got_int; ++i)
+ if (SCRIPT_ITEM(i).sn_name != NULL)
+ {
+*** ../vim-8.1.0552/src/testdir/test_scriptnames.vim 2018-11-30 22:36:54.859349269 +0100
+--- src/testdir/test_scriptnames.vim 2018-11-30 22:39:33.306420278 +0100
+***************
+*** 0 ****
+--- 1,26 ----
++ " Test for :scriptnames
++
++ func Test_scriptnames()
++ call writefile(['let did_load_script = 123'], 'Xscripting')
++ source Xscripting
++ call assert_equal(123, g:did_load_script)
++
++ let scripts = split(execute('scriptnames'), "\n")
++ let last = scripts[-1]
++ call assert_match('\<Xscripting\>', last)
++ let lastnr = substitute(last, '\D*\(\d\+\):.*', '\1', '')
++ exe 'script ' . lastnr
++ call assert_equal('Xscripting', expand('%:t'))
++
++ call assert_fails('script ' . (lastnr + 1), 'E474:')
++ call assert_fails('script 0', 'E939:')
++
++ new
++ call setline(1, 'nothing')
++ call assert_fails('script ' . lastnr, 'E37:')
++ exe 'script! ' . lastnr
++ call assert_equal('Xscripting', expand('%:t'))
++
++ bwipe
++ call delete('Xscripting')
++ endfunc
+*** ../vim-8.1.0552/src/Make_all.mak 2018-11-10 18:54:40.656592081 +0100
+--- src/Make_all.mak 2018-11-30 22:30:44.813583693 +0100
+***************
+*** 153,158 ****
+--- 153,159 ----
+ test_reltime \
+ test_retab \
+ test_ruby \
++ test_scriptnames \
+ test_scroll_opt \
+ test_scrollbind \
+ test_search \
+*** ../vim-8.1.0552/src/testdir/Make_all.mak 2018-06-30 21:50:16.852674935 +0200
+--- src/testdir/Make_all.mak 2018-11-30 22:31:08.813435000 +0100
+***************
+*** 158,163 ****
+--- 158,164 ----
+ test_registers.res \
+ test_retab.res \
+ test_ruby.res \
++ test_scriptnames.res \
+ test_scrollbind.res \
+ test_search.res \
+ test_shortpathname.res \
+*** ../vim-8.1.0552/runtime/doc/repeat.txt 2018-09-11 22:36:48.129548374 +0200
+--- runtime/doc/repeat.txt 2018-11-30 22:33:59.476394395 +0100
+***************
+*** 334,339 ****
+--- 334,342 ----
+ {not in Vi} {not available when compiled without the
+ |+eval| feature}
+
++ :scr[iptnames][!] {scriptId} *:script*
++ Edit script {scriptId}. Suggested name is ":script".
++
+ *:fini* *:finish* *E168*
+ :fini[sh] Stop sourcing a script. Can only be used in a Vim
+ script file. This is a quick way to skip the rest of
+*** ../vim-8.1.0552/src/version.c 2018-11-30 21:57:50.723861874 +0100
+--- src/version.c 2018-11-30 22:33:29.900572835 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 553,
+ /**/
+
+--
+ Another bucket of what can only be described as human ordure hits ARTHUR.
+ARTHUR: ... Right! (to the KNIGHTS) That settles it!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0554 b/data/vim/patches/8.1.0554
new file mode 100644
index 000000000..07b5ba9da
--- /dev/null
+++ b/data/vim/patches/8.1.0554
@@ -0,0 +1,127 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0554
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0554
+Problem: Popup menu overlaps with preview window.
+Solution: Adjust the height computation. (Hirohito Higashi, closes #3414)
+Files: src/popupmnu.c, src/testdir/test_popup.vim,
+ src/testdir/dumps/Test_popup_and_previewwindow_01.dump
+
+
+*** ../vim-8.1.0553/src/popupmnu.c 2018-10-19 22:35:04.889189955 +0200
+--- src/popupmnu.c 2018-12-01 11:58:36.983112412 +0100
+***************
+*** 196,215 ****
+ return;
+
+ #if defined(FEAT_QUICKFIX)
+! // If there is a preview window at the above avoid drawing over it.
+! // Do keep at least 10 entries.
+! if (pvwin != NULL && pum_row < above_row && pum_height > 10)
+ {
+! if (pum_win_row - above_row < 10)
+! {
+! pum_row = pum_win_row - 10;
+! pum_height = 10;
+! }
+! else
+! {
+! pum_row = above_row;
+! pum_height = pum_win_row - above_row;
+! }
+ }
+ #endif
+
+--- 196,206 ----
+ return;
+
+ #if defined(FEAT_QUICKFIX)
+! // If there is a preview window above avoid drawing over it.
+! if (pvwin != NULL && pum_row < above_row && pum_height > above_row)
+ {
+! pum_row = above_row;
+! pum_height = pum_win_row - above_row;
+ }
+ #endif
+
+*** ../vim-8.1.0553/src/testdir/test_popup.vim 2018-06-12 15:22:39.640579965 +0200
+--- src/testdir/test_popup.vim 2018-12-01 11:43:49.168791298 +0100
+***************
+*** 701,706 ****
+--- 701,728 ----
+ bw!
+ endfunc
+
++ func Test_popup_and_previewwindow_dump()
++ if !CanRunVimInTerminal()
++ return
++ endif
++ call writefile([
++ \ 'set previewheight=9',
++ \ 'silent! pedit',
++ \ 'call setline(1, map(repeat(["ab"], 10), "v:val. v:key"))',
++ \ 'exec "norm! G\<C-E>\<C-E>"',
++ \ ], 'Xscript')
++ let buf = RunVimInTerminal('-S Xscript', {})
++
++ " Test that popup and previewwindow do not overlap.
++ call term_sendkeys(buf, "o\<C-X>\<C-N>")
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_popup_and_previewwindow_01', {})
++
++ call term_sendkeys(buf, "\<Esc>u")
++ call StopVimInTerminal(buf)
++ call delete('Xscript')
++ endfunc
++
+ func Test_balloon_split()
+ if !exists('*balloon_split')
+ return
+*** ../vim-8.1.0553/src/testdir/dumps/Test_popup_and_previewwindow_01.dump 2018-12-01 11:57:54.775382023 +0100
+--- src/testdir/dumps/Test_popup_and_previewwindow_01.dump 2018-12-01 11:47:11.227496667 +0100
+***************
+*** 0 ****
+--- 1,20 ----
++ |a+0&#ffffff0|b|0| @71
++ |a|b|1| @71
++ |a|b|2| @71
++ |a|b|3| @71
++ |a|b|4| @71
++ |a|b|5| @71
++ |a|b|6| @71
++ |a|b|7| @71
++ |a|b|8| @71
++ |a+0#0000001#e0e0e08|b|0| @11| +0#0000000#0000001|e+1&#ffffff0|w|]|[|+|]| @34|1|,|1| @11|T|o|p
++ |a+0#0000001#ffd7ff255|b|1| @11| +0#0000000#0000001| +0&#ffffff0@58
++ |a+0#0000001#ffd7ff255|b|2| @11| +0#0000000#0000001| +0&#ffffff0@58
++ |a+0#0000001#ffd7ff255|b|3| @11| +0#0000000#0000001| +0&#ffffff0@58
++ |a+0#0000001#ffd7ff255|b|4| @11| +0#0000000#a8a8a8255| +0&#ffffff0@58
++ |a+0#0000001#ffd7ff255|b|5| @11| +0#0000000#a8a8a8255| +0&#ffffff0@58
++ |a+0#0000001#ffd7ff255|b|6| @11| +0#0000000#a8a8a8255| +0&#ffffff0@58
++ |a|b|0> @71
++ |~+0#4040ff13&| @73
++ |[+3#0000000&|N|o| |N|a|m|e|]| |[|+|]| @43|1|0|,|1| @10|B|o|t
++ |-+2&&@1| |K|e|y|w|o|r|d| |L|o|c|a|l| |c|o|m|p|l|e|t|i|o|n| |(|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |1|0| +0#0000000&@26
+*** ../vim-8.1.0553/src/version.c 2018-11-30 22:40:09.098211991 +0100
+--- src/version.c 2018-12-01 11:50:07.094371234 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 554,
+ /**/
+
+--
+Why is "abbreviation" such a long word?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0555 b/data/vim/patches/8.1.0555
new file mode 100644
index 000000000..c6cfaf99a
--- /dev/null
+++ b/data/vim/patches/8.1.0555
@@ -0,0 +1,74 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0555
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0555
+Problem: Crash when last search pat is set but not last substitute pat.
+Solution: Do not mix up last search pattern and last subtitute pattern.
+ (closes #3647)
+Files: src/search.c, src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0554/src/search.c 2018-11-30 21:57:50.723861874 +0100
+--- src/search.c 2018-12-01 13:09:58.124716701 +0100
+***************
+*** 1385,1391 ****
+ char_u *trunc;
+
+ if (*searchstr == NUL)
+! p = spats[last_idx].pat;
+ else
+ p = searchstr;
+ msgbuf = alloc((unsigned)(STRLEN(p) + 40));
+--- 1385,1391 ----
+ char_u *trunc;
+
+ if (*searchstr == NUL)
+! p = spats[0].pat;
+ else
+ p = searchstr;
+ msgbuf = alloc((unsigned)(STRLEN(p) + 40));
+*** ../vim-8.1.0554/src/testdir/test_search.vim 2018-09-16 17:07:40.125853848 +0200
+--- src/testdir/test_search.vim 2018-12-01 13:11:24.096343712 +0100
+***************
+*** 1142,1144 ****
+--- 1142,1156 ----
+ /\%'(
+ /
+ endfunc
++
++ " Test that there is no crash when there is a last search pattern but no last
++ " substitute pattern.
++ func Test_no_last_substitute_pat()
++ " Use viminfo to set the last search pattern to a string and make the last
++ " substitute pattern the most recent used and make it empty (NULL).
++ call writefile(['~MSle0/bar', '~MSle0~&'], 'Xviminfo')
++ rviminfo! Xviminfo
++ call assert_fails('normal n', 'E35:')
++
++ call delete('Xviminfo')
++ endfunc
+*** ../vim-8.1.0554/src/version.c 2018-12-01 11:58:44.415064948 +0100
+--- src/version.c 2018-12-01 13:11:33.232302706 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 555,
+ /**/
+
+--
+"I love deadlines. I especially like the whooshing sound they
+make as they go flying by."
+ -- Douglas Adams
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0556 b/data/vim/patches/8.1.0556
new file mode 100644
index 000000000..15684094e
--- /dev/null
+++ b/data/vim/patches/8.1.0556
@@ -0,0 +1,130 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0556
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0556
+Problem: Saving/restoring search patterns share saved last_idx.
+Solution: Use a separate saved last_idx for saving search patterns for
+ functions and incremental search.
+Files: src/search.c
+
+
+*** ../vim-8.1.0555/src/search.c 2018-12-01 13:14:40.883412219 +0100
+--- src/search.c 2018-12-01 21:01:43.478639117 +0100
+***************
+*** 93,104 ****
+ /* copy of spats[], for keeping the search patterns while executing autocmds */
+ static struct spat saved_spats[2];
+ # ifdef FEAT_SEARCH_EXTRA
+! /* copy of spats[RE_SEARCH], for keeping the search patterns while incremental
+! * searching */
+! static struct spat saved_last_search_spat;
+! static int did_save_last_search_spat = 0;
+! static int saved_last_idx = 0;
+! static int saved_no_hlsearch = 0;
+ # endif
+
+ static char_u *mr_pattern = NULL; /* pattern used by search_regcomp() */
+--- 93,100 ----
+ /* copy of spats[], for keeping the search patterns while executing autocmds */
+ static struct spat saved_spats[2];
+ # ifdef FEAT_SEARCH_EXTRA
+! static int saved_spats_last_idx = 0;
+! static int saved_spats_no_hlsearch = 0;
+ # endif
+
+ static char_u *mr_pattern = NULL; /* pattern used by search_regcomp() */
+***************
+*** 310,317 ****
+ if (spats[1].pat != NULL)
+ saved_spats[1].pat = vim_strsave(spats[1].pat);
+ #ifdef FEAT_SEARCH_EXTRA
+! saved_last_idx = last_idx;
+! saved_no_hlsearch = no_hlsearch;
+ #endif
+ }
+ }
+--- 306,313 ----
+ if (spats[1].pat != NULL)
+ saved_spats[1].pat = vim_strsave(spats[1].pat);
+ #ifdef FEAT_SEARCH_EXTRA
+! saved_spats_last_idx = last_idx;
+! saved_spats_no_hlsearch = no_hlsearch;
+ #endif
+ }
+ }
+***************
+*** 329,336 ****
+ vim_free(spats[1].pat);
+ spats[1] = saved_spats[1];
+ #ifdef FEAT_SEARCH_EXTRA
+! last_idx = saved_last_idx;
+! set_no_hlsearch(saved_no_hlsearch);
+ #endif
+ }
+ }
+--- 325,332 ----
+ vim_free(spats[1].pat);
+ spats[1] = saved_spats[1];
+ #ifdef FEAT_SEARCH_EXTRA
+! last_idx = saved_spats_last_idx;
+! set_no_hlsearch(saved_spats_no_hlsearch);
+ #endif
+ }
+ }
+***************
+*** 354,359 ****
+--- 350,362 ----
+ #endif
+
+ #ifdef FEAT_SEARCH_EXTRA
++ // copy of spats[RE_SEARCH], for keeping the search patterns while incremental
++ // searching
++ static struct spat saved_last_search_spat;
++ static int did_save_last_search_spat = 0;
++ static int saved_last_idx = 0;
++ static int saved_no_hlsearch = 0;
++
+ /*
+ * Save and restore the search pattern for incremental highlight search
+ * feature.
+***************
+*** 575,581 ****
+ saved_spats[idx].pat = NULL;
+ else
+ saved_spats[idx].pat = vim_strsave(spats[idx].pat);
+! saved_last_idx = last_idx;
+ }
+ # ifdef FEAT_SEARCH_EXTRA
+ /* If 'hlsearch' set and search pat changed: need redraw. */
+--- 578,584 ----
+ saved_spats[idx].pat = NULL;
+ else
+ saved_spats[idx].pat = vim_strsave(spats[idx].pat);
+! saved_spats_last_idx = last_idx;
+ }
+ # ifdef FEAT_SEARCH_EXTRA
+ /* If 'hlsearch' set and search pat changed: need redraw. */
+*** ../vim-8.1.0555/src/version.c 2018-12-01 13:14:40.883412219 +0100
+--- src/version.c 2018-12-01 21:06:48.136433537 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 556,
+ /**/
+
+--
+Corn oil comes from corn and olive oil comes from olives, so where
+does baby oil come from?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0557 b/data/vim/patches/8.1.0557
new file mode 100644
index 000000000..8f181c470
--- /dev/null
+++ b/data/vim/patches/8.1.0557
@@ -0,0 +1,528 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0557
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0557
+Problem: Termdebug: gdb may use X.Y for breakpoint number.
+Solution: Handle X.Y breakpoint numbers. (Yasuhiro Matsumoto, close #3641)
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0556/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-19 04:13:30.332453051 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-12-02 13:31:34.977457347 +0100
+***************
+*** 73,78 ****
+--- 73,85 ----
+ let s:break_id = 13 " breakpoint number is added to this
+ let s:stopped = 1
+
++ " Take a breakpoint number as used by GDB and turn it into an integer.
++ " The breakpoint may contain a dot: 123.4
++ func s:Breakpoint2SignNumber(nr)
++ let t = split(a:nr, '\.')
++ return t[0] * 1000 + (len(t) == 2 ? t[1] : 0)
++ endfunction
++
+ func s:Highlight(init, old, new)
+ let default = a:init ? 'default ' : ''
+ if a:new ==# 'light' && a:old !=# 'light'
+***************
+*** 138,146 ****
+ func s:StartDebug_term(dict)
+ " Open a terminal window without a job, to run the debugged program in.
+ let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ 'vertical': s:vertical,
+! \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+ return
+--- 145,153 ----
+ func s:StartDebug_term(dict)
+ " Open a terminal window without a job, to run the debugged program in.
+ let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ 'vertical': s:vertical,
+! \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+ return
+***************
+*** 155,164 ****
+
+ " Create a hidden terminal window to communicate with gdb
+ let s:commbuf = term_start('NONE', {
+! \ 'term_name': 'gdb communication',
+! \ 'out_cb': function('s:CommOutput'),
+! \ 'hidden': 1,
+! \ })
+ if s:commbuf == 0
+ echoerr 'Failed to open the communication terminal window'
+ exe 'bwipe! ' . s:ptybuf
+--- 162,171 ----
+
+ " Create a hidden terminal window to communicate with gdb
+ let s:commbuf = term_start('NONE', {
+! \ 'term_name': 'gdb communication',
+! \ 'out_cb': function('s:CommOutput'),
+! \ 'hidden': 1,
+! \ })
+ if s:commbuf == 0
+ echoerr 'Failed to open the communication terminal window'
+ exe 'bwipe! ' . s:ptybuf
+***************
+*** 174,182 ****
+ let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args
+ call ch_log('executing "' . join(cmd) . '"')
+ let s:gdbbuf = term_start(cmd, {
+! \ 'exit_cb': function('s:EndTermDebug'),
+! \ 'term_finish': 'close',
+! \ })
+ if s:gdbbuf == 0
+ echoerr 'Failed to open the gdb terminal window'
+ exe 'bwipe! ' . s:ptybuf
+--- 181,189 ----
+ let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args
+ call ch_log('executing "' . join(cmd) . '"')
+ let s:gdbbuf = term_start(cmd, {
+! \ 'exit_cb': function('s:EndTermDebug'),
+! \ 'term_finish': 'close',
+! \ })
+ if s:gdbbuf == 0
+ echoerr 'Failed to open the gdb terminal window'
+ exe 'bwipe! ' . s:ptybuf
+***************
+*** 200,217 ****
+ let response = ''
+ for lnum in range(1,200)
+ if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi '
+! " response can be in the same line or the next line
+! let response = term_getline(s:gdbbuf, lnum) . term_getline(s:gdbbuf, lnum + 1)
+! if response =~ 'Undefined command'
+! echoerr 'Sorry, your gdb is too old, gdb 7.12 is required'
+! exe 'bwipe! ' . s:ptybuf
+! exe 'bwipe! ' . s:commbuf
+! return
+! endif
+! if response =~ 'New UI allocated'
+! " Success!
+! break
+! endif
+ endif
+ endfor
+ if response =~ 'New UI allocated'
+--- 207,224 ----
+ let response = ''
+ for lnum in range(1,200)
+ if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi '
+! " response can be in the same line or the next line
+! let response = term_getline(s:gdbbuf, lnum) . term_getline(s:gdbbuf, lnum + 1)
+! if response =~ 'Undefined command'
+! echoerr 'Sorry, your gdb is too old, gdb 7.12 is required'
+! exe 'bwipe! ' . s:ptybuf
+! exe 'bwipe! ' . s:commbuf
+! return
+! endif
+! if response =~ 'New UI allocated'
+! " Success!
+! break
+! endif
+ endif
+ endfor
+ if response =~ 'New UI allocated'
+***************
+*** 268,276 ****
+ call ch_log('executing "' . join(cmd) . '"')
+
+ let s:gdbjob = job_start(cmd, {
+! \ 'exit_cb': function('s:EndPromptDebug'),
+! \ 'out_cb': function('s:GdbOutCallback'),
+! \ })
+ if job_status(s:gdbjob) != "run"
+ echoerr 'Failed to start gdb'
+ exe 'bwipe! ' . s:promptbuf
+--- 275,283 ----
+ call ch_log('executing "' . join(cmd) . '"')
+
+ let s:gdbjob = job_start(cmd, {
+! \ 'exit_cb': function('s:EndPromptDebug'),
+! \ 'out_cb': function('s:GdbOutCallback'),
+! \ })
+ if job_status(s:gdbjob) != "run"
+ echoerr 'Failed to start gdb'
+ exe 'bwipe! ' . s:promptbuf
+***************
+*** 295,302 ****
+ " Unix: Run the debugged program in a terminal window. Open it below the
+ " gdb window.
+ belowright let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+ call job_stop(s:gdbjob)
+--- 302,309 ----
+ " Unix: Run the debugged program in a terminal window. Open it below the
+ " gdb window.
+ belowright let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+ call job_stop(s:gdbjob)
+***************
+*** 353,359 ****
+ endif
+ endif
+
+! " Contains breakpoints that have been placed, key is the number.
+ let s:breakpoints = {}
+
+ augroup TermDebug
+--- 360,367 ----
+ endif
+ endif
+
+! " Contains breakpoints that have been placed, key is a string with the GDB
+! " breakpoint number.
+ let s:breakpoints = {}
+
+ augroup TermDebug
+***************
+*** 466,474 ****
+ if a:quotedText[i] == '\'
+ let i += 1
+ if a:quotedText[i] == 'n'
+! " drop \n
+! let i += 1
+! continue
+ endif
+ endif
+ let result .= a:quotedText[i]
+--- 474,482 ----
+ if a:quotedText[i] == '\'
+ let i += 1
+ if a:quotedText[i] == 'n'
+! " drop \n
+! let i += 1
+! continue
+ endif
+ endif
+ let result .= a:quotedText[i]
+***************
+*** 479,484 ****
+--- 487,495 ----
+
+ " Extract the "name" value from a gdb message with fullname="name".
+ func s:GetFullname(msg)
++ if a:msg !~ 'fullname'
++ return ''
++ endif
+ let name = s:DecodeMessage(substitute(a:msg, '.*fullname=', '', ''))
+ if has('win32') && name =~ ':\\\\'
+ " sometimes the name arrives double-escaped
+***************
+*** 549,565 ****
+ endif
+ if msg != ''
+ if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)'
+! call s:HandleCursor(msg)
+ elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,'
+! call s:HandleNewBreakpoint(msg)
+ elseif msg =~ '^=breakpoint-deleted,'
+! call s:HandleBreakpointDelete(msg)
+ elseif msg =~ '^=thread-group-started'
+! call s:HandleProgramRun(msg)
+ elseif msg =~ '^\^done,value='
+! call s:HandleEvaluate(msg)
+ elseif msg =~ '^\^error,msg='
+! call s:HandleError(msg)
+ endif
+ endif
+ endfor
+--- 560,576 ----
+ endif
+ if msg != ''
+ if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)'
+! call s:HandleCursor(msg)
+ elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,'
+! call s:HandleNewBreakpoint(msg)
+ elseif msg =~ '^=breakpoint-deleted,'
+! call s:HandleBreakpointDelete(msg)
+ elseif msg =~ '^=thread-group-started'
+! call s:HandleProgramRun(msg)
+ elseif msg =~ '^\^done,value='
+! call s:HandleEvaluate(msg)
+ elseif msg =~ '^\^error,msg='
+! call s:HandleError(msg)
+ endif
+ endif
+ endfor
+***************
+*** 650,661 ****
+ let curwinid = win_getid(winnr())
+ for winid in s:winbar_winids
+ if win_gotoid(winid)
+! aunmenu WinBar.Step
+! aunmenu WinBar.Next
+! aunmenu WinBar.Finish
+! aunmenu WinBar.Cont
+! aunmenu WinBar.Stop
+! aunmenu WinBar.Eval
+ endif
+ endfor
+ call win_gotoid(curwinid)
+--- 661,672 ----
+ let curwinid = win_getid(winnr())
+ for winid in s:winbar_winids
+ if win_gotoid(winid)
+! aunmenu WinBar.Step
+! aunmenu WinBar.Next
+! aunmenu WinBar.Finish
+! aunmenu WinBar.Cont
+! aunmenu WinBar.Stop
+! aunmenu WinBar.Eval
+ endif
+ endfor
+ call win_gotoid(curwinid)
+***************
+*** 673,679 ****
+
+ exe 'sign unplace ' . s:pc_id
+ for key in keys(s:breakpoints)
+! exe 'sign unplace ' . (s:break_id + key)
+ endfor
+ unlet s:breakpoints
+
+--- 684,690 ----
+
+ exe 'sign unplace ' . s:pc_id
+ for key in keys(s:breakpoints)
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(key))
+ endfor
+ unlet s:breakpoints
+
+***************
+*** 700,706 ****
+ endif
+ " Use the fname:lnum format, older gdb can't handle --source.
+ call s:SendCommand('-break-insert '
+! \ . fnameescape(expand('%:p')) . ':' . line('.'))
+ if do_continue
+ call s:SendCommand('-exec-continue')
+ endif
+--- 711,717 ----
+ endif
+ " Use the fname:lnum format, older gdb can't handle --source.
+ call s:SendCommand('-break-insert '
+! \ . fnameescape(expand('%:p')) . ':' . line('.'))
+ if do_continue
+ call s:SendCommand('-exec-continue')
+ endif
+***************
+*** 714,720 ****
+ if val['fname'] == fname && val['lnum'] == lnum
+ call s:SendCommand('-break-delete ' . key)
+ " Assume this always wors, the reply is simply "^done".
+! exe 'sign unplace ' . (s:break_id + key)
+ unlet s:breakpoints[key]
+ break
+ endif
+--- 725,731 ----
+ if val['fname'] == fname && val['lnum'] == lnum
+ call s:SendCommand('-break-delete ' . key)
+ " Assume this always wors, the reply is simply "^done".
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(key))
+ unlet s:breakpoints[key]
+ break
+ endif
+***************
+*** 839,852 ****
+ if lnum =~ '^[0-9]*$'
+ call s:GotoSourcewinOrCreateIt()
+ if expand('%:p') != fnamemodify(fname, ':p')
+! if &modified
+! " TODO: find existing window
+! exe 'split ' . fnameescape(fname)
+! let s:sourcewin = win_getid(winnr())
+! call s:InstallWinbar()
+! else
+! exe 'edit ' . fnameescape(fname)
+! endif
+ endif
+ exe lnum
+ exe 'sign unplace ' . s:pc_id
+--- 850,863 ----
+ if lnum =~ '^[0-9]*$'
+ call s:GotoSourcewinOrCreateIt()
+ if expand('%:p') != fnamemodify(fname, ':p')
+! if &modified
+! " TODO: find existing window
+! exe 'split ' . fnameescape(fname)
+! let s:sourcewin = win_getid(winnr())
+! call s:InstallWinbar()
+! else
+! exe 'edit ' . fnameescape(fname)
+! endif
+ endif
+ exe lnum
+ exe 'sign unplace ' . s:pc_id
+***************
+*** 865,874 ****
+ func s:CreateBreakpoint(nr)
+ if index(s:BreakpointSigns, a:nr) == -1
+ call add(s:BreakpointSigns, a:nr)
+! exe "sign define debugBreakpoint" . a:nr . " text=" . a:nr . " texthl=debugBreakpoint"
+ endif
+ endfunc
+
+ " Handle setting a breakpoint
+ " Will update the sign that shows the breakpoint
+ func s:HandleNewBreakpoint(msg)
+--- 876,889 ----
+ func s:CreateBreakpoint(nr)
+ if index(s:BreakpointSigns, a:nr) == -1
+ call add(s:BreakpointSigns, a:nr)
+! exe "sign define debugBreakpoint" . a:nr . " text=" . substitute(a:nr, '\..*', '', '') . " texthl=debugBreakpoint"
+ endif
+ endfunc
+
++ func s:SplitMsg(s)
++ return split(a:s, '{\%([a-z-]\+=[^,]\+,*\)\+}\zs')
++ endfunction
++
+ " Handle setting a breakpoint
+ " Will update the sign that shows the breakpoint
+ func s:HandleNewBreakpoint(msg)
+***************
+*** 876,925 ****
+ " a watch does not have a file name
+ return
+ endif
+
+! let nr = substitute(a:msg, '.*number="\([0-9]\)*\".*', '\1', '') + 0
+! if nr == 0
+! return
+! endif
+! call s:CreateBreakpoint(nr)
+!
+! if has_key(s:breakpoints, nr)
+! let entry = s:breakpoints[nr]
+! else
+! let entry = {}
+! let s:breakpoints[nr] = entry
+! endif
+
+! let fname = s:GetFullname(a:msg)
+! let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
+! let entry['fname'] = fname
+! let entry['lnum'] = lnum
+
+! if bufloaded(fname)
+! call s:PlaceSign(nr, entry)
+! endif
+ endfunc
+
+ func s:PlaceSign(nr, entry)
+! exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . a:nr . ' file=' . a:entry['fname']
+ let a:entry['placed'] = 1
+ endfunc
+
+ " Handle deleting a breakpoint
+ " Will remove the sign that shows the breakpoint
+ func s:HandleBreakpointDelete(msg)
+! let nr = substitute(a:msg, '.*id="\([0-9]*\)\".*', '\1', '') + 0
+! if nr == 0
+ return
+ endif
+! if has_key(s:breakpoints, nr)
+ let entry = s:breakpoints[nr]
+ if has_key(entry, 'placed')
+! exe 'sign unplace ' . (s:break_id + nr)
+ unlet entry['placed']
+ endif
+ unlet s:breakpoints[nr]
+! endif
+ endfunc
+
+ " Handle the debugged program starting to run.
+--- 891,947 ----
+ " a watch does not have a file name
+ return
+ endif
++ for msg in s:SplitMsg(a:msg)
++ let fname = s:GetFullname(msg)
++ if empty(fname)
++ continue
++ endif
++ let nr = substitute(msg, '.*number="\([0-9.]*\)\".*', '\1', '')
++ if empty(nr)
++ return
++ endif
++ call s:CreateBreakpoint(nr)
+
+! if has_key(s:breakpoints, nr)
+! let entry = s:breakpoints[nr]
+! else
+! let entry = {}
+! let s:breakpoints[nr] = entry
+! endif
+
+! let lnum = substitute(msg, '.*line="\([^"]*\)".*', '\1', '')
+! let entry['fname'] = fname
+! let entry['lnum'] = lnum
+
+! if bufloaded(fname)
+! call s:PlaceSign(nr, entry)
+! endif
+! endfor
+ endfunc
+
+ func s:PlaceSign(nr, entry)
+! exe 'sign place ' . (s:break_id + s:Breakpoint2SignNumber(a:nr)) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . a:nr . ' file=' . a:entry['fname']
+ let a:entry['placed'] = 1
+ endfunc
+
+ " Handle deleting a breakpoint
+ " Will remove the sign that shows the breakpoint
+ func s:HandleBreakpointDelete(msg)
+! let key = substitute(a:msg, '.*id="\([0-9.]*\)\".*', '\1', '')
+! if empty(key)
+ return
+ endif
+! for [nr, entry] in items(s:breakpoints)
+! if stridx(nr, key) != 0
+! continue
+! endif
+ let entry = s:breakpoints[nr]
+ if has_key(entry, 'placed')
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(nr))
+ unlet entry['placed']
+ endif
+ unlet s:breakpoints[nr]
+! endfor
+ endfunc
+
+ " Handle the debugged program starting to run.
+*** ../vim-8.1.0556/src/version.c 2018-12-01 21:08:18.019648483 +0100
+--- src/version.c 2018-12-02 13:43:56.101322941 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 557,
+ /**/
+
+--
+FATAL ERROR! SYSTEM HALTED! - Press any key to continue doing nothing.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0558 b/data/vim/patches/8.1.0558
new file mode 100644
index 000000000..8c1e25889
--- /dev/null
+++ b/data/vim/patches/8.1.0558
@@ -0,0 +1,161 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0558
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0558
+Problem: Some MS-Windows instructions are outdated.
+Solution: Update the uninstall instructions and the NSIS README. (Ken
+ Takata, closes #3614) Also update remark about diff.exe.
+Files: nsis/README.txt, uninstal.txt
+
+
+*** ../vim-8.1.0557/nsis/README.txt 2017-10-14 18:47:04.000000000 +0200
+--- nsis/README.txt 2018-12-02 13:55:06.381485588 +0100
+***************
+*** 15,20 ****
+--- 15,21 ----
+ vimrun.exe,
+ install.exe,
+ uninstal.exe,
++ tee/tee.exe,
+ xxd/xxd.exe,
+
+ Then execute tools/rename.bat to rename the executables. (mv command is
+***************
+*** 29,42 ****
+ 4. Go to the VisVim directory and build VisVim.dll (or get it from a binary
+ archive).
+
+! 5. Go to the OleVim directory and build OpenWithVim.exe and SendToVim.exe (or
+! get them from a binary archive).
+!
+! 6. Get a "diff.exe" program and put it in the "../.." directory (above the
+! "vim80" directory, it's the same for all Vim versions).
+ You can find one in previous Vim versions or in this archive:
+ http://www.mossbayeng.com/~ron/vim/diffutils.tar.gz
+! Also put winpty32.dll and winpty-agent.exe there.
+
+ 7. Do "make uganda.nsis.txt" in runtime/doc. This requires sed, you may have
+ to do this on Unix. Make sure the file is in DOS file format!
+--- 30,44 ----
+ 4. Go to the VisVim directory and build VisVim.dll (or get it from a binary
+ archive).
+
+! 5. Get a "diff.exe" program. If you skip this the built-in diff will always
+! be used (which is fine for most users). If you do have your own
+! "diff.exe" put it in the "../.." directory (above the "vim81" directory,
+! it's the same for all Vim versions).
+ You can find one in previous Vim versions or in this archive:
+ http://www.mossbayeng.com/~ron/vim/diffutils.tar.gz
+!
+! 6 Also put winpty32.dll and winpty-agent.exe in "../.." (above the "vim81"
+! directory). This is required for the terminal window.
+
+ 7. Do "make uganda.nsis.txt" in runtime/doc. This requires sed, you may have
+ to do this on Unix. Make sure the file is in DOS file format!
+*** ../vim-8.1.0557/uninstal.txt 2017-07-19 11:09:11.000000000 +0200
+--- uninstal.txt 2018-12-02 13:50:16.799174823 +0100
+***************
+*** 1,4 ****
+! Uninstalling Vim on Dos and MS-Windows.
+
+ There are three ways to remove Vim:
+
+--- 1,4 ----
+! Uninstalling Vim on MS-Windows.
+
+ There are three ways to remove Vim:
+
+***************
+*** 27,38 ****
+
+ Here are guidelines for removing Vim by hand:
+
+! 1. Remove the "Edit with Vim" popup menu entry, if it exists. This will only
+! be on MS-Windows 95/98/NT. This is done by running the uninstal.exe
+! program. It removes the registry entries for the "Edit with Vim" popup
+! menu entry. You only need to run uninstal.exe when you have installed the
+! menu entry. You can also run uninstal.exe from the Control panel with the
+! Add/Remove programs application.
+ Note that uninstal.exe offers you the option to uninstal other items. You
+ can skip this.
+
+--- 27,37 ----
+
+ Here are guidelines for removing Vim by hand:
+
+! 1. Remove the "Edit with Vim" popup menu entry, if it exists. This is done by
+! running the uninstal.exe program. It removes the registry entries for the
+! "Edit with Vim" popup menu entry. You only need to run uninstal.exe when
+! you have installed the menu entry. You can also run uninstal.exe from the
+! Control panel with the Add/Remove programs application.
+ Note that uninstal.exe offers you the option to uninstal other items. You
+ can skip this.
+
+***************
+*** 55,62 ****
+ skip the next step.
+
+ 5. Delete the distributed files. If you followed the directions, these will
+! be located in a directory like "C:\vim\vim80". If the $VIM environment
+! variable is set, the directory will be $VIM\vim80. Delete the "vim80"
+ directory and all that is in it. Warning: If you changed any of the
+ distributed files, or added some of your own files, you might want to save
+ these first. But normally you would not have changed or added files here.
+--- 54,61 ----
+ skip the next step.
+
+ 5. Delete the distributed files. If you followed the directions, these will
+! be located in a directory like "C:\vim\vim81". If the $VIM environment
+! variable is set, the directory will be $VIM\vim81. Delete the "vim81"
+ directory and all that is in it. Warning: If you changed any of the
+ distributed files, or added some of your own files, you might want to save
+ these first. But normally you would not have changed or added files here.
+***************
+*** 66,75 ****
+ another version of Vim. $VIMRUNTIME is mostly not set. Check if $PATH
+ contains the path of the vim directory. Note that $PATH may be set in
+ several places, you will have to find the right one, and only delete the
+! Vim path from it. You can most likely find the lines that set $PATH, $VIM
+! and/or $VIMRUNTIME in C:\autoexec.bat. Under Windows NT you might need to
+! use the "System Properties" editor to change the environment variables, if
+! they are not in the C:\autoexec.bat file. You can start it by selecting
+ Start/Settings/Control Panel and then "System".
+
+ 7. If you added a Vim entry in the start menu, delete it.
+--- 65,72 ----
+ another version of Vim. $VIMRUNTIME is mostly not set. Check if $PATH
+ contains the path of the vim directory. Note that $PATH may be set in
+ several places, you will have to find the right one, and only delete the
+! Vim path from it. You might need to use the "System Properties" editor to
+! change the environment variables. You can start it by selecting
+ Start/Settings/Control Panel and then "System".
+
+ 7. If you added a Vim entry in the start menu, delete it.
+*** ../vim-8.1.0557/src/version.c 2018-12-02 13:45:47.088708659 +0100
+--- src/version.c 2018-12-02 13:56:41.548924260 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 558,
+ /**/
+
+--
+(letter from Mark to Mike, about the film's probable certificate)
+ I would like to get back to the Censor and agree to lose the shits, take
+ the odd Jesus Christ out and lose Oh fuck off, but to retain 'fart in
+ your general direction', 'castanets of your testicles' and 'oral sex'
+ and ask him for an 'A' rating on that basis.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0559 b/data/vim/patches/8.1.0559
new file mode 100644
index 000000000..52d724e18
--- /dev/null
+++ b/data/vim/patches/8.1.0559
@@ -0,0 +1,115 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0559
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0559
+Problem: Command line completion not sufficiently tested.
+Solution: Add more tests. (Dominique Pelle, closes #3622)
+Files: src/testdir/test_arglist.vim, src/testdir/test_filetype.vim,
+ src/testdir/test_history.vim, src/testdir/test_messages.vim,
+ src/testdir/test_syntax.vim
+
+
+*** ../vim-8.1.0558/src/testdir/test_arglist.vim 2018-10-25 12:30:52.270659874 +0200
+--- src/testdir/test_arglist.vim 2018-12-02 14:33:10.364716504 +0100
+***************
+*** 396,401 ****
+--- 396,413 ----
+ %argd
+ endfunc
+
++ func Test_argdelete_completion()
++ args foo bar
++
++ call feedkeys(":argdelete \<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"argdelete bar foo', @:)
++
++ call feedkeys(":argdelete x \<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"argdelete x bar foo', @:)
++
++ %argd
++ endfunc
++
+ " Tests for the :next, :prev, :first, :last, :rewind commands
+ func Test_argpos()
+ call Reset_arglist()
+*** ../vim-8.1.0558/src/testdir/test_filetype.vim 2018-11-03 19:52:11.333956689 +0100
+--- src/testdir/test_filetype.vim 2018-12-02 14:33:10.364716504 +0100
+***************
+*** 597,599 ****
+--- 597,603 ----
+ filetype off
+ endfunc
+
++ func Test_setfiletype_completion()
++ call feedkeys(":setfiletype java\<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"setfiletype java javacc javascript', @:)
++ endfunc
+*** ../vim-8.1.0558/src/testdir/test_history.vim 2017-01-11 22:38:15.000000000 +0100
+--- src/testdir/test_history.vim 2018-12-02 14:33:10.364716504 +0100
+***************
+*** 104,106 ****
+--- 104,111 ----
+ call assert_equal('a', @/)
+ bwipe!
+ endfunc
++
++ function Test_history_completion()
++ call feedkeys(":history \<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"history / : = > ? @ all cmd debug expr input search', @:)
++ endfunc
+*** ../vim-8.1.0558/src/testdir/test_messages.vim 2018-06-27 20:49:40.567862384 +0200
+--- src/testdir/test_messages.vim 2018-12-02 14:33:10.364716504 +0100
+***************
+*** 59,61 ****
+--- 59,66 ----
+
+ set cmdheight&
+ endfunction
++
++ func Test_message_completion()
++ call feedkeys(":message \<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"message clear', @:)
++ endfunc
+*** ../vim-8.1.0558/src/testdir/test_syntax.vim 2018-06-23 14:21:38.467484932 +0200
+--- src/testdir/test_syntax.vim 2018-12-02 14:33:10.364716504 +0100
+***************
+*** 119,124 ****
+--- 119,133 ----
+ bd
+ endfunc
+
++ func Test_syntime_completion()
++ if !has('profile')
++ return
++ endif
++
++ call feedkeys(":syntime \<C-A>\<C-B>\"\<CR>", 'tx')
++ call assert_equal('"syntime clear off on report', @:)
++ endfunc
++
+ func Test_syntax_list()
+ syntax on
+ let a = execute('syntax list')
+*** ../vim-8.1.0558/src/version.c 2018-12-02 13:57:54.844490410 +0100
+--- src/version.c 2018-12-02 14:34:28.156268675 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 559,
+ /**/
+
+--
+A fool must search for a greater fool to find admiration.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0560 b/data/vim/patches/8.1.0560
new file mode 100644
index 000000000..8400253d7
--- /dev/null
+++ b/data/vim/patches/8.1.0560
@@ -0,0 +1,142 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0560
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0560
+Problem: Cannot use address type "other" with with user command.
+Solution: Add "other" to the list. (Daniel Hahler, closes #3655) Also
+ reject "%" for commands with "other". Add some more tests.
+Files: src/ex_docmd.c, src/testdir/test_usercommands.vim
+
+
+*** ../vim-8.1.0559/src/ex_docmd.c 2018-10-19 22:35:04.885189994 +0200
+--- src/ex_docmd.c 2018-12-02 17:58:11.339485922 +0100
+***************
+*** 2998,3003 ****
+--- 2998,3004 ----
+ }
+ break;
+ case ADDR_TABS_RELATIVE:
++ case ADDR_OTHER:
+ *errormsg = (char_u *)_(e_invrange);
+ return FAIL;
+ case ADDR_ARGUMENTS:
+***************
+*** 5940,5945 ****
+--- 5941,5947 ----
+ {ADDR_BUFFERS, "buffers"},
+ {ADDR_WINDOWS, "windows"},
+ {ADDR_QUICKFIX, "quickfix"},
++ {ADDR_OTHER, "other"},
+ {-1, NULL}
+ };
+ #endif
+*** ../vim-8.1.0559/src/testdir/test_usercommands.vim 2017-12-25 13:39:26.000000000 +0100
+--- src/testdir/test_usercommands.vim 2018-12-02 18:17:46.460790379 +0100
+***************
+*** 154,160 ****
+ call assert_equal('"com -nargs=* + 0 1 ?', @:)
+
+ call feedkeys(":com -addr=\<C-A>\<C-B>\"\<CR>", 'tx')
+! call assert_equal('"com -addr=arguments buffers lines loaded_buffers quickfix tabs windows', @:)
+
+ call feedkeys(":com -complete=co\<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"com -complete=color command compiler', @:)
+--- 154,160 ----
+ call assert_equal('"com -nargs=* + 0 1 ?', @:)
+
+ call feedkeys(":com -addr=\<C-A>\<C-B>\"\<CR>", 'tx')
+! call assert_equal('"com -addr=arguments buffers lines loaded_buffers other quickfix tabs windows', @:)
+
+ call feedkeys(":com -complete=co\<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"com -complete=color command compiler', @:)
+***************
+*** 218,220 ****
+--- 218,278 ----
+ call assert_equal('"DoExec hi', @:)
+ delcommand DoExec
+ endfunc
++
++ func Test_addr_all()
++ command! -addr=lines DoSomething let g:a1 = <line1> | let g:a2 = <line2>
++ %DoSomething
++ call assert_equal(1, g:a1)
++ call assert_equal(line('$'), g:a2)
++
++ command! -addr=arguments DoSomething let g:a1 = <line1> | let g:a2 = <line2>
++ args one two three
++ %DoSomething
++ call assert_equal(1, g:a1)
++ call assert_equal(3, g:a2)
++
++ command! -addr=buffers DoSomething let g:a1 = <line1> | let g:a2 = <line2>
++ %DoSomething
++ for low in range(1, bufnr('$'))
++ if buflisted(low)
++ break
++ endif
++ endfor
++ call assert_equal(low, g:a1)
++ call assert_equal(bufnr('$'), g:a2)
++
++ command! -addr=loaded_buffers DoSomething let g:a1 = <line1> | let g:a2 = <line2>
++ %DoSomething
++ for low in range(1, bufnr('$'))
++ if bufloaded(low)
++ break
++ endif
++ endfor
++ call assert_equal(low, g:a1)
++ for up in range(bufnr('$'), 1, -1)
++ if bufloaded(up)
++ break
++ endif
++ endfor
++ call assert_equal(up, g:a2)
++
++ command! -addr=windows DoSomething let g:a1 = <line1> | let g:a2 = <line2>
++ new
++ %DoSomething
++ call assert_equal(1, g:a1)
++ call assert_equal(winnr('$'), g:a2)
++ bwipe
++
++ command! -addr=tabs DoSomething let g:a1 = <line1> | let g:a2 = <line2>
++ tabnew
++ %DoSomething
++ call assert_equal(1, g:a1)
++ call assert_equal(len(gettabinfo()), g:a2)
++ bwipe
++
++ command! -addr=other DoSomething echo 'nothing'
++ DoSomething
++ call assert_fails('%DoSomething')
++
++ delcommand DoSomething
++ endfunc
+*** ../vim-8.1.0559/src/version.c 2018-12-02 14:55:04.904731741 +0100
+--- src/version.c 2018-12-02 18:05:03.897134687 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 560,
+ /**/
+
+--
+The Characters and incidents portrayed and the names used are fictitious and
+any similarity to the names, characters, or history of any person is entirely
+accidental and unintentional.
+ Signed RICHARD M. NIXON
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0561 b/data/vim/patches/8.1.0561
new file mode 100644
index 000000000..16986c888
--- /dev/null
+++ b/data/vim/patches/8.1.0561
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0561
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0561
+Problem: MSCV error format has changed.
+Solution: Make the space between the line number and colon optional.
+Files: src/option.h
+
+
+*** ../vim-8.1.0560/src/option.h 2018-06-23 19:22:45.614486258 +0200
+--- src/option.h 2018-12-03 20:41:34.902380574 +0100
+***************
+*** 19,25 ****
+ # define DFLT_EFM "%f>%l:%c:%t:%n:%m,%f:%l: %t%*\\D%n: %m,%f %l %t%*\\D%n: %m,%*[^\"]\"%f\"%*\\D%l: %m,%f:%l:%m,%f|%l| %m"
+ #else
+ # if defined(WIN3264)
+! # define DFLT_EFM "%f(%l) : %t%*\\D%n: %m,%*[^\"]\"%f\"%*\\D%l: %m,%f(%l) : %m,%*[^ ] %f %l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,%f|%l| %m"
+ # else
+ # if defined(__QNX__)
+ # define DFLT_EFM "%f(%l):%*[^WE]%t%*\\D%n:%m,%f|%l| %m"
+--- 19,25 ----
+ # define DFLT_EFM "%f>%l:%c:%t:%n:%m,%f:%l: %t%*\\D%n: %m,%f %l %t%*\\D%n: %m,%*[^\"]\"%f\"%*\\D%l: %m,%f:%l:%m,%f|%l| %m"
+ #else
+ # if defined(WIN3264)
+! # define DFLT_EFM "%f(%l) \\=: %t%*\\D%n: %m,%*[^\"]\"%f\"%*\\D%l: %m,%f(%l) \\=: %m,%*[^ ] %f %l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,%f|%l| %m"
+ # else
+ # if defined(__QNX__)
+ # define DFLT_EFM "%f(%l):%*[^WE]%t%*\\D%n:%m,%f|%l| %m"
+*** ../vim-8.1.0560/src/version.c 2018-12-02 18:21:46.035419603 +0100
+--- src/version.c 2018-12-03 20:42:32.598028458 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 561,
+ /**/
+
+--
+System administrators are just like women: You can't live with them and you
+can't live without them.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0562 b/data/vim/patches/8.1.0562
new file mode 100644
index 000000000..af58aac68
--- /dev/null
+++ b/data/vim/patches/8.1.0562
@@ -0,0 +1,172 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0562
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0562
+Problem: Parsing of 'diffopt' is slightly wrong.
+Solution: Fix the parsing and add a test. (Jason Franklin, Christian
+ Brabandt)
+Files: src/diff.c, src/testdir/test_diffmode.vim,
+ src/testdir/dumps/Test_diff_09.dump,
+ src/testdir/dumps/Test_diff_11.dump, src/testdir/screendump.vim
+
+
+*** ../vim-8.1.0561/src/diff.c 2018-11-05 21:21:29.800286334 +0100
+--- src/diff.c 2018-12-04 22:21:18.163764693 +0100
+***************
+*** 2173,2178 ****
+--- 2173,2179 ----
+ int diff_flags_new = 0;
+ int diff_foldcolumn_new = 2;
+ long diff_algorithm_new = 0;
++ long diff_indent_heuristic = 0;
+ tabpage_T *tp;
+
+ p = p_dip;
+***************
+*** 2236,2242 ****
+ else if (STRNCMP(p, "indent-heuristic", 16) == 0)
+ {
+ p += 16;
+! diff_algorithm_new |= XDF_INDENT_HEURISTIC;
+ }
+ else if (STRNCMP(p, "internal", 8) == 0)
+ {
+--- 2237,2243 ----
+ else if (STRNCMP(p, "indent-heuristic", 16) == 0)
+ {
+ p += 16;
+! diff_indent_heuristic = XDF_INDENT_HEURISTIC;
+ }
+ else if (STRNCMP(p, "internal", 8) == 0)
+ {
+***************
+*** 2276,2281 ****
+--- 2277,2284 ----
+ ++p;
+ }
+
++ diff_algorithm_new |= diff_indent_heuristic;
++
+ /* Can't have both "horizontal" and "vertical". */
+ if ((diff_flags_new & DIFF_HORIZONTAL) && (diff_flags_new & DIFF_VERTICAL))
+ return FAIL;
+*** ../vim-8.1.0561/src/testdir/test_diffmode.vim 2018-11-01 21:14:50.541818034 +0100
+--- src/testdir/test_diffmode.vim 2018-12-04 22:21:18.163764693 +0100
+***************
+*** 813,820 ****
+ call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
+ call VerifyScreenDump(buf, 'Test_diff_10', {})
+
+! call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>")
+! call VerifyScreenDump(buf, 'Test_diff_11', {})
+
+ " Test 12: diff the same file
+ call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+--- 813,828 ----
+ call term_sendkeys(buf, ":set diffopt+=internal\<cr>")
+ call VerifyScreenDump(buf, 'Test_diff_10', {})
+
+! " Leave trailing : at commandline!
+! call term_sendkeys(buf, ":set diffopt+=indent-heuristic\<cr>:\<cr>")
+! call VerifyScreenDump(buf, 'Test_diff_11', {}, 'one')
+! " shouldn't matter, if indent-algorithm comes before or after the algorithm
+! call term_sendkeys(buf, ":set diffopt&\<cr>")
+! call term_sendkeys(buf, ":set diffopt+=indent-heuristic,algorithm:patience\<cr>:\<cr>")
+! call VerifyScreenDump(buf, 'Test_diff_11', {}, 'two')
+! call term_sendkeys(buf, ":set diffopt&\<cr>")
+! call term_sendkeys(buf, ":set diffopt+=algorithm:patience,indent-heuristic\<cr>:\<cr>")
+! call VerifyScreenDump(buf, 'Test_diff_11', {}, 'three')
+
+ " Test 12: diff the same file
+ call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
+*** ../vim-8.1.0561/src/testdir/dumps/Test_diff_09.dump 2018-09-10 17:50:32.713306941 +0200
+--- src/testdir/dumps/Test_diff_09.dump 2018-12-04 22:21:18.163764693 +0100
+***************
+*** 17,20 ****
+ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29
+ | +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@7|p|r|i|n|t|f|(|"|Y|o|u|r| |a|n|s|w|e|r| |i|s|:| |"|)|;||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
+ |X+3#0000000#ffffff0|f|i|l|e|1| @12|1|,|1| @11|T|o|p| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|T|o|p
+! |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|a|l|g|o|r|i|t|h|m|:|p|a|t|i|e|n|c|e| @42
+--- 17,20 ----
+ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29||+1&&| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|{| @29
+ | +0#0000e05#a8a8a8255@1| +0#0000000#5fd7ff255@7|p|r|i|n|t|f|(|"|Y|o|u|r| |a|n|s|w|e|r| |i|s|:| |"|)|;||+1&#ffffff0| +0#0000e05#a8a8a8255@1|-+0#4040ff13#afffff255@34
+ |X+3#0000000#ffffff0|f|i|l|e|1| @12|1|,|1| @11|T|o|p| |X+1&&|f|i|l|e|2| @12|1|,|1| @11|T|o|p
+! |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|a|l|g|o|r|i|t|h|m|:|h|i|s|t|o|g|r|a|m| @41
+*** ../vim-8.1.0561/src/testdir/dumps/Test_diff_11.dump 2018-09-10 17:50:32.713306941 +0200
+--- src/testdir/dumps/Test_diff_11.dump 2018-12-04 22:21:18.163764693 +0100
+***************
+*** 17,20 ****
+ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+ |X+3#0000000&|f|i|l|e|1| @12|1|,|0|-|1| @9|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|0|-|1| @9|A|l@1
+! |:+0&&|s|e|t| |d|i|f@1|o|p|t|+|=|i|n|d|e|n|t|-|h|e|u|r|i|s|t|i|c| @44
+--- 17,20 ----
+ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+ | +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33||+1#0000000&| +0#0000e05#a8a8a8255@1|~+0#4040ff13#ffffff0| @33
+ |X+3#0000000&|f|i|l|e|1| @12|1|,|0|-|1| @9|A|l@1| |X+1&&|f|i|l|e|2| @12|1|,|0|-|1| @9|A|l@1
+! |:+0&&| @73
+*** ../vim-8.1.0561/src/testdir/screendump.vim 2018-09-09 22:02:21.165859748 +0200
+--- src/testdir/screendump.vim 2018-12-04 22:21:18.163764693 +0100
+***************
+*** 103,108 ****
+--- 103,110 ----
+
+ let i = 0
+ while 1
++ " leave some time for updating the original window
++ sleep 10m
+ call delete(testfile)
+ call term_dumpwrite(a:buf, testfile, a:options)
+ if readfile(reference) == readfile(testfile)
+***************
+*** 113,124 ****
+ " Leave the test file around for inspection.
+ let msg = 'See dump file difference: call term_dumpdiff("' . testfile . '", "' . reference . '")'
+ if a:0 == 1
+! let msg = a:1 . ': ' . msg
+ endif
+ call assert_report(msg)
+ return 1
+ endif
+- sleep 10m
+ let i += 1
+ endwhile
+ return 0
+--- 115,125 ----
+ " Leave the test file around for inspection.
+ let msg = 'See dump file difference: call term_dumpdiff("' . testfile . '", "' . reference . '")'
+ if a:0 == 1
+! let msg = a:1 . ': ' . msg
+ endif
+ call assert_report(msg)
+ return 1
+ endif
+ let i += 1
+ endwhile
+ return 0
+*** ../vim-8.1.0561/src/version.c 2018-12-03 20:49:58.767291066 +0100
+--- src/version.c 2018-12-04 22:24:03.973785303 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 562,
+ /**/
+
+--
+SOLDIER: What? Ridden on a horse?
+ARTHUR: Yes!
+SOLDIER: You're using coconuts!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0563 b/data/vim/patches/8.1.0563
new file mode 100644
index 000000000..3d312a2cd
--- /dev/null
+++ b/data/vim/patches/8.1.0563
@@ -0,0 +1,56 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0563
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0563
+Problem: Setting v:errors to a string give confusing error. (Christian
+ Brabandt)
+Solution: Change internal error into normal error message.
+Files: src/eval.c
+
+
+*** ../vim-8.1.0562/src/eval.c 2018-11-28 21:20:34.096221686 +0100
+--- src/eval.c 2018-12-04 22:33:08.228556609 +0100
+***************
+*** 7568,7574 ****
+ return;
+ }
+ else if (v->di_tv.v_type != tv->v_type)
+! internal_error("set_var()");
+ }
+
+ clear_tv(&v->di_tv);
+--- 7568,7574 ----
+ return;
+ }
+ else if (v->di_tv.v_type != tv->v_type)
+! EMSG2(_("E963: setting %s to value with wrong type"), name);
+ }
+
+ clear_tv(&v->di_tv);
+*** ../vim-8.1.0562/src/version.c 2018-12-04 22:24:12.193693584 +0100
+--- src/version.c 2018-12-04 22:34:12.912012871 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 563,
+ /**/
+
+--
+ARTHUR: The swallow may fly south with the sun, or the house martin or the
+ plover seek warmer hot lands in winter, yet these are not strangers to
+ our land.
+SOLDIER: Are you suggesting coconuts migrate?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0564 b/data/vim/patches/8.1.0564
new file mode 100644
index 000000000..3ca11ce7d
--- /dev/null
+++ b/data/vim/patches/8.1.0564
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0564
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0564
+Problem: Setting v:errors to wrong type still possible.
+Solution: Return after giving an error message. (Christian Brabandt)
+Files: src/eval.c, src/testdir/test_eval_stuff.vim
+
+
+*** ../vim-8.1.0563/src/eval.c 2018-12-04 22:37:46.122286870 +0100
+--- src/eval.c 2018-12-05 18:40:45.742666402 +0100
+***************
+*** 7568,7574 ****
+--- 7568,7577 ----
+ return;
+ }
+ else if (v->di_tv.v_type != tv->v_type)
++ {
+ EMSG2(_("E963: setting %s to value with wrong type"), name);
++ return;
++ }
+ }
+
+ clear_tv(&v->di_tv);
+*** ../vim-8.1.0563/src/testdir/test_eval_stuff.vim 2018-09-11 22:36:48.125548396 +0200
+--- src/testdir/test_eval_stuff.vim 2018-12-05 18:40:25.150818783 +0100
+***************
+*** 53,55 ****
+--- 53,65 ----
+ "\ and some more
+ call assert_equal([5, 6], array)
+ endfunc
++
++ func Test_E963()
++ " These commands used to cause an internal error prior to vim 8.1.0563
++ let v_e = v:errors
++ let v_o = v:oldfiles
++ call assert_fails("let v:errors=''", 'E963:')
++ call assert_equal(v_e, v:errors)
++ call assert_fails("let v:oldfiles=''", 'E963:')
++ call assert_equal(v_o, v:oldfiles)
++ endfunc
+*** ../vim-8.1.0563/src/version.c 2018-12-04 22:37:46.122286870 +0100
+--- src/version.c 2018-12-05 18:42:00.882110756 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 564,
+ /**/
+
+
+--
+Clothes make the man. Naked people have little or no influence on society.
+ -- Mark Twain (Samuel Clemens) (1835-1910)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0565 b/data/vim/patches/8.1.0565
new file mode 100644
index 000000000..82f27c432
--- /dev/null
+++ b/data/vim/patches/8.1.0565
@@ -0,0 +1,55 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0565
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0565
+Problem: Asan complains about reading before allocated block.
+Solution: Workaround: Avoid offset from becoming negative.
+Files: src/gui.c
+
+
+*** ../vim-8.1.0564/src/gui.c 2018-11-16 16:21:01.633310065 +0100
+--- src/gui.c 2018-12-05 19:44:07.455956642 +0100
+***************
+*** 2753,2759 ****
+ }
+ else if (enc_utf8)
+ {
+! if (ScreenLines[off + col1] == 0)
+ --col1;
+ # ifdef FEAT_GUI_GTK
+ if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
+--- 2753,2760 ----
+ }
+ else if (enc_utf8)
+ {
+! // FIXME: how can the first character ever be zero?
+! if (col1 > 0 && ScreenLines[off + col1] == 0)
+ --col1;
+ # ifdef FEAT_GUI_GTK
+ if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
+*** ../vim-8.1.0564/src/version.c 2018-12-05 18:43:24.489493117 +0100
+--- src/version.c 2018-12-05 19:45:06.855458016 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 565,
+ /**/
+
+--
+SECOND SOLDIER: It could be carried by an African swallow!
+FIRST SOLDIER: Oh yes! An African swallow maybe ... but not a European
+ swallow. that's my point.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0566 b/data/vim/patches/8.1.0566
new file mode 100644
index 000000000..c0ee83315
--- /dev/null
+++ b/data/vim/patches/8.1.0566
@@ -0,0 +1,70 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0566
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0566
+Problem: SGR not enabled for mintty because $TERM is "xterm".
+Solution: Detect mintty by the termresponse. (Ken Takata, closes #3667)
+Files: src/term.c
+
+
+*** ../vim-8.1.0565/src/term.c 2018-10-02 14:45:07.023652468 +0200
+--- src/term.c 2018-12-07 13:06:31.415916214 +0100
+***************
+*** 4698,4703 ****
+--- 4698,4709 ----
+ int need_flush = FALSE;
+ # ifdef FEAT_MOUSE_SGR
+ int is_iterm2 = FALSE;
++ int is_mintty = FALSE;
++
++ // mintty 2.9.5 sends 77;20905;0c.
++ // (77 is ASCII 'M' for mintty.)
++ if (STRNCMP(tp + extra - 3, "77;", 3) == 0)
++ is_mintty = TRUE;
+ # endif
+
+ /* if xterm version >= 141 try to get termcap codes */
+***************
+*** 4751,4758 ****
+ {
+ # ifdef FEAT_MOUSE_SGR
+ /* Xterm version 277 supports SGR. Also support
+! * Terminal.app and iTerm2. */
+! if (version >= 277 || is_iterm2 || is_mac_terminal)
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"sgr", 0);
+ else
+--- 4757,4765 ----
+ {
+ # ifdef FEAT_MOUSE_SGR
+ /* Xterm version 277 supports SGR. Also support
+! * Terminal.app, iTerm2 and mintty. */
+! if (version >= 277 || is_iterm2 || is_mac_terminal
+! || is_mintty)
+ set_option_value((char_u *)"ttym", 0L,
+ (char_u *)"sgr", 0);
+ else
+*** ../vim-8.1.0565/src/version.c 2018-12-05 19:46:03.170987995 +0100
+--- src/version.c 2018-12-07 13:12:38.017734126 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 566,
+ /**/
+
+--
+"The future's already arrived - it's just not evenly distributed yet."
+ -- William Gibson
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0567 b/data/vim/patches/8.1.0567
new file mode 100644
index 000000000..ac5b5f45b
--- /dev/null
+++ b/data/vim/patches/8.1.0567
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0567
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0567 (after 8.1.0565)
+Problem: Error for NUL byte in ScreenLines goes unnoticed.
+Solution: Add an internal error message.
+Files: src/gui.c
+
+
+*** ../vim-8.1.0566/src/gui.c 2018-12-05 19:46:03.170987995 +0100
+--- src/gui.c 2018-12-06 22:04:51.967296617 +0100
+***************
+*** 2753,2761 ****
+ }
+ else if (enc_utf8)
+ {
+! // FIXME: how can the first character ever be zero?
+! if (col1 > 0 && ScreenLines[off + col1] == 0)
+! --col1;
+ # ifdef FEAT_GUI_GTK
+ if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
+ ++col2;
+--- 2753,2767 ----
+ }
+ else if (enc_utf8)
+ {
+! if (ScreenLines[off + col1] == 0)
+! {
+! if (col1 > 0)
+! --col1;
+! else
+! // FIXME: how can the first character ever be zero?
+! IEMSGN("INTERNAL ERROR: NUL in ScreenLines in row %ld",
+! gui.row);
+! }
+ # ifdef FEAT_GUI_GTK
+ if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
+ ++col2;
+*** ../vim-8.1.0566/src/version.c 2018-12-07 13:18:16.611655653 +0100
+--- src/version.c 2018-12-07 13:26:28.728584545 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 567,
+ /**/
+
+--
+ARTHUR: Be quiet! I order you to shut up.
+OLD WOMAN: Order, eh -- who does he think he is?
+ARTHUR: I am your king!
+OLD WOMAN: Well, I didn't vote for you.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0568 b/data/vim/patches/8.1.0568
new file mode 100644
index 000000000..f280813ae
--- /dev/null
+++ b/data/vim/patches/8.1.0568
@@ -0,0 +1,65 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0568
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0568 (after 8.1.0567)
+Problem: Error message for NUL byte in ScreenLines breaks Travis CI.
+Solution: Use a normal message for now.
+Files: src/gui.c
+
+
+*** ../vim-8.1.0567/src/gui.c 2018-12-07 13:26:36.332536832 +0100
+--- src/gui.c 2018-12-07 14:07:20.708421838 +0100
+***************
+*** 2758,2766 ****
+ if (col1 > 0)
+ --col1;
+ else
+ // FIXME: how can the first character ever be zero?
+! IEMSGN("INTERNAL ERROR: NUL in ScreenLines in row %ld",
+! gui.row);
+ }
+ # ifdef FEAT_GUI_GTK
+ if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
+--- 2758,2771 ----
+ if (col1 > 0)
+ --col1;
+ else
++ {
+ // FIXME: how can the first character ever be zero?
+! // Make this IEMSGN when it no longer breaks Travis CI.
+! vim_snprintf((char *)IObuff, IOSIZE,
+! "INTERNAL ERROR: NUL in ScreenLines in row %ld",
+! (long)gui.row);
+! msg(IObuff);
+! }
+ }
+ # ifdef FEAT_GUI_GTK
+ if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
+*** ../vim-8.1.0567/src/version.c 2018-12-07 13:26:36.336536804 +0100
+--- src/version.c 2018-12-07 14:08:40.627805124 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 568,
+ /**/
+
+--
+OLD WOMAN: Well, how did you become king, then?
+ARTHUR: The Lady of the Lake, her arm clad in the purest shimmering samite,
+ held Excalibur aloft from the bosom of the water to signify by Divine
+ Providence ... that I, Arthur, was to carry Excalibur ... That is
+ why I am your king!
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0569 b/data/vim/patches/8.1.0569
new file mode 100644
index 000000000..bb37b182e
--- /dev/null
+++ b/data/vim/patches/8.1.0569
@@ -0,0 +1,98 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0569
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0569
+Problem: Execute() always resets display column to zero. (Sha Liu)
+Solution: Don't reset it to zero, restore the previous value. (closes #3669)
+Files: src/evalfunc.c, src/testdir/test_execute_func.c
+
+
+*** ../vim-8.1.0568/src/evalfunc.c 2018-11-22 03:07:30.944596219 +0100
+--- src/evalfunc.c 2018-12-07 16:34:07.079078592 +0100
+***************
+*** 3262,3267 ****
+--- 3262,3268 ----
+ int save_redir_execute = redir_execute;
+ int save_redir_off = redir_off;
+ garray_T save_ga;
++ int save_msg_col = msg_col;
+
+ rettv->vval.v_string = NULL;
+ rettv->v_type = VAR_STRING;
+***************
+*** 3304,3309 ****
+--- 3305,3311 ----
+ ga_init2(&redir_execute_ga, (int)sizeof(char), 500);
+ redir_execute = TRUE;
+ redir_off = FALSE;
++ msg_col = 0; // prevent leading spaces
+
+ if (cmd != NULL)
+ do_cmdline_cmd(cmd);
+***************
+*** 3336,3344 ****
+ redir_execute_ga = save_ga;
+ redir_off = save_redir_off;
+
+! /* "silent reg" or "silent echo x" leaves msg_col somewhere in the
+! * line. Put it back in the first column. */
+! msg_col = 0;
+ }
+
+ /*
+--- 3338,3346 ----
+ redir_execute_ga = save_ga;
+ redir_off = save_redir_off;
+
+! // "silent reg" or "silent echo x" leaves msg_col somewhere in the line.
+! // Put it back where it was, since nothing should have been written.
+! msg_col = save_msg_col;
+ }
+
+ /*
+*** ../vim-8.1.0568/src/testdir/test_execute_func.vim 2016-07-09 16:44:29.000000000 +0200
+--- src/testdir/test_execute_func.vim 2018-12-07 16:36:51.086039444 +0100
+***************
+*** 49,51 ****
+--- 49,63 ----
+ call assert_equal("", execute([]))
+ call assert_equal("", execute(test_null_list()))
+ endfunc
++
++ func Test_execute_does_not_change_col()
++ echo ''
++ echon 'abcd'
++ let x = execute('silent echo 234343')
++ echon 'xyz'
++ let text = ''
++ for col in range(1, 7)
++ let text .= nr2char(screenchar(&lines, col))
++ endfor
++ call assert_equal('abcdxyz', text)
++ endfunc
+*** ../vim-8.1.0568/src/version.c 2018-12-07 14:10:33.934952419 +0100
+--- src/version.c 2018-12-07 16:37:07.753933691 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 569,
+ /**/
+
+--
+ARTHUR: Now stand aside worthy adversary.
+BLACK KNIGHT: (Glancing at his shoulder) 'Tis but a scratch.
+ARTHUR: A scratch? Your arm's off.
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0570 b/data/vim/patches/8.1.0570
new file mode 100644
index 000000000..63cb13caf
--- /dev/null
+++ b/data/vim/patches/8.1.0570
@@ -0,0 +1,126 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0570
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0570
+Problem: 'commentstring' not used when adding fold marker. (Maxim Kim)
+Solution: Only use empty 'comments' middle when leader is empty. (Christian
+ Brabandt, closes #3670)
+Files: src/misc1.c, src/testdir/test_fold.vim
+
+
+*** ../vim-8.1.0569/src/misc1.c 2018-11-16 19:39:47.346937404 +0100
+--- src/misc1.c 2018-12-07 21:00:29.985700550 +0100
+***************
+*** 1993,1998 ****
+--- 1993,1999 ----
+ for (list = curbuf->b_p_com; *list; )
+ {
+ char_u *flags_save = list;
++ int is_only_whitespace = FALSE;
+
+ /*
+ * Get one option part into part_buf[]. Advance list to next one.
+***************
+*** 2018,2025 ****
+ {
+ if (i == 0 || !VIM_ISWHITE(line[i - 1]))
+ continue;
+! while (VIM_ISWHITE(string[0]))
+ ++string;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ /* do nothing */;
+--- 2019,2028 ----
+ {
+ if (i == 0 || !VIM_ISWHITE(line[i - 1]))
+ continue;
+! while (VIM_ISWHITE(*string))
+ ++string;
++ if (*string == NUL)
++ is_only_whitespace = TRUE;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ /* do nothing */;
+***************
+*** 2032,2039 ****
+ */
+ if (vim_strchr(part_buf, COM_BLANK) != NULL
+ && !VIM_ISWHITE(line[i + j]) && line[i + j] != NUL)
+- {
+ continue;
+ }
+
+ /*
+--- 2035,2051 ----
+ */
+ if (vim_strchr(part_buf, COM_BLANK) != NULL
+ && !VIM_ISWHITE(line[i + j]) && line[i + j] != NUL)
+ continue;
++
++ // For a middlepart comment that is only white space, only consider
++ // it to match if everything before the current position in the
++ // line is also whitespace.
++ if (is_only_whitespace && vim_strchr(part_buf, COM_MIDDLE) != NULL)
++ {
++ for (j = 0; VIM_ISWHITE(line[j]) && j <= i; j++)
++ ;
++ if (j < i)
++ continue;
+ }
+
+ /*
+*** ../vim-8.1.0569/src/testdir/test_fold.vim 2018-10-02 21:20:08.688088162 +0200
+--- src/testdir/test_fold.vim 2018-12-07 21:03:08.585295165 +0100
+***************
+*** 695,697 ****
+--- 695,714 ----
+ call StopVimInTerminal(buf)
+ call delete('Xtest_folds_with_rnu')
+ endfunc
++
++ func Test_folds_marker_in_comment2()
++ new
++ call setline(1, ['Lorem ipsum dolor sit', 'Lorem ipsum dolor sit', 'Lorem ipsum dolor sit'])
++ setl fen fdm=marker
++ setl commentstring=<!--%s-->
++ setl comments=s:<!--,m:\ \ \ \ ,e:-->
++ norm! zf2j
++ setl nofen
++ :1y
++ call assert_equal(['Lorem ipsum dolor sit<!--{{{-->'], getreg(0,1,1))
++ :+2y
++ call assert_equal(['Lorem ipsum dolor sit<!--}}}-->'], getreg(0,1,1))
++
++ set foldmethod&
++ bwipe!
++ endfunc
+*** ../vim-8.1.0569/src/version.c 2018-12-07 16:38:20.461472100 +0100
+--- src/version.c 2018-12-07 20:53:51.333542516 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 570,
+ /**/
+
+--
+Any resemblance between the above views and those of my employer, my terminal,
+or the view out my window are purely coincidental. Any resemblance between
+the above and my own views is non-deterministic. The question of the
+existence of views in the absence of anyone to hold them is left as an
+exercise for the reader. The question of the existence of the reader is left
+as an exercise for the second god coefficient. (A discussion of
+non-orthogonal, non-integral polytheism is beyond the scope of this article.)
+ (Ralph Jennings)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0571 b/data/vim/patches/8.1.0571
new file mode 100644
index 000000000..bdf8e5b02
--- /dev/null
+++ b/data/vim/patches/8.1.0571
@@ -0,0 +1,125 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0571
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0571 (after 8.1.0569)
+Problem: Non-silent execute() resets display column to zero.
+Solution: Keep the display column as-is.
+Files: src/evalfunc.c, src/testdir/test_execute_func.vim
+
+
+*** ../vim-8.1.0570/src/evalfunc.c 2018-12-07 16:38:20.461472100 +0100
+--- src/evalfunc.c 2018-12-08 13:29:07.583916762 +0100
+***************
+*** 3263,3268 ****
+--- 3263,3269 ----
+ int save_redir_off = redir_off;
+ garray_T save_ga;
+ int save_msg_col = msg_col;
++ int echo_output = FALSE;
+
+ rettv->vval.v_string = NULL;
+ rettv->v_type = VAR_STRING;
+***************
+*** 3289,3294 ****
+--- 3290,3297 ----
+
+ if (s == NULL)
+ return;
++ if (*s == NUL)
++ echo_output = TRUE;
+ if (STRNCMP(s, "silent", 6) == 0)
+ ++msg_silent;
+ if (STRCMP(s, "silent!") == 0)
+***************
+*** 3305,3311 ****
+ ga_init2(&redir_execute_ga, (int)sizeof(char), 500);
+ redir_execute = TRUE;
+ redir_off = FALSE;
+! msg_col = 0; // prevent leading spaces
+
+ if (cmd != NULL)
+ do_cmdline_cmd(cmd);
+--- 3308,3315 ----
+ ga_init2(&redir_execute_ga, (int)sizeof(char), 500);
+ redir_execute = TRUE;
+ redir_off = FALSE;
+! if (!echo_output)
+! msg_col = 0; // prevent leading spaces
+
+ if (cmd != NULL)
+ do_cmdline_cmd(cmd);
+***************
+*** 3339,3346 ****
+ redir_off = save_redir_off;
+
+ // "silent reg" or "silent echo x" leaves msg_col somewhere in the line.
+! // Put it back where it was, since nothing should have been written.
+! msg_col = save_msg_col;
+ }
+
+ /*
+--- 3343,3356 ----
+ redir_off = save_redir_off;
+
+ // "silent reg" or "silent echo x" leaves msg_col somewhere in the line.
+! if (echo_output)
+! // When not working silently: put it in column zero. A following
+! // "echon" will overwrite the message, unavoidably.
+! msg_col = 0;
+! else
+! // When working silently: Put it back where it was, since nothing
+! // should have been written.
+! msg_col = save_msg_col;
+ }
+
+ /*
+*** ../vim-8.1.0570/src/testdir/test_execute_func.vim 2018-12-07 16:38:20.461472100 +0100
+--- src/testdir/test_execute_func.vim 2018-12-08 13:31:33.151013537 +0100
+***************
+*** 61,63 ****
+--- 61,80 ----
+ endfor
+ call assert_equal('abcdxyz', text)
+ endfunc
++
++ func Test_execute_not_silent()
++ echo ''
++ echon 'abcd'
++ let x = execute('echon 234', '')
++ echo 'xyz'
++ let text1 = ''
++ for col in range(1, 8)
++ let text1 .= nr2char(screenchar(&lines - 1, col))
++ endfor
++ call assert_equal('abcd234 ', text1)
++ let text2 = ''
++ for col in range(1, 4)
++ let text2 .= nr2char(screenchar(&lines, col))
++ endfor
++ call assert_equal('xyz ', text2)
++ endfunc
+*** ../vim-8.1.0570/src/version.c 2018-12-07 21:08:44.775946983 +0100
+--- src/version.c 2018-12-08 13:32:59.090476830 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 571,
+ /**/
+
+--
+ |
+
+Ceci n'est pas une pipe.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0572 b/data/vim/patches/8.1.0572
new file mode 100644
index 000000000..0ae3eefe6
--- /dev/null
+++ b/data/vim/patches/8.1.0572
@@ -0,0 +1,79 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0572
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0572
+Problem: Stopping a job does not work properly on OpenBSD.
+Solution: Do not use getpgid() to check the process group of the job
+ processs ID, always pass the negative process ID to kill().
+ (George Koehler, closes #3656)
+Files: src/os_unix.c
+
+
+*** ../vim-8.1.0571/src/os_unix.c 2018-11-12 21:45:04.596729428 +0100
+--- src/os_unix.c 2018-12-08 14:37:24.207684926 +0100
+***************
+*** 5820,5826 ****
+ mch_signal_job(job_T *job, char_u *how)
+ {
+ int sig = -1;
+- pid_t job_pid;
+
+ if (*how == NUL || STRCMP(how, "term") == 0)
+ sig = SIGTERM;
+--- 5820,5825 ----
+***************
+*** 5841,5856 ****
+ else
+ return FAIL;
+
+! /* TODO: have an option to only kill the process, not the group? */
+! job_pid = job->jv_pid;
+! #ifdef HAVE_GETPGID
+! if (job_pid == getpgid(job_pid))
+! job_pid = -job_pid;
+! #endif
+!
+! /* Never kill ourselves! */
+! if (job_pid != 0)
+! kill(job_pid, sig);
+
+ return OK;
+ }
+--- 5840,5852 ----
+ else
+ return FAIL;
+
+! // Never kill ourselves!
+! if (job->jv_pid != 0)
+! {
+! // TODO: have an option to only kill the process, not the group?
+! kill(-job->jv_pid, sig);
+! kill(job->jv_pid, sig);
+! }
+
+ return OK;
+ }
+*** ../vim-8.1.0571/src/version.c 2018-12-08 13:57:38.553692769 +0100
+--- src/version.c 2018-12-08 14:38:11.875404358 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 572,
+ /**/
+
+--
+FIRST VILLAGER: We have found a witch. May we burn her?
+ "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0573 b/data/vim/patches/8.1.0573
new file mode 100644
index 000000000..42f7ec137
--- /dev/null
+++ b/data/vim/patches/8.1.0573
@@ -0,0 +1,254 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0573
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0573
+Problem: Cannot redefine user command without ! in same script
+Solution: Allow redefining user command without ! in same script, like with
+ functions.
+Files: src/ex_docmd.c, src/testdir/test_usercommands.vim,
+ runtime/doc/map.txt
+
+
+*** ../vim-8.1.0572/src/ex_docmd.c 2018-12-02 18:21:46.035419603 +0100
+--- src/ex_docmd.c 2018-12-08 16:01:27.672777222 +0100
+***************
+*** 5869,5877 ****
+
+ if (cmp == 0)
+ {
+! if (!force)
+ {
+! EMSG(_("E174: Command already exists: add ! to replace it"));
+ goto fail;
+ }
+
+--- 5869,5881 ----
+
+ if (cmp == 0)
+ {
+! // Command can be replaced with "command!" and when sourcing the
+! // same script again, but only once.
+! if (!force && (cmd->uc_script_ctx.sc_sid != current_sctx.sc_sid
+! || cmd->uc_script_ctx.sc_seq == current_sctx.sc_seq))
+ {
+! EMSG2(_("E174: Command already exists: add ! to replace it: %s"),
+! name);
+ goto fail;
+ }
+
+*** ../vim-8.1.0572/src/testdir/test_usercommands.vim 2018-12-02 18:21:46.035419603 +0100
+--- src/testdir/test_usercommands.vim 2018-12-08 15:50:37.400773622 +0100
+***************
+*** 90,95 ****
+--- 90,123 ----
+ delcommand Dothat
+ endfunc
+
++ func Test_redefine_on_reload()
++ call writefile(['command ExistingCommand echo "yes"'], 'Xcommandexists')
++ call assert_equal(0, exists(':ExistingCommand'))
++ source Xcommandexists
++ call assert_equal(2, exists(':ExistingCommand'))
++ " Redefining a command when reloading a script is OK.
++ source Xcommandexists
++ call assert_equal(2, exists(':ExistingCommand'))
++
++ " But redefining in another script is not OK.
++ call writefile(['command ExistingCommand echo "yes"'], 'Xcommandexists2')
++ call assert_fails('source Xcommandexists2', 'E174:')
++ call delete('Xcommandexists2')
++
++ " And defining twice in one script is not OK.
++ delcommand ExistingCommand
++ call assert_equal(0, exists(':ExistingCommand'))
++ call writefile([
++ \ 'command ExistingCommand echo "yes"',
++ \ 'command ExistingCommand echo "no"',
++ \ ], 'Xcommandexists')
++ call assert_fails('source Xcommandexists', 'E174:')
++ call assert_equal(2, exists(':ExistingCommand'))
++
++ call delete('Xcommandexists')
++ delcommand ExistingCommand
++ endfunc
++
+ func Test_CmdUndefined()
+ call assert_fails('Doit', 'E492:')
+ au CmdUndefined Doit :command Doit let g:didit = 'yes'
+*** ../vim-8.1.0572/runtime/doc/map.txt 2018-05-17 13:41:41.000000000 +0200
+--- runtime/doc/map.txt 2018-12-08 15:54:00.039525767 +0100
+***************
+*** 1220,1225 ****
+--- 1223,1232 ----
+ attributes (see below) are {attr}. If the command
+ already exists, an error is reported, unless a ! is
+ specified, in which case the command is redefined.
++ There is one exception: When sourcing a script again,
++ a command that was previously defined in that script
++ will be silently replaced.
++
+
+ :delc[ommand] {cmd} *:delc* *:delcommand* *E184*
+ Delete the user-defined command {cmd}.
+***************
+*** 1227,1233 ****
+ :comc[lear] *:comc* *:comclear*
+ Delete all user-defined commands.
+
+! Command attributes
+
+ User-defined commands are treated by Vim just like any other Ex commands. They
+ can have arguments, or have a range specified. Arguments are subject to
+--- 1234,1241 ----
+ :comc[lear] *:comc* *:comclear*
+ Delete all user-defined commands.
+
+!
+! Command attributes ~
+
+ User-defined commands are treated by Vim just like any other Ex commands. They
+ can have arguments, or have a range specified. Arguments are subject to
+***************
+*** 1238,1245 ****
+ handling, completion behavior, range handling, and special cases. The
+ attributes are described below, by category.
+
+- Argument handling *E175* *E176* *:command-nargs*
+
+ By default, a user defined command will take no arguments (and an error is
+ reported if any are supplied). However, it is possible to specify that the
+ command can take arguments, using the -nargs attribute. Valid cases are:
+--- 1246,1254 ----
+ handling, completion behavior, range handling, and special cases. The
+ attributes are described below, by category.
+
+
++ Argument handling ~
++ *E175* *E176* *:command-nargs*
+ By default, a user defined command will take no arguments (and an error is
+ reported if any are supplied). However, it is possible to specify that the
+ command can take arguments, using the -nargs attribute. Valid cases are:
+***************
+*** 1268,1275 ****
+ Executing script2.vim will result in "None" being echoed. Not what you
+ intended! Calling a function may be an alternative.
+
+! Completion behavior *:command-completion* *E179*
+! *E180* *E181* *:command-complete*
+ By default, the arguments of user defined commands do not undergo completion.
+ However, by specifying one or the other of the following attributes, argument
+ completion can be enabled:
+--- 1277,1286 ----
+ Executing script2.vim will result in "None" being echoed. Not what you
+ intended! Calling a function may be an alternative.
+
+!
+! Completion behavior ~
+! *:command-completion* *E179* *E180* *E181*
+! *:command-complete*
+ By default, the arguments of user defined commands do not undergo completion.
+ However, by specifying one or the other of the following attributes, argument
+ completion can be enabled:
+***************
+*** 1314,1322 ****
+ Note: That some completion methods might expand environment variables.
+
+
+! Custom completion *:command-completion-custom*
+! *:command-completion-customlist*
+! *E467* *E468*
+ It is possible to define customized completion schemes via the "custom,{func}"
+ or the "customlist,{func}" completion argument. The {func} part should be a
+ function with the following signature: >
+--- 1325,1333 ----
+ Note: That some completion methods might expand environment variables.
+
+
+! Custom completion ~
+! *:command-completion-custom*
+! *:command-completion-customlist* *E467* *E468*
+ It is possible to define customized completion schemes via the "custom,{func}"
+ or the "customlist,{func}" completion argument. The {func} part should be a
+ function with the following signature: >
+***************
+*** 1361,1368 ****
+ This example does not work for file names with spaces!
+
+
+! Range handling *E177* *E178* *:command-range*
+! *:command-count*
+ By default, user-defined commands do not accept a line number range. However,
+ it is possible to specify that the command does take a range (the -range
+ attribute), or that it takes an arbitrary count value, either in the line
+--- 1372,1379 ----
+ This example does not work for file names with spaces!
+
+
+! Range handling ~
+! *E177* *E178* *:command-range* *:command-count*
+ By default, user-defined commands do not accept a line number range. However,
+ it is possible to specify that the command does take a range (the -range
+ attribute), or that it takes an arbitrary count value, either in the line
+***************
+*** 1396,1403 ****
+ -addr=loaded_buffers Range for loaded buffers
+ -addr=windows Range for windows
+ -addr=tabs Range for tab pages
+
+! Special cases *:command-bang* *:command-bar*
+ *:command-register* *:command-buffer*
+ There are some special cases as well:
+
+--- 1407,1417 ----
+ -addr=loaded_buffers Range for loaded buffers
+ -addr=windows Range for windows
+ -addr=tabs Range for tab pages
++ -addr=other other kind of range
++
+
+! Special cases ~
+! *:command-bang* *:command-bar*
+ *:command-register* *:command-buffer*
+ There are some special cases as well:
+
+***************
+*** 1415,1421 ****
+ Note that these arguments can be abbreviated, but that is a deprecated
+ feature. Use the full name for new scripts.
+
+! Replacement text
+
+ The replacement text for a user defined command is scanned for special escape
+ sequences, using <...> notation. Escape sequences are replaced with values
+--- 1429,1436 ----
+ Note that these arguments can be abbreviated, but that is a deprecated
+ feature. Use the full name for new scripts.
+
+!
+! Replacement text ~
+
+ The replacement text for a user defined command is scanned for special escape
+ sequences, using <...> notation. Escape sequences are replaced with values
+*** ../vim-8.1.0572/src/version.c 2018-12-08 14:39:00.055120155 +0100
+--- src/version.c 2018-12-08 15:41:53.560022228 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 573,
+ /**/
+
+--
+I have read and understood the above. X________________
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0574 b/data/vim/patches/8.1.0574
new file mode 100644
index 000000000..0a42608ec
--- /dev/null
+++ b/data/vim/patches/8.1.0574
@@ -0,0 +1,129 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0574
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0574
+Problem: 'commentstring' not used when adding fold marker in C.
+Solution: Require white space before middle comment part. (mostly by
+ Hirohito Higashi)
+Files: src/misc1.c, src/testdir/test_fold.vim
+
+
+*** ../vim-8.1.0573/src/misc1.c 2018-12-07 21:08:44.775946983 +0100
+--- src/misc1.c 2018-12-09 14:50:25.241083939 +0100
+***************
+*** 1993,1999 ****
+ for (list = curbuf->b_p_com; *list; )
+ {
+ char_u *flags_save = list;
+- int is_only_whitespace = FALSE;
+
+ /*
+ * Get one option part into part_buf[]. Advance list to next one.
+--- 1993,1998 ----
+***************
+*** 2021,2028 ****
+ continue;
+ while (VIM_ISWHITE(*string))
+ ++string;
+- if (*string == NUL)
+- is_only_whitespace = TRUE;
+ }
+ for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+ /* do nothing */;
+--- 2020,2025 ----
+***************
+*** 2037,2047 ****
+ && !VIM_ISWHITE(line[i + j]) && line[i + j] != NUL)
+ continue;
+
+! // For a middlepart comment that is only white space, only consider
+! // it to match if everything before the current position in the
+! // line is also whitespace.
+! if (is_only_whitespace && vim_strchr(part_buf, COM_MIDDLE) != NULL)
+ {
+ for (j = 0; VIM_ISWHITE(line[j]) && j <= i; j++)
+ ;
+ if (j < i)
+--- 2034,2046 ----
+ && !VIM_ISWHITE(line[i + j]) && line[i + j] != NUL)
+ continue;
+
+! if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
+ {
++ // For a middlepart comment, only consider it to match if
++ // everything before the current position in the line is
++ // whitespace. Otherwise we would think we are inside a
++ // comment if the middle part appears somewhere in the middle
++ // of the line. E.g. for C the "*" appears often.
+ for (j = 0; VIM_ISWHITE(line[j]) && j <= i; j++)
+ ;
+ if (j < i)
+*** ../vim-8.1.0573/src/testdir/test_fold.vim 2018-12-07 21:08:44.775946983 +0100
+--- src/testdir/test_fold.vim 2018-12-09 15:00:39.993843356 +0100
+***************
+*** 507,512 ****
+--- 507,541 ----
+ enew!
+ endfunc
+
++ " test create fold markers with C filetype
++ func Test_fold_create_marker_in_C()
++ enew!
++ set fdm=marker fdl=9
++ set filetype=c
++
++ let content = [
++ \ '/*',
++ \ ' * comment',
++ \ ' * ',
++ \ ' *',
++ \ ' */',
++ \ 'int f(int* p) {',
++ \ ' *p = 3;',
++ \ ' return 0;',
++ \ '}'
++ \]
++ for c in range(len(content) - 1)
++ bw!
++ call append(0, content)
++ call cursor(c + 1, 1)
++ norm! zfG
++ call assert_equal(content[c] . (c < 4 ? '{{{' : '/*{{{*/'), getline(c + 1))
++ endfor
++
++ set fdm& fdl&
++ enew!
++ endfunc
++
+ " test folding with indent
+ func Test_fold_indent()
+ enew!
+*** ../vim-8.1.0573/src/version.c 2018-12-08 16:03:18.656085902 +0100
+--- src/version.c 2018-12-09 14:59:36.034199905 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 574,
+ /**/
+
+--
+Scientists decoded the first message from an alien civilization:
+ SIMPLY SEND 6 TIMES 10 TO THE 50 ATOMS OF HYDROGEN TO THE STAR
+SYSTEM AT THE TOP OF THE LIST, CROSS OFF THAT STAR SYSTEM, THEN PUT
+YOUR STAR SYSTEM AT THE BOTTOM OF THE LIST AND SEND IT TO 100 OTHER
+STAR SYSTEMS. WITHIN ONE TENTH GALACTIC ROTATION YOU WILL RECEIVE
+ENOUGH HYDROGREN TO POWER YOUR CIVILIZATION UNTIL ENTROPY REACHES ITS
+MAXIMUM! IT REALLY WORKS!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0575 b/data/vim/patches/8.1.0575
new file mode 100644
index 000000000..05314da98
--- /dev/null
+++ b/data/vim/patches/8.1.0575
@@ -0,0 +1,346 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0575
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0575
+Problem: Termdebug: clearing multi-breakpoint does not work.
+Solution: Delete all X.Y breakpoints. Keep more information about placed
+ breakpoints. (Ozaki Kiichi, closes #3641)
+Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0574/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-12-02 13:45:47.088708659 +0100
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-12-09 15:46:07.909886080 +0100
+***************
+*** 74,83 ****
+ let s:stopped = 1
+
+ " Take a breakpoint number as used by GDB and turn it into an integer.
+! " The breakpoint may contain a dot: 123.4
+! func s:Breakpoint2SignNumber(nr)
+! let t = split(a:nr, '\.')
+! return t[0] * 1000 + (len(t) == 2 ? t[1] : 0)
+ endfunction
+
+ func s:Highlight(init, old, new)
+--- 74,83 ----
+ let s:stopped = 1
+
+ " Take a breakpoint number as used by GDB and turn it into an integer.
+! " The breakpoint may contain a dot: 123.4 -> 123004
+! " The main breakpoint has a zero subid.
+! func s:Breakpoint2SignNumber(id, subid)
+! return s:break_id + a:id * 1000 + a:subid
+ endfunction
+
+ func s:Highlight(init, old, new)
+***************
+*** 362,369 ****
+--- 362,378 ----
+
+ " Contains breakpoints that have been placed, key is a string with the GDB
+ " breakpoint number.
++ " Each entry is a dict, containing the sub-breakpoints. Key is the subid.
++ " For a breakpoint that is just a number the subid is zero.
++ " For a breakpoint "123.4" the id is "123" and subid is "4".
++ " Example, when breakpoint "44", "123", "123.1" and "123.2" exist:
++ " {'44': {'0': entry}, '123': {'0': entry, '1': entry, '2': entry}}
+ let s:breakpoints = {}
+
++ " Contains breakpoints by file/lnum. The key is "fname:lnum".
++ " Each entry is a list of breakpoint IDs at that position.
++ let s:breakpoint_locations = {}
++
+ augroup TermDebug
+ au BufRead * call s:BufRead()
+ au BufUnload * call s:BufUnloaded()
+***************
+*** 683,692 ****
+ endif
+
+ exe 'sign unplace ' . s:pc_id
+! for key in keys(s:breakpoints)
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(key))
+ endfor
+ unlet s:breakpoints
+
+ sign undefine debugPC
+ for val in s:BreakpointSigns
+--- 692,704 ----
+ endif
+
+ exe 'sign unplace ' . s:pc_id
+! for [id, entries] in items(s:breakpoints)
+! for subid in keys(entries)
+! exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid)
+! endfor
+ endfor
+ unlet s:breakpoints
++ unlet s:breakpoint_locations
+
+ sign undefine debugPC
+ for val in s:BreakpointSigns
+***************
+*** 721,735 ****
+ func s:ClearBreakpoint()
+ let fname = fnameescape(expand('%:p'))
+ let lnum = line('.')
+! for [key, val] in items(s:breakpoints)
+! if val['fname'] == fname && val['lnum'] == lnum
+! call s:SendCommand('-break-delete ' . key)
+! " Assume this always wors, the reply is simply "^done".
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(key))
+! unlet s:breakpoints[key]
+! break
+ endif
+! endfor
+ endfunc
+
+ func s:Run(args)
+--- 733,759 ----
+ func s:ClearBreakpoint()
+ let fname = fnameescape(expand('%:p'))
+ let lnum = line('.')
+! let bploc = printf('%s:%d', fname, lnum)
+! if has_key(s:breakpoint_locations, bploc)
+! let idx = 0
+! for id in s:breakpoint_locations[bploc]
+! if has_key(s:breakpoints, id)
+! " Assume this always works, the reply is simply "^done".
+! call s:SendCommand('-break-delete ' . id)
+! for subid in keys(s:breakpoints[id])
+! exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid)
+! endfor
+! unlet s:breakpoints[id]
+! unlet s:breakpoint_locations[bploc][idx]
+! break
+! else
+! let idx += 1
+! endif
+! endfor
+! if empty(s:breakpoint_locations[bploc])
+! unlet s:breakpoint_locations[bploc]
+ endif
+! endif
+ endfunc
+
+ func s:Run(args)
+***************
+*** 873,887 ****
+
+ let s:BreakpointSigns = []
+
+! func s:CreateBreakpoint(nr)
+! if index(s:BreakpointSigns, a:nr) == -1
+! call add(s:BreakpointSigns, a:nr)
+! exe "sign define debugBreakpoint" . a:nr . " text=" . substitute(a:nr, '\..*', '', '') . " texthl=debugBreakpoint"
+ endif
+ endfunc
+
+! func s:SplitMsg(s)
+! return split(a:s, '{\%([a-z-]\+=[^,]\+,*\)\+}\zs')
+ endfunction
+
+ " Handle setting a breakpoint
+--- 897,912 ----
+
+ let s:BreakpointSigns = []
+
+! func s:CreateBreakpoint(id, subid)
+! let nr = printf('%d.%d', a:id, a:subid)
+! if index(s:BreakpointSigns, nr) == -1
+! call add(s:BreakpointSigns, nr)
+! exe "sign define debugBreakpoint" . nr . " text=" . substitute(nr, '\..*', '', '') . " texthl=debugBreakpoint"
+ endif
+ endfunc
+
+! func! s:SplitMsg(s)
+! return split(a:s, '{.\{-}}\zs')
+ endfunction
+
+ " Handle setting a breakpoint
+***************
+*** 900,947 ****
+ if empty(nr)
+ return
+ endif
+- call s:CreateBreakpoint(nr)
+
+! if has_key(s:breakpoints, nr)
+! let entry = s:breakpoints[nr]
+ else
+ let entry = {}
+! let s:breakpoints[nr] = entry
+ endif
+
+ let lnum = substitute(msg, '.*line="\([^"]*\)".*', '\1', '')
+ let entry['fname'] = fname
+ let entry['lnum'] = lnum
+
+ if bufloaded(fname)
+! call s:PlaceSign(nr, entry)
+ endif
+ endfor
+ endfunc
+
+! func s:PlaceSign(nr, entry)
+! exe 'sign place ' . (s:break_id + s:Breakpoint2SignNumber(a:nr)) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . a:nr . ' file=' . a:entry['fname']
+ let a:entry['placed'] = 1
+ endfunc
+
+ " Handle deleting a breakpoint
+ " Will remove the sign that shows the breakpoint
+ func s:HandleBreakpointDelete(msg)
+! let key = substitute(a:msg, '.*id="\([0-9.]*\)\".*', '\1', '')
+! if empty(key)
+ return
+ endif
+! for [nr, entry] in items(s:breakpoints)
+! if stridx(nr, key) != 0
+! continue
+! endif
+! let entry = s:breakpoints[nr]
+! if has_key(entry, 'placed')
+! exe 'sign unplace ' . (s:break_id + s:Breakpoint2SignNumber(nr))
+! unlet entry['placed']
+! endif
+! unlet s:breakpoints[nr]
+! endfor
+ endfunc
+
+ " Handle the debugged program starting to run.
+--- 925,987 ----
+ if empty(nr)
+ return
+ endif
+
+! " If "nr" is 123 it becomes "123.0" and subid is "0".
+! " If "nr" is 123.4 it becomes "123.4.0" and subid is "4"; "0" is discarded.
+! let [id, subid; _] = map(split(nr . '.0', '\.'), 'v:val + 0')
+! call s:CreateBreakpoint(id, subid)
+!
+! if has_key(s:breakpoints, id)
+! let entries = s:breakpoints[id]
+! else
+! let entries = {}
+! let s:breakpoints[id] = entries
+! endif
+! if has_key(entries, subid)
+! let entry = entries[subid]
+ else
+ let entry = {}
+! let entries[subid] = entry
+ endif
+
+ let lnum = substitute(msg, '.*line="\([^"]*\)".*', '\1', '')
+ let entry['fname'] = fname
+ let entry['lnum'] = lnum
+
++ let bploc = printf('%s:%d', fname, lnum)
++ if !has_key(s:breakpoint_locations, bploc)
++ let s:breakpoint_locations[bploc] = []
++ endif
++ let s:breakpoint_locations[bploc] += [id]
++
+ if bufloaded(fname)
+! call s:PlaceSign(id, subid, entry)
+ endif
+ endfor
+ endfunc
+
+! func s:PlaceSign(id, subid, entry)
+! let nr = printf('%d.%d', a:id, a:subid)
+! exe 'sign place ' . s:Breakpoint2SignNumber(a:id, a:subid) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . nr . ' file=' . a:entry['fname']
+ let a:entry['placed'] = 1
+ endfunc
+
+ " Handle deleting a breakpoint
+ " Will remove the sign that shows the breakpoint
+ func s:HandleBreakpointDelete(msg)
+! let id = substitute(a:msg, '.*id="\([0-9]*\)\".*', '\1', '') + 0
+! if empty(id)
+ return
+ endif
+! if has_key(s:breakpoints, id)
+! for [subid, entry] in items(s:breakpoints[id])
+! if has_key(entry, 'placed')
+! exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid)
+! unlet entry['placed']
+! endif
+! endfor
+! unlet s:breakpoints[id]
+! endif
+ endfunc
+
+ " Handle the debugged program starting to run.
+***************
+*** 958,977 ****
+ " Handle a BufRead autocommand event: place any signs.
+ func s:BufRead()
+ let fname = expand('<afile>:p')
+! for [nr, entry] in items(s:breakpoints)
+! if entry['fname'] == fname
+! call s:PlaceSign(nr, entry)
+! endif
+ endfor
+ endfunc
+
+ " Handle a BufUnloaded autocommand event: unplace any signs.
+ func s:BufUnloaded()
+ let fname = expand('<afile>:p')
+! for [nr, entry] in items(s:breakpoints)
+! if entry['fname'] == fname
+! let entry['placed'] = 0
+! endif
+ endfor
+ endfunc
+
+--- 998,1021 ----
+ " Handle a BufRead autocommand event: place any signs.
+ func s:BufRead()
+ let fname = expand('<afile>:p')
+! for [id, entries] in items(s:breakpoints)
+! for [subid, entry] in items(entries)
+! if entry['fname'] == fname
+! call s:PlaceSign(id, subid, entry)
+! endif
+! endfor
+ endfor
+ endfunc
+
+ " Handle a BufUnloaded autocommand event: unplace any signs.
+ func s:BufUnloaded()
+ let fname = expand('<afile>:p')
+! for [id, entries] in items(s:breakpoints)
+! for [subid, entry] in items(entries)
+! if entry['fname'] == fname
+! let entry['placed'] = 0
+! endif
+! endfor
+ endfor
+ endfunc
+
+*** ../vim-8.1.0574/src/version.c 2018-12-09 15:00:47.985798600 +0100
+--- src/version.c 2018-12-09 15:51:55.863826210 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 575,
+ /**/
+
+--
+Are leaders born or made? And if they're made, can we return them under
+warranty?
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0576 b/data/vim/patches/8.1.0576
new file mode 100644
index 000000000..2bc62396c
--- /dev/null
+++ b/data/vim/patches/8.1.0576
@@ -0,0 +1,67 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0576
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0576
+Problem: Indent script tests pick up installed scripts.
+Solution: Use current runtime indent scripts.
+Files: runtime/indent/Makefile
+
+
+*** ../vim-8.1.0575/runtime/indent/Makefile 2018-11-25 04:03:04.262574403 +0100
+--- runtime/indent/Makefile 2018-12-10 21:09:25.979779327 +0100
+***************
+*** 1,13 ****
+ # Portable Makefile for running indent tests.
+
+ VIM = vim
+
+ # Run the tests that didn't run yet or failed previously.
+ # If a test succeeds a testdir/*.out file will be written.
+ # If a test fails a testdir/*.fail file will be written.
+ test:
+! $(VIM) --clean --not-a-term -u testdir/runtest.vim
+
+
+ clean:
+! $(VIM) --clean --not-a-term -u testdir/cleantest.vim
+--- 1,14 ----
+ # Portable Makefile for running indent tests.
+
+ VIM = vim
++ VIMRUNTIME = ..
+
+ # Run the tests that didn't run yet or failed previously.
+ # If a test succeeds a testdir/*.out file will be written.
+ # If a test fails a testdir/*.fail file will be written.
+ test:
+! VIMRUNTIME=$(VIMRUNTIME) $(VIM) --clean --not-a-term -u testdir/runtest.vim
+
+
+ clean:
+! VIMRUNTIME=$(VIMRUNTIME) $(VIM) --clean --not-a-term -u testdir/cleantest.vim
+*** ../vim-8.1.0575/src/version.c 2018-12-09 15:52:57.091463593 +0100
+--- src/version.c 2018-12-10 21:36:12.085646506 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 576,
+ /**/
+
+--
+Our job was to build a computer information system for the branch banks. We
+were the perfect people for the job: Dean had seen a computer once, and I had
+heard Dean talk about it.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0577 b/data/vim/patches/8.1.0577
new file mode 100644
index 000000000..ae3e6f13d
--- /dev/null
+++ b/data/vim/patches/8.1.0577
@@ -0,0 +1,153 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0577
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0577
+Problem: Tabpage right-click menu never shows "Close tab".
+Solution: Always create the "Close tab" item but ignore the event if there
+ is only one tab.
+Files: src/gui_gtk_x11.c, src/gui_mac.c, src/gui_motif.c, src/gui.c
+
+
+*** ../vim-8.1.0576/src/gui_gtk_x11.c 2018-11-16 16:21:01.637310049 +0100
+--- src/gui_gtk_x11.c 2018-12-11 20:26:44.539749674 +0100
+***************
+*** 3337,3345 ****
+ GtkWidget *menu;
+
+ menu = gtk_menu_new();
+! if (first_tabpage->tp_next != NULL)
+! add_tabline_menu_item(menu, (char_u *)_("Close tab"),
+! TABLINE_MENU_CLOSE);
+ add_tabline_menu_item(menu, (char_u *)_("New tab"), TABLINE_MENU_NEW);
+ add_tabline_menu_item(menu, (char_u *)_("Open Tab..."), TABLINE_MENU_OPEN);
+
+--- 3337,3343 ----
+ GtkWidget *menu;
+
+ menu = gtk_menu_new();
+! add_tabline_menu_item(menu, (char_u *)_("Close tab"), TABLINE_MENU_CLOSE);
+ add_tabline_menu_item(menu, (char_u *)_("New tab"), TABLINE_MENU_NEW);
+ add_tabline_menu_item(menu, (char_u *)_("Open Tab..."), TABLINE_MENU_OPEN);
+
+*** ../vim-8.1.0576/src/gui_mac.c 2018-11-16 16:21:01.645310017 +0100
+--- src/gui_mac.c 2018-12-11 20:30:12.142418680 +0100
+***************
+*** 6705,6712 ****
+
+ // create tabline popup menu required by vim docs (see :he tabline-menu)
+ CreateNewMenu(kTabContextMenuId, 0, &contextMenu);
+! if (first_tabpage->tp_next != NULL)
+! AppendMenuItemTextWithCFString(contextMenu, CFSTR("Close Tab"), 0,
+ TABLINE_MENU_CLOSE, NULL);
+ AppendMenuItemTextWithCFString(contextMenu, CFSTR("New Tab"), 0,
+ TABLINE_MENU_NEW, NULL);
+--- 6705,6711 ----
+
+ // create tabline popup menu required by vim docs (see :he tabline-menu)
+ CreateNewMenu(kTabContextMenuId, 0, &contextMenu);
+! AppendMenuItemTextWithCFString(contextMenu, CFSTR("Close Tab"), 0,
+ TABLINE_MENU_CLOSE, NULL);
+ AppendMenuItemTextWithCFString(contextMenu, CFSTR("New Tab"), 0,
+ TABLINE_MENU_NEW, NULL);
+*** ../vim-8.1.0576/src/gui_motif.c 2018-11-16 16:21:01.641310033 +0100
+--- src/gui_motif.c 2018-12-11 20:31:07.886061365 +0100
+***************
+*** 514,534 ****
+ XtVaSetValues(scroller, XmNwidth, 0, XmNresizable, False,
+ XmNtraversalOn, False, NULL);
+
+! /* Create the tabline popup menu */
+ tabLine_menu = XmCreatePopupMenu(tabLine, "tabline popup", NULL, 0);
+
+! /* Add the buttons to the menu */
+! if (first_tabpage->tp_next != NULL)
+! {
+! n = 0;
+! XtSetArg(args[n], XmNuserData, TABLINE_MENU_CLOSE); n++;
+! xms = XmStringCreate((char *)"Close tab", STRING_TAG);
+! XtSetArg(args[n], XmNlabelString, xms); n++;
+! button = XmCreatePushButton(tabLine_menu, "Close", args, n);
+! XtAddCallback(button, XmNactivateCallback,
+! (XtCallbackProc)tabline_button_cb, NULL);
+! XmStringFree(xms);
+! }
+
+ n = 0;
+ XtSetArg(args[n], XmNuserData, TABLINE_MENU_NEW); n++;
+--- 514,531 ----
+ XtVaSetValues(scroller, XmNwidth, 0, XmNresizable, False,
+ XmNtraversalOn, False, NULL);
+
+! // Create the tabline popup menu
+ tabLine_menu = XmCreatePopupMenu(tabLine, "tabline popup", NULL, 0);
+
+! // Add the buttons to the tabline popup menu
+! n = 0;
+! XtSetArg(args[n], XmNuserData, TABLINE_MENU_CLOSE); n++;
+! xms = XmStringCreate((char *)"Close tab", STRING_TAG);
+! XtSetArg(args[n], XmNlabelString, xms); n++;
+! button = XmCreatePushButton(tabLine_menu, "Close", args, n);
+! XtAddCallback(button, XmNactivateCallback,
+! (XtCallbackProc)tabline_button_cb, NULL);
+! XmStringFree(xms);
+
+ n = 0;
+ XtSetArg(args[n], XmNuserData, TABLINE_MENU_NEW); n++;
+*** ../vim-8.1.0576/src/gui.c 2018-12-07 14:10:33.930952449 +0100
+--- src/gui.c 2018-12-11 20:27:29.995458213 +0100
+***************
+*** 3865,3874 ****
+ {
+ char_u string[3];
+
+! /* Don't put events in the input queue now. */
+ if (hold_gui_events)
+ return;
+
+ string[0] = CSI;
+ string[1] = KS_TABMENU;
+ string[2] = KE_FILLER;
+--- 3865,3878 ----
+ {
+ char_u string[3];
+
+! // Don't put events in the input queue now.
+ if (hold_gui_events)
+ return;
+
++ // Cannot close the last tabpage.
++ if (event == TABLINE_MENU_CLOSE && first_tabpage->tp_next == NULL)
++ return;
++
+ string[0] = CSI;
+ string[1] = KS_TABMENU;
+ string[2] = KE_FILLER;
+*** ../vim-8.1.0576/src/version.c 2018-12-10 21:36:52.869487030 +0100
+--- src/version.c 2018-12-11 20:38:57.595051427 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 577,
+ /**/
+
+--
+A salesperson says: Translation:
+"backward compatible" Old technology
+"Premium" Overpriced
+"Can't keep it on the shelf" Unavailable
+"Stands alone" Piece of shit
+"Proprietary" Incompatible
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0578 b/data/vim/patches/8.1.0578
new file mode 100644
index 000000000..c28221dee
--- /dev/null
+++ b/data/vim/patches/8.1.0578
@@ -0,0 +1,266 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0578
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0578
+Problem: Cannot disable arabic, rightleft and farsi in configure.
+Solution: Add configur flags. (Diego Fernando Carrión, closes #1867)
+Files: src/configure.ac, src/auto/configure, src/config.h.in,
+ src/feature.h, src/Makefile
+
+
+*** ../vim-8.1.0577/src/configure.ac 2018-09-13 17:23:05.165150925 +0200
+--- src/configure.ac 2018-12-12 20:24:39.847759473 +0100
+***************
+*** 2138,2143 ****
+--- 2138,2182 ----
+ AC_DEFINE(FEAT_MBYTE)
+ fi
+
++ dnl Right-to-Left language support for Vim will be included with big features,
++ dnl unless ENABLE_RIGHTLEFT is undefined.
++ AC_MSG_CHECKING(--disable-rightleft argument)
++ AC_ARG_ENABLE(rightleft,
++ [ --disable-rightleft Do not include Right-to-Left language support.],
++ , [enable_rightleft="yes"])
++ if test "$enable_rightleft" = "yes"; then
++ AC_MSG_RESULT(no)
++ else
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(DISABLE_RIGHTLEFT)
++ fi
++
++ dnl Arabic language support for Vim will be included with big features,
++ dnl unless ENABLE_ARABIC is undefined.
++ AC_MSG_CHECKING(--disable-arabic argument)
++ AC_ARG_ENABLE(arabic,
++ [ --disable-arabic Do not include Arabic language support.],
++ , [enable_arabic="yes"])
++ if test "$enable_arabic" = "yes"; then
++ AC_MSG_RESULT(no)
++ else
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(DISABLE_ARABIC)
++ fi
++
++ dnl Farsi language support for vim will be included with big features,
++ dnl unless ENABLE_FARSI is undefined.
++ AC_MSG_CHECKING(--disable-farsi argument)
++ AC_ARG_ENABLE(farsi,
++ [ --disable-farsi Do not include Farsi language support.],
++ , [enable_farsi="yes"])
++ if test "$enable_farsi" = "yes"; then
++ AC_MSG_RESULT(no)
++ else
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(DISABLE_FARSI)
++ fi
++
+ AC_MSG_CHECKING(--enable-hangulinput argument)
+ AC_ARG_ENABLE(hangulinput,
+ [ --enable-hangulinput Include Hangul input support.], ,
+*** ../vim-8.1.0577/src/auto/configure 2018-09-13 17:23:05.169150892 +0200
+--- src/auto/configure 2018-12-12 20:24:43.739736987 +0100
+***************
+*** 818,823 ****
+--- 818,826 ----
+ enable_terminal
+ enable_autoservername
+ enable_multibyte
++ enable_rightleft
++ enable_arabic
++ enable_farsi
+ enable_hangulinput
+ enable_xim
+ enable_fontset
+***************
+*** 1497,1502 ****
+--- 1500,1508 ----
+ --enable-terminal Enable terminal emulation support.
+ --enable-autoservername Automatically define servername at vim startup.
+ --enable-multibyte Include multibyte editing support.
++ --disable-rightleft Do not include Right-to-Left language support.
++ --disable-arabic Do not include Arabic language support.
++ --disable-farsi Do not include Farsi language support.
+ --enable-hangulinput Include Hangul input support.
+ --enable-xim Include XIM input support.
+ --enable-fontset Include X fontset output support.
+***************
+*** 7954,7959 ****
+--- 7960,8022 ----
+
+ fi
+
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-rightleft argument" >&5
++ $as_echo_n "checking --disable-rightleft argument... " >&6; }
++ # Check whether --enable-rightleft was given.
++ if test "${enable_rightleft+set}" = set; then :
++ enableval=$enable_rightleft;
++ else
++ enable_rightleft="yes"
++ fi
++
++ if test "$enable_rightleft" = "yes"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++ $as_echo "no" >&6; }
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++ $as_echo "yes" >&6; }
++ $as_echo "#define DISABLE_RIGHTLEFT 1" >>confdefs.h
++
++ fi
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-arabic argument" >&5
++ $as_echo_n "checking --disable-arabic argument... " >&6; }
++ # Check whether --enable-arabic was given.
++ if test "${enable_arabic+set}" = set; then :
++ enableval=$enable_arabic;
++ else
++ enable_arabic="yes"
++ fi
++
++ if test "$enable_arabic" = "yes"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++ $as_echo "no" >&6; }
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++ $as_echo "yes" >&6; }
++ $as_echo "#define DISABLE_ARABIC 1" >>confdefs.h
++
++ fi
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-farsi argument" >&5
++ $as_echo_n "checking --disable-farsi argument... " >&6; }
++ # Check whether --enable-farsi was given.
++ if test "${enable_farsi+set}" = set; then :
++ enableval=$enable_farsi;
++ else
++ enable_farsi="yes"
++ fi
++
++ if test "$enable_farsi" = "yes"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++ $as_echo "no" >&6; }
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++ $as_echo "yes" >&6; }
++ $as_echo "#define DISABLE_FARSI 1" >>confdefs.h
++
++ fi
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-hangulinput argument" >&5
+ $as_echo_n "checking --enable-hangulinput argument... " >&6; }
+ # Check whether --enable-hangulinput was given.
+*** ../vim-8.1.0577/src/config.h.in 2018-09-12 20:29:05.475670636 +0200
+--- src/config.h.in 2018-12-12 20:23:45.344072492 +0100
+***************
+*** 390,395 ****
+--- 390,404 ----
+ /* Define if you want to include multibyte support. */
+ #undef FEAT_MBYTE
+
++ /* Define if you don't want to include right-left support. */
++ #undef DISABLE_RIGHTLEFT
++
++ /* Define if you don't want to include Farsi support. */
++ #undef DISABLE_FARSI
++
++ /* Define if you don't want to include Arabic support. */
++ #undef DISABLE_ARABIC
++
+ /* Define if you want to always define a server name at vim startup. */
+ #undef FEAT_AUTOSERVERNAME
+
+*** ../vim-8.1.0577/src/feature.h 2018-08-14 13:38:12.744559267 +0200
+--- src/feature.h 2018-12-12 20:21:57.672679147 +0100
+***************
+*** 263,269 ****
+ *
+ * Disabled for EBCDIC as it requires multibyte.
+ */
+! #if defined(FEAT_BIG) && !defined(EBCDIC)
+ # define FEAT_RIGHTLEFT
+ #endif
+
+--- 263,269 ----
+ *
+ * Disabled for EBCDIC as it requires multibyte.
+ */
+! #if defined(FEAT_BIG) && !defined(DISABLE_RIGHTLEFT) && !defined(EBCDIC)
+ # define FEAT_RIGHTLEFT
+ #endif
+
+***************
+*** 273,279 ****
+ *
+ * Disabled for EBCDIC as it requires multibyte.
+ */
+! #if defined(FEAT_BIG) && !defined(EBCDIC)
+ # define FEAT_FKMAP
+ #endif
+ #ifdef FEAT_FKMAP
+--- 273,279 ----
+ *
+ * Disabled for EBCDIC as it requires multibyte.
+ */
+! #if defined(FEAT_BIG) && !defined(DISABLE_FARSI) && !defined(EBCDIC)
+ # define FEAT_FKMAP
+ #endif
+ #ifdef FEAT_FKMAP
+***************
+*** 288,294 ****
+ *
+ * Disabled for EBCDIC as it requires multibyte.
+ */
+! #if defined(FEAT_BIG) && VIM_SIZEOF_INT >= 4 && !defined(EBCDIC)
+ # define FEAT_ARABIC
+ #endif
+ #ifdef FEAT_ARABIC
+--- 288,294 ----
+ *
+ * Disabled for EBCDIC as it requires multibyte.
+ */
+! #if defined(FEAT_BIG) && !defined(DISABLE_ARABIC) && VIM_SIZEOF_INT >= 4 && !defined(EBCDIC)
+ # define FEAT_ARABIC
+ #endif
+ #ifdef FEAT_ARABIC
+*** ../vim-8.1.0577/src/Makefile 2018-09-21 13:56:21.522830206 +0200
+--- src/Makefile 2018-12-12 20:31:58.225141981 +0100
+***************
+*** 499,504 ****
+--- 499,508 ----
+ # configure tests may fail.
+ #CONF_OPT_MULTIBYTE = --enable-multibyte
+
++ # When building with at least "big" features, right-left, Arabic and Farsi
++ # features are enabled. Use this to disable them.
++ #CONF_OPT_MULTIBYTE = --disable-rightleft --disable-farsi --disable-arabic
++
+ # NLS - National Language Support
+ # Uncomment this when you do not want to support translated messages, even
+ # though configure can find support for it.
+*** ../vim-8.1.0577/src/version.c 2018-12-11 20:39:15.446937049 +0100
+--- src/version.c 2018-12-12 20:15:00.894808786 +0100
+***************
+*** 794,795 ****
+--- 794,797 ----
+ { /* Add new patch number below this line */
++ /**/
++ 578,
+ /**/
+
+--
+The fastest way to get an engineer to solve a problem is to declare that the
+problem is unsolvable. No engineer can walk away from an unsolvable problem
+until it's solved.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0579 b/data/vim/patches/8.1.0579
new file mode 100644
index 000000000..421d0328f
--- /dev/null
+++ b/data/vim/patches/8.1.0579
@@ -0,0 +1,2526 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0580
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0580
+Problem: Cannot attach properties to text.
+Solution: First part of adding text properties.
+Files: Filelist, runtime/doc/Makefile, runtime/doc/eval.txt,
+ runtime/doc/textprop.txt, src/Make_all.mak, src/Make_cyg_ming.mak,
+ src/Make_mvc.mak, src/Makefile, src/buffer.c, src/edit.c,
+ src/evalfunc.c, src/feature.h, src/memline.c, src/misc1.c,
+ src/misc2.c, src/proto.h, src/proto/memline.pro,
+ src/proto/textprop.pro, src/screen.c, src/structs.h,
+ src/testdir/Make_all.mak, src/testdir/test_textprop.vim,
+ src/textprop.c, src/userfunc.c, src/version.c
+
+
+*** ../vim-8.1.0578/Filelist 2018-10-25 16:52:46.839887739 +0200
+--- Filelist 2018-12-13 19:59:08.647713430 +0100
+***************
+*** 91,96 ****
+--- 91,97 ----
+ src/terminal.c \
+ src/term.h \
+ src/termlib.c \
++ src/textprop.c \
+ src/ui.c \
+ src/undo.c \
+ src/userfunc.c \
+***************
+*** 198,203 ****
+--- 199,205 ----
+ src/proto/term.pro \
+ src/proto/terminal.pro \
+ src/proto/termlib.pro \
++ src/proto/textprop.pro \
+ src/proto/ui.pro \
+ src/proto/undo.pro \
+ src/proto/userfunc.pro \
+*** ../vim-8.1.0578/runtime/doc/Makefile 2017-11-24 20:49:13.000000000 +0100
+--- runtime/doc/Makefile 2018-12-13 20:01:21.774863565 +0100
+***************
+*** 102,107 ****
+--- 102,108 ----
+ tagsrch.txt \
+ term.txt \
+ terminal.txt \
++ textprop.txt \
+ tips.txt \
+ todo.txt \
+ uganda.txt \
+***************
+*** 238,243 ****
+--- 239,245 ----
+ tagsrch.html \
+ term.html \
+ terminal.html \
++ textprop.html \
+ tips.html \
+ todo.html \
+ uganda.html \
+*** ../vim-8.1.0578/runtime/doc/eval.txt 2018-11-22 03:07:30.940596247 +0100
+--- runtime/doc/eval.txt 2018-12-13 22:11:02.636894993 +0100
+***************
+*** 2300,2309 ****
+ pow({x}, {y}) Float {x} to the power of {y}
+ prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
+ printf({fmt}, {expr1}...) String format text
+- prompt_addtext({buf}, {expr}) none add text to a prompt buffer
+ prompt_setcallback({buf}, {expr}) none set prompt callback function
+ prompt_setinterrupt({buf}, {text}) none set prompt interrupt function
+ prompt_setprompt({buf}, {text}) none set prompt text
+ pumvisible() Number whether popup menu is visible
+ pyeval({expr}) any evaluate |Python| expression
+ py3eval({expr}) any evaluate |python3| expression
+--- 2314,2338 ----
+ pow({x}, {y}) Float {x} to the power of {y}
+ prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
+ printf({fmt}, {expr1}...) String format text
+ prompt_setcallback({buf}, {expr}) none set prompt callback function
+ prompt_setinterrupt({buf}, {text}) none set prompt interrupt function
+ prompt_setprompt({buf}, {text}) none set prompt text
++ prop_add({lnum}, {col}, {props}) none add a text property
++ prop_clear({lnum} [, {lnum_end} [, {bufnr}]])
++ none remove all text properties
++ prop_find({props} [, {direction}])
++ Dict search for a text property
++ prop_list({lnum} [, {props}) List text properties in {lnum}
++ prop_remove({props} [, {lnum} [, {lnum_end}]])
++ Number remove a text property
++ prop_type_add({name}, {props}) none define a new property type
++ prop_type_change({name}, {props})
++ none change an existing property type
++ prop_type_delete({name} [, {props}])
++ none delete a property type
++ prop_type_get([{name} [, {props}])
++ Dict get property type values
++ prop_type_list([{props}]) List get list of property types
+ pumvisible() Number whether popup menu is visible
+ pyeval({expr}) any evaluate |Python| expression
+ py3eval({expr}) any evaluate |python3| expression
+***************
+*** 6642,6647 ****
+--- 6673,6863 ----
+ The result is only visible if {buf} has 'buftype' set to
+ "prompt". Example: >
+ call prompt_setprompt(bufnr(''), 'command: ')
++ <
++ *prop_add()* *E965*
++ prop_add({lnum}, {col}, {props})
++ Attach a text property at position {lnum}, {col}. Use one for
++ the first column.
++ If {lnum} is invalid an error is given. *E966*
++ If {col} is invalid an error is given. *E964*
++
++ {props} is a dictionary with these fields:
++ "length" - length of text in characters, can only be
++ used for a property that does not
++ continue in another line
++ "end_lnum" - line number for end of text
++ "end_col" - column for end of text; not used when
++ "length" is present
++ "bufnr - buffer to add the property to; when
++ omitted the current buffer is used
++ "id" - user defined ID for the property; when
++ omitted zero is used
++ "type" - name of the text property type
++ All fields except "type" are optional.
++
++ It is an error when both "length" and "end_lnum" or "end_col"
++ are passed. Either use "length" or "end_col" for a property
++ within one line, or use "end_lnum" and "end_col" for a
++ property that spans more than one line.
++ When neither "length" or "end_col" are passed the property
++ will apply to one character.
++
++ "type" will first be looked up in the buffer the property is
++ added to. When not found, the global property types are used.
++ If not found an error is given.
++
++ See |text-properties| for information about text properties.
++
++
++ prop_clear({lnum} [, {lnum_end} [, {props}]]) *prop_clear()*
++ Remove all text properties from line {lnum}.
++ When {lnum_end} is given, remove all text properties from line
++ {lnum} to {lnum_end} (inclusive).
++
++ When {props} contains a "bufnr" item use this buffer,
++ otherwise use the current buffer.
++
++ See |text-properties| for information about text properties.
++
++ *prop_find()*
++ prop_find({props} [, {direction}])
++ NOT IMPLEMENTED YET
++ Search for a text property as specified with {props}:
++ "id" property with this ID
++ "type" property with this type name
++ "bufnr buffer to search in; when present a
++ start position with "lnum" and "col"
++ must be given; when omitted the
++ current buffer is used
++ "lnum" start in this line (when omitted start
++ at the cursor)
++ "col" start at this column (when omitted
++ and "lnum" is given: use column 1,
++ otherwise start at the cursor)
++ "skipstart" do not look for a match at the start
++ position
++
++ {direction} can be "f" for forward and "b" for backward. When
++ omitted forward search is performed.
++
++ If a match is found then a Dict is returned with the entries
++ as with prop_list(), and additionally an "lnum" entry.
++ If no match is found then an empty Dict is returned.
++
++ See |text-properties| for information about text properties.
++
++
++ prop_list({lnum} [, {props}]) *prop_list()*
++ Return a List with all text properties in line {lnum}.
++
++ When {props} contains a "bufnr" item, use this buffer instead
++ of the current buffer.
++
++ The properties are ordered by starting column and priority.
++ Each property is a Dict with these entries:
++ "col" starting column
++ "length" length in bytes
++ "id" property ID
++ "type" name of the property type, omitted if
++ the type was deleted
++ "start" when TRUE property starts in this line
++ "end" when TRUE property ends in this line
++
++ When "start" is zero the property started in a previous line,
++ the current one is a continuation.
++ When "end" is zero the property continues in the next line.
++ The line break after this line is included.
++
++ See |text-properties| for information about text properties.
++
++
++ *prop_remove()* *E968*
++ prop_remove({props} [, {lnum} [, {lnum_end}]])
++ Remove a matching text property from line {lnum}. When
++ {lnum_end} is given, remove matching text properties from line
++ {lnum} to {lnum_end} (inclusive).
++ When {lnum} is omitted remove matching text properties from
++ all lines.
++
++ {props} is a dictionary with these fields:
++ "id" - remove text properties with this ID
++ "type" - remove text properties with this type name
++ "bufnr" - use this buffer instead of the current one
++ "all" - when TRUE remove all matching text
++ properties, not just the first one
++ A property matches when either "id" or "type" matches.
++
++ Returns the number of properties that were removed.
++
++ See |text-properties| for information about text properties.
++
++
++ prop_type_add({name}, {props}) *prop_type_add()* *E969* *E970*
++ Add a text property type {name}. If a property type with this
++ name already exists an error is given.
++ {props} is a dictionary with these optional fields:
++ "bufnr" - define the property only for this
++ buffer; this avoids name collisions and
++ automatically clears the property types
++ when the buffer is deleted.
++ "highlight" - name of highlight group to use
++ "priority" - when a character has multiple text
++ properties the one with the highest
++ priority will be used; negative values
++ can be used, the default priority is
++ zero
++ "start_incl" - when TRUE inserts at the start
++ position will be included in the text
++ property
++ "end_incl" - when TRUE inserts at the end
++ position will be included in the text
++ property
++
++ See |text-properties| for information about text properties.
++
++
++ prop_type_change({name}, {props}) *prop_type_change()*
++ Change properties of an existing text property type. If a
++ property with this name does not exist an error is given.
++ The {props} argument is just like |prop_type_add()|.
++
++ See |text-properties| for information about text properties.
++
++
++ prop_type_delete({name} [, {props}]) *prop_type_delete()*
++ Remove the text property type {name}. When text properties
++ using the type {name} are still in place, they will not have
++ an effect and can no longer be removed by name.
++
++ {props} can contain a "bufnr" item. When it is given, delete
++ a property type from this buffer instead of from the global
++ property types.
++
++ When text property type {name} is not found there is no error.
++
++ See |text-properties| for information about text properties.
++
++
++ prop_type_get([{name} [, {props}]) *prop_type_get()*
++ Returns the properties of property type {name}. This is a
++ dictionary with the same fields as was given to
++ prop_type_add().
++ When the property type {name} does not exist, an empty
++ dictionary is returned.
++
++ {props} can contain a "bufnr" item. When it is given, use
++ this buffer instead of the global property types.
++
++ See |text-properties| for information about text properties.
++
++
++ prop_type_list([{props}]) *prop_type_list()*
++ Returns a list with all property type names.
++
++ {props} can contain a "bufnr" item. When it is given, use
++ this buffer instead of the global property types.
++
++ See |text-properties| for information about text properties.
+
+
+ pumvisible() *pumvisible()*
+*** ../vim-8.1.0578/runtime/doc/textprop.txt 2018-12-13 22:11:43.932591369 +0100
+--- runtime/doc/textprop.txt 2018-12-13 21:59:47.042285684 +0100
+***************
+*** 0 ****
+--- 1,114 ----
++ *textprop.txt* For Vim version 8.1. Last change: 2018 Dec 13
++
++
++ VIM REFERENCE MANUAL by Bram Moolenaar
++
++
++ Displaying text with properties attached. *text-properties*
++
++ THIS IS UNDER DEVELOPMENT - ANYTHING MAY STILL CHANGE *E967*
++
++ What is not working yet:
++ - Adjusting column/length when inserting text
++ - Text properties spanning more than one line
++ - prop_find()
++ - callbacks when text properties are outdated
++
++
++ 1. Introduction |text-prop-intro|
++ 2. Functions |text-prop-functions|
++
++
++ {Vi does not have text properties}
++ {not able to use text properties when the |+textprop| feature was
++ disabled at compile time}
++
++ ==============================================================================
++ 1. Introduction *text-prop-intro*
++
++ Text properties can be attached to text in a buffer. They will move with the
++ text: If lines are deleted or inserted the properties move with the text they
++ are attached to. Also when inserting/deleting text in the line before the
++ text property. And when inserting/deleting text inside the text property, it
++ will increase/decrease in size.
++
++ The main use for text properties is to highlight text. This can be seen as a
++ replacement for syntax highlighting. Instead of defining patterns to match
++ the text, the highlighting is set by a script, possibly using the output of an
++ external parser. This only needs to be done once, not every time when
++ redrawing the screen, thus can be much faster, after the initial cost of
++ attaching the text properties.
++
++ Text properties can also be used for other purposes to identify text. For
++ example, add a text property on a function name, so that a search can be
++ defined to jump to the next/previous function.
++
++ A text property is attached at a specific line and column, and has a specified
++ length. The property can span multiple lines.
++
++ A text property has these fields:
++ "id" a number to be used as desired
++ "type" the name of a property type
++
++
++ Property Types ~
++ *E971*
++ A text property normally has the name of a property type, which defines
++ how to highlight the text. The property type can have these entries:
++ "highlight" name of the highlight group to use
++ "priority" when properties overlap, the one with the highest
++ priority will be used.
++ "start_incl" when TRUE inserts at the start position will be
++ included in the text property
++ "end_incl" when TRUE inserts at the end position will be
++ included in the text property
++
++
++ Example ~
++
++ Suppose line 11 in a buffer has this text (excluding the indent):
++
++ The number 123 is smaller than 4567.
++
++ To highlight the numbers: >
++ call prop_type_add('number', {'highlight': 'Constant'})
++ call prop_add(11, 12, {'length': 3, 'type': 'number})
++ call prop_add(11, 32, {'length': 4, 'type': 'number})
++
++ Setting "start_incl" and "end_incl" is useful when white space surrounds the
++ text, e.g. for a function name. Using false is useful when the text starts
++ and/or ends with a specific character, such as the quote surrounding a string.
++
++ func FuncName(arg) ~
++ ^^^^^^^^ property with start_incl and end_incl set
++
++ var = "text"; ~
++ ^^^^^^ property with start_incl and end_incl not set
++
++ Nevertheless, when text is inserted or deleted the text may need to be parsed
++ and the text properties updated. But this can be done asynchrnously.
++
++ ==============================================================================
++ 2. Functions *text-prop-functions*
++
++ Manipulating text property types:
++
++ prop_type_add({name}, {props}) define a new property type
++ prop_type_change({name}, {props}) change an existing property type
++ prop_type_delete({name} [, {props}]) delete a property type
++ prop_type_get([{name} [, {props}]) get property type values
++ prop_type_list([{props}]) get list of property types
++
++
++ Manipulating text properties:
++
++ prop_add({lnum}, {col}, {props}) add a text property
++ prop_clear({lnum} [, {lnum_end} [, {bufnr}]])
++ remove all text properties
++ prop_find({props} [, {direction}]) search for a text property
++ prop_list({lnum} [, {props}) text properties in {lnum}
++ prop_remove({props} [, {lnum} [, {lnum_end}]])
++ remove a text property
++
++
++ vim:tw=78:ts=8:noet:ft=help:norl:
+*** ../vim-8.1.0578/src/Make_all.mak 2018-11-30 22:40:09.098211991 +0100
+--- src/Make_all.mak 2018-12-13 20:05:00.737457532 +0100
+***************
+*** 186,191 ****
+--- 186,192 ----
+ test_terminal_fail \
+ test_textformat \
+ test_textobjects \
++ test_textprop \
+ test_timers \
+ test_true_false \
+ test_undo \
+*** ../vim-8.1.0578/src/Make_cyg_ming.mak 2018-10-21 22:45:39.117688669 +0200
+--- src/Make_cyg_ming.mak 2018-12-13 20:06:02.481059654 +0100
+***************
+*** 751,756 ****
+--- 751,757 ----
+ $(OUTDIR)/syntax.o \
+ $(OUTDIR)/tag.o \
+ $(OUTDIR)/term.o \
++ $(OUTDIR)/textprop.o \
+ $(OUTDIR)/ui.o \
+ $(OUTDIR)/undo.o \
+ $(OUTDIR)/userfunc.o \
+***************
+*** 1090,1095 ****
+--- 1091,1099 ----
+ $(OUTDIR)/terminal.o: terminal.c $(INCL) $(TERM_DEPS)
+ $(CC) -c $(CFLAGS) terminal.c -o $(OUTDIR)/terminal.o
+
++ $(OUTDIR)/textprop.o: textprop.c $(INCL)
++ $(CC) -c $(CFLAGS) textprop.c -o $(OUTDIR)/textprop.o
++
+
+ CCCTERM = $(CC) -c $(CFLAGS) -Ilibvterm/include -DINLINE="" \
+ -DVSNPRINTF=vim_vsnprintf \
+*** ../vim-8.1.0578/src/Make_mvc.mak 2018-11-12 21:42:20.678152930 +0100
+--- src/Make_mvc.mak 2018-12-13 20:07:31.472486033 +0100
+***************
+*** 754,759 ****
+--- 754,760 ----
+ $(OUTDIR)\syntax.obj \
+ $(OUTDIR)\tag.obj \
+ $(OUTDIR)\term.obj \
++ $(OUTDIR)\textprop.obj \
+ $(OUTDIR)\ui.obj \
+ $(OUTDIR)\undo.obj \
+ $(OUTDIR)\userfunc.obj \
+***************
+*** 1529,1534 ****
+--- 1530,1537 ----
+
+ $(OUTDIR)/term.obj: $(OUTDIR) term.c $(INCL)
+
++ $(OUTDIR)/textprop.obj: $(OUTDIR) textprop.c $(INCL)
++
+ $(OUTDIR)/ui.obj: $(OUTDIR) ui.c $(INCL)
+
+ $(OUTDIR)/undo.obj: $(OUTDIR) undo.c $(INCL)
+***************
+*** 1667,1672 ****
+--- 1670,1676 ----
+ proto/syntax.pro \
+ proto/tag.pro \
+ proto/term.pro \
++ proto/textprop.pro \
+ proto/ui.pro \
+ proto/undo.pro \
+ proto/userfunc.pro \
+*** ../vim-8.1.0578/src/Makefile 2018-12-12 20:34:06.072356129 +0100
+--- src/Makefile 2018-12-13 20:08:00.680336028 +0100
+***************
+*** 1577,1584 ****
+ # TAGS_INCL: include files used for make tags
+ # ALL_SRC: source files used for make depend and make lint
+
+- TAGS_INCL = *.h
+-
+ BASIC_SRC = \
+ arabic.c \
+ beval.c \
+--- 1579,1584 ----
+***************
+*** 1636,1641 ****
+--- 1636,1642 ----
+ tag.c \
+ term.c \
+ terminal.c \
++ textprop.c \
+ ui.c \
+ undo.c \
+ userfunc.c \
+***************
+*** 1657,1663 ****
+ $(WORKSHOP_SRC) \
+ $(WSDEBUG_SRC)
+
+! TAGS_SRC = *.c *.cpp if_perl.xs
+
+ EXTRA_SRC = hangulin.c if_lua.c if_mzsch.c auto/if_perl.c if_perlsfio.c \
+ if_python.c if_python3.c if_tcl.c if_ruby.c \
+--- 1658,1665 ----
+ $(WORKSHOP_SRC) \
+ $(WSDEBUG_SRC)
+
+! TAGS_SRC = *.c *.cpp $(PERL_SRC) $(TERM_SRC) $(XDIFF_SRC)
+! TAGS_INCL = *.h $(TERM_DEPS) $(XDIFF_INCL)
+
+ EXTRA_SRC = hangulin.c if_lua.c if_mzsch.c auto/if_perl.c if_perlsfio.c \
+ if_python.c if_python3.c if_tcl.c if_ruby.c \
+***************
+*** 1747,1752 ****
+--- 1749,1755 ----
+ objects/tag.o \
+ objects/term.o \
+ objects/terminal.o \
++ objects/textprop.o \
+ objects/ui.o \
+ objects/undo.o \
+ objects/userfunc.o \
+***************
+*** 1881,1886 ****
+--- 1884,1890 ----
+ term.pro \
+ terminal.pro \
+ termlib.pro \
++ textprop.pro \
+ ui.pro \
+ undo.pro \
+ userfunc.pro \
+***************
+*** 2092,2098 ****
+ # Motif and Athena GUI
+ # You can ignore error messages for missing files.
+ tags TAGS: notags
+! $(TAGPRG) $(TAGS_SRC) $(TAGS_INCL) $(TERM_SRC) $(TERM_DEPS)
+
+ # Make a highlight file for types. Requires Exuberant ctags and awk
+ types: types.vim
+--- 2096,2102 ----
+ # Motif and Athena GUI
+ # You can ignore error messages for missing files.
+ tags TAGS: notags
+! $(TAGPRG) $(TAGS_SRC) $(TAGS_INCL)
+
+ # Make a highlight file for types. Requires Exuberant ctags and awk
+ types: types.vim
+***************
+*** 3211,3216 ****
+--- 3215,3223 ----
+ objects/terminal.o: terminal.c $(TERM_DEPS)
+ $(CCC) -o $@ terminal.c
+
++ objects/textprop.o: textprop.c
++ $(CCC) -o $@ textprop.c
++
+ objects/ui.o: ui.c
+ $(CCC) -o $@ ui.c
+
+***************
+*** 3602,3607 ****
+--- 3609,3618 ----
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+ proto.h globals.h farsi.h arabic.h libvterm/include/vterm.h \
+ libvterm/include/vterm_keycodes.h
++ objects/textprop.o: textprop.c vim.h protodef.h auto/config.h feature.h os_unix.h \
++ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
++ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
++ proto.h globals.h farsi.h arabic.h
+ objects/ui.o: ui.c vim.h protodef.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
+ proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
+*** ../vim-8.1.0578/src/buffer.c 2018-11-20 13:32:30.276983764 +0100
+--- src/buffer.c 2018-12-13 20:09:44.819785821 +0100
+***************
+*** 823,828 ****
+--- 823,831 ----
+ #ifdef FEAT_SYN_HL
+ syntax_clear(&buf->b_s); /* reset syntax info */
+ #endif
++ #ifdef FEAT_TEXT_PROP
++ clear_buf_prop_types(buf);
++ #endif
+ buf->b_flags &= ~BF_READERR; /* a read error is no longer relevant */
+ }
+
+*** ../vim-8.1.0578/src/edit.c 2018-11-22 03:07:30.944596219 +0100
+--- src/edit.c 2018-12-13 20:09:58.939709543 +0100
+***************
+*** 10302,10307 ****
+--- 10302,10310 ----
+ if ((State & REPLACE_FLAG) && !(State & VREPLACE_FLAG))
+ for (temp = i; --temp >= 0; )
+ replace_join(repl_off);
++ #ifdef FEAT_TEXT_PROP
++ curbuf->b_ml.ml_line_len -= i;
++ #endif
+ }
+ #ifdef FEAT_NETBEANS_INTG
+ if (netbeans_active())
+*** ../vim-8.1.0578/src/evalfunc.c 2018-12-08 13:57:38.553692769 +0100
+--- src/evalfunc.c 2018-12-13 22:04:35.855854438 +0100
+***************
+*** 772,777 ****
+--- 772,788 ----
+ {"prompt_setinterrupt", 2, 2, f_prompt_setinterrupt},
+ {"prompt_setprompt", 2, 2, f_prompt_setprompt},
+ #endif
++ #ifdef FEAT_TEXT_PROP
++ {"prop_add", 3, 3, f_prop_add},
++ {"prop_clear", 1, 3, f_prop_clear},
++ {"prop_list", 1, 2, f_prop_list},
++ {"prop_remove", 2, 3, f_prop_remove},
++ {"prop_type_add", 2, 2, f_prop_type_add},
++ {"prop_type_change", 2, 2, f_prop_type_change},
++ {"prop_type_delete", 1, 2, f_prop_type_delete},
++ {"prop_type_get", 1, 2, f_prop_type_get},
++ {"prop_type_list", 0, 1, f_prop_type_list},
++ #endif
+ {"pumvisible", 0, 0, f_pumvisible},
+ #ifdef FEAT_PYTHON3
+ {"py3eval", 1, 1, f_py3eval},
+***************
+*** 6478,6483 ****
+--- 6489,6497 ----
+ #ifdef FEAT_TEXTOBJ
+ "textobjects",
+ #endif
++ #ifdef FEAT_TEXT_PROP
++ "textprop",
++ #endif
+ #ifdef HAVE_TGETENT
+ "tgetent",
+ #endif
+*** ../vim-8.1.0578/src/ex_getln.c 2018-11-30 21:57:50.719861887 +0100
+--- src/ex_getln.c 2018-12-12 22:31:57.398336802 +0100
+***************
+*** 769,774 ****
+--- 769,789 ----
+ stuffcharReadbuff(*c);
+ *c = '\\';
+ }
++ #ifdef FEAT_MBYTE
++ // add any composing characters
++ if (mb_char2len(*c) != mb_ptr2len(ml_get_cursor()))
++ {
++ int save_c = *c;
++
++ while (mb_char2len(*c) != mb_ptr2len(ml_get_cursor()))
++ {
++ curwin->w_cursor.col += mb_char2len(*c);
++ *c = gchar_cursor();
++ stuffcharReadbuff(*c);
++ }
++ *c = save_c;
++ }
++ #endif
+ return FAIL;
+ }
+ }
+*** ../vim-8.1.0578/src/feature.h 2018-12-12 20:34:06.072356129 +0100
+--- src/feature.h 2018-12-13 20:12:33.566852272 +0100
+***************
+*** 502,507 ****
+--- 502,514 ----
+ #endif
+
+ /*
++ * +textprop Text properties
++ */
++ #if defined(FEAT_EVAL) && defined(FEAT_SYN_HL)
++ # define FEAT_TEXT_PROP
++ #endif
++
++ /*
+ * +spell spell checking
+ *
+ * Disabled for EBCDIC: * Doesn't work (SIGSEGV).
+*** ../vim-8.1.0578/src/memline.c 2018-10-30 22:15:51.591158966 +0100
+--- src/memline.c 2018-12-13 20:17:24.645156343 +0100
+***************
+*** 2487,2493 ****
+ {
+ bhdr_T *hp;
+ DATA_BL *dp;
+- char_u *ptr;
+ static int recursive = 0;
+
+ if (lnum > buf->b_ml.ml_line_count) /* invalid line number */
+--- 2487,2492 ----
+***************
+*** 2518,2523 ****
+--- 2517,2526 ----
+ */
+ if (buf->b_ml.ml_line_lnum != lnum || mf_dont_release)
+ {
++ unsigned start, end;
++ colnr_T len;
++ int idx;
++
+ ml_flush_line(buf);
+
+ /*
+***************
+*** 2540,2547 ****
+
+ dp = (DATA_BL *)(hp->bh_data);
+
+! ptr = (char_u *)dp + ((dp->db_index[lnum - buf->b_ml.ml_locked_low]) & DB_INDEX_MASK);
+! buf->b_ml.ml_line_ptr = ptr;
+ buf->b_ml.ml_line_lnum = lnum;
+ buf->b_ml.ml_flags &= ~ML_LINE_DIRTY;
+ }
+--- 2543,2560 ----
+
+ dp = (DATA_BL *)(hp->bh_data);
+
+! idx = lnum - buf->b_ml.ml_locked_low;
+! start = ((dp->db_index[idx]) & DB_INDEX_MASK);
+! // The text ends where the previous line starts. The first line ends
+! // at the end of the block.
+! if (idx == 0)
+! end = dp->db_txt_end;
+! else
+! end = ((dp->db_index[idx - 1]) & DB_INDEX_MASK);
+! len = end - start;
+!
+! buf->b_ml.ml_line_ptr = (char_u *)dp + start;
+! buf->b_ml.ml_line_len = len;
+ buf->b_ml.ml_line_lnum = lnum;
+ buf->b_ml.ml_flags &= ~ML_LINE_DIRTY;
+ }
+***************
+*** 2614,2633 ****
+ static int
+ ml_append_int(
+ buf_T *buf,
+! linenr_T lnum, /* append after this line (can be 0) */
+! char_u *line, /* text of the new line */
+! colnr_T len, /* length of line, including NUL, or 0 */
+! int newfile, /* flag, see above */
+! int mark) /* mark the new line */
+ {
+ int i;
+! int line_count; /* number of indexes in current block */
+ int offset;
+ int from, to;
+! int space_needed; /* space needed for new line */
+ int page_size;
+ int page_count;
+! int db_idx; /* index for lnum in data block */
+ bhdr_T *hp;
+ memfile_T *mfp;
+ DATA_BL *dp;
+--- 2627,2647 ----
+ static int
+ ml_append_int(
+ buf_T *buf,
+! linenr_T lnum, // append after this line (can be 0)
+! char_u *line, // text of the new line
+! colnr_T len_arg, // length of line, including NUL, or 0
+! int newfile, // flag, see above
+! int mark) // mark the new line
+ {
++ colnr_T len = len_arg; // length of line, including NUL, or 0
+ int i;
+! int line_count; // number of indexes in current block
+ int offset;
+ int from, to;
+! int space_needed; // space needed for new line
+ int page_size;
+ int page_count;
+! int db_idx; // index for lnum in data block
+ bhdr_T *hp;
+ memfile_T *mfp;
+ DATA_BL *dp;
+***************
+*** 2642,2649 ****
+ lowest_marked = lnum + 1;
+
+ if (len == 0)
+! len = (colnr_T)STRLEN(line) + 1; /* space needed for the text */
+! space_needed = len + INDEX_SIZE; /* space needed for text + index */
+
+ mfp = buf->b_ml.ml_mfp;
+ page_size = mfp->mf_page_size;
+--- 2656,2663 ----
+ lowest_marked = lnum + 1;
+
+ if (len == 0)
+! len = (colnr_T)STRLEN(line) + 1; // space needed for the text
+! space_needed = len + INDEX_SIZE; // space needed for text + index
+
+ mfp = buf->b_ml.ml_mfp;
+ page_size = mfp->mf_page_size;
+***************
+*** 2728,2734 ****
+ dp->db_index[i + 1] = dp->db_index[i] - len;
+ dp->db_index[db_idx + 1] = offset - len;
+ }
+! else /* add line at the end */
+ dp->db_index[db_idx + 1] = dp->db_txt_start;
+
+ /*
+--- 2742,2749 ----
+ dp->db_index[i + 1] = dp->db_index[i] - len;
+ dp->db_index[db_idx + 1] = offset - len;
+ }
+! else
+! // add line at the end (which is the start of the text)
+ dp->db_index[db_idx + 1] = dp->db_txt_start;
+
+ /*
+***************
+*** 3128,3133 ****
+--- 3143,3161 ----
+ int
+ ml_replace(linenr_T lnum, char_u *line, int copy)
+ {
++ colnr_T len = -1;
++
++ if (line != NULL)
++ len = STRLEN(line);
++ return ml_replace_len(lnum, line, len, copy);
++ }
++
++ int
++ ml_replace_len(linenr_T lnum, char_u *line_arg, colnr_T len_arg, int copy)
++ {
++ char_u *line = line_arg;
++ colnr_T len = len_arg;
++
+ if (line == NULL) /* just checking... */
+ return FAIL;
+
+***************
+*** 3135,3141 ****
+ if (curbuf->b_ml.ml_mfp == NULL && open_buffer(FALSE, NULL, 0) == FAIL)
+ return FAIL;
+
+! if (copy && (line = vim_strsave(line)) == NULL) /* allocate memory */
+ return FAIL;
+ #ifdef FEAT_NETBEANS_INTG
+ if (netbeans_active())
+--- 3163,3169 ----
+ if (curbuf->b_ml.ml_mfp == NULL && open_buffer(FALSE, NULL, 0) == FAIL)
+ return FAIL;
+
+! if (copy && (line = vim_strnsave(line, len)) == NULL) /* allocate memory */
+ return FAIL;
+ #ifdef FEAT_NETBEANS_INTG
+ if (netbeans_active())
+***************
+*** 3144,3154 ****
+ netbeans_inserted(curbuf, lnum, 0, line, (int)STRLEN(line));
+ }
+ #endif
+! if (curbuf->b_ml.ml_line_lnum != lnum) /* other line buffered */
+! ml_flush_line(curbuf); /* flush it */
+! else if (curbuf->b_ml.ml_flags & ML_LINE_DIRTY) /* same line allocated */
+ vim_free(curbuf->b_ml.ml_line_ptr); /* free it */
+ curbuf->b_ml.ml_line_ptr = line;
+ curbuf->b_ml.ml_line_lnum = lnum;
+ curbuf->b_ml.ml_flags = (curbuf->b_ml.ml_flags | ML_LINE_DIRTY) & ~ML_EMPTY;
+
+--- 3172,3219 ----
+ netbeans_inserted(curbuf, lnum, 0, line, (int)STRLEN(line));
+ }
+ #endif
+! if (curbuf->b_ml.ml_line_lnum != lnum)
+! {
+! // another line is buffered, flush it
+! ml_flush_line(curbuf);
+!
+! #ifdef FEAT_TEXT_PROP
+! curbuf->b_ml.ml_flags &= ~ML_LINE_DIRTY;
+! if (has_any_text_properties(curbuf))
+! // Need to fetch the old line to copy over any text properties.
+! ml_get_buf(curbuf, lnum, TRUE);
+! #endif
+! }
+!
+! #ifdef FEAT_TEXT_PROP
+! if (has_any_text_properties(curbuf))
+! {
+! size_t oldtextlen = STRLEN(curbuf->b_ml.ml_line_ptr) + 1;
+!
+! if (oldtextlen < (size_t)curbuf->b_ml.ml_line_len)
+! {
+! char_u *newline;
+! size_t textproplen = curbuf->b_ml.ml_line_len - oldtextlen;
+!
+! // Need to copy over text properties, stored after the text.
+! newline = alloc(len + 1 + textproplen);
+! if (newline != NULL)
+! {
+! mch_memmove(newline, line, len + 1);
+! mch_memmove(newline + len + 1, curbuf->b_ml.ml_line_ptr + oldtextlen, textproplen);
+! vim_free(line);
+! line = newline;
+! len += textproplen;
+! }
+! }
+! }
+! #endif
+!
+! if (curbuf->b_ml.ml_flags & ML_LINE_DIRTY) /* same line allocated */
+ vim_free(curbuf->b_ml.ml_line_ptr); /* free it */
++
+ curbuf->b_ml.ml_line_ptr = line;
++ curbuf->b_ml.ml_line_len = len + 1;
+ curbuf->b_ml.ml_line_lnum = lnum;
+ curbuf->b_ml.ml_flags = (curbuf->b_ml.ml_flags | ML_LINE_DIRTY) & ~ML_EMPTY;
+
+***************
+*** 3490,3496 ****
+ old_len = dp->db_txt_end - start;
+ else /* text of previous line follows */
+ old_len = (dp->db_index[idx - 1] & DB_INDEX_MASK) - start;
+! new_len = (colnr_T)STRLEN(new_line) + 1;
+ extra = new_len - old_len; /* negative if lines gets smaller */
+
+ /*
+--- 3555,3561 ----
+ old_len = dp->db_txt_end - start;
+ else /* text of previous line follows */
+ old_len = (dp->db_index[idx - 1] & DB_INDEX_MASK) - start;
+! new_len = buf->b_ml.ml_line_len;
+ extra = new_len - old_len; /* negative if lines gets smaller */
+
+ /*
+***************
+*** 5009,5016 ****
+ */
+ buf->b_ml.ml_usedchunks = 1;
+ buf->b_ml.ml_chunksize[0].mlcs_numlines = 1;
+! buf->b_ml.ml_chunksize[0].mlcs_totalsize =
+! (long)STRLEN(buf->b_ml.ml_line_ptr) + 1;
+ return;
+ }
+
+--- 5074,5080 ----
+ */
+ buf->b_ml.ml_usedchunks = 1;
+ buf->b_ml.ml_chunksize[0].mlcs_numlines = 1;
+! buf->b_ml.ml_chunksize[0].mlcs_totalsize = (long)buf->b_ml.ml_line_len;
+ return;
+ }
+
+*** ../vim-8.1.0578/src/misc1.c 2018-12-09 15:00:47.985798600 +0100
+--- src/misc1.c 2018-12-13 20:18:19.228829748 +0100
+***************
+*** 2631,2639 ****
+ {
+ char_u *oldp, *newp;
+ colnr_T oldlen;
+ linenr_T lnum = curwin->w_cursor.lnum;
+ colnr_T col = curwin->w_cursor.col;
+! int was_alloced;
+ long movelen;
+ int fixpos = fixpos_arg;
+
+--- 2631,2640 ----
+ {
+ char_u *oldp, *newp;
+ colnr_T oldlen;
++ colnr_T newlen;
+ linenr_T lnum = curwin->w_cursor.lnum;
+ colnr_T col = curwin->w_cursor.col;
+! int alloc_newp;
+ long movelen;
+ int fixpos = fixpos_arg;
+
+***************
+*** 2710,2715 ****
+--- 2711,2717 ----
+ count = oldlen - col;
+ movelen = 1;
+ }
++ newlen = oldlen - count;
+
+ /*
+ * If the old line has been allocated the deletion can be done in the
+***************
+*** 2720,2743 ****
+ */
+ #ifdef FEAT_NETBEANS_INTG
+ if (netbeans_active())
+! was_alloced = FALSE;
+ else
+ #endif
+! was_alloced = ml_line_alloced(); /* check if oldp was allocated */
+! if (was_alloced)
+! newp = oldp; /* use same allocated memory */
+ else
+! { /* need to allocate a new line */
+! newp = alloc((unsigned)(oldlen + 1 - count));
+ if (newp == NULL)
+ return FAIL;
+ mch_memmove(newp, oldp, (size_t)col);
+ }
+ mch_memmove(newp + col, oldp + col + count, (size_t)movelen);
+! if (!was_alloced)
+ ml_replace(lnum, newp, FALSE);
+
+! /* mark the buffer as changed and prepare for displaying */
+ changed_bytes(lnum, curwin->w_cursor.col);
+
+ return OK;
+--- 2722,2755 ----
+ */
+ #ifdef FEAT_NETBEANS_INTG
+ if (netbeans_active())
+! alloc_newp = TRUE;
+ else
+ #endif
+! alloc_newp = !ml_line_alloced(); // check if oldp was allocated
+! if (!alloc_newp)
+! newp = oldp; // use same allocated memory
+ else
+! { // need to allocate a new line
+! newp = alloc((unsigned)(newlen + 1));
+ if (newp == NULL)
+ return FAIL;
+ mch_memmove(newp, oldp, (size_t)col);
+ }
+ mch_memmove(newp + col, oldp + col + count, (size_t)movelen);
+! if (alloc_newp)
+ ml_replace(lnum, newp, FALSE);
++ #ifdef FEAT_TEXT_PROP
++ else
++ {
++ // Also move any following text properties.
++ if (oldlen + 1 < curbuf->b_ml.ml_line_len)
++ mch_memmove(newp + newlen + 1, oldp + oldlen + 1,
++ (size_t)curbuf->b_ml.ml_line_len - oldlen - 1);
++ curbuf->b_ml.ml_line_len -= count;
++ }
++ #endif
+
+! // mark the buffer as changed and prepare for displaying
+ changed_bytes(lnum, curwin->w_cursor.col);
+
+ return OK;
+*** ../vim-8.1.0578/src/misc2.c 2018-11-11 15:20:32.436704418 +0100
+--- src/misc2.c 2018-12-13 20:19:36.988360977 +0100
+***************
+*** 1191,1196 ****
+--- 1191,1199 ----
+ # ifdef FEAT_CMDHIST
+ init_history();
+ # endif
++ #ifdef FEAT_TEXT_PROP
++ clear_global_prop_types();
++ #endif
+
+ #ifdef FEAT_QUICKFIX
+ {
+*** ../vim-8.1.0578/src/proto.h 2018-07-01 16:43:59.850736541 +0200
+--- src/proto.h 2018-12-13 20:19:51.208274841 +0100
+***************
+*** 183,188 ****
+--- 183,191 ----
+ # if defined(HAVE_TGETENT) && (defined(AMIGA) || defined(VMS))
+ # include "termlib.pro"
+ # endif
++ # ifdef FEAT_TEXT_PROP
++ # include "textprop.pro"
++ # endif
+ # include "ui.pro"
+ # include "undo.pro"
+ # include "userfunc.pro"
+*** ../vim-8.1.0578/src/proto/memline.pro 2018-08-21 20:28:49.888006612 +0200
+--- src/proto/memline.pro 2018-12-13 20:20:02.860204177 +0100
+***************
+*** 24,29 ****
+--- 24,30 ----
+ int ml_append(linenr_T lnum, char_u *line, colnr_T len, int newfile);
+ int ml_append_buf(buf_T *buf, linenr_T lnum, char_u *line, colnr_T len, int newfile);
+ int ml_replace(linenr_T lnum, char_u *line, int copy);
++ int ml_replace_len(linenr_T lnum, char_u *line_arg, colnr_T len_arg, int copy);
+ int ml_delete(linenr_T lnum, int message);
+ void ml_setmarked(linenr_T lnum);
+ linenr_T ml_firstmarked(void);
+*** ../vim-8.1.0578/src/proto/textprop.pro 2018-12-13 22:11:44.012590783 +0100
+--- src/proto/textprop.pro 2018-12-13 20:25:39.330136512 +0100
+***************
+*** 0 ****
+--- 1,17 ----
++ /* textprop.c */
++ void f_prop_add(typval_T *argvars, typval_T *rettv);
++ int has_any_text_properties(buf_T *buf);
++ int get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change);
++ proptype_T *text_prop_type_by_id(buf_T *buf, int id);
++ void f_prop_clear(typval_T *argvars, typval_T *rettv);
++ void f_prop_list(typval_T *argvars, typval_T *rettv);
++ void f_prop_remove(typval_T *argvars, typval_T *rettv);
++ void prop_type_set(typval_T *argvars, int add);
++ void f_prop_type_add(typval_T *argvars, typval_T *rettv);
++ void f_prop_type_change(typval_T *argvars, typval_T *rettv);
++ void f_prop_type_delete(typval_T *argvars, typval_T *rettv);
++ void f_prop_type_get(typval_T *argvars, typval_T *rettv);
++ void f_prop_type_list(typval_T *argvars, typval_T *rettv);
++ void clear_global_prop_types(void);
++ void clear_buf_prop_types(buf_T *buf);
++ /* vim: set ft=c : */
+*** ../vim-8.1.0578/src/screen.c 2018-11-16 16:21:01.633310065 +0100
+--- src/screen.c 2018-12-13 20:20:43.287958416 +0100
+***************
+*** 3128,3133 ****
+--- 3128,3142 ----
+ int draw_color_col = FALSE; /* highlight colorcolumn */
+ int *color_cols = NULL; /* pointer to according columns array */
+ #endif
++ #ifdef FEAT_TEXT_PROP
++ int text_prop_count;
++ int text_prop_next = 0; // next text property to use
++ textprop_T *text_props = NULL;
++ int *text_prop_idxs = NULL;
++ int text_props_active = 0;
++ proptype_T *text_prop_type = NULL;
++ int text_prop_attr = 0;
++ #endif
+ #ifdef FEAT_SPELL
+ int has_spell = FALSE; /* this buffer has spell checking */
+ # define SPWORDLEN 150
+***************
+*** 3144,3150 ****
+ static linenr_T capcol_lnum = 0; /* line number where "cap_col" used */
+ int cur_checked_col = 0; /* checked column for current line */
+ #endif
+! int extra_check = 0; // has syntax or linebreak
+ #ifdef FEAT_MBYTE
+ int multi_attr = 0; /* attributes desired by multibyte */
+ int mb_l = 1; /* multi-byte byte length */
+--- 3153,3159 ----
+ static linenr_T capcol_lnum = 0; /* line number where "cap_col" used */
+ int cur_checked_col = 0; /* checked column for current line */
+ #endif
+! int extra_check = 0; // has extra highlighting
+ #ifdef FEAT_MBYTE
+ int multi_attr = 0; /* attributes desired by multibyte */
+ int mb_l = 1; /* multi-byte byte length */
+***************
+*** 3784,3789 ****
+--- 3793,3822 ----
+ }
+ #endif
+
++ #ifdef FEAT_TEXT_PROP
++ {
++ char_u *prop_start;
++
++ text_prop_count = get_text_props(wp->w_buffer, lnum,
++ &prop_start, FALSE);
++ if (text_prop_count > 0)
++ {
++ // Make a copy of the properties, so that they are properly
++ // aligned.
++ text_props = (textprop_T *)alloc(
++ text_prop_count * sizeof(textprop_T));
++ if (text_props != NULL)
++ mch_memmove(text_props, prop_start,
++ text_prop_count * sizeof(textprop_T));
++
++ // Allocate an array for the indexes.
++ text_prop_idxs = (int *)alloc(text_prop_count * sizeof(int));
++ area_highlighting = TRUE;
++ extra_check = TRUE;
++ }
++ }
++ #endif
++
+ off = (unsigned)(current_ScreenLine - ScreenLines);
+ col = 0;
+ #ifdef FEAT_RIGHTLEFT
+***************
+*** 4283,4288 ****
+--- 4316,4326 ----
+ else
+ {
+ attr_pri = FALSE;
++ #ifdef FEAT_TEXT_PROP
++ if (text_prop_type != NULL)
++ char_attr = text_prop_attr;
++ else
++ #endif
+ #ifdef FEAT_SYN_HL
+ if (has_syntax)
+ char_attr = syntax_attr;
+***************
+*** 4663,4668 ****
+--- 4701,4766 ----
+ }
+ #endif
+
++ #ifdef FEAT_TEXT_PROP
++ if (text_props != NULL)
++ {
++ int pi;
++
++ // Check if any active property ends.
++ for (pi = 0; pi < text_props_active; ++pi)
++ {
++ int tpi = text_prop_idxs[pi];
++
++ if (col >= text_props[tpi].tp_col - 1
++ + text_props[tpi].tp_len)
++ {
++ if (pi + 1 < text_props_active)
++ mch_memmove(text_prop_idxs + pi,
++ text_prop_idxs + pi + 1,
++ sizeof(int)
++ * (text_props_active - (pi + 1)));
++ --text_props_active;
++ --pi;
++ }
++ }
++
++ // Add any text property that starts in this column.
++ while (text_prop_next < text_prop_count
++ && col >= text_props[text_prop_next].tp_col - 1)
++ text_prop_idxs[text_props_active++] = text_prop_next++;
++
++ text_prop_type = NULL;
++ if (text_props_active > 0)
++ {
++ int max_priority = INT_MIN;
++ int max_col = 0;
++
++ // Get the property type with the highest priority
++ // and/or starting last.
++ for (pi = 0; pi < text_props_active; ++pi)
++ {
++ int tpi = text_prop_idxs[pi];
++ proptype_T *pt;
++
++ pt = text_prop_type_by_id(
++ curwin->w_buffer, text_props[tpi].tp_type);
++ if (pt != NULL
++ && (pt->pt_priority > max_priority
++ || (pt->pt_priority == max_priority
++ && text_props[tpi].tp_col >= max_col)))
++ {
++ text_prop_type = pt;
++ max_priority = pt->pt_priority;
++ max_col = text_props[tpi].tp_col;
++ }
++ }
++ if (text_prop_type != NULL)
++ text_prop_attr =
++ syn_id2attr(text_prop_type->pt_hl_id);
++ }
++ }
++ #endif
++
+ #ifdef FEAT_SPELL
+ /* Check spelling (unless at the end of the line).
+ * Only do this when there is no syntax highlighting, the
+***************
+*** 6025,6030 ****
+--- 6123,6132 ----
+ cap_col = 0;
+ }
+ #endif
++ #ifdef FEAT_TEXT_PROP
++ vim_free(text_props);
++ vim_free(text_prop_idxs);
++ #endif
+
+ vim_free(p_extra_free);
+ return row;
+*** ../vim-8.1.0578/src/structs.h 2018-11-10 17:33:23.087518814 +0100
+--- src/structs.h 2018-12-13 20:21:41.959600249 +0100
+***************
+*** 684,689 ****
+--- 684,690 ----
+
+ linenr_T ml_line_lnum; /* line number of cached line, 0 if not valid */
+ char_u *ml_line_ptr; /* pointer to cached line */
++ colnr_T ml_line_len; /* length of the cached line, including NUL */
+
+ bhdr_T *ml_locked; /* block used by last ml_get */
+ linenr_T ml_locked_low; /* first line in ml_locked */
+***************
+*** 696,701 ****
+--- 697,737 ----
+ #endif
+ } memline_T;
+
++
++ /*
++ * Structure defining text properties. These stick with the text.
++ * When stored in memline they are after the text, ml_line_len is larger than
++ * STRLEN(ml_line_ptr) + 1.
++ */
++ typedef struct textprop_S
++ {
++ colnr_T tp_col; // start column
++ colnr_T tp_len; // length in bytes
++ int tp_id; // identifier
++ int tp_type; // property type
++ int tp_flags; // TP_FLAG_ values
++ } textprop_T;
++
++ #define TP_FLAG_CONT_NEXT 1 // property continues in next line
++ #define TP_FLAG_CONT_PREV 2 // property was continued from prev line
++
++ /*
++ * Structure defining a property type.
++ */
++ typedef struct proptype_S
++ {
++ int pt_id; // value used for tp_id
++ int pt_type; // number used for tp_type
++ int pt_hl_id; // highlighting
++ int pt_priority; // priority
++ int pt_flags; // PT_FLAG_ values
++ char_u pt_name[1]; // property type name, actually longer
++ } proptype_T;
++
++ #define PT_FLAG_INS_START_INCL 1 // insert at start included in property
++ #define PT_FLAG_INS_END_INCL 2 // insert at end included in property
++
++
+ #if defined(FEAT_SIGNS) || defined(PROTO)
+ typedef struct signlist signlist_T;
+
+***************
+*** 2358,2363 ****
+--- 2394,2402 ----
+ dictitem_T b_bufvar; /* variable for "b:" Dictionary */
+ dict_T *b_vars; /* internal variables, local to buffer */
+ #endif
++ #ifdef FEAT_TEXT_PROP
++ hashtab_T *b_proptypes; /* text property types local to buffer */
++ #endif
+
+ #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+ char_u *b_p_bexpr; /* 'balloonexpr' local value */
+*** ../vim-8.1.0578/src/testdir/Make_all.mak 2018-11-30 22:40:09.098211991 +0100
+--- src/testdir/Make_all.mak 2018-12-13 20:22:10.699424209 +0100
+***************
+*** 177,182 ****
+--- 177,183 ----
+ test_terminal_fail.res \
+ test_textformat.res \
+ test_textobjects.res \
++ test_textprop.res \
+ test_undo.res \
+ test_user_func.res \
+ test_usercommands.res \
+*** ../vim-8.1.0578/src/testdir/test_textprop.vim 2018-12-13 22:12:34.396222668 +0100
+--- src/testdir/test_textprop.vim 2018-12-13 22:05:57.999204140 +0100
+***************
+*** 0 ****
+--- 1,200 ----
++ " Tests for defining text property types and adding text properties to the
++ " buffer.
++
++ if !has('textprop')
++ finish
++ endif
++
++ func Test_proptype_global()
++ call prop_type_add('comment', {'highlight': 'Directory', 'priority': 123, 'start_incl': 1, 'end_incl': 1})
++ let proptypes = prop_type_list()
++ call assert_equal(1, len(proptypes))
++ call assert_equal('comment', proptypes[0])
++
++ let proptype = prop_type_get('comment')
++ call assert_equal('Directory', proptype['highlight'])
++ call assert_equal(123, proptype['priority'])
++ call assert_equal(1, proptype['start_incl'])
++ call assert_equal(1, proptype['end_incl'])
++
++ call prop_type_delete('comment')
++ call assert_equal(0, len(prop_type_list()))
++
++ call prop_type_add('one', {})
++ call assert_equal(1, len(prop_type_list()))
++ let proptype = prop_type_get('one')
++ call assert_false(has_key(proptype, 'highlight'))
++ call assert_equal(0, proptype['priority'])
++ call assert_equal(0, proptype['start_incl'])
++ call assert_equal(0, proptype['end_incl'])
++
++ call prop_type_add('two', {})
++ call assert_equal(2, len(prop_type_list()))
++ call prop_type_delete('one')
++ call assert_equal(1, len(prop_type_list()))
++ call prop_type_delete('two')
++ call assert_equal(0, len(prop_type_list()))
++ endfunc
++
++ func Test_proptype_buf()
++ let bufnr = bufnr('')
++ call prop_type_add('comment', {'bufnr': bufnr, 'highlight': 'Directory', 'priority': 123, 'start_incl': 1, 'end_incl': 1})
++ let proptypes = prop_type_list({'bufnr': bufnr})
++ call assert_equal(1, len(proptypes))
++ call assert_equal('comment', proptypes[0])
++
++ let proptype = prop_type_get('comment', {'bufnr': bufnr})
++ call assert_equal('Directory', proptype['highlight'])
++ call assert_equal(123, proptype['priority'])
++ call assert_equal(1, proptype['start_incl'])
++ call assert_equal(1, proptype['end_incl'])
++
++ call prop_type_delete('comment', {'bufnr': bufnr})
++ call assert_equal(0, len(prop_type_list({'bufnr': bufnr})))
++
++ call prop_type_add('one', {'bufnr': bufnr})
++ let proptype = prop_type_get('one', {'bufnr': bufnr})
++ call assert_false(has_key(proptype, 'highlight'))
++ call assert_equal(0, proptype['priority'])
++ call assert_equal(0, proptype['start_incl'])
++ call assert_equal(0, proptype['end_incl'])
++
++ call prop_type_add('two', {'bufnr': bufnr})
++ call assert_equal(2, len(prop_type_list({'bufnr': bufnr})))
++ call prop_type_delete('one', {'bufnr': bufnr})
++ call assert_equal(1, len(prop_type_list({'bufnr': bufnr})))
++ call prop_type_delete('two', {'bufnr': bufnr})
++ call assert_equal(0, len(prop_type_list({'bufnr': bufnr})))
++ endfunc
++
++ func AddPropTypes()
++ call prop_type_add('one', {})
++ call prop_type_add('two', {})
++ call prop_type_add('three', {})
++ call prop_type_add('whole', {})
++ endfunc
++
++ func DeletePropTypes()
++ call prop_type_delete('one')
++ call prop_type_delete('two')
++ call prop_type_delete('three')
++ call prop_type_delete('whole')
++ endfunc
++
++ func SetupPropsInFirstLine()
++ call setline(1, 'one two three')
++ call prop_add(1, 1, {'length': 3, 'id': 11, 'type': 'one'})
++ call prop_add(1, 5, {'length': 3, 'id': 12, 'type': 'two'})
++ call prop_add(1, 8, {'length': 5, 'id': 13, 'type': 'three'})
++ call prop_add(1, 1, {'length': 13, 'id': 14, 'type': 'whole'})
++ endfunc
++
++ let s:expected_props = [{'col': 1, 'length': 13, 'id': 14, 'type': 'whole', 'start': 1, 'end': 1},
++ \ {'col': 1, 'length': 3, 'id': 11, 'type': 'one', 'start': 1, 'end': 1},
++ \ {'col': 5, 'length': 3, 'id': 12, 'type': 'two', 'start': 1, 'end': 1},
++ \ {'col': 8, 'length': 5, 'id': 13, 'type': 'three', 'start': 1, 'end': 1},
++ \ ]
++
++ func Test_prop_add()
++ new
++ call AddPropTypes()
++ call SetupPropsInFirstLine()
++ call assert_equal(s:expected_props, prop_list(1))
++ call assert_fails("call prop_add(10, 1, {'length': 1, 'id': 14, 'type': 'whole'})", 'E966:')
++ call assert_fails("call prop_add(1, 22, {'length': 1, 'id': 14, 'type': 'whole'})", 'E964:')
++
++ " Insert a line above, text props must still be there.
++ call append(0, 'empty')
++ call assert_equal(s:expected_props, prop_list(2))
++ " Delete a line above, text props must still be there.
++ 1del
++ call assert_equal(s:expected_props, prop_list(1))
++
++ call DeletePropTypes()
++ bwipe!
++ endfunc
++
++ func Test_prop_remove()
++ new
++ call AddPropTypes()
++ call SetupPropsInFirstLine()
++ let props = deepcopy(s:expected_props)
++ call assert_equal(props, prop_list(1))
++
++ " remove by id
++ call prop_remove({'id': 12}, 1)
++ unlet props[2]
++ call assert_equal(props, prop_list(1))
++
++ " remove by type
++ call prop_remove({'type': 'one'}, 1)
++ unlet props[1]
++ call assert_equal(props, prop_list(1))
++
++ call DeletePropTypes()
++ bwipe!
++ endfunc
++
++ func Test_prop_add_remove_buf()
++ new
++ let bufnr = bufnr('')
++ call AddPropTypes()
++ call setline(1, 'one two three')
++ wincmd w
++ call prop_add(1, 1, {'length': 3, 'id': 11, 'type': 'one', 'bufnr': bufnr})
++ call prop_add(1, 5, {'length': 3, 'id': 12, 'type': 'two', 'bufnr': bufnr})
++ call prop_add(1, 11, {'length': 3, 'id': 13, 'type': 'three', 'bufnr': bufnr})
++
++ let props = [
++ \ {'col': 1, 'length': 3, 'id': 11, 'type': 'one', 'start': 1, 'end': 1},
++ \ {'col': 5, 'length': 3, 'id': 12, 'type': 'two', 'start': 1, 'end': 1},
++ \ {'col': 11, 'length': 3, 'id': 13, 'type': 'three', 'start': 1, 'end': 1},
++ \]
++ call assert_equal(props, prop_list(1, {'bufnr': bufnr}))
++
++ " remove by id
++ call prop_remove({'id': 12, 'bufnr': bufnr}, 1)
++ unlet props[1]
++ call assert_equal(props, prop_list(1, {'bufnr': bufnr}))
++
++ " remove by type
++ call prop_remove({'type': 'one', 'bufnr': bufnr}, 1)
++ unlet props[0]
++ call assert_equal(props, prop_list(1, {'bufnr': bufnr}))
++
++ call DeletePropTypes()
++ wincmd w
++ bwipe!
++ endfunc
++
++
++ func Test_prop_clear()
++ new
++ call AddPropTypes()
++ call SetupPropsInFirstLine()
++ call assert_equal(s:expected_props, prop_list(1))
++
++ call prop_clear(1)
++ call assert_equal([], prop_list(1))
++
++ call DeletePropTypes()
++ bwipe!
++ endfunc
++
++ func Test_prop_clear_buf()
++ new
++ call AddPropTypes()
++ call SetupPropsInFirstLine()
++ let bufnr = bufnr('')
++ wincmd w
++ call assert_equal(s:expected_props, prop_list(1, {'bufnr': bufnr}))
++
++ call prop_clear(1, 1, {'bufnr': bufnr})
++ call assert_equal([], prop_list(1, {'bufnr': bufnr}))
++
++ wincmd w
++ call DeletePropTypes()
++ bwipe!
++ endfunc
++
++ " TODO: screenshot test with highlighting
+*** ../vim-8.1.0578/src/textprop.c 2018-12-13 22:12:34.400222638 +0100
+--- src/textprop.c 2018-12-13 22:08:34.554000272 +0100
+***************
+*** 0 ****
+--- 1,869 ----
++ /* vi:set ts=8 sts=4 sw=4 noet:
++ *
++ * VIM - Vi IMproved by Bram Moolenaar
++ *
++ * Do ":help uganda" in Vim to read copying and usage conditions.
++ * Do ":help credits" in Vim to see a list of people who contributed.
++ * See README.txt for an overview of the Vim source code.
++ */
++
++ /*
++ * Text properties implementation.
++ *
++ * Text properties are attached to the text. They move with the text when
++ * text is inserted/deleted.
++ *
++ * Text properties have a user specified ID number, which can be unique.
++ * Text properties have a type, which can be used to specify highlighting.
++ *
++ * TODO:
++ * - Add an arrray for global_proptypes, to quickly lookup a proptype by ID
++ * - Add an arrray for b_proptypes, to quickly lookup a proptype by ID
++ * - adjust property column when text is inserted/deleted
++ * - support properties that continue over a line break
++ * - add mechanism to keep track of changed lines.
++ */
++
++ #include "vim.h"
++
++ #if defined(FEAT_TEXT_PROP) || defined(PROTO)
++
++ /*
++ * In a hashtable item "hi_key" points to "pt_name" in a proptype_T.
++ * This avoids adding a pointer to the hashtable item.
++ * PT2HIKEY() converts a proptype pointer to a hashitem key pointer.
++ * HIKEY2PT() converts a hashitem key pointer to a proptype pointer.
++ * HI2PT() converts a hashitem pointer to a proptype pointer.
++ */
++ #define PT2HIKEY(p) ((p)->pt_name)
++ #define HIKEY2PT(p) ((proptype_T *)((p) - offsetof(proptype_T, pt_name)))
++ #define HI2PT(hi) HIKEY2PT((hi)->hi_key)
++
++ // The global text property types.
++ static hashtab_T *global_proptypes = NULL;
++
++ // The last used text property type ID.
++ static int proptype_id = 0;
++
++ static char_u e_type_not_exist[] = N_("E971: Property type %s does not exist");
++ static char_u e_invalid_col[] = N_("E964: Invalid column number: %ld");
++
++ /*
++ * Find a property type by name, return the hashitem.
++ * Returns NULL if the item can't be found.
++ */
++ static hashitem_T *
++ find_prop_hi(char_u *name, buf_T *buf)
++ {
++ hashtab_T *ht;
++ hashitem_T *hi;
++
++ if (*name == NUL)
++ return NULL;
++ if (buf == NULL)
++ ht = global_proptypes;
++ else
++ ht = buf->b_proptypes;
++
++ if (ht == NULL)
++ return NULL;
++ hi = hash_find(ht, name);
++ if (HASHITEM_EMPTY(hi))
++ return NULL;
++ return hi;
++ }
++
++ /*
++ * Like find_prop_hi() but return the property type.
++ */
++ static proptype_T *
++ find_prop(char_u *name, buf_T *buf)
++ {
++ hashitem_T *hi = find_prop_hi(name, buf);
++
++ if (hi == NULL)
++ return NULL;
++ return HI2PT(hi);
++ }
++
++ /*
++ * Lookup a property type by name. First in "buf" and when not found in the
++ * global types.
++ * When not found gives an error message and returns NULL.
++ */
++ static proptype_T *
++ lookup_prop_type(char_u *name, buf_T *buf)
++ {
++ proptype_T *type = find_prop(name, buf);
++
++ if (type == NULL)
++ type = find_prop(name, NULL);
++ if (type == NULL)
++ EMSG2(_(e_type_not_exist), name);
++ return type;
++ }
++
++ /*
++ * Get an optional "bufnr" item from the dict in "arg".
++ * When the argument is not used or "bufnr" is not present then "buf" is
++ * unchanged.
++ * If "bufnr" is valid or not present return OK.
++ * When "arg" is not a dict or "bufnr" is invalide return FAIL.
++ */
++ static int
++ get_bufnr_from_arg(typval_T *arg, buf_T **buf)
++ {
++ dictitem_T *di;
++
++ if (arg->v_type != VAR_DICT)
++ {
++ EMSG(_(e_dictreq));
++ return FAIL;
++ }
++ if (arg->vval.v_dict == NULL)
++ return OK; // NULL dict is like an empty dict
++ di = dict_find(arg->vval.v_dict, (char_u *)"bufnr", -1);
++ if (di != NULL)
++ {
++ *buf = get_buf_tv(&di->di_tv, FALSE);
++ if (*buf == NULL)
++ return FAIL;
++ }
++ return OK;
++ }
++
++ /*
++ * prop_add({lnum}, {col}, {props})
++ */
++ void
++ f_prop_add(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ linenr_T lnum;
++ colnr_T col;
++ dict_T *dict;
++ colnr_T length = 1;
++ char_u *type_name;
++ proptype_T *type;
++ buf_T *buf = curbuf;
++ int id = 0;
++ char_u *newtext;
++ int proplen;
++ size_t textlen;
++ char_u *props;
++ char_u *newprops;
++ static textprop_T tmp_prop; // static to get it aligned.
++ int i;
++
++ lnum = get_tv_number(&argvars[0]);
++ col = get_tv_number(&argvars[1]);
++ if (col < 1)
++ {
++ EMSGN(_(e_invalid_col), (long)col);
++ return;
++ }
++ if (argvars[2].v_type != VAR_DICT)
++ {
++ EMSG(_(e_dictreq));
++ return;
++ }
++ dict = argvars[2].vval.v_dict;
++
++ if (dict == NULL || dict_find(dict, (char_u *)"type", -1) == NULL)
++ {
++ EMSG(_("E965: missing property type name"));
++ return;
++ }
++ type_name = get_dict_string(dict, (char_u *)"type", FALSE);
++
++ if (dict_find(dict, (char_u *)"end_lnum", -1) != NULL)
++ {
++ // TODO: handle end_lnum
++ EMSG("Sorry, end_lnum not supported yet");
++ return;
++ }
++
++ if (dict_find(dict, (char_u *)"length", -1) != NULL)
++ length = get_dict_number(dict, (char_u *)"length");
++ else if (dict_find(dict, (char_u *)"end_col", -1) != NULL)
++ {
++ length = get_dict_number(dict, (char_u *)"end_col") - col;
++ if (length <= 0)
++ {
++ EMSG2(_(e_invargval), "end_col");
++ return;
++ }
++ }
++
++ if (dict_find(dict, (char_u *)"id", -1) != NULL)
++ id = get_dict_number(dict, (char_u *)"id");
++
++ if (get_bufnr_from_arg(&argvars[2], &buf) == FAIL)
++ return;
++
++ type = lookup_prop_type(type_name, buf);
++ if (type == NULL)
++ return;
++
++ if (lnum < 1 || lnum > buf->b_ml.ml_line_count)
++ {
++ EMSGN(_("E966: Invalid line number: %ld"), (long)lnum);
++ return;
++ }
++
++ // Fetch the line to get the ml_line_len field updated.
++ proplen = get_text_props(buf, lnum, &props, TRUE);
++
++ if (col >= (colnr_T)STRLEN(buf->b_ml.ml_line_ptr))
++ {
++ EMSGN(_(e_invalid_col), (long)col);
++ return;
++ }
++
++ // Allocate the new line with space for the new proprety.
++ newtext = alloc(buf->b_ml.ml_line_len + sizeof(textprop_T));
++ if (newtext == NULL)
++ return;
++ // Copy the text, including terminating NUL.
++ textlen = buf->b_ml.ml_line_len - proplen * sizeof(textprop_T);
++ mch_memmove(newtext, buf->b_ml.ml_line_ptr, textlen);
++
++ // Find the index where to insert the new property.
++ // Since the text properties are not aligned properly when stored with the
++ // text, we need to copy them as bytes before using it as a struct.
++ for (i = 0; i < proplen; ++i)
++ {
++ mch_memmove(&tmp_prop, props + i * sizeof(proptype_T),
++ sizeof(proptype_T));
++ if (tmp_prop.tp_col >= col)
++ break;
++ }
++ newprops = newtext + textlen;
++ if (i > 0)
++ mch_memmove(newprops, props, sizeof(textprop_T) * i);
++
++ tmp_prop.tp_col = col;
++ tmp_prop.tp_len = length;
++ tmp_prop.tp_id = id;
++ tmp_prop.tp_type = type->pt_id;
++ tmp_prop.tp_flags = 0;
++ mch_memmove(newprops + i * sizeof(textprop_T), &tmp_prop,
++ sizeof(textprop_T));
++
++ if (i < proplen)
++ mch_memmove(newprops + (i + 1) * sizeof(textprop_T),
++ props + i * sizeof(textprop_T),
++ sizeof(textprop_T) * (proplen - i));
++
++ if (buf->b_ml.ml_flags & ML_LINE_DIRTY)
++ vim_free(buf->b_ml.ml_line_ptr);
++ buf->b_ml.ml_line_ptr = newtext;
++ buf->b_ml.ml_line_len += sizeof(textprop_T);
++ buf->b_ml.ml_flags |= ML_LINE_DIRTY;
++
++ redraw_buf_later(buf, NOT_VALID);
++ }
++
++ /*
++ * Return TRUE if any text properties are defined globally or for buffer
++ * 'buf".
++ */
++ int
++ has_any_text_properties(buf_T *buf)
++ {
++ return buf->b_proptypes != NULL || global_proptypes != NULL;
++ }
++
++ /*
++ * Fetch the text properties for line "lnum" in buffer 'buf".
++ * Returns the number of text properties and, when non-zero, a pointer to the
++ * first one in "props" (note that it is not aligned, therefore the char_u
++ * pointer).
++ */
++ int
++ get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change)
++ {
++ char_u *text;
++ size_t textlen;
++ size_t proplen;
++
++ // Be quick when no text property types are defined.
++ if (!has_any_text_properties(buf))
++ return 0;
++
++ // Fetch the line to get the ml_line_len field updated.
++ text = ml_get_buf(buf, lnum, will_change);
++ textlen = STRLEN(text) + 1;
++ proplen = buf->b_ml.ml_line_len - textlen;
++ if (proplen % sizeof(textprop_T) != 0)
++ {
++ IEMSG(_("E967: text property info corrupted"));
++ return 0;
++ }
++ if (proplen > 0)
++ *props = text + textlen;
++ return proplen / sizeof(textprop_T);
++ }
++
++ static proptype_T *
++ find_type_by_id(hashtab_T *ht, int id)
++ {
++ long todo;
++ hashitem_T *hi;
++
++ if (ht == NULL)
++ return NULL;
++
++ // TODO: Make this faster by keeping a list of types sorted on ID and use
++ // a binary search.
++
++ todo = (long)ht->ht_used;
++ for (hi = ht->ht_array; todo > 0; ++hi)
++ {
++ if (!HASHITEM_EMPTY(hi))
++ {
++ proptype_T *prop = HI2PT(hi);
++
++ if (prop->pt_id == id)
++ return prop;
++ --todo;
++ }
++ }
++ return NULL;
++ }
++
++ /*
++ * Find a property type by ID in "buf" or globally.
++ * Returns NULL if not found.
++ */
++ proptype_T *
++ text_prop_type_by_id(buf_T *buf, int id)
++ {
++ proptype_T *type;
++
++ type = find_type_by_id(buf->b_proptypes, id);
++ if (type == NULL)
++ type = find_type_by_id(global_proptypes, id);
++ return type;
++ }
++
++ /*
++ * prop_clear({lnum} [, {lnum_end} [, {bufnr}]])
++ */
++ void
++ f_prop_clear(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ linenr_T start = get_tv_number(&argvars[0]);
++ linenr_T end = start;
++ linenr_T lnum;
++ buf_T *buf = curbuf;
++
++ if (argvars[1].v_type != VAR_UNKNOWN)
++ {
++ end = get_tv_number(&argvars[1]);
++ if (argvars[2].v_type != VAR_UNKNOWN)
++ {
++ if (get_bufnr_from_arg(&argvars[2], &buf) == FAIL)
++ return;
++ }
++ }
++ if (start < 1 || end < 1)
++ {
++ EMSG(_(e_invrange));
++ return;
++ }
++
++ for (lnum = start; lnum <= end; ++lnum)
++ {
++ char_u *text;
++ size_t len;
++
++ if (lnum > buf->b_ml.ml_line_count)
++ break;
++ text = ml_get_buf(buf, lnum, FALSE);
++ len = STRLEN(text) + 1;
++ if ((size_t)buf->b_ml.ml_line_len > len)
++ {
++ if (!(buf->b_ml.ml_flags & ML_LINE_DIRTY))
++ {
++ char_u *newtext = vim_strsave(text);
++
++ // need to allocate the line now
++ if (newtext == NULL)
++ return;
++ buf->b_ml.ml_line_ptr = newtext;
++ buf->b_ml.ml_flags |= ML_LINE_DIRTY;
++ }
++ buf->b_ml.ml_line_len = len;
++ }
++ }
++ redraw_buf_later(buf, NOT_VALID);
++ }
++
++ /*
++ * prop_list({lnum} [, {bufnr}])
++ */
++ void
++ f_prop_list(typval_T *argvars, typval_T *rettv)
++ {
++ linenr_T lnum = get_tv_number(&argvars[0]);
++ buf_T *buf = curbuf;
++
++ if (argvars[1].v_type != VAR_UNKNOWN)
++ {
++ if (get_bufnr_from_arg(&argvars[1], &buf) == FAIL)
++ return;
++ }
++ if (lnum < 1 || lnum > buf->b_ml.ml_line_count)
++ {
++ EMSG(_(e_invrange));
++ return;
++ }
++
++ if (rettv_list_alloc(rettv) == OK)
++ {
++ char_u *text = ml_get_buf(buf, lnum, FALSE);
++ size_t textlen = STRLEN(text) + 1;
++ int count = (buf->b_ml.ml_line_len - textlen)
++ / sizeof(textprop_T);
++ int i;
++ textprop_T prop;
++ proptype_T *pt;
++
++ for (i = 0; i < count; ++i)
++ {
++ dict_T *d = dict_alloc();
++
++ if (d == NULL)
++ break;
++ mch_memmove(&prop, text + textlen + i * sizeof(textprop_T),
++ sizeof(textprop_T));
++ dict_add_number(d, "col", prop.tp_col);
++ dict_add_number(d, "length", prop.tp_len);
++ dict_add_number(d, "id", prop.tp_id);
++ dict_add_number(d, "start", !(prop.tp_flags & TP_FLAG_CONT_PREV));
++ dict_add_number(d, "end", !(prop.tp_flags & TP_FLAG_CONT_NEXT));
++ pt = text_prop_type_by_id(buf, prop.tp_type);
++ if (pt != NULL)
++ dict_add_string(d, "type", pt->pt_name);
++
++ list_append_dict(rettv->vval.v_list, d);
++ }
++ }
++ }
++
++ /*
++ * prop_remove({props} [, {lnum} [, {lnum_end}]])
++ */
++ void
++ f_prop_remove(typval_T *argvars, typval_T *rettv)
++ {
++ linenr_T start = 1;
++ linenr_T end = 0;
++ linenr_T lnum;
++ dict_T *dict;
++ buf_T *buf = curbuf;
++ dictitem_T *di;
++ int do_all = FALSE;
++ int id = -1;
++ int type_id = -1;
++
++ rettv->vval.v_number = 0;
++ if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL)
++ {
++ EMSG(_(e_invarg));
++ return;
++ }
++
++ if (argvars[1].v_type != VAR_UNKNOWN)
++ {
++ start = get_tv_number(&argvars[1]);
++ end = start;
++ if (argvars[2].v_type != VAR_UNKNOWN)
++ end = get_tv_number(&argvars[2]);
++ if (start < 1 || end < 1)
++ {
++ EMSG(_(e_invrange));
++ return;
++ }
++ }
++
++ dict = argvars[0].vval.v_dict;
++ di = dict_find(dict, (char_u *)"bufnr", -1);
++ if (di != NULL)
++ {
++ buf = get_buf_tv(&di->di_tv, FALSE);
++ if (buf == NULL)
++ return;
++ }
++
++ di = dict_find(dict, (char_u*)"all", -1);
++ if (di != NULL)
++ do_all = get_dict_number(dict, (char_u *)"all");
++
++ if (dict_find(dict, (char_u *)"id", -1) != NULL)
++ id = get_dict_number(dict, (char_u *)"id");
++ if (dict_find(dict, (char_u *)"type", -1))
++ {
++ char_u *name = get_dict_string(dict, (char_u *)"type", FALSE);
++ proptype_T *type = lookup_prop_type(name, buf);
++
++ if (type == NULL)
++ return;
++ type_id = type->pt_id;
++ }
++ if (id == -1 && type_id == -1)
++ {
++ EMSG(_("E968: Need at least one of 'id' or 'type'"));
++ return;
++ }
++
++ if (end == 0)
++ end = buf->b_ml.ml_line_count;
++ for (lnum = start; lnum <= end; ++lnum)
++ {
++ char_u *text;
++ size_t len;
++
++ if (lnum > buf->b_ml.ml_line_count)
++ break;
++ text = ml_get_buf(buf, lnum, FALSE);
++ len = STRLEN(text) + 1;
++ if ((size_t)buf->b_ml.ml_line_len > len)
++ {
++ static textprop_T textprop; // static because of alignment
++ unsigned idx;
++
++ for (idx = 0; idx < (buf->b_ml.ml_line_len - len)
++ / sizeof(textprop_T); ++idx)
++ {
++ char_u *cur_prop = buf->b_ml.ml_line_ptr + len
++ + idx * sizeof(textprop_T);
++ size_t taillen;
++
++ mch_memmove(&textprop, cur_prop, sizeof(textprop_T));
++ if (textprop.tp_id == id || textprop.tp_type == type_id)
++ {
++ if (!(buf->b_ml.ml_flags & ML_LINE_DIRTY))
++ {
++ char_u *newptr = alloc(buf->b_ml.ml_line_len);
++
++ // need to allocate the line to be able to change it
++ if (newptr == NULL)
++ return;
++ mch_memmove(newptr, buf->b_ml.ml_line_ptr,
++ buf->b_ml.ml_line_len);
++ buf->b_ml.ml_line_ptr = newptr;
++ curbuf->b_ml.ml_flags |= ML_LINE_DIRTY;
++ }
++
++ taillen = buf->b_ml.ml_line_len - len
++ - (idx + 1) * sizeof(textprop_T);
++ if (taillen > 0)
++ mch_memmove(cur_prop, cur_prop + sizeof(textprop_T),
++ taillen);
++ buf->b_ml.ml_line_len -= sizeof(textprop_T);
++ --idx;
++
++ ++rettv->vval.v_number;
++ if (!do_all)
++ break;
++ }
++ }
++ }
++ }
++ redraw_buf_later(buf, NOT_VALID);
++ }
++
++ /*
++ * Common for f_prop_type_add() and f_prop_type_change().
++ */
++ void
++ prop_type_set(typval_T *argvars, int add)
++ {
++ char_u *name;
++ buf_T *buf = NULL;
++ dict_T *dict;
++ dictitem_T *di;
++ proptype_T *prop;
++
++ name = get_tv_string(&argvars[0]);
++ if (*name == NUL)
++ {
++ EMSG(_(e_invarg));
++ return;
++ }
++
++ if (get_bufnr_from_arg(&argvars[1], &buf) == FAIL)
++ return;
++ dict = argvars[1].vval.v_dict;
++
++ prop = find_prop(name, buf);
++ if (add)
++ {
++ hashtab_T **htp;
++
++ if (prop != NULL)
++ {
++ EMSG2(_("E969: Property type %s already defined"), name);
++ return;
++ }
++ prop = (proptype_T *)alloc_clear(sizeof(proptype_T) + STRLEN(name));
++ if (prop == NULL)
++ return;
++ STRCPY(prop->pt_name, name);
++ prop->pt_id = ++proptype_id;
++ htp = buf == NULL ? &global_proptypes : &buf->b_proptypes;
++ if (*htp == NULL)
++ {
++ *htp = (hashtab_T *)alloc(sizeof(hashtab_T));
++ if (*htp == NULL)
++ return;
++ hash_init(*htp);
++ }
++ hash_add(buf == NULL ? global_proptypes : buf->b_proptypes,
++ PT2HIKEY(prop));
++ }
++ else
++ {
++ if (prop == NULL)
++ {
++ EMSG2(_(e_type_not_exist), name);
++ return;
++ }
++ }
++
++ if (dict != NULL)
++ {
++ di = dict_find(dict, (char_u *)"highlight", -1);
++ if (di != NULL)
++ {
++ char_u *highlight;
++ int hl_id = 0;
++
++ highlight = get_dict_string(dict, (char_u *)"highlight", TRUE);
++ if (highlight != NULL && *highlight != NUL)
++ hl_id = syn_name2id(highlight);
++ if (hl_id <= 0)
++ {
++ EMSG2(_("E970: Unknown highlight group name: '%s'"),
++ highlight == NULL ? (char_u *)"" : highlight);
++ return;
++ }
++ prop->pt_hl_id = hl_id;
++ }
++
++ di = dict_find(dict, (char_u *)"priority", -1);
++ if (di != NULL)
++ prop->pt_priority = get_tv_number(&di->di_tv);
++
++ di = dict_find(dict, (char_u *)"start_incl", -1);
++ if (di != NULL)
++ {
++ if (get_tv_number(&di->di_tv))
++ prop->pt_flags |= PT_FLAG_INS_START_INCL;
++ else
++ prop->pt_flags &= ~PT_FLAG_INS_START_INCL;
++ }
++
++ di = dict_find(dict, (char_u *)"end_incl", -1);
++ if (di != NULL)
++ {
++ if (get_tv_number(&di->di_tv))
++ prop->pt_flags |= PT_FLAG_INS_END_INCL;
++ else
++ prop->pt_flags &= ~PT_FLAG_INS_END_INCL;
++ }
++ }
++ }
++
++ /*
++ * prop_type_add({name}, {props})
++ */
++ void
++ f_prop_type_add(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ prop_type_set(argvars, TRUE);
++ }
++
++ /*
++ * prop_type_change({name}, {props})
++ */
++ void
++ f_prop_type_change(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ prop_type_set(argvars, FALSE);
++ }
++
++ /*
++ * prop_type_delete({name} [, {bufnr}])
++ */
++ void
++ f_prop_type_delete(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ char_u *name;
++ buf_T *buf = NULL;
++ hashitem_T *hi;
++
++ name = get_tv_string(&argvars[0]);
++ if (*name == NUL)
++ {
++ EMSG(_(e_invarg));
++ return;
++ }
++
++ if (argvars[1].v_type != VAR_UNKNOWN)
++ {
++ if (get_bufnr_from_arg(&argvars[1], &buf) == FAIL)
++ return;
++ }
++
++ hi = find_prop_hi(name, buf);
++ if (hi != NULL)
++ {
++ hashtab_T *ht;
++
++ if (buf == NULL)
++ ht = global_proptypes;
++ else
++ ht = buf->b_proptypes;
++ hash_remove(ht, hi);
++ }
++ }
++
++ /*
++ * prop_type_get({name} [, {bufnr}])
++ */
++ void
++ f_prop_type_get(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ char_u *name = get_tv_string(&argvars[0]);
++
++ if (*name == NUL)
++ {
++ EMSG(_(e_invarg));
++ return;
++ }
++ if (rettv_dict_alloc(rettv) == OK)
++ {
++ proptype_T *prop = NULL;
++ buf_T *buf = NULL;
++
++ if (argvars[1].v_type != VAR_UNKNOWN)
++ {
++ if (get_bufnr_from_arg(&argvars[1], &buf) == FAIL)
++ return;
++ }
++
++ prop = find_prop(name, buf);
++ if (prop != NULL)
++ {
++ dict_T *d = rettv->vval.v_dict;
++
++ if (prop->pt_hl_id > 0)
++ dict_add_string(d, "highlight", syn_id2name(prop->pt_hl_id));
++ dict_add_number(d, "priority", prop->pt_priority);
++ dict_add_number(d, "start_incl",
++ (prop->pt_flags & PT_FLAG_INS_START_INCL) ? 1 : 0);
++ dict_add_number(d, "end_incl",
++ (prop->pt_flags & PT_FLAG_INS_END_INCL) ? 1 : 0);
++ if (buf != NULL)
++ dict_add_number(d, "bufnr", buf->b_fnum);
++ }
++ }
++ }
++
++ static void
++ list_types(hashtab_T *ht, list_T *l)
++ {
++ long todo;
++ hashitem_T *hi;
++
++ todo = (long)ht->ht_used;
++ for (hi = ht->ht_array; todo > 0; ++hi)
++ {
++ if (!HASHITEM_EMPTY(hi))
++ {
++ proptype_T *prop = HI2PT(hi);
++
++ list_append_string(l, prop->pt_name, -1);
++ --todo;
++ }
++ }
++ }
++
++ /*
++ * prop_type_list([{bufnr}])
++ */
++ void
++ f_prop_type_list(typval_T *argvars, typval_T *rettv UNUSED)
++ {
++ buf_T *buf = NULL;
++
++ if (rettv_list_alloc(rettv) == OK)
++ {
++ if (argvars[0].v_type != VAR_UNKNOWN)
++ {
++ if (get_bufnr_from_arg(&argvars[0], &buf) == FAIL)
++ return;
++ }
++ if (buf == NULL)
++ {
++ if (global_proptypes != NULL)
++ list_types(global_proptypes, rettv->vval.v_list);
++ }
++ else if (buf->b_proptypes != NULL)
++ list_types(buf->b_proptypes, rettv->vval.v_list);
++ }
++ }
++
++ /*
++ * Free all property types in "ht".
++ */
++ static void
++ clear_ht_prop_types(hashtab_T *ht)
++ {
++ long todo;
++ hashitem_T *hi;
++
++ if (ht == NULL)
++ return;
++
++ todo = (long)ht->ht_used;
++ for (hi = ht->ht_array; todo > 0; ++hi)
++ {
++ if (!HASHITEM_EMPTY(hi))
++ {
++ proptype_T *prop = HI2PT(hi);
++
++ vim_free(prop);
++ --todo;
++ }
++ }
++
++ hash_clear(ht);
++ vim_free(ht);
++ }
++
++ #if defined(EXITFREE) || defined(PROTO)
++ /*
++ * Free all property types for "buf".
++ */
++ void
++ clear_global_prop_types(void)
++ {
++ clear_ht_prop_types(global_proptypes);
++ global_proptypes = NULL;
++ }
++ #endif
++
++ /*
++ * Free all property types for "buf".
++ */
++ void
++ clear_buf_prop_types(buf_T *buf)
++ {
++ clear_ht_prop_types(buf->b_proptypes);
++ buf->b_proptypes = NULL;
++ }
++
++ #endif // FEAT_TEXT_PROP
+*** ../vim-8.1.0578/src/userfunc.c 2018-11-10 17:33:23.087518814 +0100
+--- src/userfunc.c 2018-12-13 20:24:32.174552670 +0100
+***************
+*** 25,31 ****
+
+ /* From user function to hashitem and back. */
+ #define UF2HIKEY(fp) ((fp)->uf_name)
+! #define HIKEY2UF(p) ((ufunc_T *)(p - offsetof(ufunc_T, uf_name)))
+ #define HI2UF(hi) HIKEY2UF((hi)->hi_key)
+
+ #define FUNCARG(fp, j) ((char_u **)(fp->uf_args.ga_data))[j]
+--- 25,31 ----
+
+ /* From user function to hashitem and back. */
+ #define UF2HIKEY(fp) ((fp)->uf_name)
+! #define HIKEY2UF(p) ((ufunc_T *)((p) - offsetof(ufunc_T, uf_name)))
+ #define HI2UF(hi) HIKEY2UF((hi)->hi_key)
+
+ #define FUNCARG(fp, j) ((char_u **)(fp->uf_args.ga_data))[j]
+*** ../vim-8.1.0578/src/version.c 2018-12-12 20:34:06.076356104 +0100
+--- src/version.c 2018-12-13 20:39:19.480983935 +0100
+***************
+*** 653,664 ****
+ # else
+ "-terminfo",
+ # endif
+- #else /* unix always includes termcap support */
+- # ifdef HAVE_TGETENT
+- "+tgetent",
+- # else
+- "-tgetent",
+- # endif
+ #endif
+ #ifdef FEAT_TERMRESPONSE
+ "+termresponse",
+--- 653,658 ----
+***************
+*** 670,675 ****
+--- 664,682 ----
+ #else
+ "-textobjects",
+ #endif
++ #ifdef FEAT_TEXT_PROP
++ "+textprop",
++ #else
++ "-textprop",
++ #endif
++ #if !defined(UNIX)
++ /* unix always includes termcap support */
++ # ifdef HAVE_TGETENT
++ "+tgetent",
++ # else
++ "-tgetent",
++ # endif
++ #endif
+ #ifdef FEAT_TIMERS
+ "+timers",
+ #else
+*** ../vim-8.1.0578/src/version.c 2018-12-12 20:34:06.076356104 +0100
+--- src/version.c 2018-12-13 20:39:19.480983935 +0100
+***************
+*** 794,795 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 579,
+ /**/
+
+--
+EXPERIENCE - experience is a wonderful thing. It enables you to
+recognise a mistake when you make it again.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0580 b/data/vim/patches/8.1.0580
new file mode 100644
index 000000000..ffe1d0482
--- /dev/null
+++ b/data/vim/patches/8.1.0580
@@ -0,0 +1,52 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0580
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0580
+Problem: Invalid memory access when using text properties.
+Solution: Disable text properties for now.
+Files: src/feature.h
+
+
+*** ../vim-8.1.0579/src/feature.h 2018-12-13 22:17:52.877941474 +0100
+--- src/feature.h 2018-12-13 23:03:59.425680637 +0100
+***************
+*** 505,511 ****
+ * +textprop Text properties
+ */
+ #if defined(FEAT_EVAL) && defined(FEAT_SYN_HL)
+! # define FEAT_TEXT_PROP
+ #endif
+
+ /*
+--- 505,511 ----
+ * +textprop Text properties
+ */
+ #if defined(FEAT_EVAL) && defined(FEAT_SYN_HL)
+! // # define FEAT_TEXT_PROP
+ #endif
+
+ /*
+*** ../vim-8.1.0579/src/version.c 2018-12-13 23:05:42.580896679 +0100
+--- src/version.c 2018-12-13 22:42:18.650320782 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 580,
+ /**/
+
+--
+It doesn't really matter what you are able to do if you don't do it.
+ (Bram Moolenaar)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0581 b/data/vim/patches/8.1.0581
new file mode 100644
index 000000000..8b5586a94
--- /dev/null
+++ b/data/vim/patches/8.1.0581
@@ -0,0 +1,57 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0581
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0581
+Problem: Double free without the text properties feature.
+Solution: Reset the dirty flag.
+Files: src/memline.c
+
+
+*** ../vim-8.1.0580/src/memline.c 2018-12-13 22:17:52.877941474 +0100
+--- src/memline.c 2018-12-13 23:12:29.129964078 +0100
+***************
+*** 3176,3184 ****
+ {
+ // another line is buffered, flush it
+ ml_flush_line(curbuf);
+
+ #ifdef FEAT_TEXT_PROP
+- curbuf->b_ml.ml_flags &= ~ML_LINE_DIRTY;
+ if (has_any_text_properties(curbuf))
+ // Need to fetch the old line to copy over any text properties.
+ ml_get_buf(curbuf, lnum, TRUE);
+--- 3176,3184 ----
+ {
+ // another line is buffered, flush it
+ ml_flush_line(curbuf);
++ curbuf->b_ml.ml_flags &= ~ML_LINE_DIRTY;
+
+ #ifdef FEAT_TEXT_PROP
+ if (has_any_text_properties(curbuf))
+ // Need to fetch the old line to copy over any text properties.
+ ml_get_buf(curbuf, lnum, TRUE);
+*** ../vim-8.1.0580/src/version.c 2018-12-13 23:05:52.740820586 +0100
+--- src/version.c 2018-12-13 23:15:49.320578507 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 581,
+ /**/
+
+--
+No engineer can take a shower without wondering if some sort of Teflon coating
+would make showering unnecessary.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0582 b/data/vim/patches/8.1.0582
new file mode 100644
index 000000000..24c9c1f50
--- /dev/null
+++ b/data/vim/patches/8.1.0582
@@ -0,0 +1,217 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0582
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0582
+Problem: Text properties are not enabled.
+Solution: Fix sizeof argument and re-enable the text properties feature.
+ Fix memory leak.
+Files: src/feature.h, src/textprop.c
+
+
+*** ../vim-8.1.0581/src/feature.h 2018-12-13 23:05:52.740820586 +0100
+--- src/feature.h 2018-12-13 23:20:19.014745889 +0100
+***************
+*** 505,511 ****
+ * +textprop Text properties
+ */
+ #if defined(FEAT_EVAL) && defined(FEAT_SYN_HL)
+! // # define FEAT_TEXT_PROP
+ #endif
+
+ /*
+--- 505,511 ----
+ * +textprop Text properties
+ */
+ #if defined(FEAT_EVAL) && defined(FEAT_SYN_HL)
+! # define FEAT_TEXT_PROP
+ #endif
+
+ /*
+*** ../vim-8.1.0581/src/textprop.c 2018-12-13 22:17:52.881941445 +0100
+--- src/textprop.c 2018-12-14 12:03:01.498830663 +0100
+***************
+*** 151,157 ****
+ size_t textlen;
+ char_u *props;
+ char_u *newprops;
+! static textprop_T tmp_prop; // static to get it aligned.
+ int i;
+
+ lnum = get_tv_number(&argvars[0]);
+--- 151,157 ----
+ size_t textlen;
+ char_u *props;
+ char_u *newprops;
+! textprop_T tmp_prop;
+ int i;
+
+ lnum = get_tv_number(&argvars[0]);
+***************
+*** 212,219 ****
+
+ // Fetch the line to get the ml_line_len field updated.
+ proplen = get_text_props(buf, lnum, &props, TRUE);
+
+! if (col >= (colnr_T)STRLEN(buf->b_ml.ml_line_ptr))
+ {
+ EMSGN(_(e_invalid_col), (long)col);
+ return;
+--- 212,220 ----
+
+ // Fetch the line to get the ml_line_len field updated.
+ proplen = get_text_props(buf, lnum, &props, TRUE);
++ textlen = buf->b_ml.ml_line_len - proplen * sizeof(textprop_T);
+
+! if (col >= (colnr_T)textlen - 1)
+ {
+ EMSGN(_(e_invalid_col), (long)col);
+ return;
+***************
+*** 224,230 ****
+ if (newtext == NULL)
+ return;
+ // Copy the text, including terminating NUL.
+- textlen = buf->b_ml.ml_line_len - proplen * sizeof(textprop_T);
+ mch_memmove(newtext, buf->b_ml.ml_line_ptr, textlen);
+
+ // Find the index where to insert the new property.
+--- 225,230 ----
+***************
+*** 232,239 ****
+ // text, we need to copy them as bytes before using it as a struct.
+ for (i = 0; i < proplen; ++i)
+ {
+! mch_memmove(&tmp_prop, props + i * sizeof(proptype_T),
+! sizeof(proptype_T));
+ if (tmp_prop.tp_col >= col)
+ break;
+ }
+--- 232,239 ----
+ // text, we need to copy them as bytes before using it as a struct.
+ for (i = 0; i < proplen; ++i)
+ {
+! mch_memmove(&tmp_prop, props + i * sizeof(textprop_T),
+! sizeof(textprop_T));
+ if (tmp_prop.tp_col >= col)
+ break;
+ }
+***************
+*** 274,280 ****
+ }
+
+ /*
+! * Fetch the text properties for line "lnum" in buffer 'buf".
+ * Returns the number of text properties and, when non-zero, a pointer to the
+ * first one in "props" (note that it is not aligned, therefore the char_u
+ * pointer).
+--- 274,280 ----
+ }
+
+ /*
+! * Fetch the text properties for line "lnum" in buffer "buf".
+ * Returns the number of text properties and, when non-zero, a pointer to the
+ * first one in "props" (note that it is not aligned, therefore the char_u
+ * pointer).
+***************
+*** 617,627 ****
+ {
+ *htp = (hashtab_T *)alloc(sizeof(hashtab_T));
+ if (*htp == NULL)
+ return;
+ hash_init(*htp);
+ }
+! hash_add(buf == NULL ? global_proptypes : buf->b_proptypes,
+! PT2HIKEY(prop));
+ }
+ else
+ {
+--- 617,629 ----
+ {
+ *htp = (hashtab_T *)alloc(sizeof(hashtab_T));
+ if (*htp == NULL)
++ {
++ vim_free(prop);
+ return;
++ }
+ hash_init(*htp);
+ }
+! hash_add(*htp, PT2HIKEY(prop));
+ }
+ else
+ {
+***************
+*** 640,646 ****
+ char_u *highlight;
+ int hl_id = 0;
+
+! highlight = get_dict_string(dict, (char_u *)"highlight", TRUE);
+ if (highlight != NULL && *highlight != NUL)
+ hl_id = syn_name2id(highlight);
+ if (hl_id <= 0)
+--- 642,648 ----
+ char_u *highlight;
+ int hl_id = 0;
+
+! highlight = get_dict_string(dict, (char_u *)"highlight", FALSE);
+ if (highlight != NULL && *highlight != NUL)
+ hl_id = syn_name2id(highlight);
+ if (hl_id <= 0)
+***************
+*** 721,732 ****
+--- 723,736 ----
+ if (hi != NULL)
+ {
+ hashtab_T *ht;
++ proptype_T *prop = HI2PT(hi);
+
+ if (buf == NULL)
+ ht = global_proptypes;
+ else
+ ht = buf->b_proptypes;
+ hash_remove(ht, hi);
++ vim_free(prop);
+ }
+ }
+
+***************
+*** 846,852 ****
+
+ #if defined(EXITFREE) || defined(PROTO)
+ /*
+! * Free all property types for "buf".
+ */
+ void
+ clear_global_prop_types(void)
+--- 850,856 ----
+
+ #if defined(EXITFREE) || defined(PROTO)
+ /*
+! * Free all global property types.
+ */
+ void
+ clear_global_prop_types(void)
+*** ../vim-8.1.0581/src/version.c 2018-12-13 23:16:32.808280772 +0100
+--- src/version.c 2018-12-14 11:56:24.389414251 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 582,
+ /**/
+
+--
+Normal people believe that if it ain't broke, don't fix it. Engineers believe
+that if it ain't broke, it doesn't have enough features yet.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0583 b/data/vim/patches/8.1.0583
new file mode 100644
index 000000000..fb0d77e18
--- /dev/null
+++ b/data/vim/patches/8.1.0583
@@ -0,0 +1,639 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0583
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0583
+Problem: Using illogical name for get_dict_number()/get_dict_string().
+Solution: Rename to start with dict_.
+Files: src/dict.c, src/proto/dict.pro, src/edit.c, src/eval.c,
+ src/evalfunc.c, src/quickfix.c, src/tag.c, src/terminal.c,
+ src/textprop.c
+
+
+*** ../vim-8.1.0582/src/dict.c 2018-11-11 15:20:32.432704446 +0100
+--- src/dict.c 2018-12-14 15:33:01.734097359 +0100
+***************
+*** 487,493 ****
+ * Returns NULL if the entry doesn't exist or out of memory.
+ */
+ char_u *
+! get_dict_string(dict_T *d, char_u *key, int save)
+ {
+ dictitem_T *di;
+ char_u *s;
+--- 487,493 ----
+ * Returns NULL if the entry doesn't exist or out of memory.
+ */
+ char_u *
+! dict_get_string(dict_T *d, char_u *key, int save)
+ {
+ dictitem_T *di;
+ char_u *s;
+***************
+*** 506,512 ****
+ * Returns 0 if the entry doesn't exist.
+ */
+ varnumber_T
+! get_dict_number(dict_T *d, char_u *key)
+ {
+ dictitem_T *di;
+
+--- 506,512 ----
+ * Returns 0 if the entry doesn't exist.
+ */
+ varnumber_T
+! dict_get_number(dict_T *d, char_u *key)
+ {
+ dictitem_T *di;
+
+***************
+*** 583,589 ****
+ * Return OK or FAIL. Returns NOTDONE for {expr}.
+ */
+ int
+! get_dict_tv(char_u **arg, typval_T *rettv, int evaluate)
+ {
+ dict_T *d = NULL;
+ typval_T tvkey;
+--- 583,589 ----
+ * Return OK or FAIL. Returns NOTDONE for {expr}.
+ */
+ int
+! dict_get_tv(char_u **arg, typval_T *rettv, int evaluate)
+ {
+ dict_T *d = NULL;
+ typval_T tvkey;
+*** ../vim-8.1.0582/src/proto/dict.pro 2018-11-11 15:20:32.436704418 +0100
+--- src/proto/dict.pro 2018-12-14 15:33:24.053920604 +0100
+***************
+*** 19,28 ****
+ int dict_add_dict(dict_T *d, char *key, dict_T *dict);
+ long dict_len(dict_T *d);
+ dictitem_T *dict_find(dict_T *d, char_u *key, int len);
+! char_u *get_dict_string(dict_T *d, char_u *key, int save);
+! varnumber_T get_dict_number(dict_T *d, char_u *key);
+ char_u *dict2string(typval_T *tv, int copyID, int restore_copyID);
+! int get_dict_tv(char_u **arg, typval_T *rettv, int evaluate);
+ void dict_extend(dict_T *d1, dict_T *d2, char_u *action);
+ dictitem_T *dict_lookup(hashitem_T *hi);
+ int dict_equal(dict_T *d1, dict_T *d2, int ic, int recursive);
+--- 19,28 ----
+ int dict_add_dict(dict_T *d, char *key, dict_T *dict);
+ long dict_len(dict_T *d);
+ dictitem_T *dict_find(dict_T *d, char_u *key, int len);
+! char_u *dict_get_string(dict_T *d, char_u *key, int save);
+! varnumber_T dict_get_number(dict_T *d, char_u *key);
+ char_u *dict2string(typval_T *tv, int copyID, int restore_copyID);
+! int dict_get_tv(char_u **arg, typval_T *rettv, int evaluate);
+ void dict_extend(dict_T *d1, dict_T *d2, char_u *action);
+ dictitem_T *dict_lookup(hashitem_T *hi);
+ int dict_equal(dict_T *d1, dict_T *d2, int ic, int recursive);
+*** ../vim-8.1.0582/src/edit.c 2018-12-13 22:17:52.873941502 +0100
+--- src/edit.c 2018-12-14 15:35:23.996987382 +0100
+***************
+*** 4343,4365 ****
+
+ if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
+ {
+! word = get_dict_string(tv->vval.v_dict, (char_u *)"word", FALSE);
+! cptext[CPT_ABBR] = get_dict_string(tv->vval.v_dict,
+ (char_u *)"abbr", FALSE);
+! cptext[CPT_MENU] = get_dict_string(tv->vval.v_dict,
+ (char_u *)"menu", FALSE);
+! cptext[CPT_KIND] = get_dict_string(tv->vval.v_dict,
+ (char_u *)"kind", FALSE);
+! cptext[CPT_INFO] = get_dict_string(tv->vval.v_dict,
+ (char_u *)"info", FALSE);
+! cptext[CPT_USER_DATA] = get_dict_string(tv->vval.v_dict,
+ (char_u *)"user_data", FALSE);
+! if (get_dict_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL)
+! icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
+! if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
+! adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
+! if (get_dict_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
+! aempty = get_dict_number(tv->vval.v_dict, (char_u *)"empty");
+ }
+ else
+ {
+--- 4343,4365 ----
+
+ if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
+ {
+! word = dict_get_string(tv->vval.v_dict, (char_u *)"word", FALSE);
+! cptext[CPT_ABBR] = dict_get_string(tv->vval.v_dict,
+ (char_u *)"abbr", FALSE);
+! cptext[CPT_MENU] = dict_get_string(tv->vval.v_dict,
+ (char_u *)"menu", FALSE);
+! cptext[CPT_KIND] = dict_get_string(tv->vval.v_dict,
+ (char_u *)"kind", FALSE);
+! cptext[CPT_INFO] = dict_get_string(tv->vval.v_dict,
+ (char_u *)"info", FALSE);
+! cptext[CPT_USER_DATA] = dict_get_string(tv->vval.v_dict,
+ (char_u *)"user_data", FALSE);
+! if (dict_get_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL)
+! icase = dict_get_number(tv->vval.v_dict, (char_u *)"icase");
+! if (dict_get_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
+! adup = dict_get_number(tv->vval.v_dict, (char_u *)"dup");
+! if (dict_get_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
+! aempty = dict_get_number(tv->vval.v_dict, (char_u *)"empty");
+ }
+ else
+ {
+*** ../vim-8.1.0582/src/eval.c 2018-12-05 18:43:24.485493144 +0100
+--- src/eval.c 2018-12-14 15:33:09.746033785 +0100
+***************
+*** 4063,4069 ****
+ */
+ case '{': ret = get_lambda_tv(arg, rettv, evaluate);
+ if (ret == NOTDONE)
+! ret = get_dict_tv(arg, rettv, evaluate);
+ break;
+
+ /*
+--- 4063,4069 ----
+ */
+ case '{': ret = get_lambda_tv(arg, rettv, evaluate);
+ if (ret == NOTDONE)
+! ret = dict_get_tv(arg, rettv, evaluate);
+ break;
+
+ /*
+*** ../vim-8.1.0582/src/evalfunc.c 2018-12-13 22:17:52.873941502 +0100
+--- src/evalfunc.c 2018-12-14 15:32:00.942584406 +0100
+***************
+*** 8072,8078 ****
+ }
+
+ if (dict_find(tv->vval.v_dict, (char_u *)"conceal", -1) != NULL)
+! *conceal_char = get_dict_string(tv->vval.v_dict,
+ (char_u *)"conceal", FALSE);
+
+ if ((di = dict_find(tv->vval.v_dict, (char_u *)"window", -1)) != NULL)
+--- 8072,8078 ----
+ }
+
+ if (dict_find(tv->vval.v_dict, (char_u *)"conceal", -1) != NULL)
+! *conceal_char = dict_get_string(tv->vval.v_dict,
+ (char_u *)"conceal", FALSE);
+
+ if ((di = dict_find(tv->vval.v_dict, (char_u *)"window", -1)) != NULL)
+***************
+*** 10668,10674 ****
+
+ if ((d = argvars[0].vval.v_dict) != NULL)
+ {
+! csearch = get_dict_string(d, (char_u *)"char", FALSE);
+ if (csearch != NULL)
+ {
+ #ifdef FEAT_MBYTE
+--- 10668,10674 ----
+
+ if ((d = argvars[0].vval.v_dict) != NULL)
+ {
+! csearch = dict_get_string(d, (char_u *)"char", FALSE);
+ if (csearch != NULL)
+ {
+ #ifdef FEAT_MBYTE
+***************
+*** 10922,10937 ****
+ }
+ }
+
+! group = get_dict_string(d, (char_u *)"group", TRUE);
+! priority = (int)get_dict_number(d, (char_u *)"priority");
+! id = (int)get_dict_number(d, (char_u *)"id");
+ conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
+! ? get_dict_string(d, (char_u *)"conceal", TRUE)
+ : NULL;
+ if (i == 0)
+ {
+ match_add(curwin, group,
+! get_dict_string(d, (char_u *)"pattern", FALSE),
+ priority, id, NULL, conceal);
+ }
+ else
+--- 10922,10937 ----
+ }
+ }
+
+! group = dict_get_string(d, (char_u *)"group", TRUE);
+! priority = (int)dict_get_number(d, (char_u *)"priority");
+! id = (int)dict_get_number(d, (char_u *)"id");
+ conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
+! ? dict_get_string(d, (char_u *)"conceal", TRUE)
+ : NULL;
+ if (i == 0)
+ {
+ match_add(curwin, group,
+! dict_get_string(d, (char_u *)"pattern", FALSE),
+ priority, id, NULL, conceal);
+ }
+ else
+***************
+*** 13529,13535 ****
+ return;
+ }
+ if (dict_find(dict, (char_u *)"repeat", -1) != NULL)
+! repeat = get_dict_number(dict, (char_u *)"repeat");
+ }
+
+ callback = get_callback(&argvars[1], &partial);
+--- 13529,13535 ----
+ return;
+ }
+ if (dict_find(dict, (char_u *)"repeat", -1) != NULL)
+! repeat = dict_get_number(dict, (char_u *)"repeat");
+ }
+
+ callback = get_callback(&argvars[1], &partial);
+***************
+*** 14080,14108 ****
+ else
+ {
+ if (dict_find(dict, (char_u *)"lnum", -1) != NULL)
+! curwin->w_cursor.lnum = (linenr_T)get_dict_number(dict, (char_u *)"lnum");
+ if (dict_find(dict, (char_u *)"col", -1) != NULL)
+! curwin->w_cursor.col = (colnr_T)get_dict_number(dict, (char_u *)"col");
+ #ifdef FEAT_VIRTUALEDIT
+ if (dict_find(dict, (char_u *)"coladd", -1) != NULL)
+! curwin->w_cursor.coladd = (colnr_T)get_dict_number(dict, (char_u *)"coladd");
+ #endif
+ if (dict_find(dict, (char_u *)"curswant", -1) != NULL)
+ {
+! curwin->w_curswant = (colnr_T)get_dict_number(dict, (char_u *)"curswant");
+ curwin->w_set_curswant = FALSE;
+ }
+
+ if (dict_find(dict, (char_u *)"topline", -1) != NULL)
+! set_topline(curwin, (linenr_T)get_dict_number(dict, (char_u *)"topline"));
+ #ifdef FEAT_DIFF
+ if (dict_find(dict, (char_u *)"topfill", -1) != NULL)
+! curwin->w_topfill = (int)get_dict_number(dict, (char_u *)"topfill");
+ #endif
+ if (dict_find(dict, (char_u *)"leftcol", -1) != NULL)
+! curwin->w_leftcol = (colnr_T)get_dict_number(dict, (char_u *)"leftcol");
+ if (dict_find(dict, (char_u *)"skipcol", -1) != NULL)
+! curwin->w_skipcol = (colnr_T)get_dict_number(dict, (char_u *)"skipcol");
+
+ check_cursor();
+ win_new_height(curwin, curwin->w_height);
+--- 14080,14108 ----
+ else
+ {
+ if (dict_find(dict, (char_u *)"lnum", -1) != NULL)
+! curwin->w_cursor.lnum = (linenr_T)dict_get_number(dict, (char_u *)"lnum");
+ if (dict_find(dict, (char_u *)"col", -1) != NULL)
+! curwin->w_cursor.col = (colnr_T)dict_get_number(dict, (char_u *)"col");
+ #ifdef FEAT_VIRTUALEDIT
+ if (dict_find(dict, (char_u *)"coladd", -1) != NULL)
+! curwin->w_cursor.coladd = (colnr_T)dict_get_number(dict, (char_u *)"coladd");
+ #endif
+ if (dict_find(dict, (char_u *)"curswant", -1) != NULL)
+ {
+! curwin->w_curswant = (colnr_T)dict_get_number(dict, (char_u *)"curswant");
+ curwin->w_set_curswant = FALSE;
+ }
+
+ if (dict_find(dict, (char_u *)"topline", -1) != NULL)
+! set_topline(curwin, (linenr_T)dict_get_number(dict, (char_u *)"topline"));
+ #ifdef FEAT_DIFF
+ if (dict_find(dict, (char_u *)"topfill", -1) != NULL)
+! curwin->w_topfill = (int)dict_get_number(dict, (char_u *)"topfill");
+ #endif
+ if (dict_find(dict, (char_u *)"leftcol", -1) != NULL)
+! curwin->w_leftcol = (colnr_T)dict_get_number(dict, (char_u *)"leftcol");
+ if (dict_find(dict, (char_u *)"skipcol", -1) != NULL)
+! curwin->w_skipcol = (colnr_T)dict_get_number(dict, (char_u *)"skipcol");
+
+ check_cursor();
+ win_new_height(curwin, curwin->w_height);
+*** ../vim-8.1.0582/src/quickfix.c 2018-11-16 18:45:57.864041240 +0100
+--- src/quickfix.c 2018-12-14 15:32:09.382516272 +0100
+***************
+*** 6258,6273 ****
+ if (first_entry)
+ did_bufnr_emsg = FALSE;
+
+! filename = get_dict_string(d, (char_u *)"filename", TRUE);
+! module = get_dict_string(d, (char_u *)"module", TRUE);
+! bufnum = (int)get_dict_number(d, (char_u *)"bufnr");
+! lnum = (int)get_dict_number(d, (char_u *)"lnum");
+! col = (int)get_dict_number(d, (char_u *)"col");
+! vcol = (int)get_dict_number(d, (char_u *)"vcol");
+! nr = (int)get_dict_number(d, (char_u *)"nr");
+! type = get_dict_string(d, (char_u *)"type", TRUE);
+! pattern = get_dict_string(d, (char_u *)"pattern", TRUE);
+! text = get_dict_string(d, (char_u *)"text", TRUE);
+ if (text == NULL)
+ text = vim_strsave((char_u *)"");
+
+--- 6258,6273 ----
+ if (first_entry)
+ did_bufnr_emsg = FALSE;
+
+! filename = dict_get_string(d, (char_u *)"filename", TRUE);
+! module = dict_get_string(d, (char_u *)"module", TRUE);
+! bufnum = (int)dict_get_number(d, (char_u *)"bufnr");
+! lnum = (int)dict_get_number(d, (char_u *)"lnum");
+! col = (int)dict_get_number(d, (char_u *)"col");
+! vcol = (int)dict_get_number(d, (char_u *)"vcol");
+! nr = (int)dict_get_number(d, (char_u *)"nr");
+! type = dict_get_string(d, (char_u *)"type", TRUE);
+! pattern = dict_get_string(d, (char_u *)"pattern", TRUE);
+! text = dict_get_string(d, (char_u *)"text", TRUE);
+ if (text == NULL)
+ text = vim_strsave((char_u *)"");
+
+***************
+*** 6290,6296 ****
+
+ // If the 'valid' field is present it overrules the detected value.
+ if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
+! valid = (int)get_dict_number(d, (char_u *)"valid");
+
+ status = qf_add_entry(qi,
+ qf_idx,
+--- 6290,6296 ----
+
+ // If the 'valid' field is present it overrules the detected value.
+ if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
+! valid = (int)dict_get_number(d, (char_u *)"valid");
+
+ status = qf_add_entry(qi,
+ qf_idx,
+***************
+*** 6456,6462 ****
+ return FAIL;
+
+ vim_free(qfl->qf_title);
+! qfl->qf_title = get_dict_string(what, (char_u *)"title", TRUE);
+ if (qf_idx == qi->qf_curlist)
+ qf_update_win_titlevar(qi);
+
+--- 6456,6462 ----
+ return FAIL;
+
+ vim_free(qfl->qf_title);
+! qfl->qf_title = dict_get_string(what, (char_u *)"title", TRUE);
+ if (qf_idx == qi->qf_curlist)
+ qf_update_win_titlevar(qi);
+
+*** ../vim-8.1.0582/src/tag.c 2018-11-11 15:20:32.436704418 +0100
+--- src/tag.c 2018-12-14 15:32:15.522466806 +0100
+***************
+*** 4160,4173 ****
+ if (list2fpos(&di->di_tv, &mark, &fnum, NULL) != OK)
+ continue;
+ if ((tagname =
+! get_dict_string(itemdict, (char_u *)"tagname", TRUE)) == NULL)
+ continue;
+
+ if (mark.col > 0)
+ mark.col--;
+ tagstack_push_item(wp, tagname,
+! (int)get_dict_number(itemdict, (char_u *)"bufnr"),
+! (int)get_dict_number(itemdict, (char_u *)"matchnr") - 1,
+ mark, fnum);
+ }
+ }
+--- 4160,4173 ----
+ if (list2fpos(&di->di_tv, &mark, &fnum, NULL) != OK)
+ continue;
+ if ((tagname =
+! dict_get_string(itemdict, (char_u *)"tagname", TRUE)) == NULL)
+ continue;
+
+ if (mark.col > 0)
+ mark.col--;
+ tagstack_push_item(wp, tagname,
+! (int)dict_get_number(itemdict, (char_u *)"bufnr"),
+! (int)dict_get_number(itemdict, (char_u *)"matchnr") - 1,
+ mark, fnum);
+ }
+ }
+*** ../vim-8.1.0582/src/terminal.c 2018-11-11 22:18:17.214948188 +0100
+--- src/terminal.c 2018-12-14 15:32:21.230420914 +0100
+***************
+*** 3523,3531 ****
+ dict_T *dict = opt_item->li_tv.vval.v_dict;
+ char_u *p;
+
+! p = get_dict_string(dict, (char_u *)"ff", FALSE);
+ if (p == NULL)
+! p = get_dict_string(dict, (char_u *)"fileformat", FALSE);
+ if (p != NULL)
+ {
+ if (check_ff_value(p) == FAIL)
+--- 3523,3531 ----
+ dict_T *dict = opt_item->li_tv.vval.v_dict;
+ char_u *p;
+
+! p = dict_get_string(dict, (char_u *)"ff", FALSE);
+ if (p == NULL)
+! p = dict_get_string(dict, (char_u *)"fileformat", FALSE);
+ if (p != NULL)
+ {
+ if (check_ff_value(p) == FAIL)
+***************
+*** 3533,3541 ****
+ else
+ ea.force_ff = *p;
+ }
+! p = get_dict_string(dict, (char_u *)"enc", FALSE);
+ if (p == NULL)
+! p = get_dict_string(dict, (char_u *)"encoding", FALSE);
+ if (p != NULL)
+ {
+ ea.cmd = alloc((int)STRLEN(p) + 12);
+--- 3533,3541 ----
+ else
+ ea.force_ff = *p;
+ }
+! p = dict_get_string(dict, (char_u *)"enc", FALSE);
+ if (p == NULL)
+! p = dict_get_string(dict, (char_u *)"encoding", FALSE);
+ if (p != NULL)
+ {
+ ea.cmd = alloc((int)STRLEN(p) + 12);
+***************
+*** 3547,3553 ****
+ }
+ }
+
+! p = get_dict_string(dict, (char_u *)"bad", FALSE);
+ if (p != NULL)
+ get_bad_opt(p, &ea);
+
+--- 3547,3553 ----
+ }
+ }
+
+! p = dict_get_string(dict, (char_u *)"bad", FALSE);
+ if (p != NULL)
+ get_bad_opt(p, &ea);
+
+***************
+*** 3915,3922 ****
+ d = argvars[2].vval.v_dict;
+ if (d != NULL)
+ {
+! max_height = get_dict_number(d, (char_u *)"rows");
+! max_width = get_dict_number(d, (char_u *)"columns");
+ }
+ }
+
+--- 3915,3922 ----
+ d = argvars[2].vval.v_dict;
+ if (d != NULL)
+ {
+! max_height = dict_get_number(d, (char_u *)"rows");
+! max_width = dict_get_number(d, (char_u *)"columns");
+ }
+ }
+
+*** ../vim-8.1.0582/src/textprop.c 2018-12-14 12:18:07.764091572 +0100
+--- src/textprop.c 2018-12-14 15:32:29.026358345 +0100
+***************
+*** 173,179 ****
+ EMSG(_("E965: missing property type name"));
+ return;
+ }
+! type_name = get_dict_string(dict, (char_u *)"type", FALSE);
+
+ if (dict_find(dict, (char_u *)"end_lnum", -1) != NULL)
+ {
+--- 173,179 ----
+ EMSG(_("E965: missing property type name"));
+ return;
+ }
+! type_name = dict_get_string(dict, (char_u *)"type", FALSE);
+
+ if (dict_find(dict, (char_u *)"end_lnum", -1) != NULL)
+ {
+***************
+*** 183,192 ****
+ }
+
+ if (dict_find(dict, (char_u *)"length", -1) != NULL)
+! length = get_dict_number(dict, (char_u *)"length");
+ else if (dict_find(dict, (char_u *)"end_col", -1) != NULL)
+ {
+! length = get_dict_number(dict, (char_u *)"end_col") - col;
+ if (length <= 0)
+ {
+ EMSG2(_(e_invargval), "end_col");
+--- 183,192 ----
+ }
+
+ if (dict_find(dict, (char_u *)"length", -1) != NULL)
+! length = dict_get_number(dict, (char_u *)"length");
+ else if (dict_find(dict, (char_u *)"end_col", -1) != NULL)
+ {
+! length = dict_get_number(dict, (char_u *)"end_col") - col;
+ if (length <= 0)
+ {
+ EMSG2(_(e_invargval), "end_col");
+***************
+*** 195,201 ****
+ }
+
+ if (dict_find(dict, (char_u *)"id", -1) != NULL)
+! id = get_dict_number(dict, (char_u *)"id");
+
+ if (get_bufnr_from_arg(&argvars[2], &buf) == FAIL)
+ return;
+--- 195,201 ----
+ }
+
+ if (dict_find(dict, (char_u *)"id", -1) != NULL)
+! id = dict_get_number(dict, (char_u *)"id");
+
+ if (get_bufnr_from_arg(&argvars[2], &buf) == FAIL)
+ return;
+***************
+*** 265,271 ****
+
+ /*
+ * Return TRUE if any text properties are defined globally or for buffer
+! * 'buf".
+ */
+ int
+ has_any_text_properties(buf_T *buf)
+--- 265,271 ----
+
+ /*
+ * Return TRUE if any text properties are defined globally or for buffer
+! * "buf".
+ */
+ int
+ has_any_text_properties(buf_T *buf)
+***************
+*** 498,510 ****
+
+ di = dict_find(dict, (char_u*)"all", -1);
+ if (di != NULL)
+! do_all = get_dict_number(dict, (char_u *)"all");
+
+ if (dict_find(dict, (char_u *)"id", -1) != NULL)
+! id = get_dict_number(dict, (char_u *)"id");
+ if (dict_find(dict, (char_u *)"type", -1))
+ {
+! char_u *name = get_dict_string(dict, (char_u *)"type", FALSE);
+ proptype_T *type = lookup_prop_type(name, buf);
+
+ if (type == NULL)
+--- 498,510 ----
+
+ di = dict_find(dict, (char_u*)"all", -1);
+ if (di != NULL)
+! do_all = dict_get_number(dict, (char_u *)"all");
+
+ if (dict_find(dict, (char_u *)"id", -1) != NULL)
+! id = dict_get_number(dict, (char_u *)"id");
+ if (dict_find(dict, (char_u *)"type", -1))
+ {
+! char_u *name = dict_get_string(dict, (char_u *)"type", FALSE);
+ proptype_T *type = lookup_prop_type(name, buf);
+
+ if (type == NULL)
+***************
+*** 642,648 ****
+ char_u *highlight;
+ int hl_id = 0;
+
+! highlight = get_dict_string(dict, (char_u *)"highlight", FALSE);
+ if (highlight != NULL && *highlight != NUL)
+ hl_id = syn_name2id(highlight);
+ if (hl_id <= 0)
+--- 642,648 ----
+ char_u *highlight;
+ int hl_id = 0;
+
+! highlight = dict_get_string(dict, (char_u *)"highlight", FALSE);
+ if (highlight != NULL && *highlight != NUL)
+ hl_id = syn_name2id(highlight);
+ if (hl_id <= 0)
+*** ../vim-8.1.0582/src/version.c 2018-12-14 12:18:07.768091544 +0100
+--- src/version.c 2018-12-14 15:36:12.504617009 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 583,
+ /**/
+
+--
+The average life of an organization chart is six months. You can safely
+ignore any order from your boss that would take six months to complete.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0584 b/data/vim/patches/8.1.0584
new file mode 100644
index 000000000..df29e74fa
--- /dev/null
+++ b/data/vim/patches/8.1.0584
@@ -0,0 +1,66 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0584
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0584
+Problem: With search CTRL-L does not pick up composing characters.
+Solution: Check for composing characters. (Christian Brabandt, closes #3682)
+ [code change was accidentally included in 8.1.0579]
+Files: src/testdir/test_search.vim
+
+
+*** ../vim-8.1.0583/src/testdir/test_search.vim 2018-12-01 13:14:40.883412219 +0100
+--- src/testdir/test_search.vim 2018-12-12 22:16:41.812365708 +0100
+***************
+*** 1154,1156 ****
+--- 1154,1178 ----
+
+ call delete('Xviminfo')
+ endfunc
++
++ func Test_search_Ctrl_L_combining()
++ " Make sure, that Ctrl-L works correctly with combining characters.
++ " It uses an artificial example of an 'a' with 4 combining chars:
++ " 'a' U+0061 Dec:97 LATIN SMALL LETTER A &#x61; /\%u61\Z "\u0061"
++ " ' ̀' U+0300 Dec:768 COMBINING GRAVE ACCENT &#x300; /\%u300\Z "\u0300"
++ " ' Ì' U+0301 Dec:769 COMBINING ACUTE ACCENT &#x301; /\%u301\Z "\u0301"
++ " ' ̇' U+0307 Dec:775 COMBINING DOT ABOVE &#x307; /\%u307\Z "\u0307"
++ " ' ̣' U+0323 Dec:803 COMBINING DOT BELOW &#x323; /\%u323 "\u0323"
++ " Those should also appear on the commandline
++ if !has('multi_byte') || !exists('+incsearch')
++ return
++ endif
++ call Cmdline3_prep()
++ 1
++ let bufcontent = ['', 'MiaÌ€Ị̀̇m']
++ call append('$', bufcontent)
++ call feedkeys("/Mi\<c-l>\<c-l>\<cr>", 'tx')
++ call assert_equal(5, line('.'))
++ call assert_equal(bufcontent[1], @/)
++ call Incsearch_cleanup()
++ endfunc
+*** ../vim-8.1.0583/src/version.c 2018-12-14 15:38:28.331597637 +0100
+--- src/version.c 2018-12-14 15:44:29.752975840 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 584,
+ /**/
+
+--
+Never enter the boss's office unless it's absolutely necessary. Every boss
+saves one corner of the desk for useless assignments that are doled out like
+Halloween candy to each visitor.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0585 b/data/vim/patches/8.1.0585
new file mode 100644
index 000000000..22ebd64dd
--- /dev/null
+++ b/data/vim/patches/8.1.0585
@@ -0,0 +1,53 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0585
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0585
+Problem: Undo test may fail on MS-Windows.
+Solution: Also handle lower case drive letters.
+Files: src/testdir/test_undo.vim
+
+
+*** ../vim-8.1.0584/src/testdir/test_undo.vim 2018-05-26 18:46:26.276087941 +0200
+--- src/testdir/test_undo.vim 2018-12-13 20:23:35.954899917 +0100
+***************
+*** 426,432 ****
+ let cwd = getcwd()
+ if has('win32')
+ " Replace windows drive such as C:... into C%...
+! let cwd = substitute(cwd, '^\([A-Z]\):', '\1%', 'g')
+ endif
+ let cwd = substitute(cwd . '/Xundofoo', '/', '%', 'g')
+ if has('persistent_undo')
+--- 426,432 ----
+ let cwd = getcwd()
+ if has('win32')
+ " Replace windows drive such as C:... into C%...
+! let cwd = substitute(cwd, '^\([a-zA-Z]\):', '\1%', 'g')
+ endif
+ let cwd = substitute(cwd . '/Xundofoo', '/', '%', 'g')
+ if has('persistent_undo')
+*** ../vim-8.1.0584/src/version.c 2018-12-14 15:46:59.519914793 +0100
+--- src/version.c 2018-12-14 15:48:06.983440116 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 585,
+ /**/
+
+--
+An operatingsystem is just a name you give to the rest of bloating
+idiosyncratic machine-based-features you left out of your editor.
+ (author unknown)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0586 b/data/vim/patches/8.1.0586
new file mode 100644
index 000000000..23aeae158
--- /dev/null
+++ b/data/vim/patches/8.1.0586
@@ -0,0 +1,850 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0586
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0586
+Problem: :digraph output is not easy to read.
+Solution: Add highlighting for :digraphs. (Marcin Szamotulski, closes #3572)
+ Also add section headers for :digraphs!.
+Files: src/ex_docmd.c, src/digraph.c, src/proto/digraph.pro,
+ src/ex_cmds.h, runtime/doc/digraph.txt
+
+
+*** ../vim-8.1.0585/src/ex_docmd.c 2018-12-08 16:03:18.656085902 +0100
+--- src/ex_docmd.c 2018-12-14 15:56:54.547772454 +0100
+***************
+*** 12413,12419 ****
+ if (*eap->arg != NUL)
+ putdigraph(eap->arg);
+ else
+! listdigraphs();
+ #else
+ EMSG(_("E196: No digraphs in this version"));
+ #endif
+--- 12413,12419 ----
+ if (*eap->arg != NUL)
+ putdigraph(eap->arg);
+ else
+! listdigraphs(eap->forceit);
+ #else
+ EMSG(_("E196: No digraphs in this version"));
+ #endif
+*** ../vim-8.1.0585/src/digraph.c 2018-09-30 21:43:17.179693404 +0200
+--- src/digraph.c 2018-12-14 18:49:37.198827111 +0100
+***************
+*** 28,34 ****
+ result_T result;
+ } digr_T;
+
+! static void printdigraph(digr_T *);
+
+ /* digraphs added by the user */
+ static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL};
+--- 28,34 ----
+ result_T result;
+ } digr_T;
+
+! static void printdigraph(digr_T *dp, result_T *previous);
+
+ /* digraphs added by the user */
+ static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL};
+***************
+*** 643,743 ****
+--- 643,796 ----
+ {'P', 'M', 0x9e},
+ {'A', 'C', 0x9f},
+ {'N', 'S', 0xa0},
++ #define DG_START_LATIN 0xa1
+ {'!', 'I', 0xa1},
++ {'~', '!', 0xa1}, // ¡ Vim 5.x compatible
+ {'C', 't', 0xa2},
++ {'c', '|', 0xa2}, // ¢ Vim 5.x compatible
+ {'P', 'd', 0xa3},
++ {'$', '$', 0xa3}, // £ Vim 5.x compatible
+ {'C', 'u', 0xa4},
++ {'o', 'x', 0xa4}, // ¤ Vim 5.x compatible
+ {'Y', 'e', 0xa5},
++ {'Y', '-', 0xa5}, // ¥ Vim 5.x compatible
+ {'B', 'B', 0xa6},
++ {'|', '|', 0xa6}, // ¦ Vim 5.x compatible
+ {'S', 'E', 0xa7},
+ {'\'', ':', 0xa8},
+ {'C', 'o', 0xa9},
++ {'c', 'O', 0xa9}, // © Vim 5.x compatible
+ {'-', 'a', 0xaa},
+ {'<', '<', 0xab},
+ {'N', 'O', 0xac},
++ {'-', ',', 0xac}, // ¬ Vim 5.x compatible
+ {'-', '-', 0xad},
+ {'R', 'g', 0xae},
+ {'\'', 'm', 0xaf},
++ {'-', '=', 0xaf}, // ¯ Vim 5.x compatible
+ {'D', 'G', 0xb0},
++ {'~', 'o', 0xb0}, // ° Vim 5.x compatible
+ {'+', '-', 0xb1},
+ {'2', 'S', 0xb2},
++ {'2', '2', 0xb2}, // ² Vim 5.x compatible
+ {'3', 'S', 0xb3},
++ {'3', '3', 0xb3}, // ³ Vim 5.x compatible
+ {'\'', '\'', 0xb4},
+ {'M', 'y', 0xb5},
+ {'P', 'I', 0xb6},
++ {'p', 'p', 0xb6}, // ¶ Vim 5.x compatible
+ {'.', 'M', 0xb7},
++ {'~', '.', 0xb7}, // · Vim 5.x compatible
+ {'\'', ',', 0xb8},
+ {'1', 'S', 0xb9},
++ {'1', '1', 0xb9}, // ¹ Vim 5.x compatible
+ {'-', 'o', 0xba},
+ {'>', '>', 0xbb},
+ {'1', '4', 0xbc},
+ {'1', '2', 0xbd},
+ {'3', '4', 0xbe},
+ {'?', 'I', 0xbf},
++ {'~', '?', 0xbf}, // ¿ Vim 5.x compatible
+ {'A', '!', 0xc0},
++ {'A', '`', 0xc0}, // À Vim 5.x compatible
+ {'A', '\'', 0xc1},
+ {'A', '>', 0xc2},
++ {'A', '^', 0xc2}, // Â Vim 5.x compatible
+ {'A', '?', 0xc3},
++ {'A', '~', 0xc3}, // Ã Vim 5.x compatible
+ {'A', ':', 0xc4},
++ {'A', '"', 0xc4}, // Ä Vim 5.x compatible
+ {'A', 'A', 0xc5},
++ {'A', '@', 0xc5}, // Å Vim 5.x compatible
+ {'A', 'E', 0xc6},
+ {'C', ',', 0xc7},
+ {'E', '!', 0xc8},
++ {'E', '`', 0xc8}, // È Vim 5.x compatible
+ {'E', '\'', 0xc9},
+ {'E', '>', 0xca},
++ {'E', '^', 0xca}, // Ê Vim 5.x compatible
+ {'E', ':', 0xcb},
++ {'E', '"', 0xcb}, // Ë Vim 5.x compatible
+ {'I', '!', 0xcc},
++ {'I', '`', 0xcc}, // Ì Vim 5.x compatible
+ {'I', '\'', 0xcd},
+ {'I', '>', 0xce},
++ {'I', '^', 0xce}, // Î Vim 5.x compatible
+ {'I', ':', 0xcf},
++ {'I', '"', 0xcf}, // Ï Vim 5.x compatible
+ {'D', '-', 0xd0},
+ {'N', '?', 0xd1},
++ {'N', '~', 0xd1}, // Ñ Vim 5.x compatible
+ {'O', '!', 0xd2},
++ {'O', '`', 0xd2}, // Ò Vim 5.x compatible
+ {'O', '\'', 0xd3},
+ {'O', '>', 0xd4},
++ {'O', '^', 0xd4}, // Ô Vim 5.x compatible
+ {'O', '?', 0xd5},
++ {'O', '~', 0xd5}, // Õ Vim 5.x compatible
+ {'O', ':', 0xd6},
+ {'*', 'X', 0xd7},
++ {'/', '\\', 0xd7}, // × Vim 5.x compatible
+ {'O', '/', 0xd8},
+ {'U', '!', 0xd9},
++ {'U', '`', 0xd9}, // Ù Vim 5.x compatible
+ {'U', '\'', 0xda},
+ {'U', '>', 0xdb},
++ {'U', '^', 0xdb}, // Û Vim 5.x compatible
+ {'U', ':', 0xdc},
+ {'Y', '\'', 0xdd},
+ {'T', 'H', 0xde},
++ {'I', 'p', 0xde}, // Þ Vim 5.x compatible
+ {'s', 's', 0xdf},
+ {'a', '!', 0xe0},
++ {'a', '`', 0xe0}, // à Vim 5.x compatible
+ {'a', '\'', 0xe1},
+ {'a', '>', 0xe2},
++ {'a', '^', 0xe2}, // â Vim 5.x compatible
+ {'a', '?', 0xe3},
++ {'a', '~', 0xe3}, // ã Vim 5.x compatible
+ {'a', ':', 0xe4},
++ {'a', '"', 0xe4}, // ä Vim 5.x compatible
+ {'a', 'a', 0xe5},
++ {'a', '@', 0xe5}, // å Vim 5.x compatible
+ {'a', 'e', 0xe6},
+ {'c', ',', 0xe7},
+ {'e', '!', 0xe8},
++ {'e', '`', 0xe8}, // è Vim 5.x compatible
+ {'e', '\'', 0xe9},
+ {'e', '>', 0xea},
++ {'e', '^', 0xea}, // ê Vim 5.x compatible
+ {'e', ':', 0xeb},
++ {'e', '"', 0xeb}, // ë Vim 5.x compatible
+ {'i', '!', 0xec},
++ {'i', '`', 0xec}, // ì Vim 5.x compatible
+ {'i', '\'', 0xed},
+ {'i', '>', 0xee},
++ {'i', '^', 0xee}, // î Vim 5.x compatible
+ {'i', ':', 0xef},
+ {'d', '-', 0xf0},
+ {'n', '?', 0xf1},
++ {'n', '~', 0xf1}, // ñ Vim 5.x compatible
+ {'o', '!', 0xf2},
++ {'o', '`', 0xf2}, // ò Vim 5.x compatible
+ {'o', '\'', 0xf3},
+ {'o', '>', 0xf4},
++ {'o', '^', 0xf4}, // ô Vim 5.x compatible
+ {'o', '?', 0xf5},
++ {'o', '~', 0xf5}, // õ Vim 5.x compatible
+ {'o', ':', 0xf6},
+ {'-', ':', 0xf7},
+ {'o', '/', 0xf8},
+ {'u', '!', 0xf9},
++ {'u', '`', 0xf9}, // ù Vim 5.x compatible
+ {'u', '\'', 0xfa},
+ {'u', '>', 0xfb},
++ {'u', '^', 0xfb}, // û Vim 5.x compatible
+ {'u', ':', 0xfc},
+ {'y', '\'', 0xfd},
+ {'t', 'h', 0xfe},
+ {'y', ':', 0xff},
++ {'y', '"', 0xff}, // x XX Vim 5.x compatible
+
+ # ifdef FEAT_MBYTE
+ # define USE_UNICODE_DIGRAPHS
+***************
+*** 915,920 ****
+--- 968,974 ----
+ {'\'', '0', 0x02da},
+ {'\'', ';', 0x02db},
+ {'\'', '"', 0x02dd},
++ #define DG_START_GREEK 0x0386
+ {'A', '%', 0x0386},
+ {'E', '%', 0x0388},
+ {'Y', '%', 0x0389},
+***************
+*** 996,1001 ****
+--- 1050,1056 ----
+ {'p', '3', 0x03e1},
+ {'\'', '%', 0x03f4},
+ {'j', '3', 0x03f5},
++ #define DG_START_CYRILLIC 0x0401
+ {'I', 'O', 0x0401},
+ {'D', '%', 0x0402},
+ {'G', '%', 0x0403},
+***************
+*** 1100,1105 ****
+--- 1155,1161 ----
+ {'c', '3', 0x0481},
+ {'G', '3', 0x0490},
+ {'g', '3', 0x0491},
++ #define DG_START_HEBREW 0x05d0
+ {'A', '+', 0x05d0},
+ {'B', '+', 0x05d1},
+ {'G', '+', 0x05d2},
+***************
+*** 1127,1132 ****
+--- 1183,1189 ----
+ {'R', '+', 0x05e8},
+ {'S', 'h', 0x05e9},
+ {'T', '+', 0x05ea},
++ #define DG_START_ARABIC 0x060c
+ {',', '+', 0x060c},
+ {';', '+', 0x061b},
+ {'?', '+', 0x061f},
+***************
+*** 1189,1194 ****
+--- 1246,1252 ----
+ {'7', 'a', 0x06f7},
+ {'8', 'a', 0x06f8},
+ {'9', 'a', 0x06f9},
++ #define DG_START_LATIN_EXTENDED 0x1e02
+ {'B', '.', 0x1e02},
+ {'b', '.', 0x1e03},
+ {'B', '_', 0x1e06},
+***************
+*** 1240,1246 ****
+--- 1298,1306 ----
+ {'V', '?', 0x1e7c},
+ {'v', '?', 0x1e7d},
+ {'W', '!', 0x1e80},
++ {'W', '`', 0x1e80}, // extra alternative, easier to remember
+ {'w', '!', 0x1e81},
++ {'w', '`', 0x1e81}, // extra alternative, easier to remember
+ {'W', '\'', 0x1e82},
+ {'w', '\'', 0x1e83},
+ {'W', ':', 0x1e84},
+***************
+*** 1274,1284 ****
+--- 1334,1347 ----
+ {'U', '2', 0x1ee6},
+ {'u', '2', 0x1ee7},
+ {'Y', '!', 0x1ef2},
++ {'Y', '`', 0x1ef2}, // extra alternative, easier to remember
+ {'y', '!', 0x1ef3},
++ {'y', '`', 0x1ef3}, // extra alternative, easier to remember
+ {'Y', '2', 0x1ef6},
+ {'y', '2', 0x1ef7},
+ {'Y', '?', 0x1ef8},
+ {'y', '?', 0x1ef9},
++ #define DG_START_GREEK_EXTENDED 0x1f00
+ {';', '\'', 0x1f00},
+ {',', '\'', 0x1f01},
+ {';', '!', 0x1f02},
+***************
+*** 1287,1292 ****
+--- 1350,1356 ----
+ {'?', ',', 0x1f05},
+ {'!', ':', 0x1f06},
+ {'?', ':', 0x1f07},
++ #define DG_START_PUNCTUATION 0x2002
+ {'1', 'N', 0x2002},
+ {'1', 'M', 0x2003},
+ {'3', 'M', 0x2004},
+***************
+*** 1325,1330 ****
+--- 1389,1395 ----
+ {':', 'X', 0x203b},
+ {'\'', '-', 0x203e},
+ {'/', 'f', 0x2044},
++ #define DG_START_SUB_SUPER 0x2070
+ {'0', 'S', 0x2070},
+ {'4', 'S', 0x2074},
+ {'5', 'S', 0x2075},
+***************
+*** 1353,1358 ****
+--- 1418,1424 ----
+ {'=', 's', 0x208c},
+ {'(', 's', 0x208d},
+ {')', 's', 0x208e},
++ #define DG_START_CURRENCY 0x20a4
+ {'L', 'i', 0x20a4},
+ {'P', 't', 0x20a7},
+ {'W', '=', 0x20a9},
+***************
+*** 1360,1365 ****
+--- 1426,1432 ----
+ {'E', 'u', 0x20ac}, /* euro */
+ {'=', 'R', 0x20bd}, /* rouble */
+ {'=', 'P', 0x20bd}, /* rouble */
++ #define DG_START_OTHER1 0x2103
+ {'o', 'C', 0x2103},
+ {'c', 'o', 0x2105},
+ {'o', 'F', 0x2109},
+***************
+*** 1382,1387 ****
+--- 1449,1455 ----
+ {'3', '8', 0x215c},
+ {'5', '8', 0x215d},
+ {'7', '8', 0x215e},
++ #define DG_START_ROMAN 0x2160
+ {'1', 'R', 0x2160},
+ {'2', 'R', 0x2161},
+ {'3', 'R', 0x2162},
+***************
+*** 1406,1411 ****
+--- 1474,1480 ----
+ {'a', 'r', 0x2179},
+ {'b', 'r', 0x217a},
+ {'c', 'r', 0x217b},
++ #define DG_START_ARROWS 0x2190
+ {'<', '-', 0x2190},
+ {'-', '!', 0x2191},
+ {'-', '>', 0x2192},
+***************
+*** 1415,1420 ****
+--- 1484,1490 ----
+ {'<', '=', 0x21d0},
+ {'=', '>', 0x21d2},
+ {'=', '=', 0x21d4},
++ #define DG_START_MATH 0x2200
+ {'F', 'A', 0x2200},
+ {'d', 'P', 0x2202},
+ {'T', 'E', 0x2203},
+***************
+*** 1472,1477 ****
+--- 1542,1548 ----
+ {'.', 'P', 0x22c5},
+ {':', '3', 0x22ee},
+ {'.', '3', 0x22ef},
++ #define DG_START_TECHNICAL 0x2302
+ {'E', 'h', 0x2302},
+ {'<', '7', 0x2308},
+ {'>', '7', 0x2309},
+***************
+*** 1484,1489 ****
+--- 1555,1561 ----
+ {'I', 'l', 0x2321},
+ {'<', '/', 0x2329},
+ {'/', '>', 0x232a},
++ #define DG_START_OTHER2 0x2423
+ {'V', 's', 0x2423},
+ {'1', 'h', 0x2440},
+ {'3', 'h', 0x2441},
+***************
+*** 1502,1507 ****
+--- 1574,1580 ----
+ {'7', '.', 0x248e},
+ {'8', '.', 0x248f},
+ {'9', '.', 0x2490},
++ #define DG_START_DRAWING 0x2500
+ {'h', 'h', 0x2500},
+ {'H', 'H', 0x2501},
+ {'v', 'v', 0x2502},
+***************
+*** 1552,1557 ****
+--- 1625,1631 ----
+ {'V', 'H', 0x254b},
+ {'F', 'D', 0x2571},
+ {'B', 'D', 0x2572},
++ #define DG_START_BLOCK 0x2580
+ {'T', 'B', 0x2580},
+ {'L', 'B', 0x2584},
+ {'F', 'B', 0x2588},
+***************
+*** 1560,1565 ****
+--- 1634,1640 ----
+ {'.', 'S', 0x2591},
+ {':', 'S', 0x2592},
+ {'?', 'S', 0x2593},
++ #define DG_START_SHAPES 0x25a0
+ {'f', 'S', 0x25a0},
+ {'O', 'S', 0x25a1},
+ {'R', 'O', 0x25a2},
+***************
+*** 1593,1598 ****
+--- 1668,1674 ----
+ {'I', 'c', 0x25d9},
+ {'F', 'd', 0x25e2},
+ {'B', 'd', 0x25e3},
++ #define DG_START_SYMBOLS 0x2605
+ {'*', '2', 0x2605},
+ {'*', '1', 0x2606},
+ {'<', 'H', 0x261c},
+***************
+*** 1612,1620 ****
+--- 1688,1698 ----
+ {'M', 'b', 0x266d},
+ {'M', 'x', 0x266e},
+ {'M', 'X', 0x266f},
++ #define DG_START_DINGBATS 0x2713
+ {'O', 'K', 0x2713},
+ {'X', 'X', 0x2717},
+ {'-', 'X', 0x2720},
++ #define DG_START_CJK_SYMBOLS 0x3000
+ {'I', 'S', 0x3000},
+ {',', '_', 0x3001},
+ {'.', '_', 0x3002},
+***************
+*** 1638,1643 ****
+--- 1716,1722 ----
+ {'(', 'I', 0x3016},
+ {')', 'I', 0x3017},
+ {'-', '?', 0x301c},
++ #define DG_START_HIRAGANA 0x3041
+ {'A', '5', 0x3041},
+ {'a', '5', 0x3042},
+ {'I', '5', 0x3043},
+***************
+*** 1726,1731 ****
+--- 1805,1811 ----
+ {'0', '5', 0x309c},
+ {'*', '5', 0x309d},
+ {'+', '5', 0x309e},
++ #define DG_START_KATAKANA 0x30a1
+ {'a', '6', 0x30a1},
+ {'A', '6', 0x30a2},
+ {'i', '6', 0x30a3},
+***************
+*** 1820,1825 ****
+--- 1900,1906 ----
+ {'-', '6', 0x30fc},
+ {'*', '6', 0x30fd},
+ {'+', '6', 0x30fe},
++ #define DG_START_BOPOMOFO 0x3105
+ {'b', '4', 0x3105},
+ {'p', '4', 0x3106},
+ {'m', '4', 0x3107},
+***************
+*** 1859,1864 ****
+--- 1940,1946 ----
+ {'v', '4', 0x312a},
+ {'n', 'G', 0x312b},
+ {'g', 'n', 0x312c},
++ #define DG_START_OTHER3 0x3220
+ {'1', 'c', 0x3220},
+ {'2', 'c', 0x3221},
+ {'3', 'c', 0x3222},
+***************
+*** 1875,1943 ****
+ {'f', 'l', 0xfb02},
+ {'f', 't', 0xfb05},
+ {'s', 't', 0xfb06},
+-
+- /* extra alternatives, easier to remember */
+- {'W', '`', 0x1e80},
+- {'w', '`', 0x1e81},
+- {'Y', '`', 0x1ef2},
+- {'y', '`', 0x1ef3},
+-
+ # endif /* FEAT_MBYTE */
+
+- /* Vim 5.x compatible digraphs that don't conflict with the above */
+- {'~', '!', 161}, /* ¡ */
+- {'c', '|', 162}, /* ¢ */
+- {'$', '$', 163}, /* £ */
+- {'o', 'x', 164}, /* ¤ - currency symbol in ISO 8859-1 */
+- {'Y', '-', 165}, /* ¥ */
+- {'|', '|', 166}, /* ¦ */
+- {'c', 'O', 169}, /* © */
+- {'-', ',', 172}, /* ¬ */
+- {'-', '=', 175}, /* ¯ */
+- {'~', 'o', 176}, /* ° */
+- {'2', '2', 178}, /* ² */
+- {'3', '3', 179}, /* ³ */
+- {'p', 'p', 182}, /* ¶ */
+- {'~', '.', 183}, /* · */
+- {'1', '1', 185}, /* ¹ */
+- {'~', '?', 191}, /* ¿ */
+- {'A', '`', 192}, /* À */
+- {'A', '^', 194}, /* Â */
+- {'A', '~', 195}, /* Ã */
+- {'A', '"', 196}, /* Ä */
+- {'A', '@', 197}, /* Å */
+- {'E', '`', 200}, /* È */
+- {'E', '^', 202}, /* Ê */
+- {'E', '"', 203}, /* Ë */
+- {'I', '`', 204}, /* Ì */
+- {'I', '^', 206}, /* Î */
+- {'I', '"', 207}, /* Ï */
+- {'N', '~', 209}, /* Ñ */
+- {'O', '`', 210}, /* Ò */
+- {'O', '^', 212}, /* Ô */
+- {'O', '~', 213}, /* Õ */
+- {'/', '\\', 215}, /* × - multiplication symbol in ISO 8859-1 */
+- {'U', '`', 217}, /* Ù */
+- {'U', '^', 219}, /* Û */
+- {'I', 'p', 222}, /* Þ */
+- {'a', '`', 224}, /* à */
+- {'a', '^', 226}, /* â */
+- {'a', '~', 227}, /* ã */
+- {'a', '"', 228}, /* ä */
+- {'a', '@', 229}, /* å */
+- {'e', '`', 232}, /* è */
+- {'e', '^', 234}, /* ê */
+- {'e', '"', 235}, /* ë */
+- {'i', '`', 236}, /* ì */
+- {'i', '^', 238}, /* î */
+- {'n', '~', 241}, /* ñ */
+- {'o', '`', 242}, /* ò */
+- {'o', '^', 244}, /* ô */
+- {'o', '~', 245}, /* õ */
+- {'u', '`', 249}, /* ù */
+- {'u', '^', 251}, /* û */
+- {'y', '"', 255}, /* x XX */
+-
+ {NUL, NUL, NUL}
+ };
+
+--- 1957,1964 ----
+***************
+*** 1986,1992 ****
+ digr_T *dp;
+ static char_u r[3];
+
+! #if defined(FEAT_MBYTE) && defined(USE_UNICODE_DIGRAPHS)
+ if (!enc_utf8)
+ {
+ char_u buf[6], *to;
+--- 2007,2013 ----
+ digr_T *dp;
+ static char_u r[3];
+
+! #if defined(USE_UNICODE_DIGRAPHS)
+ if (!enc_utf8)
+ {
+ char_u buf[6], *to;
+***************
+*** 2240,2257 ****
+ }
+ }
+
+ void
+! listdigraphs(void)
+ {
+ int i;
+ digr_T *dp;
+
+ msg_putchar('\n');
+
+ dp = digraphdefault;
+ for (i = 0; dp->char1 != NUL && !got_int; ++i)
+ {
+! #if defined(USE_UNICODE_DIGRAPHS) && defined(FEAT_MBYTE)
+ digr_T tmp;
+
+ /* May need to convert the result to 'encoding'. */
+--- 2261,2290 ----
+ }
+ }
+
++ #if defined(USE_UNICODE_DIGRAPHS)
++ static void
++ digraph_header(char *msg)
++ {
++ if (msg_col > 0)
++ msg_putchar('\n');
++ msg_outtrans_attr((char_u *)msg, HL_ATTR(HLF_CM));
++ msg_putchar('\n');
++ }
++ #endif
++
+ void
+! listdigraphs(int use_headers)
+ {
+ int i;
+ digr_T *dp;
++ result_T previous = 0;
+
+ msg_putchar('\n');
+
+ dp = digraphdefault;
+ for (i = 0; dp->char1 != NUL && !got_int; ++i)
+ {
+! #if defined(USE_UNICODE_DIGRAPHS)
+ digr_T tmp;
+
+ /* May need to convert the result to 'encoding'. */
+***************
+*** 2260,2266 ****
+ tmp.result = getexactdigraph(tmp.char1, tmp.char2, FALSE);
+ if (tmp.result != 0 && tmp.result != tmp.char2
+ && (has_mbyte || tmp.result <= 255))
+! printdigraph(&tmp);
+ #else
+
+ if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result
+--- 2293,2299 ----
+ tmp.result = getexactdigraph(tmp.char1, tmp.char2, FALSE);
+ if (tmp.result != 0 && tmp.result != tmp.char2
+ && (has_mbyte || tmp.result <= 255))
+! printdigraph(&tmp, use_headers ? &previous : NULL);
+ #else
+
+ if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result
+***************
+*** 2268,2274 ****
+ && (has_mbyte || dp->result <= 255)
+ # endif
+ )
+! printdigraph(dp);
+ #endif
+ ++dp;
+ ui_breakcheck();
+--- 2301,2307 ----
+ && (has_mbyte || dp->result <= 255)
+ # endif
+ )
+! printdigraph(dp, use_headers ? &previous : NULL);
+ #endif
+ ++dp;
+ ui_breakcheck();
+***************
+*** 2277,2283 ****
+ dp = (digr_T *)user_digraphs.ga_data;
+ for (i = 0; i < user_digraphs.ga_len && !got_int; ++i)
+ {
+! printdigraph(dp);
+ ui_breakcheck();
+ ++dp;
+ }
+--- 2310,2321 ----
+ dp = (digr_T *)user_digraphs.ga_data;
+ for (i = 0; i < user_digraphs.ga_len && !got_int; ++i)
+ {
+! #if defined(USE_UNICODE_DIGRAPHS)
+! if (previous >= 0 && use_headers)
+! digraph_header(_("Custom"));
+! previous = -1;
+! #endif
+! printdigraph(dp, NULL);
+ ui_breakcheck();
+ ++dp;
+ }
+***************
+*** 2285,2292 ****
+ wrong, in which case we messed up ScreenLines */
+ }
+
+ static void
+! printdigraph(digr_T *dp)
+ {
+ char_u buf[30];
+ char_u *p;
+--- 2323,2363 ----
+ wrong, in which case we messed up ScreenLines */
+ }
+
++ struct dg_header_entry {
++ int dg_start;
++ char *dg_header;
++ } header_table[] = {
++ {DG_START_LATIN, N_("Latin supplement")},
++ {DG_START_GREEK, N_("Greek and Coptic")},
++ {DG_START_CYRILLIC, N_("Cyrillic")},
++ {DG_START_HEBREW, N_("Hebrew")},
++ {DG_START_ARABIC, N_("Arabic")},
++ {DG_START_LATIN_EXTENDED, N_("Latin extended")},
++ {DG_START_GREEK_EXTENDED, N_("Greek extended")},
++ {DG_START_PUNCTUATION, N_("Punctuation")},
++ {DG_START_SUB_SUPER, N_("Super- and subscripts")},
++ {DG_START_CURRENCY, N_("Currency")},
++ {DG_START_OTHER1, N_("Other")},
++ {DG_START_ROMAN, N_("Roman numbers")},
++ {DG_START_ARROWS, N_("Arrows")},
++ {DG_START_MATH, N_("Mathematical operators")},
++ {DG_START_TECHNICAL, N_("Technical")},
++ {DG_START_OTHER2, N_("Other")},
++ {DG_START_DRAWING, N_("Box drawing")},
++ {DG_START_BLOCK, N_("Block elements")},
++ {DG_START_SHAPES, N_("Geometric shapes")},
++ {DG_START_SYMBOLS, N_("Symbols")},
++ {DG_START_DINGBATS, N_("Dingbats")},
++ {DG_START_CJK_SYMBOLS, N_("CJK symbols and punctuation")},
++ {DG_START_HIRAGANA, N_("Hiragana")},
++ {DG_START_KATAKANA, N_("Katakana")},
++ {DG_START_BOPOMOFO, N_("Bopomofo")},
++ {DG_START_OTHER3, N_("Other")},
++ {0xfffffff, NULL},
++ };
++
+ static void
+! printdigraph(digr_T *dp, result_T *previous)
+ {
+ char_u buf[30];
+ char_u *p;
+***************
+*** 2304,2309 ****
+--- 2375,2396 ----
+
+ if (dp->result != 0)
+ {
++ #if defined(USE_UNICODE_DIGRAPHS)
++ if (previous != NULL)
++ {
++ int i;
++
++ for (i = 0; header_table[i].dg_header != NULL; ++i)
++ if (*previous < header_table[i].dg_start
++ && dp->result >= header_table[i].dg_start
++ && dp->result < header_table[i + 1].dg_start)
++ {
++ digraph_header(_(header_table[i].dg_header));
++ break;
++ }
++ *previous = dp->result;
++ }
++ #endif
+ if (msg_col > Columns - list_width)
+ msg_putchar('\n');
+ if (msg_col)
+***************
+*** 2314,2319 ****
+--- 2401,2409 ----
+ *p++ = dp->char1;
+ *p++ = dp->char2;
+ *p++ = ' ';
++ *p = NUL;
++ msg_outtrans(buf);
++ p = buf;
+ #ifdef FEAT_MBYTE
+ if (has_mbyte)
+ {
+***************
+*** 2325,2330 ****
+--- 2415,2423 ----
+ else
+ #endif
+ *p++ = (char_u)dp->result;
++ *p = NUL;
++ msg_outtrans_attr(buf, HL_ATTR(HLF_8));
++ p = buf;
+ if (char2cells(dp->result) == 1)
+ *p++ = ' ';
+ vim_snprintf((char *)p, sizeof(buf) - (p - buf), " %3d", dp->result);
+*** ../vim-8.1.0585/src/proto/digraph.pro 2018-09-13 17:26:31.091401618 +0200
+--- src/proto/digraph.pro 2018-12-14 15:58:50.914970163 +0100
+***************
+*** 4,10 ****
+ int get_digraph(int cmdline);
+ int getdigraph(int char1, int char2, int meta_char);
+ void putdigraph(char_u *str);
+! void listdigraphs(void);
+ char_u *keymap_init(void);
+ void ex_loadkeymap(exarg_T *eap);
+ void keymap_clear(garray_T *kmap);
+--- 4,10 ----
+ int get_digraph(int cmdline);
+ int getdigraph(int char1, int char2, int meta_char);
+ void putdigraph(char_u *str);
+! void listdigraphs(int use_headers);
+ char_u *keymap_init(void);
+ void ex_loadkeymap(exarg_T *eap);
+ void keymap_clear(garray_T *kmap);
+*** ../vim-8.1.0585/src/ex_cmds.h 2018-11-30 22:40:09.098211991 +0100
+--- src/ex_cmds.h 2018-12-14 15:59:49.330567980 +0100
+***************
+*** 456,462 ****
+ TRLBAR,
+ ADDR_LINES),
+ EX(CMD_digraphs, "digraphs", ex_digraphs,
+! EXTRA|TRLBAR|CMDWIN,
+ ADDR_LINES),
+ EX(CMD_djump, "djump", ex_findpat,
+ BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
+--- 456,462 ----
+ TRLBAR,
+ ADDR_LINES),
+ EX(CMD_digraphs, "digraphs", ex_digraphs,
+! BANG|EXTRA|TRLBAR|CMDWIN,
+ ADDR_LINES),
+ EX(CMD_djump, "djump", ex_findpat,
+ BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
+*** ../vim-8.1.0585/runtime/doc/digraph.txt 2018-05-17 13:40:51.000000000 +0200
+--- runtime/doc/digraph.txt 2018-12-14 15:56:25.435973424 +0100
+***************
+*** 24,30 ****
+ 1. Defining digraphs *digraphs-define*
+
+ *:dig* *:digraphs*
+! :dig[raphs] show currently defined digraphs.
+ *E104* *E39*
+ :dig[raphs] {char1}{char2} {number} ...
+ Add digraph {char1}{char2} to the list. {number} is
+--- 24,32 ----
+ 1. Defining digraphs *digraphs-define*
+
+ *:dig* *:digraphs*
+! :dig[raphs][!] Show currently defined digraphs.
+! With [!] headers are used to make it a bit easier to
+! find a specific character.
+ *E104* *E39*
+ :dig[raphs] {char1}{char2} {number} ...
+ Add digraph {char1}{char2} to the list. {number} is
+*** ../vim-8.1.0585/src/version.c 2018-12-14 15:48:44.259178570 +0100
+--- src/version.c 2018-12-14 18:41:39.921914267 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 586,
+ /**/
+
+--
+Contrary to popular belief, it's often your clothing that gets promoted, not
+you.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0587 b/data/vim/patches/8.1.0587
new file mode 100644
index 000000000..51e712b5c
--- /dev/null
+++ b/data/vim/patches/8.1.0587
@@ -0,0 +1,82 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0587
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0587
+Problem: GvimExt: realloc() failing is not handled properly.
+Solution: Check for NULL return. (Jan-Jaap Korpershoek, closes #3689)
+Files: src/GvimExt/gvimext.cpp
+
+
+*** ../vim-8.1.0586/src/GvimExt/gvimext.cpp 2018-10-25 11:25:50.166512213 +0200
+--- src/GvimExt/gvimext.cpp 2018-12-14 19:15:54.292680774 +0100
+***************
+*** 1024,1029 ****
+--- 1024,1031 ----
+
+ cmdlen = BUFSIZE;
+ cmdStrW = (wchar_t *) malloc(cmdlen * sizeof(wchar_t));
++ if (cmdStrW == NULL)
++ return;
+ getGvimInvocationW(cmdStrW);
+
+ if (useDiff)
+***************
+*** 1039,1045 ****
+ if (len > cmdlen)
+ {
+ cmdlen = len + BUFSIZE;
+! cmdStrW = (wchar_t *)realloc(cmdStrW, cmdlen * sizeof(wchar_t));
+ }
+ wcscat(cmdStrW, L" \"");
+ wcscat(cmdStrW, m_szFileUserClickedOn);
+--- 1041,1050 ----
+ if (len > cmdlen)
+ {
+ cmdlen = len + BUFSIZE;
+! wchar_t *cmdStrW_new = (wchar_t *)realloc(cmdStrW, cmdlen * sizeof(wchar_t));
+! if (cmdStrW_new == NULL)
+! goto theend;
+! cmdStrW = cmdStrW_new;
+ }
+ wcscat(cmdStrW, L" \"");
+ wcscat(cmdStrW, m_szFileUserClickedOn);
+***************
+*** 1076,1082 ****
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+ }
+!
+ free(cmdStrW);
+
+ return NOERROR;
+--- 1081,1087 ----
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+ }
+! theend:
+ free(cmdStrW);
+
+ return NOERROR;
+*** ../vim-8.1.0586/src/version.c 2018-12-14 18:52:57.169528762 +0100
+--- src/version.c 2018-12-14 19:17:18.488135136 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 587,
+ /**/
+
+--
+A)bort, R)etry, B)ang it with a large hammer
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0588 b/data/vim/patches/8.1.0588
new file mode 100644
index 000000000..55122e453
--- /dev/null
+++ b/data/vim/patches/8.1.0588
@@ -0,0 +1,89 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0588
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0588
+Problem: Cannot define a sign with space in the text.
+Solution: Allow for escaping characters. (Ben Jackson, closes #2967)
+Files: src/ex_cmds.c, src/testdir/test_signs.vim
+
+
+*** ../vim-8.1.0587/src/ex_cmds.c 2018-11-10 18:54:40.660592045 +0100
+--- src/ex_cmds.c 2018-12-14 19:28:26.340081284 +0100
+***************
+*** 7779,7784 ****
+--- 7779,7792 ----
+ int len;
+
+ arg += 5;
++ for (s = arg; s + 1 < p; ++s)
++ if (*s == '\\')
++ {
++ // Remove a backslash, so that it is possible
++ // to use a space.
++ STRMOVE(s, s + 1);
++ --p;
++ }
+ # ifdef FEAT_MBYTE
+ /* Count cells and check for non-printable chars */
+ if (has_mbyte)
+*** ../vim-8.1.0587/src/testdir/test_signs.vim 2017-10-27 00:40:58.000000000 +0200
+--- src/testdir/test_signs.vim 2018-12-14 19:32:28.519179069 +0100
+***************
+*** 104,109 ****
+--- 104,136 ----
+ exe 'sign jump 43 file=' . fn
+ call assert_equal('B', getline('.'))
+
++ " can't define a sign with a non-printable character as text
++ call assert_fails("sign define Sign4 text=\e linehl=Comment", 'E239:')
++ call assert_fails("sign define Sign4 text=a\e linehl=Comment", 'E239:')
++ call assert_fails("sign define Sign4 text=\ea linehl=Comment", 'E239:')
++
++ " Only 1 or 2 character text is allowed
++ call assert_fails("sign define Sign4 text=abc linehl=Comment", 'E239:')
++ call assert_fails("sign define Sign4 text= linehl=Comment", 'E239:')
++ call assert_fails("sign define Sign4 text=\ ab linehl=Comment", 'E239:')
++
++ " define sign with whitespace
++ sign define Sign4 text=\ X linehl=Comment
++ sign undefine Sign4
++ sign define Sign4 linehl=Comment text=\ X
++ sign undefine Sign4
++
++ sign define Sign5 text=X\ linehl=Comment
++ sign undefine Sign5
++ sign define Sign5 linehl=Comment text=X\
++ sign undefine Sign5
++
++ " define sign with backslash
++ sign define Sign4 text=\\\\ linehl=Comment
++ sign undefine Sign4
++ sign define Sign4 text=\\ linehl=Comment
++ sign undefine Sign4
++
+ " After undefining the sign, we should no longer be able to place it.
+ sign undefine Sign1
+ sign undefine Sign2
+*** ../vim-8.1.0587/src/version.c 2018-12-14 19:19:58.939094931 +0100
+--- src/version.c 2018-12-14 19:36:51.285961178 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 588,
+ /**/
+
+--
+A)bort, R)etry, D)o it right this time
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0589 b/data/vim/patches/8.1.0589
new file mode 100644
index 000000000..2cdb7e9a7
--- /dev/null
+++ b/data/vim/patches/8.1.0589
@@ -0,0 +1,90 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0589
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0589
+Problem: Compilation error in gvimext.cpp.
+Solution: Return a value. Also fix using uninitialized variable.
+Files: src/GvimExt/gvimext.cpp, src/dosinst.c
+
+
+*** ../vim-8.1.0588/src/GvimExt/gvimext.cpp 2018-12-14 19:19:58.939094931 +0100
+--- src/GvimExt/gvimext.cpp 2018-12-14 19:51:07.765220863 +0100
+***************
+*** 1025,1031 ****
+ cmdlen = BUFSIZE;
+ cmdStrW = (wchar_t *) malloc(cmdlen * sizeof(wchar_t));
+ if (cmdStrW == NULL)
+! return;
+ getGvimInvocationW(cmdStrW);
+
+ if (useDiff)
+--- 1025,1031 ----
+ cmdlen = BUFSIZE;
+ cmdStrW = (wchar_t *) malloc(cmdlen * sizeof(wchar_t));
+ if (cmdStrW == NULL)
+! return E_FAIL;
+ getGvimInvocationW(cmdStrW);
+
+ if (useDiff)
+***************
+*** 1043,1049 ****
+ cmdlen = len + BUFSIZE;
+ wchar_t *cmdStrW_new = (wchar_t *)realloc(cmdStrW, cmdlen * sizeof(wchar_t));
+ if (cmdStrW_new == NULL)
+! goto theend;
+ cmdStrW = cmdStrW_new;
+ }
+ wcscat(cmdStrW, L" \"");
+--- 1043,1052 ----
+ cmdlen = len + BUFSIZE;
+ wchar_t *cmdStrW_new = (wchar_t *)realloc(cmdStrW, cmdlen * sizeof(wchar_t));
+ if (cmdStrW_new == NULL)
+! {
+! free(cmdStrW);
+! return E_FAIL;
+! }
+ cmdStrW = cmdStrW_new;
+ }
+ wcscat(cmdStrW, L" \"");
+*** ../vim-8.1.0588/src/dosinst.c 2018-11-21 13:58:27.092110956 +0100
+--- src/dosinst.c 2018-12-14 19:52:30.904732290 +0100
+***************
+*** 2459,2465 ****
+ }
+ else if (strcmp(argv[i], "-create-directories") == 0)
+ {
+! int vimfiles_dir_choice;
+
+ init_directories_choice();
+ if (argv[i + 1][0] != '-')
+--- 2459,2465 ----
+ }
+ else if (strcmp(argv[i], "-create-directories") == 0)
+ {
+! int vimfiles_dir_choice = (int)vimfiles_dir_none;
+
+ init_directories_choice();
+ if (argv[i + 1][0] != '-')
+*** ../vim-8.1.0588/src/version.c 2018-12-14 19:37:03.681899394 +0100
+--- src/version.c 2018-12-14 19:53:29.836384520 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 589,
+ /**/
+
+--
+A)bort, R)etry, P)lease don't bother me again
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/patches/8.1.0590 b/data/vim/patches/8.1.0590
new file mode 100644
index 000000000..cca000d35
--- /dev/null
+++ b/data/vim/patches/8.1.0590
@@ -0,0 +1,218 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0590
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0590
+Problem: When a job ends the closed channels are not handled.
+Solution: When a job is detected to have ended, check the channels again.
+ (closes #3530)
+Files: src/channel.c, src/proto/channel.pro, src/misc2.c
+
+
+*** ../vim-8.1.0589/src/channel.c 2018-10-19 17:35:58.081200733 +0200
+--- src/channel.c 2018-12-14 21:27:04.570167163 +0100
+***************
+*** 5510,5533 ****
+
+ /*
+ * Called once in a while: check if any jobs that seem useful have ended.
+ */
+! void
+ job_check_ended(void)
+ {
+ int i;
+
+ if (first_job == NULL)
+! return;
+
+ for (i = 0; i < MAX_CHECK_ENDED; ++i)
+ {
+! /* NOTE: mch_detect_ended_job() must only return a job of which the
+! * status was just set to JOB_ENDED. */
+ job_T *job = mch_detect_ended_job(first_job);
+
+ if (job == NULL)
+ break;
+! job_cleanup(job); /* may free "job" */
+ }
+
+ if (channel_need_redraw)
+--- 5510,5537 ----
+
+ /*
+ * Called once in a while: check if any jobs that seem useful have ended.
++ * Returns TRUE if a job did end.
+ */
+! int
+ job_check_ended(void)
+ {
+ int i;
++ int did_end = FALSE;
+
++ // be quick if there are no jobs to check
+ if (first_job == NULL)
+! return did_end;
+
+ for (i = 0; i < MAX_CHECK_ENDED; ++i)
+ {
+! // NOTE: mch_detect_ended_job() must only return a job of which the
+! // status was just set to JOB_ENDED.
+ job_T *job = mch_detect_ended_job(first_job);
+
+ if (job == NULL)
+ break;
+! did_end = TRUE;
+! job_cleanup(job); // may free "job"
+ }
+
+ if (channel_need_redraw)
+***************
+*** 5535,5540 ****
+--- 5539,5545 ----
+ channel_need_redraw = FALSE;
+ redraw_after_callback(TRUE);
+ }
++ return did_end;
+ }
+
+ /*
+*** ../vim-8.1.0589/src/proto/channel.pro 2018-06-17 19:36:30.215317108 +0200
+--- src/proto/channel.pro 2018-12-14 21:24:32.683134493 +0100
+***************
+*** 65,71 ****
+ void job_set_options(job_T *job, jobopt_T *opt);
+ void job_stop_on_exit(void);
+ int has_pending_job(void);
+! void job_check_ended(void);
+ job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg, int is_terminal);
+ char *job_status(job_T *job);
+ void job_info(job_T *job, dict_T *dict);
+--- 65,71 ----
+ void job_set_options(job_T *job, jobopt_T *opt);
+ void job_stop_on_exit(void);
+ int has_pending_job(void);
+! int job_check_ended(void);
+ job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg, int is_terminal);
+ char *job_status(job_T *job);
+ void job_info(job_T *job, dict_T *dict);
+*** ../vim-8.1.0589/src/misc2.c 2018-12-13 22:17:52.877941474 +0100
+--- src/misc2.c 2018-12-14 21:27:39.313947112 +0100
+***************
+*** 6351,6356 ****
+--- 6351,6358 ----
+ #endif
+
+ #if defined(MESSAGE_QUEUE) || defined(PROTO)
++ # define MAX_REPEAT_PARSE 8
++
+ /*
+ * Process messages that have been queued for netbeans or clientserver.
+ * Also check if any jobs have ended.
+***************
+*** 6360,6396 ****
+ void
+ parse_queued_messages(void)
+ {
+! win_T *old_curwin = curwin;
+
+ // Do not handle messages while redrawing, because it may cause buffers to
+ // change or be wiped while they are being redrawn.
+ if (updating_screen)
+ return;
+
+! // For Win32 mch_breakcheck() does not check for input, do it here.
+ # if defined(WIN32) && defined(FEAT_JOB_CHANNEL)
+! channel_handle_events(FALSE);
+ # endif
+
+ # ifdef FEAT_NETBEANS_INTG
+! // Process the queued netbeans messages.
+! netbeans_parse_messages();
+ # endif
+ # ifdef FEAT_JOB_CHANNEL
+! // Write any buffer lines still to be written.
+! channel_write_any_lines();
+
+! // Process the messages queued on channels.
+! channel_parse_messages();
+ # endif
+ # if defined(FEAT_CLIENTSERVER) && defined(FEAT_X11)
+! // Process the queued clientserver messages.
+! server_parse_messages();
+ # endif
+ # ifdef FEAT_JOB_CHANNEL
+! // Check if any jobs have ended.
+! job_check_ended();
+ # endif
+
+ // If the current window changed we need to bail out of the waiting loop.
+ // E.g. when a job exit callback closes the terminal window.
+--- 6362,6406 ----
+ void
+ parse_queued_messages(void)
+ {
+! win_T *old_curwin = curwin;
+! int i;
+
+ // Do not handle messages while redrawing, because it may cause buffers to
+ // change or be wiped while they are being redrawn.
+ if (updating_screen)
+ return;
+
+! // Loop when a job ended, but don't keep looping forever.
+! for (i = 0; i < MAX_REPEAT_PARSE; ++i)
+! {
+! // For Win32 mch_breakcheck() does not check for input, do it here.
+ # if defined(WIN32) && defined(FEAT_JOB_CHANNEL)
+! channel_handle_events(FALSE);
+ # endif
+
+ # ifdef FEAT_NETBEANS_INTG
+! // Process the queued netbeans messages.
+! netbeans_parse_messages();
+ # endif
+ # ifdef FEAT_JOB_CHANNEL
+! // Write any buffer lines still to be written.
+! channel_write_any_lines();
+
+! // Process the messages queued on channels.
+! channel_parse_messages();
+ # endif
+ # if defined(FEAT_CLIENTSERVER) && defined(FEAT_X11)
+! // Process the queued clientserver messages.
+! server_parse_messages();
+ # endif
+ # ifdef FEAT_JOB_CHANNEL
+! // Check if any jobs have ended. If so, repeat the above to handle
+! // changes, e.g. stdin may have been closed.
+! if (job_check_ended())
+! continue;
+ # endif
++ break;
++ }
+
+ // If the current window changed we need to bail out of the waiting loop.
+ // E.g. when a job exit callback closes the terminal window.
+*** ../vim-8.1.0589/src/version.c 2018-12-14 19:54:35.711994528 +0100
+--- src/version.c 2018-12-14 21:31:00.840677937 +0100
+***************
+*** 801,802 ****
+--- 801,804 ----
+ { /* Add new patch number below this line */
++ /**/
++ 590,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+3. Your bookmark takes 15 minutes to scroll from top to bottom.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
diff --git a/data/vim/sigaltstack.diff b/data/vim/sigaltstack.diff
deleted file mode 100644
index e1a9457e0..000000000
--- a/data/vim/sigaltstack.diff
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -ru vim71/src/os_unix.c vim71+iPhone/src/os_unix.c
---- vim71/src/os_unix.c 2007-05-09 19:41:58.000000000 +0000
-+++ vim71+iPhone/src/os_unix.c 2008-01-01 12:27:46.000000000 +0000
-@@ -753,12 +753,6 @@
- if (signal_stack != NULL)
- {
- # ifdef HAVE_SIGALTSTACK
--# ifdef __APPLE__
-- /* missing prototype. Adding it to osdef?.h.in doesn't work, because
-- * "struct sigaltstack" needs to be declared. */
-- extern int sigaltstack __ARGS((const struct sigaltstack *ss, struct sigaltstack *oss));
--# endif
--
- # ifdef HAVE_SS_BASE
- sigstk.ss_base = signal_stack;
- # else
diff --git a/data/vim/strip.diff b/data/vim/strip.diff
index bbd88eed7..12446aeed 100644
--- a/data/vim/strip.diff
+++ b/data/vim/strip.diff
@@ -1,7 +1,7 @@
-diff -r -u vim71/src/Makefile vim71+iPhone/src/Makefile
---- vim71/src/Makefile 2007-05-12 11:57:13.000000000 +0000
-+++ vim71+iPhone/src/Makefile 2008-04-04 18:50:37.000000000 +0000
-@@ -1758,7 +1758,6 @@
+diff -ur vim81/src/Makefile vim81+iPhone/src/Makefile
+--- vim81/src/Makefile 2018-05-18 06:19:25.000000000 -1000
++++ vim81+iPhone/src/Makefile 2018-07-27 09:34:53.000000000 -1000
+@@ -2393,7 +2393,6 @@
rm -f $(DEST_BIN)/$(VIMNAME).rm; \
fi
$(INSTALL_PROG) $(VIMTARGET) $(DEST_BIN)
@@ -9,7 +9,7 @@ diff -r -u vim71/src/Makefile vim71+iPhone/src/Makefile
chmod $(BINMOD) $(DEST_BIN)/$(VIMTARGET)
# may create a link to the new executable from /usr/bin/vi
-$(LINKIT)
-@@ -1889,7 +1888,6 @@
+@@ -2549,7 +2548,6 @@
rm -f $(DEST_BIN)/xxd.rm; \
fi
$(INSTALL_PROG) xxd/xxd$(EXEEXT) $(DEST_BIN)
diff --git a/data/vim/systypes.diff b/data/vim/systypes.diff
index aef0afaf7..e7ab45b35 100644
--- a/data/vim/systypes.diff
+++ b/data/vim/systypes.diff
@@ -1,6 +1,5 @@
-diff -ru vim71/src/configure.in vim71+iPhone/src/configure.in
---- vim71/src/configure.in 2007-05-12 09:19:27.000000000 +0000
-+++ vim71+iPhone/src/configure.in 2008-01-01 12:24:16.000000000 +0000
+--- vim81/src/configure.ac 2018-05-13 03:37:01.000000000 -1000
++++ vim81+iPhone/src/configure.ac 2018-07-27 09:41:25.000000000 -1000
@@ -5,6 +5,7 @@
AC_INIT(vim.h)
diff --git a/data/vim/timestamp.diff b/data/vim/timestamp.diff
index dd3ec16d9..c54d24bf1 100644
--- a/data/vim/timestamp.diff
+++ b/data/vim/timestamp.diff
@@ -1,36 +1,23 @@
-diff -ru vim71/src/globals.h vim71+iPhone/src/globals.h
---- vim71/src/globals.h 2007-05-07 19:44:26.000000000 +0000
-+++ vim71+iPhone/src/globals.h 2008-06-18 02:18:30.000000000 +0000
-@@ -1080,11 +1080,7 @@
+diff -ur vim81/src/globals.h vim81+iPhone/src/globals.h
+--- vim81/src/globals.h 2018-07-27 10:35:59.000000000 -1000
++++ vim81+iPhone/src/globals.h 2018-07-27 11:41:21.000000000 -1000
+@@ -1133,11 +1133,7 @@
- /* these are in version.c */
+ /* These are in version.c, call init_longVersion() before use. */
extern char *Version;
-#if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC)
-extern char longVersion[];
-#else
- extern char *longVersion;
+-EXTERN char *longVersion;
-#endif
++extern char *longVersion;
/*
* Some file names are stored in pathdef.c, which is generated from the
-diff -ru vim71/src/main.c vim71+iPhone/src/main.c
---- vim71/src/main.c 2007-05-07 19:38:44.000000000 +0000
-+++ vim71+iPhone/src/main.c 2008-06-18 02:18:17.000000000 +0000
-@@ -235,10 +235,6 @@
- /* Init the table of Normal mode commands. */
- init_normal_cmds();
-
--#if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC)
-- make_version(); /* Construct the long version string. */
--#endif
--
- /*
- * Allocate space for the generic buffers (needed for set_init_1() and
- * EMSG2()).
-diff -ru vim71/src/version.c vim71+iPhone/src/version.c
---- vim71/src/version.c 2007-05-12 10:23:44.000000000 +0000
-+++ vim71+iPhone/src/version.c 2008-06-18 02:18:23.000000000 +0000
-@@ -30,29 +30,7 @@
+diff -ur vim81/src/version.c vim81+iPhone/src/version.c
+--- vim81/src/version.c 2018-07-27 10:36:00.000000000 -1000
++++ vim81+iPhone/src/version.c 2018-07-27 11:39:59.000000000 -1000
+@@ -31,45 +31,6 @@
char *Version = VIM_VERSION_SHORT;
static char *mediumVersion = VIM_VERSION_MEDIUM;
@@ -38,8 +25,9 @@ diff -ru vim71/src/version.c vim71+iPhone/src/version.c
-# if (defined(VMS) && defined(VAXC)) || defined(PROTO)
-char longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
- + sizeof(__TIME__) + 3];
+-
- void
--make_version()
+-init_longVersion(void)
-{
- /*
- * Construct the long version string. Necessary because
@@ -51,12 +39,35 @@ diff -ru vim71/src/version.c vim71+iPhone/src/version.c
- strcat(longVersion, __TIME__);
- strcat(longVersion, ")");
-}
+-
-# else
--char *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
+- void
+-init_longVersion(void)
+-{
+- char *date_time = __DATE__ " " __TIME__;
+- char *msg = _("%s (%s, compiled %s)");
+- size_t len = strlen(msg)
+- + strlen(VIM_VERSION_LONG_ONLY)
+- + strlen(VIM_VERSION_DATE_ONLY)
+- + strlen(date_time);
+-
+- longVersion = (char *)alloc((unsigned)len);
+- if (longVersion == NULL)
+- longVersion = VIM_VERSION_LONG;
+- else
+- vim_snprintf(longVersion, len, msg,
+- VIM_VERSION_LONG_ONLY, VIM_VERSION_DATE_ONLY, date_time);
+-}
-# endif
-#else
char *longVersion = VIM_VERSION_LONG;
+
+ void
+@@ -77,7 +38,6 @@
+ {
+ // nothing to do
+ }
-#endif
- static void version_msg __ARGS((char *s));
+ static void list_features(void);
diff --git a/data/vim/vim-7.1.tar.bz2 b/data/vim/vim-7.1.tar.bz2
deleted file mode 100644
index 4ce870b91..000000000
--- a/data/vim/vim-7.1.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/vim/vim-8.1.tar.bz2 b/data/vim/vim-8.1.tar.bz2
new file mode 100644
index 000000000..9a3ededac
--- /dev/null
+++ b/data/vim/vim-8.1.tar.bz2
Binary files differ
diff --git a/data/vorbis/_metadata/in.1443.00 b/data/vorbis/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/vorbis/_metadata/in.1443.00
diff --git a/data/vorbis/_metadata/maintainer b/data/vorbis/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/vorbis/_metadata/maintainer
+++ b/data/vorbis/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/vorbis/_metadata/version b/data/vorbis/_metadata/version
index 26aaba0e8..95b25aee2 100644
--- a/data/vorbis/_metadata/version
+++ b/data/vorbis/_metadata/version
@@ -1 +1 @@
-1.2.0
+1.3.6
diff --git a/data/vorbis/libogg.diff b/data/vorbis/libogg.diff
deleted file mode 100644
index 13183b7bb..000000000
--- a/data/vorbis/libogg.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru libvorbis-1.2.0/lib/Makefile.in libvorbis-1.2.0+iPhone/lib/Makefile.in
---- libvorbis-1.2.0/lib/Makefile.in 2007-07-25 16:46:35.000000000 +0000
-+++ libvorbis-1.2.0+iPhone/lib/Makefile.in 2008-03-30 21:00:31.000000000 +0000
-@@ -264,7 +264,7 @@
- libvorbis_la_LIBADD = @OGG_LIBS@ @VORBIS_LIBS@
- libvorbisfile_la_SOURCES = vorbisfile.c
- libvorbisfile_la_LDFLAGS = -no-undefined -version-info @VF_LIB_CURRENT@:@VF_LIB_REVISION@:@VF_LIB_AGE@
--libvorbisfile_la_LIBADD = libvorbis.la
-+libvorbisfile_la_LIBADD = @OGG_LIBS@ libvorbis.la
- libvorbisenc_la_SOURCES = vorbisenc.c
- libvorbisenc_la_LDFLAGS = -no-undefined -version-info @VE_LIB_CURRENT@:@VE_LIB_REVISION@:@VE_LIB_AGE@
- libvorbisenc_la_LIBADD = libvorbis.la
diff --git a/data/vorbis/libvorbis-1.2.0.tar.gz b/data/vorbis/libvorbis-1.2.0.tar.gz
deleted file mode 100644
index 1b5f179b2..000000000
--- a/data/vorbis/libvorbis-1.2.0.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/vorbis/make.sh b/data/vorbis/make.sh
index 452a4bfd5..66a4b2105 100644
--- a/data/vorbis/make.sh
+++ b/data/vorbis/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+./autogen.sh
pkg:configure
make
pkg:install
diff --git a/data/vorbis/v1.3.6.tar.gz b/data/vorbis/v1.3.6.tar.gz
new file mode 100644
index 000000000..2a2a63000
--- /dev/null
+++ b/data/vorbis/v1.3.6.tar.gz
Binary files differ
diff --git a/data/vpnc_/_metadata/in.1443.00 b/data/vpnc_/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/vpnc_/_metadata/in.1443.00
diff --git a/data/vpnc_/_metadata/libssl1.0.dep b/data/vpnc_/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/vpnc_/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/vpnc_/_metadata/maintainer b/data/vpnc_/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/vpnc_/_metadata/maintainer
+++ b/data/vpnc_/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/vpnc_/_metadata/openssl.dep b/data/vpnc_/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/vpnc_/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/weechat/_metadata/in.1443.00 b/data/weechat/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/weechat/_metadata/in.1443.00
diff --git a/data/weechat/_metadata/maintainer b/data/weechat/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/weechat/_metadata/maintainer
+++ b/data/weechat/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/wget/_metadata/in.1443.00 b/data/wget/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/wget/_metadata/in.1443.00
diff --git a/data/wget/_metadata/libssl1.0.dep b/data/wget/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/wget/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/wget/_metadata/maintainer b/data/wget/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/wget/_metadata/maintainer
+++ b/data/wget/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/wget/_metadata/openssl.dep b/data/wget/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/wget/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/wget/_metadata/version b/data/wget/_metadata/version
index e71519696..83d5e73f0 100644
--- a/data/wget/_metadata/version
+++ b/data/wget/_metadata/version
@@ -1 +1 @@
-1.16
+1.19.5
diff --git a/data/wget/localtime-clobber.diff b/data/wget/localtime-clobber.diff
new file mode 100644
index 000000000..6052820a4
--- /dev/null
+++ b/data/wget/localtime-clobber.diff
@@ -0,0 +1,12 @@
+diff -ur wget-1.19.5/lib/localtime-buffer.c wget-1.19.5+iPhone/lib/localtime-buffer.c
+--- wget-1.19.5/lib/localtime-buffer.c 2018-01-19 11:19:16.000000000 -1000
++++ wget-1.19.5+iPhone/lib/localtime-buffer.c 2018-09-15 12:53:52.000000000 -1000
+@@ -23,6 +23,8 @@
+ #include "localtime-buffer.h"
+
+ #if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
++#undef localtime
++#undef gmtime
+
+ static struct tm tm_zero_buffer;
+ struct tm *localtime_buffer_addr = &tm_zero_buffer;
diff --git a/data/wget/make.sh b/data/wget/make.sh
index 27669d45c..8cd39ba67 100644
--- a/data/wget/make.sh
+++ b/data/wget/make.sh
@@ -1,4 +1,4 @@
pkg:setup
-pkg:configure --with-ssl=openssl --with-libssl-prefix="$(PKG_DEST_ openssl)"
-make
+pkg:configure --with-ssl=openssl --with-libssl-prefix="$(PKG_DEST_ openssl)" --without-libpsl gl_cv_func_unlink_honors_slashes=yes
+pkg:make
pkg:install
diff --git a/data/wget/mdns.diff b/data/wget/mdns.diff
deleted file mode 100644
index 2ca9bc131..000000000
--- a/data/wget/mdns.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -ru wget-1.9.1/src/main.c wget-1.9.1+iPhone/src/main.c
---- wget-1.9.1/src/main.c 2003-10-11 13:57:11.000000000 +0000
-+++ wget-1.9.1+iPhone/src/main.c 2008-01-30 17:24:39.000000000 +0000
-@@ -1,3 +1,5 @@
-+#include <mach-o/nlist.h>
-+
- /* Command line parsing.
- Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002
- Free Software Foundation, Inc.
-@@ -267,6 +269,15 @@
- int
- main (int argc, char *const *argv)
- {
-+#if !defined(__ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_ASPEN_VERSION_MIN_REQUIRED__ < 10200
-+ struct nlist nl[2];
-+ memset(nl, 0, sizeof(nl));
-+ nl[0].n_un.n_name = (char *) "_useMDNSResponder";
-+ nlist("/usr/lib/libc.dylib", nl);
-+ if (nl[0].n_type != N_UNDF)
-+ *(int *) nl[0].n_value = 0;
-+#endif
-+
- char **url, **t;
- int i, c, nurl, status, append_to_log;
-
diff --git a/data/wget/wget-1.16.tar.gz b/data/wget/wget-1.16.tar.gz
deleted file mode 100644
index 0a745d9b2..000000000
--- a/data/wget/wget-1.16.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/wget/wget-1.19.5.tar.xz b/data/wget/wget-1.19.5.tar.xz
new file mode 100644
index 000000000..8c5eeac05
--- /dev/null
+++ b/data/wget/wget-1.19.5.tar.xz
Binary files differ
diff --git a/data/whois/_metadata/in.1443.00 b/data/whois/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/whois/_metadata/in.1443.00
diff --git a/data/whois/_metadata/maintainer b/data/whois/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/whois/_metadata/maintainer
+++ b/data/whois/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/whois/_metadata/version b/data/whois/_metadata/version
index 12b85aea7..84197c894 100644
--- a/data/whois/_metadata/version
+++ b/data/whois/_metadata/version
@@ -1 +1 @@
-4.7.24
+5.3.2
diff --git a/data/whois/whois_4.7.24.tar.gz b/data/whois/whois_v5.3.2.tar.gz
index d3735ea09..d3735ea09 100644
--- a/data/whois/whois_4.7.24.tar.gz
+++ b/data/whois/whois_v5.3.2.tar.gz
Binary files differ
diff --git a/data/winterboarder.com/_metadata/description b/data/winterboarder.com/_metadata/description
deleted file mode 100644
index 6ca75d874..000000000
--- a/data/winterboarder.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-where art meets iPhone
diff --git a/data/winterboarder.com/_metadata/license b/data/winterboarder.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/winterboarder.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/winterboarder.com/_metadata/maintainer b/data/winterboarder.com/_metadata/maintainer
deleted file mode 100644
index 448f0f7d4..000000000
--- a/data/winterboarder.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Adrian S. <admin@winterboarder.com>
diff --git a/data/winterboarder.com/_metadata/name b/data/winterboarder.com/_metadata/name
deleted file mode 100644
index b4bd66dc4..000000000
--- a/data/winterboarder.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-Winterboarder
diff --git a/data/winterboarder.com/_metadata/role b/data/winterboarder.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/winterboarder.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/winterboarder.com/_metadata/section b/data/winterboarder.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/winterboarder.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/winterboarder.com/_metadata/tags b/data/winterboarder.com/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/winterboarder.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/winterboarder.com/_metadata/version b/data/winterboarder.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/winterboarder.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/winterboarder.com/make.sh b/data/winterboarder.com/make.sh
deleted file mode 100644
index 6053fa44e..000000000
--- a/data/winterboarder.com/make.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/winterboarder.com.list /etc/apt/sources.list.d
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/wb.png /Applications/Cydia.app/Sources/cydia.winterboarder.com.png
diff --git a/data/winterboarder.com/wb.png b/data/winterboarder.com/wb.png
deleted file mode 100644
index ac21ab38d..000000000
--- a/data/winterboarder.com/wb.png
+++ /dev/null
Binary files differ
diff --git a/data/winterboarder.com/winterboarder.com.list b/data/winterboarder.com/winterboarder.com.list
deleted file mode 100644
index 86ec7f9a0..000000000
--- a/data/winterboarder.com/winterboarder.com.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://cydia.winterboarder.com/ ./
diff --git a/data/x11/_metadata/in.1443.00 b/data/x11/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/x11/_metadata/in.1443.00
diff --git a/data/x11/_metadata/maintainer b/data/x11/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/x11/_metadata/maintainer
+++ b/data/x11/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/x11/_metadata/version b/data/x11/_metadata/version
index 781dcb07c..ec70f7556 100644
--- a/data/x11/_metadata/version
+++ b/data/x11/_metadata/version
@@ -1 +1 @@
-1.1.3
+1.6.6
diff --git a/data/x11/_metadata/xf86bigfontproto.dep b/data/x11/_metadata/xf86bigfontproto.dep
new file mode 120000
index 000000000..a57af9cd4
--- /dev/null
+++ b/data/x11/_metadata/xf86bigfontproto.dep
@@ -0,0 +1 @@
+../../xf86bigfontproto \ No newline at end of file
diff --git a/data/x11/libX11-1.1.3.tar.gz b/data/x11/libX11-1.1.3.tar.gz
deleted file mode 100644
index 53fce907e..000000000
--- a/data/x11/libX11-1.1.3.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/x11/libX11-1.6.6.tar.bz2 b/data/x11/libX11-1.6.6.tar.bz2
new file mode 100644
index 000000000..23c8e6ed8
--- /dev/null
+++ b/data/x11/libX11-1.6.6.tar.bz2
Binary files differ
diff --git a/data/x11/make.sh b/data/x11/make.sh
index e9f20e906..d8545f3b0 100644
--- a/data/x11/make.sh
+++ b/data/x11/make.sh
@@ -1,6 +1,6 @@
pkg:setup
pkg:configure --enable-malloc0returnsnull
-gcc -c -o src/util/makekeys-makekeys.o src/util/makekeys.c
+gcc -c -o src/util/makekeys-makekeys.o src/util/makekeys.c -Iinclude
gcc -o src/util/makekeys src/util/makekeys-makekeys.o
-make
+make -j8
pkg:install
diff --git a/data/x264/_metadata/in.1443.00 b/data/x264/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/x264/_metadata/in.1443.00
diff --git a/data/x264/_metadata/maintainer b/data/x264/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/x264/_metadata/maintainer
+++ b/data/x264/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xar/_metadata/in.1443.00 b/data/xar/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xar/_metadata/in.1443.00
diff --git a/data/xar/_metadata/libssl1.0.dep b/data/xar/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/xar/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/xar/_metadata/maintainer b/data/xar/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xar/_metadata/maintainer
+++ b/data/xar/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xar/_metadata/openssl.dep b/data/xar/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/xar/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/xar/_metadata/version b/data/xar/_metadata/version
index 4cda8f19e..9c6d6293b 100644
--- a/data/xar/_metadata/version
+++ b/data/xar/_metadata/version
@@ -1 +1 @@
-1.5.2
+1.6.1
diff --git a/data/xar/make.sh b/data/xar/make.sh
index 452a4bfd5..4da9aa1a4 100644
--- a/data/xar/make.sh
+++ b/data/xar/make.sh
@@ -1,4 +1,5 @@
pkg:setup
-pkg:configure
+cp ${PKG_BASE}/config.sub .
+pkg:configure --with-xml2-config="$(PKG_DEST_ libxml2)/usr/bin/xml2-config" --with-lzma="$(PKG_DEST_ liblzma)/usr"
make
pkg:install
diff --git a/data/xar/xar-1.5.2.tar.gz b/data/xar/xar-1.5.2.tar.gz
deleted file mode 100644
index 419d57a6b..000000000
--- a/data/xar/xar-1.5.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xar/xar-1.6.1.tar.gz b/data/xar/xar-1.6.1.tar.gz
new file mode 100644
index 000000000..8bace23b0
--- /dev/null
+++ b/data/xar/xar-1.6.1.tar.gz
Binary files differ
diff --git a/data/xau/_metadata/in.1443.00 b/data/xau/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xau/_metadata/in.1443.00
diff --git a/data/xau/_metadata/maintainer b/data/xau/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xau/_metadata/maintainer
+++ b/data/xau/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xau/_metadata/version b/data/xau/_metadata/version
index 21e8796a0..b0f3d96f8 100644
--- a/data/xau/_metadata/version
+++ b/data/xau/_metadata/version
@@ -1 +1 @@
-1.0.3
+1.0.8
diff --git a/data/xau/libXau-1.0.3.tar.gz b/data/xau/libXau-1.0.3.tar.gz
deleted file mode 100644
index d39617187..000000000
--- a/data/xau/libXau-1.0.3.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xau/libXau-1.0.8.tar.bz2 b/data/xau/libXau-1.0.8.tar.bz2
new file mode 100644
index 000000000..fc88ef27a
--- /dev/null
+++ b/data/xau/libXau-1.0.8.tar.bz2
Binary files differ
diff --git a/data/xau/make.sh b/data/xau/make.sh
index 452a4bfd5..fbc999151 100644
--- a/data/xau/make.sh
+++ b/data/xau/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/xcb-proto/_metadata/in.1443.00 b/data/xcb-proto/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xcb-proto/_metadata/in.1443.00
diff --git a/data/xcb-proto/_metadata/maintainer b/data/xcb-proto/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xcb-proto/_metadata/maintainer
+++ b/data/xcb-proto/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xcb-proto/_metadata/version b/data/xcb-proto/_metadata/version
index 9459d4ba2..d3456a90f 100644
--- a/data/xcb-proto/_metadata/version
+++ b/data/xcb-proto/_metadata/version
@@ -1 +1 @@
-1.1
+1.13
diff --git a/data/xcb-proto/make.sh b/data/xcb-proto/make.sh
index 452a4bfd5..fbc999151 100644
--- a/data/xcb-proto/make.sh
+++ b/data/xcb-proto/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/xcb-proto/xcb-proto-1.1.tar.gz b/data/xcb-proto/xcb-proto-1.1.tar.gz
deleted file mode 100644
index e5132c02e..000000000
--- a/data/xcb-proto/xcb-proto-1.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xcb-proto/xcb-proto-1.13.tar.bz2 b/data/xcb-proto/xcb-proto-1.13.tar.bz2
new file mode 100644
index 000000000..4e9742347
--- /dev/null
+++ b/data/xcb-proto/xcb-proto-1.13.tar.bz2
Binary files differ
diff --git a/data/xcb/_metadata/in.1443.00 b/data/xcb/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xcb/_metadata/in.1443.00
diff --git a/data/xcb/_metadata/maintainer b/data/xcb/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xcb/_metadata/maintainer
+++ b/data/xcb/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xcb/_metadata/version b/data/xcb/_metadata/version
index 9459d4ba2..d3456a90f 100644
--- a/data/xcb/_metadata/version
+++ b/data/xcb/_metadata/version
@@ -1 +1 @@
-1.1
+1.13
diff --git a/data/xcb/libxcb-1.1.tar.gz b/data/xcb/libxcb-1.1.tar.gz
deleted file mode 100644
index d77a39414..000000000
--- a/data/xcb/libxcb-1.1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xcb/libxcb-1.13.tar.bz2 b/data/xcb/libxcb-1.13.tar.bz2
new file mode 100644
index 000000000..db773f8df
--- /dev/null
+++ b/data/xcb/libxcb-1.13.tar.bz2
Binary files differ
diff --git a/data/xcb/make.sh b/data/xcb/make.sh
index b72d32ad1..612eb4e2c 100644
--- a/data/xcb/make.sh
+++ b/data/xcb/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-make XCBPROTO_XCBINCLUDEDIR=$(PKG_DEST_ xcb-proto)/usr/share/xcb
+make XCBPROTO_XCBINCLUDEDIR=$(PKG_DEST_ xcb-proto)/usr/share/xcb -j8
pkg:install
diff --git a/data/xext/_metadata/in.1443.00 b/data/xext/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xext/_metadata/in.1443.00
diff --git a/data/xext/_metadata/maintainer b/data/xext/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xext/_metadata/maintainer
+++ b/data/xext/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xext/_metadata/version b/data/xext/_metadata/version
index 6d7de6e6a..31e5c8434 100644
--- a/data/xext/_metadata/version
+++ b/data/xext/_metadata/version
@@ -1 +1 @@
-1.0.2
+1.3.3
diff --git a/data/xext/libXext-1.0.2.tar.gz b/data/xext/libXext-1.0.2.tar.gz
deleted file mode 100644
index d3b3ead07..000000000
--- a/data/xext/libXext-1.0.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xext/libXext-1.3.3.tar.bz2 b/data/xext/libXext-1.3.3.tar.bz2
new file mode 100644
index 000000000..6a52be058
--- /dev/null
+++ b/data/xext/libXext-1.3.3.tar.bz2
Binary files differ
diff --git a/data/xextproto/_metadata/in.1443.00 b/data/xextproto/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xextproto/_metadata/in.1443.00
diff --git a/data/xextproto/_metadata/maintainer b/data/xextproto/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xextproto/_metadata/maintainer
+++ b/data/xextproto/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xextproto/_metadata/version b/data/xextproto/_metadata/version
index a8907c025..150202076 100644
--- a/data/xextproto/_metadata/version
+++ b/data/xextproto/_metadata/version
@@ -1 +1 @@
-7.0.2
+7.3.0
diff --git a/data/xextproto/make.sh b/data/xextproto/make.sh
index 452a4bfd5..f24f8a191 100644
--- a/data/xextproto/make.sh
+++ b/data/xextproto/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+autoreconf -f -i
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/xextproto/xextproto-7.0.2.tar.gz b/data/xextproto/xextproto-7.0.2.tar.gz
deleted file mode 100644
index fbaa95a1b..000000000
--- a/data/xextproto/xextproto-7.0.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xextproto/xextproto-7.3.0.tar.bz2 b/data/xextproto/xextproto-7.3.0.tar.bz2
new file mode 100644
index 000000000..9b78bd78a
--- /dev/null
+++ b/data/xextproto/xextproto-7.3.0.tar.bz2
Binary files differ
diff --git a/data/xeyes/_metadata/in.1443.00 b/data/xeyes/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xeyes/_metadata/in.1443.00
diff --git a/data/xeyes/_metadata/maintainer b/data/xeyes/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xeyes/_metadata/maintainer
+++ b/data/xeyes/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xf86bigfontproto/_metadata/description b/data/xf86bigfontproto/_metadata/description
new file mode 100644
index 000000000..6626caf57
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/description
@@ -0,0 +1 @@
+prototypes for X big fonts
diff --git a/data/xf86bigfontproto/_metadata/in.1443.00 b/data/xf86bigfontproto/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/in.1443.00
diff --git a/data/xf86bigfontproto/_metadata/license b/data/xf86bigfontproto/_metadata/license
new file mode 100644
index 000000000..1724bb299
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/license
@@ -0,0 +1,43 @@
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
diff --git a/data/xf86bigfontproto/_metadata/maintainer b/data/xf86bigfontproto/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xf86bigfontproto/_metadata/priority b/data/xf86bigfontproto/_metadata/priority
new file mode 100644
index 000000000..134d9bc32
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/priority
@@ -0,0 +1 @@
+optional
diff --git a/data/xf86bigfontproto/_metadata/role b/data/xf86bigfontproto/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/xf86bigfontproto/_metadata/section b/data/xf86bigfontproto/_metadata/section
new file mode 100644
index 000000000..fca3b768c
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/section
@@ -0,0 +1 @@
+X_Window
diff --git a/data/xf86bigfontproto/_metadata/tags b/data/xf86bigfontproto/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/xf86bigfontproto/_metadata/version b/data/xf86bigfontproto/_metadata/version
new file mode 100644
index 000000000..26aaba0e8
--- /dev/null
+++ b/data/xf86bigfontproto/_metadata/version
@@ -0,0 +1 @@
+1.2.0
diff --git a/data/xf86bigfontproto/make.sh b/data/xf86bigfontproto/make.sh
new file mode 100644
index 000000000..dc6b1ecb8
--- /dev/null
+++ b/data/xf86bigfontproto/make.sh
@@ -0,0 +1,5 @@
+pkg:setup
+autoreconf -f -i
+pkg:configure
+make
+pkg:install
diff --git a/data/xf86bigfontproto/xf86bigfontproto-1.2.0.tar.bz2 b/data/xf86bigfontproto/xf86bigfontproto-1.2.0.tar.bz2
new file mode 100644
index 000000000..3228dbce6
--- /dev/null
+++ b/data/xf86bigfontproto/xf86bigfontproto-1.2.0.tar.bz2
Binary files differ
diff --git a/data/xi/_metadata/in.1443.00 b/data/xi/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xi/_metadata/in.1443.00
diff --git a/data/xi/_metadata/maintainer b/data/xi/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xi/_metadata/maintainer
+++ b/data/xi/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xineramaproto/_metadata/in.1443.00 b/data/xineramaproto/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xineramaproto/_metadata/in.1443.00
diff --git a/data/xineramaproto/_metadata/maintainer b/data/xineramaproto/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xineramaproto/_metadata/maintainer
+++ b/data/xineramaproto/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xml2/_metadata/in.1443.00 b/data/xml2/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xml2/_metadata/in.1443.00
diff --git a/data/xml2/_metadata/maintainer b/data/xml2/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xml2/_metadata/maintainer
+++ b/data/xml2/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xml2/_metadata/version b/data/xml2/_metadata/version
index 3b04cfb60..2eb3c4fe4 100644
--- a/data/xml2/_metadata/version
+++ b/data/xml2/_metadata/version
@@ -1 +1 @@
-0.2
+0.5
diff --git a/data/xml2/characters.diff b/data/xml2/characters.diff
deleted file mode 100644
index 9a1e706ca..000000000
--- a/data/xml2/characters.diff
+++ /dev/null
@@ -1,30 +0,0 @@
-diff -ru xml2-0.2/2xml.c xml2-0.2+iPhone/2xml.c
---- xml2-0.2/2xml.c 2000-03-20 01:01:16.000000000 +0000
-+++ xml2-0.2+iPhone/2xml.c 2008-01-01 23:24:52.000000000 +0000
-@@ -116,7 +116,7 @@
- }
- }
-
--static void characters(const char *stuff,const char *context)
-+static void characters_(const char *stuff,const char *context)
- {
- switch (context[0]) {
- case '!':
-@@ -178,7 +178,7 @@
- }
-
- if (NULL == name && NULL == *ptr && NULL != content)
-- characters("\n",context);
-+ characters_("\n",context);
-
- release(ptr);
-
-@@ -199,7 +199,7 @@
- }
-
- *ptr = NULL;
-- if (NULL != content) characters(content,context);
-+ if (NULL != content) characters_(content,context);
- }
-
- int main(int argc,char *argv[])
diff --git a/data/xml2/make.sh b/data/xml2/make.sh
index b337ed376..b78ddd2d2 100644
--- a/data/xml2/make.sh
+++ b/data/xml2/make.sh
@@ -1,3 +1,4 @@
pkg:setup
-make CC=${PKG_TARG}-gcc CFLAGS='-O2 -I/home/saurik/iphone/sysroot/usr/include/libxml2 -I/home/saurik/iphone/sysroot/usr/include/libxml2/libxml' LDLIBS=-lxml2
-pkg:usrbin 2html 2xml csv2 html2 xml2
+pkg:configure
+pkg:make
+pkg:install
diff --git a/data/xml2/xml2-0.2.tar.gz b/data/xml2/xml2-0.2.tar.gz
deleted file mode 100644
index 28aa04b63..000000000
--- a/data/xml2/xml2-0.2.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xml2/xml2-0.5.tar.gz b/data/xml2/xml2-0.5.tar.gz
new file mode 100644
index 000000000..7f8359bce
--- /dev/null
+++ b/data/xml2/xml2-0.5.tar.gz
Binary files differ
diff --git a/data/xmu/_metadata/in.1443.00 b/data/xmu/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xmu/_metadata/in.1443.00
diff --git a/data/xmu/_metadata/maintainer b/data/xmu/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xmu/_metadata/maintainer
+++ b/data/xmu/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xproto/_metadata/in.1443.00 b/data/xproto/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xproto/_metadata/in.1443.00
diff --git a/data/xproto/_metadata/maintainer b/data/xproto/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xproto/_metadata/maintainer
+++ b/data/xproto/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xproto/_metadata/version b/data/xproto/_metadata/version
index e4ae283f5..d024152d6 100644
--- a/data/xproto/_metadata/version
+++ b/data/xproto/_metadata/version
@@ -1 +1 @@
-7.0.10
+7.0.31
diff --git a/data/xproto/make.sh b/data/xproto/make.sh
index 452a4bfd5..dc6b1ecb8 100644
--- a/data/xproto/make.sh
+++ b/data/xproto/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+autoreconf -f -i
pkg:configure
make
pkg:install
diff --git a/data/xproto/xproto-7.0.10.tar.gz b/data/xproto/xproto-7.0.10.tar.gz
deleted file mode 100644
index b96e27c77..000000000
--- a/data/xproto/xproto-7.0.10.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xproto/xproto-7.0.31.tar.bz2 b/data/xproto/xproto-7.0.31.tar.bz2
new file mode 100644
index 000000000..cba09337e
--- /dev/null
+++ b/data/xproto/xproto-7.0.31.tar.bz2
Binary files differ
diff --git a/data/xpwn/_metadata/in.1443.00 b/data/xpwn/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xpwn/_metadata/in.1443.00
diff --git a/data/xpwn/_metadata/libssl1.0.dep b/data/xpwn/_metadata/libssl1.0.dep
new file mode 120000
index 000000000..a501d00a8
--- /dev/null
+++ b/data/xpwn/_metadata/libssl1.0.dep
@@ -0,0 +1 @@
+../../libssl1.0 \ No newline at end of file
diff --git a/data/xpwn/_metadata/maintainer b/data/xpwn/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xpwn/_metadata/maintainer
+++ b/data/xpwn/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xpwn/_metadata/openssl.dep b/data/xpwn/_metadata/openssl.dep
deleted file mode 120000
index 9b58fd56b..000000000
--- a/data/xpwn/_metadata/openssl.dep
+++ /dev/null
@@ -1 +0,0 @@
-../../openssl \ No newline at end of file
diff --git a/data/xt/_metadata/in.1443.00 b/data/xt/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xt/_metadata/in.1443.00
diff --git a/data/xt/_metadata/maintainer b/data/xt/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xt/_metadata/maintainer
+++ b/data/xt/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xt/_metadata/version b/data/xt/_metadata/version
index ee90284c2..e25d8d9f3 100644
--- a/data/xt/_metadata/version
+++ b/data/xt/_metadata/version
@@ -1 +1 @@
-1.0.4
+1.1.5
diff --git a/data/xt/libXt-1.0.4.tar.gz b/data/xt/libXt-1.0.4.tar.gz
deleted file mode 100644
index e5bcec27b..000000000
--- a/data/xt/libXt-1.0.4.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xt/libXt-1.1.5.tar.bz2 b/data/xt/libXt-1.1.5.tar.bz2
new file mode 100644
index 000000000..bf9399fc8
--- /dev/null
+++ b/data/xt/libXt-1.1.5.tar.bz2
Binary files differ
diff --git a/data/xt/make.sh b/data/xt/make.sh
index e16b4aa55..924417c83 100644
--- a/data/xt/make.sh
+++ b/data/xt/make.sh
@@ -2,5 +2,5 @@ pkg:setup
pkg:configure --enable-malloc0returnsnull
gcc -c -o util/makestrs-makestrs.o util/makestrs.c
gcc -o util/makestrs util/makestrs-makestrs.o
-make
+make -j8 V=1
pkg:install
diff --git a/data/xtrans/_metadata/in.1443.00 b/data/xtrans/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xtrans/_metadata/in.1443.00
diff --git a/data/xtrans/_metadata/maintainer b/data/xtrans/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/xtrans/_metadata/maintainer
+++ b/data/xtrans/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xtrans/_metadata/version b/data/xtrans/_metadata/version
index ee90284c2..80e78df68 100644
--- a/data/xtrans/_metadata/version
+++ b/data/xtrans/_metadata/version
@@ -1 +1 @@
-1.0.4
+1.3.5
diff --git a/data/xtrans/make.sh b/data/xtrans/make.sh
index 452a4bfd5..fbc999151 100644
--- a/data/xtrans/make.sh
+++ b/data/xtrans/make.sh
@@ -1,4 +1,4 @@
pkg:setup
pkg:configure
-make
+make -j8
pkg:install
diff --git a/data/xtrans/xtrans-1.0.4.tar.gz b/data/xtrans/xtrans-1.0.4.tar.gz
deleted file mode 100644
index 7732a7ce6..000000000
--- a/data/xtrans/xtrans-1.0.4.tar.gz
+++ /dev/null
Binary files differ
diff --git a/data/xtrans/xtrans-1.3.5.tar.bz2 b/data/xtrans/xtrans-1.3.5.tar.bz2
new file mode 100644
index 000000000..e024123ab
--- /dev/null
+++ b/data/xtrans/xtrans-1.3.5.tar.bz2
Binary files differ
diff --git a/data/xz/_metadata/conflicts b/data/xz/_metadata/conflicts
new file mode 100644
index 000000000..3bc02b4d4
--- /dev/null
+++ b/data/xz/_metadata/conflicts
@@ -0,0 +1 @@
+xz-utils, com.mc.xz
diff --git a/data/xz/_metadata/depends_ b/data/xz/_metadata/depends_
new file mode 100644
index 000000000..d36a64d23
--- /dev/null
+++ b/data/xz/_metadata/depends_
@@ -0,0 +1 @@
+lzma (>=1:0)
diff --git a/data/xz/_metadata/description b/data/xz/_metadata/description
new file mode 100644
index 000000000..67519a2e9
--- /dev/null
+++ b/data/xz/_metadata/description
@@ -0,0 +1 @@
+slower, but better, compression algorithm
diff --git a/data/xz/_metadata/homepage b/data/xz/_metadata/homepage
new file mode 100644
index 000000000..57f36586c
--- /dev/null
+++ b/data/xz/_metadata/homepage
@@ -0,0 +1 @@
+http://tukaani.org/lzma/
diff --git a/data/xz/_metadata/in.1443.00 b/data/xz/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xz/_metadata/in.1443.00
diff --git a/data/xz/_metadata/in.550.58 b/data/xz/_metadata/in.550.58
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/xz/_metadata/in.550.58
diff --git a/data/xz/_metadata/license b/data/xz/_metadata/license
new file mode 120000
index 000000000..af4224931
--- /dev/null
+++ b/data/xz/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/gpl-3 \ No newline at end of file
diff --git a/data/xz/_metadata/maintainer b/data/xz/_metadata/maintainer
new file mode 120000
index 000000000..573d7ebef
--- /dev/null
+++ b/data/xz/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/sbingner \ No newline at end of file
diff --git a/data/xz/_metadata/name b/data/xz/_metadata/name
new file mode 100644
index 000000000..0fdd1036b
--- /dev/null
+++ b/data/xz/_metadata/name
@@ -0,0 +1 @@
+XZ Utils
diff --git a/data/xz/_metadata/priority b/data/xz/_metadata/priority
new file mode 100644
index 000000000..d0b3ce728
--- /dev/null
+++ b/data/xz/_metadata/priority
@@ -0,0 +1 @@
++required
diff --git a/data/xz/_metadata/provides b/data/xz/_metadata/provides
new file mode 100644
index 000000000..f65310ce3
--- /dev/null
+++ b/data/xz/_metadata/provides
@@ -0,0 +1 @@
+xz-utils
diff --git a/data/xz/_metadata/role b/data/xz/_metadata/role
new file mode 100644
index 000000000..52b4d7301
--- /dev/null
+++ b/data/xz/_metadata/role
@@ -0,0 +1 @@
+hacker
diff --git a/data/xz/_metadata/section b/data/xz/_metadata/section
new file mode 100644
index 000000000..888e3e192
--- /dev/null
+++ b/data/xz/_metadata/section
@@ -0,0 +1 @@
+Archiving
diff --git a/data/xz/_metadata/tags b/data/xz/_metadata/tags
new file mode 100644
index 000000000..ad5d50831
--- /dev/null
+++ b/data/xz/_metadata/tags
@@ -0,0 +1 @@
+purpose::console
diff --git a/data/xz/_metadata/version b/data/xz/_metadata/version
new file mode 100644
index 000000000..73ce95023
--- /dev/null
+++ b/data/xz/_metadata/version
@@ -0,0 +1 @@
+5.2.4
diff --git a/data/xz/make.sh b/data/xz/make.sh
new file mode 100644
index 000000000..0bc0e75e5
--- /dev/null
+++ b/data/xz/make.sh
@@ -0,0 +1,6 @@
+pkg:setup
+#pkg:configure --disable-unicode --disable-linux-affinity --libdir='${prefix}/local/lib' --disable-lzmadec --disable-lzmainfo --disable-lzma-links
+pkg:configure --disable-lzmadec --disable-lzmainfo --disable-lzma-links --libdir="\${exec_prefix}/local/lib"
+make -j8
+pkg:install
+pkg: sed -ie 's|/usr/local/lib|${prefix}/local/lib|' /usr/local/lib/pkgconfig/liblzma.pc
diff --git a/data/xz/xz-5.2.4.tar.xz b/data/xz/xz-5.2.4.tar.xz
new file mode 100644
index 000000000..9db0680b6
--- /dev/null
+++ b/data/xz/xz-5.2.4.tar.xz
Binary files differ
diff --git a/data/zanekills.com/_metadata/depends b/data/zanekills.com/_metadata/depends
deleted file mode 100644
index 21096e9fa..000000000
--- a/data/zanekills.com/_metadata/depends
+++ /dev/null
@@ -1 +0,0 @@
-pwncenter.com
diff --git a/data/zanekills.com/_metadata/description b/data/zanekills.com/_metadata/description
deleted file mode 100644
index d038432f0..000000000
--- a/data/zanekills.com/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-this repository has joined The PwnCenter
diff --git a/data/zanekills.com/_metadata/license b/data/zanekills.com/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/zanekills.com/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/zanekills.com/_metadata/maintainer b/data/zanekills.com/_metadata/maintainer
deleted file mode 100644
index 9d15cecd5..000000000
--- a/data/zanekills.com/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Zane Kills <zanekills@aim.com>
diff --git a/data/zanekills.com/_metadata/name b/data/zanekills.com/_metadata/name
deleted file mode 100644
index d57a708b2..000000000
--- a/data/zanekills.com/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-ZaneKills (PwnCenter)
diff --git a/data/zanekills.com/_metadata/role b/data/zanekills.com/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/zanekills.com/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/zanekills.com/_metadata/section b/data/zanekills.com/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/zanekills.com/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/zanekills.com/_metadata/tags b/data/zanekills.com/_metadata/tags
deleted file mode 100644
index 4c8bf1376..000000000
--- a/data/zanekills.com/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository, cydia::obsolete
diff --git a/data/zanekills.com/_metadata/version b/data/zanekills.com/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/zanekills.com/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/zip/_metadata/in.1443.00 b/data/zip/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/zip/_metadata/in.1443.00
diff --git a/data/zip/_metadata/maintainer b/data/zip/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/zip/_metadata/maintainer
+++ b/data/zip/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/zsh/_metadata/depends b/data/zsh/_metadata/depends
new file mode 100644
index 000000000..e089aacc5
--- /dev/null
+++ b/data/zsh/_metadata/depends
@@ -0,0 +1 @@
+dpkg (>= 1.18.25-10)
diff --git a/data/zsh/_metadata/in.1443.00 b/data/zsh/_metadata/in.1443.00
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/data/zsh/_metadata/in.1443.00
diff --git a/data/zsh/_metadata/maintainer b/data/zsh/_metadata/maintainer
index 0fa66e077..573d7ebef 120000
--- a/data/zsh/_metadata/maintainer
+++ b/data/zsh/_metadata/maintainer
@@ -1 +1 @@
-../../../people/saurik \ No newline at end of file
+../../../people/sbingner \ No newline at end of file
diff --git a/data/zsh/_metadata/postinst b/data/zsh/_metadata/postinst
new file mode 100755
index 000000000..70fa1d460
--- /dev/null
+++ b/data/zsh/_metadata/postinst
@@ -0,0 +1,17 @@
+#!/bin/zsh
+
+set -e
+
+if [ ! -e /bin/sh ]; then
+ ln -s zsh /bin/sh
+fi
+
+case "$1" in
+ abort-remove|configure)
+ dpkg-divert --quiet --local --divert /bin/sh.distrib /bin/sh
+ update-alternatives --quiet --install /bin/sh sh /bin/zsh 100 || true
+ ;;
+ *)
+ exit 0
+ ;;
+esac
diff --git a/data/zsh/_metadata/prerm b/data/zsh/_metadata/prerm
new file mode 100755
index 000000000..bf7fadd2e
--- /dev/null
+++ b/data/zsh/_metadata/prerm
@@ -0,0 +1,25 @@
+#!/bin/zsh
+
+set -e
+
+case "$1" in
+ upgrade)
+ ;;
+
+ remove|deconfigure)
+ update-alternatives --quiet --remove sh /bin/zsh
+ dpkg-divert --quiet --remove /bin/sh
+ if [ ! -e /bin/sh ]; then
+ echo There would be no shell!
+ ln -s zsh /bin/sh
+ exit 1
+ fi
+ ;;
+
+ failed-upgrade)
+ ;;
+ *)
+ echo "prerm called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
diff --git a/data/zsh/_metadata/version b/data/zsh/_metadata/version
index 5d72fe47e..64ff7ded7 100644
--- a/data/zsh/_metadata/version
+++ b/data/zsh/_metadata/version
@@ -1 +1 @@
-4.3.10
+5.7.1
diff --git a/data/zsh/make.sh b/data/zsh/make.sh
index 1aab01d52..85f622e34 100644
--- a/data/zsh/make.sh
+++ b/data/zsh/make.sh
@@ -1,4 +1,5 @@
pkg:setup
+cp ${PKG_BASE}/config.sub .
pkg:configure ac_cv_c_stack_direction=-1 zsh_cv_rlimit_vmem_is_rss=no zsh_cv_rlimit_vmem_is_as=no zsh_cv_rlimit_rss_is_as=yes zsh_cv_sys_fifo=no zsh_cv_sys_link=yes zsh_cv_sys_killesrch=yes zsh_cv_sys_sigsuspend=yes zsh_cv_sys_tcsetpgrp=yes zsh_cv_sys_getpwnam_faked=no zsh_cv_sys_elf=no zsh_cv_func_dlsym_needs_underscore=no zsh_cv_path_utmpx=/var/run/utmpx --enable-function-subdirs --bindir=/bin
pkg:make
pkg:install
diff --git a/data/zsh/shebang.diff b/data/zsh/shebang.diff
new file mode 100644
index 000000000..21d2d4e75
--- /dev/null
+++ b/data/zsh/shebang.diff
@@ -0,0 +1,21 @@
+diff -ur zsh-5.7.1/Src/exec.c zsh-5.7.1+iPhone/Src/exec.c
+--- zsh-5.7.1/Src/exec.c 2019-01-31 14:37:34.000000000 -1000
++++ zsh-5.7.1+iPhone/Src/exec.c 2019-03-29 16:26:28.000000000 -1000
+@@ -492,7 +492,7 @@
+ * then check for an errno equal to ENOEXEC. This errno is set *
+ * if the process file has the appropriate access permission, *
+ * but has an invalid magic number in its header. */
+- if ((eno = errno) == ENOEXEC || eno == ENOENT) {
++ if ((eno = errno) == ENOEXEC || eno == ENOENT || eno == EPERM) {
+ char execvebuf[POUNDBANGLIMIT + 1], *ptr, *ptr2, *argv0;
+ int fd, ct, t0;
+
+@@ -546,7 +546,7 @@
+ execve(ptr2, argv - 1, newenvp);
+ }
+ }
+- } else if (eno == ENOEXEC) {
++ } else if (eno == ENOEXEC || eno == EPERM) {
+ for (t0 = 0; t0 != ct; t0++)
+ if (!execvebuf[t0])
+ break;
diff --git a/data/zsh/zsh-4.3.10.tar.bz2 b/data/zsh/zsh-4.3.10.tar.bz2
deleted file mode 100644
index 56c92a605..000000000
--- a/data/zsh/zsh-4.3.10.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/data/zsh/zsh-5.7.1.tar.xz b/data/zsh/zsh-5.7.1.tar.xz
new file mode 100644
index 000000000..321d9a34e
--- /dev/null
+++ b/data/zsh/zsh-5.7.1.tar.xz
Binary files differ
diff --git a/data/zuijlen.eu/_metadata/conflicts b/data/zuijlen.eu/_metadata/conflicts
deleted file mode 100644
index d0ce9ee5e..000000000
--- a/data/zuijlen.eu/_metadata/conflicts
+++ /dev/null
@@ -1 +0,0 @@
-eu.zuijlen.repo
diff --git a/data/zuijlen.eu/_metadata/description b/data/zuijlen.eu/_metadata/description
deleted file mode 100644
index 8451e3f50..000000000
--- a/data/zuijlen.eu/_metadata/description
+++ /dev/null
@@ -1 +0,0 @@
-Zuijlen.eu's APT repository
diff --git a/data/zuijlen.eu/_metadata/extrainst_ b/data/zuijlen.eu/_metadata/extrainst_
deleted file mode 100755
index 298f0d765..000000000
--- a/data/zuijlen.eu/_metadata/extrainst_
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == install || $1 == upgrade ]]; then
- /usr/bin/apt-key add /usr/share/keyrings/zuijlen.eu-keyring.gpg
-fi
diff --git a/data/zuijlen.eu/_metadata/license b/data/zuijlen.eu/_metadata/license
deleted file mode 120000
index b9c4e3684..000000000
--- a/data/zuijlen.eu/_metadata/license
+++ /dev/null
@@ -1 +0,0 @@
-../../../licenses/menes \ No newline at end of file
diff --git a/data/zuijlen.eu/_metadata/maintainer b/data/zuijlen.eu/_metadata/maintainer
deleted file mode 100644
index dceab77f0..000000000
--- a/data/zuijlen.eu/_metadata/maintainer
+++ /dev/null
@@ -1 +0,0 @@
-Remco <remco@zuijlen.eu>
diff --git a/data/zuijlen.eu/_metadata/name b/data/zuijlen.eu/_metadata/name
deleted file mode 100644
index a31b472ab..000000000
--- a/data/zuijlen.eu/_metadata/name
+++ /dev/null
@@ -1 +0,0 @@
-Zuijlen
diff --git a/data/zuijlen.eu/_metadata/prerm b/data/zuijlen.eu/_metadata/prerm
deleted file mode 100755
index a5fb5b2ed..000000000
--- a/data/zuijlen.eu/_metadata/prerm
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [[ $1 == remove ]]; then
- /usr/bin/apt-key del 91549C22
-fi
diff --git a/data/zuijlen.eu/_metadata/role b/data/zuijlen.eu/_metadata/role
deleted file mode 100644
index 762113e87..000000000
--- a/data/zuijlen.eu/_metadata/role
+++ /dev/null
@@ -1 +0,0 @@
-enduser
diff --git a/data/zuijlen.eu/_metadata/section b/data/zuijlen.eu/_metadata/section
deleted file mode 100644
index a1854b6a5..000000000
--- a/data/zuijlen.eu/_metadata/section
+++ /dev/null
@@ -1 +0,0 @@
-Repositories
diff --git a/data/zuijlen.eu/_metadata/tags b/data/zuijlen.eu/_metadata/tags
deleted file mode 100644
index dee3c5b11..000000000
--- a/data/zuijlen.eu/_metadata/tags
+++ /dev/null
@@ -1 +0,0 @@
-purpose::repository
diff --git a/data/zuijlen.eu/_metadata/version b/data/zuijlen.eu/_metadata/version
deleted file mode 100644
index 573541ac9..000000000
--- a/data/zuijlen.eu/_metadata/version
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/data/zuijlen.eu/_metadata/zlib b/data/zuijlen.eu/_metadata/zlib
deleted file mode 100644
index 7a4571271..000000000
--- a/data/zuijlen.eu/_metadata/zlib
+++ /dev/null
@@ -1 +0,0 @@
-bzip2
diff --git a/data/zuijlen.eu/apt.zuijlen.eu.png b/data/zuijlen.eu/apt.zuijlen.eu.png
deleted file mode 100644
index 8d408aa9a..000000000
--- a/data/zuijlen.eu/apt.zuijlen.eu.png
+++ /dev/null
Binary files differ
diff --git a/data/zuijlen.eu/make.sh b/data/zuijlen.eu/make.sh
deleted file mode 100644
index 31f11d17d..000000000
--- a/data/zuijlen.eu/make.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-pkg: mkdir -p /etc/apt/sources.list.d
-pkg: cp -a %/zuijlen.eu.list /etc/apt/sources.list.d
-pkg: mkdir -p /usr/share/keyrings
-pkg: cp -a %/zuijlen.eu-keyring.gpg /usr/share/keyrings/zuijlen.eu-keyring.gpg
-pkg: mkdir -p /Applications/Cydia.app/Sources
-pkg: cp -a %/apt.zuijlen.eu.png /Applications/Cydia.app/Sources/apt.zuijlen.eu.png
diff --git a/data/zuijlen.eu/zuijlen.eu-keyring.gpg b/data/zuijlen.eu/zuijlen.eu-keyring.gpg
deleted file mode 100644
index 37ae00e65..000000000
--- a/data/zuijlen.eu/zuijlen.eu-keyring.gpg
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-mQGiBEjjbTURBADM2xMfMuShON4/aXPemkPMG0pp0K5nHbaNj4JlQALhiBcpI0KU
-RMSq/O4j4rVsEicy54/+ou39eK71upDyHMsQtp1EW7wWPNuQYEa+yT2PdRTcqN9U
-j3xRviVoMGIQDPFM9tI2k4EisvcjCUZr8U8SbcV4b2ekr7kynfvXevXCDwCg6x0v
-4t19/ulqMSEKKzdxKAmqg2kD/0+Y0GefQUjVOf5Ia5llak5uRVdX7hHfV5wWpdeu
-hF4qkzSsfa8Dw092ZqHGVLxdVu55+UZPzrfn1y0j94+rFSNQpnBq1+sodkqqXMJn
-eBsnLtHpqmnu/wpGbupI4Y5xBQNMJ+wORbh+tEUSo9Av8Tltc06TwZgey8iHRmAl
-QFnNBACwpRD9D2UoEyRmEVp5+J8fkKAg0uILMb5g07IKd1s0Vr6P5EQesB4ucMGB
-sYsAk+iM9sePdH2yUEaPO5RulyVx9HMI7cRLclZ9rBVJiCVVobvMXGg0KNWomkCk
-IMj5prCniQcQiqoNfSeqQNaXhojCKhYZIgaQqbt9EewPp92zSbQ8UmVtY28gdmFu
-IFp1aWpsZW4gKFp1aWpsZW4uZXUgUmVwb3NpdG9yeSkgPHJlbWNvQHp1aWpsZW4u
-ZXU+iGAEExECACAFAkjjbTUCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRAA
-ZsxSkVScIoU6AKChp9zg+PsLUuT/pXaFVMSrLfD3ewCgtmQpxA8bbuzaCs7+vB8b
-tXi6fC4=
-=FByv
------END PGP PUBLIC KEY BLOCK-----
diff --git a/data/zuijlen.eu/zuijlen.eu.list b/data/zuijlen.eu/zuijlen.eu.list
deleted file mode 100644
index 5ebd41f6c..000000000
--- a/data/zuijlen.eu/zuijlen.eu.list
+++ /dev/null
@@ -1,6 +0,0 @@
-# do not edit this file to add your own custom sources
-# this file is subject to be upgraded as part of a package
-# either add your own .list file to /etc/apt/sources.list.d
-# or add your entry to the global /etc/apt/sources.list file
-
-deb http://apt.zuijlen.eu/ iphone main